BE_Order_UserRefundRequest_DYLK.groovy 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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.PlatformType
  11. import com.dderp.common.datas.flycat.RefundRequestStatus
  12. import com.dderp.common.datas.flycat.VoidFlagStatus
  13. import com.dderp.common.entity.base.InvokeCallParams
  14. import com.dderp.common.entity.base.InvokeCallResult
  15. import com.dderp.common.entity.order.BusinessOrder
  16. import com.dderp.common.entity.order.OrderRefundRequest
  17. import com.dderp.common.entity.order.OrderStep
  18. import com.dderp.common.entity.site.ERPTokenUser
  19. import com.dderp.common.entity.store.StorePlatform
  20. import com.dySweetFishPlugin.elasticsearch.ESClient
  21. import com.dySweetFishPlugin.sql.TableIdService
  22. import com.dySweetFishPlugin.sql.dao.TunaService
  23. import com.sweetfish.convert.json.JsonConvert
  24. import com.sweetfish.service.RetResult
  25. import groovy.json.JsonSlurper
  26. import org.apache.logging.log4j.LogManager
  27. import org.apache.logging.log4j.Logger
  28. import org.elasticsearch.action.bulk.BulkRequestBuilder
  29. import org.elasticsearch.action.bulk.BulkResponse
  30. import org.elasticsearch.action.index.IndexRequestBuilder
  31. import org.elasticsearch.action.support.WriteRequest
  32. import org.elasticsearch.action.update.UpdateRequestBuilder
  33. import org.elasticsearch.common.xcontent.XContentType
  34. import org.rex.RMap
  35. import javax.annotation.Resource
  36. import java.time.LocalDateTime
  37. import java.time.ZoneOffset
  38. import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
  39. @SuppressWarnings("unused")
  40. class BE_Order_UserRefundRequest_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  41. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  42. @Resource
  43. private JsonConvert jsonConvert
  44. @Resource
  45. private TableIdService tableIdService
  46. @Resource
  47. private StoreService storeService
  48. @Resource
  49. private ESClient esClient
  50. @Resource
  51. private SupplierInitService supplierInitService
  52. @Resource
  53. private OrderStepService orderStepService
  54. @Resource
  55. private OrderService orderService
  56. @Resource
  57. private OrderSearchService orderSearchService
  58. @Resource
  59. private TunaService tunaService
  60. private OrderDao orderDao
  61. @Override
  62. String scriptName() {
  63. return "[抖音来客]客户退款申请"
  64. }
  65. @Override
  66. ERPModule module() {
  67. return ERPModule.ORDER_API
  68. }
  69. @Override
  70. RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
  71. return super.beforeExecute(source)
  72. }
  73. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  74. //秒级时间戳,groovy里面不让用system
  75. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  76. String dataSourceId = source.dataSourceId
  77. long supplierCode = source.supplierCode
  78. ERPTokenUser currentUser = source.currentUser
  79. def jsonSlurper = new JsonSlurper()
  80. def invokeOrder = jsonSlurper.parseText(source.params)
  81. String incomePlatformOrderCode = invokeOrder["order_id"] as String
  82. String platformStoreId = invokeOrder["poi_id"] as String
  83. StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
  84. if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  85. if (storePlatform.enableStatue == 0) {
  86. logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
  87. return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
  88. }
  89. RMap searchParams = new RMap();
  90. searchParams.set("incomePlatformId", storePlatform.id)
  91. searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
  92. RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, null)
  93. if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
  94. BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
  95. //构造订单退款申请
  96. OrderRefundRequest refundRequest = new OrderRefundRequest()
  97. refundRequest.setId(tableIdService.getTableIdMulti("deOrderRefundRequest.id", 1, dataSourceId, String.valueOf(supplierCode)))
  98. refundRequest.setIdOrder(esOrder.id)
  99. refundRequest.setIdStore(esOrder.idStore)
  100. refundRequest.setIdStorePlatform(storePlatform.id)
  101. refundRequest.setOutPlatformStoreId(storePlatform.platformStoreId)
  102. refundRequest.setPlatformCode(storePlatform.platformCode)
  103. refundRequest.setPlatformType(storePlatform.platformType)
  104. refundRequest.setPlatformName(storePlatform.platformName)
  105. refundRequest.setOutAfterSaleId(invokeOrder["after_sale_id"] as String)
  106. refundRequest.setRequestStatus(RefundRequestStatus.init.value)
  107. refundRequest.setRefundReasonCodes(invokeOrder["refund_reason"]["reason_code"] as String)
  108. refundRequest.setUserRefundMemo(invokeOrder["refund_reason"]["desc"] as String)
  109. refundRequest.setRefundType(invokeOrder["refund_type"] as int)
  110. refundRequest.setDeliveryFee(invokeOrder["delivery_fee"] as int)
  111. refundRequest.setRefundFee(invokeOrder["refund_fee"] as int)
  112. refundRequest.setRefundProdCount(invokeOrder["refund_count"] as int)
  113. refundRequest.setRefundProductsDetail(invokeOrder["product_detail"] as String)
  114. OrderRefundRequest.create(refundRequest, currentUser.id)
  115. esOrder.setVoidFlagIn(VoidFlagStatus.requestRefund.value)
  116. BusinessOrder.update(esOrder, currentUser.id)
  117. OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "用户申请退款",
  118. "[" + storePlatform.platformName + "]原因: " + refundRequest.userRefundMemo, currentUser)
  119. //持久化
  120. //订单主表
  121. BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
  122. UpdateRequestBuilder orderRequest = esClient.getClient().prepareUpdate(
  123. supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
  124. ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE,
  125. String.valueOf(esOrder.getId()))
  126. .setDoc(jsonBuilder()
  127. .startObject()
  128. .field("voidFlagIn", esOrder.voidFlagIn)
  129. .field("updateBy", esOrder.getUpdateBy())
  130. .field("updateTimeLong", esOrder.getUpdateTimeLong())
  131. .endObject())
  132. bulkRequest.add(orderRequest)
  133. //订单退款申请
  134. IndexRequestBuilder refundQueryRequest = esClient.getClient()
  135. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_INDEX, 0),
  136. ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_TYPE)
  137. .setId(String.valueOf(refundRequest.id))
  138. .setSource(jsonConvert.convertTo(refundRequest), XContentType.JSON)
  139. bulkRequest.add(refundQueryRequest)
  140. //订单脚印
  141. IndexRequestBuilder orderStepRequest = esClient.getClient()
  142. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
  143. ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
  144. .setId(String.valueOf(orderStep.id))
  145. .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
  146. bulkRequest.add(orderStepRequest)
  147. BulkResponse bulkResponse = bulkRequest.get();
  148. orderDao = tunaService.generate(OrderDao.class)
  149. if (bulkResponse.hasFailures()) {
  150. logger.error("客户申请退款出错:" + bulkResponse.buildFailureMessage());
  151. return RetResult.<InvokeCallResult> errorT().retinfo("客户申请退款出错:" + esOrder.orderName);
  152. } else {
  153. logger.info("客户申请退款成功");
  154. //写数据库
  155. orderDao.requestRefundOrder(esOrder,
  156. refundRequest,
  157. [orderStep],
  158. dataSourceId,
  159. String.valueOf(supplierCode))
  160. return RetResult.<InvokeCallResult> successT()
  161. }
  162. }
  163. }