ludc
2023-07-24 e11deb9e6fb08fa526175b3057e03f0e6ee40e18
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -70,6 +70,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import javax.annotation.Resource;
import java.beans.BeanInfo;
@@ -358,8 +359,6 @@
        if (baseModels.size() == 0) {
            throw new VciBaseException("未查询到相关数据。");
        }
        // 待完善
        List<BtmTypeVO> cboList = null;  // btmTypeClient.selectList(wrapper);
        //还需要修改allCode的生命周期
//      Map<String, String> conditionMap = new HashMap<>();
        QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
@@ -375,19 +374,19 @@
            if (!listR.isSuccess() || listR.getData().size() == 0) {
                throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
            }
            commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
         // 直接删除,不给状态
         commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
         // commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue());
        } else {
            for (BaseModel baseModel : baseModels) {
                baseModel.setLcStatus(baseModelDTO.getLcStatus());
            }
            updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels);
            // lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
        }
        for (CodeAllCode codeCbo : codeCbos) {
            codeCbo.setLcStatus(baseModelDTO.getLcStatus());
        }
        codeAllCodeService.updateBatchById(codeCbos);
        // lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
    }
    /**
@@ -400,7 +399,6 @@
    public String addSaveCode(CodeOrderDTO orderDTO) throws Exception {
        VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性和码段的内容都为空", orderDTO.getCodeClassifyOid(), "主题库分类的主键",
                orderDTO.getTemplateOid(), "模板的主键", orderDTO.getCodeRuleOid(), "编码规则的主键");
      VciSystemVarConstants.getSystemVarValueMap();
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
        CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
@@ -918,7 +916,7 @@
//                  baseModels.stream().forEach(model-> {
                        try {
                            map = VciBaseUtil.convertBean2Map(cbo);
                            map = VciBaseUtil.convertBean2Map(cbo,null);
                        } catch (Exception e) {
                            throw new VciBaseException("类型转换错误:" + e.getMessage());
                        }
@@ -944,6 +942,26 @@
            }
        }
    }
   /**
    * 封装开关的内容,常用于导出
    * @param dataMap 数据的内容
    * @param templateVO 模板的显示
    */
   @Override
   public void wrapperBoolean(List<Map<String, String>> dataMap, CodeClassifyTemplateVO templateVO){
      List<String> booleanAttributes = templateVO.getAttributes().stream().filter(s -> VciFieldTypeEnum.VTBoolean.name().equalsIgnoreCase(s.getAttributeDataType())).map(s -> s.getId().toLowerCase(Locale.ROOT)).collect(Collectors.toList());
      if(!CollectionUtils.isEmpty(booleanAttributes)){
         dataMap.stream().forEach(data -> {
            booleanAttributes.stream().forEach(attrId->{
               if(data.containsKey(attrId)){
                  String value = data.get(attrId);
                  data.put(attrId,BooleanEnum.TRUE.getValue().equalsIgnoreCase(value)?"是":"否");
               }
            });
         });
      }
   }
    @Override
    public MdmUIInfoVO getFormDefineByTemplateOid(String templateOid, String codeClassifyOid) {
@@ -973,13 +991,16 @@
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
        List<UIFormItemVO> itemVOS = new ArrayList<>();
        Map<String, List<CodeClassifyTemplateAttrVO>> attrGroupMap = templateVO.getAttributes().stream().
                filter(s -> StringUtils.isNotBlank(s.getAttributeGroup())).collect(Collectors.groupingBy(s -> s.getAttributeGroup()));
        templateVO.getAttributes().forEach(attrVO -> {
            UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId());
            itemVOS.add(formItemVO);
        });
      Map<String, List<CodeClassifyTemplateAttrVO>> attrGroupMap = new HashMap<>();
      if (Func.isNotEmpty(templateVO.getAttributes())) {
         attrGroupMap = templateVO.getAttributes().stream().
            filter(s -> StringUtils.isNotBlank(s.getAttributeGroup())).collect(Collectors.groupingBy(s -> s.getAttributeGroup()));
         templateVO.getAttributes().forEach(attrVO -> {
            UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId());
            itemVOS.add(formItemVO);
         });
      }
        //处理属性分组
        if (!CollectionUtils.isEmpty(attrGroupMap)) {
            //按照分组的属性排列,找到每一个分组的第一个属性
@@ -1395,7 +1416,7 @@
            maps.stream().forEach(map -> {
                Map<String, String> data = new HashMap<>();
                for (String s : map.keySet()) {
                    data.put(s.toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
                    data.put(s.toLowerCase(Locale.ROOT), map.get(s)==null?null:String.valueOf(map.get(s)));
                }
//            map.forEach((key, value) -> {
//               data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
@@ -1450,26 +1471,32 @@
        }
        //先转换一下时间格式
        List<String> finalOnlySelectAttrIdList = onlySelectAttrIdList.stream().collect(Collectors.toList());
        List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = templateVO.getAttributes().stream().filter(
                s -> StringUtils.isNotBlank(s.getCodeDateFormat()) &&
                        (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
        ).collect(Collectors.toList());
        //枚举的内容
        List<CodeClassifyTemplateAttrVO> enumAttrVOs = templateVO.getAttributes().stream().filter(
                s -> (StringUtils.isNotBlank(s.getEnumId()) || StringUtils.isNotBlank(s.getEnumString()))
                        &&
                        (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
        ).collect(Collectors.toList());
      List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = new ArrayList<>();
      List<CodeClassifyTemplateAttrVO> enumAttrVOs = new ArrayList<>();
      if (Func.isNotEmpty(templateVO.getAttributes())) {
         dateFormatAttrVOs = templateVO.getAttributes().stream().filter(
            s -> StringUtils.isNotBlank(s.getCodeDateFormat()) &&
               (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
         ).collect(Collectors.toList());
         //枚举的内容
         enumAttrVOs = templateVO.getAttributes().stream().filter(
            s -> (StringUtils.isNotBlank(s.getEnumId()) || StringUtils.isNotBlank(s.getEnumString()))
               &&
               (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT)))
         ).collect(Collectors.toList());
      }
        List<String> userIds = new ArrayList<>();
        dataMap.stream().forEach(data -> {
      List<CodeClassifyTemplateAttrVO> finalDateFormatAttrVOs = dateFormatAttrVOs;
      List<CodeClassifyTemplateAttrVO> finalEnumAttrVOs = enumAttrVOs;
      dataMap.stream().forEach(data -> {
            //处理时间
            if (!form) {
                //表单的时候只能用统一的时间格式
                wrapperDateFormat(dateFormatAttrVOs, data);
                wrapperDateFormat(finalDateFormatAttrVOs, data);
            }
            //处理枚举
            wrapperEnum(enumAttrVOs, data);
            wrapperEnum(finalEnumAttrVOs, data);
            String lcstatus = data.get(VciQueryWrapperForDO.LC_STATUS_FIELD);
            String copyFromVersion = data.getOrDefault(COPY_FROM_VERSION, "");
            if ((CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus) || CodeDefaultLC.AUDITING.getValue().equalsIgnoreCase(lcstatus))
@@ -1584,17 +1611,25 @@
        //因为参照不一定是在平台的属性池里面设置,所以我们得需要自行处理
        //参考VciQueryWrapper来处理
        //1. 找到所有的字段,
        Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        List<String> selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList());
      Map<String, CodeClassifyTemplateAttrVO> attrVOMap = new HashMap<>();
      List<String> selectFieldList = new ArrayList<>();
      if(Func.isNotEmpty(templateVO.getAttributes())){
         attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
         selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList());
      }
        //所有的参照的字段
        Map<String/**属性字段**/, String> joinTableList = new ConcurrentHashMap<>();
        List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter(
                s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig())
        ).collect(Collectors.toList());
      List<CodeClassifyTemplateAttrVO> referAttrVOs = null;
      if (Func.isNotEmpty(templateVO.getAttributes())) {
         referAttrVOs = templateVO.getAttributes().stream().filter(
            s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig())
         ).collect(Collectors.toList());
      }
        Map<String/**参照的属性**/, String/**实际的字段**/> referFieldMap = new ConcurrentHashMap<>();
        if (!CollectionUtils.isEmpty(referAttrVOs)) {
            referAttrVOs.parallelStream().forEach(attrVO -> {
         List<String> finalSelectFieldList = selectFieldList;
         referAttrVOs.parallelStream().forEach(attrVO -> {
                UIFormReferVO referVO = null;
                if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
                    referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class);
@@ -1624,7 +1659,7 @@
                    showFieldInSource = textFields.get(0);
                }
                referFieldMap.put(attrVO.getId(), referTableNick + "." + showFieldInSource);
                selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
                finalSelectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
            });
        }
        R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getDefaultAttrByBtmId(btmType);
@@ -1668,11 +1703,12 @@
                }
            });
            andCondtionMap.forEach((k, v) -> {
                andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap, btmType));
         Map<String, CodeClassifyTemplateAttrVO> finalAttrVOMap = attrVOMap;
         andCondtionMap.forEach((k, v) -> {
                andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, finalAttrVOMap, btmType));
            });
            orConditionMap.forEach((k, v) -> {
                orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap, btmType));
                orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, finalAttrVOMap, btmType));
            });
        }
        //组合起来
