From 91560799c8088421983a6168c95b84a5d617df05 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 17 十一月 2023 02:00:44 +0800
Subject: [PATCH] 历史数据导入、批量申请、申请编码接口代码逻辑中关键属性校验增加过滤条件

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java          |   85 ++++++++++++++++++---------
 Source/UBCS-WEB/dist/index.html                                                                                |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java      |   20 ++++--
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java       |   15 ++++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java                   |    4 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml                                 |    4 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java |   22 ++-----
 7 files changed, 98 insertions(+), 54 deletions(-)

diff --git a/Source/UBCS-WEB/dist/index.html b/Source/UBCS-WEB/dist/index.html
index d340caf..e547342 100644
--- a/Source/UBCS-WEB/dist/index.html
+++ b/Source/UBCS-WEB/dist/index.html
@@ -51,4 +51,4 @@
     .avue-home__sub-title {
       color: #ABABAB;
       font-size: 12px;
-    }</style><link href=/css/chunk-74613652.418a3170.css rel=prefetch><link href=/css/page.e84a6fd9.css rel=prefetch><link href=/css/views.d93aedb9.css rel=prefetch><link href=/js/chunk-2d0e4caf.afe0104d.js rel=prefetch><link href=/js/chunk-74613652.bf501607.js rel=prefetch><link href=/js/page.7c6fcba2.js rel=prefetch><link href=/js/views.2093fe98.js rel=prefetch><link href=/css/app.d0623413.css rel=preload as=style><link href=/css/chunk-vendors.e41156d0.css rel=preload as=style><link href=/js/app.e531c9b4.js rel=preload as=script><link href=/js/chunk-vendors.7e1c637d.js rel=preload as=script><link href=/css/chunk-vendors.e41156d0.css rel=stylesheet><link href=/css/app.d0623413.css rel=stylesheet></head><body><noscript><strong>寰堟姳姝夛紝濡傛灉娌℃湁 JavaScript 鏀寔锛孲aber 灏嗕笉鑳芥甯稿伐浣溿�傝鍚敤娴忚鍣ㄧ殑 JavaScript 鐒跺悗缁х画銆�</strong></noscript><div id=app><div class=avue-home><div class=avue-home__main><img class=avue-home__loading src=/svg/loading-spin.svg alt=loading><div class=avue-home__title>姝e湪鍔犺浇璧勬簮</div><div class="avue-home__sub-title d">鍒濇鍔犺浇璧勬簮鍙兘闇�瑕佽緝澶氭椂闂� 璇疯�愬績绛夊緟</div></div></div></div><script src=/util/aes.js charset=utf-8></script><script src=/cdn/vue/2.6.10/vue.min.js charset=utf-8></script><script src=/cdn/vuex/3.1.1/vuex.min.js charset=utf-8></script><script src=/cdn/vue-router/3.0.1/vue-router.min.js charset=utf-8></script><script src=/cdn/axios/1.0.0/axios.min.js charset=utf-8></script><script src=/cdn/element-ui/2.15.6/index.js charset=utf-8></script><script src=/cdn/avue/2.9.12/avue.min.js charset=utf-8></script><script src=/cdn/nutflow/wf-design-base/index.umd.min.js charset=utf-8></script><script src=/js/chunk-vendors.7e1c637d.js></script><script src=/js/app.e531c9b4.js></script></body></html>
\ No newline at end of file
+    }</style><link href=/css/chunk-4662373c.418a3170.css rel=prefetch><link href=/css/page.e84a6fd9.css rel=prefetch><link href=/css/views.d93aedb9.css rel=prefetch><link href=/js/chunk-2d0e4caf.afe0104d.js rel=prefetch><link href=/js/chunk-4662373c.a7c0fbe4.js rel=prefetch><link href=/js/page.7c6fcba2.js rel=prefetch><link href=/js/views.2093fe98.js rel=prefetch><link href=/css/app.32d691ec.css rel=preload as=style><link href=/css/chunk-vendors.e41156d0.css rel=preload as=style><link href=/js/app.393bf56f.js rel=preload as=script><link href=/js/chunk-vendors.7e1c637d.js rel=preload as=script><link href=/css/chunk-vendors.e41156d0.css rel=stylesheet><link href=/css/app.32d691ec.css rel=stylesheet></head><body><noscript><strong>寰堟姳姝夛紝濡傛灉娌℃湁 JavaScript 鏀寔锛孲aber 灏嗕笉鑳芥甯稿伐浣溿�傝鍚敤娴忚鍣ㄧ殑 JavaScript 鐒跺悗缁х画銆�</strong></noscript><div id=app><div class=avue-home><div class=avue-home__main><img class=avue-home__loading src=/svg/loading-spin.svg alt=loading><div class=avue-home__title>姝e湪鍔犺浇璧勬簮</div><div class="avue-home__sub-title d">鍒濇鍔犺浇璧勬簮鍙兘闇�瑕佽緝澶氭椂闂� 璇疯�愬績绛夊緟</div></div></div></div><script src=/util/aes.js charset=utf-8></script><script src=/cdn/vue/2.6.10/vue.min.js charset=utf-8></script><script src=/cdn/vuex/3.1.1/vuex.min.js charset=utf-8></script><script src=/cdn/vue-router/3.0.1/vue-router.min.js charset=utf-8></script><script src=/cdn/axios/1.0.0/axios.min.js charset=utf-8></script><script src=/cdn/element-ui/2.15.6/index.js charset=utf-8></script><script src=/cdn/avue/2.9.12/avue.min.js charset=utf-8></script><script src=/cdn/nutflow/wf-design-base/index.umd.min.js charset=utf-8></script><script src=/js/chunk-vendors.7e1c637d.js></script><script src=/js/app.393bf56f.js></script></body></html>
\ No newline at end of file
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java
index 86e167b..1cc595b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java
@@ -45,12 +45,25 @@
      */
     private String sqlCount;
 
