@@ -1,5 +1,9 @@
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				package   com.yovinchen.xlcs.order.service.impl ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.core.metadata.IPage ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.extension.plugins.pagination.Page ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.client.activity.ActivityFeignClient ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.client.cart.CartFeignClient ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.client.product.ProductFeignClient ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -15,23 +19,15 @@ import com.yovinchen.xlcs.model.activity.CouponInfo;
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.model.order.CartInfo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.model.order.OrderInfo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.model.order.OrderItem ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.enums.* ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.mq.constant.MqConst ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.mq.service.RabbitService ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.order.mapper.OrderInfoMapper ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.order.mapper.OrderItemMapper ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.order.service.OrderInfoService ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.order.service.OrderItemService ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.order.CartInfoVo  ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.order.OrderConfirmVo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.order.OrderSubmitVo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.order.OrderUserQueryVo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.order.*  ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.product.SkuStockLockVo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.yovinchen.xlcs.vo.user.LeaderAddressVo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.core.metadata.IPage ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.extension.plugins.pagination.Page ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   org.springframework.beans.factory.annotation.Autowired ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   org.springframework.data.redis.core.BoundHashOperations ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import   org.springframework.data.redis.core.RedisTemplate ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -98,7 +94,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //唯一标识订单 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         String   orderNo   =   System . currentTimeMillis ( )   +   " " ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         redisTemplate . opsForValue ( ) . set ( RedisConst . ORDER_REPEAT   +   orderNo ,   orderNo ,   24 ,   TimeUnit . HOURS ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         redisTemplate . opsForValue ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . set ( RedisConst . ORDER_REPEAT   +   orderNo ,   orderNo ,   24 ,   TimeUnit . HOURS ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //获取购物车满足条件活动和优惠卷信息 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         OrderConfirmVo   orderConfirmVo   =   activityFeignClient . findCartActivityAndCoupon ( cartInfoList ,   userId ) ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -147,17 +144,21 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         List < CartInfo >   cartInfoList   =   cartFeignClient . getCartCheckedList ( userId ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //2、购物车有很多商品,  商品不同类型,  重点处理普通类型商品 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         List < CartInfo >   commonSkuList   =   cartInfoList . stream ( ) . filter ( cartInfo   - >   Objects . equals ( cartInfo . getSkuType ( ) ,   SkuType . COMMON . getCode ( ) ) ) . collect ( Collectors . toList ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         List < CartInfo >   commonSkuList   =   cartInfoList . stream ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . filter ( cartInfo   - >   Objects . equals ( cartInfo . getSkuType ( ) ,   SkuType . COMMON . getCode ( ) ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . collect ( Collectors . toList ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //3、把获取购物车里面普通类型商品list集合,  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         // List<CartInfo>转换List<SkuStockLockVo> 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         if   ( ! CollectionUtils . isEmpty ( commonSkuList ) )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             List < SkuStockLockVo >   commonStockLockVoList   =   commonSkuList . stream ( ) . map ( item   - >   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                SkuStockLockVo   skuStockLockVo   =   new   SkuStockLockVo ( ) ;  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 s kuStockLockVo. setSkuId ( item . getSkuId ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 skuStockLockVo . setSkuNum  ( item . getSkuNum  ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                return    skuStockLockVo ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } ) . collect ( Collectors . toList ( ) )  ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             List < SkuStockLockVo >   commonStockLockVoList   =   commonSkuList . stream ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . map ( item   - >   {  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                          S kuStockLockVo  skuStockLockVo   =   new   SkuStockLockVo ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                          skuStockLockVo . setSkuId  ( item . getSkuId  ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                          skuStockLockVo . setSkuNum ( item . getSkuNum ( ) )  ;
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         return   skuStockLockVo  ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . collect ( Collectors . toList ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //4、远程调用service-product模块实现锁定商品 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //// 验证库存并锁定库存,保证具备原子性 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -187,7 +188,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         if   ( CollectionUtils . isEmpty ( cartInfoList ) )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             throw   new   xlcsException ( ResultCodeEnum . DATA_ERROR ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //查询用户提货 点和配送员信息 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //查询用户配送 点和配送员信息 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         Long   userId   =   AuthContextHolder . getUserId ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         LeaderAddressVo   leaderAddressVo   =   userFeignClient . getUserAddressByUserId ( userId ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         if   ( leaderAddressVo   = =   null )   { 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -231,9 +232,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderItem . setSplitCouponAmount ( couponAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //总金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   skuTotalAmount   =   orderItem . getSkuPrice ( ) . multiply ( new   BigDecimal ( orderItem . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   skuTotalAmount   =   orderItem . getSkuPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . multiply ( new   BigDecimal ( orderItem . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //优惠之后金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   splitTotalAmount   =   skuTotalAmount . subtract ( activityAmount ) . subtract ( couponAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   splitTotalAmount   =   skuTotalAmount . subtract ( activityAmount ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . subtract ( couponAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderItem . setSplitTotalAmount ( splitTotalAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderItemList . add ( orderItem ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         } 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -247,14 +250,14 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setLeaderName ( leaderAddressVo . getLeaderName ( ) ) ; //配送员名称 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setLeaderPhone ( leaderAddressVo . getLeaderPhone ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setTakeName ( leaderAddressVo . getTakeName ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setReceiverName ( orderParamVo . getReceiverName ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setReceiverPhone ( orderParamVo . getReceiverPhone ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setReceiverProvince ( leaderAddressVo . getProvince ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setReceiverCity ( leaderAddressVo . getCity ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setReceiverDistrict ( leaderAddressVo . getDistrict ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setReceiverAddress ( leaderAddressVo . getDetailAddress ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setWareId ( cartInfoList . get ( 0 ) . getWareId ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setWareId ( cartInfoList . get ( 0 ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . getWareId ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setProcessStatus ( ProcessStatus . UNPAID ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //计算订单金额 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -265,7 +268,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   couponAmount   =   couponInfoSplitAmount . get ( " coupon:total " ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         if   ( null   = =   couponAmount )   couponAmount   =   new   BigDecimal ( 0 ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   totalAmount   =   originalTotalAmount . subtract ( activityAmount ) . subtract ( couponAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   totalAmount   =   originalTotalAmount . subtract ( activityAmount ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . subtract ( couponAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //计算订单金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setOriginalTotalAmount ( originalTotalAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setActivityAmount ( activityAmount ) ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -274,7 +278,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //计算配送员佣金 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   profitRate   =   new   BigDecimal ( 0 ) ; //orderSetService.getProfitRate(); 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   commissionAmount   =   orderInfo . getTotalAmount ( ) . multiply ( profitRate ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   commissionAmount   =   orderInfo . getTotalAmount ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . multiply ( profitRate ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         orderInfo . setCommissionAmount ( commissionAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //添加数据到订单基本信息表 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -295,9 +300,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         String   orderSkuKey   =   RedisConst . ORDER_SKU_MAP   +   orderParamVo . getUserId ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BoundHashOperations < String ,   String ,   Integer >   hashOperations   =   redisTemplate . boundHashOps ( orderSkuKey ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         cartInfoList . forEach ( cartInfo   - >   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             if   ( Boolean . TRUE . equals ( hashOperations . hasKey ( cartInfo . getSkuId ( ) . toString ( ) ) ) )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                Integer   orderSkuNum   =   hashOperations . get ( cartInfo . getSkuId ( ) . toString ( ) )   +   cartInfo . getSkuNum ( ) ;  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 hashOperations . pu t( cartInfo . getSkuId ( ) . toString ( ) ,   orderSkuNum ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             if   ( Boolean . TRUE . equals ( hashOperations . hasKey ( cartInfo . getSkuId ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . toString ( ) ) ) )   {  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 Integer   orderSkuNum   =    hashOperations. ge t( cartInfo . getSkuId ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         . toString ( ) )   +   cartInfo . getSkuNum ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 hashOperations . put ( cartInfo . getSkuId ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         . toString ( ) ,   orderSkuNum ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         } ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         redisTemplate . expire ( orderSkuKey ,   DateUtil . getCurrentExpireTimes ( ) ,   TimeUnit . SECONDS ) ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -355,7 +363,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     /** 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * 订单查询 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * 订单(用户) 查询 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * @param pageParam 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * @param orderUserQueryVo 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -376,7 +384,57 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //把订单项集合封装到每个订单里面 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderInfo . setOrderItemList ( orderItemList ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //封装订单状态名称 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderInfo . getParam ( ) . put ( " orderStatusName " ,   orderInfo . getOrderStatus ( ) . getComment ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderInfo . getParam ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . put ( " orderStatusName " ,   orderInfo . getOrderStatus ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             . getComment ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         return   pageModel ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     /** 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * 订单(后台)查询 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * @param pageParam 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * @param orderQueryVo 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     * @return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     */ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     @Override 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     public   IPage < OrderInfo >   selectPage ( Page < OrderInfo >   pageParam ,   OrderQueryVo   orderQueryVo )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         LambdaQueryWrapper < OrderInfo >   wrapper   =   new   LambdaQueryWrapper < > ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //获取查询信息 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         String   receiver   =   orderQueryVo . getReceiver ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         String   orderNo   =   orderQueryVo . getOrderNo ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         OrderStatus   orderStatus   =   orderQueryVo . getOrderStatus ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         Long   leaderId   =   orderQueryVo . getLeaderId ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         Long   wareId   =   orderQueryVo . getWareId ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         String   createTimeBegin   =   orderQueryVo . getCreateTimeBegin ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         String   createTimeEnd   =   orderQueryVo . getCreateTimeEnd ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //拼接查询信息 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         wrapper . like ( ! StringUtils . isEmpty ( receiver ) ,   OrderInfo : : getReceiverName ,   receiver ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . or ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . like ( ! StringUtils . isEmpty ( receiver ) ,   OrderInfo : : getReceiverPhone ,   receiver ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . eq ( ! StringUtils . isEmpty ( orderNo ) ,   OrderInfo : : getOrderNo ,   orderNo ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . eq ( ! StringUtils . isEmpty ( orderStatus ) ,   OrderInfo : : getOrderStatus ,   orderStatus ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . eq ( ! StringUtils . isEmpty ( leaderId ) ,   OrderInfo : : getLeaderId ,   leaderId ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . eq ( ! StringUtils . isEmpty ( wareId ) ,   OrderInfo : : getWareId ,   wareId ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . ge ( ! StringUtils . isEmpty ( createTimeBegin ) ,   OrderInfo : : getCreateTime ,   createTimeBegin ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 . le ( ! StringUtils . isEmpty ( createTimeEnd ) ,   OrderInfo : : getCreateTime ,   createTimeEnd ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         IPage < OrderInfo >   pageModel   =   baseMapper . selectPage ( pageParam ,   wrapper ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         //获取每个订单,把每个订单里面订单项查询封装 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         List < OrderInfo >   orderInfoList   =   pageModel . getRecords ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         for   ( OrderInfo   orderInfo   :   orderInfoList )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //根据订单id查询里面所有订单项列表 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             List < OrderItem >   orderItemList   =   orderItemMapper . selectList ( new   LambdaQueryWrapper < OrderItem > ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . eq ( OrderItem : : getOrderId ,   orderInfo . getId ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //把订单项集合封装到每个订单里面 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderInfo . setOrderItemList ( orderItemList ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             //封装订单状态名称 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             orderInfo . getParam ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . put ( " orderStatusName " ,   orderInfo . getOrderStatus ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             . getComment ( ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         return   pageModel ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     } 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -393,7 +451,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				     private   BigDecimal   computeTotalAmount ( List < CartInfo >   cartInfoList )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         BigDecimal   total   =   new   BigDecimal ( 0 ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         for   ( CartInfo   cartInfo   :   cartInfoList )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   itemTotal   =   cartInfo . getCartPrice ( ) . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   itemTotal   =   cartInfo . getCartPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             total   =   total . add ( itemTotal ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				         return   total ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -424,12 +483,14 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     BigDecimal   reduceAmount   =   activityRule . getReduceAmount ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     activityReduceAmount   =   activityReduceAmount . add ( reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     if   ( cartInfoList . size ( )   = =   1 )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         activitySplitAmountMap . put ( " activity: "   +   cartInfoList . get ( 0 ) . getSkuId ( ) ,   reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         activitySplitAmountMap . put ( " activity: "   +   cartInfoList . get ( 0 ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                 . getSkuId ( ) ,   reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     }   else   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         //总金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         BigDecimal   originalTotalAmount   =   new   BigDecimal ( 0 ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         for   ( CartInfo   cartInfo   :   cartInfoList )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             originalTotalAmount   =   originalTotalAmount . add ( skuTotalAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         //记录除最后一项是所有分摊金额, 最后一项=总的 - skuPartReduceAmount 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -438,9 +499,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             for   ( int   i   =   0 ,   len   =   cartInfoList . size ( ) ;   i   <   len ;   i + + )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                 CartInfo   cartInfo   =   cartInfoList . get ( i ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                 if   ( i   <   len   -   1 )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                             . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     //sku分摊金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuReduceAmount   =   skuTotalAmount . divide ( originalTotalAmount ,   2 ,   RoundingMode . HALF_UP ) . multiply ( reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuReduceAmount   =   skuTotalAmount . divide ( originalTotalAmount ,   2 ,   RoundingMode . HALF_UP ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                             . multiply ( reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     activitySplitAmountMap . put ( " activity: "   +   cartInfo . getSkuId ( ) ,   skuReduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     skuPartReduceAmount   =   skuPartReduceAmount . add ( skuReduceAmount ) ; 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -453,10 +516,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             for   ( int   i   =   0 ,   len   =   cartInfoList . size ( ) ;   i   <   len ;   i + + )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                 CartInfo   cartInfo   =   cartInfoList . get ( i ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                 if   ( i   <   len   -   1 )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                             . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     //sku分摊金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuDiscountTotalAmount   =   skuTotalAmount . multiply ( activityRule . getBenefitDiscount ( ) . divide ( new   BigDecimal ( " 10 " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuDiscountTotalAmount   =   skuTotalAmount . multiply ( activityRule . getBenefitDiscount ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                             . divide ( new   BigDecimal ( " 10 " ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     BigDecimal   skuReduceAmount   =   skuTotalAmount . subtract ( skuDiscountTotalAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     activitySplitAmountMap . put ( " activity: "   +   cartInfo . getSkuId ( ) ,   skuReduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -497,13 +562,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             BigDecimal   reduceAmount   =   couponInfo . getAmount ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             if   ( skuIdList . size ( )   = =   1 )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 //sku的优化金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 couponInfoSplitAmountMap . put ( " coupon: "   +   skuIdToCartInfoMap . get ( skuIdList . get ( 0 ) ) . getSkuId ( ) ,   reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 couponInfoSplitAmountMap . put ( " coupon: "   +   skuIdToCartInfoMap . get ( skuIdList . get ( 0 ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         . getSkuId ( ) ,   reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				             }   else   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 //总金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 BigDecimal   originalTotalAmount   =   new   BigDecimal ( 0 ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 for   ( Long   skuId   :   skuIdList )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     CartInfo   cartInfo   =   skuIdToCartInfoMap . get ( skuId ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     originalTotalAmount   =   originalTotalAmount . add ( skuTotalAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                 //记录除最后一项是所有分摊金额, 最后一项=总的 - skuPartReduceAmount 
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -512,9 +579,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                     for   ( int   i   =   0 ,   len   =   skuIdList . size ( ) ;   i   <   len ;   i + + )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         CartInfo   cartInfo   =   skuIdToCartInfoMap . get ( skuIdList . get ( i ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                         if   ( i   <   len   -   1 )   { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             BigDecimal   skuTotalAmount   =   cartInfo . getCartPrice ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     . multiply ( new   BigDecimal ( cartInfo . getSkuNum ( ) ) ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             //sku分摊金额 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             BigDecimal   skuReduceAmount   =   skuTotalAmount . divide ( originalTotalAmount ,   2 ,   RoundingMode . HALF_UP ) . multiply ( reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             BigDecimal   skuReduceAmount   =   skuTotalAmount . divide ( originalTotalAmount ,   2 ,   RoundingMode . HALF_UP ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                                     . multiply ( reduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             couponInfoSplitAmountMap . put ( " coupon: "   +   cartInfo . getSkuId ( ) ,   skuReduceAmount ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                             skuPartReduceAmount   =   skuPartReduceAmount . add ( skuReduceAmount ) ;