Pārlūkot izejas kodu

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

jlutt@163.com 2 gadi atpakaļ
vecāks
revīzija
7b716df525

+ 9 - 9
conf/script/1000/expressApi/BE_Express_CallBack_Invoke_SFTC.groovy

@@ -74,7 +74,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
             "rider_status@10"   : { invokeOrder, InvokeCallParams source ->
                 //region 配送员接单/改派
 
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -162,7 +162,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
             "rider_status@12"   : { invokeOrder, InvokeCallParams source ->
                 //region 配送员到店
 
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -249,7 +249,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
             "rider_status@15"   : { invokeOrder, InvokeCallParams source ->
                 //region 配送员配送中
 
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -335,7 +335,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
 
             "order_complete@17" : { invokeOrder, InvokeCallParams source ->
                 //region 订单完成
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -424,7 +424,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
                 //注:顺丰同城撤单是指订单由A骑士接单后,因A骑士自身原因无法继续配送,故会将订单撤回抢单池,允许其他骑士继续抢单直至订单完结
 
                 //此消息并不会完全配送撤单,需要修正一下订单状态、轨迹和脚印
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -514,7 +514,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
 
                 //异常回调不改变订单状态
 
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -630,7 +630,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
                 //当订单在顺丰侧被取消时,会由顺丰同城回调对接方回调地址告知订单被取消。
                 //一般情况下订单被顺丰侧取消原因为:用户拒收,订单超时严重未完成等等操作原因会在返回error_msg中返回。若仍有疑问,可与调度或骑士联系获取更多信息。
 
-                long orderId = invokeOrder["shop_order_id"] as long
+                long orderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "") as long
                 RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
                         source.currentUser, source.dataSourceId, source.supplierCode)
 
@@ -773,7 +773,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
                 return RetResult.<InvokeCallParams> errorT().retinfo(shopId + "提交工作中,请稍后刷新即可,无需重复操作")
             }
         } else {
-            String invokeOrderId = invokeOrder["shop_order_id"] as String
+            String invokeOrderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "")
             if (lockDataService.hLockAdd(invokeOrderId, RedisKeys.KEY_ERP_WORKING_ORDER, source.supplierCode) > 1) {
                 return RetResult.<InvokeCallParams> errorT().retinfo(invokeOrderId + "提交工作中,请稍后刷新即可,无需重复操作")
             }
@@ -797,7 +797,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
             String shopId = invokeOrder["shop_id"] as String
             lockDataService.hLockDel(shopId, RedisKeys.KEY_ERP_WORKING_SF_STORE, source.supplierCode)
         } else {
-            String invokeOrderId = invokeOrder["shop_order_id"] as String
+            String invokeOrderId = (invokeOrder["shop_order_id"] as String).replaceAll("S", "")
             lockDataService.hLockDel(invokeOrderId, RedisKeys.KEY_ERP_WORKING_ORDER, source.supplierCode)
         }
     }

+ 8 - 2
conf/script/1000/expressApi/BE_Express_CreateOrder_SFTC.groovy

@@ -207,7 +207,7 @@ class BE_Express_CreateOrder_SFTC implements BusinessExecutor<InvokeCallParams,
                 dev_id        : sfAppId,
                 shop_id       : storePlatform.platformStoreId,
                 shop_type     : 1,
-                shop_order_id : String.valueOf(businessOrder.id),
+                shop_order_id : 'S' + String.valueOf(businessOrder.id), //这里只能用字符串,不能用全数字
                 order_source  : businessOrder.incomePlatformName,
                 order_sequence: String.valueOf(businessOrder.orderSequence),
                 order_time    : currentTime,
@@ -263,7 +263,13 @@ class BE_Express_CreateOrder_SFTC implements BusinessExecutor<InvokeCallParams,
                 businessOrder.outGoingPlatformBillCode = sfOrderData["result"]["sf_bill_id"]
 
                 businessOrder.orderFinances.expressTotalPrice = ERPUtils.money(sfOrderData["result"]["total_price"] as long)
