Procházet zdrojové kódy

update:代服导入发货

ct před 1 dnem
rodič
revize
dffb081fec

+ 32 - 8
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java

@@ -688,16 +688,22 @@ public class FsStoreOrderScrmController extends BaseController {
     public R getExpress(@PathVariable("id") Long id) {
         FsStoreOrderScrm order = fsStoreOrderService.selectFsStoreOrderById(id);
         ExpressInfoDTO expressInfoDTO = null;
-        if (StringUtils.isNotEmpty(order.getDeliveryId())) {
-            String lastFourNumber = "";
-            if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
-                lastFourNumber = order.getUserPhone();
-                if (lastFourNumber.length() == 11) {
-                    lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+        IErpOrderService erpService = getErpService();
+        if (erpService == dfOrderService){
+            expressInfoDTO = fsStoreOrderService.getDfExpressInfoDTO(order);
+        } else {
+            if (StringUtils.isNotEmpty(order.getDeliveryId())) {
+                String lastFourNumber = "";
+                if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
+                    lastFourNumber = order.getUserPhone();
+                    if (lastFourNumber.length() == 11) {
+                        lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+                    }
                 }
+                expressInfoDTO = expressService.getExpressInfo(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
             }
-            expressInfoDTO = expressService.getExpressInfo(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
         }
+
         return R.ok().put("data", expressInfoDTO);
     }
 
@@ -1096,7 +1102,7 @@ public class FsStoreOrderScrmController extends BaseController {
             if(!StringUtils.isEmpty(param.getDeliverySendTimeRange())){
                 param.setDeliverySendTimeList(param.getDeliverySendTimeRange().split("--"));
             }
-            param.setNotHealth(1);
+//            param.setNotHealth(1);
             List<FsStoreOrderVO> list = fsStoreOrderService.selectFsStoreOrderListVO(param);
             orderIds = list.stream().map(FsStoreOrderVO::getId).collect(Collectors.toList());
         }
@@ -1137,4 +1143,22 @@ public class FsStoreOrderScrmController extends BaseController {
         }
         return df;
     }
+
+    @Log(title = "导入运单号", businessType = BusinessType.IMPORT)
+    @PostMapping("/importDeliverData")
+    public AjaxResult importDeliverData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<FsStoreProductDeliverExcelVO> util = new ExcelUtil<>(FsStoreProductDeliverExcelVO.class);
+        List<FsStoreProductDeliverExcelVO> list = util.importExcel(file.getInputStream());
+        String message = fsStoreOrderService.importSroreOrder(list, null,null);
+        return AjaxResult.success(message);
+    }
+
+
+    @GetMapping("/importTemplateDeliver")
+    public AjaxResult importTemplateDeliver()
+    {
+        ExcelUtil<com.fs.his.vo.FsStoreProductDeliverExcelVO> util = new ExcelUtil<>(com.fs.his.vo.FsStoreProductDeliverExcelVO.class);
+        return util.importTemplateExcel("导入运单号");
+    }
 }

+ 1 - 0
fs-service/src/main/java/com/fs/erp/service/IErpOrderService.java

@@ -21,6 +21,7 @@ public interface IErpOrderService
     ErpOrderResponse refundOrderScrm(ErpRefundOrder order);
     ErpOrderResponse refundLiveOrder(ErpRefundOrder order);
     ErpDeliverysResponse getDeliver(ErpDeliverysRequest param);
+    ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest erpDeliverysRequest);
     ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param);
     ErpOrderQueryResponse getScrmOrder(ErpOrderQueryRequert param);
     ErpOrderQueryResponse getLiveOrder(ErpOrderQueryRequert param);

+ 69 - 0
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -468,6 +468,75 @@ public class DfOrderServiceImpl implements IErpOrderService {
         return erpDeliverysResponse;
     }
 
