| 
					
				 | 
			
			
				@@ -31,6 +31,7 @@ import com.kmall.admin.entity.vip.Mall2PointsRulesEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.fromcomm.dao.SysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.fromcomm.entity.SysUserEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.haikong.constant.Constants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.kmall.admin.haikong.constant.VmcconnectUrlEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.haikong.dto.WareQueryStockResponseDTO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.haikong.utils.ListUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.kmall.admin.haikong.vo.QueryGoodsVo; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -210,10 +211,6 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private AddressInfoService addressInfoService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private KtoEccsService ktoEccsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private CustomsClearanceTimeliness customsClearanceTimeliness; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -225,7 +222,9 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private HaiKongProperties haiKongProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 免税mall接口工具类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private VmcShopTemplate vmcShopTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -249,6 +248,11 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private MkActivitiesPromotionService mkActivitiesPromotionService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 免税mall日志记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MallVmcSendLogDao mallVmcSendLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1008,6 +1012,44 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 海控还原门店商品库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param stockNum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param storeRelaEntity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param orderGoodsEntity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param sellVolume 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param user 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void resetStoreGoodsStockMall(Integer stockNum, ProductStoreRelaEntity storeRelaEntity, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      OrderGoodsEntity orderGoodsEntity, BigDecimal sellVolume,SysUserEntity user) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString())); // 减退库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //库存数量 + 商品数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeRelaEntity.setStockNum(stockNum + orderGoodsEntity.getNumber());//库存数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //待退款数量 - 商品数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeRelaEntity.setToBeRestored(storeRelaEntity.getToBeRestored() - orderGoodsEntity.getNumber()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        productStoreRelaDao.update(storeRelaEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String username = "system"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (user != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            username = user.getUsername(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setChangeType(Dict.changeType.item_0.getItem()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setChangeReason("前端退款"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setGoodsId(storeRelaEntity.getGoodsId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setStoreId(storeRelaEntity.getStoreId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setMerchSn(storeRelaEntity.getMerchSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setStoreChangeNum(orderGoodsEntity.getNumber()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setStoreOriginalNum(stockNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setStoreValidNum(stockNum + orderGoodsEntity.getNumber()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setModTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setCreaterSn(username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setModerSn(username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeEntity.setIsValid(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        storeMngChangeDao.save(storeMngChangeEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 查询该退款订单编号是否是推广渠道订单,是则修改渠道定时扫描状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param orderInfo 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3245,7 +3287,6 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_402.getItem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return R.error("订单已退款"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_0.getItem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return R.error("订单正在准备,请稍等!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3260,12 +3301,10 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String payFlag = order.getPayFlag(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String key  = "kmall_order_refund_" + order.getOrderSn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (JedisUtil.exists(key)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return R.error("订单退款操作过快,请等待!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JedisUtil.set(key, System.currentTimeMillis() + "", 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (orderInfo.getPayStatus() == Integer.parseInt(Dict.payStatus.item_3.getItem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return R.error("订单正在退款中,请勿重复退款"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3281,32 +3320,14 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         cdl.await(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (Dict.payFlag.item_weixin.getItem().equals(payFlag)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Double totalActualPrice = orderDao.getTotalActualPrice(orderInfo.getMerchOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (totalActualPrice == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 totalActualPrice = 0d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (orderInfo.getOrderStatus() != Integer.parseInt(Dict.orderStatus.item_0.getItem())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                LOGGER.info("微信退款开始"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LOGGER.info("[微信退款开始--------orderRefund]"+order.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 WechatRefundApiResult result = WechatUtil.wxRefund(orderInfo.getOrderSn(), totalActualPrice, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         orderInfo.getActualPrice().doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                OrderRefundEntity orderRefund = new OrderRefundEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundId(result.getRefund_id()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setOutRefundNo(result.getOut_trade_no()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(result.getRefund_fee())).divide(Constant.ONE_HUNDRED)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款处理中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setModTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setOrderId(Integer.parseInt(order.getId() + "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setUserId(user.getUserId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundId(order.getUserId() + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (list.size() > 1) {//多条订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //修改为退款成功 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3315,16 +3336,16 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 pickUpCodeEntity.setPickUpCodeStatus("3"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 pickUpCodeService.update(pickUpCodeEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //还原库存,调用免税mall接口退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                restoreInventoryMsMall(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //新增退款记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRestore(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                OrderRefundEntity orderRefund = orderRefundLog(result.getRefund_id(),result.getOut_trade_no(),result.getRefund_fee(),order.getId(),user.getUserId(),order.getMerchOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 orderRefundDao.save(orderRefund); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //调用免税mall接口退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                restoreInventoryMsMall(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 支付宝的退款代码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else if (Dict.payFlag.item_alipay.getItem().equals(payFlag)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            LOGGER.info("[支付宝退款开始--------orderRefund]"+order.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             AliPayMicropayApiResult userRefund = AliPayUtil.aliTradeRefund(order.getOrderSn(), order.getActualPrice().toString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     "用户退款", order.getStoreId() + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 是否已退款校验 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3337,45 +3358,57 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 LOGGER.error("[支付宝退款校验出错]",e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             LOGGER.info(userRefund.getSubMsg()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            OrderRefundEntity orderRefund = new OrderRefundEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setRefundId(userRefund.getTradeNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setOutRefundNo(userRefund.getOutTradeNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setRefundMoney(new BigDecimal(userRefund.getRefundFee())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setModTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setRefundTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setOrderId(Integer.parseInt(order.getId() + "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setUserId(user.getUserId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setRefundId(order.getUserId() + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (list.size() > 1) {//多条订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderDao.update(order);//修改为退款成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //修改为退款成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderDao.update(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 修改小票码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             pickUpCodeEntity.setPickUpCodeStatus("3"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             pickUpCodeService.update(pickUpCodeEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //调用免税mall接口退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //还原库存,调用免税mall接口退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             restoreInventoryMsMall(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefund.setRestore(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderRefundDao.save(orderRefund);//退款记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //新增退款记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            OrderRefundEntity orderRefund = orderRefundLog(userRefund.getTradeNo(),userRefund.getOutTradeNo(),userRefund.getRefundFee(),order.getId(),user.getUserId(),order.getMerchOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderRefundDao.save(orderRefund); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return R.ok("退款成功"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 新增退款记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param refundId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param OutTradeNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param refundFee 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param orderId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param merchOrderSn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private OrderRefundEntity orderRefundLog(String refundId,String OutTradeNo,String refundFee,Long orderId,Long userId,String merchOrderSn){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        OrderRefundEntity orderRefund = new OrderRefundEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setRefundId(refundId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setOutRefundNo(OutTradeNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(refundFee)).divide(Constant.ONE_HUNDRED)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款处理中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setModTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setRefundTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setOrderId(orderId.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setUserId(userId.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setRefundId(userId + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer sum = orderDao.queryObjectByMerchOrderSnHkMall(merchOrderSn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sum > 1) {//多条订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderRefund.setRestore(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return orderRefund; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 海控订单退款 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param order 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3384,36 +3417,47 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<String, Object> map = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SysUserEntity user = ShiroUtils.getUserEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         map.put("orderId", order.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //mall_order_goodsd,订单明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryListHkMall(map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (OrderGoodsEntity orderGoodsEntity : orderGoodsVoList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ProductStoreRelaEntity storeRelaEntity = productStoreRelaDao 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .queryByGoodsIdAndStoreId(order.getStoreId().longValue(), orderGoodsEntity.getGoodsId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .queryByGoodsIdAndStoreIdHkMall(order.getStoreId().longValue(), orderGoodsEntity.getGoodsId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (null == storeRelaEntity || null == storeRelaEntity.getSellVolume()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 storeRelaEntity.setSellVolume(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //销售量 - 商品数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             BigDecimal sellVolume = new BigDecimal(storeRelaEntity.getSellVolume() - orderGoodsEntity.getNumber());//销售量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (sellVolume.compareTo(Constant.ZERO) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 sellVolume = Constant.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //还原门店库存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (null != storeRelaEntity.getStockNum()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Integer stockNum = storeRelaEntity.getStockNum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, "0", user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                resetStoreGoodsStockMall(storeRelaEntity.getStockNum(), storeRelaEntity, orderGoodsEntity, sellVolume, user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOGGER.info("=======> 调用VMCShop接口开始发送退款订单数据......"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String response = vmcShopTemplate.refundOrder(JacksonUtil.toJson(order.getOrderSn())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 3. 解析响应数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //调用免税mall接口 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vmcShopMall(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *海控免税mall接口 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param order 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void vmcShopMall(OrderEntity order) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LOGGER.info("=======> [调用VMCShop接口开始发送退款订单数据]"+order.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String body = JacksonUtil.toJson(order.getOrderSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String response = vmcShopTemplate.refundOrder(body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析响应数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LOGGER.info("=======> [发送退款订单数据成功,开始处理后续流程]"+response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<String,String> res = JSON.parseObject(response,Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if("0".equals(res.get("code"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //Map<String,String> res = JSON.parseObject(response,Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        saveVmcSend(order.getOrderSn(),VmcconnectUrlEnum.ORDERS_CANCEL_ORDER.getMethod(),body,response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LOGGER.info(order.getOrderSn()+"[发送退款订单数据]"+JSON.toJSONString(order)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            LOGGER.error(order.getOrderSn()+"[该订单退款失败]"+JSON.toJSONString(order)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void toBeRestoreInventory(OrderEntity order) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4245,6 +4289,43 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return goodsDetailsDtos; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 重发订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param orderSn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public R resendOrderHkMall(String orderSn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LOGGER.info("=======> [调用VMCShop接口开始发送退款订单数据]"+orderSn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String body = JacksonUtil.toJson(orderSn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String response = vmcShopTemplate.resendOrder(body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //解析响应数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LOGGER.info("=======> [resendOrderHkMall---重发订单数据成功,开始处理后续流程]"+response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //记录发送至免税Mall日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        saveVmcSend(orderSn,VmcconnectUrlEnum.ORDERS_RETRY_ORDER.getMethod(),body,response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String,String> res = JSON.parseObject(response,Map.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if("0".equals(res.get("code"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return R.ok(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return R.error(500,"重发订单失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 记录发送至免税Mall日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param orderSn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param body 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param response 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void saveVmcSend(String orderSn,String urlType,String body,String response){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MallVmcSendlogEntity mallVmcSendlogEntity = new MallVmcSendlogEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mallVmcSendlogEntity.setOrderSn(orderSn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mallVmcSendlogEntity.setVmcType(urlType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mallVmcSendlogEntity.setRequestMsg(body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mallVmcSendlogEntity.setResponseMsg(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mallVmcSendLogDao.saveVmcSend(mallVmcSendlogEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 设置订单数据 
			 |