Compare commits

..

No commits in common. '1f05872c8f04d1893bc02a3fd91d0df97ad3cf41' and '992f297f7dd95b434cd46e751625e5fadfdac02a' have entirely different histories.

@ -23,16 +23,10 @@ public class RedisConstants {
/** /**
* ticketkey * ticketkey
* 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_TICKET_CACHE_KEY = "TICKET_KEY";
public static final String CJT_TOKEN_CACHE_KEY = "OPEN_TOKEN"; public static final String CJT_TOKEN_CACHE_KEY = "OPEN_TOKEN";
public static final String CJT_ASYNCHRONOUS = "CJT_ASYNCHRONOUS"; public static final String CJT_ASYNCHRONOUS = "CJT_ASYNCHRONOUS";
public static final String CJT_CALLBACK_OPERATE = "CJT_CALLBACK_OPERATE";
} }

@ -9,15 +9,15 @@ public enum CjtCallBackOperateEnum {
/** /**
* *
*/ */
SALE_DISPATCH_CREATE("SaleDispatchVoucher_Create", "新增销售出库单",AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()), SALE_DISPATCH_CREATE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()),
SALE_DISPATCH_UPDATE("SaleDispatchVoucher_Update", "修改销售出库单",AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()), SALE_DISPATCH_UPDATE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()),
SALE_DISPATCH_DELETE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()), SALE_DISPATCH_DELETE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode()),
MANUFACTURE_ORDER_CREATE("ManufactureOrder_Create", "新增加工单",AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode()), MANUFACTURE_ORDER_CREATE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode()),
MANUFACTURE_ORDER_UPDATE("ManufactureOrder_Update", "修改加工单",AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode()), MANUFACTURE_ORDER_UPDATE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode()),
MANUFACTURE_ORDER_DELETE("ManufactureOrder_Delete", "删除加工单",AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode()), MANUFACTURE_ORDER_DELETE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode()),
SALE_ORDER_CREATE("SaleOrder_Create", "新增销售订单",AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE.getCode()), SALE_ORDER_CREATE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE.getCode()),
SALE_ORDER_UPDATE("SaleOrder_Update", "修改销售订单",AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE.getCode()), SALE_ORDER_UPDATE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE.getCode()),
SALE_ORDER_DELETE("SaleOrder_Delete", "删除销售订单",AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE.getCode()); SALE_ORDER_DELETE("SaleDispatchVoucher_Delete", "删除销售出库单",AppType.SYNC_CJT_SALE_ORDER_DATA_TO_MULTI_TABLE.getCode());
private final String code; private final String code;

@ -8,7 +8,6 @@ import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.util.Date; import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
/** /**
@ -169,8 +168,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static LocalDateTime str2ldt(String time, String pattern) { public static LocalDateTime str2ldt(String time, String pattern) {
if (YYYYMMDD_SECOND.equals(pattern)){ if (YYYYMMDD_SECOND.equals(pattern)){
return LocalDate.parse(time, DateTimeFormatter.ofPattern(pattern)).atStartOfDay(); return LocalDate.parse(time, DateTimeFormatter.ofPattern(pattern)).atStartOfDay();
}else if (YYYY_MM_DD.equals(pattern)){
return LocalDate.parse(time, DateTimeFormatter.ofPattern(pattern)).atStartOfDay();
}else { }else {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern); DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(time, fmt); return LocalDateTime.parse(time, fmt);
@ -188,9 +185,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
} }
public static Object str2long(String time, String pattern) { public static Object str2long(String time, String pattern) {
if (StringUtils.isBlank(time)){
return null;
}
LocalDateTime localDateTime = DateUtils.str2ldt(time, pattern); LocalDateTime localDateTime = DateUtils.str2ldt(time, pattern);
return DateUtils.ldt2Long(localDateTime); return DateUtils.ldt2Long(localDateTime);
} }

@ -16,7 +16,6 @@ import com.ruoyi.flyingbook.domain.edi.CJTEdiRequestVo;
import com.ruoyi.flyingbook.edi.EdiOperateService; import com.ruoyi.flyingbook.edi.EdiOperateService;
import com.ruoyi.flyingbook.mapper.ErpLarkTempRelationMapper; import com.ruoyi.flyingbook.mapper.ErpLarkTempRelationMapper;
import com.ruoyi.flyingbook.service.IEventLogService; import com.ruoyi.flyingbook.service.IEventLogService;
import com.ruoyi.flyingbook.strategy.cjt.CJTOperateCallBackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -49,8 +48,6 @@ public class EdiController extends BaseController {
private RedisCache redisCache; private RedisCache redisCache;
@Autowired @Autowired
private ErpLarkTempRelationMapper erpLarkTempRelationMapper; private ErpLarkTempRelationMapper erpLarkTempRelationMapper;
@Autowired
private CJTOperateCallBackFactory cjtOperateCallBackFactory;
/** /**
* *
@ -113,15 +110,13 @@ public class EdiController extends BaseController {
String appKey = jsonObject.getString("appKey"); String appKey = jsonObject.getString("appKey");
redisCache.setCacheObject(buildUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, appKey), appTicket, 24, TimeUnit.HOURS); redisCache.setCacheObject(buildUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, appKey), appTicket, 24, TimeUnit.HOURS);
} }
} }else if ("SaleDispatchVoucher_Delete".equals(msgType)){
// else if ("SaleDispatchVoucher_Delete".equals(msgType)){ log.info("畅捷通删除接口回调");
// log.info("畅捷通删除接口回调"); String voucherCode = bizContent.getString("voucherCode");
// String voucherCode = bizContent.getString("voucherCode"); CJTEdiCallbackRequestVo cjtEdiCallbackRequestVo = new CJTEdiCallbackRequestVo(msgType, voucherCode);
// CJTEdiCallbackRequestVo cjtEdiCallbackRequestVo = new CJTEdiCallbackRequestVo(msgType, voucherCode); ediOperateService.cjtCallback(cjtEdiCallbackRequestVo);
// ediOperateService.cjtCallback(cjtEdiCallbackRequestVo); }else{
// } cacheInfo(jsonObject);
else{
cjtOperateCallBackFactory.handle(jsonObject);
} }
} }
@ -133,11 +128,7 @@ public class EdiController extends BaseController {
erpLarkTempRelation.setMethod(jsonObject.getString("msgType")); erpLarkTempRelation.setMethod(jsonObject.getString("msgType"));
JSONObject bizContent = jsonObject.getJSONObject("bizContent"); JSONObject bizContent = jsonObject.getJSONObject("bizContent");
if (bizContent != null){ if (bizContent != null){
String voucherID = bizContent.getString("voucherID"); erpLarkTempRelation.setLarkKey(bizContent.getString("voucherID"));
if (StringUtils.isBlank(voucherID)){
return;
}
erpLarkTempRelation.setLarkKey(voucherID);
} }
erpLarkTempRelation.setRemark(jsonObject.toJSONString()); erpLarkTempRelation.setRemark(jsonObject.toJSONString());
erpLarkTempRelation.setCreateBy("System"); erpLarkTempRelation.setCreateBy("System");

@ -54,50 +54,12 @@ public class CJTEdiCallbackRequestVo {
*/ */
private String openToken; private String openToken;
private Boolean retry = Boolean.TRUE;
private Integer retryCount = 0;
/** /**
* *
*/ */
private LarkCompanyRelation companyRelation; private LarkCompanyRelation companyRelation;
private LarkTableRelation tableRelation; private LarkTableRelation tableRelation;
public String getLarkAppId(){
return companyRelation.getAppId();
}
public String getLarkAppSecret(){
return companyRelation.getSecret();
}
public String getLarkToAppToken(){
switch (cjtAccountEnum){
case ONE:
return "UvVPbC0HdalNQ0sfJl6clZgZnhf";
case TWO:
return "UBggb0PmVad1mNsKnTFcgsf7nLd";
default:
return null;
}
}
public String getLarkToTableId(){
switch (msgTypeEnum){
case SALE_DISPATCH_DELETE:
case SALE_DISPATCH_UPDATE:
case SALE_DISPATCH_CREATE:
return "tbltlm4b4pYm9QrD";
case SALE_ORDER_CREATE:
case SALE_ORDER_UPDATE:
case SALE_ORDER_DELETE:
return "tblmZTswhz1zVMS1";
case MANUFACTURE_ORDER_CREATE:
case MANUFACTURE_ORDER_UPDATE:
case MANUFACTURE_ORDER_DELETE:
return "tblyecbS3hdmPEE1";
default:
return null;
}
// return tableRelation.getToTableId();
}
/** /**
* id * id
*/ */
@ -109,15 +71,11 @@ public class CJTEdiCallbackRequestVo {
this.voucherCode = voucherCode; this.voucherCode = voucherCode;
} }
public CJTEdiCallbackRequestVo(String appId,String msgType, JSONObject body,CjtAccountEnum cjtAccountEnum,CjtCallBackOperateEnum callBackOperateEnum) { public CJTEdiCallbackRequestVo(String appId,String msgType, JSONObject body) {
this.msgType = msgType; this.msgType = msgType;
this.body = body; this.body = body;
this.appId = appId; this.appId = appId;
this.cjtAccountEnum = cjtAccountEnum; this.cjtAccountEnum = CjtAccountEnum.getByCode(appId);
this.msgTypeEnum = callBackOperateEnum; this.msgTypeEnum = CjtCallBackOperateEnum.getByCode(msgType);
}
public void addRetryCount(){
this.retryCount++;
} }
} }