+	/**
+	 * 鏌ヨ閲嶅鏁版嵁鏃舵煡鍑虹紪鐮�
+	 */
+	private String sqlId;
+
     /**
      * 鏈鏌ヨ鐨勫瓧娈�
      */
     private  List<String> selectFieldList;
 
-    public String getTableName() {
+	public String getSqlId() {
+		return sqlId;
+	}
+
+	public void setSqlId(String sqlId) {
+		this.sqlId = sqlId;
+	}
+
+	public String getTableName() {
         return tableName;
     }
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
index 3c18978..2f22a7a 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -20,7 +20,9 @@
 
 	List<String> selectById(@Param("inSql") String inSql);
 
-	int  queryCountBySql(@Param("inSql") String inSql);
+	List<String> selectList(@Param("inSql") String inSql);
+
+	int queryCountBySql(@Param("inSql") String inSql);
 
 	String queryCountStringBySql(@Param("inSql") String inSql);
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
index 3d56800..3abf204 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -701,14 +701,16 @@
 
         //娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
         if (!CollectionUtils.isEmpty(conditionMap)) {
-			conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
+			// TODO: 鍚屼竴涓簱鍒ら噸涓嶉渶瑕佸尯鍒嗗垎绫籵id
+			// conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
 //			final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
             R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
 //				String referTable = VciBaseUtil.getTableName(referVO.getReferType());
             if (!listR.isSuccess() || listR.getData().size() == 0) {
                 throw new VciBaseException("浼犲叆涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿簲琛ㄥ崟锛岃妫�鏌ワ紒");
             }
-            final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
+            //final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
+			final String[] sql = {"select id from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
             conditionMap.forEach((key, value) -> {
 				if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)) {
 					sql[0] += " and " + key + " is null";
@@ -723,11 +725,16 @@
                 sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
             }
             sql[0] += " and lastR = '1' and lastV = '1' ";
+			String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
+			if(Func.isNotEmpty(isParticipateCheckOids)){
+				sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")";
+			}
 //			if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
-            if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
+			List<String> repeatData = commonsMapper.selectList(sql[0]);
+			if (!repeatData.isEmpty()) {
                 String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
                 String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
-                throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
+                throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇璇ユ暟鎹凡缁忎笌绯荤粺涓紪鍙蜂负"+repeatData.stream().collect(Collectors.joining(","))+"鐨勬暟鎹噸澶嶃�傝淇!銆�" + ruleInfoMsg, objs);
             }
         }
     }
@@ -1793,7 +1800,6 @@
         }
     }
 
