BE_Order_ProcessRefund_DYLK.groovy 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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.entity.base.InvokeCallParams
  13. import com.dderp.common.entity.base.InvokeCallResult
  14. import com.dderp.common.entity.order.OrderAfterSaleBill
  15. import com.dderp.common.entity.order.OrderRefundRequest
  16. import com.dderp.common.entity.order.OrderStep
  17. import com.dderp.common.entity.site.ERPTokenUser
  18. import com.dderp.common.entity.store.StorePlatform
  19. import com.dySweetFishPlugin.elasticsearch.ESClient
  20. import com.dySweetFishPlugin.sql.TableIdService
  21. import com.dySweetFishPlugin.sql.dao.TunaService
  22. import com.sweetfish.convert.json.JsonConvert
  23. import com.sweetfish.service.RetResult
  24. import groovy.json.JsonSlurper
  25. import org.apache.logging.log4j.LogManager
  26. import org.apache.logging.log4j.Logger
  27. import org.elasticsearch.action.bulk.BulkRequestBuilder
  28. import org.elasticsearch.action.bulk.BulkResponse
  29. import org.elasticsearch.action.index.IndexRequestBuilder
  30. import org.elasticsearch.action.support.WriteRequest
  31. import org.elasticsearch.action.update.UpdateRequestBuilder
  32. import org.elasticsearch.common.xcontent.XContentType
  33. import org.rex.RMap
  34. import javax.annotation.Resource
  35. import java.time.LocalDateTime
  36. import java.time.ZoneOffset
  37. import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
  38. @SuppressWarnings("unused")
  39. class BE_Order_ProcessRefund_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  40. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  41. @Resource
  42. private JsonConvert jsonConvert
  43. @Resource
  44. private TableIdService tableIdService
  45. @Resource
  46. private StoreService storeService
  47. @Resource
  48. private ESClient esClient
  49. @Resource
  50. private SupplierInitService supplierInitService
  51. @Resource
  52. private OrderStepService orderStepService
  53. @Resource
  54. private OrderService orderService
  55. @Resource
  56. private OrderSearchService orderSearchService
  57. @Resource
  58. private TunaService tunaService
  59. private OrderDao orderDao
  60. @Override
  61. String scriptName() {
  62. return "商户同意/拒绝退款请求"
  63. }
  64. @Override
  65. ERPModule module() {
  66. return ERPModule.ORDER_API
  67. }
  68. @Override
  69. RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
  70. return super.beforeExecute(source)
  71. }
  72. /*
  73. params : {
  74. "idRefundRequest" : 2 , 客户退款申请id
  75. "approve" : 0 , 拒绝0同意1
  76. "rejectReasonCode" : "[101,102,103]" , 拒绝原因代码,注意这个括号不能少必须是数组形式
  77. "rejectMemo" : "拒绝原因备注" 拒绝原因备注
  78. }
  79. */
  80. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  81. //秒级时间戳,groovy里面不让用system
  82. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  83. String dataSourceId = source.dataSourceId
  84. long supplierCode = source.supplierCode
  85. ERPTokenUser currentUser = source.currentUser
  86. def jsonSlurper = new JsonSlurper()
  87. def invokeOrder = jsonSlurper.parseText(source.params)
  88. String incomePlatformOrderCode = invokeOrder["order_id"] as String
  89. String platformStoreId = invokeOrder["poi_id"] as String
  90. String outAfterSaleId = invokeOrder["after_sale_id"] as String
  91. boolean pass = invokeOrder["pass"] as boolean
  92. StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
  93. if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  94. if (storePlatform.enableStatue == 0) {
  95. logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
  96. return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
  97. }
  98. //
  99. // RMap searchParams = new RMap();
  100. // searchParams.set("incomePlatformId", platformStoreId)
  101. // searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
  102. //
  103. // RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, null)
  104. // if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
  105. //
  106. // BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
  107. RMap searchParams = new RMap()
  108. searchParams.set("outAfterSaleId", outAfterSaleId)
  109. RetResult<List<OrderRefundRequest>> requestRetResult = orderSearchService.searchOrderRefundRequestList(searchParams,
  110. currentUser, dataSourceId, supplierCode, null)
  111. if (!requestRetResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(requestRetResult.retinfo)
  112. OrderRefundRequest refundRequest = requestRetResult.result.get(0) //这么查只可能有一个
  113. OrderAfterSaleBill afterSaleBill
  114. if (!pass) {
  115. //拒绝退款
  116. def codeList = (invokeOrder["refuse_audit_reasons"] as ArrayList).collect { it["code"] as int }
  117. def msgList = (invokeOrder["refuse_audit_reasons"] as ArrayList).collect { it["msg"] as String }
  118. refundRequest.setRequestStatus(RefundRequestStatus.refuse.value)
  119. refundRequest.setRefuseToRefundReasonCodes(jsonConvert.convertTo(codeList))
  120. refundRequest.setRefuseToRefundMemo(jsonConvert.convertTo(msgList))
  121. OrderRefundRequest.update(refundRequest, currentUser.id)
  122. } else {
  123. //同意退款
  124. refundRequest.setRequestStatus(RefundRequestStatus.agree.value)
  125. OrderRefundRequest.update(refundRequest, currentUser.id)
  126. afterSaleBill = OrderAfterSaleBill.buildFromRefundRequest(refundRequest)
  127. afterSaleBill.setId(tableIdService.getTableIdMulti("deOrderAfterSaleBill.id", 1, dataSourceId, String.valueOf(supplierCode)))
  128. afterSaleBill.setBillCode(tableIdService.getTableCodeMulti("deOrderAfterSaleBill.code", dataSourceId, String.valueOf(supplierCode)))
  129. OrderAfterSaleBill.create(afterSaleBill, currentUser.id)
  130. }
  131. OrderStep orderStep = orderStepService.parseOrderStep(refundRequest.idOrder, "[" + refundRequest.platformName + "]商家已" +
  132. pass ? "同意" : "拒绝" + "退款", pass ? "" : refundRequest.refuseToRefundMemo, currentUser)
  133. //持久化
  134. //订单退款申请
  135. BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
  136. UpdateRequestBuilder refundQueryRequest = esClient.getClient().prepareUpdate(
  137. supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_INDEX, 0),
  138. ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_TYPE,
  139. String.valueOf(refundRequest.getId()))
  140. .setDoc(jsonBuilder()
  141. .startObject()
  142. .field("requestStatus", refundRequest.requestStatus)
  143. .field("updateBy", refundRequest.getUpdateBy())
  144. .field("updateTimeLong", refundRequest.getUpdateTimeLong())
  145. .endObject())
  146. bulkRequest.add(refundQueryRequest)
  147. //订单售后单,只有同意退款才写
  148. if (afterSaleBill) {
  149. IndexRequestBuilder afterSaleRequest = esClient.getClient()
  150. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
  151. ESKeys.ES_DELIVER_ORDER_AFTER_SALE_BILL_TYPE)
  152. .setId(String.valueOf(afterSaleBill.id))
  153. .setParent(String.valueOf(afterSaleBill.idOrder))
  154. .setSource(jsonConvert.convertTo(afterSaleBill), XContentType.JSON)
  155. bulkRequest.add(afterSaleRequest)
  156. }
  157. //订单脚印
  158. IndexRequestBuilder orderStepRequest = esClient.getClient()
  159. .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
  160. ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
  161. .setId(String.valueOf(orderStep.id))
  162. .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
  163. bulkRequest.add(orderStepRequest)
  164. BulkResponse bulkResponse = bulkRequest.get();
  165. orderDao = tunaService.generate(OrderDao.class)
  166. if (bulkResponse.hasFailures()) {
  167. logger.error("商户已同意/拒绝退款出错:" + bulkResponse.buildFailureMessage());
  168. return RetResult.<InvokeCallResult> errorT().retinfo("商户已同意/拒绝退款出错:" + refundRequest.orderName);
  169. } else {
  170. logger.info("商户已同意/拒绝退款成功");
  171. //写数据库
  172. List<OrderAfterSaleBill> afterSaleBillList = new ArrayList<>()
  173. if (afterSaleBill) afterSaleBillList.add(afterSaleBill)
  174. orderDao.processRefundOrder(refundRequest,
  175. afterSaleBillList,
  176. [orderStep],
  177. dataSourceId,
  178. String.valueOf(supplierCode))
  179. return RetResult.<InvokeCallResult> successT()
  180. }
  181. }
  182. }