SysPrizeServiceImpl.java 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.ydtech.modules.admin.dao.SysPrizeDao;
  5. import com.ydtech.modules.admin.model.SysPrize;
  6. import com.ydtech.modules.admin.model.SysWinningRecord;
  7. import com.ydtech.modules.admin.model.po.SysUserAccount;
  8. import com.ydtech.modules.admin.service.SysPrizeService;
  9. import com.ydtech.modules.admin.service.SysUserAccountService;
  10. import com.ydtech.modules.admin.service.SysWinningRecordService;
  11. import com.ydtech.modules.base.controller.BaseController;
  12. import org.springframework.stereotype.Service;
  13. import javax.annotation.Resource;
  14. import java.util.Date;
  15. import java.util.List;
  16. import java.util.Random;
  17. @Service
  18. public class SysPrizeServiceImpl extends ServiceImpl<SysPrizeDao, SysPrize> implements SysPrizeService {
  19. @Resource
  20. private SysPrizeService sysPrizeService;
  21. @Resource
  22. private SysWinningRecordService sysWinningRecordService;
  23. @Resource
  24. private SysUserAccountService sysUserAccountService;
  25. public String getPrize() {
  26. List<SysPrize> list = sysPrizeService.list();
  27. double totalProbability = 0.0;
  28. for (SysPrize prize : list) {
  29. totalProbability += prize.getProbability();
  30. }
  31. Random random = new Random();
  32. double rand = random.nextDouble() * totalProbability;
  33. double cumulativeProbability = 0.0;
  34. for (SysPrize prize : list) {
  35. cumulativeProbability += prize.getProbability();
  36. if (rand < cumulativeProbability) {
  37. if (prize.getWinTimes() > 0) {
  38. prize.setWinTimes(prize.getWinTimes() - 1);
  39. sysPrizeService.updateById(prize);
  40. //根据userId查询人员账户相关信息 将中奖金额直接加到账户推广佣金
  41. LambdaQueryWrapper<SysUserAccount> queryWrapper = new LambdaQueryWrapper<>();
  42. queryWrapper.eq(SysUserAccount::getUserId, BaseController.getUser().getId());
  43. SysUserAccount sysUserAccount = sysUserAccountService.getOne(queryWrapper);
  44. sysUserAccount.setPromotion(sysUserAccount.getPromotion().add(prize.getPrizeName()));
  45. sysUserAccountService.updateById(sysUserAccount);
  46. //生成中奖记录
  47. SysWinningRecord sysWinningRecord = new SysWinningRecord();
  48. sysWinningRecord.setPrizeId(prize.getId());
  49. sysWinningRecord.setPrizeName(prize.getPrizeName().toString());
  50. sysWinningRecord.setUserId(BaseController.getUser().getId());
  51. sysWinningRecord.setUserName(BaseController.getUser().getName());
  52. sysWinningRecord.setCreateTime(new Date());
  53. sysWinningRecordService.save(sysWinningRecord);
  54. return prize.getId();
  55. } else {
  56. return "奖品数量不足";
  57. }
  58. }
  59. }
  60. return "您的抽奖机会已用完";
  61. }
  62. public String getVipPrize() {
  63. LambdaQueryWrapper<SysPrize> queryWrapper = new LambdaQueryWrapper<>();
  64. queryWrapper.eq(SysPrize::getId, "1784766525696987137");
  65. SysPrize sysPrize = sysPrizeService.getOne(queryWrapper);
  66. sysPrize.setWinTimes(sysPrize.getWinTimes() - 1);
  67. //生成中奖记录
  68. SysWinningRecord sysWinningRecord = new SysWinningRecord();
  69. sysWinningRecord.setPrizeId(sysPrize.getId());
  70. sysWinningRecord.setPrizeName(sysPrize.getPrizeName().toString());
  71. sysWinningRecord.setUserId(BaseController.getUser().getId());
  72. sysWinningRecord.setUserName(BaseController.getUser().getName());
  73. sysWinningRecord.setCreateTime(new Date());
  74. sysWinningRecordService.save(sysWinningRecord);
  75. return sysPrize.getId();
  76. }
  77. }