BE_Order_StoreCancelOrder_Request.groovy 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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.flycat.BusinessOrderStatus
  10. import com.dderp.common.datas.ERPModule
  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.site.ERPTokenUser
  15. import com.dderp.common.entity.store.StorePlatform
  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 javax.annotation.Resource
  25. import java.time.LocalDateTime
  26. import java.time.ZoneOffset
  27. @SuppressWarnings("unused")
  28. class BE_Order_StoreCancelOrder_Request implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  29. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  30. @Resource
  31. private JsonConvert jsonConvert
  32. @Resource
  33. private TableIdService tableIdService
  34. @Resource
  35. private StoreService storeService
  36. @Resource
  37. private ESClient esClient
  38. @Resource
  39. private SupplierInitService supplierInitService
  40. @Resource
  41. private OrderStepService orderStepService
  42. @Resource
  43. private OrderService orderService
  44. @Resource
  45. private OrderSearchService orderSearchService
  46. @Resource
  47. private IncomePlatformService douyinService
  48. @Resource(name = "APP_HOME")
  49. private String appHome
  50. @Resource
  51. private TunaService tunaService
  52. private OrderDao orderDao
  53. @Override
  54. String scriptName() {
  55. return "商户发起取消订单"
  56. }
  57. @Override
  58. ERPModule module() {
  59. return ERPModule.ORDER_API
  60. }
  61. @Override
  62. RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
  63. return super.beforeExecute(source)
  64. }
  65. //params:{idOrder:xxx, refundReason:[501,502], description:"超出配送范围"}
  66. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  67. //秒级时间戳,groovy里面不让用system
  68. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  69. String dataSourceId = source.dataSourceId
  70. long supplierCode = source.supplierCode
  71. ERPTokenUser currentUser = source.currentUser
  72. def jsonSlurper = new JsonSlurper()
  73. def invokeOrder = jsonSlurper.parseText(source.params)
  74. long idOrder = invokeOrder["idOrder"] as Long
  75. RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(idOrder, currentUser, dataSourceId, supplierCode, null)
  76. if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
  77. def refundCodeJsonFile = new File(appHome + File.separator +
  78. "conf" + File.separator +
  79. "script" + File.separator +
  80. supplierCode + File.separator +
  81. "scriptFiles" + File.separator +
  82. "refundOrderReasonIn_DYLK.json")
  83. def refundCodeArray = jsonSlurper.parse(refundCodeJsonFile)
  84. BusinessOrder esOrder = orderResult.result
  85. esOrder.orderStatus >= BusinessOrderStatus.orderComplete.value
  86. return RetResult.<InvokeCallResult> errorT().retinfo("订单已完成,不允许发起退单")
  87. def legalReasons = (refundCodeArray.find { it["orderStatus"] == esOrder.orderStatus })["refundReason"] as ArrayList
  88. for (Integer reason in invokeOrder["refundReason"] as ArrayList<Integer>) {
  89. if (legalReasons.find { it["code"] as Integer == reason } == null) {
  90. return RetResult.<InvokeCallResult> errorT().retinfo("订单状态[" + BusinessOrderStatus.getName(esOrder.orderStatus) +
  91. "],不允许以[" + reason + "]取消订单")
  92. }
  93. }
  94. StorePlatform storePlatform = storeService.getStorePlatformInfo(esOrder.incomePlatformId, supplierCode)
  95. if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  96. //todo 判断订单目前状态,如果已生成配送单据,则要同步将配送单据取消
  97. //根据订单来源平台,回调平台的接单接口
  98. switch (storePlatform.platformCode) {
  99. case "DYLK": {
  100. //抖音来客
  101. def postBody = [
  102. order_id : esOrder.incomePlatformOrderCode,
  103. refund_reason: [
  104. reason_code: invokeOrder["refundReason"],
  105. desc : invokeOrder["description"]
  106. ]
  107. ]
  108. String responseStr = douyinService.dyPostInvoker("/goodlife/v1/after_sale/order/apply_refund/", jsonConvert.convertTo(postBody))
  109. def response = jsonSlurper.parseText(responseStr)
  110. if (response["extra"]["error_code"] as Integer == 0) {
  111. return RetResult.<InvokeCallResult>successT()
  112. } else {
  113. //todo 抖音侧调用失败,怎么处理?
  114. logger.error("[抖音来客]商户发起退单接口调用失败:" + response["extra"]["description"] as String)
  115. return RetResult.<InvokeCallResult>errorT().retinfo("[抖音来客]商户发起退单接口调用失败:" + response["extra"]["description"] as String)
  116. }
  117. }
  118. }
  119. return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  120. }
  121. }