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 5a8ddb5..87418d4 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 @@ -7,6 +7,7 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.PdfUtils; import com.ruoyi.flyingbook.LarkHelper.LarkFileHelper; import com.ruoyi.flyingbook.domain.EventLog; +import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import com.ruoyi.flyingbook.domain.edi.EdiResponseVo; import com.ruoyi.flyingbook.domain.edi.SyncToTableRequest; import com.ruoyi.flyingbook.domain.edi.CJTEdiRequestVo; @@ -41,6 +42,7 @@ public class EdiController extends BaseController { private IEventLogService iEventLogService; @Autowired private RedisCache redisCache; + /** * 同步数据到飞书表格 */ @@ -55,7 +57,7 @@ public class EdiController extends BaseController { log1.setErrorMessage("asd"); iEventLogService.insertEventLog(log1); EventLog log2 = new EventLog(); - iEventLogService.insertBatchEventLog(Arrays.asList(log1,log2)); + iEventLogService.insertBatchEventLog(Arrays.asList(log1, log2)); } /** @@ -64,31 +66,48 @@ public class EdiController extends BaseController { @PostMapping("/cjtTicket") public JSONObject receiveCjtTicket(@RequestBody CJTEdiRequestVo request) { try { - log.error("receiveWscTicket request:{}",JSONObject.toJSONString(request)); + log.error("receiveWscTicket request:{}", JSONObject.toJSONString(request)); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec("ND2ANZB8F7NplUqc".getBytes(StandardCharsets.UTF_8), "AES")); byte[] bytes = Base64.decodeBase64(request.getEncryptMsg()); bytes = cipher.doFinal(bytes); String encryptMsg = new String(bytes, StandardCharsets.UTF_8); - log.info("receiveWscTicket encryptMsg:{}",encryptMsg); + log.info("receiveWscTicket encryptMsg:{}", encryptMsg); JSONObject jsonObject = JSONObject.parseObject(encryptMsg); - JSONObject bizContent = jsonObject.getJSONObject("bizContent"); + execeuteByType(jsonObject); + } catch (Exception e) { + log.error("receiveWscTicket error request:{}", JSONObject.toJSONString(request), e); + } + JSONObject result = new JSONObject(); + result.put("result", "success"); + return result; + } + + + private void execeuteByType(JSONObject jsonObject) { + JSONObject bizContent = jsonObject.getJSONObject("bizContent"); + String msgType = jsonObject.getString("msgType"); + log.info("畅捷通回调接口 {}",msgType); + if ("APP_TICKET".equals(msgType)) { + log.info("同步畅捷通 ticket"); String appTicket = bizContent.getString("appTicket"); if (StringUtils.isNotBlank(appTicket)) { String appKey = jsonObject.getString("appKey"); - redisCache.deleteObject(buildUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY,appKey)); - redisCache.setCacheObject(buildUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY,appKey),appTicket,10, TimeUnit.MINUTES); + redisCache.deleteObject(buildUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, appKey)); + redisCache.setCacheObject(buildUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, appKey), appTicket, 10, TimeUnit.MINUTES); } - }catch (Exception e){ - log.error("receiveWscTicket error request:{}",JSONObject.toJSONString(request),e); + }else if ("SaleDispatchVoucher_Delete".equals(msgType)){ + log.info("畅捷通删除接口回调"); + String voucherCode = bizContent.getString("voucherCode"); + CJTEdiCallbackRequestVo cjtEdiCallbackRequestVo = new CJTEdiCallbackRequestVo(msgType, voucherCode); + ediOperateService.cjtCallback(cjtEdiCallbackRequestVo); } - JSONObject result = new JSONObject(); - result.put("result","success"); - return result; + + } - private String buildUniqueKey(String key,String appKey){ - return String.format("%s:%s",key,appKey); + private String buildUniqueKey(String key, String appKey) { + return String.format("%s:%s", key, appKey); } } 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 new file mode 100644 index 0000000..efc9169 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/edi/CJTEdiCallbackRequestVo.java @@ -0,0 +1,30 @@ +package com.ruoyi.flyingbook.domain.edi; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author yuxiangyong + * @create 2023-03-12 16:00 + */ +@Data +@NoArgsConstructor +public class CJTEdiCallbackRequestVo { + + /** + * 畅捷通操作操作类型 + * APP_TICKET 重置ticket + * SaleDispatchVoucher_Delete 删除销售出库单 + * + */ + private String msgType; + /** + * 单据编码 + */ + private String voucherCode; + + public CJTEdiCallbackRequestVo(String msgType, String voucherCode) { + this.msgType = msgType; + this.voucherCode = voucherCode; + } +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/EdiOperateService.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/EdiOperateService.java index db48324..1391b74 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/EdiOperateService.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/EdiOperateService.java @@ -1,5 +1,6 @@ package com.ruoyi.flyingbook.edi; +import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import com.ruoyi.flyingbook.domain.edi.EdiRequestVo; import com.ruoyi.flyingbook.domain.edi.EdiResponseVo; import com.ruoyi.flyingbook.domain.edi.SyncToTableRequest; @@ -12,4 +13,9 @@ public interface EdiOperateService { public EdiResponseVo sync2Table(SyncToTableRequest ediRequestVo); + /** + * 畅捷通接口回调 + */ + public void cjtCallback(CJTEdiCallbackRequestVo request); + } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/impl/EdiOperateServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/impl/EdiOperateServiceImpl.java index 3a7f106..46e2180 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/impl/EdiOperateServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/edi/impl/EdiOperateServiceImpl.java @@ -12,6 +12,7 @@ import com.lark.oapi.service.contact.v3.model.UserContactInfo; import com.ruoyi.common.enums.*; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.flyingbook.LarkHelper.DataStructureHelper; +import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper; import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper; import com.ruoyi.flyingbook.LarkHelper.LarkUserHelper; import com.ruoyi.flyingbook.domain.*; @@ -27,6 +28,7 @@ import org.apache.commons.collections4.MultiValuedMap; import org.apache.commons.collections4.multimap.ArrayListValuedHashMap; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.StopWatch; @@ -55,6 +57,12 @@ public class EdiOperateServiceImpl implements EdiOperateService { private LarkUserHelper larkUserHelper; @Autowired private LarkTableHelper larkTableHelper; + @Autowired + private LarkRobotHelper larkRobotHelper; + @Autowired + private ErpLarkRelationMapper erpLarkRelationMapper; + @Value("${lark.robot.group}") + private String ROBOT_GROUP; @Override @@ -86,6 +94,58 @@ public class EdiOperateServiceImpl implements EdiOperateService { return vo; } + @Override + public void cjtCallback(CJTEdiCallbackRequestVo request) { + if (StringUtils.isBlank(request.getMsgType()) || StringUtils.isBlank(request.getVoucherCode())){ + return; + } + LarkCompanyRelation queryCompany = new LarkCompanyRelation(); + queryCompany.setAppType(AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()); + queryCompany.setFlag(FlagStatus.OK.getCode()); + List larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(queryCompany); + if (CollectionUtils.isEmpty(larkCompanyRelations)){ + return; + } + LarkCompanyRelation companyRelation = larkCompanyRelations.get(0); + LarkTableRelation queryTable = new LarkTableRelation(); + queryTable.setLarkCompanyRelationId(companyRelation.getId()); + queryTable.setFlag(FlagStatus.OK.getCode()); + List larkTableRelations = larkTableRelationMapper.selectLarkTableRelationList(queryTable); + if (CollectionUtils.isEmpty(larkTableRelations)){ + return; + } + LarkTableRelation tableRelation = larkTableRelations.get(0); + List relationList = erpLarkRelationMapper.queryListByKey(request.getVoucherCode(), "https://openapi.chanjet.com/tplus/api/v2/SaleDispatchOpenApi/FindVoucherList"); + List larkKeyErrorList = new ArrayList<>(); + List deleteIdList = new ArrayList<>(); + for (ErpLarkRelation erpLarkRelation : relationList) { + LarkTableRequest deleteLarkRequest = new LarkTableRequest(companyRelation.getAppId(), companyRelation.getSecret(), tableRelation.getToAppToken(), tableRelation.getToTableId(), erpLarkRelation.getLarkKey()); + try { + larkTableHelper.deleteTableRecord(deleteLarkRequest); + deleteIdList.add(erpLarkRelation.getId()); + }catch (Exception e){ + log.info("删除飞书记录失败 {}",JSONObject.toJSONString(deleteLarkRequest),e); + larkKeyErrorList.add(String.format("【%s,%s】",erpLarkRelation.getLarkKey(),e.getMessage())); + } + } + if (CollectionUtils.isNotEmpty(deleteIdList)){ + erpLarkRelationMapper.deleteErpLarkRelationByIds(deleteIdList); + } + if (CollectionUtils.isNotEmpty(larkKeyErrorList)){ + larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(companyRelation,tableRelation,larkKeyErrorList)); + } + } + + private String buildRobotErrorCountMessage(LarkCompanyRelation companyRelation,LarkTableRelation tableRelation,List larkKeyErrorList){ + JSONObject body = new JSONObject(); + body.put("appId",companyRelation.getAppId()); + body.put("secret",companyRelation.getSecret()); + body.put("appToken",tableRelation.getToAppToken()); + body.put("tableId",tableRelation.getToTableId()); + body.put("codeList",String.join(",",larkKeyErrorList)); + return body.toJSONString(); + } + /** * 创建数据表 */ diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/ErpLarkRelationMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/ErpLarkRelationMapper.java index 33582d5..ceadfda 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/ErpLarkRelationMapper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/ErpLarkRelationMapper.java @@ -60,7 +60,7 @@ public interface ErpLarkRelationMapper * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteErpLarkRelationByIds(Long[] ids); + public int deleteErpLarkRelationByIds(@Param("array") List array); public List queryListByKeyList(@Param("keyList") List keyList,@Param("method") String method); @@ -69,4 +69,6 @@ public interface ErpLarkRelationMapper * 批量插入 */ public int batchInsert(@Param("erpLarkRelationList") List erpLarkRelationList); + + public List queryListByKey(@Param("key") String key,@Param("method") String method); } diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/ErpLarkRelationServiceImpl.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/ErpLarkRelationServiceImpl.java index 8e46b2b..402854a 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/ErpLarkRelationServiceImpl.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/service/impl/ErpLarkRelationServiceImpl.java @@ -80,7 +80,8 @@ public class ErpLarkRelationServiceImpl implements IErpLarkRelationService @Override public int deleteErpLarkRelationByIds(Long[] ids) { - return erpLarkRelationMapper.deleteErpLarkRelationByIds(ids); + return 0; +// return erpLarkRelationMapper.deleteErpLarkRelationByIds(ids); } /** diff --git a/ruoyi-flyingbook/src/main/resources/mapper/ErpLarkRelationMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/ErpLarkRelationMapper.xml index 9d8cf96..8d20906 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/ErpLarkRelationMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/ErpLarkRelationMapper.xml @@ -46,6 +46,12 @@ + + insert into erp_lark_relation