Kaynağa Gözat

改一下orderConvertor的实现位置,放在直接执行脚本的Service里面

jlutt@163.com 2 yıl önce
ebeveyn
işleme
288014a573

+ 86 - 0
conf/script/1000/expressApi/BE_Express_CallBack_Invoke_SFTC.groovy

@@ -148,6 +148,8 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
 
         logger.info(source.params)
 
+        //https://openic.sf-express.com/open/api/docs/index#/apidoc
+        //顺丰订单的逻辑,只有取消和完成才是订单终态
         String urlIndex = invokeOrder["url_index"]
         if (StringUtils.equalsIgnoreCase("rider_status", urlIndex)) {
             //region 配送状态更改回调
@@ -174,6 +176,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
                     riderLng: invokeOrder["rider_lng"],
                     riderLat: invokeOrder["rider_lat"]
             )
+            OrderRiderItem.create(orderRiderItem, source.currentUser.id)
 
             List<OrderStep> stepList = new ArrayList<>()
 
@@ -277,6 +280,7 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
                     riderLng: invokeOrder["rider_lng"],
                     riderLat: invokeOrder["rider_lat"]
             )
+            OrderRiderItem.create(orderRiderItem, source.currentUser.id)
             businessOrder.orderStatus = BusinessOrderStatus.riderComplete.value
             orderRiderItem.riderStatus = OrderRiderStatus.complete.value
             orderRiderItem.statusDesc = OrderRiderStatus.complete.name
@@ -327,6 +331,88 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
             }
 
             //endregion
+        } else if (StringUtils.equalsIgnoreCase("rider_recall", urlIndex)) {
+            //region 配送员撤单
+
+            //当订单被骑士撤单的时候,顺丰同城会将订单撤撤单状态进行回调通知。
+            //注:顺丰同城撤单是指订单由A骑士接单后,因A骑士自身原因无法继续配送,故会将订单撤回抢单池,允许其他骑士继续抢单直至订单完结
+
+            //此消息并不会完全配送撤单,需要修正一下订单状态、轨迹和脚印
+            long orderId = invokeOrder["shop_order_id"] as long
+            RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(orderId,
+                    source.currentUser, source.dataSourceId, source.supplierCode)
+
+            if (!orderResult.isSuccess()) {
+                return RetResult.<InvokeCallResult> errorT().retinfo("无效的订单信息")
+            }
+
+            BusinessOrder businessOrder = orderResult.result
+
+            List<OrderStep> stepList = new ArrayList<>()
+
+            OrderRiderItem orderRiderItem = new OrderRiderItem(
+                    id: tableIdService.getTableIdMulti("deOrderRiderItems.id", 1, source.dataSourceId, String.valueOf(source.supplierCode)),
+                    idOrder: businessOrder.id,
+                    idPlatform: businessOrder.outGoingPlatformId,
+                    platformCode: 'SFTC',
+                    platformName: businessOrder.outGoingPlatformName,
+                    platformOrderId: invokeOrder["sf_order_id"],
+                    operatorName: "",
+                    operatorPhone: "",
+                    riderLng: "",
+                    riderLat: ""
+            )
+            OrderRiderItem.create(orderRiderItem, source.currentUser.id)
+            businessOrder.orderStatus = BusinessOrderStatus.riderComplete.value
+            orderRiderItem.riderStatus = OrderRiderStatus.complete.value
+            orderRiderItem.statusDesc = OrderRiderStatus.complete.name
+
+            stepList.add(orderStepService.parseOrderStep(businessOrder.id,
+                    "配送撤单",
+                    "[" + businessOrder.outGoingPlatformName + "]" + "配送员撤单",
+                    source.currentUser))
+
+            int iData = orderDao.expressRiderOrder(businessOrder, orderRiderItem, stepList, source.dataSourceId, source.supplierCode + "_1")
+
+            if (iData >= 0) {
+                BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
+                try {
+                    UpdateRequest orderRequest = new UpdateRequest(
+                            supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1),
+                            ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE, String.valueOf(businessOrder.id))
+                            .doc(jsonBuilder()
+                                    .startObject()
+                                    .field("orderStatus", businessOrder.orderStatus)
+                                    .endObject())
+                    bulkRequest.add(orderRequest)
+
+                    IndexRequestBuilder itemRequest = esClient.getClient()
+                            .prepareIndex(supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1),
+                                    ESKeys.ES_DELIVER_ORDER_RIDER_ITEM_TYPE)
+                            .setId(String.valueOf(orderRiderItem.id))
+                            .setParent(String.valueOf(orderRiderItem.idOrder))
+                            .setSource(jsonConvert.convertTo(orderRiderItem), XContentType.JSON)
+                    bulkRequest.add(itemRequest)
+
+                    stepList.each { orderStep ->
+                        IndexRequestBuilder orderStepRequest = esClient.getClient()
+                                .prepareIndex(supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 1),
+                                        ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
+                                .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
+                        bulkRequest.add(orderStepRequest)
+                    }
+
+                    //写入到es索引中
+                    BulkResponse bulkResponse = bulkRequest.execute().actionGet()
+                    if (bulkResponse.hasFailures()) {
+                        logger.error("订单配送发单错误:" + bulkResponse.buildFailureMessage())
+                    }
+                } catch (Exception e) {
+                    logger.error("订单配送发单错误:" + e.getMessage(), e)
+                }
+            }
+
+            //endregion
         } else if (StringUtils.equalsIgnoreCase("bindnotify", urlIndex)) {
             storeService.bindStorePlatform(source.params, "SFTC", source.dataSourceId, source.supplierCode, source.currentUser)
         }

