| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- import com.dderp.business.dao.OrderDao
- import com.dderp.common.api.BusinessExecutor
- import com.dderp.common.api.StoreService
- import com.dderp.common.api.SupplierInitService
- import com.dderp.common.api.flycat.IncomePlatformService
- import com.dderp.common.api.flycat.OrderSearchService
- import com.dderp.common.api.flycat.OrderService
- import com.dderp.common.api.flycat.OrderStepService
- import com.dderp.common.datas.TokenUserFrom
- import com.dderp.common.datas.flycat.BusinessOrderStatus
- import com.dderp.common.datas.ERPModule
- import com.dderp.common.entity.base.InvokeCallParams
- import com.dderp.common.entity.base.InvokeCallResult
- import com.dderp.common.entity.order.BusinessOrder
- import com.dderp.common.entity.site.ERPTokenUser
- import com.dderp.common.entity.store.StorePlatform
- import com.dySweetFishPlugin.elasticsearch.ESClient
- import com.dySweetFishPlugin.sql.TableIdService
- import com.dySweetFishPlugin.sql.dao.TunaService
- import com.sweetfish.convert.json.JsonConvert
- import com.sweetfish.service.RetResult
- import groovy.json.JsonSlurper
- import org.apache.logging.log4j.LogManager
- import org.apache.logging.log4j.Logger
- import javax.annotation.Resource
- import java.time.LocalDateTime
- import java.time.ZoneOffset
- @SuppressWarnings("unused")
- class BE_Order_StoreCancelOrder_Request implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
- private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
- @Resource
- private JsonConvert jsonConvert
- @Resource
- private TableIdService tableIdService
- @Resource
- private StoreService storeService
- @Resource
- private ESClient esClient
- @Resource
- private SupplierInitService supplierInitService
- @Resource
- private OrderStepService orderStepService
- @Resource
- private OrderService orderService
- @Resource
- private OrderSearchService orderSearchService
- @Resource
- private IncomePlatformService douyinService
- @Resource(name = "APP_HOME")
- private String appHome
- @Resource
- private TunaService tunaService
- private OrderDao orderDao
- @Override
- String scriptName() {
- return "商户发起取消订单"
- }
- @Override
- ERPModule module() {
- return ERPModule.ORDER_API
- }
- @Override
- RetResult<InvokeCallParams> checkExecute(InvokeCallParams source) {
- String dataSourceId = source.dataSourceId
- long supplierCode = source.supplierCode
- ERPTokenUser currentUser = source.currentUser
- def jsonSlurper = new JsonSlurper()
- def invokeOrder = jsonSlurper.parseText(source.params)
- long idOrder = invokeOrder["idOrder"] as Long
- RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(idOrder, currentUser, dataSourceId, supplierCode, null)
- if (!orderResult.isSuccess()) return RetResult.<InvokeCallParams> errorT().retinfo(orderResult.retinfo)
- BusinessOrder esOrder = orderResult.result
- if ((source.currentUser.userFrom == TokenUserFrom.APP_STORE_ADMIN.value) || (source.currentUser.userFrom == TokenUserFrom.PC_STORE_ADMIN.value)) {
- if (esOrder.idStore != source.currentUser.idBindOrg) {
- return RetResult.<InvokeCallParams> errorT().retinfo("无效的订单信息")
- }
- }
- return super.checkExecute(source)
- }
- @Override
- RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
- return super.beforeExecute(source)
- }
- //params:{idOrder:xxx, refundReason:[501,502], description:"超出配送范围"}
- RetResult<InvokeCallResult> execute(InvokeCallParams source) {
- //秒级时间戳,groovy里面不让用system
- long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
- String dataSourceId = source.dataSourceId
- long supplierCode = source.supplierCode
- ERPTokenUser currentUser = source.currentUser
- def jsonSlurper = new JsonSlurper()
- def invokeOrder = jsonSlurper.parseText(source.params)
- long idOrder = invokeOrder["idOrder"] as Long
- RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(idOrder, currentUser, dataSourceId, supplierCode, null)
- if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
- def refundCodeJsonFile = new File(appHome + File.separator +
- "conf" + File.separator +
- "script" + File.separator +
- supplierCode + File.separator +
- "scriptFiles" + File.separator +
- "refundOrderReasonIn_DYLK.json")
- def refundCodeArray = jsonSlurper.parse(refundCodeJsonFile)
- BusinessOrder esOrder = orderResult.result
- esOrder.orderStatus >= BusinessOrderStatus.orderComplete.value
- return RetResult.<InvokeCallResult> errorT().retinfo("订单已完成,不允许发起退单")
- def legalReasons = (refundCodeArray.find { it["orderStatus"] == esOrder.orderStatus })["refundReason"] as ArrayList
- for (Integer reason in invokeOrder["refundReason"] as ArrayList<Integer>) {
- if (legalReasons.find { it["code"] as Integer == reason } == null) {
- return RetResult.<InvokeCallResult> errorT().retinfo("订单状态[" + BusinessOrderStatus.getName(esOrder.orderStatus) +
- "],不允许以[" + reason + "]取消订单")
- }
- }
- StorePlatform storePlatform = storeService.getStorePlatformInfo(esOrder.incomePlatformId, supplierCode)
- if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
- //todo 判断订单目前状态,如果已生成配送单据,则要同步将配送单据取消
- //根据订单来源平台,回调平台的接单接口
- switch (storePlatform.platformCode) {
- case "DYLK": {
- //抖音来客
- def postBody = [
- order_id : esOrder.incomePlatformOrderCode,
- refund_reason: [
- reason_code: invokeOrder["refundReason"],
- desc : invokeOrder["description"]
- ]
- ]
- String responseStr = douyinService.dyPostInvoker("/goodlife/v1/after_sale/order/apply_refund/", jsonConvert.convertTo(postBody))
- def response = jsonSlurper.parseText(responseStr)
- if (response["extra"]["error_code"] as Integer == 0) {
- return RetResult.<InvokeCallResult>successT()
- } else {
- //todo 抖音侧调用失败,怎么处理?
- logger.error("[抖音来客]商户发起退单接口调用失败:" + response["extra"]["description"] as String)
- return RetResult.<InvokeCallResult>errorT().retinfo("[抖音来客]商户发起退单接口调用失败:" + response["extra"]["description"] as String)
- }
- }
- }
- return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
- }
- }
|