田源
2024-09-29 d8f51c40544ae278095e991ed00ec297842d4332
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -230,7 +230,7 @@
    * @return 执行结果
    * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常
    */
   @Override
    @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean addSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
      VciBaseUtil.alertNotNull(codeBasicSecDTO, "需要添加的数据对象",codeBasicSecDTO.getPkCodeRule(),"编码规则的主键");
@@ -272,7 +272,7 @@
      //引用码段的时候,需要判断参照的信息是否正确
      if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
         if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
            throw new VciBaseException("引用码段的时候,需要填写 参照配置的内容");
            throw new VciBaseException("引用码段的时候,需要填写参照配置的内容");
         }
         try{
            //JSONObject.parseObject(codeBasicSecDO.getReferConfig(), UIFormReferVO.class);
@@ -361,10 +361,10 @@
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean editSave(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
   public boolean editSave(CodeBasicSecDTO codeBasicSecDTO) throws ServerException {
      VciBaseUtil.alertNotNull(codeBasicSecDTO, "需要添加的数据对象");
      KeyValue attrKv = checkAttrNullableBySecType(codeBasicSecDTO);
      if (! "success".equals(attrKv.getKey())){
      if (!"success".equals(attrKv.getKey())){
         throw new VciBaseException(attrKv.getValue() + "不能为空");
      }
      //将DTO转换为DO
@@ -400,8 +400,7 @@
               codeReferConfigService.insert(codeReferConfigVO);
            }
         }
//         revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//此处的拷贝会把referValueInfo的值给覆盖掉,需要重新赋值
         // revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//此处的拷贝会把referValueInfo的值给覆盖掉,需要重新赋值
         BaseModel tempModel = new BaseModel();
         BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, tempModel);
         BeanUtil.copyProperties(codeBasicSecDTO, codeBasicSecDO,"referValueInfo");
@@ -411,6 +410,16 @@
         codeBasicSecDO.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", codeBasicSecDTO)));
         resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
         // 从分类码段或固定码段改为其他码段时,判断用户是否选择了清空码值
         if(codeBasicSecDTO.getIsClearValue()){
            // 分类码值清空
            if(codeBasicSecDTO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
               codeClassifyValueService.deleteClassifyValueBySecOid(codeBasicSecDTO.getOid());
            }else {
               //固定码值清空
               fixedValueService.deleteFixedValueBySecOid(codeBasicSecDTO.getOid());
            }
         }
         //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
         if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
            DictBiz dictBiz = new DictBiz();
@@ -588,6 +597,15 @@
      }
      List<CodeBasicSec> createList = new ArrayList<>();
      List<CodeBasicSec> basicSecDOS = codeBasicSecMapper.selectBatchIds(oidList);
      /* 需要注意的是克隆过来的码段需要对orderNum进行排序,否则会出现排序乱跳的情况
      实现方式是查询出该规则下根据orderNum排序后的最后一个码段   */
      LambdaQueryWrapper<CodeBasicSec> lastBasicWrapper = Wrappers.<CodeBasicSec>query()
         .lambda().orderByDesc(CodeBasicSec::getOrderNum)
         .eq(CodeBasicSec::getPkCodeRule,pkCodeRule)
         .last("limit 1");
      CodeBasicSec lastCodeBasicSec = codeBasicSecMapper.selectOne(lastBasicWrapper);
      // 排序号从这儿开始排
      int orderNum = Func.isEmpty(lastCodeBasicSec) || Func.isEmpty(lastCodeBasicSec.getOrderNum()) ? -1 : lastCodeBasicSec.getOrderNum();
      if(basicSecDOS.isEmpty()){
         return R.fail("克隆的码段信息不存在!");
      }
@@ -599,6 +617,8 @@
         String oldBasicOid = newSecDO.getOid();
         newSecDO.setId(newSecDO.getId());
         newSecDO.setName(newSecDO.getName());
         orderNum++;
         newSecDO.setOrderNum(orderNum);
         newSecDO.setPkCodeRule(pkCodeRule);
         // 判断是否是分类码段,业务逻辑稍微复杂一点所以需要先提出来单独处理
         if(newSecDO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
@@ -1004,7 +1024,8 @@
            wrapper = Wrappers.<CodeBasicSec>query().lambda()
               .eq(CodeBasicSec::getPkCodeRule,codeRuleVO.getOid())
               .eq(CodeBasicSec::getSerialDependFlag,"true")
               .orderByAsc(CodeBasicSec::getSerialDependOrder);
               .orderByAsc(CodeBasicSec::getOrderNum);
               //.orderByAsc(CodeBasicSec::getSerialDependOrder);
            List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
            if(!CollectionUtils.isEmpty(codeBasicSecList)){
               List<CodeBasicSecVO> codeBasicSecVOS = codeBasicSecDO2VOs(codeBasicSecList);
@@ -1048,7 +1069,8 @@
         .eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
         .in(CodeBasicSec::getOid,codeBasicSecOidList)
         .eq(CodeBasicSec::getSerialDependFlag,"true")
         .orderByAsc(CodeBasicSec::getSerialDependOrder);
         //TODO: SerialDependOrder本来是用来流水排序的,但是现在的逻辑是按照orderuNum排序的
         .orderByAsc(CodeBasicSec::getOrderNum); //.orderByAsc(CodeBasicSec::getSerialDependOrder);
      List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
      //按流水依赖顺序,处理流水依赖码段的值
@@ -1128,7 +1150,8 @@
         .eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
         .in(CodeBasicSec::getOid,codeBasicSecOidList)
         .eq(CodeBasicSec::getSerialDependFlag,"true")
         .orderByAsc(CodeBasicSec::getSerialDependOrder);
         .orderByAsc(CodeBasicSec::getOrderNum); //.orderByAsc(CodeBasicSec::getSerialDependOrder);
      List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
      //按流水依赖顺序,处理流水依赖码段的值
      List<String> serialDependValueList = new ArrayList<>();