Browse Source

【深爱-物流-创建订单】

DINGYL 10 months ago
parent
commit
f7d8791d84

+ 14 - 0
src/main/java/com/uas/eis/entity/dop/DoPCancelOrderReq.java

@@ -0,0 +1,14 @@
+package com.uas.eis.entity.dop;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class DoPCancelOrderReq {
+    private String logisticCompanyID="DEPPON"; // 物流公司ID
+    private String logisticID; // 渠道单号
+    private String mailNo; // 运单号
+    private String cancelTime; // 撤销时间,格式为 yyyy-MM-dd HH:mm:ss
+    private String remark; // 撤销备注,用户撤销订单原因
+}

+ 22 - 0
src/main/java/com/uas/eis/entity/dop/DoPCreateOrderReq.java

@@ -0,0 +1,22 @@
+package com.uas.eis.entity.dop;
+
+import lombok.Data;
+
+@Data
+public class DoPCreateOrderReq {
+    private String logisticID; // 渠道单号 Y
+    private String custOrderNo; // 客户订单号/商户订单号 N
+    private String mailNo; // 德邦运单号 N
+    private Integer needTraceInfo=2; // 是否需要自动订阅轨迹
+    private String companyCode; // 第三方接入商的公司编码 Y
+    private String orderType; // 下单模式 Y
+    private String transportType; // 运输方式/产品类型
+    /*transportType (具体传值请咨询销售,否则可能下单失败/计费有误) 1、快递运输方式: 1.1 大件快递360:RCP 1.2 特快专递:TZKJC 1.3 微小件特惠:WXJTH 1.4 标准快递:PACKAGE 1.5 特快当日:TKDR 1.6 特快次日:HKDJC 1.7 航空大件隔日达:HKDJG 1.8 泡货特惠:ZYSCZD 1.9 重货特惠:DSZH 1.10 特快冷链:DEAP 1.11 DP联运(K):DPTL 1.12 DP联运(L大宗):TKLY 1.13 精准大票电商:YTYDS 2、零担运输方式: 2.1 新精准汽运:NLRF 2.2 新精准卡航:NFLF 2.3 新精准重货:NJZZH 2.4 精准泡货:NZBRH 2.5 精准大票:YTY 3、整车运输方式:3.1 整车配送:ZCPS 3.2 精准专车:JZZHC 3.3 精准拼车:JZPC 4、特惠运输方式(支持散客电子面单 务必跟德邦销售核对清晰):4.1 微小件特惠:WXJTH 4.2 泡货特惠:ZYSCZD 4.3 重货特惠:DSZH
+     */
+    private String customerCode; // 月结账号 Y 德邦一线营业部给到客户的月结账号,由营业部给出。沙箱环境,下子母件订单必须传值 219401
+    private DoPSender sender;
+    private DoPReceiver receiver;
+    private DoPPackageInfo packageInfo;
+    private String gmtCommit;//订单提交时间    系统当前时间,格式为 yyyy-MM-dd HH:mm:ss 如 2020-11-07 18:44:19 Y
+    private String payType;// 支付方式 0、发货人付款(现付)(大客户模式不支持寄付) 1、收货人付款(到付) 2、发货人付款(月结) YC(预存)Y
+}

+ 13 - 0
src/main/java/com/uas/eis/entity/dop/DoPPackageInfo.java

@@ -0,0 +1,13 @@
+package com.uas.eis.entity.dop;
+
+import lombok.Data;
+
+@Data
+public class DoPPackageInfo {
+    private String cargoName; // 货物名称 Y
+    private Integer totalNumber; // 总件数(包裹数) Y
+    private Double totalWeight; // 重量(务必由德邦运营确认) Y
+    private Double totalVolume; // 体积(务必由德邦运营确认) Y
+    private String packageService; // 包装 N
+    private String deliveryType;//送货方式 (下述为常见送货方式,请咨询销售后传值,否则可能下单失败/计费有误) 1、自提; 2、送货进仓; 3、送货(不含上楼); 4、送货上楼; 5、大件上楼 ;
+}

+ 17 - 0
src/main/java/com/uas/eis/entity/dop/DoPReceiver.java