-
     /**
      * 鏍规嵁妯℃澘灞炴�х敓鎴愮浉搴旂殑sql淇℃伅
      *
@@ -1959,6 +1965,8 @@
         String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql;
         String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
                 + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
+		String sqlId = "select ID from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
+			+ (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
         CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO();
         sqlBO.setTableName(tableName);
         sqlBO.setJoinTable(joinTableList);
@@ -1967,9 +1975,9 @@
         sqlBO.setSqlHasPage(sqlHasPage);
         sqlBO.setSqlCount(sqlCount);
         sqlBO.setSqlUnPage(sql);
+		sqlBO.setSqlId(sqlId);
         return sqlBO;
     }
-
 
     /**
      * 缁勫悎鏌ヨ鏉′欢鐨剆ql
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
index 4935984..ecc0089 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -529,7 +529,7 @@
 		//鏍¢獙妯℃澘鏄笉鏄渶鏂扮殑
 		checkTemplateSync(sheetDataSetList,templateVO,0);
 		//鍏堜笉鐢ㄧ灞炴�ф槸鍚﹂兘瀛樺湪锛屽厛杞崲涓�涓嬫暟鎹�
-		Map<String,String> errorMap = new HashMap<>();
+		Map<String,String> errorMap = new ConcurrentHashMap<>();
 		String redisUUid=batchImportCodes(orderDTO,templateVO,dataSet,errorMap,true);
 		CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO();
 		List<String> needRowIndexList = new ArrayList<>();
@@ -654,7 +654,7 @@
 			//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
 			batchCheckRequiredAttrOnOrder(templateVO,allCboList,errorMap);
 			//3.鍒ゆ柇鍏抽敭灞炴��
-			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList);
+			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,errorMap);
 			Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 			Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 			if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
@@ -664,7 +664,7 @@
 			}
 			if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
 				keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
-					errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+					errorMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,"") );
 				});
 			}
 			//鍒嗙被娉ㄥ叆
@@ -903,7 +903,7 @@
 			//鍒ゆ柇蹇呰緭椤�
 			batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap);
 
-			//鏈夐檺鏍¢獙缂栫爜鏄惁瀛樺湪
+			//浼樺厛鏍¢獙缂栫爜鏄惁瀛樺湪
 			batchCheckIdExistOnOrder(templateVO, cboList, errorMap);
 
 			//boolean
@@ -913,15 +913,18 @@
 			batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
 
 			batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap);
+
 			//6.澶勭悊鍒嗙被娉ㄥ叆
 			batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo,true);
 
 			//璁剧疆榛樿鍊�
 			batchSwitchAttrDefault(attrVOS, cboList);
+
 			//7.澶勭悊缁勫悎瑙勫垯
 			batchSwitchComponentAttrOnOrder(attrVOS, cboList);
+
 			//3.鍒ゆ柇鍏抽敭灞炴��
-			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
 			Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 			Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 			if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
@@ -931,7 +934,7 @@
 			}
 			if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) {
 				keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> {
-					errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅");
+					errorMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex, ""));
 				});
 			}
 			//4.鏍¢獙瑙勫垯
@@ -1301,7 +1304,7 @@
 		//2.鍒ゆ柇蹇呰緭椤广�傘�傞渶瑕佸叏閮ㄧ殑灞炴�э紝濡傛灉鏄繀杈擄紝浣嗘槸琛ㄥ崟閲岄潰涓嶆樉绀虹殑锛屽彧鑳芥槸鍒嗙被娉ㄥ叆鎴栬�呯粍鍚堣鍒�
 		batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
 		//3.鍒ゆ柇鍏抽敭灞炴��
-		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
 		Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 		Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 		if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
@@ -1311,7 +1314,7 @@
 		}
 		if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
 			keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
-				errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+				errorMap.put(rowIndex,"鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,""));
 			});
 		}
 		//鍒嗙被娉ㄥ叆
@@ -1737,7 +1740,7 @@
 			).collect(Collectors.toList());
 			String fullPath = getFullPath(classifyFullInfo);
 			excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot);
-			Map<String,String> errorMap=new HashMap<>();
+			Map<String,String> errorMap=new ConcurrentHashMap<>();
 			Map<String/**璺緞**/, CodeClassifyVO> pathMap=new HashMap<>() ;
 			//鏍¢獙缂栫爜瑙勫垯鍜岀爜娈垫槸鍚︽纭�
 			Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>();
