From 869ea72afdca9ad0f83a6f09659e4a4478012606 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 04 Apr 2023 10:59:41 +0800
Subject: [PATCH] 关于积分凭证
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 184 +++++++++++++++++++++++++++++++--------------
1 files changed, 127 insertions(+), 57 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index f27f44e..c87ca01 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -78,6 +78,7 @@
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
private final MallAchieveRecordMapper mallAchieveRecordMapper;
private final MallMemberWalletMapper mallMemberWalletMapper;
+ private final MallMqRecordMapper mallMqRecordMapper;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -206,25 +207,19 @@
/**
* 使用积分折扣现金
*/
- 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);
+ 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);
@@ -349,6 +344,15 @@
orderInfo.setPayResult("1");
changeWallet(orderInfo.getId());
+ /**
+ * 插入一条待处理记录
+ * mq处理之后,更新状态
+ */
+ MallMqRecord mallMqRecord = new MallMqRecord();
+ mallMqRecord.setOrderId(orderInfo.getId());
+ mallMqRecord.setState(2);
+ mallMqRecord.setRetryTimes(2);
+ mallMqRecordMapper.insert(mallMqRecord);
//发送补贴消息
agentProducer.sendPerkMoneyMsg(orderInfo.getId());
//发送代理自动升级消息
@@ -432,6 +436,7 @@
* 产生一条业绩记录
* @param orderId
*/
+ @Override
public void changeWallet(Long orderId){
MallOrderInfo orderInfo = this.baseMapper.selectById(orderId);
Long memberId = orderInfo.getMemberId();
@@ -443,6 +448,7 @@
* 所有合伙人补贴至消费礼包的三倍额度需要复购一次。
*/
BigDecimal scoreSum = BigDecimal.ZERO;
+ BigDecimal achieveSum = BigDecimal.ZERO;
List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId());
if (CollUtil.isNotEmpty(orderItems)) {
for (MallOrderItem orderItem : orderItems) {
@@ -453,11 +459,41 @@
*/
if (mallGoods.getIsNormal() == 2) {
hasTc = true;
- BigDecimal star = mallGoods.getStar()==null ? BigDecimal.ZERO : mallGoods.getStar();
+ BigDecimal star = (mallGoods.getStar()==null ? BigDecimal.ZERO : mallGoods.getStar())
+ .multiply(new BigDecimal(orderItem.getCnt()));
starSum = starSum.add(star);
+// scoreSum = scoreSum.add(
+// new BigDecimal(mallGoods.getPresentPrice())
+// .multiply(new BigDecimal(3))
+// .multiply(new BigDecimal(orderItem.getCnt()))
+// .abs()
+// .setScale(2,BigDecimal.ROUND_DOWN));
+ String goodsName = mallGoods.getGoodsName();
+ /**
+ * 1-2档投资级别,2.5倍
+ * 3-4档投资级别,2.8倍
+ * 5-6档投资级别,3倍
+ * 目前紧急修改成按照商品名称
+ */
+ BigDecimal basePercent = new BigDecimal("3");
+ if(goodsName.equals("礼包一") || goodsName.equals("礼包二")){
+ basePercent = new BigDecimal("2.5");
+ }
+ if(goodsName.equals("礼包三") || goodsName.equals("礼包四")){
+ basePercent = new BigDecimal("2.8");
+ }
+ if(goodsName.equals("礼包五") || goodsName.equals("礼包六")){
+ basePercent = new BigDecimal("3");
+ }
scoreSum = scoreSum.add(
new BigDecimal(mallGoods.getPresentPrice())
- .multiply(new BigDecimal(3))
+ .multiply(new BigDecimal(orderItem.getCnt()))
+ .multiply(basePercent)
+ .abs()
+ .setScale(2,BigDecimal.ROUND_DOWN));
+ achieveSum = achieveSum.add(
+ new BigDecimal(mallGoods.getPresentPrice())
+ .multiply(new BigDecimal(orderItem.getCnt()))
.abs()
.setScale(2,BigDecimal.ROUND_DOWN));
}
@@ -477,6 +513,16 @@
MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
if(starGet.compareTo(star.add(starSum)) < 0){
+ if(starGet.compareTo(BigDecimal.ZERO) == 0){
+ mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
+ mallMoneyFlowService.addMoneyFlow(
+ memberId,
+ starSum,
+ MoneyFlowTypeEnum.STAR.getValue(),
+ orderInfo.getOrderNo(),
+ FlowTypeEnum.STAR.getValue(),
+ 2);
+ }
if(starGet.compareTo(star) > 0){
BigDecimal subtract = starGet.subtract(star);
if(subtract.compareTo(starSum) < 0){
@@ -488,7 +534,8 @@
starSum,
MoneyFlowTypeEnum.STAR.getValue(),
orderInfo.getOrderNo(),
- FlowTypeEnum.STAR.getValue());
+ FlowTypeEnum.STAR.getValue(),
+ 2);
}
}else{
mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
@@ -497,7 +544,8 @@
starSum,
MoneyFlowTypeEnum.STAR.getValue(),
orderInfo.getOrderNo(),
- FlowTypeEnum.STAR.getValue());
+ FlowTypeEnum.STAR.getValue(),
+ 2);
}
}
}
@@ -505,13 +553,29 @@
* 增加补贴额度
*/
if (scoreSum.compareTo(BigDecimal.ZERO) > 0) {
+// MallMember mallMember = memberMapper.selectById(memberId);
+// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 5){
+// scoreSum = scoreSum.multiply(new BigDecimal(3));
+// }
+// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) >= 3
+// &&MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 5){
+// scoreSum = scoreSum.multiply(new BigDecimal(2.8));
+// }
+// if(MemberLevelEnum.SECOND_LEVEL.getLevelCode(mallMember.getLevel()) < 3){
+// scoreSum = scoreSum.multiply(new BigDecimal(2.5));
+// }
memberWalletService.add(scoreSum, memberId, "totalScore");
mallMoneyFlowService.addMoneyFlow(
memberId,
scoreSum,
MoneyFlowTypeEnum.TOTAL_SCORE.getValue(),
orderInfo.getOrderNo(),
- FlowTypeEnum.TOTAL_SCORE.getValue());
+ "",
+ scoreSum.toString(),
+ memberId,
+ 1,
+ FlowTypeEnum.TOTAL_SCORE.getValue(),
+ 2);
}
}
@@ -550,13 +614,15 @@
/**
* 产生一条业绩记录
*/
- 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);
+ if(achieveSum.compareTo(BigDecimal.ZERO) > 0){
+ MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
+ mallAchieveRecord.setMemberId(memberId);
+ mallAchieveRecord.setAchieveTime(new Date());
+ mallAchieveRecord.setAmount(achieveSum.subtract(orderInfo.getScoreAmount()));
+ mallAchieveRecord.setOrderId(orderId);
+ mallAchieveRecord.setPayTime(orderInfo.getPayTime());
+ mallAchieveRecordMapper.insert(mallAchieveRecord);
+ }
}
public static void main(String[] args) {
@@ -841,21 +907,39 @@
}
boolean hasTc = false;
+ //总的折扣积分数量
BigDecimal total = BigDecimal.ZERO;
for (AddOrderItemDto item : addOrderDto.getItems()) {
- MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
- MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
- /**
- * 贡献点判断
+ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+ if(ObjectUtil.isEmpty(sku)){
+ throw new FebsException("商品已更新,请重新下单");
+ }
+ MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+ if(ObjectUtil.isEmpty(mallGoods)){
+ throw new FebsException("商品已更新,请重新下单");
+ }
+ /**
+ * 贡献点判断
+ */
+ if (mallGoods.getIsNormal() == 2) {
+ hasTc = true;
+ }
+ /*
+ 获取单个商品的折扣积分数量
+ = 现价 * 数量 * 折扣现金比例
*/
- if (mallGoods.getIsNormal() == 2) {
- hasTc = true;
- }
- BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
- total = total.add(amount);
+ BigDecimal scorePercent = new BigDecimal(mallGoods.getScorePercent()).multiply(new BigDecimal(0.01));
+ BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())).multiply(scorePercent);
+ total = total.add(amount);
}
BigDecimal score = ObjectUtil.isEmpty(addOrderDto.getScore()) ? BigDecimal.ZERO : addOrderDto.getScore();
+
+ MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+ BigDecimal prizeScore = mallMemberWallet.getPrizeScore();
+ if(prizeScore.compareTo(score) < 0){
+ throw new FebsException("积分不足");
+ }
if(hasTc){
//系统设置的个人贡献点最大值
DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
@@ -864,43 +948,29 @@
if(ObjectUtil.isNotEmpty(starGetDic)){
String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
BigDecimal starGet = new BigDecimal(starGetStr);
-
- MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
- if(starGet.compareTo(star) <= 0){
+ if(starGet.compareTo(BigDecimal.ZERO) != 0 && starGet.compareTo(star) <= 0){
throw new FebsException("无法购买套餐");
- }
- BigDecimal prizeScore = mallMemberWallet.getPrizeScore();
- if(prizeScore.compareTo(score) < 0){
- throw new FebsException("积分不足");
}
}
}
/**
* 使用积分折扣现金
*/
- DataDictionaryCustom scorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- DataDictionaryEnum.SCORE_PERCENT.getType(),
- DataDictionaryEnum.SCORE_PERCENT.getCode()
- );
DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
DataDictionaryEnum.SCORE_CHANGE.getType(),
DataDictionaryEnum.SCORE_CHANGE.getCode()
);
- if(ObjectUtil.isNotEmpty(scorePercentDic)){
- //商品的现金折扣比例
- BigDecimal scorePercent = new BigDecimal(scorePercentDic.getValue()).multiply(BigDecimal.valueOf(0.01));
- //最大折扣金额对应需要的总积分数目
- 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).setScale(2,BigDecimal.ROUND_DOWN);
- if(scorePercentMaxAmount.compareTo(score) < 0){
- throw new FebsException("最多可使用"+scorePercentMaxAmount+"积分");
- }
+ //最大折扣金额对应需要的总积分数目
+ BigDecimal scorePercentMaxAmount = total;
+ BigDecimal scoreChange = BigDecimal.ONE;
+ if(ObjectUtil.isNotEmpty(scoreChangeDic)){
+ scoreChange = new BigDecimal(scoreChangeDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN);
+ }
+ scorePercentMaxAmount = scorePercentMaxAmount.multiply(scoreChange).setScale(2,BigDecimal.ROUND_DOWN);
+ if(scorePercentMaxAmount.compareTo(score) < 0){
+ throw new FebsException("最多可使用"+scorePercentMaxAmount+"积分");
}
return new FebsResponse().success();
}
--
Gitblit v1.9.1