@@ -1987,7 +2023,7 @@
        }
        R<BtmTypeVO> r = btmTypeClient.getDefaultAttrByBtmId(btmType);
        List<BtmTypeAttributeVO> attributes = r.getData().getAttributes();
        if (r.getCode() != 200 || attributes.isEmpty()) {
        if (!r.isSuccess() || attributes.isEmpty()) {
            return false;
        }
        return attributes.stream().anyMatch(item -> item.getId().equals(selectKey));
@@ -2913,38 +2949,43 @@
        List<UITableFieldVO> fieldVOList = new ArrayList<>();
        Map<String, String> comboxOrReferFieldMap = new HashMap<>();
        templateVO.getAttributes().forEach(attrVO -> {
            UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO, forEdit);
            if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) {
                comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
            }
            if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) {
                comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
            }
            if (StringUtils.isNotBlank(tableFieldVO.getEdit())) {
                tableDefineVO.setHasEditor(true);
            }
            fieldVOList.add(tableFieldVO);
        });
      if (Func.isNotEmpty(templateVO.getAttributes())) {
         templateVO.getAttributes().forEach(attrVO -> {
            UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO, forEdit);
            if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) {
               comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
            }
            if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) {
               comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField());
            }
            if (StringUtils.isNotBlank(tableFieldVO.getEdit())) {
               tableDefineVO.setHasEditor(true);
            }
            fieldVOList.add(tableFieldVO);
         });
      }
        List<List<UITableFieldVO>> cols = new ArrayList<>();
        cols.add(fieldVOList);
        tableDefineVO.setCols(cols);
        Map<String, UITableFieldVO> fieldVOMap = fieldVOList.stream().collect(Collectors.toMap(s -> s.getField().toLowerCase(Locale.ROOT), t -> t));
        //查询属性
        List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryAttrFlag())).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(queryAttrVOs)) {
            List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
            queryAttrVOs.stream().forEach(attrVO -> {
                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
                attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT);
                if (fieldVOMap.containsKey(attrId)) {
                    queryFieldVOs.add(fieldVOMap.get(attrId));
                }
            });
            tableDefineVO.setQueryColumns(queryFieldVOs);
        }
        //高级属性
        List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorQueryAttrFlag())).collect(Collectors.toList());
      List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = null;
      if (Func.isNotEmpty(templateVO.getAttributes())) {
         //查询属性
         List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryAttrFlag())).collect(Collectors.toList());
         if (!CollectionUtils.isEmpty(queryAttrVOs)) {
            List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
            queryAttrVOs.stream().forEach(attrVO -> {
               String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
               attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT);
               if (fieldVOMap.containsKey(attrId)) {
                  queryFieldVOs.add(fieldVOMap.get(attrId));
               }
            });
            tableDefineVO.setQueryColumns(queryFieldVOs);
         }
         //高级属性
         seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorQueryAttrFlag())).collect(Collectors.toList());
      }
        if (!CollectionUtils.isEmpty(seniorQueryAttrVOs)) {
            List<UITableFieldVO> queryFieldVOs = new ArrayList<>();
            seniorQueryAttrVOs.stream().forEach(attrVO -> {
@@ -3231,11 +3272,19 @@
        if (!listR.isSuccess() || listR.getData().size() == 0) {
            throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
        }
        //将bean转为map,mybatis统一处理
      //获取当前业务类型所有字段用来做对比
      R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(btmType);
      if (!allAttributeByBtmId.isSuccess() || allAttributeByBtmId.getData().getAttributes().size() == 0) {
         throw new VciBaseException("传入业务类型未查询到相应字段信息,请检查!");
      }
      Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> {
         return btmTypeAttributeVO.getId();
      }).collect(Collectors.toSet());
      //将bean转为map,mybatis统一处理
        List<Map<String, String>> maps = new ArrayList<>();
        baseModels.stream().forEach(model -> {
            try {
                maps.add(VciBaseUtil.convertBean2Map(model));
                maps.add(VciBaseUtil.convertBean2Map(model,existFild));
            } catch (Exception e) {
                throw new VciBaseException("类型转换错误:" + e.toString());
            }
@@ -3386,12 +3435,20 @@
        if (!listR.isSuccess() || listR.getData().size() == 0) {
            throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
        }
      //获取当前业务类型所有字段用来做对比
      R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(btmType);
      if (!allAttributeByBtmId.isSuccess() || allAttributeByBtmId.getData().getAttributes().size() == 0) {
         throw new VciBaseException("传入业务类型未查询到相应字段信息,请检查!");
      }
      Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> {
         return btmTypeAttributeVO.getId();
      }).collect(Collectors.toSet());
        //将bean转为map,mybatis统一处理
        List<Map<String, String>> maps = new ArrayList<>();
        baseModels.stream().forEach(model -> {
            try {
                maps.add(VciBaseUtil.convertBean2Map(model));
                maps.add(VciBaseUtil.convertBean2Map(model,existFild));
            } catch (Exception e) {
                throw new VciBaseException("类型转换错误:" + e.getMessage());
            }
@@ -3417,7 +3474,7 @@
        //checkReferConfig(referConfigVO);
        //使用业务类型查询
        R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getAllAttributeByBtmId(referConfigVO.getReferType());
        if (allAttributeByBtmId.getCode() != 200) {
        if (!allAttributeByBtmId.isSuccess()) {
            throw new ServiceException("业务类型feign接口调用错误!");
        }
        if (Func.isEmpty(allAttributeByBtmId.getData())) {
@@ -3439,7 +3496,7 @@
        }
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referConfigVO.getReferType()));
        if (listR.getCode() != 200) {
        if (!listR.isSuccess()) {
            throw new ServiceException(Func.isNotBlank(listR.getMsg()) ? listR.getMsg() : "业务类型feign接口调用错误!");
        }
        if (listR.getData().isEmpty()) {