+ 15 - 0
ddBusiness/src/main/java/com/dderp/business/service/flycat/OrderServiceImpl.java

@@ -6,8 +6,11 @@ import com.dderp.common.base.BaseService;
 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.order.BusinessOrder;
 import com.dderp.common.entity.site.ERPTokenUser;
 import com.dySweetFishPlugin.redis.RedisService;
+import com.sweetfish.convert.json.JsonConvert;
+import com.sweetfish.convert.json.JsonFactory;
 import com.sweetfish.service.Local;
 import com.sweetfish.service.RetResult;
 import com.sweetfish.util.AnyValue;
@@ -31,9 +34,19 @@ public class OrderServiceImpl extends BaseService implements OrderService {
     @Resource
     NoSqlKeysService keysService;
 
+    @Resource
+    JsonFactory jsonRootFactory;
+
+    private JsonConvert orderWriteConvert;
+
     @Override
     public void init(AnyValue config) {
         super.init(config);
+
+        final JsonFactory orderChildFactory = jsonRootFactory.createChild();
+        orderChildFactory.register(BusinessOrder.class, true, "orderFinances", "detailItemList", "orderDeliveryInfo", "riderItemList", "orderDiscountList");
+        orderChildFactory.reloadCoder(BusinessOrder.class);
+        this.orderWriteConvert = orderChildFactory.getConvert();
     }
 
     @Override
@@ -83,6 +96,8 @@ public class OrderServiceImpl extends BaseService implements OrderService {
         source.setDataSourceId(dataSourceId);
         source.setSupplierCode(supplierCode);
 
+        source.addConvert("orderConvertor", orderWriteConvert);
+
         return callScript(source.getBusinessMethod(), source, currentUser, dataSourceId, supplierCode);
     }
 }

+ 0 - 12
ddWebCore/src/main/java/com/dderp/webcore/servlet/OrderCallServlet.java

@@ -59,8 +59,6 @@ public class OrderCallServlet extends HttpServlet {
     @Resource(name = "property.DYLK.appSecret")
     private String douyinAppSecret;
 
-    private JsonConvert orderWriteConvert;
-
     @Resource
     JsonFactory jsonRootFactory;
 
@@ -75,14 +73,6 @@ public class OrderCallServlet extends HttpServlet {
     }
 
     @Override
-    public void init(HttpContext context, AnyValue config) {
-        final JsonFactory orderChildFactory = jsonRootFactory.createChild();
-        orderChildFactory.register(BusinessOrder.class, true, "orderFinances", "detailItemList", "orderDeliveryInfo", "riderItemList");
-        orderChildFactory.reloadCoder(BusinessOrder.class);
-        this.orderWriteConvert = orderChildFactory.getConvert();
-    }
-
-    @Override
     public void destroy(HttpContext context, AnyValue config) {
         super.destroy(context, config);
     }
@@ -132,7 +122,6 @@ public class OrderCallServlet extends HttpServlet {
 
         InvokeCallParams callParams = new InvokeCallParams();
         callParams.setParams(callBody.getContent());
-        callParams.getJsonConvertMap().put("orderConvertor", orderWriteConvert);
         callParams.setCurrentUser(currentUser);
         callParams.setDataSourceId(dataSourceId);
         callParams.setSupplierCode(supplierCode);
@@ -240,7 +229,6 @@ public class OrderCallServlet extends HttpServlet {
             InvokeCallParams callParams = new InvokeCallParams();
             callParams.setBusinessMethod("Order_UserRefundRequest_DYLK");
             callParams.setParams(body);
-            callParams.getJsonConvertMap().put("orderConvertor", orderWriteConvert);
             callParams.setCurrentUser(currentUser);
             callParams.setDataSourceId(dataSourceId);
             callParams.setSupplierCode(supplierCode);