Procházet zdrojové kódy

Merge branch 'master' of lhm/kmall-haikong into master

lhm před 3 roky
rodič
revize
640784aa1b
29 změnil soubory, kde provedl 315 přidání a 96 odebrání
  1. 6 0
      kmall-admin/pom.xml
  2. 7 3
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java
  3. 5 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  4. 15 3
      kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareBiz.java
  5. 14 2
      kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareQueryBiz.java
  6. 3 5
      kmall-admin/src/main/java/com/kmall/admin/cuspay/support/sign/RSA.java
  7. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongSendOrderInfoRecordDao.java
  8. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java
  9. 4 0
      kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongSendOrderInfoRecordService.java
  10. 96 23
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  11. 10 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaikongSendOrderInfoRecordServiceImpl.java
  12. 24 24
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeRecordServiceImpl.java
  13. 6 5
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeServiceImpl.java
  14. 7 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesServiceImpl.java
  15. 6 5
      kmall-admin/src/main/java/com/kmall/admin/task/SalsDetailTask.java
  16. 2 1
      kmall-admin/src/main/java/com/kmall/admin/task/SendToEccsTask.java
  17. 6 5
      kmall-admin/src/main/java/com/kmall/admin/task/SyncOmsTask.java
  18. 2 2
      kmall-admin/src/main/resources/conf/cuspay/cuspay-ali.properties
  19. 15 1
      kmall-admin/src/main/resources/mybatis/mapper/OrderProcessRecordDao.xml
  20. 33 0
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaikongSendOrderInfoRecordDao.xml
  21. 1 5
      kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeDao.xml
  22. 6 0
      kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeRecordDao.xml
  23. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html
  24. 3 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/stockchangerecord.html
  25. 9 1
      kmall-admin/src/main/webapp/js/mk/mkactivities.js
  26. 1 1
      kmall-admin/src/main/webapp/js/sale/pickupcode.js
  27. 8 1
      kmall-admin/src/main/webapp/js/sale/sale.js
  28. 19 7
      kmall-admin/src/main/webapp/js/shop/stockchangerecord.js
  29. 2 2
      kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java

+ 6 - 0
kmall-admin/pom.xml

@@ -230,6 +230,12 @@
             <version>0.0.19</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.22.0.ALL</version>
+        </dependency>
+
         <!--    阿里云短信服务api    -->
         <dependency>
             <groupId>com.aliyun</groupId>

+ 7 - 3
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java

@@ -458,9 +458,13 @@ public class GoodsController {
                             throw new RRException("文件为:" + barcode + "的商品命名格式不正确,请检查!");
                         }
                         GoodsEntity goodsEntity = goodsService.queryByBarcode(barcode);
-                        goodsEntity.setPrimaryPicUrl(url);
-                        goodsEntity.setListPicUrl(url);
-                        goodsService.updateForImgUrl(goodsEntity);
+                        if (Objects.isNull(goodsEntity)) {
+                            log.error("商品图片名【{}】所对应商品不存在!", barcode);
+                        } else {
+                            goodsEntity.setPrimaryPicUrl(url);
+                            goodsEntity.setListPicUrl(url);
+                            goodsService.updateForImgUrl(goodsEntity);
+                        }
                     }
                     //保存文件信息
                     SysOssEntity ossEntity = new SysOssEntity();

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -1500,6 +1500,11 @@ public class OrderController {
         return orderService.resendOrderHkMall(orderSn);
     }
 
+    @RequestMapping("/resendOrderHkMall/{orderSn}/vmcshop")
+    public R resendOrderInfoToVmcShop(@PathVariable("orderSn") String orderSn) {
+        return orderService.resendOrderInfoToVmcShop(orderSn);
+    }
+
     /**
      * 总计
      */

+ 15 - 3
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareBiz.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.cuspay.biz.ali;
 
+import com.alipay.api.internal.util.AlipaySignature;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
@@ -41,6 +42,8 @@ import org.springframework.util.StringUtils;
 import com.kmall.admin.cuspay.biz.ali.support.sign.MD5;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -115,7 +118,8 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
             // 商户海关备案名称
             aliCbPayDoc.setMerchantCustomsName(customsName);
             // 商户生成的用于唯一标识一次报关操作的业务编号
-            aliCbPayDoc.setOutRequestNo(Contants.WX + SnowflakeUtil.getSnowNextId());
+//            aliCbPayDoc.setOutRequestNo(Contants.WX + SnowflakeUtil.getSnowNextId());
+            aliCbPayDoc.setOutRequestNo(params.get("orderSn").toString());
             // 合作者身份ID
             aliCbPayDoc.setPartner(partner);
             // 该交易在支付宝系统中的交易流水号
@@ -392,11 +396,19 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
             prestr = prestr + "&sign_type=MD5";
         } else if ("prod".equals(encryption)) {
             // RSA加密
-            sign = RSA.sign(prestr, RSAPrivateKey, "UTF-8");
+            try {
+                sign = AlipaySignature.rsaSign(prestr, RSAPrivateKey, "utf-8", "RSA");
+            } catch (Exception e) {
+                logger.error("加密支付宝报关相关参数失败!", e);
+            }
             prestr = prestr + "&sign_type=RSA";
         }
 
-        prestr = prestr + "&sign=" + sign;
+        try {
+            prestr = URLEncoder.encode(prestr, "utf-8") + "&sign=" + sign;
+        } catch (UnsupportedEncodingException e) {
+            logger.error("签名编码出现错误!", e);
+        }
         prestr = "?" + prestr;
         return prestr;
     }

+ 14 - 2
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareQueryBiz.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.cuspay.biz.ali;
 
+import com.alipay.api.internal.util.AlipaySignature;
 import com.kmall.admin.cuspay.biz.AbstractCusDeclareBiz;
 import com.kmall.admin.cuspay.biz.CuspayBiz;
 import com.kmall.admin.cuspay.ccnet2cuspay.common.ali.AliDict;
@@ -49,6 +50,8 @@ import com.kmall.admin.cuspay.biz.ali.support.sign.MD5;
 import javax.xml.bind.JAXB;
 import java.io.IOException;
 import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -342,11 +345,20 @@ public class AliCusDeclareQueryBiz extends AbstractCusDeclareBiz implements Cusp
             prestr = prestr + "&sign_type=MD5";
         } else if ("prod".equals(encryption)) {
             // RSA加密
-            sign = RSA.sign(prestr, RSAPrivateKey, "UTF-8");
+            try {
+                sign = AlipaySignature.rsaSign(prestr, RSAPrivateKey, "utf-8", "RSA");
+//                sign = RSA.sign(prestr, RSAPrivateKey, "UTF-8");
+            } catch (Exception e) {
+                logger.error("加密支付宝查询报关结果相关参数失败!", e);
+            }
             prestr = prestr + "&sign_type=RSA";
         }
 
