| | |
| | | import com.alibaba.cloud.commons.lang.StringUtils; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | |
| | | import com.vci.ubcs.code.dto.CodeBasicSecDTO; |
| | | import com.vci.ubcs.code.dto.CodeOrderDTO; |
| | | import com.vci.ubcs.code.dto.CodeOrderSecDTO; |
| | | import com.vci.ubcs.code.entity.*; |
| | | import com.vci.ubcs.code.enumpack.*; |
| | | import com.vci.ubcs.code.lifecycle.CodeRuleLC; |
| | | import com.vci.ubcs.code.mapper.CodeBasicSecMapper; |
| | | import com.vci.ubcs.code.mapper.CodeClassifyValueMapper; |
| | | import com.vci.ubcs.code.mapper.CodeFixedValueMapper; |
| | | import com.vci.ubcs.code.mapper.CodeSerialValueMapper; |
| | | import com.vci.ubcs.code.service.*; |
| | | import com.vci.ubcs.code.vo.CodeReferConfigVO; |
| | | import com.vci.ubcs.code.vo.pagemodel.*; |
| | |
| | | import com.vci.ubcs.omd.enums.EnumEnum; |
| | | import com.vci.ubcs.starter.enumpack.CodeTableNameEnum; |
| | | import com.vci.ubcs.starter.exception.VciBaseException; |
| | | import com.vci.ubcs.starter.revision.model.BaseModel; |
| | | import com.vci.ubcs.starter.revision.service.RevisionModelUtil; |
| | | import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; |
| | | import com.vci.ubcs.starter.util.MdmBtmTypeConstant; |
| | |
| | | import com.vci.ubcs.starter.web.pagemodel.*; |
| | | import com.vci.ubcs.starter.web.util.BeanUtilForVCI; |
| | | import com.vci.ubcs.starter.web.util.VciBaseUtil; |
| | | import com.vci.ubcs.starter.web.util.VciDateUtil; |
| | | import com.vci.ubcs.starter.web.util.WebUtil; |
| | | import com.vci.ubcs.system.entity.DictBiz; |
| | | import com.vci.ubcs.system.feign.IDictBizClient; |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*; |
| | | import static com.vci.ubcs.code.constant.MdmEngineConstant.EMPTY_SERIAL_UNIT; |
| | | import static com.vci.ubcs.code.constant.MdmEngineConstant.SERIAL_UNIT_SPACE; |
| | | |
| | | /** |
| | | * 码段基础信息服务接口 |
| | |
| | | */ |
| | | @Resource |
| | | private ICodeFixedValueService fixedValueService; |
| | | |
| | | /** |
| | | * 流水号的相关的信息 |
| | | */ |
| | | @Resource |
| | | private CodeSerialValueMapper serialValueMapper; |
| | | |
| | | /** |
| | | * 上层分类码段的属性名称 |
| | |
| | | DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeBasicSecDO); |
| | | boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus()); |
| | | boolean resBoolean; |
| | | CodeReferConfigVO codeReferConfigVO = null; |
| | | if (!status){ |
| | | //返回错误信息 |
| | | throw new VciBaseException("编码规则不允许编辑或删除!"); |
| | |
| | | && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){ |
| | | throw new VciBaseException("当补位方式为左补位或者右补位的时候,补位字符不能为空"); |
| | | } |
| | | CodeReferConfigVO codeReferConfigVO = null; |
| | | //引用码段的时候,需要判断参照的信息是否正确 |
| | | if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){ |
| | | if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){ |
| | |
| | | codeReferConfigService.insert(codeReferConfigVO); |
| | | } |
| | | } |
| | | revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO); |
| | | |
| | | // revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//此处的拷贝会把referValueInfo的值给覆盖掉,需要重新赋值 |
| | | BaseModel tempModel = new BaseModel(); |
| | | BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, tempModel); |
| | | BeanUtil.copyProperties(codeBasicSecDTO, codeBasicSecDO,"referValueInfo"); |
| | | BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel, codeBasicSecDO); |
| | | codeBasicSecDO.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", codeBasicSecDTO))); |
| | | codeBasicSecDO.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name", codeBasicSecDTO))); |
| | | codeBasicSecDO.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", codeBasicSecDTO))); |
| | | |
| | | resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0; |
| | | //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); |
| | | if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){ |
| | |
| | | return codeBasicSecVO; |
| | | } |
| | | |
| | | /** |
| | | * 根据编码规则主键获取编码下的流水依赖码段 |
| | | * |
| | | * @param oid 编码规则主键 |
| | | * @return |
| | | * @throws VciBaseException |
| | | */ |
| | | @Override |
| | | public CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(oid,"编码规则主键"); |
| | | CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid); |
| | | if (codeRuleVO != null) { |
| | | //如果有lcstatus的类的话 |
| | | codeRuleVO.setLcStatusText(CodeRuleLC.getTextByValue(codeRuleVO.getLcStatus())); |
| | | |
| | | LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda() |
| | | .eq(CodeBasicSec::getPkCodeRule, codeRuleVO.getOid()) |
| | | .eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue()); |
| | | CodeBasicSec codeBasicSec = this.getOne(wrapper); |
| | | if(codeBasicSec != null && VciBaseUtil.isNotNull(codeBasicSec.getOid())){ |
| | | wrapper = Wrappers.<CodeBasicSec>query().lambda() |
| | | .eq(CodeBasicSec::getPkCodeRule,codeRuleVO.getOid()) |
| | | .eq(CodeBasicSec::getSerialDependFlag,"true") |
| | | .orderByAsc(CodeBasicSec::getSerialDependOrder); |
| | | List<CodeBasicSec> codeBasicSecList = this.list(wrapper); |
| | | if(!CollectionUtils.isEmpty(codeBasicSecList)){ |
| | | List<CodeBasicSecVO> codeBasicSecVOS = codeBasicSecDO2VOs(codeBasicSecList); |
| | | //查询固定码的码值 |
| | | Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(codeBasicSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toList())); |
| | | codeBasicSecVOS.stream().forEach(vo->{ |
| | | vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null)); |
| | | }); |
| | | codeRuleVO.setSecVOList(codeBasicSecVOS); |
| | | } |
| | | }else{ |
| | | throw new VciBaseException(codeRuleVO.getName()+"编码规则下无流水码段,无法设置最大流水号!"); |
| | | } |
| | | } |
| | | return codeRuleVO; |
| | | } |
| | | |
| | | /** |
| | | * 设置最大流水号 |
| | | * |
| | | * @param codeOrderDTO 编码申请传输对象 |
| | | * @return |
| | | * @throws VciBaseException |
| | | */ |
| | | @Override |
| | | public String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(codeOrderDTO.getCodeRuleOid(),"编码规则主键",codeOrderDTO.getMaxSecNum(),"最大流水号"); |
| | | List<CodeOrderSecDTO> codeOrderSecDTOList = codeOrderDTO.getSecDTOList(); |
| | | if(CollectionUtils.isEmpty(codeOrderSecDTOList)){ |
| | | throw new VciBaseException("最大流水号的流水依赖不能为空!"); |
| | | } |
| | | |
| | | String codeRuleOid = codeOrderDTO.getCodeRuleOid(); |
| | | int maxSecNum = codeOrderDTO.getMaxSecNum(); |
| | | |
| | | 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)){ |
| | | CodeSerialValue codeSerialValue = codeSerialValueList.get(0); |
| | | int maxSerial = Double.valueOf(codeSerialValue.getMaxSerial()).intValue(); |
| | | //已有的最大流水号,小于设置的最大流水号,更新最大流水号 |
| | | if(maxSerial < maxSecNum){ |
| | | codeSerialValue.setMaxSerial(String.valueOf(maxSecNum)); |
| | | serialValueMapper.updateById(codeSerialValue); |
| | | }else{ |
| | | maxSecNum = maxSerial; |
| | | } |
| | | }else{ |
| | | //如果最大流水号不为空,说明无最好流水号,新增最大流水号 |
| | | CodeSerialValue codeSerialValue = new CodeSerialValue(); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeSerialValue, MdmBtmTypeConstant.CODE_SERIAL_VALUE); |
| | | codeSerialValue.setCodeRuleOid(codeRuleOid); |
| | | codeSerialValue.setSerialUnit(serialUnitString); |
| | | codeSerialValue.setCodeSecOid(codeBasicSec.getOid()); |
| | | codeSerialValue.setMaxSerial(String.valueOf(maxSecNum)); |
| | | serialValueMapper.insert(codeSerialValue); |
| | | } |
| | | return String.valueOf(maxSecNum); |
| | | } |
| | | } |