Jelajahi Sumber

fix bug:推送订单json字段,查询库存货主编码

lhm 3 tahun lalu
induk
melakukan
2d272e60c4

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/haikong/task/SendOrderInfoTask.java

@@ -86,9 +86,9 @@ public class SendOrderInfoTask {
             sendOrderToVmcShopDTO.setOrderInfoItems(dtoList);
             sendOrderToVmcShopDTO.setOrderInfo(orderInfoDTO);
 
-            String body = JacksonUtil.toJson(sendOrderToVmcShopDTO);
-            log.info("【重发】请求免税mall创建订单接口!请求体:{}", body);
             try {
+                String body = JacksonUtil.getObjectMapper().writeValueAsString(sendOrderToVmcShopDTO);
+                log.info("【重发】请求免税mall创建订单接口!请求体:{}", body);
                 String responseJson = vmcShopTemplate.sendOrder(body);
                 Response<String> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<String>>() {});
                 if (Objects.nonNull(response) && !"failure".equals(response.getResult())) {

+ 5 - 1
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -14,6 +14,7 @@ import com.kmall.admin.entity.kmall2eccs.KtoEccsEntity;
 import com.kmall.admin.entity.mk.MkActivitiesEntity;
 import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
 import com.kmall.admin.haikong.client.HaiKongWarehouseTemplate;
+import com.kmall.admin.haikong.config.HaiKongProperties;
 import com.kmall.admin.haikong.constant.Constants;
 import com.kmall.admin.haikong.dto.Criteria;
 import com.kmall.admin.haikong.dto.WareQueryStockParamDTO;
@@ -137,6 +138,9 @@ public class GoodsServiceImpl implements GoodsService {
 
     @Autowired
     private HaiKongWarehouseTemplate haiKongWarehouseTemplate;
+
+    @Autowired
+    private HaiKongProperties haiKongProperties;
     @Autowired
     private Environment environment;
 
@@ -1581,7 +1585,7 @@ public class GoodsServiceImpl implements GoodsService {
                 Criteria criteria = new Criteria();
                 criteria.setItemId(goods.getWarehouseSysGoodId());
                 criteria.setItemCode(goods.getSku());
-                criteria.setOwnerCode(goods.getConsignorSn());
+                criteria.setOwnerCode(haiKongProperties.getWareCompanyCode());
                 criteria.setInventoryType(Constants.InventoryType.ZP.getType());
                 criteria.setWarehouseCode(goods.getWarehouseSn());
                 criteriaList.add(criteria);

+ 58 - 61
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -2211,63 +2211,64 @@ public class OrderServiceImpl implements OrderService {
         Map resultObj = Maps.newHashMap();
         // 海控需求,下单流程修改,收银端接收会员码,付款码,用户信息,订单数据
         // 1. 校验库存:保税仓库存 + 展销店库存 - 出区数 >= 购买数
-        /* -----------------↓--------------生产请打开注释-------------------↓------------ */
-        /*WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO();
-        List<Criteria> criteriaList = new ArrayList<>();
-        goodsList.forEach(goods -> {
-            Criteria criteria = new Criteria();
-            String sku = (String) goods.get("goodsSn");
-            criteria.setItemCode(sku);
-            GoodsEntity goodsEntity = goodsEntityMap.get(sku);
-            criteria.setItemId(goodsEntity.getWarehousSysGoodId());
-            criteria.setWarehouseCode(goodsEntity.getWarehouseSn());
-            criteria.setOwnerCode(goodsEntity.getConsignorSn());
-            criteria.setInventoryType(Constants.InventoryType.ZP.getType());
-            criteriaList.add(criteria);
-        });
-        wareQueryStockParamDTO.setCriteriaList(criteriaList);
-        String queryWarehouseStockResponse = null;
-        try {
-            queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
-        } catch (Exception e) {
-            LOGGER.error("下单调用海控仓库系统查询库存出现异常!", e);
-            throw new ServiceException(String.format("下单调用海控仓库系统查询库存出现异常!"));
-        }
-        if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
-            LOGGER.error("调用库存系统接口出现错误!返回结果为空!");
-            throw new ServiceException("调用库存系统接口出现错误!");
-        }
-        WareQueryStockResponseDTO wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
-        if (Objects.isNull(wareQueryStockResponseDTO)) {
-            throw new ServiceException("解析一步达库存系统响应数据出现错误!");
-        }
-        List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> items = wareQueryStockResponseDTO.getItems();
-        // 解析xml,组装成map key=>sku value=>库存
-        Map<String, Integer> stockMap = new HashMap<>(16);
-        items.forEach(item -> {
-            String itemCode = item.getItemCode();
-            Integer quantity = item.getQuantity();
-            if (stockMap.containsKey(itemCode)) {
-                // 避免出现sku相同情况
-                stockMap.put(itemCode, stockMap.get(itemCode) + quantity);
-            } else {
-                stockMap.put(itemCode, quantity);
+        Map<String, Integer> stockMap = null;
+
+        String env = environment.getProperty("haikong.env");
+        if (Constants.PROD.equals(env)) {
+            WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO();
+            List<Criteria> criteriaList = new ArrayList<>();
+            goodsList.forEach(goods -> {
+                Criteria criteria = new Criteria();
+                String sku = (String) goods.get("goodsSn");
+                criteria.setItemCode(sku);
+                GoodsEntity goodsEntity = goodsEntityMap.get(sku);
+                criteria.setItemId(goodsEntity.getWarehousSysGoodId());
+                criteria.setWarehouseCode(goodsEntity.getWarehouseSn());
+                criteria.setOwnerCode(haiKongProperties.getWareCompanyCode());
+                criteria.setInventoryType(Constants.InventoryType.ZP.getType());
+                criteriaList.add(criteria);
+            });
+            wareQueryStockParamDTO.setCriteriaList(criteriaList);
+            String queryWarehouseStockResponse = null;
+            try {
+                queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
+            } catch (Exception e) {
+                LOGGER.error("下单调用海控仓库系统查询库存出现异常!", e);
+                throw new ServiceException(String.format("下单调用海控仓库系统查询库存出现异常!"));
             }
-        });*/
-        /* -----------------↑--------------生产请打开注释------------------↑------------- */
-
-        /* -----------------↓--------------测试数据,生产请注释-------------------↓------------ */
-        Map<String, Integer> stockMap = new HashMap<>(16);
-        goodsList.forEach(goods -> {
-            String sku = (String) goods.get("goodsSn");
-            if (stockMap.containsKey(sku)) {
-                // 避免出现sku相同情况
-                stockMap.put(sku, stockMap.get(sku) + 3);
-            } else {
-                stockMap.put(sku, 3);
+            if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
+                LOGGER.error("调用库存系统接口出现错误!返回结果为空!");
+                throw new ServiceException("调用库存系统接口出现错误!");
             }
-        });
-        /* -----------------↑--------------测试数据,生产请注释------------------↑------------- */
+            WareQueryStockResponseDTO wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
+            if (Objects.isNull(wareQueryStockResponseDTO)) {
+                throw new ServiceException("解析一步达库存系统响应数据出现错误!");
+            }
+            List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> items = wareQueryStockResponseDTO.getItems();
+            // 解析xml,组装成map key=>sku value=>库存
+            stockMap = new HashMap<>(16);
+            for (WareQueryStockResponseDTO.WareQueryStockResponseItemDTO item : items) {
+                String itemCode = item.getItemCode();
+                Integer quantity = item.getQuantity();
+                if (stockMap.containsKey(itemCode)) {
+                    // 避免出现sku相同情况
+                    stockMap.put(itemCode, stockMap.get(itemCode) + quantity);
+                } else {
+                    stockMap.put(itemCode, quantity);
+                }
+            }
+        } else {
+            stockMap = new HashMap<>(16);
+            for (LinkedHashMap goods : goodsList) {
+                String sku = (String) goods.get("goodsSn");
+                if (stockMap.containsKey(sku)) {
+                    // 避免出现sku相同情况
+                    stockMap.put(sku, stockMap.get(sku) + 3);
+                } else {
+                    stockMap.put(sku, 3);
+                }
+            }
+        }
 
         try {
             if (user == null) {
@@ -2515,8 +2516,6 @@ public class OrderServiceImpl implements OrderService {
             StoreEntity store = storeService.queryObject(order.getStore_id().intValue());
 
             processRecordEntity.setPaymentStartTime(new Date());
-
-            String env = environment.getProperty("haikong.env");
             // 判断是微信的支付码还是支付宝的支付码
 
             if (!org.springframework.util.StringUtils.isEmpty(env) && Constants.PROD.equals(env)) {
@@ -2812,13 +2811,11 @@ public class OrderServiceImpl implements OrderService {
         HaiKongSendOrderInfoRecordEntity haiKongSendOrderInfoRecordEntity = wrapSendOrderInfoRecord(sendOrderToVmcShopDTO);
         List<HaiKongSendOrderInfoDetailRecordEntity> detailRecordEntities = wrapSendOrderInfoDetailRecord(orderInfoItemDTOList);
 
-        // 不要用自带的工具类,处理XML字符串时有bug
-        cn.hutool.json.JSON json = JSONUtil.parse(sendOrderToVmcShopDTO);
-        String body = JSONUtil.toJsonPrettyStr(json);
 
         String orderSn = order.getOrder_sn();
         try {
-
+            String body = JacksonUtil.getObjectMapper().writeValueAsString(sendOrderToVmcShopDTO);
+            LOGGER.info("请求免税mall创建订单接口!请求体:{}", body);
             String response = vmcShopTemplate.sendOrder(body);
 
             Response<String> r = JacksonUtil.fromListJson(response, new TypeReference<Response<String>>() {});