@ -1,77 +0,0 @@
package com.ruoyi.flyingbook.mapper;
import com.ruoyi.flyingbook.domain.ErpLarkRelation;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Mapper
*
* @author ruoyi
* @date 2023-07-17
*/
public interface ErpLarkRelationMainMapper
{
/**
*
*
* @param id ID
* @return
*/
public ErpLarkRelation selectErpLarkRelationById(Long id);
/**
*
*
* @param erpLarkRelation
* @return
*/
public List<ErpLarkRelation> selectErpLarkRelationList(ErpLarkRelation erpLarkRelation);
/**
*
*
* @param erpLarkRelation
* @return
*/
public int insertErpLarkRelation(ErpLarkRelation erpLarkRelation);
/**
*
*
* @param erpLarkRelation
* @return
*/
public int updateErpLarkRelation(ErpLarkRelation erpLarkRelation);
/**
*
*
* @param id ID
* @return
*/
public int deleteErpLarkRelationById(Long id);
/**
*
*
* @param ids ID
* @return
*/
public int deleteErpLarkRelationByIds(@Param("array") List<Long> array);
public List<ErpLarkRelation> queryListByKeyList(@Param("keyList") List<String> keyList,@Param("method") String method);
public List<ErpLarkRelation> queryListByKeyListAndRemark(@Param("keyList") List<String> keyList,@Param("method") String method,@Param("remark") String remark);
public List<String> queryWaitDeleteRecordList(@Param("currentDay") String currentDay,@Param("method") String method,@Param("remark") String remark);
public void deleteRecordList(@Param("currentDay") String currentDay,@Param("method") String method,@Param("remark") String remark);
/**
*
*/
public int batchInsert(@Param("erpLarkRelationList") List<ErpLarkRelation> erpLarkRelationList);
public List<ErpLarkRelation> queryListByKey(@Param("key") String key,@Param("method") String method);
}