@@ -1782,12 +1785,12 @@
 			//鏈�鍚庡紕缁勫悎瑙勫垯
 			batchSwitchComponentAttrOnOrder(attrVOS,cboList);
 			//3.鍒ゆ柇鍏抽敭灞炴��
-			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList);
+			CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,errorMap);
 			Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 			Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 			if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
 				keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
-					errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+					errorMap.put(rowIndex,"鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,""));
 				});
 			}
 			//4.鏍¢獙瑙勫垯
@@ -1916,7 +1919,7 @@
 	 */
 	@Override
 	public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) {
-		Map<String,String> errorMap=new HashMap<>();
+		Map<String,String> errorMap=new ConcurrentHashMap<>();
 		VciBaseUtil.alertNotNull(orderDTO,"缂栫爜鐢宠鐩稿叧鐨勬暟鎹�",orderDTO.getCodeClassifyOid(),"涓婚搴撳垎绫讳富閿�");
 		CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
 		//瑙勫垯鐨勪富閿渶瑕佸幓鑾峰彇
@@ -1988,7 +1991,7 @@
 		//鏈�鍚庡紕缁勫悎瑙勫垯
 		batchSwitchComponentAttrOnOrder(attrVOS,cboList);
 		//3.鍒ゆ柇鍏抽敭灞炴��
-		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
+		CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
 		Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
 		Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
 		Map<String,List<String>>keyAttrOkOidTORepeatOidMap= keyResultVO.getKeyAttrOkOidTORepeatOidMap();
@@ -2020,7 +2023,7 @@
                 resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
                 resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
                 */
-				errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅" );
+				errorKeyMap.put(rowIndex, "鍏抽敭灞炴�т笌绯荤粺涓殑閲嶅;" + errorMap.getOrDefault(rowIndex,""));
 			});
 		}
 		//鏍¢獙灞炴�ф槸鍚︽纭敊璇俊鎭�
@@ -2268,6 +2271,7 @@
 		}
 		return  resultDataObjectDetailDOs;
 	}
