BE_Order_UserRefundRequest_DYLK.groovy 8.8 KB

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