|
@@ -1,21 +1,38 @@
|
|
|
-import com.dderp.common.api.BusinessExecutor
|
|
|
|
|
-import com.dderp.common.api.ERPLockDataService
|
|
|
|
|
-import com.dderp.common.api.NoSqlKeysService
|
|
|
|
|
-import com.dderp.common.api.StoreService
|
|
|
|
|
|
|
+import com.dderp.business.dao.OrderDao
|
|
|
|
|
+import com.dderp.common.api.*
|
|
|
|
|
+import com.dderp.common.api.flycat.OrderSearchService
|
|
|
|
|
+import com.dderp.common.api.flycat.OrderStepService
|
|
|
import com.dderp.common.datas.ERPModule
|
|
import com.dderp.common.datas.ERPModule
|
|
|
|
|
+import com.dderp.common.datas.ESKeys
|
|
|
import com.dderp.common.datas.RedisKeys
|
|
import com.dderp.common.datas.RedisKeys
|
|
|
|
|
+import com.dderp.common.datas.flycat.BusinessOrderStatus
|
|
|
|
|
+import com.dderp.common.datas.flycat.OrderRiderStatus
|
|
|
import com.dderp.common.entity.base.InvokeCallParams
|
|
import com.dderp.common.entity.base.InvokeCallParams
|
|
|
import com.dderp.common.entity.base.InvokeCallResult
|
|
import com.dderp.common.entity.base.InvokeCallResult
|
|
|
|
|
+import com.dderp.common.entity.order.BusinessOrder
|
|
|
|
|
+import com.dderp.common.entity.order.OrderRiderItem
|
|
|
|
|
+import com.dderp.common.entity.order.OrderStep
|
|
|
|
|
+import com.dySweetFishPlugin.elasticsearch.ESClient
|
|
|
|
|
+import com.dySweetFishPlugin.sql.TableIdService
|
|
|
import com.dySweetFishPlugin.sql.dao.OperatorWait
|
|
import com.dySweetFishPlugin.sql.dao.OperatorWait
|
|
|
|
|
+import com.dySweetFishPlugin.sql.dao.TunaService
|
|
|
import com.sweetfish.convert.json.JsonConvert
|
|
import com.sweetfish.convert.json.JsonConvert
|
|
|
import com.sweetfish.service.RetResult
|
|
import com.sweetfish.service.RetResult
|
|
|
import groovy.json.JsonSlurper
|
|
import groovy.json.JsonSlurper
|
|
|
import org.apache.commons.lang3.StringUtils
|
|
import org.apache.commons.lang3.StringUtils
|
|
|
import org.apache.logging.log4j.LogManager
|
|
import org.apache.logging.log4j.LogManager
|
|
|
import org.apache.logging.log4j.Logger
|
|
import org.apache.logging.log4j.Logger
|
|
|
|
|
+import org.elasticsearch.action.bulk.BulkRequestBuilder
|
|
|
|
|
+import org.elasticsearch.action.bulk.BulkResponse
|
|
|
|
|
+import org.elasticsearch.action.index.IndexRequestBuilder
|
|
|
|
|
+import org.elasticsearch.action.support.WriteRequest
|
|
|
|
|
+import org.elasticsearch.action.update.UpdateRequest
|
|
|
|
|
+import org.elasticsearch.common.xcontent.XContentType
|
|
|
|
|
|
|
|
import javax.annotation.Resource
|
|
import javax.annotation.Resource
|
|
|
|
|
|
|
|
|
|
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
|
|
|
|
|
+
|
|
|
class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
|
|
class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
|
|
|
|
|
|
|
|
private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
|
|
private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
|
|
@@ -32,6 +49,26 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
|
|
|
@Resource
|
|
@Resource
|
|
|
StoreService storeService
|
|
StoreService storeService
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ OrderSearchService orderSearchService
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ OrderStepService orderStepService
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ TableIdService tableIdService
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ TunaService tunaService
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ ESClient esClient
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ SupplierInitService supplierService
|
|
|
|
|
+
|
|
|
|
|
+ private OrderDao orderDao
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
String scriptName() {
|
|
String scriptName() {
|
|
|
return "顺丰同城数据回调"
|
|
return "顺丰同城数据回调"
|
|
@@ -48,6 +85,11 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
|
+ void start(long supplierCode) {
|
|
|
|
|
+ orderDao = tunaService.generate(OrderDao.class)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
|
|
RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
|
|
|
//此回调post的数据看着没有子表,直接用groovy自带的json即可,如果有子表,还是应该建立一个类进行转换
|
|
//此回调post的数据看着没有子表,直接用groovy自带的json即可,如果有子表,还是应该建立一个类进行转换
|
|
|
|
|
|
|
@@ -71,8 +113,8 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
|
|
|
return RetResult.<InvokeCallParams> errorT().retinfo(shopId + "提交工作中,请稍后刷新即可,无需重复操作")
|
|
return RetResult.<InvokeCallParams> errorT().retinfo(shopId + "提交工作中,请稍后刷新即可,无需重复操作")
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- String invokeOrderId = invokeOrder["sf_order_id"] as String
|
|
|
|
|
- if (lockDataService.hLockAdd(invokeOrderId, RedisKeys.KEY_ERP_WORKING_SF_ORDER, source.supplierCode) > 1) {
|
|
|
|
|
|
|
+ String invokeOrderId = invokeOrder["shop_order_id"] as String
|
|
|
|
|
+ if (lockDataService.hLockAdd(invokeOrderId, RedisKeys.KEY_ERP_WORKING_ORDER, source.supplierCode) > 1) {
|
|
|
return RetResult.<InvokeCallParams> errorT().retinfo(invokeOrderId + "提交工作中,请稍后刷新即可,无需重复操作")
|
|
return RetResult.<InvokeCallParams> errorT().retinfo(invokeOrderId + "提交工作中,请稍后刷新即可,无需重复操作")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -95,8 +137,8 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
|
|
|
String shopId = invokeOrder["shop_id"] as String
|
|
String shopId = invokeOrder["shop_id"] as String
|
|
|
lockDataService.hLockDel(shopId, RedisKeys.KEY_ERP_WORKING_SF_STORE, source.supplierCode)
|
|
lockDataService.hLockDel(shopId, RedisKeys.KEY_ERP_WORKING_SF_STORE, source.supplierCode)
|
|
|
} else {
|
|
} else {
|
|
|
- String invokeOrderId = invokeOrder["sf_order_id"] as String
|
|
|
|
|
- lockDataService.hLockDel(invokeOrderId,RedisKeys.KEY_ERP_WORKING_SF_ORDER, source.supplierCode)
|
|
|
|
|
|
|
+ String invokeOrderId = invokeOrder["shop_order_id"] as String
|
|
|
|
|
+ lockDataService.hLockDel(invokeOrderId, RedisKeys.KEY_ERP_WORKING_ORDER, source.supplierCode)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -106,12 +148,186 @@ class BE_Express_CallBack_Invoke_SFTC implements BusinessExecutor<InvokeCallPara
|
|
|
|
|
|
|
|
logger.info(source.params)
|
|
logger.info(source.params)
|
|
|
|
|
|
|
|
- logger.info(invokeOrder["url_index"])
|
|
|
|
|
- logger.info(invokeOrder["sf_order_id"])
|
|
|
|
|
- logger.info(invokeOrder["operator_name"])
|
|
|
|
|
|
|
+ String urlIndex = invokeOrder["url_index"]
|
|
|
|
|
+ if (StringUtils.equalsIgnoreCase("rider_status", urlIndex)) {
|
|
|
|
|
+ //region 配送状态更改回调
|
|
|
|
|
|
|
|
- String urlIndex = invokeOrder["url_index"] as String
|
|
|
|
|
- if (StringUtils.equalsIgnoreCase("bindnotify", urlIndex)) {
|
|
|
|
|
|
|
+ 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
|
|
|
|
|
+
|
|
|
|
|
+ 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: invokeOrder["operator_name"],
|
|
|
|
|
+ operatorPhone: invokeOrder["operator_phone"],
|
|
|
|
|
+ riderLng: invokeOrder["rider_lng"],
|
|
|
|
|
+ riderLat: invokeOrder["rider_lat"]
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ List<OrderStep> stepList = new ArrayList<>()
|
|
|
|
|
+
|
|
|
|
|
+ int sfOrderStatus = invokeOrder["order_status"] as int
|
|
|
|
|
+ if (sfOrderStatus == 10) {
|
|
|
|
|
+ //配送员接单/改派
|
|
|
|
|
+ businessOrder.orderStatus = BusinessOrderStatus.riderReceiving.value
|
|
|
|
|
+ orderRiderItem.riderStatus = OrderRiderStatus.accept.value
|
|
|
|
|
+ orderRiderItem.statusDesc = OrderRiderStatus.accept.name
|
|
|
|
|
+
|
|
|
|
|
+ stepList.add(orderStepService.parseOrderStep(businessOrder.id,
|
|
|
|
|
+ "配送接单",
|
|
|
|
|
+ "[" + businessOrder.outGoingPlatformName + "]" + orderRiderItem.operatorName + "(" + orderRiderItem.operatorPhone + ")接单",
|
|
|
|
|
+ source.currentUser))
|
|
|
|
|
+ } else if (sfOrderStatus == 12) {
|
|
|
|
|
+ //配送员到店
|
|
|
|
|
+ businessOrder.orderStatus = BusinessOrderStatus.riderComing.value
|
|
|
|
|
+ orderRiderItem.riderStatus = OrderRiderStatus.store.value
|
|
|
|
|
+ orderRiderItem.statusDesc = OrderRiderStatus.store.name
|
|
|
|
|
+
|
|
|
|
|
+ stepList.add(orderStepService.parseOrderStep(businessOrder.id,
|
|
|
|
|
+ "配送到店",
|
|
|
|
|
+ "[" + businessOrder.outGoingPlatformName + "]" + orderRiderItem.operatorName + "(" + orderRiderItem.operatorPhone + ")到店",
|
|
|
|
|
+ source.currentUser))
|
|
|
|
|
+ } else if (sfOrderStatus == 15) {
|
|
|
|
|
+ //配送员配送中
|
|
|
|
|
+ businessOrder.orderStatus = BusinessOrderStatus.riderTaking.value
|
|
|
|
|
+ orderRiderItem.riderStatus = OrderRiderStatus.working.value
|
|
|
|
|
+ orderRiderItem.statusDesc = OrderRiderStatus.working.name
|
|
|
|
|
+
|
|
|
|
|
+ stepList.add(orderStepService.parseOrderStep(businessOrder.id,
|
|
|
|
|
+ "开始配送",
|
|
|
|
|
+ "[" + businessOrder.outGoingPlatformName + "]" + orderRiderItem.operatorName + "(" + orderRiderItem.operatorPhone + ")配送",
|
|
|
|
|
+ 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("order_complete", urlIndex)) {
|
|
|
|
|
+ //region 订单完成
|
|
|
|
|
+ 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: invokeOrder["operator_name"],
|
|
|
|
|
+ operatorPhone: invokeOrder["operator_phone"],
|
|
|
|
|
+ riderLng: invokeOrder["rider_lng"],
|
|
|
|
|
+ riderLat: invokeOrder["rider_lat"]
|
|
|
|
|
+ )
|
|
|
|
|
+ businessOrder.orderStatus = BusinessOrderStatus.riderComplete.value
|
|
|
|
|
+ orderRiderItem.riderStatus = OrderRiderStatus.complete.value
|
|
|
|
|
+ orderRiderItem.statusDesc = OrderRiderStatus.complete.name
|
|
|
|
|
+
|
|
|
|
|
+ stepList.add(orderStepService.parseOrderStep(businessOrder.id,
|
|
|
|
|
+ "配送完成",
|
|
|
|
|
+ "[" + businessOrder.outGoingPlatformName + "]" + orderRiderItem.operatorName + "(" + orderRiderItem.operatorPhone + ")配送完成",
|
|
|
|
|
+ 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)
|
|
storeService.bindStorePlatform(source.params, "SFTC", source.dataSourceId, source.supplierCode, source.currentUser)
|
|
|
}
|
|
}
|
|
|
|
|
|