| 
					
				 | 
			
			
				@@ -9,11 +9,17 @@ import com.kmall.admin.dto.OrderExpressDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.dto.OrderRecognitionDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.entity.OrderProcessRecordEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.admin.entity.mk.store.MkStoreCampMinusEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.admin.entity.mk.store.MkStoreCampMinusLevelEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.entity.mk.store.MkStorePromOrderRealEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.admin.entity.mk.store.MkStoreTicketDiscountEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.fromcomm.dao.SysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.service.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.admin.service.mk.store.MkStoreCampMinusService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.admin.service.mk.store.MkStoreTicketDiscountService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.websocket.WebSocketServer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.api.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.api.entity.mk.MkStoreTicketDiscountVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.common.utils.ResponseData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.common.utils.wechat.WechatMicropayApiResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.common.utils.wechat.WechatReverseApiResult; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,6 +52,7 @@ import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.RoundingMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.text.ParseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.text.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,6 +113,11 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private StoreService storeService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private PickUpCodeService pickUpCodeService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MkStoreCampMinusService mkStoreCampMinusService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MkStoreTicketDiscountService mkStoreTicketDiscountService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1666,11 +1678,87 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 userDao.save(userEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // TODO 生成订单之前,先查询是否有优惠券或者满减 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // TODO 20200610 要修改成全部商品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 优惠券的集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MkStoreTicketDiscountEntity> mkStoreTicketDiscountEntities = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 满减的集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MkStoreCampMinusLevelEntity> mkStoreCampMinusEntities = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 存商品跟金额的关系 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Long,BigDecimal> moneyMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 商品总价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal totalPrice = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(GoodsEntity goodsEntity : goodsEntities){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Long goodsId = goodsEntity.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 计算该商品的价格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal goodsPrice = goodsEntity.getStoreRetailPrice().multiply(new BigDecimal(goodsEntity.getGoodsNumber())).setScale(2, RoundingMode.HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                moneyMap.put(goodsId,goodsPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                totalPrice = totalPrice.add(goodsPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 查询该商品id是否有优惠券 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<MkStoreTicketDiscountEntity> mkStoreTicketDiscountEntity = mkStoreTicketDiscountService.queryByGoodsId(goodsId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(mkStoreTicketDiscountEntity != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    mkStoreTicketDiscountEntities.addAll(mkStoreTicketDiscountEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 查询该商品id是否有满减 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<MkStoreCampMinusLevelEntity> mkStoreCampMinusEntity = mkStoreCampMinusService.queryByGoodsId(goodsId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(mkStoreCampMinusEntity != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    mkStoreCampMinusEntities.addAll(mkStoreCampMinusEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 满减优惠的金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal campDisCountAmount = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(mkStoreCampMinusEntities.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 上一次所需金额,用于取最大的优惠力度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal lastAmount = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (int i = 0 ; i < mkStoreCampMinusEntities.size() ; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    MkStoreCampMinusLevelEntity mkStoreCampMinusLevelEntity = mkStoreCampMinusEntities.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // TODO 20200610还有满多少件,跟满多少元打折的,逻辑复杂,下次开发 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal discCond = mkStoreCampMinusLevelEntity.getYuanMinusCond(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 判断这次金额是否大于上次金额,如果不大于,直接continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(discCond.compareTo(lastAmount) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 如果总金额大于所需金额,则可以使用该优惠券,记录该优惠券的角标,金额跟优惠的钱 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(totalPrice.compareTo(discCond) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            // 记录上一次金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            lastAmount = discCond; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            campDisCountAmount = mkStoreCampMinusLevelEntity.getYuanMinusPref(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 优惠券优惠的金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal ticketDisCountAmount = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(mkStoreTicketDiscountEntities.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 上一次所需金额,用于取最大的优惠力度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal lastAmount = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (int i = 0 ; i < mkStoreTicketDiscountEntities.size() ; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    MkStoreTicketDiscountEntity mkStoreTicketDiscountEntity = mkStoreTicketDiscountEntities.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 代金券所需金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // TODO 20200610还有折扣券的,逻辑较为复杂,下次在开发 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal discCond = mkStoreTicketDiscountEntity.getVoucherCond(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 判断这次金额是否大于上次金额,如果不大于,直接continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(discCond.compareTo(lastAmount) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 如果总金额大于所需金额,则可以使用该优惠券,记录该优惠券的角标,金额跟优惠的钱 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(totalPrice.compareTo(discCond) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            // 记录上一次金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            lastAmount = discCond; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ticketDisCountAmount = mkStoreTicketDiscountEntity.getVoucherMoney(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 判断两个优惠金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal disCountAmount = ticketDisCountAmount.compareTo(campDisCountAmount) > 0 ? ticketDisCountAmount : campDisCountAmount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 生成订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             String merchOrderSn = "EMATO" + CommonUtil.generateOrderNumber(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            OrderVo order = setOrderVo(goodsList, userEntity,storeId.longValue(), user.getMerchSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            OrderVo order = setOrderVo(goodsList, userEntity,storeId.longValue(), user.getMerchSn(),disCountAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setStore_id(storeId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setMerchOrderSn(merchOrderSn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1981,7 +2069,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 设置订单数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public OrderVo setOrderVo(List<LinkedHashMap> goodsList, UserEntity loginUser,Long storeId, String merchSn){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public OrderVo setOrderVo(List<LinkedHashMap> goodsList, UserEntity loginUser,Long storeId, String merchSn, BigDecimal disCountAmount){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         OrderVo orderInfo = new OrderVo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal goodsTotalPrice = new BigDecimal(0.00); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1992,11 +2080,10 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     .add(new BigDecimal(goods.get("retailPrice").toString()).multiply(new BigDecimal(goods.get("sellVolume").toString()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //订单价格计算:订单的总价+运费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal orderTotalPrice = goodsTotalPrice.add(new BigDecimal(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal fullCutCouponDec = Constant.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal couponPrice = new BigDecimal(0.00); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal couponPrice = disCountAmount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal actualPrice = orderTotalPrice.subtract(couponPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String orderSn = "CW" +  CommonUtil.generateOrderNumber(); 
			 |