+
 	/***
 	 * 闆嗘垚鎵归噺鍚屾鏇存柊鎺ュ彛
 	 * @param codeClassifyVO;
@@ -2563,6 +2567,7 @@
 			});
 		}
 	}
+
 	/**
 	 * 杞崲缁勫悎瑙勫垯鐨勫��
 	 *
@@ -2609,6 +2614,7 @@
 			});
 		}
 	}
+
 	/**
 	 * 鏍¢獙鍏抽敭灞炴��
 	 *
@@ -2637,7 +2643,6 @@
 		});
 
 		//娌℃湁闄愬埗鍒嗙被锛屼絾鏄竴涓ā鏉垮彧鍙兘鍦ㄤ竴涓笟鍔$被鍨嬮噷闈紝鎵�浠ョ洿鎺ユ煡璇㈣繖涓笟鍔$被鍨嬪嵆鍙�
-
 		if (!CollectionUtils.isEmpty(conditionMap)) {
 			String tableName="";
 			R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
@@ -2649,11 +2654,12 @@
 				}
 			}
 			if (StringUtils.isBlank(tableName)) {
-				String errormsg="鏍规嵁涓氬姟绫诲瀷涓烘煡璇㈠埌鐩稿叧涓氬姟琛�";
+				String errormsg="鏍规嵁涓氬姟绫诲瀷鏈煡璇㈠埌鐩稿叧涓氬姟琛�";
 				errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
 				return;
 			}
-			final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "};
+			//final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "};
+			final String[] sql = {"select id from " + tableName + " t where 1 = 1 "};
 			conditionMap.forEach((key, value) -> {
 				if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)){
 					sql[0] += " and " + key + " is null ";
@@ -2668,17 +2674,24 @@
 			} else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
 				sql[0] += " and t.oid != '" + orderDTO.getCopyFromVersion() + "'";
 			}
+			// 涓嶉渶瑕佸弬涓庢牎楠岀殑瑙勫垯oid
+			String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
+			if(Func.isNotBlank(isParticipateCheckOids)){
+				sql[0] += " and codeclsfid not in("+isParticipateCheckOids+")";
+			}
 			sql[0] += " and t.lastR = '1' and t.lastV = '1' ";
-			if (commonsMapper.queryCountBySql(sql[0]) > 0) {
+			List<String> repeatData = commonsMapper.selectList(sql[0]);
+			if (!repeatData.isEmpty()) {
 				String ruleInfoMsg = keyRuleVO == null ? "" : "鏌ヨ瑙勫垯锛氬幓闄ょ┖鏍�--{0},蹇界暐澶у皬鍐�--{1},蹇界暐鍏ㄥ崐瑙�--{2},蹇界暐鍏ㄩ儴绌烘牸--{3}";
 				String[] objs = new String[]{trim ? "鏄�" : "鍚�", ignoreCase ? "鏄�" : "鍚�", ignoreWidth ? "鏄�" : "鍚�", trimAll ? "鏄�" : "鍚�"};
-				String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�";
+				String defaultValue=";鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜�,鏁版嵁鐨勭紪鍙峰涓嬶細"+repeatData.stream().collect(Collectors.joining(","))+"銆傝淇!銆�";
 				String errormsg=defaultValue+ MessageFormat.format(ruleInfoMsg, objs);
 				errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
 				// throw new VciBaseException("鏍规嵁鎮ㄥ~鍐欑殑鍏抽敭灞炴�х殑鍐呭锛岀粨鍚堝叧閿睘鎬ф煡璇㈣鍒欙紝鍙戠幇杩欎釜鏁版嵁宸茬粡鍦ㄧ郴缁熶腑瀛樺湪浜嗐�傝淇!銆�" + ruleInfoMsg, objs);
 			}
 		}
 	}
+
 	/**
 	 * 鏍¢獙鏋氫妇鐨勫唴瀹�
 	 *
@@ -2702,6 +2715,7 @@
 			});
 		}
 	}
+
 	/**
 	 * 杞崲鏃堕棿鐨勬牸寮�
 	 *
@@ -2794,6 +2808,7 @@
 			orderDTO.getData().put(attrId, value);
 		}
 	}
+
 	/**
 	 * 浠庣紪鐮佺敵璇蜂俊鎭璞′笂鑾峰彇鏌愪釜灞炴�х殑鍊�
 	 *
@@ -2813,6 +2828,7 @@
 		}
 		return value;
 	}
+
 	/**
 	 * 澶勭悊鍒嗙被娉ㄥ叆鐨勪俊鎭�
 	 *
@@ -2858,6 +2874,7 @@
 			});
 		}
 	}
+
 	/***
 	 *
 	 * @param codeClassifyVO
@@ -3098,6 +3115,7 @@
 		});
 
 	}
+
 	/**
 	 * excel杞崲涓篶bo鐨勫璞�
 	 * @param classifyFullInfo 鍒嗙被鐨勫叏閮ㄤ俊鎭�
@@ -3236,6 +3254,7 @@
 			}
 		}
 	}
+
 	/**
 	 * 鎵归噺杞崲鏃堕棿閮戒负鎸囧畾鐨勬牸寮�
 	 * @param attrVOS 妯℃澘灞炴��
@@ -3461,6 +3480,7 @@
 		}
 
 	}
+
 	/**
 	 * 鎵归噺妫�鏌ヤ紒涓氱紪鐮佹槸鍚﹀瓨鍦�
 	 * @param templateVO 妯℃澘鐨勬樉绀哄璞�
@@ -3668,6 +3688,7 @@
 		}
 		return showText;
 	}
+
 	/**
 	 * 澶勭悊鏋氫妇鐨勬樉绀哄璞�
 	 * @param attrVOS 妯℃澘灞炴��
@@ -3792,7 +3813,7 @@
 	 * @param cboList 鎵归噺鐨勬暟鎹�
 	 */
 	private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO,
