BE_Order_AcceptOrder_DYLK.groovy 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import com.dderp.business.dao.OrderDao
  2. import com.dderp.common.api.BusinessExecutor
  3. import com.dderp.common.api.StoreService
  4. import com.dderp.common.api.SupplierInitService
  5. import com.dderp.common.api.flycat.OrderSearchService
  6. import com.dderp.common.api.flycat.OrderService
  7. import com.dderp.common.api.flycat.OrderStepService
  8. import com.dderp.common.datas.flycat.BusinessOrderStatus
  9. import com.dderp.common.datas.ERPModule
  10. import com.dderp.common.datas.ESKeys
  11. import com.dderp.common.datas.flycat.PlatformType
  12. import com.dderp.common.entity.base.InvokeCallParams
  13. import com.dderp.common.entity.base.InvokeCallResult
  14. import com.dderp.common.entity.order.*
  15. import com.dderp.common.entity.site.ERPTokenUser
  16. import com.dderp.common.entity.store.StorePlatform
  17. import com.dySweetFishPlugin.elasticsearch.ESClient
  18. import com.dySweetFishPlugin.sql.TableIdService
  19. import com.dySweetFishPlugin.sql.dao.TunaService
  20. import com.sweetfish.convert.json.JsonConvert
  21. import com.sweetfish.service.RetResult
  22. import groovy.json.JsonSlurper
  23. import org.apache.logging.log4j.LogManager
  24. import org.apache.logging.log4j.Logger
  25. import org.elasticsearch.action.bulk.BulkRequestBuilder
  26. import org.elasticsearch.action.bulk.BulkResponse
  27. import org.elasticsearch.action.index.IndexRequestBuilder
  28. import org.elasticsearch.action.support.WriteRequest
  29. import org.elasticsearch.action.update.UpdateRequestBuilder
  30. import org.elasticsearch.common.xcontent.XContentType
  31. import org.rex.RMap
  32. import javax.annotation.Resource
  33. import java.time.LocalDateTime
  34. import java.time.ZoneOffset
  35. import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
  36. @SuppressWarnings("unused")
  37. class BE_Order_AcceptOrder_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  38. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  39. @Resource
  40. private JsonConvert jsonConvert
  41. @Resource
  42. private TableIdService tableIdService
  43. @Resource
  44. private StoreService storeService
  45. @Resource
  46. private ESClient esClient
  47. @Resource
  48. private SupplierInitService supplierInitService
  49. @Resource
  50. private OrderStepService orderStepService
  51. @Resource
  52. private OrderService orderService
  53. @Resource
  54. private OrderSearchService orderSearchService
  55. @Resource
  56. private TunaService tunaService
  57. private OrderDao orderDao
  58. @Override
  59. String scriptName() {
  60. return "[抖音来客]商户接单"
  61. }
  62. @Override
  63. ERPModule module() {
  64. return ERPModule.ORDER_API
  65. }
  66. @Override
  67. RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
  68. return super.beforeExecute(source)
  69. }
  70. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  71. //秒级时间戳,groovy里面不让用system
  72. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  73. String dataSourceId = source.dataSourceId
  74. long supplierCode = source.supplierCode
  75. ERPTokenUser currentUser = source.currentUser
  76. JsonConvert orderConvertor = source.jsonConvertMap.get("orderConvertor")
  77. def jsonSlurper = new JsonSlurper()
  78. def invokeOrder = jsonSlurper.parseText(source.params)
  79. String incomePlatformOrderCode = invokeOrder["order_id"] as String
  80. String platformStoreId = invokeOrder["poi_id"] as String
  81. StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
  82. if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  83. if (storePlatform.enableStatue == 0) {
  84. logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
  85. return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
  86. }
  87. RMap searchParams = new RMap();
  88. searchParams.set("incomePlatformId", storePlatform.id)
  89. searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
  90. RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, null)
  91. if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
  92. BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
  93. esOrder.setOrderStatus(BusinessOrderStatus.accept.value)
  94. BusinessOrder.update(esOrder, currentUser.id)
  95. OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "商家接单完成", "[" + storePlatform.platformName + "]", currentUser)
  96. //持久化
  97. //订单主表
  98. BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
  99. UpdateRequestBuilder orderRequest = esClient.getClient().prepareUpdate(
  100. supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
  101. ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE,
  102. String.valueOf(esOrder.getId()))
  103. .setDoc(jsonBuilder()
  104. .startObject()
  105. .field("orderStatus", esOrder.orderStatus)
  106. .field("updateBy", esOrder.getUpdateBy())
  107. .field("updateTimeLong", esOrder.getUpdateTimeLong())
  108. .endObject())
  109. bulkRequest.add(orderRequest)
  110. //订单脚印
  111. IndexRequestBuilder orderStepRequest = esClient.getClient()
  112. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
  113. ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
  114. .setId(String.valueOf(orderStep.id))
  115. .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
  116. bulkRequest.add(orderStepRequest)
  117. BulkResponse bulkResponse = bulkRequest.get();
  118. orderDao = tunaService.generate(OrderDao.class)
  119. if (bulkResponse.hasFailures()) {
  120. logger.error("商户接单出错:" + bulkResponse.buildFailureMessage());
  121. return RetResult.<InvokeCallResult> errorT().retinfo("商户接单出错:" + esOrder.orderName);
  122. } else {
  123. logger.info("商户接单成功");
  124. //写数据库
  125. orderDao.acceptBusinessOrder(esOrder,
  126. [orderStep],
  127. dataSourceId,
  128. String.valueOf(supplierCode))
  129. return RetResult.<InvokeCallResult> successT().result(InvokeCallResult.success().data(jsonConvert.convertTo(esOrder)))
  130. }
  131. }
  132. }