|
@@ -18,7 +18,6 @@ import cn.newfeifan.mall.module.distri.dal.mysql.integral.IntegralMapper;
|
|
|
import cn.newfeifan.mall.module.distri.dal.mysql.orderpercentage.OrderPercentageMapper;
|
|
|
import cn.newfeifan.mall.module.distri.enums.CaclEnum;
|
|
|
import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
|
|
|
-import cn.newfeifan.mall.module.distri.service.ptprofit.PtProfitService;
|
|
|
import cn.newfeifan.mall.module.member.api.address.MemberAddressApi;
|
|
|
import cn.newfeifan.mall.module.member.api.address.dto.MemberAddressRespDTO;
|
|
|
import cn.newfeifan.mall.module.pay.api.order.PayOrderApi;
|
|
@@ -391,14 +390,19 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
return tradePriceService.calculatePrice(calculateReqBO);
|
|
|
}
|
|
|
|
|
|
+ //把数据库的钱转换为数据库的积分
|
|
|
+ public static BigDecimal money2Integral(BigDecimal money){
|
|
|
+ return money.multiply(DistriConstants.MONEY2INTEGRAL_BIG_DECIMAL);
|
|
|
+ }
|
|
|
+
|
|
|
//把数据库的钱转换为数据库的积分
|
|
|
public static Integer money2Integral(Integer money){
|
|
|
- return money*DistriConstants.INTEGRAL2MONEY;
|
|
|
+ return money*DistriConstants.MONEY2INTEGRAL;
|
|
|
}
|
|
|
|
|
|
//把数据库的积分转换为数据库的钱
|
|
|
public static Integer integral2Money(Integer integral){
|
|
|
- return integral/DistriConstants.INTEGRAL2MONEY;
|
|
|
+ return integral/DistriConstants.MONEY2INTEGRAL;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -590,14 +594,23 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setPayOrderId(payOrderId));
|
|
|
}
|
|
|
|
|
|
- //如果订单有使用积分,则抵扣用户的积分 add by Ben
|
|
|
+ //如果订单有使用积分,则抵扣用户的积分。add by Ben
|
|
|
if(payPoints>0){
|
|
|
+ for(Map<String,Object> m:orderMapList) {
|
|
|
+ TradeOrderDO order = (TradeOrderDO) (m.get("order"));
|
|
|
+ Long tradeOrderId = order.getId();
|
|
|
+ String OrderNum =order.getNo();
|
|
|
+ Integer payIntegral = order.getPayIntegral();//每个订单使用的积分
|
|
|
+ integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0, tradeOrderId, OrderNum);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //下面这部分,应该是写到订单支付成功的地方的,写在下面这里,只是为了方便测试
|
|
|
+ boolean caculateFreezeAmount = false;//增加冻结积分
|
|
|
+
|
|
|
+ //增加冻结积分这分部分,是订单微信支付成功后,才执行的,下面的代码只是为了测试方便写在这,实际永远不会执行。add by Ben
|
|
|
+ if(caculateFreezeAmount){
|
|
|
|
|
|
- //查询订单提成比例
|
|
|
- QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
- OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
+ //下面这部分,应该是写到订单支付成功的地方的,写在下面这里,只是为了方便测试
|
|
|
|
|
|
for(Map<String,Object> m:orderMapList){
|
|
|
TradeOrderDO order = (TradeOrderDO)(m.get("order"));
|
|
@@ -624,18 +637,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
*tradeOrderItemDO.getCount();
|
|
|
totalPromotionExpenses+=promotionExpenses;
|
|
|
}
|
|
|
- //转为BigDecimal
|
|
|
- BigDecimal profit = new BigDecimal(String.valueOf(totalPromotionExpenses));
|
|
|
-
|
|
|
- // 计算毛利: 利润 * 0.38
|
|
|
- BigDecimal grossProfit = profit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
|
|
|
-
|
|
|
- // 计算直推人额度: 毛利 * 0.35
|
|
|
- BigDecimal descendantQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc())).setScale(4, RoundingMode.DOWN);
|
|
|
- Integer descendantQuotaInt = descendantQuota.intValue();
|
|
|
|
|
|
- //把钱转为:增加的冻结积分
|
|
|
- Integer freezeAmount = money2Integral(descendantQuotaInt);
|
|
|
+ //把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
+ Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
|
|
|
|
|
|
Long tradeOrderId = order.getId();
|
|
|
String OrderNum =order.getNo();
|
|
@@ -647,6 +651,37 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
return virtualOrder;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
+ * @param totalPromotionExpenses 商品的推广费总额
|
|
|
+ * @return 输入推广费,对应的直推人获得的冻结积分
|
|
|
+ */
|
|
|
+ public static Integer promotionExpenses2GrossProfitAncestorQuota(
|
|
|
+ OrderPercentageMapper orderPercentageMapper,
|
|
|
+ Integer totalPromotionExpenses){
|
|
|
+
|
|
|
+ //查询订单提成比例
|
|
|
+ QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
+ OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
+
|
|
|
+ //转为BigDecimal
|
|
|
+ BigDecimal profit = new BigDecimal(String.valueOf(totalPromotionExpenses));
|
|
|
+
|
|
|
+ // 计算毛利: 利润 * 0.38
|
|
|
+ BigDecimal grossProfit = profit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
|
|
|
+
|
|
|
+ // 计算直推人额度: 毛利 * 0.35
|
|
|
+ BigDecimal descendantQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc())).setScale(4, RoundingMode.DOWN);
|
|
|
+
|
|
|
+ //把钱转为:增加的冻结积分
|
|
|
+ BigDecimal freezeAmount_bigDecimal = money2Integral(descendantQuota);
|
|
|
+
|
|
|
+ Integer freezeAmount = freezeAmount_bigDecimal.intValue();
|
|
|
+
|
|
|
+ return freezeAmount;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
private TradeOrderDO buildTradeOrder(Long userId, AppTradeOrderCreateReqVO createReqVO,
|
|
|
TradePriceCalculateRespBO calculateRespBO) {
|
|
|
TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(userId, createReqVO, calculateRespBO);
|
|
@@ -804,7 +839,41 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus());
|
|
|
TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue());
|
|
|
|
|
|
+
|
|
|
+ // 5. 增加用户冻结积分 20240420
|
|
|
+
|
|
|
+ List<Long> skuList = new ArrayList<>();
|
|
|
+ //汇总各订单项利润
|
|
|
+ List<TradeOrderItemDO> TradeOrderItemList = tradeOrderItemMapper.selectList("order_id", order.getId());
|
|
|
+ for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
|
|
|
+ Long skuId = tradeOrderItemDO.getSkuId();
|
|
|
+ skuList.add(skuId);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ProductSkuDO> productSkuDOS = productSkuMapper.selectBatchIds(skuList);
|
|
|
+ Map<Long,ProductSkuDO> skuDOMap = new HashMap<Long,ProductSkuDO>();
|
|
|
+ for (ProductSkuDO productSkuDO : productSkuDOS) {
|
|
|
+ skuDOMap.put(productSkuDO.getId(),productSkuDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer totalPromotionExpenses = 0;//总推广费,单位为分
|
|
|
+ for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
|
|
|
+ ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
|
|
|
+ //这类商品的总推广费
|
|
|
+ Integer promotionExpenses = (productSkuDO.getPrice()-productSkuDO.getCostPrice())
|
|
|
+ *tradeOrderItemDO.getCount();
|
|
|
+ totalPromotionExpenses+=promotionExpenses;
|
|
|
+ }
|
|
|
+
|
|
|
+ //把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
+ Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
|
|
|
+
|
|
|
+ String OrderNum =order.getNo();
|
|
|
+ integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0,freezeAmount,tradeOrderId,OrderNum);
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|