-														List<ClientBusinessObject> cboList) {
+														List<ClientBusinessObject> cboList,Map<String,String> errorMap) {
 		//涓嶮dmEngineServiceImpl閲岀殑checkKeyAttrOnOrder鐩镐技
 		//鍏堣幏鍙栧叧閿睘鎬х殑瑙勫垯锛屼篃鍒╃敤缁ф壙鐨勬柟寮�
 		CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
@@ -3821,7 +3842,7 @@
 		//SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
 		Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>();
 		// 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id
-		String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
+		final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
 		List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
 			//姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
 			//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
@@ -3840,21 +3861,24 @@
 					conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids);
 				}
 				CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
-				boolean isKeyCheck= commonsMapper.queryCountBySql(sqlBO.getSqlCount()) > 0;
-				if(isKeyCheck){
-					List<Map<String,String>> newDataList=  commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
-					//List<ClientBusinessObject> newCboList=	ChangeMapTOClientBusinessObjects(newDataList);
-					List<BaseModel> newCboList=new ArrayList<>();
+				List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId());
+				if(!repeatData.isEmpty()){
+					final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
+					//List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList);
+					List<BaseModel> newCboList = new ArrayList<>();
 					newDataList.stream().forEach(stringStringMap -> {
 						BaseModel baseModel=new BaseModel();
 						DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel);
 						newCboList.add(baseModel);
 					});
+					// 娣诲姞閿欒鍊�
+					String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+					errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:"+repeatData.stream().collect(Collectors.joining(",")));
 					if(!CollectionUtils.isEmpty(newCboList)) {
 						indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
 					}
 				}
-				return isKeyCheck;
+				return !repeatData.isEmpty();
 			}else{
 				return false;
 			}
@@ -3968,7 +3992,6 @@
 		return childOidPathMap;
 	}
 