@ -31,7 +31,6 @@ import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -58,41 +57,35 @@ public abstract class CJTOperateCallBackAbstract {
protected ErpLarkTempRelationMapper erpLarkTempRelationMapper; protected ErpLarkTempRelationMapper erpLarkTempRelationMapper;
@Value("${lark.robot.group}") @Value("${lark.robot.group}")
private String ROBOT_GROUP; private String ROBOT_GROUP;
/** /**
* *
*/ */
protected static final String REQUEST_ROOT_PATH = "https://openapi.chanjet.com"; protected static final String REQUEST_ROOT_PATH = "https://openapi.chanjet.com";
/**
* ticket
*/
private static final String REQUEST_RESET_TICKET_PATH = REQUEST_ROOT_PATH + "/auth/appTicket/resend";
/**
* token
*/
private static final String REQUEST_GENERATE_TOKEN_PATH = REQUEST_ROOT_PATH + "/v1/common/auth/selfBuiltApp/generateToken";
public void execute(CJTEdiCallbackRequestVo req){ public void execute(CJTEdiCallbackRequestVo req){
String operateCallBackFlag = buildCacheUniqueKey(RedisConstants.CJT_CALLBACK_OPERATE, req.getAppId() + req.getMsgType() + req.getVoucherId());
try { try {
Boolean operateFlag = redisCache.setCacheObjectIfAbsent(operateCallBackFlag, operateCallBackFlag, 10L, TimeUnit.MINUTES);
if (!operateFlag){
return;
}
preHandle(req); preHandle(req);
initContext(req); initContext(req);
// resetTicket(req); // resetTicket(req);
sync(req); sync(req);
endHandle(req); endHandle(req);
}catch (Exception e){ }catch (Exception e){
errorHandle(req,e);
log.error("{} execute error",this.getClass().getSimpleName(),e); log.error("{} execute error",this.getClass().getSimpleName(),e);
if (req.getRetry() && req.getRetryCount() < 3){ larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req,e));
req.addRetryCount();
execute(req);
}else {
errorHandle(req,e);
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req,e));
}
}finally {
redisCache.deleteObject(operateCallBackFlag);
} }
} }
private void preHandle(CJTEdiCallbackRequestVo req){ private void preHandle(CJTEdiCallbackRequestVo req){
if (req.getRetryCount() > 0){
return;
}
Date date = new Date(); Date date = new Date();
ErpLarkTempRelation erpLarkTempRelation = new ErpLarkTempRelation(); ErpLarkTempRelation erpLarkTempRelation = new ErpLarkTempRelation();
erpLarkTempRelation.setKey(req.getBody().getString("voucherID")); erpLarkTempRelation.setKey(req.getBody().getString("voucherID"));
@ -119,7 +112,10 @@ public abstract class CJTOperateCallBackAbstract {
} }
private void sync(CJTEdiCallbackRequestVo req){ private void sync(CJTEdiCallbackRequestVo req){
JSONObject body = req.getBody();
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
String voucherID = body.getString("voucherID");
req.setVoucherId(voucherID);
LarkCJTRequestBody cjtRequestBody = new LarkCJTRequestBody(req.getVoucherId()); LarkCJTRequestBody cjtRequestBody = new LarkCJTRequestBody(req.getVoucherId());
LarkCJTRequest cjtRequest = new LarkCJTRequest(getRequestUrl(), cjtAccountEnum.getAppKey(), cjtAccountEnum.getAppSecret(), generateToken(req),cjtRequestBody); LarkCJTRequest cjtRequest = new LarkCJTRequest(getRequestUrl(), cjtAccountEnum.getAppKey(), cjtAccountEnum.getAppSecret(), generateToken(req),cjtRequestBody);
LarkOkHttpHelper.post(cjtRequest); LarkOkHttpHelper.post(cjtRequest);
@ -144,32 +140,26 @@ public abstract class CJTOperateCallBackAbstract {
protected abstract String getMethodUrl(); protected abstract String getMethodUrl();
private void initContext(CJTEdiCallbackRequestVo req){ private void initContext(CJTEdiCallbackRequestVo req){
LarkCompanyRelation companyRelation = req.getCompanyRelation(); LarkCompanyRelation queryCompany = new LarkCompanyRelation();
String larkCompanyCode = req.getMsgTypeEnum().getLarkCompanyCode(); String larkCompanyCode = req.getMsgTypeEnum().getLarkCompanyCode();
if (companyRelation == null){ queryCompany.setAppType(larkCompanyCode);
LarkCompanyRelation queryCompany = new LarkCompanyRelation(); queryCompany.setFlag(FlagStatus.OK.getCode());
queryCompany.setAppType(larkCompanyCode); queryCompany.setRemark(req.getAppId());
queryCompany.setFlag(FlagStatus.OK.getCode()); List<LarkCompanyRelation> larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(queryCompany);
queryCompany.setRemark(req.getAppId()); if (CollectionUtils.isEmpty(larkCompanyRelations)){
List<LarkCompanyRelation> larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(queryCompany); throw new RuntimeException(String.format("%s 无larkCompany配置信息 appId:%s appType:%s",req.getMsgType(),req.getAppId(),larkCompanyCode));
if (CollectionUtils.isEmpty(larkCompanyRelations)){
throw new RuntimeException(String.format("%s 无larkCompany配置信息 appId:%s appType:%s",req.getMsgType(),req.getAppId(),larkCompanyCode));
}
companyRelation = larkCompanyRelations.get(0);
req.setCompanyRelation(companyRelation);
} }
LarkTableRelation tableRelation = req.getTableRelation(); LarkCompanyRelation companyRelation = larkCompanyRelations.get(0);
if (tableRelation == null){ req.setCompanyRelation(companyRelation);
LarkTableRelation queryTable = new LarkTableRelation(); LarkTableRelation queryTable = new LarkTableRelation();
queryTable.setLarkCompanyRelationId(companyRelation.getId()); queryTable.setLarkCompanyRelationId(companyRelation.getId());
queryTable.setFlag(FlagStatus.OK.getCode()); queryTable.setFlag(FlagStatus.OK.getCode());
List<LarkTableRelation> larkTableRelations = larkTableRelationMapper.selectLarkTableRelationList(queryTable); List<LarkTableRelation> larkTableRelations = larkTableRelationMapper.selectLarkTableRelationList(queryTable);
if (CollectionUtils.isEmpty(larkTableRelations)){ if (CollectionUtils.isEmpty(larkTableRelations)){
throw new RuntimeException(String.format("%s 无larkTableRelation配置信息 appId:%s appType:%s larkCompanyId:%s",req.getMsgType(),req.getAppId(),larkCompanyCode,companyRelation.getId())); throw new RuntimeException(String.format("%s 无larkTableRelation配置信息 appId:%s appType:%s larkCompanyId:%s",req.getMsgType(),req.getAppId(),larkCompanyCode,companyRelation.getId()));
}
tableRelation = larkTableRelations.get(0);
req.setTableRelation(tableRelation);
} }
LarkTableRelation tableRelation = larkTableRelations.get(0);
req.setTableRelation(tableRelation);
} }
private String buildRobotErrorCountMessage(CJTEdiCallbackRequestVo req,Exception e){ private String buildRobotErrorCountMessage(CJTEdiCallbackRequestVo req,Exception e){
@ -188,12 +178,12 @@ public abstract class CJTOperateCallBackAbstract {
return body.toJSONString(); return body.toJSONString();
} }
protected LarkTableRequest buildLarkTableRequest(CJTEdiCallbackRequestVo req){ protected LarkTableRequest buildLarkTableRequest(LarkCompanyRelation companyRelation,LarkTableRelation tableRelation){
LarkTableRequest request = new LarkTableRequest(); LarkTableRequest request = new LarkTableRequest();
request.setAppId(req.getLarkAppId()); request.setAppId(companyRelation.getAppId());
request.setAppSecret(req.getLarkAppSecret()); request.setAppSecret(companyRelation.getSecret());
request.setAppToken(req.getLarkToAppToken()); request.setAppToken(tableRelation.getToAppToken());
request.setAppTable(req.getLarkToTableId()); request.setAppTable(tableRelation.getToTableId());
return request; return request;
} }
@ -201,93 +191,67 @@ public abstract class CJTOperateCallBackAbstract {
protected void addRecord(CJTEdiCallbackRequestVo req, JSONObject header) { protected void addRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody) {
LarkTableRelation tableRelation = req.getTableRelation();
//多维表格id //多维表格id
String toTableId = req.getLarkToTableId(); String toTableId = tableRelation.getToTableId();
//头部信息
JSONObject header = returnBody.getJSONObject("data");
//明细信息 //明细信息
JSONArray details = header.getJSONArray(getDetailName()); JSONArray saleOrderDetails = header.getJSONArray(getDetailName());
//待创建关联关系 //待创建关联关系
List<ErpLarkRelation> relationList = new ArrayList<>(); List<ErpLarkRelation> relationList = new ArrayList<>();
LarkTableRequest request = this.buildLarkTableRequest(req); LarkTableRequest request = this.buildLarkTableRequest(req.getCompanyRelation(), req.getTableRelation());
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
List<String> errorList = new ArrayList<>(); for (int i = 0; i < saleOrderDetails.size(); i++) {
for (int i = 0; i < details.size(); i++) { JSONObject detail = saleOrderDetails.getJSONObject(i);
try { String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum);
JSONObject detail = details.getJSONObject(i); Map<String, Object> larkBody = buildLarkBody(header, detail,cjtAccountEnum);
String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum); request.setBody(larkBody);
Map<String, Object> larkBody = buildLarkBody(header, detail,cjtAccountEnum); CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request);
request.setBody(larkBody); String larkKey = respBody.getRecord().getRecordId();
CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request); relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode()));
String larkKey = respBody.getRecord().getRecordId();
relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(),toTableId,req.getVoucherId()));
}catch (Exception e){
errorList.add(e.getMessage());
}
}
if (CollectionUtils.isEmpty(errorList)){
req.setRetry(Boolean.FALSE);
} }
if (!org.springframework.util.CollectionUtils.isEmpty(relationList)) { if (!org.springframework.util.CollectionUtils.isEmpty(relationList)) {
erpLarkRelationMapper.batchInsert(relationList); erpLarkRelationMapper.batchInsert(relationList);
} }
if (CollectionUtils.isNotEmpty(errorList)){
throw new RuntimeException(String.join(",",errorList));
}
} }
protected void updateRecord(CJTEdiCallbackRequestVo req, JSONObject header) { protected void updateRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody) {
LarkTableRelation tableRelation = req.getTableRelation();
//多维表格id //多维表格id
String toTableId = req.getLarkToTableId(); String toTableId = tableRelation.getToTableId();
//头部信息
JSONObject header = returnBody.getJSONObject("data");
//明细信息 //明细信息
JSONArray details = header.getJSONArray(getDetailName()); JSONArray saleOrderDetails = header.getJSONArray(getDetailName());
//待创建关联关系 //待创建关联关系
List<ErpLarkRelation> waitCreateRelationList = new ArrayList<>(); List<ErpLarkRelation> waitCreateRelationList = new ArrayList<>();
LarkTableRequest request = this.buildLarkTableRequest(req); LarkTableRequest request = this.buildLarkTableRequest(req.getCompanyRelation(), req.getTableRelation());
CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum();
//获取已经存在的明细 //获取已经存在的明细
Map<String, ErpLarkRelation> existMap = getExistRecords(req).stream().collect(Collectors.toMap(ErpLarkRelation::getKey, Function.identity(), (K1, k2) -> K1)); Map<String, ErpLarkRelation> existMap = getExistRecords(req).stream().collect(Collectors.toMap(ErpLarkRelation::getKey, Function.identity(), (K1, k2) -> K1));
if (existMap != null && existMap.size() > 0){ for (int i = 0; i < saleOrderDetails.size(); i++) {
List<ErpLarkRelation> collect = existMap.values().stream().collect(Collectors.toList()); JSONObject detail = saleOrderDetails.getJSONObject(i);
toTableId = collect.get(0).getLarkTable();
}
List<String> errorList = new ArrayList<>();
for (int i = 0; i < details.size(); i++) {
JSONObject detail = details.getJSONObject(i);
String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum); String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum);
Map<String, Object> larkBody = buildLarkBody(header, detail,cjtAccountEnum); Map<String, Object> larkBody = buildLarkBody(header, detail,cjtAccountEnum);
request.setBody(larkBody); request.setBody(larkBody);
if (existMap.containsKey(uniqueKey)){ if (existMap.containsKey(uniqueKey)){
try { ErpLarkRelation erpLarkRelation = existMap.get(uniqueKey);
ErpLarkRelation erpLarkRelation = existMap.get(uniqueKey); request.setRecord(erpLarkRelation.getLarkKey());
request.setRecord(erpLarkRelation.getLarkKey()); request.setAppTable(erpLarkRelation.getLarkTable());
request.setAppTable(erpLarkRelation.getLarkTable()); larkTableHelper.updateTableRecord(request);
larkTableHelper.updateTableRecord(request);
}catch (Exception e){
errorList.add(e.getMessage());
}
}else { }else {
try { request.setRecord(null);
request.setRecord(null); request.setAppTable(toTableId);
request.setAppTable(toTableId); CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request);
CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request); String larkKey = respBody.getRecord().getRecordId();
String larkKey = respBody.getRecord().getRecordId(); waitCreateRelationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode()));
waitCreateRelationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(),toTableId,req.getVoucherId()));
}catch (Exception e){
errorList.add(e.getMessage());
}
} }
} }
if (CollectionUtils.isEmpty(errorList)){
req.setRetry(Boolean.FALSE);
}
if (!org.springframework.util.CollectionUtils.isEmpty(waitCreateRelationList)) { if (!org.springframework.util.CollectionUtils.isEmpty(waitCreateRelationList)) {
erpLarkRelationMapper.batchInsert(waitCreateRelationList); erpLarkRelationMapper.batchInsert(waitCreateRelationList);
} }
if (CollectionUtils.isNotEmpty(errorList)){
throw new RuntimeException(String.join(",",errorList));
}
} }
protected abstract String getDetailName(); protected abstract String getDetailName();
@ -305,13 +269,11 @@ public abstract class CJTOperateCallBackAbstract {
protected abstract Map<String, Object> buildLarkBody(JSONObject header, JSONObject detail,CjtAccountEnum cjtAccountEnum); protected abstract Map<String, Object> buildLarkBody(JSONObject header, JSONObject detail,CjtAccountEnum cjtAccountEnum);
//构建飞书行与cjt唯一键的对应关系对象 //构建飞书行与cjt唯一键的对应关系对象
private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt,String tableId,String cjtId) { private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt) {
ErpLarkRelation erpLarkRelation = new ErpLarkRelation(); ErpLarkRelation erpLarkRelation = new ErpLarkRelation();
erpLarkRelation.setKey(key); erpLarkRelation.setKey(key);
erpLarkRelation.setCjtId(cjtId);
erpLarkRelation.setLarkKey(larkKey); erpLarkRelation.setLarkKey(larkKey);
erpLarkRelation.setLarkTable(tableId); erpLarkRelation.setMethod(getRequestUrl());
erpLarkRelation.setMethod(getMethodUrl());
erpLarkRelation.setFlag(FlagStatus.OK.getCode()); erpLarkRelation.setFlag(FlagStatus.OK.getCode());
erpLarkRelation.setRemark(cjt); erpLarkRelation.setRemark(cjt);
erpLarkRelation.setCreateBy("SYSTEM"); erpLarkRelation.setCreateBy("SYSTEM");
@ -336,12 +298,15 @@ public abstract class CJTOperateCallBackAbstract {
* @param req * @param req
*/ */
protected void deleteRecord(CJTEdiCallbackRequestVo req){ protected void deleteRecord(CJTEdiCallbackRequestVo req){
LarkTableRequest request = new LarkTableRequest(req.getLarkAppId(), req.getLarkAppSecret(), req.getLarkToAppToken(),null); LarkCompanyRelation companyRelation = req.getCompanyRelation();
LarkTableRelation tableRelation = req.getTableRelation();
LarkTableRequest request = new LarkTableRequest(companyRelation.getAppId(), companyRelation.getSecret(), tableRelation.getToAppToken());
Map<String,List<String>> waitDeleteLarkMap = new HashMap<>(); Map<String,List<String>> waitDeleteLarkMap = new HashMap<>();
List<ErpLarkRelation> relationList = getExistRecords(req); List<ErpLarkRelation> relationList = getExistRecords(req);
List<Long> waitDeleteIdList = new ArrayList<>(); List<Long> waitDeleteIdList = new ArrayList<>();
for (ErpLarkRelation record : relationList) { for (ErpLarkRelation record : relationList) {
String appTable = record.getLarkTable(); String[] s = record.getKey().split("_");
String appTable = s[s.length-1];
List<String> waitDeleteLarkList = waitDeleteLarkMap.getOrDefault(appTable, new ArrayList<>()); List<String> waitDeleteLarkList = waitDeleteLarkMap.getOrDefault(appTable, new ArrayList<>());
waitDeleteLarkList.add(record.getLarkKey()); waitDeleteLarkList.add(record.getLarkKey());
waitDeleteLarkMap.put(appTable,waitDeleteLarkList); waitDeleteLarkMap.put(appTable,waitDeleteLarkList);
@ -354,7 +319,6 @@ public abstract class CJTOperateCallBackAbstract {
larkTableHelper.deleteTableRecordBatch(request); larkTableHelper.deleteTableRecordBatch(request);
} }
} }
req.setRetry(Boolean.FALSE);
if (CollectionUtils.isNotEmpty(waitDeleteIdList)) { if (CollectionUtils.isNotEmpty(waitDeleteIdList)) {
erpLarkRelationMapper.deleteErpLarkRelationByIds(waitDeleteIdList); erpLarkRelationMapper.deleteErpLarkRelationByIds(waitDeleteIdList);
} }
@ -410,8 +374,24 @@ public abstract class CJTOperateCallBackAbstract {
}else { }else {
throw new RuntimeException("token不存在"); throw new RuntimeException("token不存在");
} }
// if (StringUtils.isEmpty(openToken)) {
// LarkCJTRequest cjtRequest = new LarkCJTRequest(REQUEST_GENERATE_TOKEN_PATH
// , cjtAccountEnum.getAppKey()
// , cjtAccountEnum.getAppSecret()
// , req.getTicket()
// , cjtAccountEnum.getCertificate());
// cjtRequest.buildGenerateBody();
// JSONObject body = JSONObject.parseObject(LarkOkHttpHelper.post(cjtRequest));
// JSONObject value = body.getJSONObject("value");
// String token = value.getString("accessToken");
// req.setOpenToken(token);
// redisCache.setCacheObject(tokenCacheKey, token, 5, TimeUnit.MINUTES);
// return token;
// } else {
// req.setOpenToken(openToken);
// return openToken;
// }
} }
/** /**
* *
*/ */

