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 05f12dc..89dd047 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 @@ -37,6 +37,7 @@ import java.util.stream.Collectors; /** * 畅捷通回调接口操作 + * * @author yuxiangyong * @create 2023-10-11 19:54 */ @@ -63,11 +64,11 @@ public abstract class CJTOperateCallBackAbstract { */ protected static final String REQUEST_ROOT_PATH = "https://openapi.chanjet.com"; - public void execute(CJTEdiCallbackRequestVo req){ + 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){ + if (!operateFlag) { return; } preHandle(req); @@ -75,27 +76,27 @@ public abstract class CJTOperateCallBackAbstract { // resetTicket(req); sync(req); endHandle(req); - }catch (Exception e){ - log.error("{} execute error",this.getClass().getSimpleName(),e); - if (req.getRetry() && req.getRetryCount() < 3){ + } catch (Exception e) { + log.error("{} execute error", this.getClass().getSimpleName(), e); + if (req.getRetry() && req.getRetryCount() < 3) { req.addRetryCount(); execute(req); - }else { - errorHandle(req,e); - larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req,e)); + } else { + errorHandle(req, e); + larkRobotHelper.sendMessageByBot(ROBOT_GROUP, buildRobotErrorCountMessage(req, e)); } - }finally { + } finally { redisCache.deleteObject(operateCallBackFlag); } } - private void preHandle(CJTEdiCallbackRequestVo req){ - if (req.getRetryCount() > 0){ + private void preHandle(CJTEdiCallbackRequestVo req) { + if (req.getRetryCount() > 0) { return; } Date date = new Date(); ErpLarkTempRelation erpLarkTempRelation = new ErpLarkTempRelation(); - erpLarkTempRelation.setKey(req.getBody().getString("voucherID")); + erpLarkTempRelation.setKey(req.getVoucherId()); erpLarkTempRelation.setMethod(req.getMsgType()); erpLarkTempRelation.setLarkKey(req.getAppId()); erpLarkTempRelation.setCreateBy("System"); @@ -106,32 +107,33 @@ public abstract class CJTOperateCallBackAbstract { req.setTempId(erpLarkTempRelation.getId()); } - private void endHandle(CJTEdiCallbackRequestVo req){ - if (req.getTempId() != null){ - erpLarkTempRelationMapper.updateForCjt(FlagStatus.DELETED.getCode(), req.getTempId(),""); + private void endHandle(CJTEdiCallbackRequestVo req) { + if (req.getTempId() != null) { + erpLarkTempRelationMapper.updateForCjt(FlagStatus.DELETED.getCode(), req.getTempId(), ""); } } - private void errorHandle(CJTEdiCallbackRequestVo req,Exception e){ - if (req.getTempId() != null){ - erpLarkTempRelationMapper.updateForCjt(FlagStatus.OK.getCode(), req.getTempId(),e.getMessage()); + private void errorHandle(CJTEdiCallbackRequestVo req, Exception e) { + if (req.getTempId() != null) { + erpLarkTempRelationMapper.updateForCjt(FlagStatus.OK.getCode(), req.getTempId(), e.getMessage()); } } - private void sync(CJTEdiCallbackRequestVo req){ + private void sync(CJTEdiCallbackRequestVo req) { CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); 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); JSONObject jsonObject = requestCjt(cjtRequest); - syncRecord(req,jsonObject); + syncRecord(req, jsonObject); } /** * 解析实体,并构建 + * * @param req */ - protected abstract void syncRecord(CJTEdiCallbackRequestVo req,JSONObject returnBody); + protected abstract void syncRecord(CJTEdiCallbackRequestVo req, JSONObject returnBody); /** * 获取请求明细的路径 @@ -143,52 +145,52 @@ public abstract class CJTOperateCallBackAbstract { */ protected abstract String getMethodUrl(); - private void initContext(CJTEdiCallbackRequestVo req){ + private void initContext(CJTEdiCallbackRequestVo req) { LarkCompanyRelation companyRelation = req.getCompanyRelation(); String larkCompanyCode = req.getMsgTypeEnum().getLarkCompanyCode(); - if (companyRelation == null){ + if (companyRelation == null) { LarkCompanyRelation queryCompany = new LarkCompanyRelation(); queryCompany.setAppType(larkCompanyCode); queryCompany.setFlag(FlagStatus.OK.getCode()); queryCompany.setRemark(req.getAppId()); List larkCompanyRelations = larkCompanyRelationMapper.selectLarkCompanyRelationList(queryCompany); - if (CollectionUtils.isEmpty(larkCompanyRelations)){ - 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(); - if (tableRelation == null){ + if (tableRelation == null) { LarkTableRelation queryTable = new LarkTableRelation(); queryTable.setLarkCompanyRelationId(companyRelation.getId()); queryTable.setFlag(FlagStatus.OK.getCode()); List larkTableRelations = larkTableRelationMapper.selectLarkTableRelationList(queryTable); - if (CollectionUtils.isEmpty(larkTableRelations)){ - throw new RuntimeException(String.format("%s 无larkTableRelation配置信息 appId:%s appType:%s larkCompanyId:%s",req.getMsgType(),req.getAppId(),larkCompanyCode,companyRelation.getId())); + if (CollectionUtils.isEmpty(larkTableRelations)) { + 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); } } - private String buildRobotErrorCountMessage(CJTEdiCallbackRequestVo req,Exception e){ + private String buildRobotErrorCountMessage(CJTEdiCallbackRequestVo req, Exception e) { JSONObject body = new JSONObject(); - body.put("cjtId",req.getAppId()); - body.put("msgType",req.getMsgType()); + body.put("cjtId", req.getAppId()); + body.put("msgType", req.getMsgType()); LarkCompanyRelation companyRelation = req.getCompanyRelation(); - if (companyRelation != null){ - body.put("companyRelationId",companyRelation.getId()); + if (companyRelation != null) { + body.put("companyRelationId", companyRelation.getId()); } LarkTableRelation tableRelation = req.getTableRelation(); - if (tableRelation != null){ - body.put("tableRelationId",tableRelation.getId()); + if (tableRelation != null) { + body.put("tableRelationId", tableRelation.getId()); } - body.put("errorInfo",e.getMessage()); + body.put("errorInfo", e.getMessage()); return body.toJSONString(); } - protected LarkTableRequest buildLarkTableRequest(CJTEdiCallbackRequestVo req){ + protected LarkTableRequest buildLarkTableRequest(CJTEdiCallbackRequestVo req) { LarkTableRequest request = new LarkTableRequest(); request.setAppId(req.getLarkAppId()); request.setAppSecret(req.getLarkAppSecret()); @@ -198,9 +200,6 @@ public abstract class CJTOperateCallBackAbstract { } - - - protected void addRecord(CJTEdiCallbackRequestVo req, JSONObject header) { //多维表格id String toTableId = req.getLarkToTableId(); @@ -214,24 +213,24 @@ public abstract class CJTOperateCallBackAbstract { for (int i = 0; i < details.size(); i++) { try { JSONObject detail = details.getJSONObject(i); - String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum); - Map larkBody = buildLarkBody(header, detail,cjtAccountEnum); + String uniqueKey = buildUniqueKey(toTableId, header, detail, cjtAccountEnum); + Map larkBody = buildLarkBody(header, detail, cjtAccountEnum); request.setBody(larkBody); CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request); String larkKey = respBody.getRecord().getRecordId(); - relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(),toTableId,req.getVoucherId())); - }catch (Exception e){ + relationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(), toTableId, req.getVoucherId())); + } catch (Exception e) { errorList.add(e.getMessage()); } } - if (CollectionUtils.isEmpty(errorList)){ + if (CollectionUtils.isEmpty(errorList)) { req.setRetry(Boolean.FALSE); } if (!org.springframework.util.CollectionUtils.isEmpty(relationList)) { erpLarkRelationMapper.batchInsert(relationList); } - if (CollectionUtils.isNotEmpty(errorList)){ - throw new RuntimeException(String.join(",",errorList)); + if (CollectionUtils.isNotEmpty(errorList)) { + throw new RuntimeException(String.join(",", errorList)); } @@ -247,65 +246,59 @@ public abstract class CJTOperateCallBackAbstract { LarkTableRequest request = this.buildLarkTableRequest(req); CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); //获取已经存在的明细 - Map existMap = getExistRecords(req).stream().collect(Collectors.toMap(ErpLarkRelation::getKey, Function.identity(), (K1, k2) -> K1)); - if (existMap != null && existMap.size() > 0){ - List collect = existMap.values().stream().collect(Collectors.toList()); - toTableId = collect.get(0).getLarkTable(); + List existRecords = getExistRecords(req); + if (CollectionUtils.isNotEmpty(existRecords)) { + toTableId = existRecords.get(0).getLarkTable(); } + //因为可能存在修改的情况,所以这里全部删除重新创建 + operateDelete(req, existRecords); List errorList = new ArrayList<>(); for (int i = 0; i < details.size(); i++) { JSONObject detail = details.getJSONObject(i); - String uniqueKey = buildUniqueKey(toTableId, header, detail,cjtAccountEnum); - Map larkBody = buildLarkBody(header, detail,cjtAccountEnum); + String uniqueKey = buildUniqueKey(toTableId, header, detail, cjtAccountEnum); + Map larkBody = buildLarkBody(header, detail, cjtAccountEnum); request.setBody(larkBody); - if (existMap.containsKey(uniqueKey)){ - try { - ErpLarkRelation erpLarkRelation = existMap.get(uniqueKey); - request.setRecord(erpLarkRelation.getLarkKey()); - request.setAppTable(erpLarkRelation.getLarkTable()); - larkTableHelper.updateTableRecord(request); - }catch (Exception e){ - errorList.add(e.getMessage()); - } - }else { - try { - request.setRecord(null); - request.setAppTable(toTableId); - CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request); - String larkKey = respBody.getRecord().getRecordId(); - waitCreateRelationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(),toTableId,req.getVoucherId())); - }catch (Exception e){ - errorList.add(e.getMessage()); - } + try { + request.setRecord(null); + request.setAppTable(toTableId); + CreateAppTableRecordRespBody respBody = larkTableHelper.addTableRecord(request); + String larkKey = respBody.getRecord().getRecordId(); + waitCreateRelationList.add(buildErpLarkRelation(uniqueKey, larkKey, cjtAccountEnum.getCode(), toTableId, req.getVoucherId())); + } catch (Exception e) { + errorList.add(e.getMessage()); } } - if (CollectionUtils.isEmpty(errorList)){ + if (CollectionUtils.isEmpty(errorList)) { req.setRetry(Boolean.FALSE); } + if (!org.springframework.util.CollectionUtils.isEmpty(waitCreateRelationList)) { erpLarkRelationMapper.batchInsert(waitCreateRelationList); } - if (CollectionUtils.isNotEmpty(errorList)){ - throw new RuntimeException(String.join(",",errorList)); + if (CollectionUtils.isNotEmpty(errorList)) { + throw new RuntimeException(String.join(",", errorList)); } } + protected abstract String getDetailName(); /** * 构建唯一key + * * @return */ - protected abstract String buildUniqueKey(String toTableId, JSONObject header, JSONObject detail,CjtAccountEnum cjtAccountEnum); + protected abstract String buildUniqueKey(String toTableId, JSONObject header, JSONObject detail, CjtAccountEnum cjtAccountEnum); /** * 构建多维表格请求体的body + * * @return */ - protected abstract Map buildLarkBody(JSONObject header, JSONObject detail,CjtAccountEnum cjtAccountEnum); + protected abstract Map buildLarkBody(JSONObject header, JSONObject detail, CjtAccountEnum cjtAccountEnum); //构建飞书行与cjt唯一键的对应关系对象 - private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt,String tableId,String cjtId) { + private ErpLarkRelation buildErpLarkRelation(String key, String larkKey, String cjt, String tableId, String cjtId) { ErpLarkRelation erpLarkRelation = new ErpLarkRelation(); erpLarkRelation.setKey(key); erpLarkRelation.setCjtId(cjtId); @@ -320,7 +313,7 @@ public abstract class CJTOperateCallBackAbstract { return erpLarkRelation; } - protected Object getSpecialKey(JSONObject detail,String key){ + protected Object getSpecialKey(JSONObject detail, String key) { JSONArray dynamicPropertyKeys = detail.getJSONArray("DynamicPropertyKeys"); for (int i = 0; i < dynamicPropertyKeys.size(); i++) { if (key.equals(dynamicPropertyKeys.get(i))) { @@ -333,18 +326,24 @@ public abstract class CJTOperateCallBackAbstract { /** * 删除无效记录 + * * @param req */ - protected void deleteRecord(CJTEdiCallbackRequestVo req){ - LarkTableRequest request = new LarkTableRequest(req.getLarkAppId(), req.getLarkAppSecret(), req.getLarkToAppToken(),null); - Map> waitDeleteLarkMap = new HashMap<>(); + protected void deleteRecord(CJTEdiCallbackRequestVo req) { List relationList = getExistRecords(req); + operateDelete(req, relationList); + } + + private void operateDelete(CJTEdiCallbackRequestVo req, List relationList) { + LarkTableRequest request = new LarkTableRequest(req.getLarkAppId(), req.getLarkAppSecret(), req.getLarkToAppToken(), null); + Map> waitDeleteLarkMap = new HashMap<>(); + List waitDeleteIdList = new ArrayList<>(); for (ErpLarkRelation record : relationList) { String appTable = record.getLarkTable(); List waitDeleteLarkList = waitDeleteLarkMap.getOrDefault(appTable, new ArrayList<>()); waitDeleteLarkList.add(record.getLarkKey()); - waitDeleteLarkMap.put(appTable,waitDeleteLarkList); + waitDeleteLarkMap.put(appTable, waitDeleteLarkList); waitDeleteIdList.add(record.getId()); } if (!waitDeleteLarkMap.isEmpty()) { @@ -360,7 +359,8 @@ public abstract class CJTOperateCallBackAbstract { } } - protected List getExistRecords(CJTEdiCallbackRequestVo req){ + + protected List getExistRecords(CJTEdiCallbackRequestVo req) { CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); ErpLarkRelation erpLarkRelation = new ErpLarkRelation(); erpLarkRelation.setRemark(cjtAccountEnum.getCode()); @@ -392,7 +392,6 @@ public abstract class CJTOperateCallBackAbstract { // String ticket = (String) redisCache.getCacheObject(ticketCacheKey); // req.setTicket(ticket); // } - private String buildCacheUniqueKey(String key, String appKey) { return String.format("%s:%s", key, appKey); } @@ -404,10 +403,10 @@ public abstract class CJTOperateCallBackAbstract { CjtAccountEnum cjtAccountEnum = req.getCjtAccountEnum(); String tokenCacheKey = buildCacheUniqueKey(RedisConstants.CJT_TOKEN_CACHE_KEY, cjtAccountEnum.getAppKey()); String openToken = (String) redisCache.getCacheObject(tokenCacheKey); - if (!StringUtils.isEmpty(openToken)){ + if (!StringUtils.isEmpty(openToken)) { req.setOpenToken(openToken); return openToken; - }else { + } else { throw new RuntimeException("token不存在"); } } @@ -424,6 +423,7 @@ public abstract class CJTOperateCallBackAbstract { } return responseBody.getData(); } + protected String buildErrorBody(LarkCJTRequest req, String errorMessage) { JSONObject errorInfo = new JSONObject(); errorInfo.put("url", req.getUrl()); 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 dd50a30..831d0df 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 @@ -43,8 +43,8 @@ public class ManufactureOrderSyncCallOperate extends CJTOperateCallBackAbstract StringBuilder sb = new StringBuilder(); if (cjtAccountEnum.getCode().equals(CjtAccountEnum.TWO.getCode())){ sb.append(detail.get("Quantity")).append("_"); - sb.append(getSpecialKey(detail, "pubuserdefnvc3")).append("_"); - sb.append(getSpecialKey(detail, "pubuserdefnvc3")).append("_"); + sb.append(getSpecialKey(detail, "pubuserdefnvc2")).append("_"); + sb.append(getSpecialKey(detail, "priuserdefnvc1")).append("_"); }else { sb.append(detail.get("SourceVoucherCode")).append("_"); sb.append(header.get("Code")).append("_"); diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java index 7de003e..69b9996 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/CJT/SyncAccountsJobAbstract.java @@ -15,6 +15,7 @@ import com.ruoyi.flyingbook.domain.LarkCompanyRelation; import com.ruoyi.flyingbook.domain.LarkTableRelation; 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.LarkTableRelationMapper; import com.ruoyi.quartz.domain.*; @@ -48,7 +49,7 @@ public abstract class SyncAccountsJobAbstract { @Autowired private RedisCache redisCache; @Autowired - protected ErpLarkRelationMainMapper erpLarkRelationMapper; + protected ErpLarkRelationMapper erpLarkRelationMapper; @Autowired private LarkCompanyRelationMapper larkCompanyRelationMapper; @Autowired @@ -92,25 +93,26 @@ public abstract class SyncAccountsJobAbstract { private static final String REQUEST_GENERATE_TOKEN_PATH = REQUEST_ROOT_PATH + "/v1/common/auth/selfBuiltApp/generateToken"; private Boolean asynchronousCheck(LocalDateTime now, String cjt) { - int hour = now.getHour(); - if ((hour == 1 && CjtAccountEnum.ONE.getCode().equals(cjt)) - || (hour == 3 && CjtAccountEnum.TWO.getCode().equals(cjt))) { - //目前只给畅捷通账号二加工单开补偿 -// if ((AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode()) -// && CjtAccountEnum.TWO.getCode().equals(cjt)) || (AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode()) -// && CjtAccountEnum.ONE.getCode().equals(cjt))) { - String asynchronous = getAsynchronousKey(cjt); - Object cacheObject = redisCache.getCacheObject(asynchronous); - if (cacheObject != null) { - return Boolean.FALSE; - } - redisCache.setCacheObject(asynchronous, asynchronous, 2, TimeUnit.HOURS); - return Boolean.TRUE; -// } else { -// return false; -// } - } return false; +// int hour = now.getHour(); +// if ((hour == 1 && CjtAccountEnum.ONE.getCode().equals(cjt)) +// || (hour == 3 && CjtAccountEnum.TWO.getCode().equals(cjt))) { +// //目前只给畅捷通账号二加工单开补偿 +//// if ((AppType.SYNC_CJT_MANUFACTURE_ORDER_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode()) +//// && CjtAccountEnum.TWO.getCode().equals(cjt)) || (AppType.SYNC_CJT_SALE_DISPATCH_DATA_TO_MULTI_TABLE.getCode().equals(syncLarkAppType().getCode()) +//// && CjtAccountEnum.ONE.getCode().equals(cjt))) { +// String asynchronous = getAsynchronousKey(cjt); +// Object cacheObject = redisCache.getCacheObject(asynchronous); +// if (cacheObject != null) { +// return Boolean.FALSE; +// } +// redisCache.setCacheObject(asynchronous, asynchronous, 2, TimeUnit.HOURS); +// return Boolean.TRUE; +//// } else { +//// return false; +//// } +// } +// return false; } private String getAsynchronousKey(String cjt) { @@ -432,7 +434,7 @@ public abstract class SyncAccountsJobAbstract { return new HashMap<>(); } //todo yxy 这里记得加上表id - return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt) + return erpLarkRelationMapper.queryListByKeyListAndRemark(uniqueKeyList, getRequestUrl(), cjt,addRecordRequest.getAppTable()) .stream().collect(Collectors.toMap(ErpLarkRelation::getKey, ErpLarkRelation::getLarkKey, (k1, k2) -> k1)); } @@ -489,10 +491,14 @@ public abstract class SyncAccountsJobAbstract { if ("id".equals(lowerCaseRowKey)){ voucherId = value; } + CJTSyncTypeRelation cjtSyncTypeRelation = queryFieldsMap.get(rowKey); if (uniqueFields.contains(rowKey)) { - uniqueKeyList.add(value); + if (cjtSyncTypeRelation != null && TableFieldTypeEnum.NUMBER.equals(cjtSyncTypeRelation.getType())){ + uniqueKeyList.add(Double.valueOf(value) + "0"); + }else { + uniqueKeyList.add(value); + } } - CJTSyncTypeRelation cjtSyncTypeRelation = queryFieldsMap.get(rowKey); if (cjtSyncTypeRelation == null) { continue; }