|
@@ -611,6 +611,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
if(caculateFreezeAmount){
|
|
|
|
|
|
//下面这部分,应该是写到订单支付成功的地方的,写在下面这里,只是为了方便测试
|
|
|
+ //查询订单提成比例
|
|
|
+ QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
+ OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
+ /**
|
|
|
+ * 毛利 = 成本 * 0.38... (推广费用)
|
|
|
+ */
|
|
|
+ String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
|
|
|
+ /**
|
|
|
+ * 推广-推荐人额度 百分比
|
|
|
+ */
|
|
|
+ String grossProfitAncestorQuotaPerc = orderPercentageDO.getGrossProfitAncestorQuotaPerc();
|
|
|
|
|
|
for(Map<String,Object> m:orderMapList){
|
|
|
TradeOrderDO order = (TradeOrderDO)(m.get("order"));
|
|
@@ -629,21 +640,32 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
skuDOMap.put(productSkuDO.getId(),productSkuDO);
|
|
|
}
|
|
|
|
|
|
- Integer totalPromotionExpenses = 0;//总推广费,单位为分
|
|
|
+ Integer totalFreezeAmount = 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);
|
|
|
+ //把商品项的推广费,转换为这项商品直推人获得的冻结积分
|
|
|
+ Integer itemFreezeAmount =
|
|
|
+ promotionExpenses2GrossProfitAncestorQuota(promotionExpenses,
|
|
|
+ grossProfitPerc,//毛利 = 成本 * 0.38... (推广费用)
|
|
|
+ grossProfitAncestorQuotaPerc//推广-推荐人额度 百分比
|
|
|
+ );
|
|
|
+
|
|
|
+ //记录用户在此订单项获得的冻结积分
|
|
|
+ TradeOrderItemDO toid = new TradeOrderItemDO();
|
|
|
+ toid.setId(tradeOrderItemDO.getId());
|
|
|
+ toid.setIncreaseIntegral(itemFreezeAmount);
|
|
|
+ tradeOrderItemMapper.updateById(toid);
|
|
|
+
|
|
|
+ totalFreezeAmount+=itemFreezeAmount;
|
|
|
+ }
|
|
|
|
|
|
Long tradeOrderId = order.getId();
|
|
|
String OrderNum =order.getNo();
|
|
|
- integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payPoints*(-1),freezeAmount,tradeOrderId,OrderNum);
|
|
|
+ integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payPoints*(-1),totalFreezeAmount,tradeOrderId,OrderNum);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -653,25 +675,29 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
/**
|
|
|
* 把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
- * @param totalPromotionExpenses 商品的推广费总额
|
|
|
+ * @param promotionExpenses 商品的推广费总额
|
|
|
* @return 输入推广费,对应的直推人获得的冻结积分
|
|
|
*/
|
|
|
public static Integer promotionExpenses2GrossProfitAncestorQuota(
|
|
|
- OrderPercentageMapper orderPercentageMapper,
|
|
|
- Integer totalPromotionExpenses){
|
|
|
-
|
|
|
- //查询订单提成比例
|
|
|
- QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
- OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
+ Integer promotionExpenses,
|
|
|
+ /**
|
|
|
+ * 毛利 = 成本 * 0.38... (推广费用)
|
|
|
+ */
|
|
|
+ String grossProfitPerc,
|
|
|
+ /**
|
|
|
+ * 推广-推荐人额度 百分比
|
|
|
+ */
|
|
|
+ String grossProfitAncestorQuotaPerc
|
|
|
+ ){
|
|
|
|
|
|
//转为BigDecimal
|
|
|
- BigDecimal profit = new BigDecimal(String.valueOf(totalPromotionExpenses));
|
|
|
+ BigDecimal profit = new BigDecimal(String.valueOf(promotionExpenses));
|
|
|
|
|
|
// 计算毛利: 利润 * 0.38
|
|
|
- BigDecimal grossProfit = profit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
|
|
|
+ BigDecimal grossProfit = profit.multiply(new BigDecimal(grossProfitPerc)).setScale(4, RoundingMode.DOWN);
|
|
|
|
|
|
// 计算直推人额度: 毛利 * 0.35
|
|
|
- BigDecimal descendantQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc())).setScale(4, RoundingMode.DOWN);
|
|
|
+ BigDecimal descendantQuota = grossProfit.multiply(new BigDecimal(grossProfitAncestorQuotaPerc)).setScale(4, RoundingMode.DOWN);
|
|
|
|
|
|
//把钱转为:增加的冻结积分
|
|
|
BigDecimal freezeAmount_bigDecimal = money2Integral(descendantQuota);
|
|
@@ -802,6 +828,18 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
// System.out.println("#########updateOrderPaid####payOrderId:"+payOrderId);
|
|
|
|
|
|
+ //查询订单提成比例
|
|
|
+ QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
+ OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
+ /**
|
|
|
+ * 毛利 = 成本 * 0.38... (推广费用)
|
|
|
+ */
|
|
|
+ String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
|
|
|
+ /**
|
|
|
+ * 推广-推荐人额度 百分比
|
|
|
+ */
|
|
|
+ String grossProfitAncestorQuotaPerc = orderPercentageDO.getGrossProfitAncestorQuotaPerc();
|
|
|
+
|
|
|
//add by Ben 根据支付订单id,查询所有 支付订单 对应的 订单
|
|
|
List<TradeOrderDO> TradeOrderDOList = tradeOrderMapper.selectList("pay_order_id", payOrderId);
|
|
|
|
|
@@ -842,6 +880,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
// 5. 增加用户冻结积分 20240420
|
|
|
|
|
|
+
|
|
|
List<Long> skuList = new ArrayList<>();
|
|
|
//汇总各订单项利润
|
|
|
List<TradeOrderItemDO> TradeOrderItemList = tradeOrderItemMapper.selectList("order_id", order.getId());
|
|
@@ -856,20 +895,34 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
skuDOMap.put(productSkuDO.getId(),productSkuDO);
|
|
|
}
|
|
|
|
|
|
- Integer totalPromotionExpenses = 0;//总推广费,单位为分
|
|
|
+ Integer totalFreezeAmount = 0;//用户总的冻结积分
|
|
|
for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
|
|
|
ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
|
|
|
//这类商品的总推广费
|
|
|
Integer promotionExpenses = (productSkuDO.getPrice()-productSkuDO.getCostPrice())
|
|
|
*tradeOrderItemDO.getCount();
|
|
|
- totalPromotionExpenses+=promotionExpenses;
|
|
|
+
|
|
|
+ //把商品项的推广费,转换为这项商品直推人获得的冻结积分
|
|
|
+ Integer itemFreezeAmount =
|
|
|
+ promotionExpenses2GrossProfitAncestorQuota(promotionExpenses,
|
|
|
+ grossProfitPerc,//毛利 = 成本 * 0.38... (推广费用)
|
|
|
+ grossProfitAncestorQuotaPerc//推广-推荐人额度 百分比
|
|
|
+ );
|
|
|
+
|
|
|
+ totalFreezeAmount+=itemFreezeAmount;
|
|
|
+
|
|
|
+ //记录用户在此订单项获得的冻结积分
|
|
|
+ TradeOrderItemDO toid = new TradeOrderItemDO();
|
|
|
+ toid.setId(tradeOrderItemDO.getId());
|
|
|
+ toid.setIncreaseIntegral(itemFreezeAmount);
|
|
|
+ tradeOrderItemMapper.updateById(toid);
|
|
|
}
|
|
|
|
|
|
//把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
- Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
|
|
|
+// Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
|
|
|
|
|
|
String OrderNum =order.getNo();
|
|
|
- integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0,freezeAmount,tradeOrderId,OrderNum);
|
|
|
+ integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0,totalFreezeAmount,tradeOrderId,OrderNum);
|
|
|
|
|
|
}
|
|
|
|