From bac072f518a357363ae3f201beb665021cd75efc Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 03 Apr 2023 18:13:51 +0800 Subject: [PATCH] 关于积分凭证 --- src/main/resources/mapper/modules/MallScoreVoucherMapper.xml | 20 + src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherRecordVo.java | 39 +++ src/main/java/cc/mrbird/febs/mall/controller/ApiScoreController.java | 39 ++ src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java | 12 src/main/java/cc/mrbird/febs/mall/mapper/MallScoreVoucherMapper.java | 14 + src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java | 34 ++ src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java | 12 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java | 40 +++ src/main/java/cc/mrbird/febs/mall/dto/ApiVoucherBusinessDto.java | 30 ++ src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java | 21 + src/main/java/cc/mrbird/febs/mall/dto/ApiScoreVoucherRecordDto.java | 17 + src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/DataDictionaryCustomMapper.java | 2 src/main/java/cc/mrbird/febs/mall/vo/MemberBankListVo.java | 3 src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java | 2 src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java | 5 src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml | 5 src/main/java/cc/mrbird/febs/mall/dto/AddMemberBankDto.java | 3 src/main/resources/templates/febs/views/modules/system/hlmVoucherSet.html | 22 + src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java | 8 src/main/java/cc/mrbird/febs/mall/entity/MallMemberBank.java | 1 src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java | 6 src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherInfoVo.java | 25 + src/main/java/cc/mrbird/febs/mall/dto/UpdateMemberBankDto.java | 3 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java | 2 src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java | 17 + src/main/java/cc/mrbird/febs/mall/service/impl/ScoreServiceImpl.java | 177 +++++++++++++ src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java | 2 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 1 src/main/java/cc/mrbird/febs/mall/entity/MallScoreVoucher.java | 34 ++ src/main/resources/mapper/modules/MallMemberWalletMapper.xml | 9 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 79 ++++++ src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java | 6 src/main/java/cc/mrbird/febs/mall/service/IScoreService.java | 13 + src/main/resources/templates/febs/views/modules/system/hlmVoucherButton.html | 43 ++ src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherSetDto.java | 4 36 files changed, 726 insertions(+), 26 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java index 8acc19d..7079411 100644 --- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java +++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java @@ -143,4 +143,25 @@ } //补贴金额 end + /** + * 强制卖出 + * @return + */ + //强制卖出 start + @Bean + public DirectExchange forceVoucherSaleExchange() { + return new DirectExchange(RabbitQueueEnum.FORCE_VOUCHER_SALE.getExchange()); + } + + @Bean + public Queue forceVoucherSaleQueue() { + return new Queue(QueueConstants.FORCE_VOUCHER_SALE); + } + + @Bean + public Binding forceVoucherSaleBind() { + return BindingBuilder.bind(forceVoucherSaleQueue()).to(forceVoucherSaleExchange()).with(RabbitQueueEnum.FORCE_VOUCHER_SALE.getRoute()); + } + //强制卖出 end + } diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java index d3fea93..edcb291 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java @@ -37,7 +37,11 @@ /** * 凭证数量 */ - VOUCHER_CNT(7); + VOUCHER_CNT(7), + /** + * 凭证数量 + */ + VOUCHER_AMOUNT(8); private final int value; diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java index dd625f3..436dad3 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java @@ -8,6 +8,14 @@ @Getter public enum GreenScoreEnum { /** + * 绿色凭证提现开关 1:开启 2:关闭 + */ + VOUCHER_ON_OFF("GREEN_SCORE", "VOUCHER_ON_OFF"), + /** + * 绿色凭证买卖池 + */ + SCORE_POOL_CNT("GREEN_SCORE", "SCORE_POOL_CNT"), + /** * 绿色凭证价格 */ SCORE_PRICE("GREEN_SCORE", "SCORE_PRICE"), diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java index 27d0fdf..3122c32 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java @@ -178,7 +178,17 @@ /** * 业绩释放星级凭证 */ - ACHIEVE_RELEASE_SCORE_XJ(35); + ACHIEVE_RELEASE_SCORE_XJ(35), + + /** + * 凭证买入 + */ + VOUCHER_BUY(36), + + /** + * 凭证卖出 + */ + VOUCHER_SALE(37); private final int value; diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java index 2b18daa..dd081f1 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java @@ -4,8 +4,12 @@ import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.GreenScoreEnum; import cc.mrbird.febs.mall.dto.*; +import cc.mrbird.febs.mall.entity.DataDictionaryCustom; +import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.mall.service.ICommonService; +import cc.mrbird.febs.mall.service.IMemberProfitService; import cc.mrbird.febs.mall.service.ISystemService; +import cc.mrbird.febs.rabbit.producter.AgentProducer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +33,13 @@ private ISystemService systemService; private final ICommonService commonService; + + @Autowired + private IMemberProfitService memberProfitService; + + private final AgentProducer agentProducer; + + private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @PostMapping(value = "/bonusSystemSetting") public FebsResponse bonusSystemSetting(@RequestBody Map<String, Object> map) { @@ -146,4 +157,33 @@ hlmVoucherSetDto.getLevelAchievePercent()); return new FebsResponse().success(); } + + @PostMapping(value = "/hlmVoucherButton") + public FebsResponse hlmVoucherButton(HlmVoucherButtonDto hlmVoucherButtonDto) { + BigDecimal scorePrice = new BigDecimal(hlmVoucherButtonDto.getScorePrice()); + if(scorePrice.compareTo(BigDecimal.ZERO) <= 0){ + return new FebsResponse().fail().message("请输入合理的价格"); + } + + commonService.updateDataDic( + GreenScoreEnum.SCORE_PRICE.getType(), + GreenScoreEnum.SCORE_PRICE.getCode(), + hlmVoucherButtonDto.getScorePrice()); + + commonService.updateDataDic( + GreenScoreEnum.VOUCHER_ON_OFF.getType(), + GreenScoreEnum.VOUCHER_ON_OFF.getCode(), + hlmVoucherButtonDto.getVoucherOnOff()); + return new FebsResponse().success(); + } + + @PostMapping(value = "/selaHalfVoucher") + public FebsResponse selaHalfVoucher() { + DataDictionaryCustom scorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_PRICE.getType(), + GreenScoreEnum.SCORE_PRICE.getCode() + ); + agentProducer.sendForceVoucherSaleMsg(scorePriceDic.getValue()); + return new FebsResponse().success(); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java index 3ffb084..987f855 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java @@ -215,4 +215,6 @@ return memberService.delMemberBank(id); } + + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiScoreController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiScoreController.java index 6542390..879a06b 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiScoreController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiScoreController.java @@ -2,12 +2,12 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.ApiMallScoreSignRecordDto; +import cc.mrbird.febs.mall.dto.ApiScoreVoucherRecordDto; +import cc.mrbird.febs.mall.dto.ApiVoucherBusinessDto; import cc.mrbird.febs.mall.dto.OrderListDto; import cc.mrbird.febs.mall.service.ICommonService; import cc.mrbird.febs.mall.service.IScoreService; -import cc.mrbird.febs.mall.vo.ApiMallScoreSignRecordVo; -import cc.mrbird.febs.mall.vo.OrderListVo; -import cc.mrbird.febs.mall.vo.ScoreSignVo; +import cc.mrbird.febs.mall.vo.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; /** * @author wzy @@ -57,4 +59,35 @@ public FebsResponse signRecordList(@RequestBody ApiMallScoreSignRecordDto apiMallScoreSignRecordDto) { return new FebsResponse().success().data(scoreService.findMallScoreSignRecordList(apiMallScoreSignRecordDto)); } + + @ApiOperation(value = "绿色积分个人信息", notes = "绿色积分个人信息") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiScoreVoucherInfoVo.class) + }) + @GetMapping(value = "/memberScoreVoucher") + public FebsResponse memberScoreVoucher() { + return new FebsResponse().success().data(scoreService.memberScoreVoucher()); + } + + @ApiOperation(value = "绿色积分个人信息-买卖信息", notes = "绿色积分个人信息-买卖信息") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiScoreVoucherRecordVo.class) + }) + @PostMapping(value = "/memberScoreVoucher") + public FebsResponse memberScoreVoucher(@RequestBody ApiScoreVoucherRecordDto apiScoreVoucherRecordDto) { + return new FebsResponse().success().data(scoreService.findMallScoreVoucherList(apiScoreVoucherRecordDto)); + } + + @ApiOperation(value = "绿色积分个人信息-买入", notes = "绿色积分个人信息-买入") + @PostMapping(value = "/voucherBusinessBuy") + public FebsResponse voucherBusinessBuy(@Valid @RequestBody ApiVoucherBusinessDto apiVoucherBusinessDto) { + return scoreService.voucherBusinessBuy(apiVoucherBusinessDto); + } + + @ApiOperation(value = "绿色积分个人信息-卖出", notes = "绿色积分个人信息-卖出") + @PostMapping(value = "/voucherBusinessSale") + public FebsResponse voucherBusinessSale(@Valid @RequestBody ApiVoucherBusinessDto apiVoucherBusinessDto) { + return scoreService.voucherBusinessSale(apiVoucherBusinessDto); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java index 796674d..3d2d302 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java @@ -291,7 +291,41 @@ String levelAchievePercent = ObjectUtil.isEmpty(levelAchievePercentDic.getValue()) ? "0" : levelAchievePercentDic.getValue(); hlmVoucherSetDto.setLevelAchievePercent(levelAchievePercent); } + DataDictionaryCustom scorePoolCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_POOL_CNT.getType(), + GreenScoreEnum.SCORE_POOL_CNT.getCode()); + if (scorePoolCntDic != null) { + String scorePoolCnt = ObjectUtil.isEmpty(scorePoolCntDic.getValue()) ? "0" : scorePoolCntDic.getValue(); + hlmVoucherSetDto.setScorePoolCnt(scorePoolCnt); + } model.addAttribute("hlmVoucherSetDto", hlmVoucherSetDto); return FebsUtil.view("modules/system/hlmVoucherSet"); } + + /** + * 一键卖出 + * @param model + * @return + */ + @GetMapping("hlmVoucherButton") + @RequiresPermissions("hlmVoucherButton:view") + public String hlmVoucherButton(Model model) { + HlmVoucherButtonDto hlmVoucherButtonDto = new HlmVoucherButtonDto(); + DataDictionaryCustom scorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_PRICE.getType(), + GreenScoreEnum.SCORE_PRICE.getCode()); + if (scorePriceDic != null) { + String scorePrice = ObjectUtil.isEmpty(scorePriceDic.getValue()) ? "0" : scorePriceDic.getValue(); + hlmVoucherButtonDto.setScorePrice(scorePrice); + } + DataDictionaryCustom voucherOnOffDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.VOUCHER_ON_OFF.getType(), + GreenScoreEnum.VOUCHER_ON_OFF.getCode()); + if (voucherOnOffDic != null) { + String voucherOnOff = ObjectUtil.isEmpty(voucherOnOffDic.getValue()) ? "0" : voucherOnOffDic.getValue(); + hlmVoucherButtonDto.setVoucherOnOff(voucherOnOff); + } + model.addAttribute("hlmVoucherButtonDto", hlmVoucherButtonDto); + return FebsUtil.view("modules/system/hlmVoucherButton"); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddMemberBankDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddMemberBankDto.java index d96d705..9598a1b 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/AddMemberBankDto.java +++ b/src/main/java/cc/mrbird/febs/mall/dto/AddMemberBankDto.java @@ -20,6 +20,9 @@ // 银行卡号 @ApiModelProperty(value = "银行卡号") private String bankNo; + // 银行卡号 + @ApiModelProperty(value = "数字账号") + private String digitalNo; // 手机号 @ApiModelProperty(value = "手机号") private String phone; diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiScoreVoucherRecordDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiScoreVoucherRecordDto.java new file mode 100644 index 0000000..83c6151 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiScoreVoucherRecordDto.java @@ -0,0 +1,17 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "ApiScoreVoucherRecordDto", description = "请求类") +public class ApiScoreVoucherRecordDto { + + @ApiModelProperty(value = "一页数量", example = "10") + private Integer pageSize; + + @ApiModelProperty(value = "第几页", example = "1") + private Integer pageNum; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiVoucherBusinessDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiVoucherBusinessDto.java new file mode 100644 index 0000000..3176f3c --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiVoucherBusinessDto.java @@ -0,0 +1,30 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ApiVoucherBusinessDto", description = "请求类") +public class ApiVoucherBusinessDto { + + /** + * B:买入S:卖出 + */ + @ApiModelProperty(value = "B:买入S:卖出") + @NotBlank(message = "请选择买入") + private String type; + + @ApiModelProperty(value = "数量") + @NotNull(message = "请输入合理的数量") + private BigDecimal voucherCnt; + + @ApiModelProperty(value = "交易密码") + @NotBlank(message = "请输入支付密码") + private String tradePassword; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java b/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java new file mode 100644 index 0000000..2dea48d --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java @@ -0,0 +1,17 @@ +package cc.mrbird.febs.mall.dto; + +import lombok.Data; + +@Data +public class HlmVoucherButtonDto { + + /** + * 绿色凭证价格 + */ + private String scorePrice; + + /** + * 绿色凭证提现开关 1:开启 2:关闭 + */ + private String voucherOnOff; +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherSetDto.java b/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherSetDto.java index 45cb50c..429f083 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherSetDto.java +++ b/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherSetDto.java @@ -42,5 +42,9 @@ * 业绩积分凭证按用户星级比例 */ private String levelAchievePercent; + /** + * 绿色凭证买卖池 + */ + private String scorePoolCnt; } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/UpdateMemberBankDto.java b/src/main/java/cc/mrbird/febs/mall/dto/UpdateMemberBankDto.java index c9b1015..156fe52 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/UpdateMemberBankDto.java +++ b/src/main/java/cc/mrbird/febs/mall/dto/UpdateMemberBankDto.java @@ -25,4 +25,7 @@ // 手机号 @ApiModelProperty(value = "手机号") private String phone; + // 银行卡号 + @ApiModelProperty(value = "数字账号") + private String digitalNo; } diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberBank.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberBank.java index c434330..41f656f 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberBank.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberBank.java @@ -18,4 +18,5 @@ private String bankNo; // 手机号 private String phone; + private String digitalNo; } diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallScoreVoucher.java b/src/main/java/cc/mrbird/febs/mall/entity/MallScoreVoucher.java new file mode 100644 index 0000000..fbfa074 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallScoreVoucher.java @@ -0,0 +1,34 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@TableName("mall_score_voucher") +public class MallScoreVoucher extends BaseEntity { + + private String voucherNo; + + private Long memberId; + + /** + * B:买入S:卖出 + */ + private String type; + /** + * 数量 + */ + private BigDecimal voucherCnt; + /** + * 单价 + */ + private BigDecimal price; + /** + * 总价 + */ + private BigDecimal voucherAmount; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/DataDictionaryCustomMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/DataDictionaryCustomMapper.java index c86b42f..b6a31ee 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/DataDictionaryCustomMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/DataDictionaryCustomMapper.java @@ -31,4 +31,6 @@ AdminRankAwardUpdateInfoVo getRankAwardUpdateInfoById(@Param("id")long id); int updateDicValueByTypeAndCode(@Param("type") String type, @Param("code") String code, @Param("value") String value); + + DataDictionaryCustom selectScorePoolCntForUpdate(@Param("type") String type, @Param("code") String code); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java index dcb70c8..54108b4 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java @@ -47,4 +47,6 @@ BigDecimal selectSumStar(); List<MallMemberWallet> selectStar(); + + void addVorCherAmountAndCntById(@Param("voucherAmount")BigDecimal voucherAmountAdd,@Param("voucherCnt")BigDecimal voucherCnt, @Param("id")Long id); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallScoreVoucherMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallScoreVoucherMapper.java new file mode 100644 index 0000000..7b5bb2e --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallScoreVoucherMapper.java @@ -0,0 +1,14 @@ +package cc.mrbird.febs.mall.mapper; + +import cc.mrbird.febs.mall.dto.ApiScoreVoucherRecordDto; +import cc.mrbird.febs.mall.entity.MallScoreVoucher; +import cc.mrbird.febs.mall.vo.ApiScoreVoucherRecordVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; + +public interface MallScoreVoucherMapper extends BaseMapper<MallScoreVoucher> { + + IPage<ApiScoreVoucherRecordVo> findMallScoreVoucherListInPage(IPage<ApiScoreVoucherRecordVo> page, @Param("record")ApiScoreVoucherRecordDto apiScoreVoucherRecordDto); + +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java index 0251cd1..7806be2 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java @@ -53,4 +53,6 @@ void scoreRecordReleaseJob(); void achieveReleaseJob(); + + void selaHalfVoucher(String price); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IScoreService.java b/src/main/java/cc/mrbird/febs/mall/service/IScoreService.java index 5cb2a85..f04f1cf 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IScoreService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IScoreService.java @@ -1,8 +1,13 @@ package cc.mrbird.febs.mall.service; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.ApiMallScoreSignRecordDto; +import cc.mrbird.febs.mall.dto.ApiScoreVoucherRecordDto; +import cc.mrbird.febs.mall.dto.ApiVoucherBusinessDto; import cc.mrbird.febs.mall.entity.MallScoreSignRecord; import cc.mrbird.febs.mall.vo.ApiMallScoreSignRecordVo; +import cc.mrbird.febs.mall.vo.ApiScoreVoucherInfoVo; +import cc.mrbird.febs.mall.vo.ApiScoreVoucherRecordVo; import cc.mrbird.febs.mall.vo.ScoreSignVo; import java.util.List; @@ -16,4 +21,12 @@ MallScoreSignRecord judgeScoreIsContinuity(MallScoreSignRecord mallScoreSignRecord); List<ApiMallScoreSignRecordVo> findMallScoreSignRecordList(ApiMallScoreSignRecordDto apiMallScoreSignRecordDto); + + ApiScoreVoucherInfoVo memberScoreVoucher(); + + List<ApiScoreVoucherRecordVo> findMallScoreVoucherList(ApiScoreVoucherRecordDto apiScoreVoucherRecordDto); + + FebsResponse voucherBusinessBuy(ApiVoucherBusinessDto apiVoucherBusinessDto); + + FebsResponse voucherBusinessSale(ApiVoucherBusinessDto apiVoucherBusinessDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index 7dc8669..7e11deb 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -613,6 +613,7 @@ mallMemberBank.setIdCardNum(updateMemberBankDto.getIdCardNum()); mallMemberBank.setBankNo(updateMemberBankDto.getBankNo()); mallMemberBank.setPhone(updateMemberBankDto.getPhone()); + mallMemberBank.setDigitalNo(updateMemberBankDto.getDigitalNo()); mallMemberBankMapper.updateById(mallMemberBank); return new FebsResponse().success(); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java index 5993c95..1e11453 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java @@ -58,6 +58,7 @@ private final AgentProducer agentProducer; private final MallScoreRecordMapper mallScoreRecordMapper; private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper; + private final MallScoreVoucherMapper mallScoreVoucherMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -789,6 +790,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public void scoreRecordReleaseJob() { /** * 每日按照比例释放记录的百分比到用户的绿色凭证账户 @@ -831,6 +833,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public void achieveReleaseJob() { /** * 业绩产生凭证 @@ -1009,6 +1012,82 @@ } + @Override + @Transactional(rollbackFor = Exception.class) + public void selaHalfVoucher(String price) { + /** + * 获取所有凭证大于0的用户 + * 当前价格卖出账户的一半凭证 + */ + BigDecimal scorePrice = new BigDecimal(price == null ? "0" : price); + if(scorePrice.compareTo(BigDecimal.ZERO) <= 0){ + return; + } + List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectList(null); + if(CollUtil.isNotEmpty(mallMemberWallets)){ + List<MallMemberWallet> wallets = mallMemberWallets + .stream() + .filter(mallMemberWallet -> mallMemberWallet.getVoucherCnt().compareTo(BigDecimal.ZERO) > 0) + .collect(Collectors.toList()); + if(CollUtil.isNotEmpty(wallets)){ + BigDecimal scorePoolCntAdd = BigDecimal.ZERO; + //绿色积分剩余数量 + for(MallMemberWallet mallMemberWallet : wallets){ + //增加账户的凭证金额,减少当前的一半的凭证数量 + BigDecimal voucherCnt = mallMemberWallet.getVoucherCnt().divide(new BigDecimal(2), 2, BigDecimal.ROUND_DOWN) + .setScale(2,BigDecimal.ROUND_DOWN); + BigDecimal voucherAmountAdd = scorePrice.multiply(voucherCnt) + .setScale(2,BigDecimal.ROUND_DOWN); + mallMemberWalletMapper.addVorCherAmountAndCntById(voucherAmountAdd,voucherCnt,mallMemberWallet.getId()); + + scorePoolCntAdd = scorePoolCntAdd.add(voucherCnt); + + DataDictionaryCustom surplusCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SURPLUS_CNT.getType(), + GreenScoreEnum.SURPLUS_CNT.getCode() + ); + //增加绿色积分剩余数量 + BigDecimal surplusCnt = new BigDecimal(surplusCntDic.getValue() == null ? "0" : surplusCntDic.getValue()); + BigDecimal voucherCntAdd = surplusCnt.add(voucherCnt).setScale(2,BigDecimal.ROUND_DOWN); + surplusCntDic.setValue(voucherCntAdd.toString()); + dataDictionaryCustomMapper.updateById(surplusCntDic); + + /** + * 生成一条卖出记录 + */ + String voucherNo = MallUtils.getOrderNum("VS"); + MallScoreVoucher mallScoreVoucher = new MallScoreVoucher(); + mallScoreVoucher.setVoucherNo(voucherNo); + mallScoreVoucher.setMemberId(mallMemberWallet.getMemberId()); + mallScoreVoucher.setVoucherCnt(voucherCnt); + mallScoreVoucher.setPrice(scorePrice); + mallScoreVoucher.setVoucherAmount(voucherAmountAdd); + mallScoreVoucher.setType("S"); + mallScoreVoucherMapper.insert(mallScoreVoucher); + + //产生一条流水记录 + mallMoneyFlowService.addMoneyFlow( + mallMemberWallet.getMemberId(), + voucherAmountAdd, + MoneyFlowTypeEnum.VOUCHER_SALE.getValue(), + voucherNo, + FlowTypeEnum.VOUCHER_AMOUNT.getValue()); + } + + //增加积分凭证池的凭证数量 + DataDictionaryCustom scorePoolCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_POOL_CNT.getType(), + GreenScoreEnum.SCORE_POOL_CNT.getCode() + ); + //增加绿色积分剩余数量 + BigDecimal scorePoolCnt = new BigDecimal(scorePoolCntDic.getValue() == null ? "0" : scorePoolCntDic.getValue()); + scorePoolCnt = scorePoolCnt.add(scorePoolCntAdd); + scorePoolCntDic.setValue(scorePoolCnt.toString()); + dataDictionaryCustomMapper.updateById(scorePoolCntDic); + } + } + } + /** * 给用户的增加凭证数据,并且增加流水 * @param memberAchieveRelease 释放数量 diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ScoreServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ScoreServiceImpl.java index 6f6bf9a..38d7485 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ScoreServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ScoreServiceImpl.java @@ -1,28 +1,34 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.GreenScoreEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; +import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; import cc.mrbird.febs.mall.dto.ApiMallScoreSignRecordDto; +import cc.mrbird.febs.mall.dto.ApiScoreVoucherRecordDto; +import cc.mrbird.febs.mall.dto.ApiVoucherBusinessDto; import cc.mrbird.febs.mall.dto.ScoreSettingDto; import cc.mrbird.febs.mall.entity.*; -import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; -import cc.mrbird.febs.mall.mapper.MallMemberMapper; -import cc.mrbird.febs.mall.mapper.MallMemberWalletMapper; -import cc.mrbird.febs.mall.mapper.MallScoreSignRecordMapper; +import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.service.IScoreService; import cc.mrbird.febs.mall.vo.ApiMallScoreSignRecordVo; +import cc.mrbird.febs.mall.vo.ApiScoreVoucherInfoVo; +import cc.mrbird.febs.mall.vo.ApiScoreVoucherRecordVo; import cc.mrbird.febs.mall.vo.ScoreSignVo; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -51,6 +57,8 @@ private final IMallMoneyFlowService mallMoneyFlowService; private final IApiMallMemberWalletService walletService; private final MallMemberMapper mallMemberMapper; + private final MallScoreVoucherMapper mallScoreVoucherMapper; + private final IApiMallMemberWalletService memberWalletService; @Override public ScoreSignVo scoreSign() { @@ -94,6 +102,167 @@ } @Override + public ApiScoreVoucherInfoVo memberScoreVoucher() { + MallMember member = LoginUserUtil.getLoginUser(); + ApiScoreVoucherInfoVo apiScoreVoucherInfoVo = new ApiScoreVoucherInfoVo(); + + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId()); + apiScoreVoucherInfoVo.setVoucherCnt(mallMemberWallet.getVoucherCnt().compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : mallMemberWallet.getVoucherCnt()); + apiScoreVoucherInfoVo.setVoucherAmount(mallMemberWallet.getVoucherAmount().compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : mallMemberWallet.getVoucherAmount()); + DataDictionaryCustom scorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_PRICE.getType(), + GreenScoreEnum.SCORE_PRICE.getCode()); + apiScoreVoucherInfoVo.setScorePrice(new BigDecimal(scorePriceDic.getValue()).setScale(2,BigDecimal.ROUND_DOWN)); + DataDictionaryCustom scorePoolCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_POOL_CNT.getType(), + GreenScoreEnum.SCORE_POOL_CNT.getCode()); + apiScoreVoucherInfoVo.setScorePoolCnt(new BigDecimal(scorePoolCntDic.getValue()).setScale(2,BigDecimal.ROUND_DOWN)); + return apiScoreVoucherInfoVo; + } + + @Override + public List<ApiScoreVoucherRecordVo> findMallScoreVoucherList(ApiScoreVoucherRecordDto apiScoreVoucherRecordDto) { + IPage<ApiScoreVoucherRecordVo> page = new Page<>(apiScoreVoucherRecordDto.getPageNum(), apiScoreVoucherRecordDto.getPageSize()); + IPage<ApiScoreVoucherRecordVo> apiScoreVoucherRecordVoIPage = mallScoreVoucherMapper.findMallScoreVoucherListInPage(page, apiScoreVoucherRecordDto); + return apiScoreVoucherRecordVoIPage.getRecords(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse voucherBusinessBuy(ApiVoucherBusinessDto apiVoucherBusinessDto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + BigDecimal voucherCnt = apiVoucherBusinessDto.getVoucherCnt(); + if(voucherCnt.compareTo(BigDecimal.ZERO) <= 0){ + throw new FebsException("请输入合理的数量"); + } + DataDictionaryCustom scorePoolCntDic = dataDictionaryCustomMapper.selectScorePoolCntForUpdate( + GreenScoreEnum.SCORE_POOL_CNT.getType(), + GreenScoreEnum.SCORE_POOL_CNT.getCode()); + BigDecimal scorePoolCnt = new BigDecimal(scorePoolCntDic.getValue() == null ? "0" : scorePoolCntDic.getValue()); + if(scorePoolCnt.compareTo(voucherCnt) < 0){ + throw new FebsException("可购买总量不足"); + } + String tradePassword = apiVoucherBusinessDto.getTradePassword(); + if (StrUtil.isBlank(tradePassword)) { + throw new FebsException("支付密码错误"); + } + + MallMember mallMember = mallMemberMapper.selectById(memberId); + if (StrUtil.isBlank(mallMember.getTradePassword())) { + throw new FebsException("未设置支付密码"); + } + + if (!SecureUtil.md5(tradePassword).equals(mallMember.getTradePassword())) { + throw new FebsException("支付密码错误"); + } + + DataDictionaryCustom scorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_PRICE.getType(), + GreenScoreEnum.SCORE_PRICE.getCode()); + BigDecimal scorePrice = new BigDecimal(scorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); + BigDecimal voucherAmount = voucherCnt.multiply(scorePrice); + + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); + BigDecimal balance = mallMemberWallet.getBalance(); + if(voucherAmount.compareTo(balance) > 0){ + throw new FebsException("余额不足"); + } + //减少余额 + memberWalletService.reduceBalance(voucherAmount,memberId); + //减少绿色积分池 + scorePoolCnt = scorePoolCnt.subtract(voucherCnt); + scorePoolCntDic.setValue(scorePoolCnt.toString()); + dataDictionaryCustomMapper.updateById(scorePoolCntDic); + //增加凭证数量 + mallMemberWalletMapper.addVorCherCntByMemberId(voucherCnt,memberId); + //增加购买记录 + String voucherNo = MallUtils.getOrderNum("VB"); + MallScoreVoucher mallScoreVoucher = new MallScoreVoucher(); + mallScoreVoucher.setVoucherNo(voucherNo); + mallScoreVoucher.setMemberId(memberId); + mallScoreVoucher.setVoucherCnt(voucherCnt); + mallScoreVoucher.setPrice(scorePrice); + mallScoreVoucher.setVoucherAmount(voucherAmount); + mallScoreVoucher.setType("B"); + mallScoreVoucherMapper.insert(mallScoreVoucher); + + //产生一条流水记录 + mallMoneyFlowService.addMoneyFlow( + mallMemberWallet.getMemberId(), + voucherCnt, + MoneyFlowTypeEnum.VOUCHER_BUY.getValue(), + voucherNo, + FlowTypeEnum.VOUCHER_CNT.getValue()); + return new FebsResponse().success().message("操作成功"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse voucherBusinessSale(ApiVoucherBusinessDto apiVoucherBusinessDto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + BigDecimal voucherCnt = apiVoucherBusinessDto.getVoucherCnt(); + if(voucherCnt.compareTo(BigDecimal.ZERO) <= 0){ + throw new FebsException("请输入合理的数量"); + } + String tradePassword = apiVoucherBusinessDto.getTradePassword(); + if (StrUtil.isBlank(tradePassword)) { + throw new FebsException("支付密码错误"); + } + + MallMember mallMember = mallMemberMapper.selectById(memberId); + if (StrUtil.isBlank(mallMember.getTradePassword())) { + throw new FebsException("未设置支付密码"); + } + + if (!SecureUtil.md5(tradePassword).equals(mallMember.getTradePassword())) { + throw new FebsException("支付密码错误"); + } + + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); + BigDecimal voucherCntMember = mallMemberWallet.getVoucherCnt(); + if(voucherCntMember.compareTo(voucherCnt) < 0){ + throw new FebsException("绿色积分不足"); + } + + DataDictionaryCustom scorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + GreenScoreEnum.SCORE_PRICE.getType(), + GreenScoreEnum.SCORE_PRICE.getCode()); + BigDecimal scorePrice = new BigDecimal(scorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); + BigDecimal voucherAmount = voucherCnt.multiply(scorePrice); + //减少凭证积分 + //增加凭证现金 + mallMemberWalletMapper.addVorCherAmountAndCntById(voucherAmount,voucherCnt,mallMemberWallet.getId()); + //增加积分池 + DataDictionaryCustom scorePoolCntDic = dataDictionaryCustomMapper.selectScorePoolCntForUpdate( + GreenScoreEnum.SCORE_POOL_CNT.getType(), + GreenScoreEnum.SCORE_POOL_CNT.getCode()); + BigDecimal scorePoolCnt = new BigDecimal(scorePoolCntDic.getValue() == null ? "0" : scorePoolCntDic.getValue()); + scorePoolCnt = scorePoolCnt.add(voucherCnt).setScale(2,BigDecimal.ROUND_DOWN); + scorePoolCntDic.setValue(scorePoolCnt.toString()); + dataDictionaryCustomMapper.updateById(scorePoolCntDic); + + //增加购买记录 + String voucherNo = MallUtils.getOrderNum("VS"); + MallScoreVoucher mallScoreVoucher = new MallScoreVoucher(); + mallScoreVoucher.setVoucherNo(voucherNo); + mallScoreVoucher.setMemberId(memberId); + mallScoreVoucher.setVoucherCnt(voucherCnt); + mallScoreVoucher.setPrice(scorePrice); + mallScoreVoucher.setVoucherAmount(voucherAmount); + mallScoreVoucher.setType("S"); + mallScoreVoucherMapper.insert(mallScoreVoucher); + + //产生一条流水记录 + mallMoneyFlowService.addMoneyFlow( + mallMemberWallet.getMemberId(), + voucherAmount, + MoneyFlowTypeEnum.VOUCHER_SALE.getValue(), + voucherNo, + FlowTypeEnum.VOUCHER_AMOUNT.getValue()); + return new FebsResponse().success().message("操作成功"); + } + + @Override @Transactional(rollbackFor = Exception.class) public void sign() { MallMember member = LoginUserUtil.getLoginUser(); diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherInfoVo.java new file mode 100644 index 0000000..9f1fd42 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherInfoVo.java @@ -0,0 +1,25 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ApiScoreVoucherInfoVo", description = "绿色积分个人信息") +public class ApiScoreVoucherInfoVo { + + + @ApiModelProperty(value = "绿色积分") + private BigDecimal voucherCnt; + + @ApiModelProperty(value = "现金元") + private BigDecimal voucherAmount; + + @ApiModelProperty(value = "当前积分价格") + private BigDecimal scorePrice; + + @ApiModelProperty(value = "可购买总量") + private BigDecimal scorePoolCnt; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherRecordVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherRecordVo.java new file mode 100644 index 0000000..b995b8f --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiScoreVoucherRecordVo.java @@ -0,0 +1,39 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ApiScoreVoucherRecordVo", description = "绿色积分买卖信息") +public class ApiScoreVoucherRecordVo { + + @ApiModelProperty(value = "编号") + private String voucherNo; + + @ApiModelProperty(value = "会员") + private String memberName; + + /** + * B:买入S:卖出 + */ + @ApiModelProperty(value = "B:买入S:卖出") + private String type; + /** + * 数量 + */ + @ApiModelProperty(value = "数量") + private BigDecimal voucherCnt; + /** + * 单价 + */ + @ApiModelProperty(value = "单价") + private BigDecimal price; + /** + * 总价 + */ + @ApiModelProperty(value = "总价") + private BigDecimal voucherAmount; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MemberBankListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MemberBankListVo.java index 5f708dc..5ba69e1 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/MemberBankListVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/MemberBankListVo.java @@ -23,4 +23,7 @@ // 手机号 @ApiModelProperty(value = "手机号") private String phone; + // 银行卡号 + @ApiModelProperty(value = "数字账号") + private String digitalNo; } diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java index d3f9dc2..458cedf 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java +++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java @@ -15,4 +15,6 @@ * 分享补贴,星级补贴 */ public static final String PERK_MONEY = "hlm_queue_perk_money"; + + public static final String FORCE_VOUCHER_SALE = "hlm_queue_force_voucher_sale"; } diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java index 2bf1c81..30df9c7 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java @@ -84,4 +84,16 @@ } } + + @RabbitListener(queues = QueueConstants.FORCE_VOUCHER_SALE) + public void forceVoucherSaleConsumer(String price) { + log.info("收到强制卖出消息,价格:{}",price); + try { + memberProfitService.selaHalfVoucher(price); + } catch (Exception e) { + log.error("强制卖出异常", e); + // todo 更新表 + + } + } } diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java index 79ca466..ea6f262 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java +++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java @@ -26,7 +26,11 @@ PERK_MONEY("hlm_exchange_perk_money", "hlm_route_key_perk_money", - "hlm_queue_perk_money"); + "hlm_queue_perk_money"), + + FORCE_VOUCHER_SALE("hlm_exchange_force_voucher_sale", + "hlm_route_key_force_voucher_sale", + "hlm_queue_force_voucher_sale"); private String exchange; diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java index 1b9a1e9..e44c1a2 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java @@ -81,4 +81,9 @@ log.info("发送补贴消息:{}", orderId); rabbitTemplate.convertAndSend(RabbitQueueEnum.PERK_MONEY.getExchange(), RabbitQueueEnum.PERK_MONEY.getRoute(), orderId); } + + public void sendForceVoucherSaleMsg(String value) { + log.info("发送强制卖出消息,价格:{}",value); + rabbitTemplate.convertAndSend(RabbitQueueEnum.FORCE_VOUCHER_SALE.getExchange(), RabbitQueueEnum.FORCE_VOUCHER_SALE.getRoute(),value); + } } diff --git a/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml b/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml index 69c0f97..79cd99d 100644 --- a/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml +++ b/src/main/resources/mapper/modules/DataDictionaryCustomMapper.xml @@ -53,4 +53,9 @@ </if> </where> </update> + + <select id="selectScorePoolCntForUpdate" resultType="cc.mrbird.febs.mall.entity.DataDictionaryCustom"> + select a.* from data_dictionary_custom a + where a.type = #{type} and a.code = #{code} for update + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml index 09beb31..d77b4f2 100644 --- a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml @@ -144,5 +144,14 @@ where star > 0 </select> + <update id="addVorCherAmountAndCntById"> + update mall_member_wallet + <set> + voucher_amount = voucher_amount + #{voucherAmount}, + voucher_cnt = voucher_cnt - #{voucherCnt}, + </set> + WHERE id = #{id} + </update> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallScoreVoucherMapper.xml b/src/main/resources/mapper/modules/MallScoreVoucherMapper.xml new file mode 100644 index 0000000..e357925 --- /dev/null +++ b/src/main/resources/mapper/modules/MallScoreVoucherMapper.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cc.mrbird.febs.mall.mapper.MallScoreVoucherMapper"> + + <select id="findMallScoreVoucherListInPage" resultType="cc.mrbird.febs.mall.vo.ApiScoreVoucherRecordVo"> + SELECT + a.voucher_no voucherNo, + a.type type, + a.voucher_cnt voucherCnt, + a.price price, + a.voucher_amount voucherAmount, + RPAD(SUBSTRING(b.NAME,1,1),CHAR_LENGTH(b.NAME),'*') memberName + FROM + mall_score_voucher a + LEFT JOIN mall_member b ON a.member_id = b.id + ORDER BY + a.CREATED_TIME DESC + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/system/hlmVoucherButton.html b/src/main/resources/templates/febs/views/modules/system/hlmVoucherButton.html index d47f681..5f441f9 100644 --- a/src/main/resources/templates/febs/views/modules/system/hlmVoucherButton.html +++ b/src/main/resources/templates/febs/views/modules/system/hlmVoucherButton.html @@ -9,16 +9,25 @@ <label class="layui-form-label febs-form-item-require">价格:</label> <div class="layui-form-mid layui-word-aux">当前价格:</div> <div class="layui-input-inline"> - <input type="text" name="scorePrice" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input" readonly> + <input type="text" name="scorePrice" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input"> </div> - <div class="layui-form-mid layui-word-aux">剩余:</div> + </div> + </div> + <blockquote class="layui-elem-quote blue-border">提现设置,提现时,是否需要凭证</blockquote> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">需要凭证:</label> + <div class="layui-input-block"> + <input type="radio" name="voucherOnOff" value="1" title="是" /> + <input type="radio" name="voucherOnOff" value="2" title="否" checked /> </div> </div> <div class="layui-card-footer"> <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-voucher-button-submit" id="submit">保存</button> + <div class="layui-btn layui-btn-warm table-action" id="voucherButton"> + 确认一键卖出 + </div> </div> <div class="layui-card-footer"> - <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-voucher-button-submit" id="submit">确认一键卖出</button> </div> </div> </div> @@ -38,12 +47,15 @@ margin-bottom: 20px !important; } </style> + <script data-th-inline="javascript" type="text/javascript"> layui.use(['dropdown', 'jquery', 'febs', 'form', 'eleTree'], function () { var $ = layui.jquery, febs = layui.febs, form = layui.form, - hlmVoucherSet = [[${hlmVoucherSetDto}]], + $view = $('#hlm-voucher-button'), + hlmVoucherButton = [[${hlmVoucherButtonDto}]], + $voucherButton = $view.find('#voucherButton'), $view = $('#hlm-voucher-button'); form.verify({ @@ -53,18 +65,33 @@ ] }); - initHlmVoucherSetValue(); + initHlmVoucherButtonValue(); + + $voucherButton.on('click', function () { + febs.modal.confirm('确认一键卖出', '点击【确定】,即强制卖出所有账户的一半积分凭证?', function () { + selaHalfVoucher(); + }); + }); + + + function selaHalfVoucher() { + febs.post(ctx + 'admin/system/selaHalfVoucher', null, function (res) { + febs.alert.success('设置成功'); + return ; + }); + } form.render(); - function initHlmVoucherSetValue() { + function initHlmVoucherButtonValue() { form.val("hlm-voucher-button-form", { - "roleReleasePercent": hlmVoucherSet.roleReleasePercent + "scorePrice": hlmVoucherButton.scorePrice, + "voucherOnOff": hlmVoucherButton.voucherOnOff, }); } form.on('submit(hlm-voucher-button-submit)', function (data) { - febs.post(ctx + 'admin/system/hlmVoucherSet', data.field, function (res) { + febs.post(ctx + 'admin/system/hlmVoucherButton', data.field, function (res) { febs.alert.success('设置成功'); return ; }); diff --git a/src/main/resources/templates/febs/views/modules/system/hlmVoucherSet.html b/src/main/resources/templates/febs/views/modules/system/hlmVoucherSet.html index 024e2e0..15f6934 100644 --- a/src/main/resources/templates/febs/views/modules/system/hlmVoucherSet.html +++ b/src/main/resources/templates/febs/views/modules/system/hlmVoucherSet.html @@ -11,10 +11,15 @@ <div class="layui-input-inline"> <input type="text" name="totalCnt" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input" readonly> </div> - <div class="layui-form-mid layui-word-aux">剩余:</div> + <div class="layui-form-mid layui-word-aux">,剩余:</div> <div class="layui-input-inline"> <input type="text" name="surplusCnt" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input" readonly> </div> + <div class="layui-form-mid layui-word-aux">,可购买总量:</div> + <div class="layui-input-inline"> + <input type="text" name="scorePoolCnt" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input" readonly> + </div> + <div class="layui-form-mid layui-word-aux">。</div> </div> </div> @@ -23,7 +28,7 @@ <label class="layui-form-label febs-form-item-require">比例:</label> <div class="layui-input-block"> <input type="text" name="roleReleasePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > - <div class="layui-word-aux">设置1,每日拨付千分之1</div> + <div class="layui-word-aux">设置1,每日拨付千分之1。</div> </div> </div> @@ -34,7 +39,7 @@ <div class="layui-input-inline"> <input type="text" name="achieveReleasePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > </div> - <div class="layui-form-mid layui-word-aux">例如:1,则表示总凭证数3000000*0.9*0.0001</div> + <div class="layui-form-mid layui-word-aux">,例如:1,则表示总凭证数3000000*0.9*0.0001。</div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">规则一:</label> @@ -42,7 +47,7 @@ <div class="layui-input-inline"> <input type="text" name="achieveMin" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input"> </div> - <div class="layui-form-mid layui-word-aux">才释放积分凭证。</div> + <div class="layui-form-mid layui-word-aux">,才释放积分凭证。</div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">规则二:</label> @@ -50,7 +55,7 @@ <div class="layui-input-inline"> <input type="text" name="achieveMax" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input"> </div> - <div class="layui-form-mid layui-word-aux">释放今日的全额积分凭证。</div> + <div class="layui-form-mid layui-word-aux">,释放今日的全额积分凭证。</div> </div> <blockquote class="layui-elem-quote blue-border">业绩产生积分凭证设置二</blockquote> <div class="layui-form-item"> @@ -59,7 +64,7 @@ <div class="layui-input-inline"> <input type="text" name="roleAchievePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > </div> - <div class="layui-form-mid layui-word-aux">设置20,则表示比例为20%</div> + <div class="layui-form-mid layui-word-aux">,设置20,则表示比例为20%。</div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">比例二:</label> @@ -67,7 +72,7 @@ <div class="layui-input-inline"> <input type="text" name="starAchievePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > </div> - <div class="layui-form-mid layui-word-aux">设置20,则表示比例为20%</div> + <div class="layui-form-mid layui-word-aux">,设置20,则表示比例为20%。</div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">比例三:</label> @@ -75,7 +80,7 @@ <div class="layui-input-inline"> <input type="text" name="levelAchievePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > </div> - <div class="layui-form-mid layui-word-aux">。设置20,则表示比例为20%</div> + <div class="layui-form-mid layui-word-aux">,设置20,则表示比例为20%。</div> </div> <div class="layui-card-footer"> <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-voucher-set-submit" id="submit">保存</button> @@ -127,6 +132,7 @@ "achieveMax": hlmVoucherSet.achieveMax, "totalCnt": hlmVoucherSet.totalCnt, "surplusCnt": hlmVoucherSet.surplusCnt, + "scorePoolCnt": hlmVoucherSet.scorePoolCnt, "roleReleasePercent": hlmVoucherSet.roleReleasePercent }); } -- Gitblit v1.9.1