src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
@@ -25,7 +25,15 @@ /** * 佣金 */ COMMISSION(4); COMMISSION(4), /** * 贡献点 */ STAR(5), /** * 补贴额度 */ TOTAL_SCORE(6); private final int value; src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -123,7 +123,17 @@ /** * 星级奖励 */ STAR_PERK_SEVEN(24); STAR_PERK_SEVEN(24), /** * 贡献点 */ STAR(25), /** * 补贴额度 */ TOTAL_SCORE(26); private final int value; src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -32,6 +32,14 @@ private final IApiMallOrderInfoService mallOrderInfoService; @ApiOperation(value = "判断是否允许创建订单", notes = "判断是否允许创建订单") @PostMapping(value = "/judgeCreateOrder") public FebsResponse judgeCreateOrder(@RequestBody AddOrderDto addOrderDto) { boolean result = mallOrderInfoService.judgeCreateOrder(addOrderDto); return new FebsResponse().success().data(result); } @ApiOperation(value = "创建订单", notes = "创建订单") @PostMapping(value = "/createOrder") public FebsResponse createOrder(@RequestBody AddOrderDto addOrderDto) { src/main/java/cc/mrbird/febs/mall/dto/AddMallGoodsDto.java
@@ -82,4 +82,6 @@ private BigDecimal carriage; private BigDecimal star; } src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -5,6 +5,7 @@ import lombok.Data; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.List; /** @@ -37,4 +38,7 @@ @ApiModelProperty(value = "商品明细") private List<AddOrderItemDto> items; @ApiModelProperty(value = "积分数量") private BigDecimal score; } src/main/java/cc/mrbird/febs/mall/dto/MallGoodsUpdateDto.java
@@ -86,4 +86,5 @@ private Integer hasCarriage; private BigDecimal carriage; private BigDecimal star; } src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java
@@ -114,5 +114,9 @@ private Integer hasCarriage; private BigDecimal carriage; /** * 贡献值 */ private BigDecimal star; } src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
@@ -93,4 +93,8 @@ private Integer deliverType; private Long shopId; //折扣后金额 private BigDecimal scoreAmount; //折扣积分数量 private BigDecimal scoreCnt; } src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java
@@ -31,4 +31,6 @@ List<MallMemberWallet> selectSumStarByIds(@Param("list")List<Long> ids); int updateStarByList(@Param("list")List<Map<String, Object>> result); int updateTotalScoreByList(@Param("list")List<Map<String, Object>> resultReduce); } src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
@@ -35,4 +35,6 @@ void goodsComment(ApiAddCommentDtos addCommentDtos); FebsResponse bangCardSign(BangCardSignDto bangCardSignDto); boolean judgeCreateOrder(AddOrderDto addOrderDto); } src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -44,6 +44,7 @@ private final IMallMoneyFlowService mallMoneyFlowService; private final MallMemberWalletMapper mallMemberWalletMapper; private final SqlSessionTemplate sqlSessionTemplate; private final IApiMallMemberWalletService memberWalletService; @Override @Transactional(rollbackFor = Exception.class) @@ -195,14 +196,25 @@ //分享补贴金额 BigDecimal sharePerkAmount = amount.multiply(sharePerkPercent); iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId()); //所有合伙人补贴至消费礼包的三倍额度需要复购一次。 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberUp.getId()); BigDecimal totalScore = mallMemberWallet.getTotalScore(); if(totalScore.compareTo(sharePerkAmount) < 0){ sharePerkAmount = totalScore; } if(BigDecimal.ZERO.compareTo(sharePerkAmount) < 0){ //减少补贴额度 memberWalletService.reduce(sharePerkAmount, memberId, "totalScore"); mallMoneyFlowService.addMoneyFlow( mallMemberUp.getId(), sharePerkAmount, MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId()); mallMoneyFlowService.addMoneyFlow( mallMemberUp.getId(), sharePerkAmount, MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); } } /** * 星级奖励 @@ -228,6 +240,7 @@ * @return */ public List<MallMember> getStarRecord(List<MallMember> mallMembersOlds,String LevelParam,BigDecimal amount,String orderNo,Long memberId,int starPerkType){ long start = System.currentTimeMillis(); //根据用户的level获取用户 List<MallMember> mallMemberStars = memberMapper.selectMemberWithLevel(LevelParam); if(CollUtil.isNotEmpty(mallMembersOlds)){ @@ -260,6 +273,7 @@ //给当前等级的每个用户发放星级奖励 int count = 0; List<Map<String,Object>> result = new ArrayList<>(); List<Map<String,Object>> resultReduce = new ArrayList<>(); List<MallMoneyFlow> mallMoneyFlows = new ArrayList<>(); for(MallMemberWallet mallMemberWallet : mallMemberWallets){ Map<String,Object> hashMap = new HashMap<>(); @@ -267,44 +281,63 @@ //当前用户的星级奖励 BigDecimal starPerkAmount = starPerkAmountAva .multiply(new BigDecimal(starCnt)).abs().setScale(2, BigDecimal.ROUND_DOWN); hashMap.put("id",mallMemberWallet.getId()); hashMap.put("starPerkAmount",starPerkAmount); result.add(hashMap); //生成星级奖励的流水对象 MallMoneyFlow mallMoneyFlow = new MallMoneyFlow(); mallMoneyFlow.setMemberId(mallMemberWallet.getMemberId()); mallMoneyFlow.setAmount(starPerkAmount); mallMoneyFlow.setType(starPerkType); mallMoneyFlow.setOrderNo(orderNo); mallMoneyFlow.setRtMemberId(memberId); mallMoneyFlow.setStatus(2); mallMoneyFlow.setFlowType(FlowTypeEnum.BALANCE.getValue()); mallMoneyFlows.add(mallMoneyFlow); BigDecimal totalScorePerk = mallMemberWallet.getTotalScore(); if(totalScorePerk.compareTo(starPerkAmount) < 0){ starPerkAmount = totalScorePerk; } if(BigDecimal.ZERO.compareTo(starPerkAmount) < 0){ hashMap.put("id",mallMemberWallet.getId()); hashMap.put("starPerkAmount",starPerkAmount); result.add(hashMap); resultReduce.add(hashMap); //生成星级奖励的流水对象 MallMoneyFlow mallMoneyFlow = new MallMoneyFlow(); mallMoneyFlow.setMemberId(mallMemberWallet.getMemberId()); mallMoneyFlow.setAmount(starPerkAmount); mallMoneyFlow.setType(starPerkType); mallMoneyFlow.setOrderNo(orderNo); mallMoneyFlow.setRtMemberId(memberId); mallMoneyFlow.setStatus(2); mallMoneyFlow.setFlowType(FlowTypeEnum.BALANCE.getValue()); mallMoneyFlows.add(mallMoneyFlow); } count = count + 1; if (count % 1000 == 0 || count == mallMemberWallets.size()) { int updateCount = mallMemberWalletMapper.updateStarByList(result); if(updateCount>0){ log.info("============更新============第{}条数据===========",count); if(CollUtil.isNotEmpty(result)){ int resultCount = mallMemberWalletMapper.updateStarByList(result); if(resultCount>0){ log.info("============余额新增============第{}条数据===========",resultCount); } //每更新完一批数据,在result内进行删除操作。 result.clear(); int resultReduceCount = mallMemberWalletMapper.updateTotalScoreByList(resultReduce); if(resultReduceCount>0){ log.info("============额度减少============第{}条数据===========",resultReduceCount); } //每更新完一批数据,在result内进行删除操作。 resultReduce.clear(); } //每更新完一批数据,在result内进行删除操作。 result.clear(); } } SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); MallMoneyFlowMapper mallMoneyFlowMapper = sqlSession.getMapper(MallMoneyFlowMapper.class); long start = System.currentTimeMillis(); for(int i = 1; i <= mallMoneyFlows.size(); i++){ mallMoneyFlowMapper.insertMoneyFlow(mallMoneyFlows.get(i-1)); if (i % 1000 == 0 || i == mallMoneyFlows.size()) { long end = System.currentTimeMillis(); log.info("============插入============第{}条数据,时间:{}===========",mallMoneyFlows.size(),(end - start)/1000); sqlSession.commit(); sqlSession.clearCache(); if(CollUtil.isNotEmpty(mallMoneyFlows)){ SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); MallMoneyFlowMapper mallMoneyFlowMapper = sqlSession.getMapper(MallMoneyFlowMapper.class); for(int i = 1; i <= mallMoneyFlows.size(); i++){ mallMoneyFlowMapper.insertMoneyFlow(mallMoneyFlows.get(i-1)); if (i % 1000 == 0 || i == mallMoneyFlows.size()) { log.info("============插入流水============第{}条数据===========",mallMoneyFlows.size()); sqlSession.commit(); sqlSession.clearCache(); } } sqlSession.close(); } sqlSession.close(); } } long end = System.currentTimeMillis(); log.info("============订单:{},时间:{}===========",orderNo,(end - start)/1000); return mallMemberStars; } } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -379,12 +379,40 @@ throw new FebsException("支付密码错误"); } walletService.reduceBalance(transferDto.getAmount(), memberId); String orderNo = MallUtils.getOrderNum("T"); this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null, FlowTypeEnum.BALANCE.getValue()); DataDictionaryCustom cashOutSettingDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode() ); CashOutSettingVo cashOutSettingVo = JSONObject.parseObject(cashOutSettingDic.getValue(), CashOutSettingVo.class); BigDecimal insideFee = cashOutSettingVo.getInsideFee().multiply(BigDecimal.valueOf(0.01)); //转账手续费 BigDecimal insideFeeAmount = transferDto.getAmount().multiply(insideFee).setScale(2, BigDecimal.ROUND_DOWN); walletService.addBalance(transferDto.getAmount(), mallMember.getId()); this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); BigDecimal avaAmount = transferDto.getAmount().subtract(insideFeeAmount).setScale(2, BigDecimal.ROUND_DOWN); walletService.reduceBalance(avaAmount, memberId); String orderNo = MallUtils.getOrderNum("T"); this.addMoneyFlow( memberId, avaAmount.negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null, FlowTypeEnum.BALANCE.getValue()); walletService.addBalance(avaAmount, mallMember.getId()); this.addMoneyFlow( mallMember.getId(), avaAmount, MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); } @Override src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -77,6 +77,8 @@ private final MallMemberBankSignMapper mallMemberBankSignMapper; private final MallMemberBankMapper mallMemberBankMapper; private final MallShopApplyMapper mallShopApplyMapper; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallAchieveRecordMapper mallAchieveRecordMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -202,7 +204,28 @@ } mallOrderItemMapper.insert(orderItem); } /** * 使用积分折扣现金 */ DataDictionaryCustom scorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.SCORE_PERCENT.getType(), DataDictionaryEnum.SCORE_PERCENT.getCode() ); DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.SCORE_CHANGE.getType(), DataDictionaryEnum.SCORE_CHANGE.getCode() ); BigDecimal score = ObjectUtil.isEmpty(addOrderDto.getScore()) ? BigDecimal.ZERO : addOrderDto.getScore(); orderInfo.setScoreCnt(score); if(ObjectUtil.isNotEmpty(scorePercentDic)){ BigDecimal scoreChange = BigDecimal.ONE; if(ObjectUtil.isNotEmpty(scoreChangeDic)){ scoreChange = new BigDecimal(scoreChangeDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN); } //折扣现金 BigDecimal scorePercentAmount = score.divide(scoreChange,BigDecimal.ROUND_DOWN).setScale(2,BigDecimal.ROUND_DOWN); orderInfo.setScoreAmount(scorePercentAmount); } orderInfo.setAmount(total); if(2 == deliverType){ orderInfo.setDeliverType(2); @@ -326,46 +349,10 @@ orderInfo.setPayTime(new Date()); orderInfo.setPayResult("1"); boolean hasTc = false; // 静态倍数 List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); if (CollUtil.isNotEmpty(orderItems)) { for (MallOrderItem orderItem : orderItems) { MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); BigDecimal score = BigDecimal.ZERO; MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); if (mallGoods.getIsNormal() == 2) { hasTc = true; score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()).multiply(new BigDecimal(orderItem.getCnt())); // BigDecimal staticMulti = mallGoods.getStaticMulti() == null ? BigDecimal.ZERO : mallGoods.getStaticMulti(); // score = sku.getPresentPrice().multiply(staticMulti); // 普通商品也及时结算,不再10天结算 } else { score = sku.getPresentPrice(); } changeWallet(orderInfo.getId(), member.getId()); if (score.compareTo(BigDecimal.ZERO) > 0) { memberWalletService.add(score, member.getId(), "score"); mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue()); // 添加业绩 mallAchieveService.add(orderItem.getId()); } } } // 购买套餐后,升级为普通会员 if (hasTc) { MallMember mallMember = memberMapper.selectById(member.getId()); if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); memberMapper.updateById(mallMember); } } mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); agentProducer.sendAutoLevelUpMsg(member.getId()); agentProducer.sendOrderReturn(orderInfo.getId()); // agentProducer.sendOrderReturn(orderInfo.getId()); break; case "4": if (orderInfo.getOrderType() != 2) { @@ -382,28 +369,6 @@ mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); break; case "5": // AgreementSignDto agreementSignDto = new AgreementSignDto(); // agreementSignDto.setOrderNo(orderInfo.getOrderNo()); // agreementSignDto.setSmsCode(payOrderDto.getSmsCode()); // String agreementSignStr = unipayService.agreementSign(agreementSignDto); // if("fail".equals(agreementSignStr)){ // throw new FebsException("支付失败"); // }else{ // JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr); // payResultStr = (String) jsonObject.get("biz_code"); // String signData = (String) jsonObject.get("data"); // String signBizMsg = (String) jsonObject.get("biz_msg"); // // JSONObject signDatajsonObject = JSONUtil.parseObj(signData); // String err_msg = (String) signDatajsonObject.get("err_msg"); // if(!"JS000000".equals(payResultStr)){ // throw new FebsException(signBizMsg); // } // if(ObjectUtil.isNotNull(signDatajsonObject.get("err_code"))){ // throw new FebsException(err_msg); // } // } AgreementPayDto agreementPayDto = new AgreementPayDto(); agreementPayDto.setOrderNo(orderInfo.getOrderNo()); @@ -457,6 +422,116 @@ return map; } /** * 支付金额后的操作 * 减少积分,增加流水 * 购买套餐后,升级会员等级 * 增加支付金额流水 * 增加补贴额度 * 增加贡献值,增加流水 * 产生一条业绩记录 * @param orderId * @param memberId */ public void changeWallet(Long orderId,Long memberId){ MallOrderInfo orderInfo = this.baseMapper.selectById(orderId); boolean hasTc = false; //总贡献值 BigDecimal starSum = BigDecimal.ZERO; /** * 总补贴额度 * 所有合伙人补贴至消费礼包的三倍额度需要复购一次。 */ BigDecimal scoreSum = BigDecimal.ZERO; List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); if (CollUtil.isNotEmpty(orderItems)) { for (MallOrderItem orderItem : orderItems) { MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); /** * 购买套餐赠送贡献值 * 补贴3倍额度 */ if (mallGoods.getIsNormal() == 2) { hasTc = true; BigDecimal star = mallGoods.getStar(); starSum = starSum.add(star); scoreSum = scoreSum.add( new BigDecimal(mallGoods.getPresentPrice()) .multiply(new BigDecimal(3)) .abs() .setScale(2,BigDecimal.ROUND_DOWN)); } } /** * 增加贡献值,增加流水 */ if (starSum.compareTo(BigDecimal.ZERO) > 0) { memberWalletService.add(starSum, memberId, "star"); mallMoneyFlowService.addMoneyFlow( memberId, starSum, MoneyFlowTypeEnum.STAR.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.STAR.getValue()); } /** * 增加补贴额度 */ if (scoreSum.compareTo(BigDecimal.ZERO) > 0) { memberWalletService.add(scoreSum, memberId, "totalScore"); mallMoneyFlowService.addMoneyFlow( memberId, scoreSum, MoneyFlowTypeEnum.TOTAL_SCORE.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.TOTAL_SCORE.getValue()); } } /** * 购买套餐后,升级会员等级 */ if (hasTc) { MallMember mallMember = memberMapper.selectById(memberId); if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) { mallMember.setLevel(AgentLevelEnum.SECOND_LEVEL.name()); memberMapper.updateById(mallMember); } } /** * 增加支付金额流水 */ mallMoneyFlowService.addMoneyFlow( memberId, orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); /** * 减少积分,增加流水 */ int reduce = memberWalletService.reduce(orderInfo.getScoreCnt(), memberId, "prizeScore"); if (reduce == 2) { throw new FebsException("积分不足"); } mallMoneyFlowService.addMoneyFlow( memberId, orderInfo.getScoreCnt().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); /** * 产生一条业绩记录 */ MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(); mallAchieveRecord.setMemberId(memberId); mallAchieveRecord.setAchieveTime(new Date()); mallAchieveRecord.setAmount(orderInfo.getAmount().subtract(orderInfo.getScoreAmount())); mallAchieveRecord.setOrderId(orderId); mallAchieveRecord.setPayTime(orderInfo.getPayTime()); mallAchieveRecordMapper.insert(mallAchieveRecord); } public static void main(String[] args) { String str = "{\"biz_code\":\"JS000000\",\"biz_msg\":\"成功\",\"data\":\"{\\\"order_status\\\":\\\"P2000\\\",\\\"jp_order_no\\\":\\\"100120220826446740396081496064\\\",\\\"err_msg\\\":\\\"短信验证码不符\\\",\\\"err_code\\\":\\\"CP110026\\\",\\\"sign_no\\\":\\\"\\\",\\\"mch_order_no\\\":\\\"NO_2022082618263952399\\\"}\",\"mch_no\":\"888118000001971\",\"rand_str\":\"an2w7ulf5ru6upkk5bdg441kdi3gnpvu\",\"resp_code\":\"SUCCESS\",\"sec_key\":\"\",\"sign\":\"NiJXRTSIZ9xZMUOwEHiEHdZXmgL2cHUU5WUa1NbMRRzui0DIiuZSW4e31LjnBxwVwmy3uuPMP+tqhY8VLyC8uCFOdGdZI7e72VuRvyvaiW7/sqCrsfgPOBEjiGE/CmSMRoEXv9HmqCyNBF6iHSEhQJql5Yge30dQdyB6xFfqjk0=\",\"sign_type\":\"2\"}"; @@ -486,7 +561,7 @@ throw new FebsException("支付密码错误"); } int reduce = memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); int reduce = memberWalletService.reduce(orderInfo.getAmount().subtract(orderInfo.getScoreAmount()).add(orderInfo.getCarriage()), mallMember.getId(), field); if (reduce == 2) { throw new FebsException("余额不足"); } @@ -731,4 +806,49 @@ } } @Override public boolean judgeCreateOrder(AddOrderDto addOrderDto) { boolean flag = false; if (CollUtil.isEmpty(addOrderDto.getItems())) { return false; } BigDecimal total = BigDecimal.ZERO; for (AddOrderItemDto item : addOrderDto.getItems()) { MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); total = total.add(amount); } /** * 使用积分折扣现金 */ DataDictionaryCustom scorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.SCORE_PERCENT.getType(), DataDictionaryEnum.SCORE_PERCENT.getCode() ); DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.SCORE_CHANGE.getType(), DataDictionaryEnum.SCORE_CHANGE.getCode() ); BigDecimal score = ObjectUtil.isEmpty(addOrderDto.getScore()) ? BigDecimal.ZERO : addOrderDto.getScore(); if(ObjectUtil.isNotEmpty(scorePercentDic)){ //商品的现金折扣比例 BigDecimal scorePercent = new BigDecimal(scorePercentDic.getValue()).divide(new BigDecimal(100), BigDecimal.ROUND_DOWN); //最大折扣金额对应需要的总积分数目 BigDecimal scorePercentMaxAmount = total.multiply(scorePercent); BigDecimal scoreChange = BigDecimal.ONE; if(ObjectUtil.isNotEmpty(scoreChangeDic)){ scoreChange = new BigDecimal(scoreChangeDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN); } scorePercentMaxAmount = scorePercentMaxAmount.multiply(scoreChange); if(scorePercentMaxAmount.compareTo(score) < 0){ return false; } }else{ flag = true; } return flag; } } src/main/java/cc/mrbird/febs/mall/service/impl/ScoreServiceImpl.java
@@ -51,21 +51,13 @@ MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId()); MallScoreSignRecord mallScoreSignRecord = mallScoreSignRecordMapper.selectRecentSignRecord(member.getId()); ScoreSignVo scoreSign = new ScoreSignVo(); scoreSign.setMineScore(wallet.getPrizeScore().intValue()); if (mallScoreSignRecord == null) { scoreSign.setHasSignDays(0); } else { mallScoreSignRecord = judgeScoreIsContinuity(mallScoreSignRecord); scoreSign.setHasSignDays(mallScoreSignRecord.getTotalCnt()); } DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_SIGN_SETTING.getType(), DataDictionaryEnum.SCORE_SIGN_SETTING.getCode()); if (dic != null) { scoreSign.setSetting(JSONObject.parseObject(dic.getValue(), ScoreSettingDto.class)); DataDictionaryCustom signScpreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.SIGN_SCORE.getType(), DataDictionaryEnum.SIGN_SCORE.getCode()); if (signScpreDic != null) { scoreSign.setSetting(Integer.parseInt(signScpreDic.getValue())); } return scoreSign; } @@ -89,9 +81,11 @@ public void sign() { MallMember member = LoginUserUtil.getLoginUser(); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_SIGN_SETTING.getType(), DataDictionaryEnum.SCORE_SIGN_SETTING.getCode()); if (dic == null) { throw new FebsException("暂未设置积分"); DataDictionaryCustom signScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.SIGN_SCORE.getType(), DataDictionaryEnum.SIGN_SCORE.getCode()); if (signScoreDic == null) { throw new FebsException("签到活动未开启"); } MallScoreSignRecord mallScoreSignRecord = mallScoreSignRecordMapper.selectRecentSignRecord(member.getId()); @@ -100,65 +94,23 @@ } if (mallScoreSignRecord.getSignTime() != null && DateUtil.betweenDay(mallScoreSignRecord.getSignTime(), new Date(), true) == 0) { throw new FebsException("今天已签到"); throw new FebsException("今日已签到"); } mallScoreSignRecord = judgeScoreIsContinuity(mallScoreSignRecord); ScoreSettingDto scoreSetting = JSONObject.parseObject(dic.getValue(),ScoreSettingDto.class); int days = mallScoreSignRecord.getTotalCnt() == null ? 1 : mallScoreSignRecord.getTotalCnt() + 1; switch (days) { case 1: if (scoreSetting.getSignInOne() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInOne()); break; case 2: if (scoreSetting.getSignInTwo() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInTwo()); break; case 3: if (scoreSetting.getSignInThree() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInThree()); break; case 4: if (scoreSetting.getSignInFour() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInFour()); break; case 5: if (scoreSetting.getSignInFive() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInFive()); break; case 6: if (scoreSetting.getSignInSix() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInSix()); break; case 7: if (scoreSetting.getSignInSeven() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInSeven()); break; } Integer signScore = Integer.parseInt(signScoreDic.getValue()); mallScoreSignRecord.setMemberId(member.getId()); mallScoreSignRecord.setTotalCnt(days); mallScoreSignRecord.setTotalCnt(signScore); mallScoreSignRecord.setSignTime(new Date()); mallScoreSignRecord.setScore(signScore); mallScoreSignRecordMapper.insert(mallScoreSignRecord); BigDecimal amount = BigDecimal.valueOf(mallScoreSignRecord.getScore()); walletService.add(amount, member.getId(), "prizeScore"); mallMoneyFlowService.addMoneyFlow(member.getId(), amount, MoneyFlowTypeEnum.SCORE_SIGN.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue()); mallMoneyFlowService.addMoneyFlow( member.getId(), amount, MoneyFlowTypeEnum.SCORE_SIGN.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue()); } } src/main/java/cc/mrbird/febs/mall/vo/CashOutSettingVo.java
@@ -17,6 +17,9 @@ @ApiModelProperty(value = "提现手续费") private BigDecimal serviceFee; @ApiModelProperty(value = "内转手续费") private BigDecimal insideFee; @ApiModelProperty(value = "提现时间 1:工作日 2:每一天") private Integer workingDays; src/main/java/cc/mrbird/febs/mall/vo/ScoreSignVo.java
@@ -13,12 +13,12 @@ @ApiModel(value = "ScoreSignVo", description = "积分签到返回参数接口") public class ScoreSignVo { @ApiModelProperty(value = "我的竞猜积分") @ApiModelProperty(value = "我的签到积分") private Integer mineScore; @ApiModelProperty(value = "已连续签到") private Integer hasSignDays; // @ApiModelProperty(value = "已连续签到") // private Integer hasSignDays; @ApiModelProperty(value = "签到积分设置") private ScoreSettingDto setting; @ApiModelProperty(value = "每次签到获得积分数量") private Integer setting; } src/main/resources/mapper/modules/MallMemberWalletMapper.xml
@@ -42,6 +42,12 @@ <if test="record.commission != null"> , commission = #{record.commission} </if> <if test="record.totalScore != null"> , total_score = #{record.totalScore} </if> <if test="record.star != null"> , star = #{record.star} </if> where id=#{record.id} and revision=#{record.revision} </update> @@ -70,7 +76,6 @@ </select> <update id="updateStarByList" parameterType="java.util.List" > -- //注意sql语句应被;分隔开,否则批量更新多少条数据就有多少条sql拼在一起。 <foreach collection="list" item="item" index="index" open="" close="" separator=";"> update mall_member_wallet <set> @@ -80,4 +85,14 @@ </foreach> </update> <update id="updateTotalScoreByList" parameterType="java.util.List" > <foreach collection="list" item="item" index="index" open="" close="" separator=";"> update mall_member_wallet <set> total_score = total_score - #{item.starPerkAmount}, </set> WHERE id = #{item.id} </foreach> </update> </mapper> src/main/resources/templates/febs/views/modules/goods/goodsAddNew.html
@@ -77,7 +77,7 @@ </div> </div> <blockquote class="layui-elem-quote blue-border">商品类型</blockquote> <blockquote class="layui-elem-quote blue-border">商品类型:</blockquote> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">商品类型</label> <div class="layui-input-block"> @@ -89,20 +89,28 @@ </div> <div class="layui-form-item febs-hide tc-set"> <label class="layui-form-label">静态倍数</label> <label class="layui-form-label">贡献值:</label> <div class="layui-input-block"> <input type="text" name="staticMulti" placeholder="请输入静态倍数" autocomplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">支付后,赠送(购买金额*静态倍数)的赠送积分</div> <input type="text" name="star" lay-verify="required|integer" placeholder="请输入贡献值" autocomplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">支付后,用户获取对应的贡献值</div> </div> </div> <div class="layui-form-item febs-hide tc-set"> <label class="layui-form-label">静态占比(%)</label> <div class="layui-input-block"> <input type="text" name="staticProp" placeholder="请输入静态占比" autocomplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div> </div> </div> <!-- <div class="layui-form-item febs-hide tc-set">--> <!-- <label class="layui-form-label">静态倍数</label>--> <!-- <div class="layui-input-block">--> <!-- <input type="text" name="staticMulti" placeholder="请输入静态倍数" autocomplete="off" class="layui-input">--> <!-- <div class="layui-form-mid layui-word-aux">支付后,赠送(购买金额*静态倍数)的赠送积分</div>--> <!-- </div>--> <!-- </div>--> <!-- <div class="layui-form-item febs-hide tc-set">--> <!-- <label class="layui-form-label">静态占比(%)</label>--> <!-- <div class="layui-input-block">--> <!-- <input type="text" name="staticProp" placeholder="请输入静态占比" autocomplete="off" class="layui-input">--> <!-- <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>--> <!-- </div>--> <!-- </div>--> </div> <div class="layui-tab-item"> @@ -297,6 +305,14 @@ form.render(); form.verify({ integer: [ /^[1-9]\d*$/ , '只能输入正整数' ] }); var E = window.wangEditor; const editorConfig = { MENU_CONF: {} }; editorConfig.MENU_CONF['uploadImage'] = { src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
@@ -85,7 +85,7 @@ </div> </div> <blockquote class="layui-elem-quote blue-border">商品类型</blockquote> <blockquote class="layui-elem-quote blue-border">商品类型:</blockquote> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">商品类型</label> <div class="layui-input-block"> @@ -98,23 +98,30 @@ </div> <div class="layui-form-item febs-hide tc-set"> <label class="layui-form-label">静态倍数</label> <label class="layui-form-label">贡献值:</label> <div class="layui-input-block"> <input type="text" name="staticMulti" placeholder="请输入静态倍数" autoComplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">支付后,赠送(购买金额*静态倍数)的赠送积分 </div> <input type="text" name="star" lay-verify="required|integer" placeholder="请输入贡献值" autocomplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">支付后,用户获取对应的贡献值</div> </div> </div> <!-- <div class="layui-form-item febs-hide tc-set">--> <!-- <label class="layui-form-label">静态倍数</label>--> <!-- <div class="layui-input-block">--> <!-- <input type="text" name="staticMulti" placeholder="请输入静态倍数"--> <!-- autoComplete="off" class="layui-input">--> <!-- <div class="layui-form-mid layui-word-aux">支付后,赠送(购买金额*静态倍数)的赠送积分--> <!-- </div>--> <!-- </div>--> <!-- </div>--> <div class="layui-form-item febs-hide tc-set"> <label class="layui-form-label">静态占比(%)</label> <div class="layui-input-block"> <input type="text" name="staticProp" placeholder="请输入静态占比" autoComplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div> </div> </div> <!-- <div class="layui-form-item febs-hide tc-set">--> <!-- <label class="layui-form-label">静态占比(%)</label>--> <!-- <div class="layui-input-block">--> <!-- <input type="text" name="staticProp" placeholder="请输入静态占比"--> <!-- autoComplete="off" class="layui-input">--> <!-- <div class="layui-form-mid layui-word-aux">所有套餐静态占比相加应等于100%</div>--> <!-- </div>--> <!-- </div>--> </div> <div class="layui-tab-item"> @@ -343,6 +350,13 @@ }); formSelects.render(); form.verify({ integer: [ /^[1-9]\d*$/ , '只能输入正整数' ] }); var E = window.wangEditor; const editorConfig = { MENU_CONF: {} }; @@ -652,6 +666,7 @@ "costPrice": goodsInfo.costPrice, "isSku": goodsInfo.isSku, "thumb": goodsInfo.thumb, "star": goodsInfo.star, "thumbs": thumbs });