package com.ydtech.modules.admin.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.modules.admin.dao.SysPrizeDao; import com.ydtech.modules.admin.model.SysPrize; import com.ydtech.modules.admin.model.SysWinningRecord; import com.ydtech.modules.admin.model.po.SysUserAccount; import com.ydtech.modules.admin.service.SysPrizeService; import com.ydtech.modules.admin.service.SysUserAccountService; import com.ydtech.modules.admin.service.SysWinningRecordService; import com.ydtech.modules.base.controller.BaseController; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Random; @Service public class SysPrizeServiceImpl extends ServiceImpl implements SysPrizeService { @Resource private SysPrizeService sysPrizeService; @Resource private SysWinningRecordService sysWinningRecordService; @Resource private SysUserAccountService sysUserAccountService; public String getPrize() { List list = sysPrizeService.list(); double totalProbability = 0.0; for (SysPrize prize : list) { totalProbability += prize.getProbability(); } Random random = new Random(); double rand = random.nextDouble() * totalProbability; double cumulativeProbability = 0.0; for (SysPrize prize : list) { cumulativeProbability += prize.getProbability(); if (rand < cumulativeProbability) { if (prize.getWinTimes() > 0) { prize.setWinTimes(prize.getWinTimes() - 1); sysPrizeService.updateById(prize); //根据userId查询人员账户相关信息 将中奖金额直接加到账户推广佣金 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUserAccount::getUserId, BaseController.getUser().getId()); SysUserAccount sysUserAccount = sysUserAccountService.getOne(queryWrapper); sysUserAccount.setPromotion(sysUserAccount.getPromotion().add(prize.getPrizeName())); sysUserAccountService.updateById(sysUserAccount); //生成中奖记录 SysWinningRecord sysWinningRecord = new SysWinningRecord(); sysWinningRecord.setPrizeId(prize.getId()); sysWinningRecord.setPrizeName(prize.getPrizeName().toString()); sysWinningRecord.setUserId(BaseController.getUser().getId()); sysWinningRecord.setUserName(BaseController.getUser().getName()); sysWinningRecord.setCreateTime(new Date()); sysWinningRecordService.save(sysWinningRecord); return prize.getId(); } else { return "奖品数量不足"; } } } return "您的抽奖机会已用完"; } public String getVipPrize() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysPrize::getId, "1784766525696987137"); SysPrize sysPrize = sysPrizeService.getOne(queryWrapper); sysPrize.setWinTimes(sysPrize.getWinTimes() - 1); //生成中奖记录 SysWinningRecord sysWinningRecord = new SysWinningRecord(); sysWinningRecord.setPrizeId(sysPrize.getId()); sysWinningRecord.setPrizeName(sysPrize.getPrizeName().toString()); sysWinningRecord.setUserId(BaseController.getUser().getId()); sysWinningRecord.setUserName(BaseController.getUser().getName()); sysWinningRecord.setCreateTime(new Date()); sysWinningRecordService.save(sysWinningRecord); return sysPrize.getId(); } }