+    @Override
+    public ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest request) {
+        ErpDeliverysResponse erpDeliverysResponse = new ErpDeliverysResponse();
+        String orderCode = request.getCode();
+        if (StrUtil.isNotBlank(orderCode)) {
+            FsStoreOrderScrm order = fsStoreOrderScrmMapper.selectFsStoreOrderByOrderCode(orderCode);
+            if (OrderContextHolder.hasIntegralOrder())
+                order = new FsStoreOrderScrm();
+            if (order != null) {
+                String mailNumber = order.getDeliverySn();
+                Long dfAccountId = getSFAccountIndex(order.getId());
+                //积分商城逻辑
+                if (OrderContextHolder.hasIntegralOrder()){
+                    FsIntegralOrder integralOrder = OrderContextHolder.getIntegralOrder();
+                    mailNumber = integralOrder.getDeliverySn();
+                    FsDfAccount fsDfAccount = fsDfAccountMapper.selectFsDfAccountByAccount(integralOrder.getLoginAccount());
+                    if (fsDfAccount != null)
+                        dfAccountId = fsDfAccount.getId();
+                    OrderContextHolder.clear();//清理threadlocalmap引用。
+                }
+                if (StringUtils.isNotBlank(mailNumber) && dfAccountId != null) {
+                    try {
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("mailNumber", mailNumber);
+                        log.info("开始查询路由结果,参数为: {}", JSON.toJSONString(map));
+                        String response = client.execute(RequestUrlEnum.ORDER_DELIVERY, map, dfAccountId);
+                        if (StringUtils.isBlank(response)) {
+                            return erpDeliverysResponse;
+                        }
+                        DFApiResponse dfApiResponse = JSON.parseObject(response, DFApiResponse.class);
+                        if (dfApiResponse != null && "ok".equals(dfApiResponse.getCode())) {
+                            dfApiResponse.setCode(mailNumber);
+                            Object result = dfApiResponse.getResult();
+                            String jsonStr = JSON.toJSONString(JSON.parseObject(JSONUtil.toJsonStr(result), HashMap.class).get("list"));
+                            List<ErpDeliverys> dfDeliveryResponse = null;
+                            try {
+                                dfDeliveryResponse = JSON.parseArray(jsonStr, ErpDeliverys.class);
+                            } catch (Exception e) {
+                                log.info("查询路由结果异常: {},结果为:{}", e.getMessage(), jsonStr);
+                                erpDeliverysResponse.setSuccess(false);
+                                erpDeliverysResponse.setErrorDesc("未更新物流");
+                                return erpDeliverysResponse;
+                            }
+                            if (dfDeliveryResponse != null && !dfDeliveryResponse.isEmpty()) {
+                                for (ErpDeliverys deliveryResponse : dfDeliveryResponse) {
+                                    deliveryResponse.setMail_no(deliveryResponse.getMailNo());
+                                    deliveryResponse.setExpress_code(deliveryResponse.getMailNo());
+                                    deliveryResponse.setExpress_name("顺丰");
+                                }
+                                erpDeliverysResponse.setDeliverys(dfDeliveryResponse);
+                            }
+                        } else {
+                            erpDeliverysResponse.setErrorDesc(dfApiResponse.getMsg());
+                        }
+                    } catch (IOException e) {
+                        log.info("代服路由查询错误{}", e.getMessage());
+                    }
+                } else {
+                    erpDeliverysResponse.setErrorDesc("该订单不存在/顺丰账户不存在");
+                }
+            }
+
+
+        } else {
+            erpDeliverysResponse.setErrorDesc("未获取到原始订单号");
+        }
+        return erpDeliverysResponse;
+    }
+
     @Autowired
     private FsIntegralOrderDfMapper integralOrderDfMapper;
     /**

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/ErpOrderServiceImpl.java

@@ -121,6 +121,11 @@ public class ErpOrderServiceImpl implements IErpOrderService
         return response;
     }
 
+    @Override
+    public ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest erpDeliverysRequest) {
+        return null;
+    }
+
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert requert) {
         FsSysConfig sysConfig = configUtil.getSysConfig();

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/HzOMSErpOrderServiceImpl.java

@@ -236,6 +236,11 @@ public class HzOMSErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest erpDeliverysRequest) {
+        return null;
+    }
+
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         return null;

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -477,6 +477,11 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest erpDeliverysRequest) {
+        return null;
+    }
+
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         // 1. 构建查询请求DTO

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/K9OrderScrmServiceImpl.java

@@ -289,6 +289,11 @@ public class K9OrderScrmServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest erpDeliverysRequest) {
+        return null;
+    }
+
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         return null;

+ 5 - 0
fs-service/src/main/java/com/fs/erp/service/impl/WdtErpOrderServiceImpl.java

@@ -996,6 +996,11 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    @Override
+    public ErpDeliverysResponse getDeliverScrm(ErpDeliverysRequest erpDeliverysRequest) {
+        return null;
+    }
+
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         Map<String,String> map = new HashMap<>();

+ 3 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -1178,8 +1178,9 @@ public interface FsStoreOrderScrmMapper
             " update fs_store_order_scrm "+
             "<trim prefix=\"SET\" suffixOverrides=\",\">\n" +
             "            <if test=\"storeId != null\">store_id = #{storeId},</if>\n" +
+            "            <if test=\"extendOrderId != null\">extend_order_id = #{extendOrderId},</if>\n" +
             "            <if test=\"userId != null and userId != ''\">user_id = #{userId},</if>\n" +
-            "            <if test=\"userName != null and userName != ''\">user_name = #{userName},</if>\n" +
+            "            <if test=\"realName != null and realName != ''\">real_name = #{realName},</if>\n" +
             "            <if test=\"userPhone != null and userPhone != ''\">user_phone = #{userPhone},</if>\n" +
             "            <if test=\"userAddress != null and userAddress != ''\">user_address = #{userAddress},</if>\n" +
             "            <if test=\"cartId != null and cartId != ''\">cart_id = #{cartId},</if>\n" +
@@ -1202,6 +1203,7 @@ public interface FsStoreOrderScrmMapper
             "            <if test=\"deliveryCode != null\">delivery_code = #{deliveryCode},</if>\n" +
             "            <if test=\"deliveryName != null\">delivery_name = #{deliveryName},</if>\n" +
             "            <if test=\"deliverySn != null\">delivery_sn = #{deliverySn},</if>\n" +
+            "            <if test=\"deliveryId != null\">delivery_id = #{deliveryId},</if>\n" +
             "            <if test=\"remark != null\">remark = #{remark},</if>\n" +
             "            <if test=\"isDel != null\">is_del = #{isDel},</if>\n" +
             "            <if test=\"costPrice != null\">cost_price = #{costPrice},</if>\n" +

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -13,6 +13,7 @@ import com.fs.company.domain.CompanyUser;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
 import com.fs.erp.domain.ErpOrder;
 import com.fs.his.domain.FsStorePayment;
+import com.fs.his.dto.ExpressInfoDTO;
 import com.fs.his.dto.FsStoreOrderAmountScrmStatsQueryDto;
 import com.fs.his.param.FsStoreOrderSalesParam;
 import com.fs.his.vo.FsStoreOrderAmountScrmStatsVo;
@@ -345,4 +346,6 @@ public interface IFsStoreOrderScrmService
      * @return
      */
     R createPackageSalesOrder(CompanyUser companyUser, String packageId, Integer orderType, Integer orderMedium);
