ソースを参照

顺丰同城回调代码错误修复

jlutt@163.com 2 年 前
コミット
8860055039

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

@@ -131,7 +131,7 @@ class BE_Express_CreateOrder_SFTC implements BusinessExecutor<InvokeCallParams,
         }
 
         BusinessOrder businessOrder = orderResult.result
-        if (source.currentUser.userFrom == TokenUserFrom.PC_STORE_ADMIN.value) {
+        if ((source.currentUser.userFrom == TokenUserFrom.APP_STORE_ADMIN.value) || (source.currentUser.userFrom == TokenUserFrom.PC_STORE_ADMIN.value)) {
             if (businessOrder.idStore != source.currentUser.idBindOrg) {
                 return RetResult.<InvokeCallParams> errorT().retinfo("无效的订单信息")
             }

+ 2 - 1
conf/script/1000/expressApi/BE_Express_PreCreateOrder_SFTC.groovy

@@ -20,6 +20,7 @@ import groovy.json.JsonSlurper
 import org.apache.commons.lang3.StringUtils
 import org.apache.logging.log4j.LogManager
 import org.apache.logging.log4j.Logger
+import org.rex.RMap
 
 import javax.annotation.Resource
 import java.nio.charset.StandardCharsets
@@ -89,7 +90,7 @@ class BE_Express_PreCreateOrder_SFTC implements BusinessExecutor<InvokeCallParam
         }
 
         BusinessOrder businessOrder = orderResult.result
-        if (source.currentUser.userFrom == TokenUserFrom.PC_STORE_ADMIN.value) {
+        if ((source.currentUser.userFrom == TokenUserFrom.APP_STORE_ADMIN.value) || (source.currentUser.userFrom == TokenUserFrom.PC_STORE_ADMIN.value)) {
             if (businessOrder.idStore != source.currentUser.idBindOrg) {
                 return RetResult.<InvokeCallParams> errorT().retinfo("无效的订单信息")
             }

+ 47 - 0
ddWebCore/src/main/java/com/dderp/webcore/rest/flycat/StoreAppRest.java

@@ -4,11 +4,15 @@ import com.dderp.common.api.LoginService;
 import com.dderp.common.api.StoreService;
 import com.dderp.common.api.SystemService;
 import com.dderp.common.api.flycat.OrderSearchService;
+import com.dderp.common.api.flycat.OrderService;
+import com.dderp.common.api.flycat.OrderStepService;
 import com.dderp.common.base.BaseService;
 import com.dderp.common.datas.ERPHeader;
 import com.dderp.common.datas.HttpCode;
 import com.dderp.common.datas.ReadOrderOption;
 import com.dderp.common.datas.TokenUserFrom;
+import com.dderp.common.entity.base.InvokeCallParams;
+import com.dderp.common.entity.base.InvokeCallResult;
 import com.dderp.common.entity.order.*;
 import com.dderp.common.entity.site.ERPTokenUser;
 import com.dderp.common.entity.site.LoginRequest;
@@ -46,6 +50,12 @@ public class StoreAppRest extends BaseService {
     @Resource
     OrderSearchService orderSearchService;
 
+    @Resource
+    OrderStepService orderStepService;
+
+    @Resource
+    OrderService orderService;
+
     private final Map<String, ReadOrderOption> readOrderOptionMap = new HashMap<>();
 
     @Override
@@ -156,4 +166,41 @@ public class StoreAppRest extends BaseService {
                 }, getExecutor()
         );
     }
+
+    @RestMapping(name = "getOrderStepList", auth = true, sort = 102, comment = "获取订单脚印列表", methods = {"GET", "POST"})
+    @WebApiBean(type = OrderStep.class, result = true)
+    public CompletableFuture<RMap> getOrderStepList(
+            @RestParam(name = "idOrder", comment = "订单id") long idOrder,
+            @RestParam(name = "&", comment = "登录用户,无需传入") ERPTokenUser currentUser,
+            @RestHeader(name = ERPHeader.HTTPHEADER_DATASOURCE) String dataSourceId,
+            @RestHeader(name = ERPHeader.HTTPHEADER_SUPPLIER) String supplierCode) {
+        return CompletableFuture.supplyAsync(
+                () -> {
+                    //先获取下订单,判断订单是否属于自己
+                    RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(idOrder, currentUser, dataSourceId, Long.parseLong(supplierCode));
+                    if (!orderResult.isSuccess()) {
+                        return RMapUtils.error(HttpCode.BAD_REQUEST.value(), "无效的订单信息");
+                    }
+
+                    RetResult<List<OrderStep>> stepResult = orderStepService.getOrderStepList(idOrder, currentUser, dataSourceId, Long.parseLong(supplierCode));
+                    if (!stepResult.isSuccess()) {
+                        return RMapUtils.error(HttpCode.BAD_REQUEST.value(), stepResult.getRetinfo());
+                    }
+                    return RMapUtils.successV2(stepResult.getResult(), stepResult.getAttachRMap(), null);
+                }, getExecutor()
+        );
+    }
+
+    @RestMapping(name = "storeAppFormToken", auth = true, sort = 1, comment = "请求token", methods = {"POST"})
+    public CompletableFuture<RMap> storeAppFormToken(
+            @RestParam(name = "&", comment = "登录用户,无需传入") ERPTokenUser currentUser,
+            @RestHeader(name = ERPHeader.HTTPHEADER_DATASOURCE) String dataSourceId,
+            @RestHeader(name = ERPHeader.HTTPHEADER_SUPPLIER) String supplierCode) {
+        return CompletableFuture.supplyAsync(
+                () -> {
+                    String token = systemService.requestFormToken("storeAppForm", Long.parseLong(supplierCode));
+                    return RMapUtils.successV2(token, null, null);
+                }, getExecutor()
+        );
+    }
 }

+ 4 - 2
ddWebCore/src/main/java/com/dderp/webcore/servlet/ERPSessionFilter.java

@@ -32,8 +32,8 @@ public class ERPSessionFilter extends HttpFilter {
     @Resource(name = "property.erpToken.commonkey")
     private String erpTokenCommonKey;
 
-    @Resource(name = "property.dnyDriver.commonkey")
-    private String driverTokenCommonKey;
+    @Resource(name = "property.deliver.Store.commonkey")
+    private String storeTokenCommonKey;
 
     @Resource(name = "property.dnyMall.commonkey")
     private String mallTokenCommonKey;
@@ -62,6 +62,8 @@ public class ERPSessionFilter extends HttpFilter {
         String ssoTokenCommonKey = "";
         if (userFromInt == TokenUserFrom.PC_ADMIN.getValue()) {
             ssoTokenCommonKey = erpTokenCommonKey;
+        } else if ((userFromInt == TokenUserFrom.APP_STORE_ADMIN.getValue()) || (userFromInt == TokenUserFrom.PC_STORE_ADMIN.getValue())) {
+            ssoTokenCommonKey = storeTokenCommonKey;
         }
 
         //从cookies中的用户token解析出数据源id和分表key

+ 28 - 1
ddWebCore/src/main/java/com/dderp/webcore/servlet/ExpressCallServlet.java

@@ -52,7 +52,34 @@ public class ExpressCallServlet extends HttpServlet {
         //如果说用订单来查找,几个平台的订单字段也不一样,甚至有的是body传递过来,有的是form-data传递过来的数据
         //感觉使用统一接口,调脚本的形式有些不行?
         //想到有一个办法就是通过nginx做不同反向代理,添加header信息来区分,这样每个平台可以随便添加了,只需要重载一下nginx即可,无需重启服务端
-        //logger.info(request);
+
+        //2024-03-20 研究了nginx的正则表达式和反向代理,不用每个平台都配置一个反向代理,使用nginx一个配置即可
+        //如下配置后,访问http://192.168.1.24:12994/sftc/apis/express/call类似的地址即可转跳并添加header
+//        location ~ ^/(.+)/apis/(.*)$ {
+//            rewrite ^/(.+)/apis/(.*)$ /$2 break;
+//            include  uwsgi_params;
+//
+//            #解决其他终端跨域问题
+//            ...
+//            proxy_pass http://jydeliver;
+//            proxy_set_header   Host    $host;
+//            proxy_set_header   X-Real-IP   $remote_addr;
+//            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
+//
+//            proxy_set_header X-ERP-User-From 0;
+//            proxy_set_header X-ERP-DataSource-Id erp001;
+//            proxy_set_header X-ERP-Supplier-Code 1000;
+//            proxy_set_header X-Deliver-Express-Platform $1;
+//
+//            proxy_send_timeout 600;
+//            #连接成功后,后端服务器响应时间(代理接收超时)
+//            proxy_read_timeout 600;
+//            #nginx跟后端服务器连接超时时间(代理连接超时)
+//            proxy_connect_timeout 600;
+//
+//            ...
+//        }
+        logger.info(request);
         //logger.info(request.getBodyUTF8());
 
         String platformCode = request.getHeader(ERPHeader.HTTPHEADER_EXPRESS_PLATFORM, "");