jlutt@163.com 2 anni fa
parent
commit
88d1303400

+ 12 - 0
conf/script/1000/business/BE_DocClearScriptCache.groovy

@@ -1,6 +1,7 @@
 import com.dderp.common.api.BusinessExecutor
 import com.dderp.common.api.DocInfoService
 import com.dderp.common.api.SystemService
+import com.dderp.common.api.flycat.ExpressOutService
 import com.dderp.common.datas.ERPModule
 import com.dderp.common.datas.ERPModuleEntity
 import com.dderp.common.entity.base.BusinessOperation
@@ -27,6 +28,9 @@ class BE_DocClearScriptCache implements BusinessExecutor<ProcessEntityItem<ERPMo
     @Resource
     DocInfoService docInfoService
 
+    @Resource
+    ExpressOutService expressOutService
+
     @Override
     String scriptName() {
         return "保存业务脚本清除对象"
@@ -48,6 +52,7 @@ class BE_DocClearScriptCache implements BusinessExecutor<ProcessEntityItem<ERPMo
             //2024-01-26未测试这个重载能不能不重启给groovy增加扩展方法,需要测试,不过理论上没啥用,因为Init_ExpandoGroovy的脚本是用的其它groovy代码实现的,先这样吧,留着以后处理,暂时不经常修改GroovyExtensions代码算了
             systemService.reloadScriptCache(source.inputItem.code, ERPModule.SYSTEM, source.dataSourceId, source.supplierCode)
             docInfoService.reloadScriptCache(source.inputItem.code, ERPModule.SYSTEM, source.dataSourceId, source.supplierCode)
+            expressOutService.reloadScriptCache(source.inputItem.code, ERPModule.SYSTEM, source.dataSourceId, source.supplierCode)
         }
         else {
             switch (erpModule) {
@@ -74,6 +79,13 @@ class BE_DocClearScriptCache implements BusinessExecutor<ProcessEntityItem<ERPMo
                         systemService.reloadScriptCache(source.getInputItem().getCode(), erpModule, source.getDataSourceId(), source.getSupplierCode())
                     }
                     break
+                case ERPModule.EXPRESS_API:
+                    if (source.getOperation() == BusinessOperation.SAVE) {
+                        expressOutService.invalidateScriptCache(source.getSupplierCode() + "-" + source.getInputItem().getCode())
+                    } else {
+                        expressOutService.reloadScriptCache(source.getInputItem().getCode(), erpModule, source.getDataSourceId(), source.getSupplierCode())
+                    }
+                    break
                 case ERPModule.ADDRESSPARSER:
                     break
                 case ERPModule.APP:

+ 1 - 6
conf/script/1000/expressApi/BE_Express_CreateOrder_SFTC.groovy

@@ -1,13 +1,8 @@
 import com.alibaba.fastjson2.JSON
-import com.alibaba.fastjson2.JSONWriter
 import com.dderp.common.api.BusinessExecutor
 import com.dderp.common.datas.ERPModule
 import com.dderp.common.entity.base.ProcessStringItem
-import com.dderp.common.entity.express.SFCreateOrderResult
-import com.dderp.common.entity.express.SFOrder
-import com.dderp.common.entity.express.SFOrderDetail
-import com.dderp.common.entity.express.SFOrderProductDetail
-import com.dderp.common.entity.express.SFOrderReceive
+import com.dderp.common.entity.express.*
 import com.dderp.common.http.HttpTools
 import com.sweetfish.convert.json.JsonConvert
 import com.sweetfish.service.RetResult

+ 110 - 0
conf/script/1000/expressApi/BE_Express_GetOrderStatus_SFTC.groovy

@@ -0,0 +1,110 @@
+import com.alibaba.fastjson2.JSON
+import com.dderp.common.api.BusinessExecutor
+import com.dderp.common.datas.ERPModule
+import com.dderp.common.entity.base.InvokeCallParams
+import com.dderp.common.entity.base.InvokeCallResult
+import com.dderp.common.http.HttpTools
+import com.dySweetFishPlugin.sql.dao.OperatorWait
+import com.sweetfish.service.RetResult
+import groovy.json.JsonSlurper
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.Logger
+
+import javax.annotation.Resource
+import java.nio.charset.StandardCharsets
+import java.time.LocalDateTime
+import java.time.ZoneOffset
+import java.util.concurrent.CompletableFuture
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeoutException
+
+class BE_Express_GetOrderStatus_SFTC implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
+
+    private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
+
+    @Resource(name = "property.sftc.appId")
+    long sfAppId
+
+    @Resource(name = "property.sftc.appKey")
+    String sfAppKey
+
+    @Resource(name = "property.sftc.apiUrl")
+    String sfApiUrl
+
+    @Override
+    String scriptName() {
+        return "顺丰同城订单实时信息查询"
+    }
+
+    @Override
+    ERPModule module() {
+        return ERPModule.EXPRESS_API
+    }
+
+    @Override
+    OperatorWait getAWait() {
+        return OperatorWait.AWAIT
+    }
+
+    @Override
+    RetResult<InvokeCallParams> checkExecute(InvokeCallParams source) {
+        //检查订单信息
+        def jsonSlurper = new JsonSlurper()
+        def invokeOrder = jsonSlurper.parseText(source.params)
+
+        String orderId = invokeOrder["orderId"] as String
+        //todo 获取订单信息
+
+        return RetResult.<InvokeCallParams> successT().result(source)
+    }
+
+    RetResult<InvokeCallResult> execute(InvokeCallParams source) {
+        //todo
+        def jsonSlurper = new JsonSlurper()
+        def invokeOrder = jsonSlurper.parseText(source.params)
+
+        //转成顺丰需要提交的信息
+        long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
+
+        def sfOrder = [
+                dev_id   : sfAppId,
+                order_id : invokeOrder["sfOrderId"],
+                shop_id  : invokeOrder[""],
+                push_time: currentTime
+        ]
+
+
+        String postData = JSON.toJSONString(sfOrder)
+
+        logger.info("请求数据: " + postData)
+        String sign = ExpressApiSign.sfGenerateOpenSign(postData, sfAppId, sfAppKey)
+
+        String url = sfApiUrl + "getorderstatus?sign=" + sign
+
+        CompletableFuture<String> apiResult = HttpTools.postHttpContentAsync(url,
+                5000,
+                StandardCharsets.UTF_8,
+                postData,
+                ["Content-Type": "application/json;charset=utf-8"])
+        try {
+            String orderResult = apiResult.get(6000, TimeUnit.SECONDS)
+            //直接输出orderResult一方面unicode编码,一方面有些数据不要,只要结果里面的feed即可这里在转换一下
+
+            def sfOrderJson = jsonSlurper.parseText(orderResult)
+            if (sfOrderJson["error_code"] != 0) {
+                return RetResult.<InvokeCallResult> errorT().retinfo(sfOrderJson["error_msg"] as String)
+            }
+            return RetResult.<InvokeCallResult> successT().result(
+                    InvokeCallResult.success().data(JSON.toJSONString(sfOrderJson["result"]))
+            )
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            logger.error(e.getMessage(), e)
+
+            return RetResult.<InvokeCallResult> errorT().retinfo(e.getMessage())
+        }
+    }
+}
+
+
+