@ -1,91 +0,0 @@
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;
import org.springframework.stereotype.Component;
/**
* @author yuxiangyong
* @create 2023-10-14 10:44
*/
@Component
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.getByAppKey(appKey);
CjtCallBackOperateEnum callBackOperateEnum = CjtCallBackOperateEnum.getByCode(msgType);
if (cjtAccountEnum == null || callBackOperateEnum == null){
return;
}
if (bizContent == null){
return;
}
String voucherID = getVoucherId(bizContent);
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:
switch (cjtAccountEnum){
case ONE:
saleDispatchSyncCallOperate.execute(cjtEdiCallbackRequestVo);
break;
default:
break;
}
break;
case SALE_ORDER_CREATE:
case SALE_ORDER_UPDATE:
case SALE_ORDER_DELETE:
switch (cjtAccountEnum){
case ONE:
saleOrderSyncCallBackOperate.execute(cjtEdiCallbackRequestVo);
break;
default:
break;
}
break;
case MANUFACTURE_ORDER_CREATE:
case MANUFACTURE_ORDER_UPDATE:
case MANUFACTURE_ORDER_DELETE:
switch (cjtAccountEnum){
case TWO:
manufactureOrderSyncCallOperate.execute(cjtEdiCallbackRequestVo);
break;
default:
break;
}
break;
default:
break;
}
}
private String getVoucherId(JSONObject bizContent){
String voucherID = bizContent.getString("voucherID");
if (StringUtils.isNotBlank(voucherID)){
return voucherID;
}
return bizContent.getString("voucherId");
}
}

