| | |
| | | } |
| | | return String.valueOf(maxSecNum); |
| | | } |
| | | |
| | | /*** |
| | | * 根据流水依赖获取最大流水号 |
| | | * @param codeOrderDTO 编码申请传输对象 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Double getMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) { |
| | | Double maxSerialNumber=0.0; |
| | | VciBaseUtil.alertNotNull(codeOrderDTO.getCodeRuleOid(),"编码规则主键"); |
| | | List<CodeOrderSecDTO> codeOrderSecDTOList=codeOrderDTO.getSecDTOList(); |
| | | if(CollectionUtils.isEmpty(codeOrderSecDTOList)){ |
| | | throw new VciBaseException("最大流水号的流水依赖不能为空!"); |
| | | } |
| | | String codeRuleOid = codeOrderDTO.getCodeRuleOid(); |
| | | Map<String/**码段主键*/,CodeOrderSecDTO/**码段相关信息*/> codeOrderSecDTOMap = codeOrderSecDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t)); |
| | | List<String> codeBasicSecOidList = codeOrderSecDTOList.stream().map(s->s.getSecOid()).collect(Collectors.toList());//流水依赖码段的主键集合 |
| | | //获取流水依赖码段 |
| | | LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda() |
| | | .eq(CodeBasicSec::getPkCodeRule,codeRuleOid) |
| | | .in(CodeBasicSec::getOid,codeBasicSecOidList) |
| | | .eq(CodeBasicSec::getSerialDependFlag,"true") |
| | | .orderByAsc(CodeBasicSec::getSerialDependOrder); |
| | | List<CodeBasicSec> codeBasicSecList = this.list(wrapper); |
| | | //按流水依赖顺序,处理流水依赖码段的值 |
| | | List<String> serialDependValueList = new ArrayList<>(); |
| | | codeBasicSecList.stream().forEach(s->{ |
| | | CodeOrderSecDTO codeOrderSecDTO = codeOrderSecDTOMap.get(s.getOid()); |
| | | String serialDependValue = codeOrderSecDTO.getSecValue(); |
| | | if(s.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())){ |
| | | try { |
| | | Date date = VciDateUtil.str2Date(codeOrderSecDTO.getSecValue(),s.getCodeDateFormatStr()); |
| | | serialDependValue = VciDateUtil.date2Str(date,s.getCodeDateFormatStr()); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | serialDependValueList.add(serialDependValue); |
| | | }); |
| | | |
| | | //获取流水码段 |
| | | wrapper = Wrappers.<CodeBasicSec>query().lambda() |
| | | .eq(CodeBasicSec::getPkCodeRule,codeRuleOid) |
| | | .eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue()) |
| | | .orderByAsc(CodeBasicSec::getSerialDependOrder); |
| | | CodeBasicSec codeBasicSec = this.getOne(wrapper); |
| | | //根据编码规则和流水依赖,获取最大流水号 |
| | | String serialUnitString = serialDependValueList.size() == 0 ? EMPTY_SERIAL_UNIT : serialDependValueList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE)); |
| | | LambdaQueryWrapper<CodeSerialValue> codeSerialWrapper = new LambdaQueryWrapper<>(); |
| | | codeSerialWrapper.eq(CodeSerialValue::getCodeRuleOid, codeRuleOid); |
| | | codeSerialWrapper.eq(CodeSerialValue::getSerialUnit, serialUnitString); |
| | | codeSerialWrapper.eq(CodeSerialValue::getCodeSecOid,codeBasicSec.getOid()); |
| | | codeSerialWrapper.orderByDesc(CodeSerialValue::getCreateTime); |
| | | List<CodeSerialValue> codeSerialValueList = serialValueMapper.selectList(codeSerialWrapper); |
| | | if(!CollectionUtils.isEmpty(codeSerialValueList)){ |
| | | maxSerialNumber=StringUtils.isBlank(codeSerialValueList.get(0).getMaxSerial())?0:Double.parseDouble(codeSerialValueList.get(0).getMaxSerial()); |
| | | } |
| | | return maxSerialNumber; |
| | | } |
| | | } |