+ 3 - 10
conf/script/1000/expressApi/BE_Express_ListOrderFeed_SFTC.groovy

@@ -1,19 +1,12 @@
 import com.alibaba.fastjson2.JSON
 import com.dderp.common.api.BusinessExecutor
-import com.dderp.common.api.ERPLockDataService
 import com.dderp.common.datas.ERPModule
-import com.dderp.common.datas.RedisKeys
 import com.dderp.common.entity.base.InvokeCallParams
 import com.dderp.common.entity.base.InvokeCallResult
-import com.dderp.common.entity.base.ProcessStringItem
-import com.dderp.common.entity.express.SFCreateOrderResult
-import com.dderp.common.entity.store.StoreInfo
-import com.dderp.common.entity.store.StorePlatformRequire
 import com.dderp.common.http.HttpTools
 import com.dySweetFishPlugin.sql.dao.OperatorWait
 import com.sweetfish.service.RetResult
 import groovy.json.JsonSlurper
-import org.apache.commons.lang3.StringUtils
 import org.apache.logging.log4j.LogManager
 import org.apache.logging.log4j.Logger
 
@@ -76,9 +69,9 @@ class BE_Express_ListOrderFeed_SFTC implements BusinessExecutor<InvokeCallParams
         long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
 
         def sfOrder = [
-                dev_id: sfAppId,
-                order_id: invokeOrder["sfOrderId"],
-                shop_id: invokeOrder[""],
+                dev_id   : sfAppId,
+                order_id : invokeOrder["sfOrderId"],
+                shop_id  : invokeOrder[""],
                 push_time: currentTime
         ]
 

