| | |
| | | // && StringUtils.isNotBlank(cbo.getAttributeValue(CODE_SEC_LENGTH_FIELD)) |
| | | ){ |
| | | //是历史数据导入 |
| | | //历史数据执行的时候,这个系统会很卡 |
| | | //主要是为了录入最大流水号和allcode |
| | | //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); |
| | | List<CodeAllCode> allCodeDOList = new CopyOnWriteArrayList<>(); |
| | | Map<String/**流水依据**/, ConcurrentHashMap<String/**码段的主键**/,String/**最大流水号**/>> maxSerialMap = new ConcurrentHashMap<>(); |
| | | Map<String/**流水依据**/, HashMap<String/**码段的主键**/,String/**最大流水号**/>> maxSerialMap = new HashMap<>(); |
| | | // TODO 多线程流引发的问题已修改 |
| | | dataCBOList.parallelStream().forEach(cbo->{ |
| | | log.info("code:----->"+cbo.getId()); |
| | |
| | | OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType())); |
| | | } |
| | | Double newSerialDb= CustomSerialEnum.getDoubleCustomSerialValue(secValue,secVO.getCustomCodeSerialType()); |
| | | ConcurrentHashMap<String, String> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new ConcurrentHashMap<>()); |
| | | HashMap<String, String> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new HashMap<>()); |
| | | Double maxValue=newSerialDb; |
| | | if(thisUnitMaxMap.containsKey(secOid)){ |
| | | String newMaxValue= thisUnitMaxMap.getOrDefault(secOid,""); |
| | |
| | | switchSecValue(secVO, secValueMap, classifyFullInfoBO, serialSecVOList, attrSecVOList, serialUnitList, secValueList); |
| | | } |
| | | //处理属性码段和流水码段 |
| | | Map<String/**流水码段的主键**/, Map<String/**流水依据**/, Double>> lastMaxSerialValueMap = new HashMap<>(); |
| | | Map<String/**流水码段的主键**/, Map<String/**流水依据**/, String>> lastMaxSerialValueMap = new HashMap<>(); |
| | | List<CodeAllCode> allCodeDOList = new ArrayList<>(); |
| | | |
| | | //已经存储的最大流水号的内容 |
| | |
| | | switchAttrSecValue(attrSecVOList, cbo, thisSecValueList, attrSevIsSerialDepend, thisSerialUnitList); |
| | | |
| | | String serialUnitString = thisSerialUnitList.size() == 0 ? EMPTY_SERIAL_UNIT : thisSerialUnitList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE)); |
| | | switchSerialSecValue(serialSecVOList, attrSevIsSerialDepend, finalRuleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0); |
| | | switchSerialSecValue(cbo,serialSecVOList, attrSevIsSerialDepend, finalRuleVO, serialUnitString, maxSerialValueMap, thisSecValueList, lastMaxSerialValueMap, i == 0); |
| | | |
| | | //组装编码的值 |
| | | cbo.setId(thisSecValueList.stream().collect(Collectors.joining())); |
| | |
| | | //把码段里面都找一下流水号 |
| | | for (int j = 0; j < serialSecVOList.size(); j++) { |
| | | CodeBasicSecVO secVO = serialSecVOList.get(j); |
| | | Double serialValue = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()).getOrDefault(serialUnitString, 0d); |
| | | String serialValue = lastMaxSerialValueMap.getOrDefault(secVO.getOid(), new HashMap<>()).getOrDefault(serialUnitString, ""); |
| | | if (serialValue != null) { |
| | | sb.append(String.valueOf(serialValue.longValue())).append(SERIAL_VALUE_SPACE); |
| | | sb.append(serialValue).append(SERIAL_VALUE_SPACE); |
| | | } |
| | | } |
| | | //要存储最后的全部allcode |
| | |
| | | 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 |
| | |
| | | * @param lastMaxSerialValueMap 封装后 |
| | | * @param firstData 是否为第一条数据 |
| | | */ |
| | | private void switchSerialSecValue(List<CodeBasicSecVO> serialSecVOList,boolean attrSevIsSerialDepend, |
| | | private void switchSerialSecValue(BaseModel cbo, List<CodeBasicSecVO> serialSecVOList,boolean attrSevIsSerialDepend, |
| | | CodeRuleVO ruleVO,String serialUnitString, |
| | | Map<String/**码段的主键**/,Map<String/**流水依据**/,CodeSerialValue>> maxSerialValueMap,List<String> thisSecValueList, |
| | | Map<String/**码段的主键**/,Map<String/**流水依据**/, Double>> lastMaxSerialValueMap,boolean firstData){ |
| | | Map<String/**码段的主键**/,Map<String/**流水依据**/, String>> lastMaxSerialValueMap,boolean firstData){ |
| | | if (!CollectionUtils.isEmpty(serialSecVOList)) { |
| | | Map<String,String> secIdserialValueMap=new LinkedHashMap<>(); |
| | | for (int j = 0; j < serialSecVOList.size(); j++) { |
| | |
| | | //防止在添加的地方没有控制正确 |
| | | fillLength = VciBaseUtil.getInt(secVO.getCodeSecLength()); |
| | | } |
| | | String serialString = String.valueOf(thisSerialValue.longValue()); |
| | | serialString = thisSerialValue; |
| | | serialString = fillString(fillLength, OsCodeFillTypeEnum.forValue(secVO.getCodeFillType()), serialString, secVO.getCodeFillSeparator()); |
| | | |
| | | for (int z = 0; z < thisSecValueList.size(); z++) { |
| | |
| | | |
| | | /** |
| | | * 拼接前后缀 |
| | | * @param secVO |
| | | * @param secValue |
| | | * @param secVO 码段 |
| | | * @param secValue 码值 |
| | | * @return |
| | | */ |
| | | private String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){ |
| | | StringBuilder joinSecValue = new StringBuilder(); |
| | | // 拼接前缀 |
| | | if (Func.isNotEmpty(secVO.getPrefixCode())) { |
| | | if (Func.isNotEmpty(secVO.getPrefixCode()) && Func.isNotEmpty(secValue)) { |
| | | joinSecValue = joinSecValue.append(secVO.getPrefixCode()); |
| | | } |
| | | // 在中间拼接值 |
| | | joinSecValue.append(secValue); |
| | | // 拼接后缀 |
| | | if(Func.isNotEmpty(secVO.getSuffixCode())){ |
| | | if(Func.isNotEmpty(secVO.getSuffixCode()) && Func.isNotEmpty(secValue)){ |
| | | joinSecValue = joinSecValue.append(secVO.getSuffixCode()); |
| | | } |
| | | return joinSecValue.toString(); |