BE_Order_ProcessRefund_Request.groovy 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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.DouyinService
  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.flycat.RefundRequestStatus
  11. import com.dderp.common.entity.base.InvokeCallParams
  12. import com.dderp.common.entity.base.InvokeCallResult
  13. import com.dderp.common.entity.order.BusinessOrder
  14. import com.dderp.common.entity.order.OrderAfterSaleBill
  15. import com.dderp.common.entity.order.OrderRefundRequest
  16. import com.dderp.common.entity.site.ERPTokenUser
  17. import com.dderp.common.entity.store.StorePlatform
  18. import com.dderp.common.tool.ERPUtils
  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.rex.RMap
  28. import javax.annotation.Resource
  29. import java.time.LocalDateTime
  30. import java.time.ZoneOffset
  31. @SuppressWarnings("unused")
  32. class BE_Order_ProcessRefund_Request implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  33. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  34. @Resource
  35. private JsonConvert jsonConvert
  36. @Resource
  37. private TableIdService tableIdService
  38. @Resource
  39. private StoreService storeService
  40. @Resource
  41. private ESClient esClient
  42. @Resource
  43. private SupplierInitService supplierInitService
  44. @Resource
  45. private OrderStepService orderStepService
  46. @Resource
  47. private OrderService orderService
  48. @Resource
  49. private OrderSearchService orderSearchService
  50. @Resource
  51. private DouyinService douyinService
  52. @Resource
  53. private TunaService tunaService
  54. private OrderDao orderDao
  55. @Override
  56. String scriptName() {
  57. return "商户同意/拒绝退款请求"
  58. }
  59. @Override
  60. ERPModule module() {
  61. return ERPModule.ORDER_API
  62. }
  63. @Override
  64. RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
  65. return super.beforeExecute(source)
  66. }
  67. /*
  68. params : {
  69. "idRefundRequest" : 2 , 客户退款申请id
  70. "approve" : 0 , 拒绝0同意1
  71. "rejectReasonCode" : "[101,102,103]" , 拒绝原因代码,注意这个括号不能少必须是数组形式
  72. "rejectMemo" : "拒绝原因备注" 拒绝原因备注
  73. }
  74. */
  75. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  76. //秒级时间戳,groovy里面不让用system
  77. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  78. String dataSourceId = source.dataSourceId
  79. long supplierCode = source.supplierCode
  80. ERPTokenUser currentUser = source.currentUser
  81. def jsonSlurper = new JsonSlurper()
  82. def invokeOrder = jsonSlurper.parseText(source.params)
  83. long idRefundRequest = invokeOrder["idRefundRequest"] as Long
  84. int approve = invokeOrder["approve"] as int
  85. String rejectReasonCode = invokeOrder["rejectReasonCode"] as String
  86. String rejectMemo = invokeOrder["rejectMemo"] as String
  87. //groovy 不能直接使用ERPUtils.PARAM_SEARCH_ID,要么直接用字符串,不知道下面的用法是否可以,需要测试一下
  88. RetResult<OrderRefundRequest> requestRetResult = orderSearchService.searchOrderRefundRequest(new RMap<>("${ERPUtils.PARAM_SEARCH_ID}": idRefundRequest),
  89. currentUser, dataSourceId, supplierCode, null)
  90. if (!requestRetResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(requestRetResult.retinfo)
  91. if (!(approve in [0, 1])) return RetResult.<InvokeCallResult> errorT().retinfo("传入状态非法")
  92. OrderRefundRequest refundRequest = requestRetResult.result
  93. /* 这部分还是在推送中完成
  94. OrderAfterSaleBill afterSaleBill
  95. def postBody
  96. if (approve == 0) {
  97. //拒绝退款
  98. refundRequest.setRequestStatus(RefundRequestStatus.refuse.value)
  99. refundRequest.setRefuseToRefundReasonCodes(rejectReasonCode)
  100. refundRequest.setRefuseToRefundMemo(rejectMemo)
  101. OrderRefundRequest.update(refundRequest, currentUser.id)
  102. postBody = [
  103. after_sale_id: refundRequest.outAfterSaleId,
  104. is_approved : false,
  105. reject_reason: [
  106. reason_code: rejectReasonCode,
  107. desc : rejectMemo
  108. ]
  109. ]
  110. } else if (approve == 1) {
  111. //同意退款
  112. afterSaleBill = OrderAfterSaleBill.buildFromRefundRequest(refundRequest)
  113. afterSaleBill.setId(tableIdService.getTableIdMulti("deOrderAfterSaleBill.id", 1, dataSourceId, String.valueOf(supplierCode)))
  114. afterSaleBill.setBillCode(tableIdService.getTableCodeMulti("deOrderAfterSaleBill.code", dataSourceId, String.valueOf(supplierCode)))
  115. OrderAfterSaleBill.create(afterSaleBill, currentUser.id)
  116. }
  117. */
  118. //根据订单来源平台,回调平台的接单接口
  119. switch (refundRequest.platformCode) {
  120. case "DYLK": {
  121. //抖音来客
  122. def postBody = [
  123. after_sale_id: refundRequest.outAfterSaleId,
  124. is_approved : approve == 1,
  125. reject_reason: {
  126. if (approve == 0) {
  127. [
  128. reason_code: rejectReasonCode,
  129. desc : rejectMemo
  130. ]
  131. }
  132. }
  133. ]
  134. String responseStr = douyinService.postInvoker("/goodlife/v1/after_sale/audit/notify/", jsonConvert.convertTo(postBody))
  135. def response = jsonSlurper.parseText(responseStr)
  136. if (response["extra"]["error_code"] as Integer == 0) {
  137. return RetResult.<InvokeCallResult> successT()
  138. } else {
  139. //todo 抖音侧调用失败,怎么处理?
  140. logger.error("[抖音来客]商户接单平台接口调用失败:" + response["extra"]["description"] as String)
  141. return RetResult.<InvokeCallResult> errorT().retinfo("[抖音来客]商户接单平台接口调用失败:" + response["extra"]["description"] as String)
  142. }
  143. }
  144. }
  145. return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  146. }
  147. }