+
+    ExpressInfoDTO getDfExpressInfoDTO(FsStoreOrderScrm order);
 }

+ 68 - 13
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -3622,7 +3622,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         throw new CustomException("不是本公司订单");
                     }
                 }
-                if (o.getStatus() != 2) {
+                //商城待发货状态为1
+                if (o.getStatus() != 1) {
                     throw new CustomException("订单状态不为待发货");
                 }
                 // 判断每个字段是否为null或为空字符串
@@ -3639,31 +3640,34 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 }
                 FsStoreOrderScrm fsStoreOrder = new FsStoreOrderScrm();
 
-                fsStoreOrder.setDeliverySn(vo.getDeliverySn());
+                fsStoreOrder.setDeliverySn(vo.getDeliveryCode());
                 fsStoreOrder.setDeliveryName(vo.getDeliveryName());
                 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 fsStoreOrder.setDeliveryTime(formatter.format(new Date()));
-                fsStoreOrder.setDeliveryCode(vo.getDeliveryCode());
+                fsStoreOrder.setDeliveryId(vo.getDeliverySn());
 
                 fsStoreOrder.setOrderCode(vo.getOrderCode());
-                fsStoreOrder.setStatus(3);
+                fsStoreOrder.setStatus(2); //商城待收货状态为2
+                if (CloudHostUtils.hasCloudHostName("康年堂"))fsStoreOrder.setExtendOrderId(o.getOrderCode());
                 if (o.getCompanyId() != null) {
                     companyService.subtractCompanyMoneyScrm(o);
                 }
                 FsStoreScrm store = fsStoreMapper.selectFsStoreByStoreId(o.getStoreId());
                 int i = fsStoreOrderMapper.updateFsStoreOrderByOrderCode(fsStoreOrder);
                 String lastFourNumber = "";
