From 6af6557a8d8a525ec3cab33607b8a041ef0968fa Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 08 十一月 2023 11:15:31 +0800 Subject: [PATCH] 历史导入生成编码时添加前后缀代码逻辑添加;历史导入模板下载时查询模板返回的key不区分大小写。 --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java | 143 ++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 114 insertions(+), 29 deletions(-) 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 feb0602..a5058b7 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 @@ -31,6 +31,8 @@ import com.vci.ubcs.starter.web.util.VciDateUtil; import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -86,22 +88,20 @@ /***** * 淇濊瘉骞跺彂鐨勬椂鍊欙紝鏈�澶ф祦姘村彿閮藉鐨勶紝浣嗘槸杩欑鍔犻攣鏈夊紛绔� - * */ - if(dataCBOList.stream().anyMatch(cbo-> StringUtils.isNotBlank(cbo.getId())) -// && StringUtils.isNotBlank(cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD)) - ){ + // && StringUtils.isNotBlank(cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD)) + ){ //鏄巻鍙叉暟鎹鍏� //鍘嗗彶鏁版嵁鎵ц鐨勬椂鍊欙紝杩欎釜绯荤粺浼氬緢鍗� //涓昏鏄负浜嗗綍鍏ユ渶澶ф祦姘村彿鍜宎llcode -// SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); + //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); List<CodeAllCode> allCodeDOList = new ArrayList<>(); Map<String/**娴佹按渚濇嵁**/, Map<String/**鐮佹鐨勪富閿�**/,Double/**鏈�澶ф祦姘村彿**/>> maxSerialMap = new HashMap<>(); // TODO 澶氱嚎绋嬫祦寮曞彂鐨勯棶棰樺凡淇敼 dataCBOList.parallelStream().forEach(cbo->{ log.info("code:----->"+cbo.getId()); -// VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); String code = cbo.getId(); List<String> serialUnitList = new ArrayList<>(); String seclenghStr=cbo.getData().get(CODE_SEC_LENGTH_FIELD); @@ -126,7 +126,7 @@ start += VciBaseUtil.getInt(secLengths[j]); } thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[i])); - // } + // } if(VciBaseUtil.getBoolean(secVO.getSerialDependFlag())){ serialUnitList.add(thisSecValue); } @@ -141,13 +141,15 @@ //瑕佺湅鏄笉鏄ˉ浣嶇殑 CodeBasicSecVO secVO = secVOMap.get(secOid); Double serialDb = null; + // 鎴彇鎺夊墠鍚庣紑涔嬪悗鐨勭爜娈� + String subSecValue = killPriffixSuffix(secValue, secVO.getPrefixCode(), secVO.getSuffixCode()); if(OsCodeFillTypeEnum.NONE.getValue().equalsIgnoreCase(secVO.getCodeFillType())){ //涓嶈ˉ鐮� //鎶婃墍鏈変笉鏄暟瀛楃殑鍘绘帀锛屽洜涓哄彲鑳戒細鏄�佹暟鎹紝鏂拌鍒� - serialDb = VciBaseUtil.getDouble(killUnNumberChar(secValue)); + serialDb = VciBaseUtil.getDouble(killUnNumberChar(subSecValue)); }else { //宸﹀彸濉厖鐨勶紝鎴戜滑闇�瑕� - serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(secValue,secVO.getCodeFillSeparator(), + serialDb = VciBaseUtil.getDouble(killUnNumberChar(killFillChar(subSecValue,secVO.getCodeFillSeparator(), OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType())))); } Map<String, Double> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new HashMap<>()); @@ -278,8 +280,27 @@ QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); wrapper.eq("CREATECODEBTM",addCodeDOs.get(0).getCreateCodeBtm()); wrapper.in("ID",addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList())); - if(codeAllCodeService.count(wrapper)>0){ - throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍璇风‘璁わ紒锛�"); + List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper); + List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList()); + if(codeAllCodes.size()>takeBack.size()){ + throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + } + for (CodeAllCode codeAllCode : takeBack) { + codeAllCode.setTs(new Date()); + codeAllCode.setLastModifyTime(new Date()); + codeAllCode.setLastModifier(AuthUtil.getUserId().toString()); + Iterator<CodeAllCode> iterator = addCodeDOs.iterator(); + while (iterator.hasNext()){ + CodeAllCode next = iterator.next(); + if(codeAllCode.getId().equals(next.getId())){ + codeAllCode.setCreateCodeOid(next.getCreateCodeOid()); + codeAllCode.setLcStatus(next.getLcStatus()); + iterator.remove(); + } + } + } + if(takeBack.size()>0){ + codeAllCodeService.updateBatchById(takeBack); } codeAllCodeService.saveBatch(addCodeDOs); } @@ -365,13 +386,32 @@ QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); wrapper.eq("CREATECODEBTM",allCodeDOList.get(0).getCreateCodeBtm()); wrapper.in("ID",allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList())); - if(codeAllCodeService.count(wrapper)>0){ - throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍璇风‘璁わ紒锛�"); + List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(wrapper); + List<CodeAllCode> takeBack = codeAllCodes.stream().filter(e -> e.getLcStatus().equals("TakeBack")).collect(Collectors.toList()); + if(codeAllCodes.size()>takeBack.size()){ + throw new ServiceException("鐢熸垚缂栫爜鏁版嵁ID宸叉湁鍘嗗彶璁板綍,璇风‘璁ゅ涓嬬敓鎴愮殑ID鏁版嵁锛�"+ allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + } + + for (CodeAllCode codeAllCode : takeBack) { + codeAllCode.setTs(new Date()); + codeAllCode.setLastModifyTime(new Date()); + codeAllCode.setLastModifier(AuthUtil.getUserId().toString()); + Iterator<CodeAllCode> iterator = allCodeDOList.iterator(); + while (iterator.hasNext()){ + CodeAllCode next = iterator.next(); + if(codeAllCode.getId().equals(next.getId())){ + codeAllCode.setCreateCodeOid(next.getCreateCodeOid()); + codeAllCode.setLcStatus(next.getLcStatus()); + iterator.remove(); + } + } + } + if(takeBack.size()>0){ + codeAllCodeService.updateBatchById(takeBack); } codeAllCodeService.saveBatch(allCodeDOList); // iCodeWupinService.saveBatch(dataCBOList); mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList); - // batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> { // s.setLcStatus(statusMap.get(s.getOid())); // try { @@ -381,10 +421,11 @@ // } // }); } -// WebUtil.setPersistence(true); -// boService.persistenceBatch(batchCBO); + // WebUtil.setPersistence(true); + // boService.persistenceBatch(batchCBO); return codeList; } + /** * 杞崲灞炴�х爜娈电殑鍊� * @param attrSecVOList 灞炴�х爜娈电殑鏄剧ず瀵硅薄 @@ -413,7 +454,8 @@ for (int j = 0; j < thisSecValueList.size(); j++) { String secValue = thisSecValueList.get(j); if (secValue.equalsIgnoreCase("${attr_" + attrSevVO.getOid() + "}")) { - thisSecValueList.set(j, value); + // TODO: 灞炴�х爜娈电敓鎴愮爜鍊煎悗锛屾嫾鎺ュ墠鍚庣紑 + thisSecValueList.set(j, joinPreffixAndSuffix(attrSevVO,value)); } } if (attrSevIsSerialDepend) { @@ -421,14 +463,13 @@ for (int j = 0; j < serialUnitList.size(); j++) { String secValue = serialUnitList.get(j); if (secValue.equalsIgnoreCase("${attr_" + attrSevVO.getOid() + "}")) { - serialUnitList.set(j, value); + serialUnitList.set(j, joinPreffixAndSuffix(attrSevVO,value)); } } } }); } } - /** * 杞崲娴佹按鐮佹鐨勫�� @@ -498,7 +539,8 @@ for (int z = 0; z < thisSecValueList.size(); z++) { String secValue = thisSecValueList.get(z); if (secValue.equalsIgnoreCase("${" + secVO.getOid() + "}")) { - thisSecValueList.set(z, serialString); + // TODO: 娴佹按鐢熸垚鐮佸�煎悗鎷兼帴鍓嶅悗缂� + thisSecValueList.set(z, joinPreffixAndSuffix(secVO, serialString)); } } Map<String, Double> unitSerialMap = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()); @@ -526,18 +568,19 @@ String secValue = secValueMap.getOrDefault(secVO.getOid(), ""); switch (secType) { case CODE_FIXED_SEC: + secValue = joinPreffixAndSuffix(secVO, secValue); //鍥哄畾鐮佹鐨勶紝鐩存帴鐢ㄧ爜鍊�,涓嶈鐮佸�肩殑闀垮害鏄灏戯紝鍥犱负鍙彉闀垮害鍜屽浐瀹氶暱搴︽槸鎺у埗鍦ㄧ爜娈电鐞嗛噷闈㈢殑鐮佸�煎畾涔夌殑 break; case CODE_DATE_SEC: //鏃堕棿鐮佹锛岄渶瑕佸皢褰撳墠鏃堕棿渚濇嵁鏃堕棿鏍煎紡杩涜杞崲. //鏃堕棿鐮佹涓嶆秹鍙婂埌鏄惁琛ヤ綅 - secValue = VciDateUtil.date2Str(new Date(), secVO.getCodeDateFormatStr()); + secValue =joinPreffixAndSuffix(secVO, VciDateUtil.date2Str(new Date(), secVO.getCodeDateFormatStr())); break; case CODE_CLASSIFY_SEC: //鍒嗙被鐮佹鐨勶紝涔熸槸浠庡墠绔�夋嫨浜嗙爜鍊煎嵆鍙紝涓嶈鐮佸�肩殑闀垮害鏄灏� CodeClassifyValue codeClassifyValueDO= codeClassifyValueMapper.selectById(secValue); if(codeClassifyValueDO!=null) { - secValue = codeClassifyValueDO.getId(); + secValue = joinPreffixAndSuffix(secVO, codeClassifyValueDO.getId()); } break; case CODE_LEVEL_SEC: @@ -590,10 +633,12 @@ secValue = secValue.substring(secValue.length() - secVO.getValueCutLength()); } } + secValue = joinPreffixAndSuffix(secVO,secValue); break; case CODE_REFER_SEC: //寮曠敤鐨勫湪椤甸潰涓婂凡缁忛�夋嫨浜嗭紝鎵�浠ョ洿鎺ヤ娇鐢ㄥ墠绔笂浼犻�掔殑鍊� //寮曠敤灏辨槸鍙傜収锛屽彲鑳芥槸鍏朵粬鐨勫垎绫伙紙涓氬姟绫诲瀷锛変笅鐨勬暟鎹紝鎵�浠ュ彧鍦ㄩ〉闈笂閫夋嫨 + secValue = joinPreffixAndSuffix(secVO,secValue); break; case CODE_ATTR_SEC: //灞炴�т笌寮曠敤鐨勫尯鍒槸锛屽睘鎬ф槸褰撳墠鏁版嵁閲岀殑灞炴�э紝鑰屽紩鐢ㄥ彲鑳芥槸寮曠敤鍏朵粬鐨勫垎绫荤殑锛堜笟鍔$被鍨嬶級 @@ -608,6 +653,7 @@ } OsCodeFillTypeEnum fillTypeEnum = OsCodeFillTypeEnum.forValue(secVO.getCodeFillType()); secValue = fillString(VciBaseUtil.getInt(secVO.getCodeSecLength()), fillTypeEnum, secValue, secVO.getCodeFillSeparator()); + secValue = joinPreffixAndSuffix(secVO,secValue); break; case CODE_SERIAL_SEC: //娴佹按鐮佹 @@ -620,6 +666,27 @@ serialUnitList.add(secValue); } secValueList.add(secValue); + } + + /** + * 鎷兼帴鍓嶅悗缂� + * @param secVO + * @param secValue + * @return + */ + private String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){ + StringBuilder joinSecValue = new StringBuilder(); + // 鎷兼帴鍓嶇紑 + if (Func.isNotEmpty(secVO.getPrefixCode())) { + joinSecValue = joinSecValue.append(secVO.getPrefixCode()); + } + // 鍦ㄤ腑闂存嫾鎺ュ�� + joinSecValue.append(secValue); + // 鎷兼帴鍚庣紑 + if(Func.isNotEmpty(secVO.getSuffixCode())){ + joinSecValue = joinSecValue.append(secVO.getSuffixCode()); + } + return joinSecValue.toString(); } /** @@ -672,9 +739,6 @@ allCodeDO.setLcStatus(cbo.getLcStatus()); allCodeDOList.add(allCodeDO); } - - - /** * 淇濆瓨娴佹按鐨勪俊鎭� @@ -743,6 +807,23 @@ } /** + * 鍘绘帀鍓嶅悗缂� + * @param secValue 瀛楃 + * @param priffix 鍓嶇紑 + * @param suffix 鍚庣紑 + * @return 鏇挎崲鍚庣殑鍊� + */ + private String killPriffixSuffix(String secValue, String priffix,String suffix){ + if (priffix != null && secValue.startsWith(priffix)) { + secValue = secValue.substring(priffix.length()); + } + if (suffix != null && secValue.endsWith(suffix)) { + secValue = secValue.substring(0, secValue.length() - suffix.length()); + } + return secValue; + } + + /** * 鍘婚櫎琛ヤ綅瀛楃 * @param s 瀛楃 * @param fillString 琛ヤ綅瀛楃 @@ -752,12 +833,14 @@ private String killFillChar(String s, String fillString,boolean left){ Integer index = 0; String value = s; + if(left){ for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); - if((new String(new char[]{c})).equalsIgnoreCase(fillString)){ - index = i; + if(!(new String(new char[]{c})).equalsIgnoreCase(fillString)){ + break; } + index = i; } if(index >0){ value = value.substring(index); @@ -766,9 +849,10 @@ //浠庡彸寰�宸︽壘 for (int i = s.length()-1; i >=0; i++) { char c = s.charAt(i); - if((new String(new char[]{c})).equalsIgnoreCase(fillString)){ - index = i; + if(!(new String(new char[]{c})).equalsIgnoreCase(fillString)){ + break; } + index = i; } if(index >0){ value = value.substring(0,index); @@ -836,4 +920,5 @@ // WebUtil.copyValueToMapFromCbos(cbo,dataMap); return formulaService.getValueByFormula(map,rule); } + } -- Gitblit v1.9.3