@@ -0,0 +1,17 @@
+package com.uas.eis.entity.dop;
+
+import lombok.Data;
+
+@Data
+public class DoPReceiver {
+    private String toNetworkNo; // 到达部门编码 N
+    private String name; // 收货人名称 Y
+    private String phone; // 收货人电话 N
+    private String mobile; // 收货人手机 Y
+    private String province; // 收货人省份 Y
+    private String city; // 收货人城市 Y
+    private String county; // 收货人区县 Y
+    private String town; // 收货人镇街道 N
+    private String address; // 收货人详细地址 Y
+    private String companyName; // 收货人公司 N
+}

+ 17 - 0
src/main/java/com/uas/eis/entity/dop/DoPSender.java

@@ -0,0 +1,17 @@
+package com.uas.eis.entity.dop;
+
+import lombok.Data;
+
+@Data
+public class DoPSender {
+    private String companyName; // 发货人公司 N
+    private String businessNetworkNo; // 发货部门编码 N
+    private String name; // 发货人名称 Y
+    private String mobile; // 发货人手机 Y
+    private String phone; // 发货人电话 N
+    private String province; // 发货人省份 Y
+    private String city; // 发货人城市 Y
+    private String county; // 发货人区县 Y
+    private String town; // 发货人乡镇街道 N
+    private String address; // 发货人详细地址 Y
+}

+ 149 - 8
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -23,9 +23,7 @@ import com.sf.csim.express.service.code.ExpressServiceCodeEnum;
 import com.uas.eis.core.config.SpObserver;
 import com.uas.eis.dao.*;
 import com.uas.eis.entity.LogisticsPrice;
-import com.uas.eis.entity.dop.DoPApiResp;
-import com.uas.eis.entity.dop.DoPPriceQueryReq;
-import com.uas.eis.entity.dop.DoPResponseParam;
+import com.uas.eis.entity.dop.*;
 import com.uas.eis.entity.ky.KYApiResp;
 import com.uas.eis.entity.ky.KYPirceData;
 import com.uas.eis.entity.ky.KYPriceQueryReq;
