|  | @@ -2,7 +2,6 @@ package cn.newfeifan.mall.module.distri.service.ordercalc;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 | 
	
		
			
				|  |  | -import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.DuserSaveReqVO;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo.PtProfitSaveReqVO;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogSaveReqVO;
 | 
	
	
		
			
				|  | @@ -16,6 +15,8 @@ import cn.newfeifan.mall.module.distri.enums.SocialStatusEnum;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.mq.message.order.OrderCalcMessage;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.mq.message.order.OrderItemMessage;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.distri.service.dailyawardrecords.DailyAwardRecordsService;
 | 
	
		
			
				|  |  | +import cn.newfeifan.mall.module.distri.service.dailybill.DailyBillService;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 | 
	
		
			
				|  |  |  import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
 | 
	
	
		
			
				|  | @@ -88,6 +89,12 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |      @Resource
 | 
	
		
			
				|  |  |      private PtProfitLogDetailsService ptProfitLogDetailsService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private DailyBillService dailyBillService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Resource
 | 
	
		
			
				|  |  | +    private DailyAwardRecordsService dailyAwardRecordsService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public Long createOrderCalc(OrderCalcSaveReqVO createReqVO) {
 | 
	
		
			
				|  |  |          // 插入
 | 
	
	
		
			
				|  | @@ -133,7 +140,7 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -    public void calc(List<OrderCalcMessage> tradeOrderDO) {
 | 
	
		
			
				|  |  | +    public void calc(List<OrderCalcMessage> tradeOrderDO, List<OrderCalcMessage> bonusQuotaOrderDO) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 获取到当前订单的所有人
 | 
	
		
			
				|  |  |          List<Long> userId = tradeOrderDO.stream().map(OrderCalcMessage::getUserId).collect(Collectors.toList());
 | 
	
	
		
			
				|  | @@ -147,15 +154,138 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |              // 当前计算百分比模板
 | 
	
		
			
				|  |  |              String percentTemplate = JsonUtils.toJsonString(orderPercentageDO);
 | 
	
		
			
				|  |  |              calc(tradeOrderDO, orderPercentageDO, percentTemplate);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            /*
 | 
	
		
			
				|  |  | +            计算合赢奖三部曲:
 | 
	
		
			
				|  |  | +                1:计算每日订单
 | 
	
		
			
				|  |  | +                2:计算每日合赢奖的收益(冻结的)
 | 
	
		
			
				|  |  | +                3:将冻结的合赢将转换成可用的
 | 
	
		
			
				|  |  | +             */
 | 
	
		
			
				|  |  | +            //计算每日订单收益
 | 
	
		
			
				|  |  | +            //  1
 | 
	
		
			
				|  |  | +            calcDailyBill(bonusQuotaOrderDO, orderPercentageDO, percentTemplate);
 | 
	
		
			
				|  |  |          } catch (Exception e) {
 | 
	
		
			
				|  |  |              System.out.println(e.getMessage());
 | 
	
		
			
				|  |  |          } finally {
 | 
	
		
			
				|  |  |              // todo 计算当天用户的碰撞
 | 
	
		
			
				|  |  |              // 计算兄弟分区, 以及后代分区
 | 
	
		
			
				|  |  | -            partitionCrashService.calcCrash(userId);
 | 
	
		
			
				|  |  | +            //  2
 | 
	
		
			
				|  |  | +            List<Long> userId2 = bonusQuotaOrderDO.stream().map(OrderCalcMessage::getUserId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            partitionCrashService.calcCrash(userId2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //  3
 | 
	
		
			
				|  |  | +            dailyAwardRecordsService.transitionBonus();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 计算每家店铺每日订单
 | 
	
		
			
				|  |  | +            dailyBillService.caleDailyBill();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 将原来程序中的合赢将计算程序分离出来(这里用来计算每日的订单合赢奖)
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param bonusQuotaOrderDO 每日符合条件的订单
 | 
	
		
			
				|  |  | +     * @param orderPercentageDO 订单百分比
 | 
	
		
			
				|  |  | +     * @param percentTemplate   计算比例模板
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void calcDailyBill(List<OrderCalcMessage> bonusQuotaOrderDO, OrderPercentageDO orderPercentageDO, String percentTemplate) {
 | 
	
		
			
				|  |  | +        // 每个订单收益
 | 
	
		
			
				|  |  | +        List<OrderCalcSaveReqVO> saveList = new ArrayList<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        bonusQuotaOrderDO.forEach(k -> {
 | 
	
		
			
				|  |  | +            // 添加平台利润记录详情
 | 
	
		
			
				|  |  | +            List<PtProfitLogDetailsSaveReqVO> ptProfitLogDetailsSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  | +            // 计算单个订单的总单价
 | 
	
		
			
				|  |  | +            long priceStream = k.getOrderItemMessages().stream().mapToLong(OrderItemMessage::getPrice).sum();
 | 
	
		
			
				|  |  | +            // 计算单个订单的总成本
 | 
	
		
			
				|  |  | +            long longStream = k.getOrderItemMessages().stream().mapToLong(OrderItemMessage::getCostPrice).sum();
 | 
	
		
			
				|  |  | +            BigDecimal price = new BigDecimal(priceStream);
 | 
	
		
			
				|  |  | +            BigDecimal costPrice = new BigDecimal(longStream);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 计算
 | 
	
		
			
				|  |  | +            // 计算利润: (价格 - 成本价格) * 产品数量
 | 
	
		
			
				|  |  | +            //用户自得和直推奖不用计算,从orderItem里面获取
 | 
	
		
			
				|  |  | +            final BigDecimal[] profit = {new BigDecimal("0"), new BigDecimal("0"), new BigDecimal("0")};
 | 
	
		
			
				|  |  | +            k.getOrderItemMessages().forEach(j -> {
 | 
	
		
			
				|  |  | +                BigDecimal onePrice = new BigDecimal(j.getPrice());
 | 
	
		
			
				|  |  | +                BigDecimal oneCostPrice = new BigDecimal(j.getCostPrice());
 | 
	
		
			
				|  |  | +                BigDecimal productCount = new BigDecimal(j.getCount());
 | 
	
		
			
				|  |  | +                BigDecimal oneGrossProfit = onePrice.subtract(oneCostPrice).multiply(productCount);
 | 
	
		
			
				|  |  | +                profit[0] = profit[0].add(oneGrossProfit);  // 注意这里的改动
 | 
	
		
			
				|  |  | +                profit[1] = profit[1].add(new BigDecimal(j.getIncreaseIntegral()));     //自得积分
 | 
	
		
			
				|  |  | +                profit[2] = profit[2].add(new BigDecimal(j.getAncestorIncreaseIntegral()));     //自得积分
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // 参与过订单计算后就标记为已分配权益
 | 
	
		
			
				|  |  | +                updateOrderItemTransitionTime(j.getOrderItemId());
 | 
	
		
			
				|  |  | +                //  添加日志表的二级表
 | 
	
		
			
				|  |  | +                PtProfitLogDetailsSaveReqVO ptProfitLogDetailsSaveReqVO = PtProfitLogDetailsSaveReqVO.builder()
 | 
	
		
			
				|  |  | +                        .orderItemId(j.getOrderItemId())
 | 
	
		
			
				|  |  | +                        .build();
 | 
	
		
			
				|  |  | +                ptProfitLogDetailsSaveReqVOS.add(ptProfitLogDetailsSaveReqVO);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 计算毛利: 利润 * 1
 | 
	
		
			
				|  |  | +            BigDecimal grossProfit = profit[0].multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
 | 
	
		
			
				|  |  | +            // 合赢将: 毛利 * 0.12
 | 
	
		
			
				|  |  | +            BigDecimal bonusQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitBonusQuotaPerc())).setScale(4, RoundingMode.DOWN);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 用户所得: 毛利 * 0.35
 | 
	
		
			
				|  |  | +            BigDecimal descendantQuota = profit[1];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 直推奖: 毛利 * 0.3 (上一级)
 | 
	
		
			
				|  |  | +            BigDecimal ancestorQuota = profit[2];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Long grossProfitInt = grossProfit.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  | +            Long bonusQuotaInt = bonusQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  | +            BigDecimal platformQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc())).setScale(4, RoundingMode.DOWN);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Long ancestorQuotaInt = ancestorQuota.longValue();
 | 
	
		
			
				|  |  | +            Long descendantQuotaInt = descendantQuota.longValue();
 | 
	
		
			
				|  |  | +            Long platformQuotaInt = platformQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // ========== 汇总计算 =================
 | 
	
		
			
				|  |  | +            OrderCalcSaveReqVO orderCalcSaveReqVO = OrderCalcSaveReqVO.builder()
 | 
	
		
			
				|  |  | +                    .userId(k.getUserId())
 | 
	
		
			
				|  |  | +                    .orderNo(k.getNo())
 | 
	
		
			
				|  |  | +                    .orderId(k.getOrderId())
 | 
	
		
			
				|  |  | +                    .cost(costPrice.longValue())
 | 
	
		
			
				|  |  | +                    .price(price.longValue())
 | 
	
		
			
				|  |  | +                    .productCount(k.getProductCount())
 | 
	
		
			
				|  |  | +                    .nickName(k.getNickName())
 | 
	
		
			
				|  |  | +                    .name(k.getName())
 | 
	
		
			
				|  |  | +                    .grossProfit(grossProfitInt)
 | 
	
		
			
				|  |  | +                    .grossProfitUserQuota(descendantQuotaInt)
 | 
	
		
			
				|  |  | +                    .grossProfitPlatformQuota(platformQuotaInt)
 | 
	
		
			
				|  |  | +                    .grossProfitAncestorQuota(ancestorQuotaInt)
 | 
	
		
			
				|  |  | +                    .percentTemplate(percentTemplate).build();
 | 
	
		
			
				|  |  | +            saveList.add(orderCalcSaveReqVO);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 合赢奖记录
 | 
	
		
			
				|  |  | +            PtProfitLogSaveReqVO hyjLog = PtProfitLogSaveReqVO.builder()
 | 
	
		
			
				|  |  | +                    .orderId(k.getOrderId())
 | 
	
		
			
				|  |  | +                    .profitStatus(CaclEnum.TOGETHER_AWARD.getType())
 | 
	
		
			
				|  |  | +                    .orderNo(k.getNo())
 | 
	
		
			
				|  |  | +                    .amount(bonusQuotaInt)
 | 
	
		
			
				|  |  | +                    .afterAmount(0L)
 | 
	
		
			
				|  |  | +                    .generateUserId(k.getUserId())
 | 
	
		
			
				|  |  | +                    .percentTemplate(percentTemplate).build();
 | 
	
		
			
				|  |  | +            // 添加获得合赢奖的记录
 | 
	
		
			
				|  |  | +            hyjLog.setId(ptProfitLogService.createPtProfitLog(hyjLog));
 | 
	
		
			
				|  |  | +            for (PtProfitLogDetailsSaveReqVO ptProfitLogDetailsSaveReqVO : ptProfitLogDetailsSaveReqVOS) {
 | 
	
		
			
				|  |  | +                ptProfitLogDetailsSaveReqVO.setDistriPtProfitLogId(hyjLog.getId());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            ptProfitLogDetailsService.saveBatch(ptProfitLogDetailsSaveReqVOS);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 将信息存储到数据库中
 | 
	
		
			
				|  |  | +        orderCalcMapper.insertBatch(BeanUtils.toBean(saveList, OrderCalcDO.class));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void updateOrderItemTransitionTime(Long orderItemId) {
 | 
	
		
			
				|  |  | +        orderCalcMapper.updateOrderItemTransitionTime(orderItemId);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd, List<Long> userList) {
 | 
	
		
			
				|  |  |          return orderCalcMapper.selectList(new LambdaQueryWrapperX<OrderCalcDO>()
 | 
	
	
		
			
				|  | @@ -170,18 +300,12 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private void calc(List<OrderCalcMessage> tradeOrderDO, OrderPercentageDO orderPercentageDO, String percentTemplate) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        List<PtProfitSaveReqVO> savePFitMap = new ArrayList<>();
 | 
	
		
			
				|  |  | -        // 每个订单收益
 | 
	
		
			
				|  |  | -        List<OrderCalcSaveReqVO> saveList = new ArrayList<>();
 | 
	
		
			
				|  |  | -        // 平台收益
 | 
	
		
			
				|  |  | -        List<PtProfitSaveReqVO> ptProfitSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  |          // 平台收益日志
 | 
	
		
			
				|  |  |          List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  |          // 修改用户钱包
 | 
	
		
			
				|  |  |          List<IntegralSaveReqVO> integralSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // todo 修改用户身价 如何从订单中获取身价?
 | 
	
		
			
				|  |  | -        List<DuserSaveReqVO> duserSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  |          BigDecimal oneHundred = new BigDecimal(BigInteger.ONE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -191,20 +315,10 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |                  .subtract(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        PtProfitDO ptProfitDO = ptProfitService.getPtProfit();
 | 
	
		
			
				|  |  | -        PtProfitDO finalPtProfitDO = ptProfitDO;
 | 
	
		
			
				|  |  |          tradeOrderDO.forEach(k -> {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 计算单个订单的总单价
 | 
	
		
			
				|  |  | -            long priceStream = k.getOrderItemMessages().stream().mapToLong(OrderItemMessage::getPrice).sum();
 | 
	
		
			
				|  |  | -            // 计算单个订单的总成本
 | 
	
		
			
				|  |  | -            long longStream = k.getOrderItemMessages().stream().mapToLong(OrderItemMessage::getCostPrice).sum();
 | 
	
		
			
				|  |  | -            BigDecimal price = new BigDecimal(priceStream);
 | 
	
		
			
				|  |  | -            BigDecimal costPrice = new BigDecimal(longStream);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 添加平台利润记录详情
 | 
	
		
			
				|  |  | -            List<PtProfitLogDetailsSaveReqVO> ptProfitLogDetailsSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +            PtProfitDO ptProfitDO = ptProfitService.getPtProfit();
 | 
	
		
			
				|  |  | +            // 平台收益
 | 
	
		
			
				|  |  | +            List<PtProfitSaveReqVO> ptProfitSaveReqVOS = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // 计算
 | 
	
		
			
				|  |  |              // 计算利润: (价格 - 成本价格) * 产品数量
 | 
	
	
		
			
				|  | @@ -220,11 +334,8 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |                  profit[2] = profit[2].add(new BigDecimal(j.getAncestorIncreaseIntegral()));     //自得积分
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  // 遍历订单项拿到订单项编号
 | 
	
		
			
				|  |  | +                //将当前订单项设置为已分配权益
 | 
	
		
			
				|  |  |                  updateOrderItem(j.getOrderItemId());
 | 
	
		
			
				|  |  | -                PtProfitLogDetailsSaveReqVO ptProfitLogDetailsSaveReqVO = PtProfitLogDetailsSaveReqVO.builder()
 | 
	
		
			
				|  |  | -                        .orderItemId(j.getOrderItemId())
 | 
	
		
			
				|  |  | -                        .build();
 | 
	
		
			
				|  |  | -                ptProfitLogDetailsSaveReqVOS.add(ptProfitLogDetailsSaveReqVO);
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -244,9 +355,6 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |              // 直推奖: 毛利 * 0.3 (上一级)
 | 
	
		
			
				|  |  |              BigDecimal ancestorQuota = profit[2];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // 合赢将: 毛利 * 0.12
 | 
	
		
			
				|  |  | -            BigDecimal bonusQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitBonusQuotaPerc())).setScale(4, RoundingMode.DOWN);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              // 平台服务费: 毛利 * 0.05
 | 
	
		
			
				|  |  |              BigDecimal platformQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc())).setScale(4, RoundingMode.DOWN);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -255,10 +363,8 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |              BigDecimal highQuota = grossProfit.multiply(new BigDecimal("10")).setScale(4, RoundingMode.DOWN);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // 乘以 10000 并转换为整数
 | 
	
		
			
				|  |  | -            Long grossProfitInt = grossProfit.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  |              Long ancestorQuotaInt = ancestorQuota.longValue();
 | 
	
		
			
				|  |  |              Long descendantQuotaInt = descendantQuota.longValue();
 | 
	
		
			
				|  |  | -            Long bonusQuotaInt = bonusQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  |              Long highQuotaInt = highQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  |              Long grossProfitAfterBonusInt = grossProfitAfterBonus.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
		
			
				|  |  |              Long platformQuotaInt = platformQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
 | 
	
	
		
			
				|  | @@ -283,23 +389,10 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |              double descendantSocial = k.getOrderItemMessages().get(0).getTotalPrice() * orderUserSocialStatus / 100;
 | 
	
		
			
				|  |  |              duserService.updateDuserSocial(integralDO.getUserId(), (long) descendantSocial, SocialStatusEnum.SHOPPING_SOCIAL.getStatus());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            /*
 | 
	
		
			
				|  |  | +            原本这里有添加到distri_order_calc表的记录,但是现在要合赢奖和(直推奖、自得奖)分开,所以现在搬走了
 | 
	
		
			
				|  |  | +             */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // ========== 汇总计算 =================
 | 
	
		
			
				|  |  | -            OrderCalcSaveReqVO orderCalcSaveReqVO = OrderCalcSaveReqVO.builder()
 | 
	
		
			
				|  |  | -                    .userId(k.getUserId())
 | 
	
		
			
				|  |  | -                    .orderNo(k.getNo())
 | 
	
		
			
				|  |  | -                    .orderId(k.getOrderId())
 | 
	
		
			
				|  |  | -                    .cost(costPrice.longValue())
 | 
	
		
			
				|  |  | -                    .price(price.longValue())
 | 
	
		
			
				|  |  | -                    .productCount(k.getProductCount())
 | 
	
		
			
				|  |  | -                    .nickName(k.getNickName())
 | 
	
		
			
				|  |  | -                    .name(k.getName())
 | 
	
		
			
				|  |  | -                    .grossProfit(grossProfitInt)
 | 
	
		
			
				|  |  | -                    .grossProfitUserQuota(descendantQuotaInt)
 | 
	
		
			
				|  |  | -                    .grossProfitAncestorQuota(ancestorQuotaInt)
 | 
	
		
			
				|  |  | -                    .grossProfitPlatformQuota(platformQuotaInt)
 | 
	
		
			
				|  |  | -                    .percentTemplate(percentTemplate).build();
 | 
	
		
			
				|  |  | -            saveList.add(orderCalcSaveReqVO);
 | 
	
		
			
				|  |  |              // ========== 修改用户钱包 =================
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //直推奖也要限制额度
 | 
	
	
		
			
				|  | @@ -416,51 +509,31 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |                      .generateUserId(integralDO.getUserId())
 | 
	
		
			
				|  |  |                      .build();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // 合赢奖记录
 | 
	
		
			
				|  |  | -            PtProfitLogSaveReqVO hyjLog = PtProfitLogSaveReqVO.builder()
 | 
	
		
			
				|  |  | -                    .orderId(k.getOrderId())
 | 
	
		
			
				|  |  | -                    .profitStatus(CaclEnum.TOGETHER_AWARD.getType())
 | 
	
		
			
				|  |  | -                    .orderNo(k.getNo())
 | 
	
		
			
				|  |  | -                    .amount(bonusQuotaInt)
 | 
	
		
			
				|  |  | -                    .afterAmount(0L)
 | 
	
		
			
				|  |  | -                    .generateUserId(integralDO.getUserId())
 | 
	
		
			
				|  |  | -                    .percentTemplate(percentTemplate).build();
 | 
	
		
			
				|  |  | -            // 添加获得合赢奖的记录
 | 
	
		
			
				|  |  | -            hyjLog.setId(ptProfitLogService.createPtProfitLog(hyjLog));
 | 
	
		
			
				|  |  | -            for (PtProfitLogDetailsSaveReqVO ptProfitLogDetailsSaveReqVO : ptProfitLogDetailsSaveReqVOS) {
 | 
	
		
			
				|  |  | -                ptProfitLogDetailsSaveReqVO.setDistriPtProfitLogId(hyjLog.getId());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            ptProfitLogDetailsService.saveBatch(ptProfitLogDetailsSaveReqVOS);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              ptProfitLogSaveReqVOS.add(ptTotal);
 | 
	
		
			
				|  |  |              ptProfitLogSaveReqVOS.add(ptGrossAddLog);
 | 
	
		
			
				|  |  |              ptProfitLogSaveReqVOS.add(ptAddLog);
 | 
	
		
			
				|  |  |              ptProfitLogSaveReqVOS.add(tjrLog);
 | 
	
		
			
				|  |  |              ptProfitLogSaveReqVOS.add(ztrLog);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            PtProfitDO ptProfit = ptProfitService.getPtProfit();
 | 
	
		
			
				|  |  | +            // 计算总积分
 | 
	
		
			
				|  |  | +            Long total = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtTotalAdd).sum();
 | 
	
		
			
				|  |  | +            Long add = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtAdd).sum();
 | 
	
		
			
				|  |  | +            Long grossAdd = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtGrossAdd).sum();
 | 
	
		
			
				|  |  | +            ptProfit.setPtAdd(ptProfit.getPtAdd() + add);
 | 
	
		
			
				|  |  | +            ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() + total);
 | 
	
		
			
				|  |  | +            ptProfit.setPtGrossAdd(ptProfit.getPtGrossAdd() + grossAdd);
 | 
	
		
			
				|  |  | +            PtProfitSaveReqVO ptProfitSaveReqVO2 = PtProfitSaveReqVO.builder()
 | 
	
		
			
				|  |  | +                    .id(ptProfitDO.getId())
 | 
	
		
			
				|  |  | +                    .ptTotalAdd(ptProfit.getPtTotalAdd())
 | 
	
		
			
				|  |  | +                    .ptAdd(ptProfit.getPtAdd())
 | 
	
		
			
				|  |  | +                    .ptGrossAdd(ptProfit.getPtGrossAdd()).build();
 | 
	
		
			
				|  |  | +            ptProfitService.updatePtProfit(ptProfitSaveReqVO2);
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 信息整合
 | 
	
		
			
				|  |  | -        // 将信息存储到数据库中
 | 
	
		
			
				|  |  | -        orderCalcMapper.insertBatch(BeanUtils.toBean(saveList, OrderCalcDO.class));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          ptProfitLogService.saveBatch(ptProfitLogSaveReqVOS);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        PtProfitDO ptProfit = ptProfitService.getPtProfit();
 | 
	
		
			
				|  |  | -        // 计算总积分
 | 
	
		
			
				|  |  | -        Long total = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtTotalAdd).sum();
 | 
	
		
			
				|  |  | -        Long add = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtAdd).sum();
 | 
	
		
			
				|  |  | -        Long grossAdd = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtGrossAdd).sum();
 | 
	
		
			
				|  |  | -        ptProfit.setPtAdd(ptProfit.getPtAdd() + add);
 | 
	
		
			
				|  |  | -        ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() + total);
 | 
	
		
			
				|  |  | -        ptProfit.setPtGrossAdd(ptProfit.getPtGrossAdd() + grossAdd);
 | 
	
		
			
				|  |  | -        PtProfitSaveReqVO ptProfitSaveReqVO = PtProfitSaveReqVO.builder()
 | 
	
		
			
				|  |  | -                .id(ptProfitDO.getId())
 | 
	
		
			
				|  |  | -                .ptTotalAdd(ptProfit.getPtTotalAdd())
 | 
	
		
			
				|  |  | -                .ptAdd(ptProfit.getPtAdd())
 | 
	
		
			
				|  |  | -                .ptGrossAdd(ptProfit.getPtGrossAdd()).build();
 | 
	
		
			
				|  |  | -        ptProfitService.updatePtProfit(ptProfitSaveReqVO);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -516,15 +589,15 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 修改用户钱包
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  | -     * @param integralSaveReqVOS
 | 
	
		
			
				|  |  | -     * @param integralDO
 | 
	
		
			
				|  |  | -     * @param integralDOAncestor
 | 
	
		
			
				|  |  | -     * @param pt
 | 
	
		
			
				|  |  | -     * @param ancestorQuota
 | 
	
		
			
				|  |  | -     * @param descendantQuota
 | 
	
		
			
				|  |  | -     * @param highQuota
 | 
	
		
			
				|  |  | -     * @param ptA
 | 
	
		
			
				|  |  | -     * @param ptB
 | 
	
		
			
				|  |  | +     * @param integralSaveReqVOS 、
 | 
	
		
			
				|  |  | +     * @param integralDO 当前用户钱包
 | 
	
		
			
				|  |  | +     * @param integralDOAncestor 推荐人钱包
 | 
	
		
			
				|  |  | +     * @param pt pt钱包
 | 
	
		
			
				|  |  | +     * @param ancestorQuota 推荐人额度
 | 
	
		
			
				|  |  | +     * @param descendantQuota 直推人额度
 | 
	
		
			
				|  |  | +     * @param highQuota 最大可用额度
 | 
	
		
			
				|  |  | +     * @param ptA pt收益
 | 
	
		
			
				|  |  | +     * @param ptB pt服务费
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      private void changeUserWallet(List<IntegralSaveReqVO> integralSaveReqVOS, IntegralDO integralDO, IntegralDO integralDOAncestor, IntegralDO pt,
 | 
	
		
			
				|  |  |                                    Long ancestorQuota, Long descendantQuota, Long highQuota, Long ptA, Long ptB) {
 |