+ 32 - 1
ddCommon/src/main/java/com/dderp/common/datas/BusinessOrderStatus.java

@@ -3,11 +3,42 @@ package com.dderp.common.datas;
 /**
  * Created by jlutt on 2021-07-11
  * 订单状态
+ *
  * @author jlutt
  */
 public enum BusinessOrderStatus {
 
-    init("初始化", 0);
+    /**
+     * 从平台生成订单,待配送
+     */
+    init("初始化", 0),
+
+    /**
+     * 选择了配送平台,下单,等待配送平台回调
+     */
+    delivery("配送平台下达", 10),
+
+    /**
+     * 配送员接单,由配送平台回调
+     */
+    riderReceiving("配送员已接单", 11),
+
+    /**
+     * 配送员到店,由配送平台回调
+     */
+    riderComing("配送员已到店", 12),
+
+    /**
+     * 配送员已取货,配送中,由配送平台回调
+     */
+    riderTaking("配送员已取货", 13),
+
+    /**
+     * 配送员点击完成 ,由配送平台回调
+     */
+    riderComplete("配送完成", 14),
+
+    orderComplete("订单完成", 20);
 
     private String name;
     private int value;

+ 3 - 0
ddCommon/src/main/java/com/dderp/common/datas/business/PlatformType.java

@@ -5,8 +5,11 @@ package com.dderp.common.datas.business;
  */
 @SuppressWarnings("unused")
 public enum PlatformType {
+
     order("订单平台", 0),
+
     delivery("配送平台", 1);
+
     private String name;
     private int value;
 

+ 6 - 1
ddWebCore/src/main/java/com/dderp/webcore/rest/AdminRest.java

@@ -2,6 +2,7 @@ package com.dderp.webcore.rest;
 
 import com.dderp.common.api.DocInfoService;
 import com.dderp.common.api.SystemService;
+import com.dderp.common.api.flycat.ExpressOutService;
 import com.dderp.common.base.BaseService;
 import com.dderp.common.datas.ERPHeader;
 import com.dderp.common.datas.ERPModule;
@@ -49,6 +50,9 @@ public class AdminRest extends BaseService {
     DocInfoService docInfoService;
 
     @Resource
+    ExpressOutService expressOutService;
+
+    @Resource
     JsonConvert jsonConvert;
 
 
@@ -166,7 +170,8 @@ public class AdminRest extends BaseService {
                     Stream.of(
                             getLoadedScriptCache(dataSourceId, Long.parseLong(supplierCode)),
                             systemService.getLoadedScriptCache(dataSourceId, Long.parseLong(supplierCode)),
-                            docInfoService.getLoadedScriptCache(dataSourceId, Long.parseLong(supplierCode))
+                            docInfoService.getLoadedScriptCache(dataSourceId, Long.parseLong(supplierCode)),
+                            expressOutService.getLoadedScriptCache(dataSourceId, Long.parseLong(supplierCode))
                     ).forEach(scriptList::addAll);
 
                     //只保留一个Init_ExpandoGroovy,这里如果正常写需要拆分两个部分,去重用TreeSet操作,只保留一个Init_ExpandoGroovy,写的有些麻烦,懒得处理了,直接用暴力的写法