BE_Order_RejectOrder_DYLK.groovy 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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.IncomePlatformService
  6. import com.dderp.common.api.flycat.OrderSearchService
  7. import com.dderp.common.api.flycat.OrderService
  8. import com.dderp.common.api.flycat.OrderStepService
  9. import com.dderp.common.datas.ReadOrderOption
  10. import com.dderp.common.datas.flycat.BusinessOrderStatus
  11. import com.dderp.common.datas.ERPModule
  12. import com.dderp.common.datas.ESKeys
  13. import com.dderp.common.datas.flycat.PlatformType
  14. import com.dderp.common.datas.flycat.VoidFlagStatus
  15. import com.dderp.common.entity.base.InvokeCallParams
  16. import com.dderp.common.entity.base.InvokeCallResult
  17. import com.dderp.common.entity.order.BusinessOrder
  18. import com.dderp.common.entity.order.OrderAfterSaleBill
  19. import com.dderp.common.entity.order.OrderFinances
  20. import com.dderp.common.entity.order.OrderStep
  21. import com.dderp.common.entity.site.ERPTokenUser
  22. import com.dderp.common.entity.store.StorePlatform
  23. import com.dySweetFishPlugin.elasticsearch.ESClient
  24. import com.dySweetFishPlugin.sql.TableIdService
  25. import com.dySweetFishPlugin.sql.dao.TunaService
  26. import com.sweetfish.convert.json.JsonConvert
  27. import com.sweetfish.service.RetResult
  28. import groovy.json.JsonSlurper
  29. import org.apache.logging.log4j.LogManager
  30. import org.apache.logging.log4j.Logger
  31. import org.elasticsearch.action.bulk.BulkRequestBuilder
  32. import org.elasticsearch.action.bulk.BulkResponse
  33. import org.elasticsearch.action.index.IndexRequestBuilder
  34. import org.elasticsearch.action.support.WriteRequest
  35. import org.elasticsearch.action.update.UpdateRequestBuilder
  36. import org.elasticsearch.common.xcontent.XContentType
  37. import org.rex.RMap
  38. import javax.annotation.Resource
  39. import java.time.LocalDateTime
  40. import java.time.ZoneOffset
  41. import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
  42. @SuppressWarnings("unused")
  43. class BE_Order_RejectOrder_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  44. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  45. @Resource
  46. private JsonConvert jsonConvert
  47. @Resource
  48. private TableIdService tableIdService
  49. @Resource
  50. private StoreService storeService
  51. @Resource
  52. private ESClient esClient
  53. @Resource
  54. private SupplierInitService supplierInitService
  55. @Resource
  56. private OrderStepService orderStepService
  57. @Resource
  58. private OrderService orderService
  59. @Resource
  60. private OrderSearchService orderSearchService
  61. @Resource
  62. private IncomePlatformService douyinService
  63. @Resource
  64. private TunaService tunaService
  65. private OrderDao orderDao
  66. @Override
  67. String scriptName() {
  68. return "[抖音来客]商户拒单"
  69. }
  70. @Override
  71. ERPModule module() {
  72. return ERPModule.ORDER_API
  73. }
  74. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  75. //秒级时间戳,groovy里面不让用system
  76. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  77. String dataSourceId = source.dataSourceId
  78. long supplierCode = source.supplierCode
  79. ERPTokenUser currentUser = source.currentUser
  80. def jsonSlurper = new JsonSlurper()
  81. def invokeOrder = jsonSlurper.parseText(source.params)
  82. String incomePlatformOrderCode = invokeOrder["order_id"] as String
  83. String platformStoreId = invokeOrder["poi_id"] as String
  84. StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
  85. if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  86. if (storePlatform.enableStatue == 0) {
  87. logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
  88. return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
  89. }
  90. RMap searchParams = new RMap();
  91. searchParams.set("incomePlatformId", storePlatform.id)
  92. searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
  93. RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId,
  94. supplierCode, ReadOrderOption.ORDER_PRODUCT, ReadOrderOption.ORDER_FINANCES)
  95. if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
  96. BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
  97. OrderFinances orderFinances = esOrder.orderFinances
  98. if (esOrder.orderStatus != BusinessOrderStatus.init.value)
  99. return RetResult.<InvokeCallResult> errorT().retinfo("订单状态[" +
  100. BusinessOrderStatus.getName(esOrder.orderStatus) + "],不允许拒单操作")
  101. //todo 目前不知道商户拒单是个什么逻辑,暂且认为等同于订单取消
  102. // esOrder.setOrderStatus(BusinessOrderStatus.accept.value)
  103. esOrder.setVoidFlagIn(VoidFlagStatus.invalid.value)
  104. BusinessOrder.update(esOrder, currentUser.id)
  105. OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id,
  106. "商家拒绝接单" , "[" + storePlatform.platformName + "] 原因: " + invokeOrder["description"], currentUser)
  107. OrderAfterSaleBill afterSaleBill = new OrderAfterSaleBill()
  108. afterSaleBill.setId(tableIdService.getTableIdMulti("deOrderAfterSaleBill.id", 1, dataSourceId, String.valueOf(supplierCode)))
  109. afterSaleBill.setIdOrder(esOrder.id)
  110. afterSaleBill.setIdStorePlatform(storePlatform.id)
  111. afterSaleBill.setIdStore(storePlatform.idStore)
  112. afterSaleBill.setOutPlatformStoreId(storePlatform.platformStoreId)
  113. afterSaleBill.setPlatformCode(storePlatform.platformCode)
  114. afterSaleBill.setPlatformType(storePlatform.platformType)
  115. afterSaleBill.setPlatformName(storePlatform.platformName)
  116. afterSaleBill.setBillCode(tableIdService.getTableCodeMulti("deOrderAfterSaleBill.code", dataSourceId, String.valueOf(supplierCode)))
  117. afterSaleBill.setApplySource("MERCHANT")//拒单只能是商户发起
  118. afterSaleBill.setFullRefunded(true)
  119. afterSaleBill.setUserRefundAmount((orderFinances.customerPaid * 100).intValue())
  120. afterSaleBill.setTotalUserRefundAmount((orderFinances.customerPaid * 100).intValue())
  121. afterSaleBill.setProdCountAfterRefund(0)
  122. afterSaleBill.setProductsRemainDetail("")
  123. afterSaleBill.setProductsRefundDetail(jsonConvert.convertTo(esOrder.detailItemList))
  124. OrderAfterSaleBill.create(afterSaleBill, currentUser.id)
  125. //持久化
  126. //订单主表
  127. BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
  128. UpdateRequestBuilder orderRequest = esClient.getClient().prepareUpdate(
  129. supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
  130. ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE,
  131. String.valueOf(esOrder.getId()))
  132. .setDoc(jsonBuilder()
  133. .startObject()
  134. .field("voidFlagIn", esOrder.voidFlagIn)
  135. .field("updateBy", esOrder.getUpdateBy())
  136. .field("updateTimeLong", esOrder.getUpdateTimeLong())
  137. .endObject())
  138. bulkRequest.add(orderRequest)
  139. //订单售后单
  140. IndexRequestBuilder orderAfterBillRequest = esClient.getClient()
  141. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
  142. ESKeys.ES_DELIVER_ORDER_AFTER_SALE_BILL_TYPE)
  143. .setId(String.valueOf(afterSaleBill.id))
  144. .setParent(String.valueOf(afterSaleBill.idOrder))
  145. .setSource(jsonConvert.convertTo(afterSaleBill), XContentType.JSON)
  146. bulkRequest.add(orderAfterBillRequest)
  147. //订单脚印
  148. IndexRequestBuilder orderStepRequest = esClient.getClient()
  149. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
  150. ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
  151. .setId(String.valueOf(orderStep.id))
  152. .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
  153. bulkRequest.add(orderStepRequest)
  154. BulkResponse bulkResponse = bulkRequest.get();
  155. orderDao = tunaService.generate(OrderDao.class)
  156. if (bulkResponse.hasFailures()) {
  157. logger.error("商户拒绝接单出错:" + bulkResponse.buildFailureMessage());
  158. return RetResult.<InvokeCallResult> errorT().retinfo("商户拒绝接单出错:" + esOrder.orderName);
  159. } else {
  160. logger.info("商户拒绝接单成功");
  161. //写数据库
  162. orderDao.voidBusinessOrderIn(esOrder,
  163. afterSaleBill,
  164. [orderStep],
  165. dataSourceId,
  166. String.valueOf(supplierCode))
  167. return RetResult.<InvokeCallResult> successT().result(InvokeCallResult.success().data(jsonConvert.convertTo(esOrder)))
  168. }
  169. }
  170. }