| 
					
				 | 
			
			
				@@ -12,8 +12,9 @@ import cn.newfeifan.mall.framework.common.enums.UserTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.framework.common.exception.ErrorCode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.framework.common.util.json.JsonUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.framework.common.util.number.MoneyUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.framework.pay.core.enums.channel.PayChannelEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.distri.constant.DistriConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.distri.controller.app.integral.vo.IntegralSaveReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo.PtProfitSaveReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.distri.controller.app.ptprofitlog.vo.PtProfitLogSaveReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -35,9 +36,17 @@ import cn.newfeifan.mall.module.member.service.user.MemberUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.pay.api.order.PayOrderApi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderCreateReqDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderRespDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.controller.admin.order.vo.PayOrderRespVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.controller.admin.order.vo.PayOrderSubmitReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.controller.app.order.vo.AppPayOrderSubmitZeroPurchaseReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.convert.order.PayOrderConvert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.dal.dataobject.channel.PayChannelDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.dal.dataobject.order.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.dal.mysql.order.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.dal.redis.no.PayNoRedisDAO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.framework.pay.config.PayProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.pay.service.order.PayOrderService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.product.api.comment.ProductCommentApi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.product.api.comment.dto.ProductCommentCreateReqDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.product.dal.dataobject.sku.ProductSkuDO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,15 +55,11 @@ import cn.newfeifan.mall.module.product.dal.mysql.sku.ProductSkuMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.product.dal.mysql.spu.ProductSpuMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.sale.dal.dataobject.shop.ShopDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.sale.dal.mysql.shop.ShopMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.system.service.sms.SmsCodeService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.system.service.user.AdminUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderUpdatePriceReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.trade.controller.admin.order.vo.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.app.order.vo.AppTradeOrderSettlementReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.newfeifan.mall.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.trade.controller.app.order.vo.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.trade.convert.order.TradeOrderConvert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.trade.dal.dataobject.cart.CartDO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -166,6 +171,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private PayOrderMapper payOrderMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PayOrderService payOrderService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PayOrderExtensionMapper orderExtensionMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PayNoRedisDAO noRedisDAO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PayProperties payProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private IntegralService integralService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -192,6 +207,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Lazy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private DuserService duserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SmsCodeService smsCodeService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // =================== Order =================== 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -246,6 +264,50 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return thisPayOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PayOrderRespVO submitOrderByZeroPurchase(AppPayOrderSubmitZeroPurchaseReqVO reqVO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqVO.setChannelCode(PayChannelEnum.ZERO_PURCHASE.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获得 PayOrderDO ,并校验其是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayOrderDO order = payOrderService.validateOrderCanSubmit(reqVO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 验证码校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        smsCodeService.useSmsCode(reqVO.getSmsCodeUseReqDTO().setUsedIp(getClientIP())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO channel = payOrderService.validateChannelCanSubmit(order.getAppId(), reqVO.getChannelCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 2. 插入 PayOrderExtensionDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String no = noRedisDAO.generate(payProperties.getOrderNoPrefix()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayOrderExtensionDO orderExtension = PayOrderConvert.INSTANCE.convert(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(reqVO, PayOrderSubmitReqVO.class), getClientIP()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setOrderId(order.getId()).setNo(no) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setStatus(PayOrderStatusEnum.SUCCESS.getStatus()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setChannelId(channel.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setChannelCode(channel.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderExtensionMapper.insert(orderExtension); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 修改订单信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        order.setStatus(PayOrderStatusEnum.SUCCESS.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        order.setExtensionId(orderExtension.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        order.setNo(orderExtension.getNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        order.setChannelCode(reqVO.getChannelCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        order.setChannelId(channel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        order.setChannelOrderNo("88888888");        // 短信支付没有通道编号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payOrderService.updatePayOrder(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List list = updateOrderPaid(reqVO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayOrderRespVO convert = PayOrderConvert.INSTANCE.convert(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Object jfObj = list.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Object sjObj = list.get(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long jf = (Long) jfObj;//待确权积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Double sj = (Double) sjObj;//待确权身价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        convert.setJf(jf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        convert.setSj(sj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return convert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public AppTradeOrderSettlementRespVO settlementOrder(Long userId, AppTradeOrderSettlementReqVO settlementReqVO) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -375,6 +437,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         respVO.setShopSkuIds(shopSkuIds);//把sku根据店聚合放到map中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         respVO.setShopNameMap(shopNameMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         respVO.setCurrentQuota(currentQuota);//用户当前积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        respVO.setConsumePoints(integralDO.getConsumptionPoints());//用户当前消费分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        System.out.println("shopSkuIds@@@@@@@@"+shopSkuIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        System.out.println("shopNameMap@@@@@@@@"+shopNameMap); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -445,6 +508,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         IntegralDO integralDO = integralMapper.selectOne("user_id", getLoginUserId());//查询出用户积分相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long currentQuota = integralDO.getCurrentQuota();//获取用户当前积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         respVO.setCurrentQuota(currentQuota); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        respVO.setConsumePoints(integralDO.getConsumptionPoints());//用户当前消费分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //保存每个店铺返回页面的 订单信息汇总 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<Long, AppTradeOrderSettlementRespVO> shopRespVOMap = new HashMap<>(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -572,11 +636,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public TradeOrderDO createOrder(Long userId, AppTradeOrderCreateReqVO createReqVO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(createReqVO.getPayIntegral() != null && createReqVO.getPayIntegral() < 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ErrorCode ERROR = new ErrorCode(1_011_000_013, "抵扣佣金不能小于0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (createReqVO.getPayIntegral() != null && createReqVO.getPayIntegral() > 0 && createReqVO.getPayConsumptionPoints() != null && createReqVO.getPayConsumptionPoints() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ErrorCode ERROR = new ErrorCode(1_011_000_013, "佣金和消费分只能选择一种"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw exception(ERROR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        if(createReqVO.getPayIntegral() != null && createReqVO.getPayIntegral() < 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            ErrorCode ERROR = new ErrorCode(1_011_000_013, "抵扣佣金不能小于0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            throw exception(ERROR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //校验最大值 start  add by Ben 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //查询订单提成比例 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -663,6 +732,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else {//把页面传入的,1积分=1元钱的积分,转换为后台保存到数据库的积分值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             payPoints = payPoints * DistriConstants.INTEGRAL_PAGE2DB; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //消费者在页面录入的,要使用的消费分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Double consumptionPoints = createReqVO.getPayConsumptionPoints(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (consumptionPoints == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            consumptionPoints = (double) 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else {//把页面传入的,1消费分=1元钱的消费分,转换为后台保存到数据库的消费分值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            consumptionPoints = consumptionPoints * DistriConstants.INTEGRAL_PAGE2DB; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        payPoints = 3;//为了测试方便,临时写死 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -671,6 +748,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         TradePriceCalculateRespBO tradePriceCalculateRespBO = calculatePriceWithPoints(userId, createReqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //计算分摊的积分金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Integer> dividePoints = TradePriceCalculatorHelper.dividePrice(tradePriceCalculateRespBO.getItems(), integral2Money(payPoints.longValue())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> divideConsumptionPoints = TradePriceCalculatorHelper.dividePrice(tradePriceCalculateRespBO.getItems(), integral2Money(consumptionPoints.longValue())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //键为skuId,value为单个商品项信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<Long, TradePriceCalculateRespBO.OrderItem> itemPayPointsMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -680,6 +758,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             TradePriceCalculateRespBO.OrderItem orderItem = priceOrderItems.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Long itemPoint = money2Integral(dividePoints.get(i));//每项商品使用的积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             orderItem.setPayPoints(itemPoint); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderItem.setPayConsumptionPoints(money2Integral(divideConsumptionPoints.get(i))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             itemPayPointsMap.put(orderItem.getSkuId(), orderItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -725,6 +804,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 3. 保存一间店铺的订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Long shopPayPoints = 0L;//一间店铺订单总支付积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Long shopConsumptionPoints = 0L;//一间店铺订单总支付消费分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Integer shopPayPrice = 0;//一间店铺订单总支付价格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (TradeOrderItemDO orderItem : orderItems) {//一间店铺订单的所有商品项 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -735,9 +815,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Long skuId = orderItem.getSkuId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 TradePriceCalculateRespBO.OrderItem orderItemTmp = itemPayPointsMap.get(skuId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 orderItem.setPayIntegral(orderItemTmp.getPayPoints()); //本商品使用积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderItem.setPayConsumptionPoints(orderItemTmp.getPayConsumptionPoints()); //本商品使用消费分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Integer payRmb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (orderItem.getHighPrecisionPrice().compareTo(BigDecimal.ZERO) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (orderItemTmp.getPayPoints() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayConsumptionPoints());//本商品实付人民币 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     double rmb = (orderItem.getHighPrecisionPrice().doubleValue() * orderItem.getCount()) - integral2Money(orderItemTmp.getPayPoints()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (rmb > 0 && rmb < 1) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -753,6 +839,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 orderItem.setPayPrice(payRmb);//本商品实付人民币 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 shopPayPoints += orderItemTmp.getPayPoints();//一间店铺订单总支付积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                shopConsumptionPoints += orderItemTmp.getPayConsumptionPoints();//一间店铺订单总支付消费分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 shopPayPrice += payRmb;//一间店铺订单总支付价格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -767,6 +854,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setPayPrice(shopPayPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setPayRmb(shopPayPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setPayIntegral(shopPayPoints.doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            order.setPayConsumptionPoints(shopConsumptionPoints); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tradeOrderMapper.insert(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -794,23 +882,19 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<Long> deliveryTemplateIds = productSpuMapper.selectList(ProductSpuDO::getId, spuIds).stream().map(ProductSpuDO::getDeliveryTemplateId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Map<Long, Long> templateIdMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deliveryTemplateIds.forEach(id -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                templateIdMap.put(id, 0L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deliveryTemplateIds.forEach(id -> templateIdMap.put(id, 0L)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Map<Long, Integer> deliveryPriceMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            templateIdMap.forEach((id, count) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderItems.forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ProductSpuDO spu = productSpuMapper.selectById(item.getSpuId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (spu.getDeliveryTemplateId().equals(id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        templateIdMap.put(id, templateIdMap.get(id) + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (item.getDeliveryPrice() != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            deliveryPriceMap.put(spu.getDeliveryTemplateId(), item.getDeliveryPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            templateIdMap.forEach((id, count) -> orderItems.forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ProductSpuDO spu = productSpuMapper.selectById(item.getSpuId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (spu.getDeliveryTemplateId().equals(id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    templateIdMap.put(id, templateIdMap.get(id) + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (item.getDeliveryPrice() != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deliveryPriceMap.put(spu.getDeliveryTemplateId(), item.getDeliveryPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             orderItems.forEach(itemDO -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ProductSpuDO spuDO = productSpuMapper.selectById(itemDO.getSpuId()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -847,7 +931,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         virtualOrder.setPayPrice(allShopPayRMB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         virtualOrder.setPayRmb(allShopPayRMB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer shopCount = shopSkuIds.keySet().size();//订单对应的店铺数目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int shopCount = shopSkuIds.keySet().size();//订单对应的店铺数目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (shopCount > 1) {//如果多店铺拆分订单,则支付订单的商户订单id为0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             virtualOrder.setId(0L);//为了让payOrder中的tradeOrderId为0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else if (shopCount == 1) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -879,6 +963,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果订单有使用消费分,则抵扣用户的消费分。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (consumptionPoints > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Map<String, Object> m : orderMapList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TradeOrderDO order = (TradeOrderDO) (m.get("order")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Long tradeOrderId = order.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String OrderNum = order.getNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Long payConsumptionPoints = order.getPayConsumptionPoints();//每个订单使用的积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Boolean flag = integralService.updateUserConsumptionPoints(userId, userId, payConsumptionPoints, tradeOrderId, OrderNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!flag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw exception(ORDER_PAY_CONSUMPTION_POINTS_ERROR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        boolean caculateFreezeAmount = false;//增加冻结积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //增加冻结积分这分部分,是订单微信支付成功后,才执行的,下面的代码只是为了测试方便写在这,实际永远不会执行。add by Ben 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1274,7 +1373,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 七天获得变为即算即得,后续如果恢复把这里注释即可,并打开平台定时任务得订单结算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        CompletableFuture.runAsync(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            calc(TradeOrderDOList, orderPercentageDO, JsonUtils.toJsonString(orderPercentageDO)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calc(TradeOrderDOList, orderPercentageDO, JsonUtils.toJsonString(orderPercentageDO)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rs; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1282,9 +1381,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 计算订单支付成功后,订单项的冻结积分转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param tradeOrderDOList 订单列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param tradeOrderDOList  订单列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param orderPercentageDO 参数百分比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param percentTemplate 计算百分比模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param percentTemplate   计算百分比模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void calc(List<TradeOrderDO> tradeOrderDOList, OrderPercentageDO orderPercentageDO, String percentTemplate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 平台收益日志 
			 |