-                businessOrder.orderFinances.expressFreeSendServiceFee = ERPUtils.money(sfOrderData["result"]["free_send_service_fee"] as long)
+                if (sfOrderData["result"]["free_send_service_fee"] != null) {
+                    //省心送费,单位分。在顺丰同城后台配置,配置后有此字段和费用。
+                    businessOrder.orderFinances.expressFreeSendServiceFee = ERPUtils.money(sfOrderData["result"]["free_send_service_fee"] as long)
+                } else {
+                    businessOrder.orderFinances.expressFreeSendServiceFee = BigDecimal.ZERO
+                }
+
                 businessOrder.orderFinances.expressTotalPayMoney = ERPUtils.money(sfOrderData["result"]["total_pay_money"] as long)
                 businessOrder.orderFinances.expressRealPayMoney = ERPUtils.money(sfOrderData["result"]["real_pay_money"] as long)
                 businessOrder.orderFinances.expressCouponsTotalFee = ERPUtils.money(sfOrderData["result"]["coupons_total_fee"] as long)

+ 2 - 2
conf/sqlroot/com/dderp/business/dao/OrderDao.dql

@@ -156,7 +156,7 @@ outGoingPlatformId = #{outgoingplatformid},
 outGoingPlatformName = #{outgoingplatformname},
 outGoingPlatformOrderCode = #{outgoingplatformordercode},
 outGoingPlatformBillCode = #{outgoingplatformbillcode},
-orderStatus = #{orderStatus},
+orderStatus = #{orderstatus},
 updateBy = #{updateby},
 updateTime = #{updatetime},
 updateTimeLong = #{updatetimelong}
@@ -176,7 +176,7 @@ where id = #{id};
 
 -- [expressRiderOrder]
 update $table$ set
-orderStatus = #{orderStatus},
+orderStatus = #{orderstatus},
 updateBy = #{updateby},
 updateTime = #{updatetime},
 updateTimeLong = #{updatetimelong}

+ 23 - 0
ddWebCore/src/main/java/com/dderp/webcore/rest/flycat/OrderRest.java

@@ -3,6 +3,7 @@ package com.dderp.webcore.rest.flycat;
 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;
@@ -40,6 +41,9 @@ public class OrderRest extends BaseService {
     @Resource
     OrderSearchService orderSearchService;
 
+    @Resource
+    OrderStepService orderStepService;
+
     private final Map<String, ReadOrderOption> readOrderOptionMap = new HashMap<>();
 
     @Override
@@ -140,4 +144,23 @@ public class OrderRest extends BaseService {
                 }, getExecutor()
         );
     }
+
+    @RestMapping(name = "getOrderStepList", auth = true, sort = 50, 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<List<OrderStep>> result = orderStepService.getOrderStepList(idOrder, currentUser, dataSourceId, Long.parseLong(supplierCode));
+                    if (!result.isSuccess()) {
+                        return RMapUtils.error(HttpCode.BAD_REQUEST.value(), result.getRetinfo());
+                    }
+                    return RMapUtils.successV2(result.getResult(), result.getAttachRMap(), null);
+                }, getExecutor()
+        );
+    }
 }

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

@@ -52,8 +52,8 @@ public class ExpressCallServlet extends HttpServlet {
         //如果说用订单来查找,几个平台的订单字段也不一样,甚至有的是body传递过来,有的是form-data传递过来的数据
         //感觉使用统一接口,调脚本的形式有些不行?
         //想到有一个办法就是通过nginx做不同反向代理,添加header信息来区分,这样每个平台可以随便添加了,只需要重载一下nginx即可,无需重启服务端
-        logger.info(request);
-        logger.info(request.getBodyUTF8());
+        //logger.info(request);
+        //logger.info(request.getBodyUTF8());
 
         String platformCode = request.getHeader(ERPHeader.HTTPHEADER_EXPRESS_PLATFORM, "");
         if (StringUtils.isEmpty(platformCode)) {