xiaoyong931011
2022-05-19 5324a804f6dcb622f4ab3f554608e58c728e287e
20220518
7 files added
22 files modified
1426 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java 48 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddMallActDto.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiMallActListDto.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiMallActWinDetailsDto.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/MallActUpdateDto.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallActLuckdrawRecord.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallActSet.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallActAwardSetMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallActLuckdrawRecordMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallActSetMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallActWinRecordMapper.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallActServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java 528 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallActAwardListDto.java 26 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallActDetailsVo.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallActListVo.java 34 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallActWinDetailsVo.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallAwardDetailsVo.java 20 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallActAwardSetMapper.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallActLuckdrawRecordMapper.xml 8 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallActSetMapper.xml 16 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallActWinRecordMapper.xml 22 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/act/actAddNew.html 32 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/act/actList.html 19 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/act/actUpdateNew.html 38 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/AgentTest.java 465 ●●●●● patch | view | raw | blame | history
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