| 
					
				 | 
			
			
				@@ -11,6 +11,9 @@ import cn.newfeifan.mall.framework.common.core.KeyValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.framework.common.enums.UserTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.framework.common.util.json.JsonUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.framework.common.util.number.MoneyUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.distri.constant.DistriConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.distri.enums.CaclEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.distri.service.integral.IntegralService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -19,6 +22,8 @@ import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderRespDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.newfeifan.mall.module.product.dal.mysql.sku.ProductSkuMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,12 +73,11 @@ import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.RoundingMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.LocalDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.format.DateTimeFormatter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Objects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Set; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.*; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -99,6 +103,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private TradeNoRedisDAO tradeNoRedisDAO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IntegralService integralService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private List<TradeOrderHandler> tradeOrderHandlers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -126,6 +133,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Value("${feifan.trade.express.kd100.key}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String key; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ProductSkuMapper productSkuMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // =================== Order =================== 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -361,7 +371,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_DELIVERY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void deliveryOrder(TradeOrderDeliveryReqVO deliveryReqVO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //校验发货信息不能都为空 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(deliveryReqVO.getLogisticsNo() == null && deliveryReqVO.getDeliveryRemark() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (deliveryReqVO.getLogisticsNo() == null && deliveryReqVO.getDeliveryRemark() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw exception(ORDER_DELIVERY_DETAILS_IS_NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -398,10 +408,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 执行更新 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(deliveryReqVO.getDeliveryRemark() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (deliveryReqVO.getDeliveryRemark() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //如果是虚拟商品直接完成发货和签收 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             updateOrderObj.setStatus(TradeOrderStatusEnum.COMPLETED.getStatus()).setDeliveryTime(LocalDateTime.now()).setReceivingTime(LocalDateTime.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             updateOrderObj.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()).setDeliveryTime(LocalDateTime.now()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), updateOrderObj); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -977,6 +987,50 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tradeOrderMapper.updateById(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateOrderItemByFreezeHighQuota() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TradeOrderDO> tradeOrderDOS = tradeOrderMapper.selectList(new LambdaQueryWrapper<TradeOrderDO>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(TradeOrderDO::getPayStatus, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (TradeOrderDO tradeOrderDO : tradeOrderDOS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList(new LambdaQueryWrapper<TradeOrderItemDO>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(TradeOrderItemDO::getOrderId, tradeOrderDO.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .isNull(TradeOrderItemDO::getAfterSaleId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Long totalFreezeHighQuota = 0L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //订单项 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (TradeOrderItemDO orderItem : tradeOrderItemDOS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ProductSkuDO productSkuDO = productSkuMapper.selectById(orderItem.getSkuId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //毛利 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Integer promotionExpenses = (productSkuDO.getPrice() - productSkuDO.getCostPrice()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        * orderItem.getCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //毛利 * 10 = 峰值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal grossProfit = new BigDecimal(promotionExpenses).multiply(new BigDecimal(1)).setScale(4, RoundingMode.DOWN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal freezeHighQuota = grossProfit.multiply(new BigDecimal("10")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                freezeHighQuota = money2Integral(freezeHighQuota); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Long freezeHighQuotaInt = freezeHighQuota.longValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                totalFreezeHighQuota += freezeHighQuotaInt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderItem.setFreezeHighQuota(freezeHighQuotaInt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tradeOrderItemMapper.updateById(orderItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //修改购物者本人获得的冻结峰值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            integralService.updateIntegralFreezeHighQuota(tradeOrderDO.getUserId(), tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_FREEZE_HIGH_QUOTA,totalFreezeHighQuota,tradeOrderDO.getId(),tradeOrderDO.getNo(),tradeOrderDO.getPayTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static BigDecimal money2Integral(BigDecimal money) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return money.multiply(DistriConstants.MONEY2INTEGRAL_BIG_DECIMAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 创建单个订单的评论 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 |