From 46950524044428ed3a53b9776aa01cb1a08a51ca Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 19 May 2022 18:43:46 +0800 Subject: [PATCH] Merge branch 'mall-amz' of http://120.27.238.55:7000/r/xc-mall into mall-amz --- src/main/java/cc/mrbird/febs/mall/dto/ApiMallActListDto.java | 20 src/main/java/cc/mrbird/febs/mall/mapper/MallActAwardSetMapper.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/MallActSetMapper.java | 3 src/main/java/cc/mrbird/febs/mall/vo/ApiMallActDetailsVo.java | 40 + src/main/java/cc/mrbird/febs/mall/vo/ApiMallActListVo.java | 34 + src/main/resources/templates/febs/views/modules/act/actAddNew.html | 32 + src/main/resources/mapper/modules/MallActWinRecordMapper.xml | 22 src/main/resources/templates/febs/views/modules/act/actUpdateNew.html | 38 + src/main/java/cc/mrbird/febs/mall/mapper/MallActWinRecordMapper.java | 8 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java | 528 +++++++++++++++++++++ src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java | 48 + src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java | 5 src/main/java/cc/mrbird/febs/mall/dto/ApiMallActWinDetailsDto.java | 22 src/main/java/cc/mrbird/febs/mall/dto/MallActUpdateDto.java | 2 src/main/resources/mapper/modules/MallActSetMapper.xml | 16 src/main/resources/mapper/modules/MallActLuckdrawRecordMapper.xml | 8 src/test/java/cc/mrbird/febs/AgentTest.java | 465 +++++++++++++++++++ src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java | 16 src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java | 4 src/main/java/cc/mrbird/febs/mall/dto/AddMallActDto.java | 2 src/main/java/cc/mrbird/febs/mall/entity/MallActLuckdrawRecord.java | 8 src/main/java/cc/mrbird/febs/mall/vo/ApiMallActAwardListDto.java | 26 + src/main/java/cc/mrbird/febs/mall/entity/MallActSet.java | 2 src/main/resources/templates/febs/views/modules/act/actList.html | 19 src/main/resources/mapper/modules/MallActAwardSetMapper.xml | 4 src/main/java/cc/mrbird/febs/mall/mapper/MallActLuckdrawRecordMapper.java | 3 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallActServiceImpl.java | 10 src/main/java/cc/mrbird/febs/mall/vo/ApiMallActWinDetailsVo.java | 20 src/main/java/cc/mrbird/febs/mall/vo/ApiMallAwardDetailsVo.java | 20 29 files changed, 1,414 insertions(+), 13 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java index 38f6804..9914870 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java @@ -12,6 +12,11 @@ INDRECT_BONUS("BONUS_TYPE", "INDRECT_BONUS"), AGENT_BONUS("BONUS_TYPE", "AGENT_BONUS"), THANKFUL_BONUS("BONUS_TYPE", "THANKFUL_BONUS"), + + //积分中奖概率 + WIN_SCORE("WIN_PROBABILITY", "WIN_SCORE"), + //佣金中奖概率 + WIN_CASH("WIN_PROBABILITY", "WIN_CASH"), RANK_BONUS("BONUS_TYPE", "RANK_BONUS"); private String type; diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java index 84c0402..6c8d0fe 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java +++ b/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)); + } + + } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddMallActDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddMallActDto.java index 80e25a6..f8efbe2 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/AddMallActDto.java +++ b/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; diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiMallActListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallActListDto.java new file mode 100644 index 0000000..3c4a1bd --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallActListDto.java @@ -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; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiMallActWinDetailsDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallActWinDetailsDto.java new file mode 100644 index 0000000..2df3883 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallActWinDetailsDto.java @@ -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; +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/MallActUpdateDto.java b/src/main/java/cc/mrbird/febs/mall/dto/MallActUpdateDto.java index 6f7738c..3367777 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/MallActUpdateDto.java +++ b/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; diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallActLuckdrawRecord.java b/src/main/java/cc/mrbird/febs/mall/entity/MallActLuckdrawRecord.java index c79de77..3888455 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallActLuckdrawRecord.java +++ b/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 diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallActSet.java b/src/main/java/cc/mrbird/febs/mall/entity/MallActSet.java index a15ba82..daa772c 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallActSet.java +++ b/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; diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallActAwardSetMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallActAwardSetMapper.java index 90f8696..c055f44 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallActAwardSetMapper.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallActLuckdrawRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallActLuckdrawRecordMapper.java index 1097a39..71edc70 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallActLuckdrawRecordMapper.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallActSetMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallActSetMapper.java index 39c372c..1835aaa 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallActSetMapper.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallActWinRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallActWinRecordMapper.java index 6e4775d..b314549 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallActWinRecordMapper.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java index 6439ac6..4df8cf3 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java +++ b/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); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallActServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallActServiceImpl.java index b75b780..92caadb 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallActServiceImpl.java +++ b/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); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java index 05ebb48..b8ffd31 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java +++ b/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; + } + + } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java index 9b5336a..3dcbe55 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallActSetVo.java @@ -23,6 +23,10 @@ @ApiModelProperty(value = "活动名称") private String actName; + //活动图片 + + @ApiModelProperty(value = "活动图片") + private String actImage; //开始时间 diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActAwardListDto.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActAwardListDto.java new file mode 100644 index 0000000..ae28885 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActAwardListDto.java @@ -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; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActDetailsVo.java new file mode 100644 index 0000000..1988813 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActDetailsVo.java @@ -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; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActListVo.java new file mode 100644 index 0000000..ae6270f --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActListVo.java @@ -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; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActWinDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActWinDetailsVo.java new file mode 100644 index 0000000..b6e2b93 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallActWinDetailsVo.java @@ -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; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiMallAwardDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallAwardDetailsVo.java new file mode 100644 index 0000000..a535b8cc --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallAwardDetailsVo.java @@ -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; + +} diff --git a/src/main/resources/mapper/modules/MallActAwardSetMapper.xml b/src/main/resources/mapper/modules/MallActAwardSetMapper.xml index ea9f139..5a5f39b 100644 --- a/src/main/resources/mapper/modules/MallActAwardSetMapper.xml +++ b/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> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallActLuckdrawRecordMapper.xml b/src/main/resources/mapper/modules/MallActLuckdrawRecordMapper.xml index 89e2e0c..6b64830 100644 --- a/src/main/resources/mapper/modules/MallActLuckdrawRecordMapper.xml +++ b/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> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallActSetMapper.xml b/src/main/resources/mapper/modules/MallActSetMapper.xml index efb8206..e17bbb4 100644 --- a/src/main/resources/mapper/modules/MallActSetMapper.xml +++ b/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> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallActWinRecordMapper.xml b/src/main/resources/mapper/modules/MallActWinRecordMapper.xml index 5cbb9fb..6fc92fd 100644 --- a/src/main/resources/mapper/modules/MallActWinRecordMapper.xml +++ b/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> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/act/actAddNew.html b/src/main/resources/templates/febs/views/modules/act/actAddNew.html index be057b6..7a96398 100644 --- a/src/main/resources/templates/febs/views/modules/act/actAddNew.html +++ b/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'} diff --git a/src/main/resources/templates/febs/views/modules/act/actList.html b/src/main/resources/templates/febs/views/modules/act/actList.html index 1c37454..5010f55 100644 --- a/src/main/resources/templates/febs/views/modules/act/actList.html +++ b/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'}, diff --git a/src/main/resources/templates/febs/views/modules/act/actUpdateNew.html b/src/main/resources/templates/febs/views/modules/act/actUpdateNew.html index f2d699d..606723c 100644 --- a/src/main/resources/templates/febs/views/modules/act/actUpdateNew.html +++ b/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; diff --git a/src/test/java/cc/mrbird/febs/AgentTest.java b/src/test/java/cc/mrbird/febs/AgentTest.java index 6f86be6..a2f3a42 100644 --- a/src/test/java/cc/mrbird/febs/AgentTest.java +++ b/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 -- Gitblit v1.9.1