-                if (fsStoreOrder.getDeliveryCode().equals(com.fs.his.enums.ShipperCodeEnum.SF.getValue())  || fsStoreOrder.getDeliveryCode().equals(ShipperCodeEnum.ZTO.getValue())) {
-                    if (store.getSendPhone() != null) {
-                        lastFourNumber = store.getSendPhone();
-                    } else {
-                        lastFourNumber = o.getUserPhone();
-                    }
-                    if (lastFourNumber.length() == 11) {
-                        lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+                if (!CloudHostUtils.hasCloudHostName("康年堂")){
+                    if (fsStoreOrder.getDeliverySn() != null && (fsStoreOrder.getDeliverySn().equals(com.fs.his.enums.ShipperCodeEnum.SF.getValue())  || fsStoreOrder.getDeliverySn().equals(ShipperCodeEnum.ZTO.getValue()))) {
+                        if (store.getSendPhone() != null) {
+                            lastFourNumber = store.getSendPhone();
+                        } else {
+                            lastFourNumber = o.getUserPhone();
+                        }
+                        if (lastFourNumber.length() == 11) {
+                            lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
+                        }
                     }
+                    expressService.subscribeEspress(o.getOrderCode(), fsStoreOrder.getDeliveryCode(), fsStoreOrder.getDeliverySn(), lastFourNumber);
                 }
-                expressService.subscribeEspress(o.getOrderCode(), fsStoreOrder.getDeliveryCode(), fsStoreOrder.getDeliverySn(), lastFourNumber);
 
                 try {
                     String s = fsPrescribeService.PrescribeImg(o.getPrescribeId());
@@ -5264,6 +5268,57 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return R.ok().put("orderKey", uuid);
     }
 
+    @Override
+    public com.fs.his.dto.ExpressInfoDTO getDfExpressInfoDTO(FsStoreOrderScrm order) {
+        com.fs.his.dto.ExpressInfoDTO expressInfoDTO = new com.fs.his.dto.ExpressInfoDTO();
+        expressInfoDTO.setOrderCode(order.getOrderCode());
+        expressInfoDTO.setSuccess(true);
+        ErpDeliverysRequest erpDeliverysRequest = new ErpDeliverysRequest();
+        erpDeliverysRequest.setCode(order.getOrderCode());
+        ErpDeliverysResponse deliver = null;
+        deliver = dfOrderService.getDeliverScrm(erpDeliverysRequest);
+        if (deliver != null) {
+            if (StringUtils.isNotBlank(deliver.getErrorDesc())) {
+                throw new CustomException(deliver.getErrorDesc());
+            }
+            List<ErpDeliverys> deliverys = deliver.getDeliverys();
+            if (deliverys != null && !deliverys.isEmpty()) {
+                expressInfoDTO.setLogisticCode(deliver.getCode());
+                expressInfoDTO.setShipperCode(""); //快递公司编码
+                List<com.fs.his.dto.TracesDTO> tracesDTOS = new ArrayList<>();
+                for (ErpDeliverys item : deliverys) {
+                    com.fs.his.dto.TracesDTO dto = new com.fs.his.dto.TracesDTO();
+                    dto.setLocation(item.getAcceptAddress());
+                    dto.setAcceptStation(item.getRemark());
+                    dto.setAcceptTime(item.getAcceptTime());
+                    tracesDTOS.add(dto);
+
+                }
+                expressInfoDTO.setTraces(tracesDTOS);
+                //匹配原代码物流编码
+                ErpDeliverys item = deliverys.get(deliverys.size() - 1);
+                String opCode = item.getOpCode();
+                if ("54".equals(opCode)) {
+                    //54 取件
+                    expressInfoDTO.setState("1");
+                    expressInfoDTO.setStateEx("1");
+                } else if (opCode.startsWith("3")) {
+                    //30 分拣,36 31
+                    expressInfoDTO.setState("2");
+                    expressInfoDTO.setStateEx("2");
+                } else if ("80".equals(opCode)) {
+                    //80:您的快件已派送至本人
+                    expressInfoDTO.setState("3");
+                    expressInfoDTO.setStateEx("301");
+                }
+            }
+        } else {
+            expressInfoDTO.setState("0");
+            expressInfoDTO.setStateEx("0");
+        }
+        return expressInfoDTO;
+    }
+
     private static final DateTimeFormatter CST_FORMATTER = DateTimeFormatter
             .ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
             .withZone(ZoneId.of("Asia/Shanghai"));