BE_Order_CompleteOrder_DYLK.groovy 6.7 KB

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