import com.dderp.business.dao.OrderDao import com.dderp.common.api.BusinessExecutor import com.dderp.common.api.StoreService import com.dderp.common.api.SupplierInitService 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.datas.flycat.BusinessOrderStatus import com.dderp.common.datas.ERPModule import com.dderp.common.datas.ESKeys import com.dderp.common.datas.flycat.PlatformType 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.store.StorePlatform import com.dySweetFishPlugin.elasticsearch.ESClient import com.dySweetFishPlugin.sql.TableIdService import com.dySweetFishPlugin.sql.dao.TunaService import com.sweetfish.convert.json.JsonConvert import com.sweetfish.service.RetResult import groovy.json.JsonSlurper import org.apache.logging.log4j.LogManager 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.UpdateRequestBuilder import org.elasticsearch.common.xcontent.XContentType import org.rex.RMap import javax.annotation.Resource import java.time.LocalDateTime import java.time.ZoneOffset import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder @SuppressWarnings("unused") class BE_Order_AcceptOrder_DYLK implements BusinessExecutor { private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName()) @Resource private JsonConvert jsonConvert @Resource private TableIdService tableIdService @Resource private StoreService storeService @Resource private ESClient esClient @Resource private SupplierInitService supplierInitService @Resource private OrderStepService orderStepService @Resource private OrderService orderService @Resource private OrderSearchService orderSearchService @Resource private TunaService tunaService private OrderDao orderDao @Override String scriptName() { return "[抖音来客]商户接单" } @Override ERPModule module() { return ERPModule.ORDER_API } @Override RetResult beforeExecute(InvokeCallParams source) { return super.beforeExecute(source) } RetResult execute(InvokeCallParams source) { //秒级时间戳,groovy里面不让用system long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)) String dataSourceId = source.dataSourceId long supplierCode = source.supplierCode ERPTokenUser currentUser = source.currentUser JsonConvert orderConvertor = source.jsonConvertMap.get("orderConvertor") def jsonSlurper = new JsonSlurper() def invokeOrder = jsonSlurper.parseText(source.params) String incomePlatformOrderCode = invokeOrder["order_id"] as String String platformStoreId = invokeOrder["poi_id"] as String StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode) if (storePlatform == null) return RetResult. errorT().retinfo("订单来源平台未知!") if (storePlatform.enableStatue == 0) { logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略") return RetResult. errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用") } RMap searchParams = new RMap(); searchParams.set("incomePlatformId", storePlatform.id) searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode) RetResult> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, null) if (!orderResult.isSuccess()) return RetResult. errorT().retinfo(orderResult.retinfo) BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个 esOrder.setOrderStatus(BusinessOrderStatus.accept.value) BusinessOrder.update(esOrder, currentUser.id) OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "商家接单完成", "[" + storePlatform.platformName + "]", currentUser) //持久化 //订单主表 BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE) UpdateRequestBuilder orderRequest = esClient.getClient().prepareUpdate( supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0), ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE, String.valueOf(esOrder.getId())) .setDoc(jsonBuilder() .startObject() .field("orderStatus", esOrder.orderStatus) .field("updateBy", esOrder.getUpdateBy()) .field("updateTimeLong", esOrder.getUpdateTimeLong()) .endObject()) bulkRequest.add(orderRequest) //订单脚印 IndexRequestBuilder orderStepRequest = esClient.getClient() .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0), ESKeys.ES_DELIVER_ORDER_STEP_TYPE) .setId(String.valueOf(orderStep.id)) .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON) bulkRequest.add(orderStepRequest) BulkResponse bulkResponse = bulkRequest.get(); orderDao = tunaService.generate(OrderDao.class) if (bulkResponse.hasFailures()) { logger.error("商户接单出错:" + bulkResponse.buildFailureMessage()); return RetResult. errorT().retinfo("商户接单出错:" + esOrder.orderName); } else { logger.info("商户接单成功"); //写数据库 orderDao.acceptBusinessOrder(esOrder, [orderStep], dataSourceId, String.valueOf(supplierCode)) return RetResult. successT().result(InvokeCallResult.success().data(jsonConvert.convertTo(esOrder))) } } }