BE_Order_ProcessRefund_Request.groovy 8.6 KB

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