src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -10,6 +10,10 @@ STATIC_BONUS("BONUS_TYPE", "STATIC_BONUS"), DYNAMIC_BONUS("BONUS_TYPE", "DYNAMIC_BONUS"), INDRECT_BONUS("BONUS_TYPE", "INDRECT_BONUS"), //积分中奖概率 WIN_SCORE("WIN_PROBABILITY", "WIN_SCORE"), //佣金中奖概率 WIN_CASH("WIN_PROBABILITY", "WIN_CASH"), AGENT_BONUS("BONUS_TYPE", "AGENT_BONUS"); private String type; src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java
@@ -1,11 +1,18 @@ package cc.mrbird.febs.mall.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.ApiMallActListDto; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; import cc.mrbird.febs.mall.dto.MallGoodsQueryDto; import cc.mrbird.febs.mall.service.IApiMallActService; import cc.mrbird.febs.mall.vo.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; @Slf4j @RestController @@ -16,4 +23,41 @@ private final IApiMallActService iApiMallActService; @ApiOperation(value = "获取活动列表", notes = "获取活动列表") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMallActListVo.class) }) @PostMapping(value = "/findMallGoodsList") public FebsResponse findMallGoodsList(@RequestBody ApiMallActListDto apiMallActListDto) { return new FebsResponse().success().data(iApiMallActService.findApiMallActListInPage(apiMallActListDto)); } @ApiOperation(value = "获取活动详情", notes = "获取活动详情") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMallActDetailsVo.class) }) @GetMapping(value = "/findApiMallActDetailsById/{id}") public FebsResponse findApiMallActDetailsById(@PathVariable("id") Long id) { return new FebsResponse().success().data(iApiMallActService.findApiMallActDetailsById(id)); } @ApiOperation(value = "我的抽奖记录", notes = "我的抽奖记录") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMallActWinDetailsVo.class) }) @PostMapping(value = "/findApiMallActWinDetailsById") public FebsResponse findApiMallActWinDetailsById(@RequestBody ApiMallActWinDetailsDto apiMallActWinDetailsDto) { return new FebsResponse().success().data(iApiMallActService.findApiMallActWinDetailsInPage(apiMallActWinDetailsDto)); } @ApiOperation(value = "抽奖", notes = "抽奖") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMallAwardDetailsVo.class) }) @GetMapping(value = "/luckDraw/{actId}") public FebsResponse luckDraw(@PathVariable("actId") long actId) { return new FebsResponse().success().data(iApiMallActService.luckDraw(actId)); } } src/main/java/cc/mrbird/febs/mall/dto/AddMallActDto.java
@@ -15,6 +15,8 @@ private String actCode; //活动名称 private String actName; //活动图片 private String actImage; //开始时间 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actStartTime; src/main/java/cc/mrbird/febs/mall/dto/ApiMallActListDto.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiMallActListDto", description = "参数接收类") public class ApiMallActListDto { @ApiModelProperty(value = "页码", example = "1") private Integer pageNow; @ApiModelProperty(value = "每页数量", example = "10") private Integer pageSize; @ApiModelProperty(value = "查询", example = "123") private String query; } src/main/java/cc/mrbird/febs/mall/dto/ApiMallActWinDetailsDto.java
New file @@ -0,0 +1,22 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiMallActWinDetailsDto", description = "参数接收类") public class ApiMallActWinDetailsDto { @ApiModelProperty(value = "页码", example = "1") private Integer pageNow; @ApiModelProperty(value = "每页数量", example = "10") private Integer pageSize; @ApiModelProperty(value = "活动ID", example = "1") private Long actId; @ApiModelProperty(hidden = true) private Long memberId; } src/main/java/cc/mrbird/febs/mall/dto/MallActUpdateDto.java
@@ -15,6 +15,8 @@ private String actCode; //活动名称 private String actName; //活动图片 private String actImage; //开始时间 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actStartTime; src/main/java/cc/mrbird/febs/mall/entity/MallActLuckdrawRecord.java
@@ -12,6 +12,14 @@ @TableName("mall_act_luckdraw_record") public class MallActLuckdrawRecord extends BaseEntity { /** * 中奖 */ public static final Integer STATUS_ENABLE = 1; /** * 没有中奖 */ public static final Integer STATUS_DISABLED = 0; //参与人ID private Long memberId; //活动ID src/main/java/cc/mrbird/febs/mall/entity/MallActSet.java
@@ -28,6 +28,8 @@ private String actCode; //活动名称 private String actName; //活动图片 private String actImage; //开始时间 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actStartTime; src/main/java/cc/mrbird/febs/mall/mapper/MallActAwardSetMapper.java
@@ -11,4 +11,6 @@ void deleteByActId(Long id); List<MallActAwardSet> selectMallActAwardByActId(@Param("id") long id); List<MallActAwardSet> selectMallActAwardByActIdAndAwardType(@Param("actId")long actId, @Param("awardType")Integer awardType); } src/main/java/cc/mrbird/febs/mall/mapper/MallActLuckdrawRecordMapper.java
@@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import java.util.List; public interface MallActLuckdrawRecordMapper extends BaseMapper<MallActLuckdrawRecord> { IPage<AdminMallActLuckdrawRecordVo> selectMallActLuckdrawsInPage(Page<AdminMallActLuckdrawRecordVo> page, @Param("record")MallActLuckdrawRecord mallActLuckdrawRecord); List<MallActLuckdrawRecord> selectRecordByMemberIdAndActId(@Param("memberId")Long memberId, @Param("actId")long actId); } src/main/java/cc/mrbird/febs/mall/mapper/MallActSetMapper.java
@@ -1,7 +1,9 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.dto.ApiMallActListDto; import cc.mrbird.febs.mall.entity.MallActSet; import cc.mrbird.febs.mall.vo.AdminMallActSetVo; import cc.mrbird.febs.mall.vo.ApiMallActListVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -11,4 +13,5 @@ IPage<AdminMallActSetVo> selectMallActsInPage(Page<AdminMallActSetVo> page, @Param("record")MallActSet mallActSet); IPage<ApiMallActListVo> selectApiMallActListInPage(@Param("record")ApiMallActListDto apiMallActListDto, Page<ApiMallActListVo> page); } src/main/java/cc/mrbird/febs/mall/mapper/MallActWinRecordMapper.java
@@ -1,11 +1,19 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; import cc.mrbird.febs.mall.entity.MallActWinRecord; import cc.mrbird.febs.mall.vo.ApiMallActWinDetailsVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import java.util.List; public interface MallActWinRecordMapper extends BaseMapper<MallActWinRecord> { MallActWinRecord selectByLuckDrawId(@Param("id")long id); IPage<ApiMallActWinDetailsVo> selectApiMallActWinDetailsListInPage(@Param("record")ApiMallActWinDetailsDto apiMallActWinDetailsDto, Page<ApiMallActWinDetailsVo> page); } src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java
@@ -1,4 +1,20 @@ package cc.mrbird.febs.mall.service; import cc.mrbird.febs.mall.dto.ApiMallActListDto; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; import cc.mrbird.febs.mall.vo.ApiMallActDetailsVo; import cc.mrbird.febs.mall.vo.ApiMallActListVo; import cc.mrbird.febs.mall.vo.ApiMallActWinDetailsVo; import cc.mrbird.febs.mall.vo.ApiMallAwardDetailsVo; import com.baomidou.mybatisplus.core.metadata.IPage; public interface IApiMallActService { IPage<ApiMallActListVo> findApiMallActListInPage(ApiMallActListDto apiMallActListDto); ApiMallActDetailsVo findApiMallActDetailsById(Long id); IPage<ApiMallActWinDetailsVo> findApiMallActWinDetailsInPage(ApiMallActWinDetailsDto apiMallActWinDetailsDto); ApiMallAwardDetailsVo luckDraw(long actId); } src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallActServiceImpl.java
@@ -57,6 +57,10 @@ if (StrUtil.isEmpty(actCode)) { return new FebsResponse().fail().message("活动编码不能为空"); } String actImage = addMallActDto.getActImage(); if (StrUtil.isEmpty(actImage)) { return new FebsResponse().fail().message("活动图片不能为空"); } Date actStartTime = addMallActDto.getActStartTime(); if(ObjectUtil.isEmpty(actStartTime)){ return new FebsResponse().fail().message("开始日期不能为空"); @@ -109,6 +113,7 @@ MallActSet mallActSet = new MallActSet(); mallActSet.setActCode(actCode); mallActSet.setActName(actName); mallActSet.setActImage(actImage); mallActSet.setActStartTime(actStartTime); mallActSet.setActEndTime(actEndTime); mallActSet.setActScoreCnt(actScoreCnt); @@ -206,6 +211,10 @@ if (StrUtil.isEmpty(actCode)) { return new FebsResponse().fail().message("活动编码不能为空"); } String actImage = mallActUpdateDto.getActImage(); if (StrUtil.isEmpty(actImage)) { return new FebsResponse().fail().message("活动图片不能为空"); } Date actStartTime = mallActUpdateDto.getActStartTime(); if(ObjectUtil.isEmpty(actStartTime)){ return new FebsResponse().fail().message("开始日期不能为空"); @@ -257,6 +266,7 @@ } mallActSet.setActCode(actCode); mallActSet.setActName(actName); mallActSet.setActImage(actImage); mallActSet.setActStartTime(actStartTime); mallActSet.setActEndTime(actEndTime); mallActSet.setActScoreCnt(actScoreCnt); src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java
@@ -1,15 +1,539 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.mall.entity.MallActSet; import cc.mrbird.febs.mall.mapper.MallActSetMapper; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.dto.ApiMallActListDto; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallActService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.util.*; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Slf4j @Service @RequiredArgsConstructor public class ApiMallActServiceImpl extends ServiceImpl<MallActSetMapper, MallActSet> implements IApiMallActService { private final MallActAwardSetMapper mallActAwardSetMapper; private final MallMemberMapper mallMemberMapper; private final MallActWinRecordMapper mallActWinRecordMapper; private final MallActLuckdrawRecordMapper mallActLuckdrawRecordMapper; private final MallMemberWalletMapper mallMemberWalletMapper; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @Override public IPage<ApiMallActListVo> findApiMallActListInPage(ApiMallActListDto apiMallActListDto) { Page<ApiMallActListVo> page = new Page<>(apiMallActListDto.getPageNow(), apiMallActListDto.getPageSize()); return this.baseMapper.selectApiMallActListInPage(apiMallActListDto, page); } @Override public ApiMallActDetailsVo findApiMallActDetailsById(Long id) { MallActSet mallActSet = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(mallActSet)){ throw new FebsException("活动不存在"); } ApiMallActDetailsVo apiMallActDetailsVo = new ApiMallActDetailsVo(); apiMallActDetailsVo.setId(mallActSet.getId()); apiMallActDetailsVo.setActName(mallActSet.getActName()); apiMallActDetailsVo.setActCode(mallActSet.getActCode()); apiMallActDetailsVo.setActImage(mallActSet.getActImage()); apiMallActDetailsVo.setActStartTime(mallActSet.getActStartTime()); apiMallActDetailsVo.setActEndTime(mallActSet.getActEndTime()); apiMallActDetailsVo.setActScoreCnt(mallActSet.getActScoreCnt()); apiMallActDetailsVo.setActRemark(mallActSet.getActRemark()); List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActId(id); if(CollUtil.isNotEmpty(mallActAwardSets)){ List<ApiMallActAwardListDto> apiMallActAwardListDtos = new ArrayList<>(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ ApiMallActAwardListDto apiMallActAwardListDto = new ApiMallActAwardListDto(); apiMallActAwardListDto.setId(mallActAwardSet.getId()); apiMallActAwardListDto.setAwardName(mallActAwardSet.getAwardName()); apiMallActAwardListDto.setAwardImage(mallActAwardSet.getAwardImage()); apiMallActAwardListDto.setAwardTotal(mallActAwardSet.getAwardTotal()); apiMallActAwardListDto.setAwardCnt(mallActAwardSet.getAwardCnt()); apiMallActAwardListDto.setAwardType(mallActAwardSet.getAwardType()); apiMallActAwardListDto.setAwardValue(mallActAwardSet.getAwardValue()); apiMallActAwardListDtos.add(apiMallActAwardListDto); } apiMallActDetailsVo.setApiMallActAwardListDtos(apiMallActAwardListDtos); } return apiMallActDetailsVo; } @Override public IPage<ApiMallActWinDetailsVo> findApiMallActWinDetailsInPage(ApiMallActWinDetailsDto apiMallActWinDetailsDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = mallMemberMapper.selectById(memberId); if(ObjectUtil.isEmpty(mallMember)){ throw new FebsException("用户不存在"); } apiMallActWinDetailsDto.setMemberId(memberId); Long actId = apiMallActWinDetailsDto.getActId(); MallActSet mallActSet = this.baseMapper.selectById(actId); if(ObjectUtil.isEmpty(mallActSet)){ throw new FebsException("活动不存在"); } Page<ApiMallActWinDetailsVo> page = new Page<>(apiMallActWinDetailsDto.getPageNow(), apiMallActWinDetailsDto.getPageSize()); return mallActWinRecordMapper.selectApiMallActWinDetailsListInPage(apiMallActWinDetailsDto,page); } @Override @Transactional(rollbackFor = Exception.class) public ApiMallAwardDetailsVo luckDraw(long actId) { ApiMallAwardDetailsVo apiMallAwardDetailsVo = new ApiMallAwardDetailsVo(); Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = mallMemberMapper.selectById(memberId); if(ObjectUtil.isEmpty(mallMember)){ throw new FebsException("用户不存在"); } MallActSet mallActSet = this.baseMapper.selectById(actId); if(ObjectUtil.isEmpty(mallActSet)){ throw new FebsException("活动不存在"); } Integer actStatus = mallActSet.getActStatus(); if(MallActSet.ACT_STATUS_DISABLED == actStatus){ throw new FebsException("活动还没开始"); } /** * 获取用户积分数,判断能不能抽奖 * 减少对应的积分数量 * 较少奖品的已抽奖 * 生成一条抽奖记录 */ MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); if(ObjectUtil.isEmpty(wallet)){ throw new FebsException("账户不存在"); } BigDecimal commission = wallet.getCommission(); BigDecimal prizeScore = wallet.getPrizeScore(); Integer actScoreCnt = mallActSet.getActScoreCnt(); if(prizeScore.compareTo(new BigDecimal(actScoreCnt))<0){ throw new FebsException("竞猜积分不足"); } /** * 中奖概率 20% * 每次抽奖产生一个随机数要大于8,则中奖 * 历史10条抽奖记录有中奖过,中奖记录少于两条,则中奖 */ //获取中奖概率 DataDictionaryCustom scoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.WIN_SCORE.getType(), DataDictionaryEnum.WIN_SCORE.getCode()); DataDictionaryCustom cashDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.WIN_CASH.getType(), DataDictionaryEnum.WIN_CASH.getCode()); String scoreDicValue = scoreDic.getValue(); String cashDicValue = cashDic.getValue(); BigDecimal totalProbability = new BigDecimal(scoreDicValue).add(new BigDecimal(cashDicValue)); //获取那个更大一点的几率 BigDecimal maxProbability = BigDecimal.ZERO; BigDecimal minProbability = BigDecimal.ZERO; Integer maxAwardType = 0; Integer minAwardType = 0; if(new BigDecimal(scoreDicValue).compareTo(new BigDecimal(cashDicValue)) < 0){ maxProbability = new BigDecimal(cashDicValue); minProbability = new BigDecimal(scoreDicValue); maxAwardType = MallActAwardSet.AWARD_TYPE_YJ; minAwardType = MallActAwardSet.AWARD_TYPE_JF; }else{ maxProbability = new BigDecimal(scoreDicValue); minProbability = new BigDecimal(cashDicValue); maxAwardType = MallActAwardSet.AWARD_TYPE_JF; minAwardType = MallActAwardSet.AWARD_TYPE_YJ; } BigDecimal multiply = totalProbability.multiply(new BigDecimal(100)); BigDecimal failureScope = new BigDecimal(100).subtract(multiply); int randomInt = RandomUtil.randomInt(1, 100); //小于failureScope这个数字,则没中奖 if(new BigDecimal(randomInt).compareTo(failureScope) <= 0){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else if(new BigDecimal(randomInt).compareTo(failureScope) > 0 && new BigDecimal(randomInt).compareTo(failureScope.add(maxProbability.multiply(new BigDecimal(100)))) <= 0){ //大于failureScope.add(maxProbability.multiply(new BigDecimal(100)))这个数字,则中奖 //获取最新的十条抽奖记录 List<MallActLuckdrawRecord> records = mallActLuckdrawRecordMapper.selectRecordByMemberIdAndActId(memberId,actId); if(CollUtil.isNotEmpty(records)){ //中奖次数 Integer count = 0; for(MallActLuckdrawRecord mallActLuckdrawRecord : records){ Integer status = mallActLuckdrawRecord.getStatus(); if(MallActLuckdrawRecord.STATUS_ENABLE == status){ count = count + 1; } } if(new BigDecimal(count).compareTo(maxProbability.multiply(new BigDecimal(10))) < 0){ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,maxAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } }else{ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } } }else{ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,maxAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } } }else{ //中奖 //获取最新的十条抽奖记录 List<MallActLuckdrawRecord> records = mallActLuckdrawRecordMapper.selectRecordByMemberIdAndActId(memberId,actId); if(CollUtil.isNotEmpty(records)){ //中奖次数 Integer count = 0; for(MallActLuckdrawRecord mallActLuckdrawRecord : records){ Integer status = mallActLuckdrawRecord.getStatus(); if(MallActLuckdrawRecord.STATUS_ENABLE == status){ count = count + 1; } } if(new BigDecimal(count).compareTo(minProbability.multiply(new BigDecimal(10))) < 0){ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,minAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } }else{ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } } }else{ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,minAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } } } //扣竞猜积分 prizeScore = prizeScore.subtract(new BigDecimal(actScoreCnt)); wallet.setPrizeScore(prizeScore); wallet.setCommission(commission); mallMemberWalletMapper.updateAmountWithVersion(wallet); return apiMallAwardDetailsVo; } } src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java
@@ -23,6 +23,10 @@ @ApiModelProperty(value = "活动名称") private String actName; //活动图片 @ApiModelProperty(value = "活动图片") private String actImage; //开始时间 src/main/java/cc/mrbird/febs/mall/vo/ApiMallActAwardListDto.java
New file @@ -0,0 +1,26 @@ package cc.mrbird.febs.mall.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiMallActAwardListDto", description = "返回参数类") public class ApiMallActAwardListDto { @ApiModelProperty(value = "奖品ID") private Long id; @ApiModelProperty(value = "奖品名称") private String awardName; @ApiModelProperty(value = "奖品图片") private String awardImage; @ApiModelProperty(value = "奖品总数") private Integer awardTotal; @ApiModelProperty(value = "已中奖数量") private Integer awardCnt; @ApiModelProperty(value = "类型 1:积分 2:佣金 3:谢谢参与") private Integer awardType; @ApiModelProperty(value = "获得积分或佣金数量(奖金)") private Integer awardValue; } src/main/java/cc/mrbird/febs/mall/vo/ApiMallActDetailsVo.java
New file @@ -0,0 +1,40 @@ package cc.mrbird.febs.mall.vo; import cc.mrbird.febs.mall.dto.MallActAwardUpdateDto; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; @Data @ApiModel(value = "ApiMallActDetailsVo", description = "返回参数类") public class ApiMallActDetailsVo { @ApiModelProperty(value = "活动ID") private Long id; @ApiModelProperty(value = "活动编码") private String actCode; @ApiModelProperty(value = "活动名称") private String actName; @ApiModelProperty(value = "活动图片") private String actImage; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actStartTime; @ApiModelProperty(value = "结束时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actEndTime; @ApiModelProperty(value = "每次参与需要积分数目") private Integer actScoreCnt; @ApiModelProperty(value = "活动状态 1-开启 0-关闭") private Integer actStatus; @ApiModelProperty(value = "活动说明") private String actRemark; @ApiModelProperty(value = "活动奖品") private List<ApiMallActAwardListDto> apiMallActAwardListDtos; } src/main/java/cc/mrbird/febs/mall/vo/ApiMallActListVo.java
New file @@ -0,0 +1,34 @@ package cc.mrbird.febs.mall.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @Data @ApiModel(value = "ApiMallActListVo", description = "返回参数类") public class ApiMallActListVo { @ApiModelProperty(value = "活动ID") private Long id; @ApiModelProperty(value = "活动编码") private String actCode; @ApiModelProperty(value = "活动名称") private String actName; @ApiModelProperty(value = "活动图片") private String actImage; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actStartTime; @ApiModelProperty(value = "结束时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date actEndTime; @ApiModelProperty(value = "每次参与需要积分数目") private Integer actScoreCnt; @ApiModelProperty(value = "活动状态 1-开启 0-关闭") private Integer actStatus; @ApiModelProperty(value = "活动说明") private String actRemark; } src/main/java/cc/mrbird/febs/mall/vo/ApiMallActWinDetailsVo.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.mall.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiMallActWinDetailsVo", description = "返回参数类") public class ApiMallActWinDetailsVo { @ApiModelProperty(value = "奖品名称") private String awardName; @ApiModelProperty(value = "奖品图片") private String awardImage; @ApiModelProperty(value = "类型 1:积分 2:佣金 3:谢谢参与") private Integer awardType; @ApiModelProperty(value = "获得积分或佣金数量(奖金)") private Integer awardValue; } src/main/java/cc/mrbird/febs/mall/vo/ApiMallAwardDetailsVo.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.mall.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiMallAwardDetailsVo", description = "返回参数类") public class ApiMallAwardDetailsVo { @ApiModelProperty(value = "奖品名称") private String awardName; @ApiModelProperty(value = "奖品图片") private String awardImage; @ApiModelProperty(value = "类型 1:积分 2:佣金 3:谢谢参与") private Integer awardType; @ApiModelProperty(value = "获得积分或佣金数量(奖金)") private Integer awardValue; } src/main/resources/mapper/modules/MallActAwardSetMapper.xml
@@ -10,4 +10,8 @@ select a.* from mall_act_award_set a where a.act_id = #{id} </select> <select id="selectMallActAwardByActIdAndAwardType" resultType="cc.mrbird.febs.mall.entity.MallActAwardSet"> select a.* from mall_act_award_set a where a.act_id = #{actId} and a.award_type = #{awardType} </select> </mapper> src/main/resources/mapper/modules/MallActLuckdrawRecordMapper.xml
@@ -27,4 +27,12 @@ order by a.created_time desc </select> <select id="selectRecordByMemberIdAndActId" resultType="cc.mrbird.febs.mall.entity.MallActLuckdrawRecord"> select a.* from mall_act_luckdraw_record a where a.member_id = #{memberId} and a.act_id = #{actId} order by a.created_time desc limit 0,10 </select> </mapper> src/main/resources/mapper/modules/MallActSetMapper.xml
@@ -7,6 +7,7 @@ a.id, a.act_code actCode, a.act_name actName, a.act_image actImage, a.act_start_time actStartTime, a.act_end_time actEndTime, a.act_score_cnt actScoreCnt, @@ -23,4 +24,19 @@ order by a.created_time desc </select> <select id="selectApiMallActListInPage" resultType="cc.mrbird.febs.mall.vo.ApiMallActListVo"> select a.* from mall_act_set a <where> <if test="record != null"> <if test="record.query != null and record.query != ''"> and a.act_name like CONCAT('%', CONCAT(#{record.query}, '%')) </if> </if> </where> order by a.act_start_time desc </select> </mapper> src/main/resources/mapper/modules/MallActWinRecordMapper.xml
@@ -6,4 +6,26 @@ select a.* from mall_act_win_record a where a.record_id = #{id} </select> <select id="selectApiMallActWinDetailsListInPage" resultType="cc.mrbird.febs.mall.vo.ApiMallActWinDetailsVo"> select a.award_name awardName, a.award_type awardType, a.award_value awardValue, b.award_image awardImage from mall_act_win_record a left join mall_act_award_set b on a.award_id = b.id <where> <if test="record != null"> <if test="record.actId != null and record.actId != ''"> and a.act_id = #{actId} </if> <if test="record.memberId != null and record.memberId != ''"> and a.member_id = #{memberId} </if> </if> </where> order by a.act_start_time desc </select> </mapper> src/main/resources/templates/febs/views/modules/act/actAddNew.html
@@ -49,6 +49,26 @@ </div> </div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">活动缩略图:</label> <div class="layui-input-block"> <div class="layui-upload"> <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test2">上传</button> <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> <div class="layui-upload-list"> <img class="layui-upload-img" id="demo2" style="width: 100px" > </div> </blockquote> </div> </div> </div> <div class="layui-form-item febs-hide"> <label class="layui-form-label">缩略图链接:</label> <div class="layui-input-block"> <input type="text" id="actImage" lay-verify="required" name="actImage" autocomplete="off" class="layui-input" readonly> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">活动说明:</label> @@ -164,6 +184,16 @@ }); }) //图片上传 upload.render({ elem: '#test2' ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 ,done: function(res){ $('#demo2').attr('src', res.data.src); $("#actImage").val(res.data.src); } }); var tableAwardData=[]; var tableIns = table.render({ elem: '#multiAwardSku' @@ -174,7 +204,7 @@ {type: 'checkbox'} ,{field: 'index', title: '序号', width:70} ,{field: 'awardName', title: '奖品名称', edit:'text'} ,{field: 'awardImage', title: '奖品图'} ,{field: 'awardImage', title: '奖品图', hide:true} ,{templet: '#awardtableImgUpload', title: '缩略图', width:150} ,{field: 'awardTotal', title: '奖品总数', edit:'text'} ,{field: 'awardCnt', title: '已中奖数量', edit:'text'} src/main/resources/templates/febs/views/modules/act/actList.html
@@ -117,6 +117,21 @@ } }); } if (layEvent === 'seeImgThumb') { var t = $view.find('#seeImgThumb'+data.id+''); //页面层 layer.open({ type: 1, title: "图片", skin: 'layui-layer-rim', //加上边框 area: ['80%', '80%'], //宽高 shadeClose: true, //开启遮罩关闭 end: function (index, layero) { return false; }, content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>' }); } }); function closeAct(id) { febs.get(ctx + 'admin/act/closeMallAct/' + id, null, function () { @@ -171,6 +186,10 @@ cols: [[ {field: 'actCode', title: '活动编码', minWidth: 150,align:'left'}, {field: 'actName', title: '活动名称', minWidth: 150,align:'left'}, {field: 'actImage', title: '活动缩略图', templet: function (d) { return '<a lay-event="seeImgThumb"><img id="seeImgThumb'+d.id+'" src="'+d.actImage+'" alt=""></a>'; }, minWidth: 150,align:'center'}, {field: 'actStartTime', title: '开始时间', minWidth: 150,align:'left'}, {field: 'actEndTime', title: '结束时间', minWidth: 150,align:'left'}, {field: 'actScoreCnt', title: '每次消耗积分', minWidth: 150,align:'left'}, src/main/resources/templates/febs/views/modules/act/actUpdateNew.html
@@ -53,6 +53,26 @@ </div> </div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">活动缩略图:</label> <div class="layui-input-block"> <div class="layui-upload"> <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test2">上传</button> <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> <div class="layui-upload-list"> <img class="layui-upload-img" id="demo2" style="width: 100px" > </div> </blockquote> </div> </div> </div> <div class="layui-form-item febs-hide"> <label class="layui-form-label">缩略图链接:</label> <div class="layui-input-block"> <input type="text" id="actImage" lay-verify="required" name="actImage" autocomplete="off" class="layui-input" readonly> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">活动说明:</label> @@ -145,6 +165,16 @@ }); formSelects.render(); //图片上传 upload.render({ elem: '#test2' ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 ,done: function(res){ $('#demo2').attr('src', res.data.src); $("#actImage").val(res.data.src); } }); var tableAwardData=[]; var tableIns = table.render({ elem: '#multiAward' @@ -155,7 +185,7 @@ {type: 'checkbox'} ,{field: 'index', title: '序号', width:70} ,{field: 'awardName', title: '奖品名称', edit:'text'} ,{field: 'awardImage', title: '奖品图'} ,{field: 'awardImage', title: '奖品图', hide:true} ,{templet: '#awardtableImgUpload', title: '缩略图', width:150} ,{field: 'awardTotal', title: '奖品总数', edit:'text'} ,{field: 'awardCnt', title: '已中奖数量', edit:'text'} @@ -291,12 +321,18 @@ "id": actInfo.id, "actCode": actInfo.actCode, "actName": actInfo.actName, "actImage": actInfo.actImage, "actStartTime": actInfo.actStartTime, "actEndTime": actInfo.actEndTime, "actEndTime": actInfo.actEndTime, "actScoreCnt": actInfo.actScoreCnt, "actRemark": actInfo.actRemark }); // $('#demo2').append('<img src="' + actInfo.actImage + '" alt="" class="layui-upload-img" style="width: 100px">') $('#demo2').attr('src', actInfo.actImage); var award = actInfo.mallActAwardSets; for (let i = 0; i < award.length; i++) { award[i].index = i+1; src/test/java/cc/mrbird/febs/AgentTest.java
@@ -1,15 +1,19 @@ package cc.mrbird.febs; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.dto.AgentLevelUpdateDto; import cc.mrbird.febs.mall.entity.AgentInfo; import cc.mrbird.febs.mall.entity.DataDictionaryCustom; import cc.mrbird.febs.mall.entity.MallGoodsStyle; import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.mall.mapper.MallGoodsStyleMapper; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.quartz.ProfitJob; import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.vo.ApiMallAwardDetailsVo; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.aspectj.weaver.loadtime.Agent; @@ -19,6 +23,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; /** @@ -41,10 +46,456 @@ @Autowired private MallGoodsStyleMapper mallGoodsStyleMapper; @Autowired private MallActAwardSetMapper mallActAwardSetMapper; @Autowired private MallMemberMapper mallMemberMapper; @Autowired private MallActWinRecordMapper mallActWinRecordMapper; @Autowired private MallActLuckdrawRecordMapper mallActLuckdrawRecordMapper; @Autowired private MallMemberWalletMapper mallMemberWalletMapper; @Autowired private MallActSetMapper mallActSetMapper; @Test public void skusTest() { List<MallGoodsStyle> mallGoodsStyles = mallGoodsStyleMapper.selectByGoodsId(1L); System.out.println(mallGoodsStyles); ApiMallAwardDetailsVo apiMallAwardDetailsVo = new ApiMallAwardDetailsVo(); Long memberId = 4L; Long actId = 1L; MallMember mallMember = mallMemberMapper.selectById(memberId); if(ObjectUtil.isEmpty(mallMember)){ throw new FebsException("用户不存在"); } MallActSet mallActSet = mallActSetMapper.selectById(actId); if(ObjectUtil.isEmpty(mallActSet)){ throw new FebsException("活动不存在"); } Integer actStatus = mallActSet.getActStatus(); if(MallActSet.ACT_STATUS_DISABLED == actStatus){ throw new FebsException("活动还没开始"); } /** * 获取用户积分数,判断能不能抽奖 * 减少对应的积分数量 * 较少奖品的已抽奖 * 生成一条抽奖记录 */ MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); if(ObjectUtil.isEmpty(wallet)){ throw new FebsException("账户不存在"); } BigDecimal commission = wallet.getCommission(); BigDecimal prizeScore = wallet.getPrizeScore(); Integer actScoreCnt = mallActSet.getActScoreCnt(); if(prizeScore.compareTo(new BigDecimal(actScoreCnt))<0){ throw new FebsException("竞猜积分不足"); } /** * 中奖概率 20% * 每次抽奖产生一个随机数要大于8,则中奖 * 历史10条抽奖记录有中奖过,中奖记录少于两条,则中奖 */ //获取中奖概率 DataDictionaryCustom scoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.WIN_SCORE.getType(), DataDictionaryEnum.WIN_SCORE.getCode()); DataDictionaryCustom cashDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.WIN_CASH.getType(), DataDictionaryEnum.WIN_CASH.getCode()); String scoreDicValue = scoreDic.getValue(); String cashDicValue = cashDic.getValue(); BigDecimal totalProbability = new BigDecimal(scoreDicValue).add(new BigDecimal(cashDicValue)); //获取那个更大一点的几率 BigDecimal maxProbability = BigDecimal.ZERO; BigDecimal minProbability = BigDecimal.ZERO; Integer maxAwardType = 0; Integer minAwardType = 0; if(new BigDecimal(scoreDicValue).compareTo(new BigDecimal(cashDicValue)) < 0){ maxProbability = new BigDecimal(cashDicValue); minProbability = new BigDecimal(scoreDicValue); maxAwardType = MallActAwardSet.AWARD_TYPE_YJ; minAwardType = MallActAwardSet.AWARD_TYPE_JF; }else{ maxProbability = new BigDecimal(scoreDicValue); minProbability = new BigDecimal(cashDicValue); maxAwardType = MallActAwardSet.AWARD_TYPE_JF; minAwardType = MallActAwardSet.AWARD_TYPE_YJ; } BigDecimal multiply = totalProbability.multiply(new BigDecimal(100)); BigDecimal failureScope = new BigDecimal(100).subtract(multiply); int randomInt = RandomUtil.randomInt(1, 100); //小于failureScope这个数字,则没中奖 if(new BigDecimal(randomInt).compareTo(failureScope) <= 0){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else if(new BigDecimal(randomInt).compareTo(failureScope) > 0 && new BigDecimal(randomInt).compareTo(failureScope.add(maxProbability.multiply(new BigDecimal(100)))) <= 0){ //大于failureScope.add(maxProbability.multiply(new BigDecimal(100)))这个数字,则中奖 //获取最新的十条抽奖记录 List<MallActLuckdrawRecord> records = mallActLuckdrawRecordMapper.selectRecordByMemberIdAndActId(memberId,actId); if(CollUtil.isNotEmpty(records)){ //中奖次数 Integer count = 0; for(MallActLuckdrawRecord mallActLuckdrawRecord : records){ Integer status = mallActLuckdrawRecord.getStatus(); if(MallActLuckdrawRecord.STATUS_ENABLE == status){ count = count + 1; } } if(new BigDecimal(count).compareTo(maxProbability.multiply(new BigDecimal(10))) < 0){ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,maxAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } }else{ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } } }else{ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,maxAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } } }else{ //中奖 //获取最新的十条抽奖记录 List<MallActLuckdrawRecord> records = mallActLuckdrawRecordMapper.selectRecordByMemberIdAndActId(memberId,actId); if(CollUtil.isNotEmpty(records)){ //中奖次数 Integer count = 0; for(MallActLuckdrawRecord mallActLuckdrawRecord : records){ Integer status = mallActLuckdrawRecord.getStatus(); if(MallActLuckdrawRecord.STATUS_ENABLE == status){ count = count + 1; } } if(new BigDecimal(count).compareTo(minProbability.multiply(new BigDecimal(10))) < 0){ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,minAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } }else{ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } } }else{ //获取活动下该类别的奖品 List<MallActAwardSet> mallActAwardSets = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId,minAwardType); if(CollUtil.isEmpty(mallActAwardSets)){ //抽奖记录 MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_DISABLED); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); List<MallActAwardSet> mallActAwardSetXXCY = mallActAwardSetMapper.selectMallActAwardByActIdAndAwardType(actId, MallActAwardSet.AWARD_TYPE_XXCY); if(CollUtil.isNotEmpty(mallActAwardSetXXCY)){ apiMallAwardDetailsVo.setAwardImage(mallActAwardSetXXCY.get(0).getAwardImage()); apiMallAwardDetailsVo.setAwardName(mallActAwardSetXXCY.get(0).getAwardName()); }else{ apiMallAwardDetailsVo.setAwardName("未中奖"); } }else{ List<MallActAwardSet> idList = new ArrayList(); for(MallActAwardSet mallActAwardSet : mallActAwardSets){ Integer awardTotal = mallActAwardSet.getAwardTotal(); Integer awardCnt = mallActAwardSet.getAwardCnt(); if(awardCnt < awardTotal){ idList.add(mallActAwardSet); } } MallActAwardSet mallActAwardSet = new MallActAwardSet(); if(idList.size() <= 1){ mallActAwardSet = idList.get(0); }else{ int randomIdIndex = RandomUtil.randomInt(0, idList.size()-1); mallActAwardSet = idList.get(randomIdIndex); } mallActAwardSet.setAwardCnt(mallActAwardSet.getAwardCnt() + 1); mallActAwardSetMapper.updateById(mallActAwardSet); MallActLuckdrawRecord mallActLuckdrawRecord = new MallActLuckdrawRecord(); mallActLuckdrawRecord.setActId(actId); mallActLuckdrawRecord.setActName(mallActSet.getActName()); mallActLuckdrawRecord.setMemberId(memberId); mallActLuckdrawRecord.setActScoreCnt(actScoreCnt); mallActLuckdrawRecord.setStatus(MallActLuckdrawRecord.STATUS_ENABLE); mallActLuckdrawRecordMapper.insert(mallActLuckdrawRecord); MallActWinRecord mallActWinRecord = new MallActWinRecord(); mallActWinRecord.setMemberId(memberId); mallActWinRecord.setActId(actId); mallActWinRecord.setActName(mallActSet.getActName()); mallActWinRecord.setAwardId(mallActAwardSet.getId()); mallActWinRecord.setAwardName(mallActAwardSet.getAwardName()); mallActWinRecord.setAwardType(mallActAwardSet.getAwardType()); mallActWinRecord.setAwardValue(mallActAwardSet.getAwardValue()); mallActWinRecord.setRecordId(mallActLuckdrawRecord.getId()); mallActWinRecordMapper.insert(mallActWinRecord); apiMallAwardDetailsVo.setAwardName(mallActAwardSet.getAwardName()); apiMallAwardDetailsVo.setAwardType(mallActAwardSet.getAwardType()); apiMallAwardDetailsVo.setAwardValue(mallActAwardSet.getAwardValue()); apiMallAwardDetailsVo.setAwardImage(mallActAwardSet.getAwardImage()); if(MallActAwardSet.AWARD_TYPE_JF == mallActAwardSet.getAwardType()){ prizeScore = prizeScore.add(new BigDecimal(mallActAwardSet.getAwardValue())); }else if(MallActAwardSet.AWARD_TYPE_YJ == mallActAwardSet.getAwardType()){ commission = commission.add(new BigDecimal(mallActAwardSet.getAwardValue())); } } } } //扣竞猜积分 prizeScore = prizeScore.subtract(new BigDecimal(actScoreCnt)); wallet.setPrizeScore(prizeScore); wallet.setCommission(commission); mallMemberWalletMapper.updateAmountWithVersion(wallet); System.out.println(apiMallAwardDetailsVo); } @Test