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 | 327 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 253 insertions(+), 74 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 2ebd73a..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 @@ -5,27 +5,38 @@ import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; import com.vci.ubcs.code.dto.CodeOrderSecDTO; import com.vci.ubcs.code.entity.CodeAllCode; +import com.vci.ubcs.code.entity.CodeClassifyValue; import com.vci.ubcs.code.entity.CodeSerialValue; -import com.vci.ubcs.code.entity.CodeWupinEntity; import com.vci.ubcs.code.enumpack.CodeCutTypeEnum; import com.vci.ubcs.code.enumpack.CodeGetValueTypeEnum; import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum; import com.vci.ubcs.code.enumpack.CodeSecTypeEnum; import com.vci.ubcs.code.lifecycle.CodeAllCodeLC; +import com.vci.ubcs.code.mapper.CodeClassifyValueMapper; import com.vci.ubcs.code.mapper.CodeSerialValueMapper; -import com.vci.ubcs.code.service.ICodeWupinService; +import com.vci.ubcs.code.service.MdmEngineService; import com.vci.ubcs.code.service.MdmProductCodeService; import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO; import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO; import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO; import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO; import com.vci.ubcs.starter.exception.VciBaseException; +import com.vci.ubcs.starter.revision.model.BaseModel; +import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; +import com.vci.ubcs.starter.util.MdmBtmTypeConstant; import com.vci.ubcs.starter.web.constant.QueryOptionConstant; import com.vci.ubcs.starter.web.constant.RegExpConstant; import com.vci.ubcs.starter.web.enumpck.OsCodeFillTypeEnum; import com.vci.ubcs.starter.web.util.VciBaseUtil; 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; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; @@ -35,6 +46,7 @@ import static com.vci.ubcs.code.constant.MdmEngineConstant.*; @Service +@Slf4j public class MdmProductCodeServiceImpl implements MdmProductCodeService { /** @@ -42,6 +54,12 @@ */ @Resource private CodeSerialValueMapper serialValueMapper; + + /** + * 娴佹按鍙风殑鐩稿叧鐨勪俊鎭� + */ + @Resource + private CodeClassifyValueMapper codeClassifyValueMapper; /** * 鎵�鏈夌殑缂栫爜鐨勫唴瀹� @@ -53,53 +71,62 @@ * 鎵�鏈夌殑缂栫爜鐨勫唴瀹� */ @Resource - private ICodeWupinService iCodeWupinService; + @Lazy + private MdmEngineService mdmEngineService; + + /** + * 鍏紡鐨勬湇鍔� + */ + @Autowired + private FormulaServiceImpl formulaService; @Override - public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<CodeWupinEntity> dataCBOList) { -// BatchCBO batchCBO = new BatchCBO(); -// WebUtil.setPersistence(false); -// dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList()); -// batchCBO.getCreateCbos().addAll(dataCBOList); + @Transactional(rollbackFor = VciBaseException.class) + public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception { + dataCBOList = dataCBOList.stream().sorted(((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime()))).collect(Collectors.toList()); List<String> codeList = new ArrayList<>(); /***** * 淇濊瘉骞跺彂鐨勬椂鍊欙紝鏈�澶ф祦姘村彿閮藉鐨勶紝浣嗘槸杩欑鍔犻攣鏈夊紛绔� - * */ - 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->{ -// VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); + log.info("code:----->"+cbo.getId()); + //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); String code = cbo.getId(); List<String> serialUnitList = new ArrayList<>(); - String[] secLengths = cbo.getCodeSecLengthField().split("#"); + 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闄ゅ幓 + cbo.getData().remove(IMPORT_ROW_INDEX);//灏嗘key闄ゅ幓 + cbo.getData().remove("codeclassifyid");//灏嗘key闄ゅ幓 List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList()); Map<String/**鐮佹鐨勪富閿�**/,String/**鐮佹鐨勫��**/> serialValueMap = new HashMap<>(); Map<String, CodeBasicSecVO> secVOMap = secVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t)); for (int i = 0; i < secLengths.length; i++) { CodeBasicSecVO secVO = secVOList.get(i); String thisSecValue = ""; - if(i == 0){ - thisSecValue = code.contains("#")?code.substring(0,code.indexOf("#")):code; + /*if(i == 0){ + thisSecValue = seclenghStr.contains("#")?code.substring(0,VciBaseUtil.getInt(secLengths[i])):code; } else if(i == secLengths.length-1){ //鏈�鍚� - thisSecValue = code.contains("#")?code.substring(code.lastIndexOf("#")):code; - }else { + thisSecValue = seclenghStr.contains("#")?code.substring(VciBaseUtil.getInt(secLengths[i-1]),code.length()):code; + }else {*/ int start = 0; for (int j = 0; j < i; j++) { - start += VciBaseUtil.getInt(secLengths[j]) + 1; + start += VciBaseUtil.getInt(secLengths[j]); } - thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[1])); - } + thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[i])); + // } if(VciBaseUtil.getBoolean(secVO.getSerialDependFlag())){ serialUnitList.add(thisSecValue); } @@ -114,22 +141,32 @@ //瑕佺湅鏄笉鏄ˉ浣嶇殑 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<>()); - thisUnitMaxMap.put(secOid,serialDb); + Double maxValue=serialDb; + if(thisUnitMaxMap.containsKey(secOid)){ + maxValue= thisUnitMaxMap.getOrDefault(secOid,new Double(-1)); + if(maxValue<serialDb){ + maxValue=serialDb; + } + } + thisUnitMaxMap.put(secOid,maxValue); maxSerialMap.put(serialUnitString,thisUnitMaxMap); serialUnFileStringList.add(String.valueOf(serialDb)); }); } CodeAllCode allCodeDO = new CodeAllCode(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE); allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid()); allCodeDO.setCodeRuleOid(ruleVO.getOid()); allCodeDO.setId(cbo.getId()); @@ -137,36 +174,37 @@ allCodeDO.setCreateCodeBtm(cbo.getBtmname()); allCodeDO.setCreateCodeOid(cbo.getOid()); allCodeDO.setSerialUnit(serialUnitString); - allCodeDO.setUnFillSerial(serialUnFileStringList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE))); + String unFillSerial =serialUnFileStringList.size()==1?serialUnFileStringList.get(0)+ SERIAL_VALUE_SPACE:serialUnFileStringList.stream().collect(Collectors.joining(SERIAL_VALUE_SPACE)); + allCodeDO.setUnFillSerial(unFillSerial); allCodeDO.setLcStatus(cbo.getLcStatus()); allCodeDOList.add(allCodeDO); }); //澶勭悊鏈�澶х殑娴佹按鍙� List<CodeSerialValue> addSerialValueList = new ArrayList<>(); List<CodeSerialValue> editSerialValueList = new ArrayList<>(); + log.info("maxSerialMap:----->"+maxSerialMap.size()); maxSerialMap.forEach((serialUnit,secOidMaxMap)->{ secOidMaxMap.forEach((secOid,maxSerial)->{ -// Map<String, String> conditionMap = new HashMap<>(); -// conditionMap.put("codeRuleOid", ruleVO.getOid()); -// conditionMap.put("serialUnit", serialUnit); -// //杩欎釜瀛楁鏄负浜嗚В鍐冲涓祦姘寸殑闂 -// conditionMap.put("codeSecOid", secOid); QueryWrapper<CodeSerialValue> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("codeRuleOid", ruleVO.getOid()); queryWrapper.eq("serialUnit", serialUnit); + //杩欎釜瀛楁鏄负浜嗚В鍐冲涓祦姘寸殑闂 queryWrapper.eq("codeSecOid", secOid); List<CodeSerialValue> serialValueDOS = serialValueMapper.selectList(queryWrapper); -// .selectByCondition(conditionMap, new PageHelper(-1)); + log.info("serialValueDOS--->"+serialValueDOS.size()); if (!CollectionUtils.isEmpty(serialValueDOS)) { CodeSerialValue serialValueDO = serialValueDOS.get(0); + log.info("oldmaxSerial--->"+serialValueDO.getMaxSerial()+"---- newmaxSerial---->"+maxSerial); if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<maxSerial){ serialValueDO.setMaxSerial(String.valueOf(maxSerial)); + DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO); editSerialValueList.add(serialValueDO); } }else{ //娌℃湁 CodeSerialValue serialValueDO = new CodeSerialValue(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE); serialValueDO.setCodeRuleOid(ruleVO.getOid()); serialValueDO.setSerialUnit(serialUnit); serialValueDO.setCodeSecOid(secOid); @@ -176,31 +214,24 @@ }); }); if(!CollectionUtils.isEmpty(addSerialValueList)){ -// batchCBO.copyFromOther(serialValueMapper.batchInsert(addSerialValueList)); for (CodeSerialValue codeSerialValue : addSerialValueList) { serialValueMapper.insert(codeSerialValue); } -// serialValueMapper.ba - } if(!CollectionUtils.isEmpty(editSerialValueList)){ for (CodeSerialValue codeSerialValue : editSerialValueList) { serialValueMapper.updateById(codeSerialValue); } - -// batchCBO.copyFromOther(serialValueMapper.batchUpdate(editSerialValueList)); } //澶勭悊allCode if(!CollectionUtils.isEmpty(allCodeDOList)){ - Map<String, List<CodeAllCode>> ruleGroup = allCodeDOList.stream().collect(Collectors.groupingBy(s -> s.getCodeRuleOid())); + // 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<>(); ruleGroup.forEach((ruleOid,allCodeDOS)->{ VciBaseUtil.switchCollectionForOracleIn(allCodeDOS).stream().forEach(codeDOs->{ -// Map<String,String> conditionMap = new HashMap<>(); -// conditionMap.put("coderuleoid",ruleOid); -// conditionMap.put("id",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDOs.stream().map(s->s.getId()).collect(Collectors.toList()).toArray(new String[0])) + ")"); QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>(); allCodeWrapper.eq("coderuleoid",ruleOid); allCodeWrapper.in("id", QueryOptionConstant.IN + "(" + @@ -231,26 +262,56 @@ addCodeDOs = allCodeDOList; } if(!CollectionUtils.isEmpty(editCodeDOs)){ -// batchCBO.copyFromOther(allCodeMapper.batchUpdate(editCodeDOs)); codeAllCodeService.updateBatchById(editCodeDOs); } if(!CollectionUtils.isEmpty(addCodeDOs)){ -// batchCBO.copyFromOther(allCodeMapper.batchInsert(addCodeDOs)); Map<String, String> statusMap = addCodeDOs.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus())); addCodeDOs.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> { s.setLcStatus(statusMap.get(s.getOid())); }); + //閫氳繃ID鏉ヨ繘琛屽幓閲� + List<CodeAllCode> distinctCodeAllCOdes = addCodeDOs.stream().collect(Collectors + .collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))), + ArrayList::new)); + if( distinctCodeAllCOdes.size() != addCodeDOs.size() ){ + throw new VciBaseException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒"); + } + QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); + wrapper.eq("CREATECODEBTM",addCodeDOs.get(0).getCreateCodeBtm()); + wrapper.in("ID",addCodeDOs.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + 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); } + mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList); } -// WebUtil.setPersistence(true); -// boService.persistenceBatch(batchCBO); return codeList; }else { List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList()); List<String> serialUnitList = new LinkedList<>(); List<String> secValueList = new ArrayList<>(); - Map<String, String> secValueMap = secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), s -> s.getSecValue())); + Map<String, String> secValueMap = secDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), s -> s.getSecValue()==null?"":s.getSecValue())); List<CodeBasicSecVO> serialSecVOList = new ArrayList<>(); List<CodeBasicSecVO> attrSecVOList = new ArrayList<>(); for (int i = 0; i < secVOList.size(); i++) { @@ -265,7 +326,10 @@ Map<String/**鐮佹鐨勪富閿�**/, Map<String, CodeSerialValue>> maxSerialValueMap = new HashMap<>(); for (int i = 0; i < dataCBOList.size(); i++) { - CodeWupinEntity cbo = dataCBOList.get(i); + BaseModel cbo = dataCBOList.get(i); + cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//灏嗘key闄ゅ幓 + cbo.getData().remove(IMPORT_ROW_INDEX);//灏嗘key闄ゅ幓 + cbo.getData().remove("codeclassifyid");//灏嗘key闄ゅ幓 List<String> thisSecValueList = new LinkedList<>(); for (int j = 0; j < secValueList.size(); j++) { thisSecValueList.add(secValueList.get(j)); @@ -297,15 +361,57 @@ //瑕佸瓨鍌ㄦ渶鍚庣殑鍏ㄩ儴allcode wrapperAllCode(classifyFullInfoBO, ruleVO, cbo, templateVO, allCodeDOList, serialUnitString, sb.toString()); } + //澶勭悊鏈�澶ф祦姘� saveSerialValue( ruleVO, lastMaxSerialValueMap, maxSerialValueMap); + + allCodeDOList.stream().forEach( + 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 + .collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))), + ArrayList::new)); + if( distinctCodeAllCOdes.size() != allCodeDOList.size() ){ + throw new ServiceException("缂栫爜鏁版嵁閲嶅锛屾棤娉曚繚瀛橈紝璇锋敞鎰忥紒"); + } + QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>(); + wrapper.eq("CREATECODEBTM",allCodeDOList.get(0).getCreateCodeBtm()); + wrapper.in("ID",allCodeDOList.stream().map(CodeAllCode::getId).collect(Collectors.toList())); + 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); +// 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 { @@ -315,10 +421,11 @@ // } // }); } -// WebUtil.setPersistence(true); -// boService.persistenceBatch(batchCBO); + // WebUtil.setPersistence(true); + // boService.persistenceBatch(batchCBO); return codeList; } + /** * 杞崲灞炴�х爜娈电殑鍊� * @param attrSecVOList 灞炴�х爜娈电殑鏄剧ず瀵硅薄 @@ -328,17 +435,17 @@ * @param serialUnitList 娴佹按渚濇嵁鐨勫唴瀹� * 杩橀渶瑕佸悗缁殑涓�涓Щ妞嶅皢浼氭秹鍙婂埌鍏朵粬鐨勬湇鍔� */ - private void switchAttrSecValue(List<CodeBasicSecVO> attrSecVOList,CodeWupinEntity cbo, - List<String> thisSecValueList,boolean attrSevIsSerialDepend, - List<String> serialUnitList){ + private void switchAttrSecValue(List<CodeBasicSecVO> attrSecVOList, BaseModel cbo, + List<String> thisSecValueList, boolean attrSevIsSerialDepend, + List<String> serialUnitList){ if (!CollectionUtils.isEmpty(attrSecVOList)) { attrSecVOList.stream().forEach(attrSevVO -> { String value = ""; if (StringUtils.isNotBlank(attrSevVO.getGetValueClass())) { //浣跨敤缁勫悎瑙勫垯鏉ュ鐞嗙殑 -// value = getValueByFormulaForCBO(cbo, attrSevVO.getGetValueClass()); + value = getValueByFormulaForCBO(cbo, attrSevVO.getGetValueClass()); } else { -// value = cbo.getAttributeValue(attrSevVO.getReferAttributeId()); + value = cbo.getData().get(attrSevVO.getReferAttributeId()); } if (value == null) { value = ""; @@ -347,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) { @@ -355,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)); } } } }); } } - /** * 杞崲娴佹按鐮佹鐨勫�� @@ -432,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<>()); @@ -460,15 +568,20 @@ 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 = joinPreffixAndSuffix(secVO, codeClassifyValueDO.getId()); + } break; case CODE_LEVEL_SEC: //灞傜骇鐮佹锛岄渶瑕佷粠鍒嗙被涓婅幏鍙栫浉搴旂殑淇℃伅 @@ -479,7 +592,7 @@ secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); } else { //鎴戜滑闇�瑕佷粠椤跺眰寮�濮嬫壘鍒板綋鍓嶅垎绫讳负姝� - secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); + secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); } } else { //鎸囧畾灞傦紝鎴戜滑闇�瑕侀�氳繃涓婄骇鐨勬潵鑾峰彇 @@ -488,7 +601,7 @@ secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); } else { //杩欎釜鎴戜滑闇�瑕佺湅鐪�,灞傜骇鏄笉鏄ぇ浜庝簡鏈�澶у眰绾х殑鏁� - List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList()); + List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList()); if (secVO.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) { //鎸囧畾鐨勫眰绾ф瘮褰撳墠鐨勫眰绾ц繕澶т簡锛屾墍浠ュ彧鑳借幏鍙栧綋鍓嶅眰绾т簡 if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(secVO.getCodeGetValueType())) { @@ -505,7 +618,7 @@ } } else { //灏忎簬绛変簬鐨勫叏閮ㄦ嬁鍑烘潵 - secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= secVO.getCodeLevelValue().intValue()).sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()); + secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= secVO.getCodeLevelValue().intValue()).sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()); } } } @@ -520,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: //灞炴�т笌寮曠敤鐨勫尯鍒槸锛屽睘鎬ф槸褰撳墠鏁版嵁閲岀殑灞炴�э紝鑰屽紩鐢ㄥ彲鑳芥槸寮曠敤鍏朵粬鐨勫垎绫荤殑锛堜笟鍔$被鍨嬶級 @@ -538,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: //娴佹按鐮佹 @@ -550,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(); } /** @@ -586,10 +723,11 @@ * @param templateVO 妯℃澘鐨勪俊鎭� * @param allCodeDOList 鎵�鏈夌殑鐮佸�肩殑瀵硅薄鍒楄〃 */ - private void wrapperAllCode(CodeClassifyFullInfoBO classifyFullInfoBO,CodeRuleVO ruleVO, - CodeWupinEntity cbo,CodeClassifyTemplateVO templateVO, - List<CodeAllCode> allCodeDOList,String serialUnitString,String serialValueString){ + private void wrapperAllCode(CodeClassifyFullInfoBO classifyFullInfoBO, CodeRuleVO ruleVO, + BaseModel cbo, CodeClassifyTemplateVO templateVO, + List<CodeAllCode> allCodeDOList, String serialUnitString, String serialValueString){ CodeAllCode allCodeDO = new CodeAllCode(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE); allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid()); allCodeDO.setCodeRuleOid(ruleVO.getOid()); allCodeDO.setId(cbo.getId()); @@ -601,9 +739,6 @@ allCodeDO.setLcStatus(cbo.getLcStatus()); allCodeDOList.add(allCodeDO); } - - - /** * 淇濆瓨娴佹按鐨勪俊鎭� @@ -624,9 +759,11 @@ //璇存槑鏈� serialValueDO = maxSerialValueMap.get(secOid).get(unit); serialValueDO.setMaxSerial(maxSerial.toString()); + DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO); editSerialValueDOList.add(serialValueDO); }else{ serialValueDO = new CodeSerialValue(); + DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE); serialValueDO.setCodeRuleOid(ruleVO.getOid()); serialValueDO.setSerialUnit(unit); serialValueDO.setCodeSecOid(secOid); @@ -670,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 琛ヤ綅瀛楃 @@ -679,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); @@ -693,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); @@ -742,4 +899,26 @@ // WebUtil.setPersistence(oldPersistence); return updateFlag.get(); } + + /** + * 浣跨敤CBO澶勭悊缁勫悎瑙勫垯鐨勫唴瀹� + * @param cbo 鏁版嵁鐨勫唴瀹� + * @param rule 瑙勫垯鐨勫唴瀹� + * @return 杞崲鍚庣殑 + */ + private String getValueByFormulaForCBO(BaseModel cbo,String rule) { + Map<String, Object> dataMap = null; + try{ + dataMap = VciBaseUtil.convertBean2Map(cbo,null); + }catch(Exception e){ + throw new VciBaseException("mapToBeanError:"+e); + } + Map<String, String> map = new HashMap<String, String>(); + for (String i : dataMap.keySet()) { + map.put(i, String.valueOf(dataMap.get(i))); + } +// WebUtil.copyValueToMapFromCbos(cbo,dataMap); + return formulaService.getValueByFormula(map,rule); + } + } -- Gitblit v1.9.3