@ -1,12 +1,12 @@
package com.ruoyi.flyingbook.strategy.cjt; package com.ruoyi.flyingbook.strategy.cjt;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.enums.CjtAccountEnum; import com.ruoyi.common.enums.*;
import com.ruoyi.common.enums.CjtCallBackOperateEnum;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -55,8 +55,9 @@ public class ManufactureOrderSyncCallOperate extends CJTOperateCallBackAbstract
sb.append(inventory.get("Code")).append("_"); sb.append(inventory.get("Code")).append("_");
} }
sb.append(detail.get("Quantity")).append("_"); sb.append(detail.get("Quantity")).append("_");
sb.append(getSpecialKey(detail, "pubuserdefnvc2")); sb.append(getSpecialKey(detail, "pubuserdefnvc2")).append("_");
} }
sb.append(toTableId);
return sb.toString(); return sb.toString();
} }
@ -66,41 +67,29 @@ public class ManufactureOrderSyncCallOperate extends CJTOperateCallBackAbstract
Map<String, Object> body = new HashMap<>(); Map<String, Object> body = new HashMap<>();
body.put("单据日期", DateUtils.str2long(header.getString("VoucherDate"), DateUtils.YYYY_MM_DD)); body.put("单据日期", DateUtils.str2long(header.getString("VoucherDate"), DateUtils.YYYY_MM_DD));
body.put("来源单号", detail.getString("SourceVoucherCode")); body.put("来源单号", detail.getString("SourceVoucherCode"));
body.put("单据编", header.getString("Code")); body.put("单据编", header.getString("Code"));
//创建时间只有年月日 //创建时间只有年月日
// body.put("创建时间", DateUtils.str2long(header.getString("CreatedTime"), DateUtils.YYYY_MM_DD)); // body.put("创建时间", DateUtils.str2long(header.getString("CreatedTime"), DateUtils.YYYY_MM_DD));
body.put("创建时间", System.currentTimeMillis()); body.put("创建时间", System.currentTimeMillis());
JSONObject department = detail.getJSONObject("Department"); JSONObject department = detail.getJSONObject("Department");
if (department != null){ body.put("生产车间", department.getString("Name"));
body.put("生产车间", department.getString("Name"));
}
JSONObject person = detail.getJSONObject("Person"); JSONObject person = detail.getJSONObject("Person");
if (person != null){ body.put("负责人", person.getString("Name"));
body.put("负责人", person.getString("Name"));
}
JSONObject inventory = detail.getJSONObject("Inventory"); JSONObject inventory = detail.getJSONObject("Inventory");
if (inventory != null){ body.put("存货编码", inventory.getString("Code"));
body.put("存货编码", inventory.getString("Code")); body.put("存货", inventory.getString("Name"));
body.put("存货", inventory.getString("Name")); body.put("规格型号", inventory.getString("Specification"));
body.put("规格型号", inventory.getString("Specification"));
}
JSONObject unit = detail.getJSONObject("Unit"); JSONObject unit = detail.getJSONObject("Unit");
if (unit != null){ body.put("生产单位", unit.getString("Name"));
body.put("生产单位", unit.getString("Name"));
}
body.put("数量", detail.getDoubleValue("Quantity")); body.put("数量", detail.getDoubleValue("Quantity"));
body.put("备注1", getSpecialKey(detail, "pubuserdefnvc2")); body.put("备注1", getSpecialKey(detail, "pubuserdefnvc2"));
JSONObject customer = detail.getJSONObject("Customer"); JSONObject customer = detail.getJSONObject("Customer");
if (customer != null){ body.put("客户", customer.getString("Name"));
body.put("客户", customer.getString("Name"));
}
body.put("合并字段", getSpecialKey(detail, "priuserdefnvc1")); body.put("合并字段", getSpecialKey(detail, "priuserdefnvc1"));
switch (cjtAccountEnum) { switch (cjtAccountEnum) {
case ONE: case ONE:
@ -114,7 +103,7 @@ public class ManufactureOrderSyncCallOperate extends CJTOperateCallBackAbstract
@Override @Override
protected String getRequestUrl() { protected String getRequestUrl() {
return REQUEST_ROOT_PATH + "/tplus/api/v2/ManufactureOrderOpenApi/GetVoucherDTO"; return "/tplus/api/v2/ManufactureOrderOpenApi/GetVoucherDTO";
} }
@Override @Override

@ -7,8 +7,7 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.*;
import java.util.Map;
/** /**
* *
@ -52,7 +51,8 @@ public class SaleDispatchSyncCallOperate extends CJTOperateCallBackAbstract {
sb.append(detail.get("Quantity")).append("_"); sb.append(detail.get("Quantity")).append("_");
sb.append(detail.get("DetailMemo")).append("_"); sb.append(detail.get("DetailMemo")).append("_");
sb.append(header.get("SaleOrderCode")).append("_"); sb.append(header.get("SaleOrderCode")).append("_");
sb.append(getSpecialKey(detail, "pubuserdefnvc3")); sb.append(getSpecialKey(detail, "pubuserdefnvc3")).append("_");
sb.append(toTableId);
return sb.toString(); return sb.toString();
} }
@ -71,16 +71,13 @@ public class SaleDispatchSyncCallOperate extends CJTOperateCallBackAbstract {
body.put("配送路线", partner.getString("priuserdefnvc2")); body.put("配送路线", partner.getString("priuserdefnvc2"));
JSONObject inventory = detail.getJSONObject("Inventory"); JSONObject inventory = detail.getJSONObject("Inventory");
if (inventory != null){ body.put("存货编码", inventory.getString("Code"));
body.put("存货编码", inventory.getString("Code")); body.put("存货", inventory.getString("Name"));
body.put("存货", inventory.getString("Name")); body.put("规格型号", inventory.getString("Specification"));
body.put("规格型号", inventory.getString("Specification"));
}
JSONObject unit = detail.getJSONObject("Unit"); JSONObject unit = detail.getJSONObject("Unit");
if (unit != null){ body.put("计量单位", unit.getString("Name"));
body.put("计量单位", unit.getString("Name"));
}
body.put("数量", detail.getDoubleValue("Quantity")); body.put("数量", detail.getDoubleValue("Quantity"));
body.put("送货地址", header.getString("DispatchAddress")); body.put("送货地址", header.getString("DispatchAddress"));
//创建时间只有年月日 //创建时间只有年月日
@ -105,7 +102,7 @@ public class SaleDispatchSyncCallOperate extends CJTOperateCallBackAbstract {
@Override @Override
protected String getRequestUrl() { protected String getRequestUrl() {
return REQUEST_ROOT_PATH + "/tplus/api/v2/SaleDispatchOpenApi/GetVoucherDTO"; return "/tplus/api/v2/SaleDispatchOpenApi/GetVoucherDTO";
} }
@Override @Override

@ -1,12 +1,12 @@
package com.ruoyi.flyingbook.strategy.cjt; package com.ruoyi.flyingbook.strategy.cjt;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.enums.CjtAccountEnum; import com.ruoyi.common.enums.*;
import com.ruoyi.common.enums.CjtCallBackOperateEnum;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo; import com.ruoyi.flyingbook.domain.edi.CJTEdiCallbackRequestVo;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -15,8 +15,8 @@ import java.util.Map;
* @author yuxiangyong * @author yuxiangyong
* @create 2023-07-17 21:21 * @create 2023-07-17 21:21
*/ */
@Component("saleOrderSyncCallBackOperate") @Component("saleOrderSyncCallBack")
public class SaleOrderSyncCallBackOperate extends CJTOperateCallBackAbstract{ public class SaleOrderSyncCallBack extends CJTOperateCallBackAbstract{
@Override @Override
protected void syncRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody) { protected void syncRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody) {
@ -60,8 +60,9 @@ public class SaleOrderSyncCallBackOperate extends CJTOperateCallBackAbstract{
sb.append(inventory.get("Code")).append("_"); sb.append(inventory.get("Code")).append("_");
} }
sb.append(detail.get("Quantity")).append("_"); sb.append(detail.get("Quantity")).append("_");
sb.append(detail.get("DetailMemo")); sb.append(detail.get("DetailMemo")).append("_");
} }
sb.append(toTableId);
return sb.toString(); return sb.toString();
} }
@ -83,16 +84,12 @@ public class SaleOrderSyncCallBackOperate extends CJTOperateCallBackAbstract{
body.put("单据状态", voucherState.getString("Name")); body.put("单据状态", voucherState.getString("Name"));
JSONObject inventory = detail.getJSONObject("Inventory"); JSONObject inventory = detail.getJSONObject("Inventory");
if (inventory != null) { body.put("存货编码", inventory.getString("Code"));
body.put("存货编码", inventory.getString("Code")); body.put("存货", inventory.getString("Name"));
body.put("存货", inventory.getString("Name")); body.put("规格型号", inventory.getString("Specification"));
body.put("规格型号", inventory.getString("Specification"));
}
JSONObject unit = detail.getJSONObject("Unit"); JSONObject unit = detail.getJSONObject("Unit");
if (unit != null) { body.put("销售单位", unit.getString("Name"));
body.put("销售单位", unit.getString("Name"));
}
body.put("数量", detail.getDoubleValue("Quantity")); body.put("数量", detail.getDoubleValue("Quantity"));
body.put("累计执行数量", detail.getDoubleValue("累计执行数量")); body.put("累计执行数量", detail.getDoubleValue("累计执行数量"));
@ -112,7 +109,7 @@ public class SaleOrderSyncCallBackOperate extends CJTOperateCallBackAbstract{
@Override @Override
protected String getRequestUrl() { protected String getRequestUrl() {
return REQUEST_ROOT_PATH + "/tplus/api/v2/SaleOrderOpenApi/GetVoucherDTO"; return "/tplus/api/v2/SaleOrderOpenApi/GetVoucherDTO";
} }
@Override @Override

@ -1,154 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.flyingbook.mapper.ErpLarkRelationMainMapper">
<resultMap type="com.ruoyi.flyingbook.domain.ErpLarkRelation" id="ErpLarkRelationResult">
<result property="id" column="id"/>
<result property="key" column="key"/>
<result property="method" column="method"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="flag" column="flag"/>
<result property="remark" column="remark"/>
<result property="larkKey" column="lark_key"/>
</resultMap>
<sql id="selectErpLarkRelationVo">
select id, key, method, create_by, create_time, update_by, update_time, flag, remark, lark_key
from erp_lark_relation_main
</sql>
<select id="selectErpLarkRelationList" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation"
resultMap="ErpLarkRelationResult">
<include refid="selectErpLarkRelationVo"/>
<where>
<if test="key != null and key != ''">and key = #{key}</if>
<if test="method != null and method != ''">and method = #{method}</if>
<if test="larkKey != null and larkKey != ''">and lark_key = #{larkKey}</if>
<if test="flag != null ">and flag = #{flag}</if>
</where>
</select>
<select id="selectErpLarkRelationById" parameterType="Long" resultMap="ErpLarkRelationResult">
<include refid="selectErpLarkRelationVo"/>
where id = #{id}
</select>
<select id="queryListByKeyList" resultMap="ErpLarkRelationResult">
select `key`, `method`,lark_key
from erp_lark_relation_main
where `method` = #{method} and `key` in
<foreach collection="keyList" open="(" separator="," close=")" item="item">
#{item}
</foreach>
</select>
<select id="queryListByKeyListAndRemark" resultMap="ErpLarkRelationResult">
select `key`, `method`,lark_key
from erp_lark_relation_main
where `method` = #{method} and remark = #{remark} and `key` in
<foreach collection="keyList" open="(" separator="," close=")" item="item">
#{item}
</foreach>
</select>
<select id="queryWaitDeleteRecordList" resultType="java.lang.String">
SELECT lark_key
FROM erp_lark_relation_main
WHERE DATE (create_time) >= #{currentDay}
and remark = #{remark}
and `method` = #{method}
</select>
<delete id="deleteRecordList">
delete FROM erp_lark_relation_main
WHERE DATE (create_time) >= #{currentDay}
and remark = #{remark}
and `method` = #{method}
</delete>
<select id="queryListByKey" resultMap="ErpLarkRelationResult">
select id, `key`, `method`, lark_key
from erp_lark_relation_main
where `method` = #{method}
and `key` like CONCAT('%', #{key}, '%')
</select>
<insert id="insertErpLarkRelation" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation"
useGeneratedKeys="true" keyProperty="id">
insert into erp_lark_relation_main
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="key != null">key,</if>
<if test="method != null">method,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="flag != null">flag,</if>
<if test="remark != null">remark,</if>
<if test="larkKey != null">lark_key,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="key != null">#{key},</if>
<if test="method != null">#{method},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="flag != null">#{flag},</if>
<if test="remark != null">#{remark},</if>
<if test="larkKey != null">#{larkKey},</if>
</trim>
</insert>
<insert id="batchInsert" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation" useGeneratedKeys="true"
keyProperty="id">
insert into erp_lark_relation_main(`key`,`method`,create_by,create_time,flag,lark_key,remark,update_time)
values
<foreach collection="erpLarkRelationList" item="relation" separator=",">
(
#{relation.key}
,#{relation.method}
,#{relation.createBy}
,#{relation.createTime}
,#{relation.flag}
,#{relation.larkKey}
,#{relation.remark}
,#{relation.updateTime}
)
</foreach>
</insert>
<update id="updateErpLarkRelation" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation">
update erp_lark_relation_main
<trim prefix="SET" suffixOverrides=",">
<if test="key != null">key = #{key},</if>
<if test="method != null">method = #{method},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="flag != null">flag = #{flag},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="larkKey != null">lark_key = #{larkKey},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteErpLarkRelationById" parameterType="Long">
delete
from erp_lark_relation_main
where id = #{id}
</delete>
<delete id="deleteErpLarkRelationByIds" parameterType="Long">
delete from erp_lark_relation_main where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

@ -6,8 +6,6 @@
<resultMap type="com.ruoyi.flyingbook.domain.ErpLarkRelation" id="ErpLarkRelationResult"> <resultMap type="com.ruoyi.flyingbook.domain.ErpLarkRelation" id="ErpLarkRelationResult">
<result property="id" column="id"/> <result property="id" column="id"/>
<result property="cjtId" column="cjt_id"/>
<result property="larkTable" column="lark_table"/>
<result property="key" column="key"/> <result property="key" column="key"/>
<result property="method" column="method"/> <result property="method" column="method"/>
<result property="createBy" column="create_by"/> <result property="createBy" column="create_by"/>
@ -20,21 +18,18 @@
</resultMap> </resultMap>
<sql id="selectErpLarkRelationVo"> <sql id="selectErpLarkRelationVo">
select id,cjt_id, `key`,lark_table, `method`, create_by, create_time, update_by, update_time, flag, remark, lark_key select id, key, method, create_by, create_time, update_by, update_time, flag, remark, lark_key
from erp_lark_relation from erp_lark_relation_main
</sql> </sql>
<select id="selectErpLarkRelationList" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation" <select id="selectErpLarkRelationList" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation"
resultMap="ErpLarkRelationResult"> resultMap="ErpLarkRelationResult">
<include refid="selectErpLarkRelationVo"/> <include refid="selectErpLarkRelationVo"/>
<where> <where>
<if test="cjtId != null and cjtId != ''">and cjt_id = #{cjtId}</if> <if test="key != null and key != ''">and key = #{key}</if>
<if test="larkTable != null and larkTable != ''">and lark_table = #{larkTable}</if> <if test="method != null and method != ''">and method = #{method}</if>
<if test="key != null and key != ''">and `key` = #{key}</if>
<if test="method != null and method != ''">and `method` = #{method}</if>
<if test="larkKey != null and larkKey != ''">and lark_key = #{larkKey}</if> <if test="larkKey != null and larkKey != ''">and lark_key = #{larkKey}</if>
<if test="flag != null ">and flag = #{flag}</if> <if test="flag != null ">and flag = #{flag}</if>
<if test="remark != null ">and remark = #{remark}</if>
</where> </where>
</select> </select>
@ -44,7 +39,7 @@
</select> </select>
<select id="queryListByKeyList" resultMap="ErpLarkRelationResult"> <select id="queryListByKeyList" resultMap="ErpLarkRelationResult">
select `key`, `method`,lark_key select `key`, `method`,lark_key
from erp_lark_relation from erp_lark_relation_main
where `method` = #{method} and `key` in where `method` = #{method} and `key` in
<foreach collection="keyList" open="(" separator="," close=")" item="item"> <foreach collection="keyList" open="(" separator="," close=")" item="item">
#{item} #{item}
@ -53,7 +48,7 @@
<select id="queryListByKeyListAndRemark" resultMap="ErpLarkRelationResult"> <select id="queryListByKeyListAndRemark" resultMap="ErpLarkRelationResult">
select `key`, `method`,lark_key select `key`, `method`,lark_key
from erp_lark_relation from erp_lark_relation_main
where `method` = #{method} and remark = #{remark} and `key` in where `method` = #{method} and remark = #{remark} and `key` in
<foreach collection="keyList" open="(" separator="," close=")" item="item"> <foreach collection="keyList" open="(" separator="," close=")" item="item">
#{item} #{item}
@ -62,14 +57,14 @@
<select id="queryWaitDeleteRecordList" resultType="java.lang.String"> <select id="queryWaitDeleteRecordList" resultType="java.lang.String">
SELECT lark_key SELECT lark_key
FROM erp_lark_relation FROM erp_lark_relation_main
WHERE DATE (create_time) >= #{currentDay} WHERE DATE (create_time) >= #{currentDay}
and remark = #{remark} and remark = #{remark}
and `method` = #{method} and `method` = #{method}
</select> </select>
<delete id="deleteRecordList"> <delete id="deleteRecordList">
delete FROM erp_lark_relation delete FROM erp_lark_relation_main
WHERE DATE (create_time) >= #{currentDay} WHERE DATE (create_time) >= #{currentDay}
and remark = #{remark} and remark = #{remark}
and `method` = #{method} and `method` = #{method}
@ -77,19 +72,17 @@
<select id="queryListByKey" resultMap="ErpLarkRelationResult"> <select id="queryListByKey" resultMap="ErpLarkRelationResult">
select id, `key`, `method`, lark_key select id, `key`, `method`, lark_key
from erp_lark_relation from erp_lark_relation_main
where `method` = #{method} where `method` = #{method}
and `key` = #{key} and `key` like CONCAT('%', #{key}, '%')
</select> </select>
<insert id="insertErpLarkRelation" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation" <insert id="insertErpLarkRelation" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation"
useGeneratedKeys="true" keyProperty="id"> useGeneratedKeys="true" keyProperty="id">
insert into erp_lark_relation insert into erp_lark_relation_main
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="cjtId != null and cjtId != ''">cjt_id,</if> <if test="key != null">key,</if>
<if test="larkTable != null and larkTable != ''">cjt_id,</if> <if test="method != null">method,</if>
<if test="key != null">`key`,</if>
<if test="method != null">`method`,</if>
<if test="createBy != null and createBy != ''">create_by,</if> <if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if> <if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if> <if test="updateBy != null">update_by,</if>
@ -99,8 +92,6 @@
<if test="larkKey != null">lark_key,</if> <if test="larkKey != null">lark_key,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="cjtId != null and cjtId != ''">#{cjtId},</if>
<if test="larkTable != null and larkTable != ''">#{larkTable},</if>
<if test="key != null">#{key},</if> <if test="key != null">#{key},</if>
<if test="method != null">#{method},</if> <if test="method != null">#{method},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if> <if test="createBy != null and createBy != ''">#{createBy},</if>
@ -114,13 +105,11 @@
</insert> </insert>
<insert id="batchInsert" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation" useGeneratedKeys="true" <insert id="batchInsert" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation" useGeneratedKeys="true"
keyProperty="id"> keyProperty="id">
insert into erp_lark_relation(cjt_id,lark_table,`key`,`method`,create_by,create_time,flag,lark_key,remark,update_time) insert into erp_lark_relation_main(`key`,`method`,create_by,create_time,flag,lark_key,remark,update_time)
values values
<foreach collection="erpLarkRelationList" item="relation" separator=","> <foreach collection="erpLarkRelationList" item="relation" separator=",">
( (
#{relation.cjtId} #{relation.key}
,#{relation.larkTable}
,#{relation.key}
,#{relation.method} ,#{relation.method}
,#{relation.createBy} ,#{relation.createBy}
,#{relation.createTime} ,#{relation.createTime}
@ -133,10 +122,8 @@
</insert> </insert>
<update id="updateErpLarkRelation" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation"> <update id="updateErpLarkRelation" parameterType="com.ruoyi.flyingbook.domain.ErpLarkRelation">
update erp_lark_relation update erp_lark_relation_main
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="cjtId != null and cjtId != ''">cjt_id = #{cjtId},</if>
<if test="larkTable != null and larkTable != ''">lark_table = #{larkTable},</if>
<if test="key != null">key = #{key},</if> <if test="key != null">key = #{key},</if>
<if test="method != null">method = #{method},</if> <if test="method != null">method = #{method},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if> <if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
@ -154,12 +141,12 @@
<delete id="deleteErpLarkRelationById" parameterType="Long"> <delete id="deleteErpLarkRelationById" parameterType="Long">
delete delete
from erp_lark_relation from erp_lark_relation_main
where id = #{id} where id = #{id}
</delete> </delete>
<delete id="deleteErpLarkRelationByIds" parameterType="Long"> <delete id="deleteErpLarkRelationByIds" parameterType="Long">
delete from erp_lark_relation where id in delete from erp_lark_relation_main where id in
<foreach item="id" collection="array" open="(" separator="," close=")"> <foreach item="id" collection="array" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>

@ -50,25 +50,16 @@ public class RefreshTokenJob {
return; return;
} }
for (CjtAccountEnum value : CjtAccountEnum.values()) { for (CjtAccountEnum value : CjtAccountEnum.values()) {
getToken(value); String ticket = resetTicket(value);
generateToken(value,ticket);
} }
} }
public String getToken(CjtAccountEnum value){
String ticket = resetTicket(value);
return generateToken(value,ticket);
}
/** /**
* ticket, * ticket,
*/ */
private String resetTicket(CjtAccountEnum value) { private String resetTicket(CjtAccountEnum value) {
try { try {
String refreshCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TICKET_REFRESH_CACHE_KEY, value.getAppKey());
Boolean flag = redisCache.setCacheObjectIfAbsent(refreshCacheKey, refreshCacheKey, 5L, TimeUnit.SECONDS);
if (!flag){
return null;
}
String ticketCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, value.getAppKey()); String ticketCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, value.getAppKey());
Object cacheObject = redisCache.getCacheObject(ticketCacheKey); Object cacheObject = redisCache.getCacheObject(ticketCacheKey);
//重置ticket存在响应时间提前十秒重置 //重置ticket存在响应时间提前十秒重置
@ -79,7 +70,7 @@ public class RefreshTokenJob {
, value.getAppSecret()); , value.getAppSecret());
post(cjtRequest); post(cjtRequest);
} }
Thread.sleep(3000); Thread.sleep(5000);
return ticketCacheKey; return ticketCacheKey;
} catch (Exception e) { } catch (Exception e) {
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, String.format("%s 获取ticket失败请注意",value.getCode(),e)); larkRobotHelper.sendMessageByBot(ROBOT_GROUP, String.format("%s 获取ticket失败请注意",value.getCode(),e));
@ -90,14 +81,15 @@ public class RefreshTokenJob {
/** /**
* token * token
*/ */
private String generateToken(CjtAccountEnum cjtAccountEnum, String ticketKey) { private void generateToken(CjtAccountEnum cjtAccountEnum, String ticketKey) {
try { try {
if (StringUtils.isEmpty(ticketKey)){ if (StringUtils.isEmpty(ticketKey)){
return null; return;
} }
String ticketCacheKey = (String) redisCache.getCacheObject(ticketKey); String ticketCacheKey = (String) redisCache.getCacheObject(ticketKey);
if (!StringUtils.isEmpty(ticketCacheKey)) { if (!StringUtils.isEmpty(ticketCacheKey)) {
String tokenCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, cjtAccountEnum.getAppKey()); // String tokenCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, cjtAccountEnum.getAppKey());
String tokenCacheKey = buildCacheUniqueKey("OPEN_TOKEN_TEST", cjtAccountEnum.getAppKey());
CJTRequest cjtRequest = new CJTRequest(REQUEST_GENERATE_TOKEN_PATH CJTRequest cjtRequest = new CJTRequest(REQUEST_GENERATE_TOKEN_PATH
, cjtAccountEnum.getAppKey() , cjtAccountEnum.getAppKey()
, cjtAccountEnum.getAppSecret() , cjtAccountEnum.getAppSecret()
@ -108,12 +100,10 @@ public class RefreshTokenJob {
JSONObject value = body.getJSONObject("value"); JSONObject value = body.getJSONObject("value");
String token = value.getString("accessToken"); String token = value.getString("accessToken");
redisCache.setCacheObject(tokenCacheKey, token, 24, TimeUnit.HOURS); redisCache.setCacheObject(tokenCacheKey, token, 24, TimeUnit.HOURS);
return token;
} }
}catch (Exception e){ }catch (Exception e){
larkRobotHelper.sendMessageByBot(ROBOT_GROUP, String.format("%s 获取token失败请注意",cjtAccountEnum.getCode(),e)); larkRobotHelper.sendMessageByBot(ROBOT_GROUP, String.format("%s 获取token失败请注意",cjtAccountEnum.getCode(),e));
} }
return null;
} }
private String buildCacheUniqueKey(String key, String appKey) { private String buildCacheUniqueKey(String key, String appKey) {

@ -11,10 +11,11 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper; import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper;
import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper; import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper;
import com.ruoyi.flyingbook.domain.ErpLarkRelation; import com.ruoyi.flyingbook.domain.ErpLarkRelation;
import com.ruoyi.flyingbook.domain.ErpLarkTempRelation;
import com.ruoyi.flyingbook.domain.LarkCompanyRelation; import com.ruoyi.flyingbook.domain.LarkCompanyRelation;
import com.ruoyi.flyingbook.domain.LarkTableRelation; import com.ruoyi.flyingbook.domain.LarkTableRelation;
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import com.ruoyi.flyingbook.mapper.ErpLarkRelationMainMapper; import com.ruoyi.flyingbook.mapper.ErpLarkRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper; import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper; import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper;
import com.ruoyi.quartz.domain.*; import com.ruoyi.quartz.domain.*;
@ -48,7 +49,7 @@ public abstract class SyncAccountsJobAbstract {
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired @Autowired
protected ErpLarkRelationMainMapper erpLarkRelationMapper; protected ErpLarkRelationMapper erpLarkRelationMapper;
@Autowired @Autowired
private LarkCompanyRelationMapper larkCompanyRelationMapper; private LarkCompanyRelationMapper larkCompanyRelationMapper;
@Autowired @Autowired
@ -63,8 +64,6 @@ public abstract class SyncAccountsJobAbstract {
DataSourceTransactionManager dataSourceTransactionManager; DataSourceTransactionManager dataSourceTransactionManager;
@Autowired @Autowired
TransactionDefinition transactionDefinition; TransactionDefinition transactionDefinition;
@Autowired
private RefreshTokenJob refreshTokenJob;
@Value("${lark.robot.group}") @Value("${lark.robot.group}")
private String ROBOT_GROUP; private String ROBOT_GROUP;
@ -153,7 +152,7 @@ public abstract class SyncAccountsJobAbstract {
//初始化飞书信息及相关配置 //初始化飞书信息及相关配置
initLarkInfo(context); initLarkInfo(context);
//重置ticket //重置ticket
// resetTicket(context); resetTicket(context);
//执行分页同步 //执行分页同步
sync(context); sync(context);
} catch (Exception e) { } catch (Exception e) {
@ -563,23 +562,23 @@ public abstract class SyncAccountsJobAbstract {
* ticket, * ticket,
*/ */
private void resetTicket(CJTJobContext context) { private void resetTicket(CJTJobContext context) {
// String ticketCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, context.getAppKey()); String ticketCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TICKET_CACHE_KEY, context.getAppKey());
// Long expireTime = redisCache.getExpireTime(ticketCacheKey); Long expireTime = redisCache.getExpireTime(ticketCacheKey);
// //重置ticket存在响应时间提前十秒重置 //重置ticket存在响应时间提前十秒重置
// if (expireTime == null || expireTime < 10) { if (expireTime == null || expireTime < 10) {
// log.info("重置ticket"); log.info("重置ticket");
// CJTRequest cjtRequest = new CJTRequest(REQUEST_RESET_TICKET_PATH CJTRequest cjtRequest = new CJTRequest(REQUEST_RESET_TICKET_PATH
// , context.getAppKey() , context.getAppKey()
// , context.getAppSecret()); , context.getAppSecret());
// post(cjtRequest); post(cjtRequest);
// } }
// try { try {
// Thread.sleep(1000); Thread.sleep(1000);
// } catch (Exception e) { } catch (Exception e) {
// e.printStackTrace(); e.printStackTrace();
// } }
// String ticket = (String) redisCache.getCacheObject(ticketCacheKey); String ticket = (String) redisCache.getCacheObject(ticketCacheKey);
// context.setTicket(ticket); context.setTicket(ticket);
} }
/** /**
@ -589,27 +588,24 @@ public abstract class SyncAccountsJobAbstract {
String tokenCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, context.getAppKey()); String tokenCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, context.getAppKey());
String openToken = (String) redisCache.getCacheObject(tokenCacheKey); String openToken = (String) redisCache.getCacheObject(tokenCacheKey);
if (StringUtils.isEmpty(openToken)) { if (StringUtils.isEmpty(openToken)) {
CjtAccountEnum cjtAccountEnum = cjtAccount(context.getCjt()); CJTRequest cjtRequest = new CJTRequest(REQUEST_GENERATE_TOKEN_PATH
waitForToken(cjtAccountEnum); , context.getAppKey()
return refreshTokenJob.getToken(cjtAccountEnum); , context.getAppSecret()
, context.getTicket()
, context.getCertificate());
cjtRequest.buildGenerateBody();
JSONObject body = JSONObject.parseObject(post(cjtRequest));
JSONObject value = body.getJSONObject("value");
String token = value.getString("accessToken");
context.setOpenToken(token);
redisCache.setCacheObject(tokenCacheKey, token, 5, TimeUnit.MINUTES);
return token;
} else { } else {
context.setOpenToken(openToken); context.setOpenToken(openToken);
return openToken; return openToken;
} }
} }
private void waitForToken(CjtAccountEnum cjtAccountEnum){
try {
String refreshCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TICKET_REFRESH_CACHE_KEY, cjtAccountEnum.getAppKey());
Long expireTime = redisCache.getExpireTime(refreshCacheKey);
if (expireTime != null && expireTime > 0){
Thread.sleep(expireTime);
}
}catch (Exception e){
log.info("",e);
}
}
/** /**
* token * token
*/ */

@ -13,7 +13,7 @@ import com.ruoyi.flyingbook.domain.ErpLarkRelation;
import com.ruoyi.flyingbook.domain.LarkCompanyRelation; import com.ruoyi.flyingbook.domain.LarkCompanyRelation;
import com.ruoyi.flyingbook.domain.LarkTableRelation; import com.ruoyi.flyingbook.domain.LarkTableRelation;
import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; import com.ruoyi.flyingbook.domain.lark.LarkTableRequest;
import com.ruoyi.flyingbook.mapper.ErpLarkRelationMainMapper; import com.ruoyi.flyingbook.mapper.ErpLarkRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper; import com.ruoyi.flyingbook.mapper.LarkCompanyRelationMapper;
import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper; import com.ruoyi.flyingbook.mapper.LarkTableRelationMapper;
import com.ruoyi.quartz.domain.OdooContext; import com.ruoyi.quartz.domain.OdooContext;
@ -43,7 +43,7 @@ import static java.util.Collections.emptyMap;
@Slf4j @Slf4j
public abstract class OdooAbstrackob { public abstract class OdooAbstrackob {
@Autowired @Autowired
protected ErpLarkRelationMainMapper erpLarkRelationMapper; protected ErpLarkRelationMapper erpLarkRelationMapper;
@Autowired @Autowired
private LarkCompanyRelationMapper larkCompanyRelationMapper; private LarkCompanyRelationMapper larkCompanyRelationMapper;
@Autowired @Autowired

Loading…
Cancel
Save