@@ -484,7 +482,6 @@ public class ERPServiceImpl implements ERPService {
         String sendAddr = en[1].toString();
         String sendMan = logisticsPrice.getLp_Recorder();
         String sendMobile = baseDao.getFieldValue("employee","max(em_mobile)","em_name='"+ logisticsPrice.getLp_Recorder()+"'",String.class);
-
         IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_ORDER; //下订单
         CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
         Map<String, String> params = new HashMap<String, String>();
@@ -731,14 +728,158 @@ public class ERPServiceImpl implements ERPService {
         return retMap;
     }
     private Map<String, Object> creatOrder_DoP(LogisticsPrice logisticsPrice){
-        Map<String, Object> modelMap = new HashMap<String, Object>();
+        Map<String, Object> retMap = new HashMap<String, Object>();
         logger.info("creatDOPOrder-Begin");
-        return modelMap;
+        try {
+            Object[] obs = baseDao.getFieldsDataByCondition("SZSI_P.DOCK_LOGISTICS_CONFIG A "
+                    , new String[]{"CALL_URL","CLIENT_CODE","CHECK_WORD","ENABLE_"}, "LOGISTICS_='DOPTEST' and type_='CREATEORDER' AND A.ENABLE_ = 1");
+            String CALL_URL = obs[0].toString();
+            String CLIENT_CODE = obs[1].toString();
+            String sendMobile = baseDao.getFieldValue("employee","max(em_mobile)","em_name='"+ logisticsPrice.getLp_Recorder()+"'",String.class);
+            String inoutNo = logisticsPrice.getLp_Code();
+            String orderCode = logisticsPrice.getLp_DockingCode();
+            if(orderCode!=null && orderCode.length()>0){
+                orderCode=inoutNo+"-"+(Integer.valueOf(orderCode.split("-")[1])+1);
+            }else {
+                orderCode=inoutNo+"-1";
+            }
+            Map<String, String> params = new HashMap<String, String>();
+            DoPCreateOrderReq doPCreateOrderReq = new DoPCreateOrderReq();
+            doPCreateOrderReq.setLogisticID("VYOL"+orderCode);
+            doPCreateOrderReq.setCustOrderNo(orderCode);
+            doPCreateOrderReq.setCompanyCode(CLIENT_CODE);
+            doPCreateOrderReq.setOrderType("2");
+            String businessType="";
+            if("特快".equals(logisticsPrice.getLp_Type())){
+                businessType="TZKJC";
+            }else if("普快".equals(logisticsPrice.getLp_Type())){
+                businessType="RCP";//RCP
+            }else if("物流".equals(logisticsPrice.getLp_Type())){
+                businessType="NFLF";//新精准卡航:NFLF
+            }
+            doPCreateOrderReq.setTransportType(businessType);
+            doPCreateOrderReq.setCustomerCode("219401");//测试219401
+            DoPSender sender=new DoPSender();
+            sender.setCompanyName("深爱半导体");
+            sender.setName(logisticsPrice.getLp_Recorder());
+            sender.setMobile(sendMobile);
+            sender.setProvince(logisticsPrice.getLp_Province());
+            sender.setCity(logisticsPrice.getLp_Route());
+            sender.setCounty(logisticsPrice.getLp_District());
+            sender.setAddress(logisticsPrice.getLp_Add());
+            doPCreateOrderReq.setSender(sender);
+
+            DoPReceiver receiver=new DoPReceiver();
+            receiver.setName(logisticsPrice.getLp_Recipient());
+            receiver.setMobile(logisticsPrice.getLp_Tel());
+            receiver.setProvince(logisticsPrice.getLp_Province());
+            receiver.setCity(logisticsPrice.getLp_Route());
+            receiver.setCounty(logisticsPrice.getLp_District());
+            receiver.setAddress(logisticsPrice.getLp_Add());
+            doPCreateOrderReq.setReceiver(receiver);
+            DoPPackageInfo packageInfo=new DoPPackageInfo();
+            packageInfo.setCargoName(logisticsPrice.getLp_goodsType());
+            packageInfo.setTotalNumber(1);
+            packageInfo.setTotalWeight(logisticsPrice.getLp_Weight());
+            double volume=logisticsPrice.getLp_Volume();
+            if(volume==0){
+                volume=0.001;
+            }else{
+                volume=volume*0.000001;//ERP单位立方厘米 DOP接口单为立方米
+            }
+            packageInfo.setTotalVolume(volume);
+            packageInfo.setDeliveryType("2");
+            doPCreateOrderReq.setPackageInfo(packageInfo);
+            doPCreateOrderReq.setGmtCommit(DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+            doPCreateOrderReq.setPayType("2");
+            String msgData = FastJsonUtil.toJSONString(doPCreateOrderReq);
+            String timeStamp = SecurityUtil.getTimestamp();
+            String appkey="8626840f067f147f983c499e03e1a873";
+            String digest= SecurityUtil.getDigest(msgData+appkey+timeStamp);
+            params.put("params", msgData);
+            params.put("digest", digest);
+            params.put("timestamp", timeStamp);
+            params.put("companyCode", CLIENT_CODE);
+            System.out.println(msgData);
+            System.out.println("CALL_URL:"+CALL_URL);
+            System.out.println("timeStamp:"+timeStamp);
+            String result = HttpClientUtil.post(CALL_URL, params);
+            System.out.println(result);
+            Map<Object, Object> res  = BaseUtil.parseFormStoreToMap(result);
+             /*CreateOrderNotifyResult[logisticID=VYOL2025040020-3,result=true,mailNo=DPK6552872821749,arrivedOrgSimpleName=广东省珠海市,arrivedOutFieldName=,stationNo=,resultCode=1000,reason=成功,exceptionCode=,message=,muchHigherDelivery=,parentMailNo=DPK6552872821749]*/
+            if("true".equals(res.get("result"))){
+                if(StringUtil.hasText(res.get("mailNo"))){
+                    retMap.put("success",true);
+                    retMap.put("logisticscode",res.get("mailNo"));
+                    retMap.put("dockingcode",orderCode);
+                    logger.info("creatDOPOrder-S:id {} logisticscode {}",logisticsPrice.getLp_Id(),retMap.get("logisticscode"));
+                    return retMap;
+                }else{
+                    retMap.put("success",false);
+                    retMap.put("logisticscode",res.get("mailNo"));
+                    retMap.put("dockingcode",orderCode);
+                    logger.info("creatDOPOrder-F:id {} result {}",logisticsPrice.getLp_Id(),result);
+                    return retMap;
+                }
+            }else{
+                retMap.put("success",false);
+                logger.info("creatDOPOrder-F:id {} result {}",logisticsPrice.getLp_Id(),result);
+                return retMap;
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            retMap.put("success",false);
+            retMap.put("message","创建失败"+(StringUtil.nvl(e.getMessage(),"")));
+            logger.info("creatDOPOrder-F:id {} err {}",logisticsPrice.getLp_Id(),retMap.get("message"));
+            return retMap;
+        }
     }
     private Map<String, Object> cancelOrder_DoP(LogisticsPrice logisticsPrice){
-        Map<String, Object> modelMap = new HashMap<String, Object>();
+        Map<String, Object> retMap = new HashMap<String, Object>();
         logger.info("cancelDOPOrder-Begin");
-        return modelMap;
+        try {
+            Object[] obs = baseDao.getFieldsDataByCondition("SZSI_P.DOCK_LOGISTICS_CONFIG A "
+                    , new String[]{"CALL_URL","CLIENT_CODE","CHECK_WORD","ENABLE_"}, "LOGISTICS_='DOPTEST' and type_='CANCELORDER' AND A.ENABLE_ = 1");
+            String CALL_URL = obs[0].toString();
+            String CLIENT_CODE = obs[1].toString();
+            String orderCode = logisticsPrice.getLp_DockingCode();
+            Map<String, String> params = new HashMap<String, String>();
+            DoPCancelOrderReq doPCancelOrderReq = new DoPCancelOrderReq();
+            doPCancelOrderReq.setLogisticID("VYOL"+orderCode);
+            doPCancelOrderReq.setMailNo(logisticsPrice.getLp_TrackingNumber());
+            doPCancelOrderReq.setCancelTime(DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+            doPCancelOrderReq.setRemark("信息有误,撤销订单");
+
+            String msgData = FastJsonUtil.toJSONString(doPCancelOrderReq);
+            String timeStamp = SecurityUtil.getTimestamp();
+            String appkey="8626840f067f147f983c499e03e1a873";
+            String digest= SecurityUtil.getDigest(msgData+appkey+timeStamp);
+            params.put("params", msgData);
+            params.put("digest", digest);
+            params.put("timestamp", timeStamp);
+            params.put("companyCode", CLIENT_CODE);
+            System.out.println(msgData);
+            System.out.println("CALL_URL:"+CALL_URL);
+            System.out.println("timeStamp:"+timeStamp);
+            String result = HttpClientUtil.post(CALL_URL, params);
+            System.out.println(result);
+            Map<Object, Object> res  = BaseUtil.parseFormStoreToMap(result);
+            if("true".equals(res.get("result"))){
+                retMap.put("success",true);
+                logger.info("cancelDOPOrder-S:id {} logisticscode {}",logisticsPrice.getLp_Id(),retMap.get("logisticscode"));
+                return retMap;
+            }else{
+                retMap.put("success",false);
+                logger.info("cancelDOPOrder-F:id {} result {}",logisticsPrice.getLp_Id(),result);
+                return retMap;
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            retMap.put("success",false);
+            retMap.put("message","创建失败"+(StringUtil.nvl(e.getMessage(),"")));
+            logger.info("creatDOPOrder-F:id {} err {}",logisticsPrice.getLp_Id(),retMap.get("message"));
+            return retMap;
+        }
     }
     private Map<String, Object> creatOrder_KY(LogisticsPrice logisticsPrice) throws IOException {
         Map<String, Object> modelMap = new HashMap<String, Object>();

+ 2 - 2
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -51,12 +51,12 @@ public class UasEisApplicationTests {
 
 	@Test
 	public void TestCreatOrder(){
-		Map<String,Object> paraMap=erpService.creatOrder("SZSI_P", 3283);//3268顺丰  3283跨越
+		Map<String,Object> paraMap=erpService.creatOrder("SZSI_P", 3286);//3268顺丰  3283跨越  3286德邦
 	}
 
 	@Test
 	public void TestCancelOrder(){
-		erpService.cancelOrder("SZSI_P",3283);//3267
+		erpService.cancelOrder("SZSI_P",3286);//3267
 	}
 	@Test
 	public void Test() throws UnsupportedEncodingException {