From afd36bd9669c6dbd671d6d08dfe7244f9006d690 Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Sat, 14 Oct 2023 11:04:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E7=9B=91=E5=90=AC=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=B0=E5=A4=9A=E7=BB=B4=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?handle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/constant/RedisConstants.java | 7 ++- .../flyingbook/controller/EdiController.java | 19 +++--- .../domain/edi/CJTEdiCallbackRequestVo.java | 6 +- .../cjt/CJTOperateCallBackAbstract.java | 15 ++++- .../cjt/CJTOperateCallBackFactory.java | 62 +++++++++++++++++++ .../cjt/ManufactureOrderSyncCallOperate.java | 4 +- .../cjt/SaleDispatchSyncCallOperate.java | 3 +- ...java => SaleOrderSyncCallBackOperate.java} | 8 +-- 8 files changed, 103 insertions(+), 21 deletions(-) create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackFactory.java rename ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/{SaleOrderSyncCallBack.java => SaleOrderSyncCallBackOperate.java} (95%) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java index 99913a3..e141d80 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/RedisConstants.java @@ -23,11 +23,16 @@ public class RedisConstants { /** * 畅捷通ticket缓存key + * CJT_TICKET_REFRESH_CACHE_KEY 刷新token的缓存 + * CJT_TICKET_CACHE_KEY 缓存畅捷通的ticket + * CJT_TOKEN_CACHE_KEY 缓存畅捷通的token + * CJT_ASYNCHRONOUS 畅捷通夜间是否重新同步数据的标记 + * CJT_CALLBACK_OPERATE 畅捷通处理回调消息的缓存 */ public static final String CJT_TICKET_REFRESH_CACHE_KEY = "CJT_TICKET_REFRESH_CACHE_KEY"; public static final String CJT_TICKET_CACHE_KEY = "TICKET_KEY"; public static final String CJT_TOKEN_CACHE_KEY = "OPEN_TOKEN"; - public static final String CJT_ASYNCHRONOUS = "CJT_ASYNCHRONOUS"; + public static final String CJT_CALLBACK_OPERATE = "CJT_CALLBACK_OPERATE"; } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java index 5b2173d..0f8c627 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/controller/EdiController.java @@ -16,6 +16,7 @@ import com.ruoyi.flyingbook.domain.edi.CJTEdiRequestVo; import com.ruoyi.flyingbook.edi.EdiOperateService; import com.ruoyi.flyingbook.mapper.ErpLarkTempRelationMapper; import com.ruoyi.flyingbook.service.IEventLogService; +import com.ruoyi.flyingbook.strategy.cjt.CJTOperateCallBackFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; @@ -48,6 +49,8 @@ public class EdiController extends BaseController { private RedisCache redisCache; @Autowired private ErpLarkTempRelationMapper erpLarkTempRelationMapper; + @Autowired + private CJTOperateCallBackFactory cjtOperateCallBackFactory; /** * 畅捷通域名 @@ -110,13 +113,15 @@ public class EdiController extends BaseController { String appKey = jsonObject.getString("appKey"); redisCache.setCacheObject(buildUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, appKey), appTicket, 24, TimeUnit.HOURS); } - }else if ("SaleDispatchVoucher_Delete".equals(msgType)){ - log.info("畅捷通删除接口回调"); - String voucherCode = bizContent.getString("voucherCode"); - CJTEdiCallbackRequestVo cjtEdiCallbackRequestVo = new CJTEdiCallbackRequestVo(msgType, voucherCode); - ediOperateService.cjtCallback(cjtEdiCallbackRequestVo); - }else{ - cacheInfo(jsonObject); + } +// else if ("SaleDispatchVoucher_Delete".equals(msgType)){ +// log.info("畅捷通删除接口回调"); +// String voucherCode = bizContent.getString("voucherCode"); +// CJTEdiCallbackRequestVo cjtEdiCallbackRequestVo = new CJTEdiCallbackRequestVo(msgType, voucherCode); +// ediOperateService.cjtCallback(cjtEdiCallbackRequestVo); +// } + else{ + cjtOperateCallBackFactory.handle(jsonObject); } } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/edi/CJTEdiCallbackRequestVo.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/edi/CJTEdiCallbackRequestVo.java index 0f8fba9..cabe809 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/edi/CJTEdiCallbackRequestVo.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/edi/CJTEdiCallbackRequestVo.java @@ -86,12 +86,12 @@ public class CJTEdiCallbackRequestVo { this.voucherCode = voucherCode; } - public CJTEdiCallbackRequestVo(String appId,String msgType, JSONObject body) { + public CJTEdiCallbackRequestVo(String appId,String msgType, JSONObject body,CjtAccountEnum cjtAccountEnum,CjtCallBackOperateEnum callBackOperateEnum) { this.msgType = msgType; this.body = body; this.appId = appId; - this.cjtAccountEnum = CjtAccountEnum.getByCode(appId); - this.msgTypeEnum = CjtCallBackOperateEnum.getByCode(msgType); + this.cjtAccountEnum = cjtAccountEnum; + this.msgTypeEnum = callBackOperateEnum; } public void addRetryCount(){ diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackAbstract.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackAbstract.java index df575b8..999141a 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackAbstract.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackAbstract.java @@ -31,6 +31,7 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -57,9 +58,18 @@ public abstract class CJTOperateCallBackAbstract { protected ErpLarkTempRelationMapper erpLarkTempRelationMapper; @Value("${lark.robot.group}") private String ROBOT_GROUP; + /** + * 畅捷通域名 + */ + protected static final String REQUEST_ROOT_PATH = "https://openapi.chanjet.com"; public void execute(CJTEdiCallbackRequestVo req){ + String operateCallBackFlag = buildCacheUniqueKey(RedisConstants.CJT_CALLBACK_OPERATE, req.getAppId() + req.getMsgType() + req.getVoucherId()); try { + Boolean operateFlag = redisCache.setCacheObjectIfAbsent(operateCallBackFlag, operateCallBackFlag, 10L, TimeUnit.MINUTES); + if (!operateFlag){ + return; + } preHandle(req); initContext(req); // resetTicket(req); @@ -74,6 +84,8 @@ public abstract class CJTOperateCallBackAbstract { errorHandle(req,e); larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req,e)); } + }finally { + redisCache.deleteObject(operateCallBackFlag); } } @@ -107,10 +119,7 @@ public abstract class CJTOperateCallBackAbstract { } private void sync(CJTEdiCallbackRequestVo req){ - JSONObject body = req.getBody(); CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); - String voucherID = body.getString("voucherID"); - req.setVoucherId(voucherID); LarkCJTRequestBody cjtRequestBody = new LarkCJTRequestBody(req.getVoucherId()); LarkCJTRequest cjtRequest = new LarkCJTRequest(getRequestUrl(), cjtAccountEnum.getAppKey(), cjtAccountEnum.getAppSecret(), generateToken(req),cjtRequestBody); LarkOkHttpHelper.post(cjtRequest); diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackFactory.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackFactory.java new file mode 100644 index 0000000..145bc9a --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/CJTOperateCallBackFactory.java @@ -0,0 +1,62 @@ +package com.ruoyi.flyingbook.strategy.cjt; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.enums.CjtAccountEnum; +import com.ruoyi.common.enums.CjtCallBackOperateEnum; +import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author yuxiangyong + * @create 2023-10-14 10:44 + */ +public class CJTOperateCallBackFactory { + + @Autowired + private ManufactureOrderSyncCallOperate manufactureOrderSyncCallOperate; + @Autowired + private SaleDispatchSyncCallOperate saleDispatchSyncCallOperate; + @Autowired + private SaleOrderSyncCallBackOperate saleOrderSyncCallBackOperate; + + public void handle(JSONObject jsonObject){ + String appKey = jsonObject.getString("appKey"); + String msgType = jsonObject.getString("msgType"); + JSONObject bizContent = jsonObject.getJSONObject("bizContent"); + CjtAccountEnum cjtAccountEnum = CjtAccountEnum.getByCode(appKey); + CjtCallBackOperateEnum callBackOperateEnum = CjtCallBackOperateEnum.getByCode(msgType); + if (cjtAccountEnum == null || callBackOperateEnum == null){ + return; + } + if (bizContent == null){ + return; + } + String voucherID = bizContent.getString("voucherID"); + if (StringUtils.isBlank(voucherID)){ + return; + } + CJTEdiCallbackRequestVo cjtEdiCallbackRequestVo = new CJTEdiCallbackRequestVo(appKey, msgType, bizContent,cjtAccountEnum,callBackOperateEnum); + cjtEdiCallbackRequestVo.setVoucherId(voucherID); + switch (callBackOperateEnum){ + case SALE_DISPATCH_CREATE: + case SALE_DISPATCH_UPDATE: + case SALE_DISPATCH_DELETE: + saleDispatchSyncCallOperate.execute(cjtEdiCallbackRequestVo); + break; + case SALE_ORDER_CREATE: + case SALE_ORDER_UPDATE: + case SALE_ORDER_DELETE: + saleOrderSyncCallBackOperate.execute(cjtEdiCallbackRequestVo); + break; + case MANUFACTURE_ORDER_CREATE: + case MANUFACTURE_ORDER_UPDATE: + case MANUFACTURE_ORDER_DELETE: + manufactureOrderSyncCallOperate.execute(cjtEdiCallbackRequestVo); + break; + default: + break; + } + } + +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/ManufactureOrderSyncCallOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/ManufactureOrderSyncCallOperate.java index 8ba52c0..9b8f370 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/ManufactureOrderSyncCallOperate.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/ManufactureOrderSyncCallOperate.java @@ -1,12 +1,12 @@ package com.ruoyi.flyingbook.strategy.cjt; import com.alibaba.fastjson.JSONObject; -import com.ruoyi.common.enums.*; +import com.ruoyi.common.enums.CjtAccountEnum; +import com.ruoyi.common.enums.CjtCallBackOperateEnum; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import org.springframework.stereotype.Component; -import java.util.Date; import java.util.HashMap; import java.util.Map; diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleDispatchSyncCallOperate.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleDispatchSyncCallOperate.java index 9912713..eda6ea8 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleDispatchSyncCallOperate.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleDispatchSyncCallOperate.java @@ -7,7 +7,8 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import org.springframework.stereotype.Component; -import java.util.*; +import java.util.HashMap; +import java.util.Map; /** * 销售出库单 diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleOrderSyncCallBack.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleOrderSyncCallBackOperate.java similarity index 95% rename from ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleOrderSyncCallBack.java rename to ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleOrderSyncCallBackOperate.java index bfde733..baa806c 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleOrderSyncCallBack.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/strategy/cjt/SaleOrderSyncCallBackOperate.java @@ -1,12 +1,12 @@ package com.ruoyi.flyingbook.strategy.cjt; import com.alibaba.fastjson.JSONObject; -import com.ruoyi.common.enums.*; +import com.ruoyi.common.enums.CjtAccountEnum; +import com.ruoyi.common.enums.CjtCallBackOperateEnum; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import org.springframework.stereotype.Component; -import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -15,8 +15,8 @@ import java.util.Map; * @author yuxiangyong * @create 2023-07-17 21:21 */ -@Component("saleOrderSyncCallBack") -public class SaleOrderSyncCallBack extends CJTOperateCallBackAbstract{ +@Component("saleOrderSyncCallBackOperate") +public class SaleOrderSyncCallBackOperate extends CJTOperateCallBackAbstract{ @Override protected void syncRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody) {