-        prestr = prestr + "&sign=" + sign;
+        try {
+            prestr = URLEncoder.encode(prestr, "utf-8") + "&sign=" + sign;
+        } catch (UnsupportedEncodingException e) {
+            logger.error("签名编码出现错误!", e);
+        }
         prestr = "?" + prestr;
         return prestr;
     }

+ 3 - 5
kmall-admin/src/main/java/com/kmall/admin/cuspay/support/sign/RSA.java

@@ -22,8 +22,7 @@ public class RSA{
 	* @param input_charset 编码格式
 	* @return 签名值
 	*/
-	public static String sign(String content, String privateKey, String input_charset)
-	{
+	public static String sign(String content, String privateKey, String input_charset) throws Exception {
         try 
         {
         	PKCS8EncodedKeySpec priPKCS8 	= new PKCS8EncodedKeySpec( Base64.decode(privateKey) );
@@ -42,10 +41,9 @@ public class RSA{
         }
         catch (Exception e)
         {
-        	e.printStackTrace();
+        	throw new Exception(e);
         }
-        
-        return null;
+
     }
 	
 	/**

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongSendOrderInfoRecordDao.java

@@ -37,4 +37,6 @@ public interface HaiKongSendOrderInfoRecordDao {
     int saveBatch(List<HaiKongSendOrderInfoRecordEntity> entities);
 
     void updateResendStatusBatch(List<HaiKongSendOrderInfoRecordEntity> entities);
+
+    void updateByOrderSn(HaiKongSendOrderInfoRecordEntity sendOrderInfoRecordEntity);
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java

@@ -258,4 +258,6 @@ public interface OrderService {
     void integralTask();
 
     int queryOrderMainTotal();
+
+    R resendOrderInfoToVmcShop(String orderSn);
 }

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/service/haikong/HaiKongSendOrderInfoRecordService.java

@@ -76,4 +76,8 @@ public interface HaiKongSendOrderInfoRecordService {
     List<HaiKongSendOrderInfoRecordEntity> queryListByResendStatus();
 
     void updateResendStatusBatch(List<HaiKongSendOrderInfoRecordEntity> entities);
+
+    HaiKongSendOrderInfoRecordEntity queryObjectByOrderSn(String orderSn);
+
+    void updateByOrderSn(HaiKongSendOrderInfoRecordEntity sendOrderInfoRecordEntity);
 }

+ 96 - 23
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -2331,6 +2331,7 @@ public class OrderServiceImpl implements OrderService {
             //生成商户订单号
             Snowflake snowflake = IdUtil.createSnowflake(14, 14);
             String orderSn = "8" + snowflake.nextIdStr().substring(6);
+            LOGGER.info("订单======>{},请求生成订单数据======>{}", orderSn, JacksonUtil.toJson(param));
             // 检查库存和更新库存
             for (QueryGoodsVO goodsDto : queryGoodsVOList) {
                 // 要购买的数量
@@ -2354,8 +2355,7 @@ public class OrderServiceImpl implements OrderService {
                         LOGGER.error("sku:【{}】库存不足,门店可用库存:【{}】,仓库可用库存:【{}】,购买数量:【{}】", sku, stockNum, warehouseStock, sellVolume);
                         throw new ServiceException(String.format("sku:【%s】库存不足,门店可用库存:【%s】,仓库可用库存:【%s】,购买数量:【%s】", sku, stockNum, warehouseStock, sellVolume));
                     }
-                    sellVolume -= 1;
-                    // TODO 库存变化记录新增字段:订单号、门店编号
+                    // 库存变化记录新增字段:订单号、门店编号
                     // 门店库存变化记录
                     StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
                     storeMngChangeEntity.setChangeType(Dict.changeType.item_1.getItem());
@@ -2793,10 +2793,14 @@ public class OrderServiceImpl implements OrderService {
             if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
                 // 同步会员订单消费记录
                 syncMemberConsumeRecord(memberPhone, order, deductionScore);
-                syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
-                // 积分变动接口,下单扣减
+                if (deductionScore > 0) {
+                    // 积分变动接口,下单扣减
+                    syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
+                }
                 Integer score = memberScore.get();
-                syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+                if (score > 0) {
+                    syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
+                }
             }
 
             // 生成取票码
@@ -2818,7 +2822,7 @@ public class OrderServiceImpl implements OrderService {
             JedisUtil.del(Constants.WAREHOUSE_STOCK_MAP_KEY + "_" + storeId);
 
 
-            if (org.springframework.util.StringUtils.isEmpty(env) && Constants.TEST.equals(env)) {
+            if (!org.springframework.util.StringUtils.isEmpty(env) && Constants.TEST.equals(env)) {
                 order.setPayApp("wxpay");
                 order.setRequest("1111111111111111111");
                 order.setResponse("2222222222222222222");
@@ -2878,6 +2882,10 @@ public class OrderServiceImpl implements OrderService {
             } else if (Objects.nonNull(r) && ErrorCodeConstants.VmcShopSysErrorCodeEnum.CODE_10500.getCode().equals(r.getCode())) {
                 pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_6.getStatus());
                 haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
+                Map<String, Object> map = new HashMap<>();
+                map.put("orderSn", orderSn);
+                map.put("clearMsg", response);
+                orderProcessRecordDao.updateMallOrderProcessRecord(map);
                 LOGGER.error("推送订单到免税mall失败!响应结果:{}", response);
             } else if (Objects.isNull(r)) {
                 pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_6.getStatus());
@@ -2921,6 +2929,7 @@ public class OrderServiceImpl implements OrderService {
         entity.setIdentityCard(seaportInfo.getIdentityCard());
         entity.setIdentityMobile(seaportInfo.getIdentityMobile());
         entity.setIdentityName(seaportInfo.getIdentityName());
+        entity.setOutTradeNo(sendOrderToVmcShopDTO.getPayInfo().getOutTradeNo());
         entity.setOrderProductInfo(JacksonUtil.toJson(seaportInfo.getOrderProductInfoList()));
 
         return entity;
@@ -2958,7 +2967,21 @@ public class OrderServiceImpl implements OrderService {
         String response = order.getResponse();
         response = response.replaceAll("\r|\n", "");
         payInfoDTO.setResponse(response);
-        payInfoDTO.setOutTradeNo(order.getAliTradeNo());
+        if ("wxpay".equals(order.getPayApp())) {
+            String payTransactionId = order.getPayTransactionId();
+            if (org.springframework.util.StringUtils.isEmpty(payTransactionId)) {
+                OrderEntity orderEntity = orderDao.queryObjectByOrderSn(order.getOrder_sn());
+                payTransactionId = orderEntity.getPayTransactionId();
+            }
+            payInfoDTO.setOutTradeNo(payTransactionId);
+        } else {
+            String aliTradeNo = order.getAliTradeNo();
+            if (org.springframework.util.StringUtils.isEmpty(aliTradeNo)) {
+                OrderEntity orderEntity = orderDao.queryObjectByOrderSn(order.getOrder_sn());
+                aliTradeNo = orderEntity.getAliTradeNo();
+            }
+            payInfoDTO.setOutTradeNo(aliTradeNo);
+        }
         return payInfoDTO;
     }
 
@@ -2978,8 +3001,9 @@ public class OrderServiceImpl implements OrderService {
         orderInfoItemDTO.setPrice(orderGoodsVo.getRetail_price());
         orderInfoItemDTO.setItemcode(orderGoodsVo.getSku());
         orderInfoItemDTO.setAmount(orderGoodsVo.getActualPaymentAmount());
-        orderInfoItemDTO.setBuyPrice(orderGoodsVo.getActualPaymentAmount());
-        orderInfoItemDTO.setNums(orderGoodsVo.getNumber());
+        Integer number = orderGoodsVo.getNumber();
+        orderInfoItemDTO.setBuyPrice(orderGoodsVo.getActualPaymentAmount().divide(BigDecimal.valueOf(number), 2, BigDecimal.ROUND_HALF_UP));
+        orderInfoItemDTO.setNums(number);
         orderInfoItemDTO.setTax("true");
         orderInfoItemDTO.setTaxPrice(orderGoodsVo.getTaxPrice());
         return orderInfoItemDTO;
@@ -3200,6 +3224,12 @@ public class OrderServiceImpl implements OrderService {
             orderDao.updateOrderInfo(orderRaram);
             this.confirmPay(order.getId(), Dict.payFlag.item_weixin.getItem(), orderWXPayRecordCurrent.getOutTradeNoWX());
 
+            sendWxPayInfo(order, store, wechatMicropayApiResult.getTransaction_id());
+            HaiKongSendOrderInfoRecordEntity haiKongSendOrderInfoRecordEntity = new HaiKongSendOrderInfoRecordEntity();
+            haiKongSendOrderInfoRecordEntity.setOuterOrderNo(order.getOrder_sn());
+            haiKongSendOrderInfoRecordEntity.setOutTradeNo(wechatMicropayApiResult.getTransaction_id());
+            haiKongSendOrderInfoRecordService.updateByOrderSn(haiKongSendOrderInfoRecordEntity);
+
             // 设置支付单完成时间
             processRecordEntity.setPaymentSuccTimeStr(wechatMicropayApiResult.getTime_end());
             processRecordEntity.setPaymentSuccTime(
@@ -3214,9 +3244,8 @@ public class OrderServiceImpl implements OrderService {
             int times = 0;
             // 查询是否支付了
             while (true) {
-                boolean flag = orderQuery(order, processRecordEntity);
+                boolean flag = orderQuery(order, processRecordEntity, store);
                 if (flag) {
-                    atomicBoolean.set(true);
                     break;
                 }
                 try {
@@ -3255,20 +3284,21 @@ public class OrderServiceImpl implements OrderService {
             throw new RuntimeException("未支付或支付失败,请联系管理员");
         }
 
-        if (atomicBoolean.get()) {
-            // 推送支付单
-            sendWxPayInfo(order, store, wechatMicropayApiResult);
-        }
-
     }
 
-    private void sendWxPayInfo(OrderVo order, StoreEntity store, WechatMicropayApiResult wechatMicropayApiResult) {
+    private void sendWxPayInfo(OrderVo order, StoreEntity store, String tradeNo) {
         // 组装支付单信息
         String payTransactionId = "";
-        if (Objects.nonNull(wechatMicropayApiResult)) {
-            payTransactionId = wechatMicropayApiResult.getTransaction_id();
+        if (!org.springframework.util.StringUtils.isEmpty(tradeNo)) {
+            payTransactionId = tradeNo;
         } else {
-            payTransactionId = order.getPayTransactionId();
+            if (!org.springframework.util.StringUtils.isEmpty(order.getPayTransactionId())) {
+                payTransactionId = order.getPayTransactionId();
+            } else {
+                OrderEntity orderEntity = orderDao.queryObjectByOrderSn(order.getOrder_sn());
+                payTransactionId = orderEntity.getPayTransactionId();
+            }
+
         }
 
         Map<String, Object> orderSendCusParams = new HashMap<>();
@@ -3281,7 +3311,8 @@ public class OrderServiceImpl implements OrderService {
         orderSendCusParams.put("transactionId", payTransactionId);
         orderSendCusParams.put("subOrderId", "");   // ccnet原逻辑没有对该字段赋值
         orderSendCusParams.put("subOrderNo", order.getOrder_sn());
-        orderSendCusParams.put("feeType", order.getFeeType());
+        orderSendCusParams.put("feeType", "CNY");
+        orderSendCusParams.put("duty", 0);
         int orderFee = order.getActual_price().multiply(new BigDecimal(100)).intValue();
         orderSendCusParams.put("orderFee", orderFee);
         orderSendCusParams.put("productFee", orderFee);
@@ -3415,7 +3446,7 @@ public class OrderServiceImpl implements OrderService {
         }
     }
 
-    private boolean orderQuery(OrderVo order, OrderProcessRecordEntity processRecordEntity) {
+    private boolean orderQuery(OrderVo order, OrderProcessRecordEntity processRecordEntity, StoreEntity store) {
         LOGGER.info(">>>>>>>>>>>>>>>>>>>>wxOrderQuery 微信查询接口调用");
         String merchOrderSn = order.getMerchOrderSn();
         String orderId = order.getId() + "";
@@ -3437,8 +3468,19 @@ public class OrderServiceImpl implements OrderService {
                     Map processParam = Maps.newHashMap();
                     processParam.put("payTime", successTime);
                     processParam.put("orderSn", orderSn);
+                    order.setPayTransactionId(result.getTransaction_id());
                     orderDao.updateOrderProcessRecord(processParam);
 
+
+
+                    sendWxPayInfo(order, store, result.getTransaction_id());
+                    HaiKongSendOrderInfoRecordEntity haiKongSendOrderInfoRecordEntity = new HaiKongSendOrderInfoRecordEntity();
+                    haiKongSendOrderInfoRecordEntity.setOutTradeNo(result.getTransaction_id());
+                    haiKongSendOrderInfoRecordEntity.setResponse(JacksonUtil.toJson(result));
+                    haiKongSendOrderInfoRecordEntity.setOuterOrderNo(order.getOrder_sn());
+
+                    haiKongSendOrderInfoRecordService.updateByOrderSn(haiKongSendOrderInfoRecordEntity);
+
 //                    orderWXPayRecordService
 //                                    .updateWXPayRecordTradeState(orderWXPayRecordTemp.getId(), wechatRefundApiResult);
 
@@ -4826,6 +4868,12 @@ public class OrderServiceImpl implements OrderService {
                                 .multiply(BigDecimal.valueOf(goodsDetailsDto.getSellVolume()));
                         skuTotalPrice = skuTotalPrice.add(skuActualPaymentAmount);
                     }
+                } else if (CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && !CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
+                    if (!scoreDeductionRejectSkuList.contains(sku)) {
+                        BigDecimal skuActualPaymentAmount = goodsDetailsDto.getActualPaymentAmount()
+                                .multiply(BigDecimal.valueOf(goodsDetailsDto.getSellVolume()));
+                        skuTotalPrice = skuTotalPrice.add(skuActualPaymentAmount);
+                    }
                 }
             }
         }
@@ -5346,6 +5394,7 @@ public class OrderServiceImpl implements OrderService {
             return R.error("该订单所属商户不存在:"+orderEntity.getOrderSn());
         }
         // 组装支付单信息
+        UserEntity userEntity = userService.queryByMobile(orderEntity.getMobile());
         Map<String, Object> orderSendCusParams = new HashMap<>();
         if(Dict.payFlag.item_weixin.getItem().equals(orderEntity.getPayFlag())){
             orderSendCusParams.put("merchSn", orderEntity.getMerchSn());
@@ -5363,7 +5412,6 @@ public class OrderServiceImpl implements OrderService {
             orderSendCusParams.put("orderFee", orderFee);
             orderSendCusParams.put("productFee", orderFee);
             orderSendCusParams.put("transportFee", 0);
-            UserEntity userEntity = userService.queryByMobile(orderEntity.getMobile());
             orderSendCusParams.put("certId", userEntity.getIdNo());
             orderSendCusParams.put("name", orderEntity.getPayName());
 
@@ -5379,6 +5427,8 @@ public class OrderServiceImpl implements OrderService {
             //阿里支付流水号
             orderSendCusParams.put("tradeNo", orderEntity.getAliTradeNo());
             orderSendCusParams.put("amount", orderEntity.getActualPrice());
+            orderSendCusParams.put("buyerIdNo", userEntity.getIdNo());
+            orderSendCusParams.put("buyerName", orderEntity.getPayName());
 
             // 将支付单信息发送到当前项目下的 cuspay
             aliCusDeclareBiz.biz(orderSendCusParams);
@@ -5436,4 +5486,27 @@ public class OrderServiceImpl implements OrderService {
     public int queryOrderMainTotal() {
         return orderDao.queryOrderMainTotal();
     }
+
+    @Override
+    public R resendOrderInfoToVmcShop(String orderSn) {
+
+        HaiKongSendOrderInfoRecordEntity sendOrderInfoRecordEntity = haiKongSendOrderInfoRecordService.queryObjectByOrderSn(orderSn);
+
+        if (Objects.isNull(sendOrderInfoRecordEntity)) {
+            LOGGER.error(String.format("重新推送订单到免税mall,订单号【%s】对应发送记录不存在", orderSn));
+            return R.error(String.format("订单号【%s】对应发送记录不存在", orderSn));
+        }
+        // 直接修改状态
+        if (!HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus().equals(sendOrderInfoRecordEntity.getResendStatus())) {
+            HaiKongSendOrderInfoRecordEntity sendOrderInfoRecordEntity1 = new HaiKongSendOrderInfoRecordEntity();
+            sendOrderInfoRecordEntity1.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
+            sendOrderInfoRecordEntity1.setOuterOrderNo(orderSn);
+            haiKongSendOrderInfoRecordService.updateByOrderSn(sendOrderInfoRecordEntity1);
+        } else {
+            return R.ok("已经推送到免税mall成功,无需重推!");
+        }
+
+
+        return R.ok("重推成功!");
+    }
 }

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/HaikongSendOrderInfoRecordServiceImpl.java

@@ -75,4 +75,14 @@ public class HaikongSendOrderInfoRecordServiceImpl implements HaiKongSendOrderIn
     public void updateResendStatusBatch(List<HaiKongSendOrderInfoRecordEntity> entities) {
         haikongSendOrderInfoRecordDao.updateResendStatusBatch(entities);
     }
+
+    @Override
+    public HaiKongSendOrderInfoRecordEntity queryObjectByOrderSn(String orderSn) {
+        return haikongSendOrderInfoRecordDao.queryObjectByOuterOrderNo(orderSn);
+    }
+
+    @Override
+    public void updateByOrderSn(HaiKongSendOrderInfoRecordEntity sendOrderInfoRecordEntity) {
+        haikongSendOrderInfoRecordDao.updateByOrderSn(sendOrderInfoRecordEntity);
+    }
 }

+ 24 - 24
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeRecordServiceImpl.java

@@ -64,16 +64,16 @@ public class StockChangeRecordServiceImpl implements StockChangeRecordService {
         stockChangeRecord.setModifyTime(modifyTime);
         stockChangeRecord.setCreateTime(modifyTime);
 
-        List<StockChangeRecordEntity> storageList = Collections.singletonList(stockChangeRecord);
-        if (Constants.StockChangeType.item_0.getType().equals(stockChangeRecord.getType())) {
-            // 出库
-            productStoreRelaService.updateStockNumberByOutbound(storageList);
-            goodsService.updateStockNumberByOutbound(storageList);
-        } else if (Constants.StockChangeType.item_1.getType().equals(stockChangeRecord.getType())) {
-            // 入库
-            productStoreRelaService.updateStockNumberByStorage(storageList);
-            goodsService.updateStockNumberByStorage(storageList);
-        }
+//        List<StockChangeRecordEntity> storageList = Collections.singletonList(stockChangeRecord);
+//        if (Constants.StockChangeType.item_0.getType().equals(stockChangeRecord.getType())) {
+//            // 出库
+//            productStoreRelaService.updateStockNumberByOutbound(storageList);
+//            goodsService.updateStockNumberByOutbound(storageList);
+//        } else if (Constants.StockChangeType.item_1.getType().equals(stockChangeRecord.getType())) {
+//            // 入库
+//            productStoreRelaService.updateStockNumberByStorage(storageList);
+//            goodsService.updateStockNumberByStorage(storageList);
+//        }
 
         return stockChangeRecordDao.save(stockChangeRecord);
     }
@@ -133,20 +133,20 @@ public class StockChangeRecordServiceImpl implements StockChangeRecordService {
     @Transactional(rollbackFor = Exception.class)
     public synchronized void saveBatch(List<StockChangeRecordEntity> stockChangeRecordEntities) {
 
-        Map<String, List<StockChangeRecordEntity>> stringListHashMap = new HashMap<>();
-
-        stockChangeRecordEntities.forEach(entity -> {
-            String type = entity.getType();
-            if (stringListHashMap.containsKey(type)) {
-                List<StockChangeRecordEntity> entities = stringListHashMap.get(type);
-                entities.add(entity);
-                stringListHashMap.put(type, entities);
-            } else {
-                ArrayList<StockChangeRecordEntity> entities = new ArrayList<>();
-                entities.add(entity);
-                stringListHashMap.put(type, entities);
-            }
-        });
+//        Map<String, List<StockChangeRecordEntity>> stringListHashMap = new HashMap<>();
+//
+//        stockChangeRecordEntities.forEach(entity -> {
+//            String type = entity.getType();
+//            if (stringListHashMap.containsKey(type)) {
+//                List<StockChangeRecordEntity> entities = stringListHashMap.get(type);
+//                entities.add(entity);
+//                stringListHashMap.put(type, entities);
+//            } else {
+//                ArrayList<StockChangeRecordEntity> entities = new ArrayList<>();
+//                entities.add(entity);
+//                stringListHashMap.put(type, entities);
+//            }
+//        });
 
 //        // 出库和入库,需要修改库存
 //        // 出库集合,减库存

+ 6 - 5
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeServiceImpl.java

@@ -241,17 +241,18 @@ public class StockChangeServiceImpl implements StockChangeService {
         // 审核成功才需要更新库存
         if (Constants.AuditStatus.AUDIT_SUCCESS.getType().equals(type)) {
 
-
-            stockChangeEntities.stream().filter(stockChangeEntity -> {
+            stockChangeEntities = stockChangeEntities.stream().filter(stockChangeEntity -> {
                 log.info("工单号为:{}的审核状态为成功",stockChangeEntity.getId());
                 return !stockChangeEntity.getAudit().equals(Constants.AuditStatus.AUDIT_SUCCESS.getType());
-            }).peek(stockChangeEntity -> {
+            }).collect(Collectors.toList());
+
+            stockChangeEntities.forEach(stockChangeEntity -> {
                 String type1 = stockChangeEntity.getType();
                 if (Constants.StockChangeType.item_0.getType().equals(type1)
-                || Constants.StockChangeType.item_1.getType().equals(type1)) {
+                        || Constants.StockChangeType.item_1.getType().equals(type1)) {
                     inChangeEntities.add(stockChangeEntity);
                 } else if (Constants.StockChangeType.item_3.getType().equals(type1)
-                || Constants.StockChangeType.item_4.getType().equals(type1)) {
+                        || Constants.StockChangeType.item_4.getType().equals(type1)) {
                     outChangeEntities.add(stockChangeEntity);
                 }
             });

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesServiceImpl.java

@@ -11,6 +11,7 @@ import com.kmall.admin.service.mk.MkActivitiesScoreService;
 import com.kmall.admin.service.mk.MkActivitiesService;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.utils.BeanUtils;
+import com.kmall.common.utils.RRException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -68,6 +69,12 @@ public class MkActivitiesServiceImpl implements MkActivitiesService {
 //            return 0;
 //        }
 
+        Integer priority = mkActivities.getPriority();
+
+        if (Objects.isNull(priority)) {
+            throw new RRException(String.format("活动【%s】未设置优先级!", mkaTopic));
+        }
+
         SysUserEntity user = ShiroUtils.getUserEntity();
 
         mkActivities.setCreaterSn(user.getUserId().toString());

+ 6 - 5
kmall-admin/src/main/java/com/kmall/admin/task/SalsDetailTask.java

@@ -12,9 +12,10 @@ import org.springframework.stereotype.Component;
 /**
  * 线下订单数据推送接口
  */
-@Component("salsDetailTask")
-@EnableScheduling
-@EnableAsync
+//@Component("salsDetailTask")
+//@EnableScheduling
+//@EnableAsync
+@Deprecated
 public class SalsDetailTask {
     private static Log logger = LogFactory.getLog(SalsDetailTask.class);
 
@@ -24,7 +25,7 @@ public class SalsDetailTask {
     /**
      * 每天向eccs推送销售明细数据
      */
-    @Scheduled(cron = "0 30 0 * * ?")
+//    @Scheduled(cron = "0 30 0 * * ?")
     public void pushSalesDetailData() {
         logger.info(">>>>>>>>>>>>>>>>>>>>pushSalesDetailData is start ");
         salesDetailService.pushSalesDetailData();
@@ -34,7 +35,7 @@ public class SalsDetailTask {
     /**
      * 每天向eccs重推销售明细数据
      */
-    @Scheduled(cron = "0 30 0 * * ?")
+//    @Scheduled(cron = "0 30 0 * * ?")
     public void pushSalesDetailDataAgain() {
         logger.info(">>>>>>>>>>>>>>>>>>>>pushSalesDetailDataAgain is start ");
         salesDetailService.pushSalesDetailDataAgain();

+ 2 - 1
kmall-admin/src/main/java/com/kmall/admin/task/SendToEccsTask.java

@@ -21,6 +21,7 @@ import org.springframework.stereotype.Component;
 //@Component("sendToEccsTask")
 //@EnableScheduling
 //@EnableAsync
+@Deprecated
 public class SendToEccsTask {
 
 
@@ -34,7 +35,7 @@ public class SendToEccsTask {
      * 发送数据给中控系统
      * 每天1个小时执行1次
      */
-    @Scheduled(cron = "0 0/1 * * * ?")
+//    @Scheduled(cron = "0 0/1 * * * ?")
 //    @Scheduled(cron = "0 0 0/1 * * ?")
     public void syncOmsHsCode() {
         logger.info("同步所有商品表海关备案编码数据开始-----------------");

+ 6 - 5
kmall-admin/src/main/java/com/kmall/admin/task/SyncOmsTask.java

@@ -16,9 +16,10 @@ import org.springframework.stereotype.Component;
  * @email 1076650290@qq.com
  * @date 2020年11月30日15:33:57
  */
-@Component("syncOmsTask")
-@EnableScheduling
-@EnableAsync
+//@Component("syncOmsTask")
+//@EnableScheduling
+//@EnableAsync
+@Deprecated
 public class SyncOmsTask {
 
     private Logger logger = LoggerFactory.getLogger(getClass());
@@ -31,7 +32,7 @@ public class SyncOmsTask {
      * 同步oms海关备案编码
      * 每天凌晨三点执行一次
      */
-    @Scheduled(cron = "0 0 3 * * ?")
+//    @Scheduled(cron = "0 0 3 * * ?")
     public void syncOmsHsCode() {
         logger.info("syncOmsHsCode同步所有商品表海关备案编码数据开始-----------------");
         try {
@@ -50,7 +51,7 @@ public class SyncOmsTask {
      * 每日同步税率
      * 每天凌晨四点执行一次
      */
-    @Scheduled(cron = "0 0 4 * * ?")
+//    @Scheduled(cron = "0 0 4 * * ?")
     public void syncGoodsRate() {
         logger.info("syncGoodsRate同步所有商品表当前售价海关备案编码对应税率数据开始-----------------");
         try {

+ 2 - 2
kmall-admin/src/main/resources/conf/cuspay/cuspay-ali.properties

@@ -10,8 +10,8 @@ ali.payment.query.url=https://mapi.alipay.com/gateway.do?
 
 # MD5\u5BC6\u94A5 - \u4E2D\u7F51\u5546\u6237
 ali.payment.md5.key=6zo20oar6qufb6x41ipli3yma9ju107h
-# RSA\u5F00\u53D1\u8005\u79C1\u94A5 - \u6D77\u63A7\u63D0\u4F9B
-ali.payment.rsa.private-key=MIIEpAIBAAKCAQEA282CGIYVvLrrpZq9BlXIvJtkM4CfxsZvG+6tmvMj23+2UvXn0686ga8qLKd7sCBRSQTWQplQ1DqlFIcT8VgSDDVRTVzn39j/oxm+yruTMm3Xu08Hi0rinVNOzANhajlLwJy75SfNg+xyP5ENaQQXOWYruL0YS4xHL1xEsZGAZvZYThbd1UjM/UzjndiWOuh6U5aB/Ty7LasU1rcJfluXQxxHgunVH8HGgwzCkmbQpdVzwmg365ZQ64y+i/5nmjLOQOfGcj6Vd0zlmsIUOhtmTfAk+MLMW9xRKI8aVf5L5i5upa8WT/8V1QLAP/fHl3rMmfYeR81wV3oQbTw2p9LFpQIDAQABAoIBAF1xN25filwqhsVnTBamX2k3ElkGxGYHs/KG/EzUMpk86PDJ051dcBzzr5U+Okn84zGMmd3EOeWPbOCWMDc4vqtr+z1NUtIJ+VuINWEQbxpQMhdSGJ3x3vcNFIGMqlwzMW4X85UO38LGwSce7jmH4KupMMsfsHVllFmg+x8WASVDqTvenBGN2e9JpX5j43r5QIBegXdBgMs/MwEgS7N4ntSCzD2UzpRrUrK95YEiJJolmWEcyxJhgUVTFCHHAUFW1maqPA+MPAEV+gvzFSyqQ3ohWbDPCeC/PvSyPVJjMoue4AQkjwJnDhfw1KG90pyNiME6MexO8edhlP7PBSdKrf0CgYEA8YWOIGYumxW7KZvi5z8eQGXn62nl+mC3GlMRyAvIe2cgZZ7pfu0p4cU6p/npAC/xWyiQgv0XxeTjN7KVe+i4mNXuxN/XmPdmm9oIRH0O52/8lHG1H+jTyOFQFJvtkN7lJJ7hf1HSWWoN2ohLyBq9yzTCVKkJ//jkVK2GMlTloisCgYEA6PqmRbTqxMykRVwTo55h5WEuVkbdD4CNDAieStl5L3UFdYSwWX6EwLs0qpaCjtfNLzUNfDWnWi6CaEDCsRYGpcwk5I6DSnquQW3DDc8U7eWZCphNezN8Fts5hwojWzHCvuddMe3iDCx8Ix5na9M4Bu3RI4ZVHsXZg2bNn1b6328CgYBuNFK11epOOYw9YDQY8GQNXnKEqL2Xkan7CQyEC1xfcp8Fv40rrWv+6M/q9c2rmDS5M7k9C99dHSPQtlwfPgF9O6DHlJv74GehlctP9QBn+mF2Gqxa8xIwBx9TSBMOl6ZXH2glgGBLDGll3es2U31my5wgpUE624bUXJlvPe3KIQKBgQDfapYOnKrSJKiXNvBCZHzeme30oKoW1qDr3Evn3VsALokYpDD08YXeyOd9ey4iS0Ihtg+DgHRG3/kAfrH1Xfjr/7OVVjEDOFhouBhn4qDgbd/wMBOFRN8HkB0/qXI0Xqixp29QlR3DrNkyWFK3LOs6gc6f8Y8pHnQzNV+UILYdkwKBgQCQdHftPG9PYyhjfJQmCStLs48w1BxOLE3gA3mMwzBPtyHUYPVCfp+XFBzzn2aCwXiCp9K3t5LW/sCqSgm1ipuZqUM38qrP8APXrFU2QtjmBiP651kQ8czRcJM2P7f330VtMxCIqjkaQV1gcAK96Oy0mqUMGcfo9qAvNlLKo1NFPw==
+# RSA\u5F00\u53D1\u8005\u79C1\u94A5 - \u6D77\u63A7\u63D0\u4F9B PKCS8\u683C\u5F0F
+ali.payment.rsa.private-key=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDbzYIYhhW8uuulmr0GVci8m2QzgJ/Gxm8b7q2a8yPbf7ZS9efTrzqBryosp3uwIFFJBNZCmVDUOqUUhxPxWBIMNVFNXOff2P+jGb7Ku5Mybde7TweLSuKdU07MA2FqOUvAnLvlJ82D7HI/kQ1pBBc5Ziu4vRhLjEcvXESxkYBm9lhOFt3VSMz9TOOd2JY66HpTloH9PLstqxTWtwl+W5dDHEeC6dUfwcaDDMKSZtCl1XPCaDfrllDrjL6L/meaMs5A58ZyPpV3TOWawhQ6G2ZN8CT4wsxb3FEojxpV/kvmLm6lrxZP/xXVAsA/98eXesyZ9h5HzXBXehBtPDan0sWlAgMBAAECggEAXXE3bl+KXCqGxWdMFqZfaTcSWQbEZgez8ob8TNQymTzo8MnTnV1wHPOvlT46SfzjMYyZ3cQ55Y9s4JYwNzi+q2v7PU1S0gn5W4g1YRBvGlAyF1IYnfHe9w0UgYyqXDMxbhfzlQ7fwsbBJx7uOYfgq6kwyx+wdWWUWaD7HxYBJUOpO96cEY3Z70mlfmPjevlAgF6Bd0GAyz8zASBLs3ie1ILMPZTOlGtSsr3lgSIkmiWZYRzLEmGBRVMUIccBQVbWZqo8D4w8ARX6C/MVLKpDeiFZsM8J4L8+9LI9UmMyi57gBCSPAmcOF/DUob3SnI2IwTox7E7x52GU/s8FJ0qt/QKBgQDxhY4gZi6bFbspm+LnPx5AZefraeX6YLcaUxHIC8h7ZyBlnul+7SnhxTqn+ekAL/FbKJCC/RfF5OM3spV76LiY1e7E39eY92ab2ghEfQ7nb/yUcbUf6NPI4VAUm+2Q3uUknuF/UdJZag3aiEvIGr3LNMJUqQn/+ORUrYYyVOWiKwKBgQDo+qZFtOrEzKRFXBOjnmHlYS5WRt0PgI0MCJ5K2XkvdQV1hLBZfoTAuzSqloKO180vNQ18NadaLoJoQMKxFgalzCTkjoNKeq5BbcMNzxTt5ZkKmE17M3wW2zmHCiNbMcK+510x7eIMLHwjHmdr0zgG7dEjhlUexdmDZs2fVvrfbwKBgG40UrXV6k45jD1gNBjwZA1ecoSovZeRqfsJDIQLXF9ynwW/jSuta/7oz+r1zauYNLkzuT0L310dI9C2XB8+AX07oMeUm/vgZ6GVy0/1AGf6YXYarFrzEjAHH1NIEw6XplcfaCWAYEsMaWXd6zZTfWbLnCClQTrbhtRcmW897cohAoGBAN9qlg6cqtIkqJc28EJkfN6Z7fSgqhbWoOvcS+fdWwAuiRikMPTxhd7I5317LiJLQiG2D4OAdEbf+QB+sfVd+Ov/s5VWMQM4WGi4GGfioOBt3/AwE4VE3weQHT+pcjReqLGnb1CVHcOs2TJYUrcs6zqBzp/xjykedDM1X5Qgth2TAoGBAJB0d+08b09jKGN8lCYJK0uzjzDUHE4sTeADeYzDME+3IdRg9UJ+n5cUHPOfZoLBeIKn0re3ktb+wKpKCbWKm5mpQzfyqs/wA9esVTZC2OYGI/rnWRDxzNFwkzY/t/ffRW0zEIiqORpBXWBwAr3o7LSapQwZx+j2oC82UsqjU0U/
 
 
 #\u5B9A\u65F6\u5668\u62A5\u5173\u4E00\u6B21\u533A\u7684\u6570\u636E

+ 15 - 1
kmall-admin/src/main/resources/mybatis/mapper/OrderProcessRecordDao.xml

@@ -447,7 +447,18 @@ select
 					</if>
 				</foreach>
 			</trim>
-
+			<trim prefix="order_status =case" suffix="end,">
+				<foreach collection="list" item="item" index="index">
+					<if test="item.logisticsNo!=null">
+						when order_sn=#{item.orderSn}
+						then '300'
+					</if>
+					<if test="item.logisticsNo==null">
+						when order_sn=#{item.orderSn}
+						then mall_order.order_status
+					</if>
+				</foreach>
+			</trim>
 			<trim prefix="shipping_code =case" suffix="end,">
 				<foreach collection="list" item="item" index="index">
 					<if test="item.shippingCode!=null">
@@ -528,6 +539,9 @@ select
 			<if test="invtNo != null">
 				invt_no = #{invtNo},
 			</if>
+			<if test="clearMsg != null">
+				customs_msg = #{clearMsg},
+			</if>
 		</set>
 		where order_sn = #{orderSn,jdbcType=VARCHAR}
 	</update>

+ 33 - 0
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaikongSendOrderInfoRecordDao.xml

@@ -373,6 +373,39 @@
 			#{item.id}
 		</foreach>
 	</update>
+	<update id="updateByOrderSn">
+		update haikong_send_order_info_record
+		<set>
+			<if test="payApp != null">`pay_app` = #{payApp}, </if>
+			<if test="dlytypeCode != null">`dlytype_code` = #{dlytypeCode}, </if>
+			<if test="consigneeName != null">`consignee_name` = #{consigneeName}, </if>
+			<if test="consigneeAreaProvince != null">`consignee_area_province` = #{consigneeAreaProvince}, </if>
+			<if test="consigneeAreaCity != null">`consignee_area_city` = #{consigneeAreaCity}, </if>
+			<if test="consigneeAreaCounty != null">`consignee_area_county` = #{consigneeAreaCounty}, </if>
+			<if test="consigneeAddress != null">`consignee_address` = #{consigneeAddress}, </if>
+			<if test="consigneeZip != null">`consignee_zip` = #{consigneeZip}, </if>
+			<if test="consigneeTel != null">`consignee_tel` = #{consigneeTel}, </if>
+			<if test="consigneeEmail != null">`consignee_email` = #{consigneeEmail}, </if>
+			<if test="consigneeMobile != null">`consignee_mobile` = #{consigneeMobile}, </if>
+			<if test="weight != null">`weight` = #{weight}, </if>
+			<if test="quantity != null">`quantity` = #{quantity}, </if>
+			<if test="orderTotal != null">`order_total` = #{orderTotal}, </if>
+			<if test="platform != null">`platform` = #{platform}, </if>
+			<if test="money != null">`money` = #{money}, </if>
+			<if test="payMode != null">`pay_mode` = #{payMode}, </if>
+			<if test="request != null">`request` = #{request}, </if>
+			<if test="response != null">`response` = #{response}, </if>
+			<if test="outTradeNo != null">`out_trade_no` = #{outTradeNo}, </if>
+			<if test="seaportCode != null">`seaport_code` = #{seaportCode}, </if>
+			<if test="seaportPlatform != null">`seaport_platform` = #{seaportPlatform}, </if>
+			<if test="identityCard != null">`identity_card` = #{identityCard}, </if>
+			<if test="identityName != null">`identity_name` = #{identityName}, </if>
+			<if test="identityMobile != null">`identity_mobile` = #{identityMobile}, </if>
+			<if test="orderProductInfo != null">`order_product_info` = #{orderProductInfo}, </if>
+			<if test="resendStatus != null">`resend_status` = #{resendStatus}</if>
+		</set>
+		where outer_order_no = #{outerOrderNo}
+	</update>
 
 	<delete id="delete">
 		delete from haikong_send_order_info_record where id = #{value}

+ 1 - 5
kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeDao.xml

@@ -64,12 +64,8 @@
 			c.`modify_by`,
 			c.`modify_time`,
 			c.`audit_by`,
-			c.`audit_time`,
-		    r.product,
-		    r.specification
+			c.`audit_time`
 		from mall_stock_change c
-		left join mall_stock_change_record r
-		on c.id =r.parent_id
 		WHERE 1=1
 		<if test="name != null and name.trim() != ''">
 			AND c.name LIKE concat('%',#{name},'%')

+ 6 - 0
kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeRecordDao.xml

@@ -39,6 +39,12 @@
 		<if test="sku != null and sku.trim() != ''">
 			AND `sku` LIKE concat('%',#{sku},'%')
 		</if>
+		<if test="parentId != null and parentId.trim() != ''">
+			AND `parent_id` LIKE concat('%',#{parentId},'%')
+		</if>
+		<if test="storeId != null and storeId.trim() != ''">
+			AND `store_id` LIKE concat('%',#{storeId},'%')
+		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -520,6 +520,7 @@
 <!--                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-warning" @click="confirmDelivery" id="confirmDelivery" data-dismiss="modal">确定提货</button>-->
 <!--                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendNotice" id="resendNotice" data-dismiss="modal">重发通知</button>-->
 <!--                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendWaybill" id="resendWaybill" data-dismiss="modal">重发运单</button>-->
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendorderinfo" id="resendorderinfo" data-dismiss="modal">重推订单信息</button>
                             <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendorder" id="resendorder" data-dismiss="modal">重发订单</button>
                             <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendPayment" id="resendPayment" data-dismiss="modal">重发支付单</button>
 <!--                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendOrder" id="resendOrder" data-dismiss="modal">重发订单</button>-->

+ 3 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/stockchangerecord.html

@@ -17,6 +17,9 @@
                     </i-select>
                 </i-col>
                 <i-col span="3">
+                    <i-input v-model="q.parentId" @on-enter="query" placeholder="主体单号"/>
+                </i-col>
+                <i-col span="3">
                     <i-input v-model="q.sku" @on-enter="query" placeholder="sku"/>
                 </i-col>
                 <i-col span="3">

+ 9 - 1
kmall-admin/src/main/webapp/js/mk/mkactivities.js

@@ -77,7 +77,15 @@ let vm = new Vue({
             vm.getInfo(mkaId)
 		},
 		saveOrUpdate: function (event) {
-            let url = vm.mkActivities.mkaId == null ? "../mkactivities/save" : "../mkactivities/update";
+			let mkaId = vm.mkActivities.mkaId;
+			let url = mkaId == null ? "../mkactivities/save" : "../mkactivities/update";
+
+			let priority = vm.mkActivities.priority;
+			if (mkaId == null && (priority == null || priority == '' || priority == 'undefined')) {
+            	alert("活动优先级不能为空!");
+            	return;
+			}
+
 			$.ajax({
 				type: "POST",
 			    url: url,

+ 1 - 1
kmall-admin/src/main/webapp/js/sale/pickupcode.js

@@ -449,7 +449,7 @@ function getPrintContentOrder(ticket) {
 	content += "购买跨境商品须知:"
 	content += "</div>";
 	content += "<div style=\"width: 100%;\">";
-	content += "1、凡购买跨境商品均不提供发票;<br> 2、单笔限购5000元,年交易限额2.6万元; <br> 3、所有订单经海关放行后方可提货; <br> 4、凭小票领取您的订单商品; <br> 5、非产品质量问题,跨境商品不支持无理由退换货,请及时检查。 "
+	content += "1、凡购买跨境商品均不提供发票;<br> 2、单笔限购5000元,年交易限额2.6万元; <br> 3、所有订单在海关放行后进行发货; <br> 4、凭小票领取您的订单商品; <br> 5、非产品质量问题,跨境商品不支持无理由退换货,请及时检查。 "
 	content += "</div>";
 	content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
 	content += "<div style=\"width: 100%;\">";

+ 8 - 1
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -1261,6 +1261,13 @@ let vm = new Vue({
                 }
             });
         },
+        resendorderinfo: function () {
+            confirm('确认重发订单信息到免税mall吗?', function () {
+                $.get("../order/resendOrderHkMall/"+vm.orderEntity.orderSn+"/vmcshop", function (r) {
+                    alert(r.msg);
+                });
+            })
+        },
         resendNotice:function(){
             confirm('确认重发重置吗?', function () {
                 $.get("../order/resendOrderToCCNET/"+vm.orderEntity.orderSn+"/notice", function (r) {
@@ -1859,7 +1866,7 @@ function getPrintContentOrder(ticket, callback) {
     content += "购买跨境商品须知:"
     content += "</div>";
     content += "<div style=\"width: 100%;\">";
-    content += "1、凡购买跨境商品均不提供发票;<br> 2、单笔限购5000元,年交易限额2.6万元; <br> 3、所有订单经海关放行后方可提货; <br> 4、凭小票领取您的订单商品; <br> 5、非产品质量问题,跨境商品不支持无理由退换货,请及时检查。 "
+    content += "1、凡购买跨境商品均不提供发票;<br> 2、单笔限购5000元,年交易限额2.6万元; <br> 3、所有订单在海关放行后进行发货; <br> 4、凭小票领取您的订单商品; <br> 5、非产品质量问题,跨境商品不支持无理由退换货,请及时检查。 "
     content += "</div>";
     content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
     content += "<div style=\"width: 100%;\">";

+ 19 - 7
kmall-admin/src/main/webapp/js/shop/stockchangerecord.js

@@ -4,14 +4,22 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '单号', name: 'parentId', index: 'parentId', width: 60, align: 'center'},
 			{label: '门店id', name: 'storeId', index: 'store_id', width: 40, align: 'center'},
 			{label: 'sku', name: 'sku', index: 'sku', width: 60, align: 'center'},
 			{label: '类型', name: 'type', index: 'type', width: 40, align: 'center', formatter:function (value) {
-				if (value === '0') {
-					return '出库';
-				} else {
-					return '入库';
-				}
+					if (value == '0') {
+						return '普通入库';
+					} else if (value == '1') {
+						return '调拨入库';
+					} else if (value == '2') {
+						return '销售出库';
+					} else if (value == '3') {
+						return '普通出库';
+					} else if (value == '4') {
+						return '调拨出库';
+					}
+					return '-';
 			}},
 			{label: '数量', name: 'number', index: 'number', width: 30, align: 'center'},
 			{label: '备注', name: 'remark', index: 'remark', width: 120, align: 'center'},
@@ -67,7 +75,10 @@ let vm = new Vue({
 			]
 		},
 		q: {
-		    name: ''
+		    type: '',
+			parentId : '',
+			sku: '',
+			storeId : ''
 		},
 		merchList: {},//商户
 		thirdMerchantBizList: {},//第三方商户
@@ -160,7 +171,8 @@ let vm = new Vue({
                 postData: {
                 	'storeId': vm.q.storeId,
 					'type': vm.q.type,
-					'sku': vm.q.sku
+					'sku': vm.q.sku,
+					'parentId' : vm.q.parentId
 				},
                 page: page
             }).trigger("reloadGrid");

+ 2 - 2
kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java

@@ -47,7 +47,7 @@ public class OrderTask {
     /**
      * 未支付的现场商品且已人脸识别通过的订单(发送微信模版消息提醒用户)
      */
-    @Scheduled(cron = "0/5 * * * * ?")
+//    @Scheduled(cron = "0/5 * * * * ?")
     public void unPayAndFaceSuccessOrder() {
         logger.info(">>>>>>>>>>>>>>>>>>>>unPayAndFaceSuccessOrder is start ");
         qzOrderService.unPayAndFaceSuccessOrder();
@@ -234,7 +234,7 @@ public class OrderTask {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateCampTopicStatByRefundSuccess is end ");
     }
 
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateSellVolume() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateSellVolume is start ");
         qzOrderService.updateSellVolume();