-
 	/**
 	 * 鑾峰彇瀵煎叆鐨勫唴瀹逛腑鍏抽敭灞炴�ч噸澶嶇殑琛屽彿
 	 * @param ketAttrMap 鍏抽敭灞炴�х殑鏄犲皠
@@ -4037,6 +4060,7 @@
 		resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
 		resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
 	}
+
 	/**
 	 * excel鐨勬爣棰樹笂鑾峰彇瀛楁鎵�鍦ㄧ殑浣嶇疆
 	 * @param titleRowData 鏍囬鐨勫唴瀹�
@@ -4152,6 +4176,7 @@
 		codeClassifyDatas.addAll(newCodeImprotDataVO);
 		log.info("222");
 	}
+
 	/***
 	 *  @param titleRowData
 	 * @param newTemplateVO
@@ -4197,7 +4222,8 @@
 		codeImprotDataVO.setColNames(colNames);
 		codeImprotDataVO.getDatas().add(filedValueMap);
 	}
-	/***
+
+	/**
 	 * 姝g‘閿欒鏁版嵁redis缂撳瓨
 	 * @param uuid
 	 * @param templateVO
@@ -4511,4 +4537,5 @@
 			mdmInterJtClient.receiveEditApply(oids,btmName);
 		}
 	}
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
index 0924dbb..ea0a767 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -111,7 +111,7 @@
 				log.info("code:----->"+cbo.getId());
 				//VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
 				String code = cbo.getId();
-				List<String> serialUnitList = new ArrayList<>();
+				List<String> serialUnitList = new CopyOnWriteArrayList<>();
 				String seclenghStr=cbo.getData().get(CODE_SEC_LENGTH_FIELD);
 				String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#");
 				cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//灏嗘key闄ゅ幓
@@ -236,8 +236,8 @@
 				// TODO 鍘嗗彶鏁版嵁瀵煎叆鐨勬椂鍊欒繖鍎垮伓灏斾細瑙﹀彂绌烘寚閽堝紓甯�
 				Map<String,List<CodeAllCode>> ruleGroup = allCodeDOList.stream().collect(Collectors.groupingBy(s -> s.getCodeRuleOid()));
 				Map<String, CodeAllCode> codeDOMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getCodeRuleOid() + "${SEP}" + s.getId(), t -> t));
-				List<CodeAllCode> addCodeDOs = new ArrayList<>();
-				List<CodeAllCode> editCodeDOs = new ArrayList<>();
+				List<CodeAllCode> addCodeDOs = new CopyOnWriteArrayList<>();
+				List<CodeAllCode> editCodeDOs = new CopyOnWriteArrayList<>();
 				ruleGroup.forEach((ruleOid,allCodeDOS)->{
 					VciBaseUtil.switchCollectionForOracleIn(allCodeDOS).stream().forEach(codeDOs->{
 						QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
@@ -286,7 +286,7 @@
 						.collectingAndThen(
 							Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))),
 							ArrayList::new));
-					if( distinctCodeAllCOdes.size() != addCodeDOs.size() ){
+					if(distinctCodeAllCOdes.size() != addCodeDOs.size() ){
 						throw new VciBaseException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒");
 					}
 					QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
@@ -307,7 +307,8 @@
 							if(codeAllCode.getId().equals(next.getId())){
 								codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
 								codeAllCode.setLcStatus(next.getLcStatus());
-								iterator.remove();
+								// TODO: 杩欏効鍏堟殏鏃舵敞閲婃帀锛屾病鐪嬫噦杩欏効涓轰粈涔堣杩欐牱鍋氾紝瀵艰嚧鎶ラ敊
+								//iterator.remove();
 							}
 						}
 					}
@@ -317,16 +318,7 @@
 
 					codeAllCodeService.saveBatch(addCodeDOs);
 				}
-
-//				try {
 				mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
-					// 鎻愪氦浜嬪姟
-					//transactionTemplate.getTransactionManager().commit(status);
-//				}catch (Exception e){
-//					// 鍑虹幇寮傚父鏃跺洖婊氫簨鍔�
-//					transactionTemplate.getTransactionManager().rollback(status);
-//				}
-
 			}
 			return codeList;
 		}else {
@@ -390,12 +382,10 @@
 				allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
 			);
 
-
 			Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
 			allCodeDOList.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
 				s.setLcStatus(statusMap.get(s.getOid()));
 			});
-
 
 			//閫氳繃ID鏉ヨ繘琛屽幓閲�
 			List<CodeAllCode> distinctCodeAllCOdes = allCodeDOList.stream().collect(Collectors
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
index af5be61..6d2babb 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -17,6 +17,10 @@
         ${inSql}
     </select>
 
+    <select id="selectList" resultType="java.lang.String">
+        ${inSql}
+    </select>
+
     <select id="selectCountByTableName" resultType="java.lang.String">
         select COUNT(*) FROM ${tableName}
     </select>

--
Gitblit v1.9.3