|
|
@@ -0,0 +1,129 @@
|
|
|
+import com.alibaba.fastjson2.JSON
|
|
|
+import com.dderp.common.api.BusinessExecutor
|
|
|
+import com.dderp.common.api.ERPLockDataService
|
|
|
+import com.dderp.common.datas.ERPModule
|
|
|
+import com.dderp.common.datas.RedisKeys
|
|
|
+import com.dderp.common.entity.base.InvokeCallParams
|
|
|
+import com.dderp.common.entity.base.InvokeCallResult
|
|
|
+import com.dderp.common.entity.base.ProcessStringItem
|
|
|
+import com.dderp.common.entity.express.SFCreateOrderResult
|
|
|
+import com.dderp.common.entity.store.StoreInfo
|
|
|
+import com.dderp.common.entity.store.StorePlatformRequire
|
|
|
+import com.dderp.common.http.HttpTools
|
|
|
+import com.dySweetFishPlugin.sql.dao.OperatorWait
|
|
|
+import com.sweetfish.service.RetResult
|
|
|
+import groovy.json.JsonSlurper
|
|
|
+import org.apache.commons.lang3.StringUtils
|
|
|
+import org.apache.logging.log4j.LogManager
|
|
|
+import org.apache.logging.log4j.Logger
|
|
|
+
|
|
|
+import javax.annotation.Resource
|
|
|
+import java.nio.charset.StandardCharsets
|
|
|
+import java.time.LocalDateTime
|
|
|
+import java.time.ZoneOffset
|
|
|
+import java.util.concurrent.CompletableFuture
|
|
|
+import java.util.concurrent.ExecutionException
|
|
|
+import java.util.concurrent.TimeUnit
|
|
|
+import java.util.concurrent.TimeoutException
|
|
|
+
|
|
|
+class BE_Express_CancelOrder_SFTC implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
|
|
|
+
|
|
|
+ private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
|
|
|
+
|
|
|
+ @Resource(name = "property.sftc.appId")
|
|
|
+ long sfAppId
|
|
|
+
|
|
|
+ @Resource(name = "property.sftc.appKey")
|
|
|
+ String sfAppKey
|
|
|
+
|
|
|
+ @Resource(name = "property.sftc.apiUrl")
|
|
|
+ String sfApiUrl
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ ERPLockDataService lockDataService
|
|
|
+
|
|
|
+ @Override
|
|
|
+ String scriptName() {
|
|
|
+ return "顺丰同城取消订单"
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ ERPModule module() {
|
|
|
+ return ERPModule.EXPRESS_API
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ OperatorWait getAWait() {
|
|
|
+ return OperatorWait.ASNYC
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
|
|
|
+ //锁定下订单数据
|
|
|
+ def jsonSlurper = new JsonSlurper()
|
|
|
+ def invokeOrder = jsonSlurper.parseText(source.params)
|
|
|
+
|
|
|
+ String orderId = invokeOrder["orderId"] as String
|
|
|
+
|
|
|
+ //todo 获取订单信息
|
|
|
+ if (lockDataService.hLockAdd(orderId, RedisKeys.KEY_ERP_WORKING_ORDER, source.supplierCode) > 1) {
|
|
|
+ return RetResult.<InvokeCallParams> errorT().retinfo(orderId + "提交工作中,请稍后刷新即可,无需重复操作")
|
|
|
+ }
|
|
|
+ return RetResult.<InvokeCallParams> successT().result(source)
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ RetResult<InvokeCallParams> checkExecute(InvokeCallParams source) {
|
|
|
+ //检查订单信息
|
|
|
+ def jsonSlurper = new JsonSlurper()
|
|
|
+ def invokeOrder = jsonSlurper.parseText(source.params)
|
|
|
+
|
|
|
+ String orderId = invokeOrder["orderId"] as String
|
|
|
+ //todo 获取订单信息
|
|
|
+
|
|
|
+ return RetResult.<InvokeCallParams> successT().result(source)
|
|
|
+ }
|
|
|
+
|
|
|
+ RetResult<InvokeCallResult> execute(InvokeCallParams source) {
|
|
|
+ //todo
|
|
|
+
|
|
|
+ def jsonSlurper = new JsonSlurper()
|
|
|
+ def invokeOrder = jsonSlurper.parseText(source.params)
|
|
|
+
|
|
|
+ //转成顺丰需要提交的信息
|
|
|
+ long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
|
|
|
+
|
|
|
+ def sfOrder = [
|
|
|
+ dev_id: sfAppId,
|
|
|
+ order_id: invokeOrder[""],
|
|
|
+ shop_id: invokeOrder[""],
|
|
|
+ push_time: currentTime
|
|
|
+ ]
|
|
|
+
|
|
|
+ String postData = JSON.toJSONString(sfOrder)
|
|
|
+ logger.info("请求数据: " + postData)
|
|
|
+ String sign = ExpressApiSign.sfGenerateOpenSign(postData, sfAppId, sfAppKey)
|
|
|
+
|
|
|
+ String url = sfApiUrl + "cancelorder?sign=" + sign
|
|
|
+
|
|
|
+ CompletableFuture<String> apiResult = HttpTools.postHttpContentAsync(url,
|
|
|
+ 5000,
|
|
|
+ StandardCharsets.UTF_8,
|
|
|
+ postData,
|
|
|
+ ["Content-Type": "application/json;charset=utf-8"])
|
|
|
+ try {
|
|
|
+ String orderResult = apiResult.get(6000, TimeUnit.SECONDS)
|
|
|
+
|
|
|
+ def sfOrderJson = jsonSlurper.parseText(orderResult)
|
|
|
+
|
|
|
+ logger.info(sfOrderJson)
|
|
|
+
|
|
|
+ return RetResult.<InvokeCallResult> successT()
|
|
|
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
|
|
|
+ logger.error(e.getMessage(), e)
|
|
|
+
|
|
|
+ return RetResult.<InvokeCallResult> errorT().retinfo(e.getMessage())
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|