bug列表:181(修复新增,修改,删除接口,新增时没设置默认值,导致在建分类时无法查询到,关键属性查重规则)183(历史数据导入模板下载,过滤掉模板中配置的默认属性)
已修改21个文件
384 ■■■■ 文件已修改
Source/UBCS-WEB/src/components/BatchImport/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Master/MasterTransfer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatController.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeKeyAttrRepeatService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/index.vue
@@ -182,7 +182,7 @@
          tipList: [
            "1.标题带五角星的表示关键属性,带星号表示必输项",
            "2.企业编码,集团码和状态都需要导入",
            "3.每次仅能最多导入10000条数据,如果出错会返回错误的数据和原因,但是正确的数据会保存",
            "3.每次仅能最多导入5000条数据(可通过nacos进行配置,推荐5000/次导入),如果出错会返回错误的数据和原因,但是正确数据可以继续保存",
            "4.分类的路径需要用#分隔。仅填写当前选的分类树上的下级分类的路径,如果当前分类已经是叶子节点,则不填写",
          ],
          action: "/api/ubcs-code/mdmEngineController/batchImportHistoryData",
@@ -290,12 +290,12 @@
    },
    onError(err) {
      this.pageLoading.close();
      console.log('onError')
      //console.log('onError')
    },
    uploadChange(file) {
      if (file.status === "success" || file.status === "error") {
        this.pageLoading.close();
        console.log('uploadChange')
        //console.log('uploadChange')
      }
    },
  },
Source/UBCS-WEB/src/components/Master/MasterTransfer.vue
@@ -112,7 +112,7 @@
    },
    value: {
      handler(newval, oldval) {
        console.log('value', newval)
        //console.log('value', newval)
      }
    }
  },
Source/UBCS-WEB/src/views/code/code.vue
@@ -2522,8 +2522,7 @@
                this.releadDisabled = false;
              });
            }
          })
          .catch((error) => {
          }).catch((error) => {
            this.releadDisabled = false;
          });
        this.releadDisabled = false;
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyDTO.java
@@ -69,6 +69,11 @@
     */
    private String codeResembleRuleOidName;
    /**
     * 是否参与校验,0:参与;1:不参与
     */
    private String isParticipateCheck;
    public boolean getAblechildren() {
        return ablechildren;
    }
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassify.java
@@ -89,6 +89,11 @@
    private String codeResembleRuleOid;
    /**
     * 是否参与校验,0:参与;1:不参与
     */
    private String isParticipateCheck;
    /**
     * 相似项查询规则名称
     */
    @Transient(referColumn = "codeResembleRuleOid.name")
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyVO.java
@@ -63,6 +63,11 @@
    private Integer dataLevel;
    /**
     * 是否参与校验,0:参与;1:不参与
     */
    private String isParticipateCheck;
    /**
     * 层级的路径
     */
    private String path;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -53,6 +53,7 @@
    private String firstV;
    private String creator;
    @DateTimeFormat(
        pattern = "yyyy-MM-dd HH:mm:ss"
    )
@@ -62,6 +63,7 @@
    private Date createTime;
    private String lastModifier;
    @DateTimeFormat(
        pattern = "yyyy-MM-dd HH:mm:ss"
    )
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
@@ -51,6 +51,7 @@
            baseModel.setLastR("1");
            baseModel.setLastV("1");
            baseModel.setRevisionSeq(1);
            // TODO:目前只有编码规则中有用到,后期需要去掉这段代码的话,就把他加在编码规则新增中去
            if(Func.isBlank(baseModel.getOwner())){
                // 设置所有者
                baseModel.setOwner(AuthUtil.getUserId().toString());
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/WebUtil.java
@@ -724,6 +724,7 @@
        }
        return listHasList;
    }
    /**
     * 是否默认的属性
     * @param fieldNames 属性的名字
@@ -736,6 +737,5 @@
        }
        return false;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java
@@ -48,38 +48,162 @@
     * 密级的字段
     */
    public static final String SECRET_FIELD = "secretgrade";
    /**
     * 创建者字段
     */
    public static final String CODE_CREATOR = "creator";
    /**
     * 更改者字段
     */
    public static final String CODE_EDITOR = "lastmodifier";
    /**
     * 修改时间
     */
    public static final String CODE_EDITOR_TIME = "lastmodifytime";
    /**
     * 版本规则
     */
    public static final String CODE_REVISION_RULE = "revisionrule";
    /**
     * 版本步长
     */
    public static final String CODE_REVISION_SEQ = "revisionseq";
    /**
     * 版本规则
     */
    public static final String CODE_VISION_RULE  = "versionrule";
    public static final String CODE_VISION_SEQ = "versionseq";
    public static final String CODE_VISION_VLUE = "versionvalue";
    public static final String CODE_LASTR = "lastr";
    public static final String CODE_FIRSTR = "firstr";
    public static final String CODE_LASTV = "lastv";
    public static final String CODE_FIRSTV = "firstv";
    /**
     * 版本规则oid
     */
    public static final String CODE_REVISION_OID = "revisionoid";
    /**
     * 租户
     */
    public static final String CODE_TENANTID = "tenantid";
    /**
     * nameoid
     */
    public static final String CODE_NAME_OID = "nameOid";
    /**
     * 业务类型名称
     */
    public static final String CODE_BTMNAME = "btmname";
    /**
     * 创建时间
     */
    public static final String CODE_CREATE_TIME = "createtime";
    /**
     * 时间戳
     */
    public static final String CODE_TS = "ts";
    /**
     * 所有者
     */
    public static final String CODE_OWNER = "owner";
    /**
     * 升版
     */
    public static final String CODE_COPYFORMVERSION = "copyfromversion";
    /**
     * 主键
     */
    public static final String CODE_OID = "oid";
    /**
     * 默认的属性列表
     */
    public static final List DEFAULT_ATTR_LIST = new ArrayList(){{
        add(CODE_FIELD);
        add(CODE_STATUS_FILED);
        add(CODE_GROUP_FIELD);
        add(CODE_CLASSIFY_OID_FIELD);
        add(CODE_STATUS_FILED);
        add(CODE_GROUP_FIELD);
        add(CODE_CLASSIFY_OID_FIELD);
        add(CODE_TEMPLATE_OID_FIELD);
        add(CODE_FULL_PATH_FILED);
        add(SECRET_FIELD);
        add(CODE_CREATOR);
        add(CODE_EDITOR);
        add(CODE_EDITOR_TIME);
        add(CODE_REVISION_RULE);
        add(CODE_REVISION_SEQ);
        add(CODE_REVISION_RULE);
        add(CODE_VISION_RULE);
        add(CODE_VISION_SEQ);
        add(CODE_LASTR);
        add(CODE_FIRSTR);
        add(CODE_LASTV);
        add(CODE_FIRSTV);
        add(CODE_REVISION_OID);
        add(CODE_TENANTID);
        add(CODE_NAME_OID);
        add(CODE_BTMNAME);
        add(CODE_CREATE_TIME);
        add(CODE_TS);
        add(CODE_OWNER);
        add(CODE_COPYFORMVERSION);
        add(CODE_OID);
        add(CODE_VISION_VLUE);
    }};
    /**
     * 默认的属性列表
     */
    public static final List DEFAULT_SYNC_ATTR_LIST = new ArrayList(){{
        add(CODE_FIELD);
        add(CODE_STATUS_FILED);
        add(CODE_GROUP_FIELD);
        add(CODE_CLASSIFY_OID_FIELD);
        add(CODE_TEMPLATE_OID_FIELD);
        add(CODE_FULL_PATH_FILED);
        add(CODE_EDITOR);
        add(CODE_CREATOR);
        add(CODE_FIELD);
        add(CODE_STATUS_FILED);
        add(CODE_GROUP_FIELD);
        add(CODE_CLASSIFY_OID_FIELD);
        add(CODE_TEMPLATE_OID_FIELD);
        add(CODE_FULL_PATH_FILED);
        add(SECRET_FIELD);
        add(CODE_CREATOR);
        add(CODE_EDITOR);
        add(CODE_EDITOR_TIME);
        add(CODE_REVISION_RULE);
        add(CODE_REVISION_SEQ);
        add(CODE_REVISION_RULE);
        add(CODE_VISION_RULE);
        add(CODE_VISION_SEQ);
        add(CODE_LASTR);
        add(CODE_FIRSTR);
        add(CODE_LASTV);
        add(CODE_FIRSTV);
        add(CODE_REVISION_OID);
        add(CODE_TENANTID);
        add(CODE_NAME_OID);
        add(CODE_BTMNAME);
        add(CODE_CREATE_TIME);
        add(CODE_TS);
        add(CODE_OWNER);
        add(CODE_COPYFORMVERSION);
        add(CODE_OID);
        add(CODE_VISION_VLUE);
    }};
    /**
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeKeyAttrRepeatController.java
@@ -49,7 +49,7 @@
@Api(value = "关键属性查重规则", tags = "关键属性查重规则接口")
public class CodeKeyAttrRepeatController extends BladeController {
    private final ICodeKeyAttrRepeatService plCodeKeyattrrepeatService;
    private final ICodeKeyAttrRepeatService codeKeyattrrepeatService;
    CodeKeyAttrRepeatMapper codeKeyattrrepeatMapper;
@@ -59,73 +59,47 @@
    @GetMapping("/detail")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "详情", notes = "传入plCodeKeyattrrepeat")
    public R<CodeKeyAttrRepeatVO> detail(CodeKeyAttrRepeat plCodeKeyattrrepeat) {
        CodeKeyAttrRepeat detail = codeKeyattrrepeatMapper.selectOne(Condition.getQueryWrapper(plCodeKeyattrrepeat));
    public R<CodeKeyAttrRepeatVO> detail(CodeKeyAttrRepeat codeKeyattrrepeat) {
        CodeKeyAttrRepeat detail = codeKeyattrrepeatMapper.selectOne(Condition.getQueryWrapper(codeKeyattrrepeat));
        return R.data(CodeKeyAttrRepeatWrapper.build().entityVO(detail));
    }
    /**
     * 关键属性查重规则 分页
     */
    @GetMapping("/list")
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "分页", notes = "传入plCodeKeyattrrepeat")
    public R<IPage<CodeKeyAttrRepeatVO>> list(CodeKeyAttrRepeat plCodeKeyattrrepeat, Query query) {
        IPage<CodeKeyAttrRepeat> pages = codeKeyattrrepeatMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(plCodeKeyattrrepeat));
    public R<IPage<CodeKeyAttrRepeatVO>> list(CodeKeyAttrRepeat codeKeyAttrRepeat, Query query) {
        IPage<CodeKeyAttrRepeat> pages = codeKeyattrrepeatMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeKeyAttrRepeat));
        return R.data(CodeKeyAttrRepeatWrapper.build().pageVO(pages));
    }
    /**
     * 关键属性查重规则 自定义分页
     */
    @GetMapping("/page")
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "分页", notes = "传入plCodeKeyattrrepeat")
    public R<IPage<CodeKeyAttrRepeatVO>> page(CodeKeyAttrRepeatVO plCodeKeyattrrepeat, Query query) {
        IPage<CodeKeyAttrRepeatVO> pages = plCodeKeyattrrepeatService.selectPlCodeKeyattrrepeatPage(Condition.getPage(query), plCodeKeyattrrepeat);
        return R.data(pages);
    }
    /**
     * 关键属性查重规则 新增
     */
    @PostMapping("/save")
    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "新增", notes = "传入plCodeKeyattrrepeat")
    public R save(@Valid @RequestBody CodeKeyAttrRepeat plCodeKeyattrrepeat) {
        return R.status(SqlHelper.retBool(codeKeyattrrepeatMapper.insert(plCodeKeyattrrepeat)));
    }
    /**
     * 关键属性查重规则 修改
     */
    @PostMapping("/update")
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "修改", notes = "传入plCodeKeyattrrepeat")
    public R update(@Valid @RequestBody CodeKeyAttrRepeat plCodeKeyattrrepeat) {
        return R.status(SqlHelper.retBool(codeKeyattrrepeatMapper.updateById(plCodeKeyattrrepeat)));
    }
    /**
     * 关键属性查重规则 新增或修改
     * @param codeKeyAttrRepeat
     * @return
     */
    @PostMapping("/submit")
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "新增或修改", notes = "传入plCodeKeyattrrepeat")
    public R submit(@Valid @RequestBody CodeKeyAttrRepeat plCodeKeyattrrepeat) {
        if(plCodeKeyattrrepeat.getOid() != null){
            return R.status(SqlHelper.retBool(codeKeyattrrepeatMapper.updateById(plCodeKeyattrrepeat)));
    @ApiOperation(value = "新增或修改", notes = "传入codeKeyattrrepeat")
    public R submit(@Valid @RequestBody CodeKeyAttrRepeat codeKeyAttrRepeat) {
        if(codeKeyAttrRepeat.getOid() != null){
            return R.status(codeKeyattrrepeatService.update(codeKeyAttrRepeat));
        }
        return R.status(SqlHelper.retBool(codeKeyattrrepeatMapper.insert(plCodeKeyattrrepeat)));
        return R.status(codeKeyattrrepeatService.addSave(codeKeyAttrRepeat));
    }
    /**
     * 关键属性查重规则 删除
     * @param ids
     * @return
     */
    @PostMapping("/remove")
    @ApiOperationSupport(order = 7)
    @ApiOperation(value = "逻辑删除", notes = "传入ids")
    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
        return R.status(SqlHelper.retBool(codeKeyattrrepeatMapper.deleteBatchIds(Func.toLongList(ids))));
        return R.status(codeKeyattrrepeatService.deleteByOids(ids));
    }
    /**
@@ -139,6 +113,5 @@
    public R listCodeKeyAttrRepeatRuleByOids(@ApiParam(value = "主键集合", required = true) @RequestParam String oids) {
        return R.data(codeKeyattrrepeatMapper.selectBatchIds(Func.toLongList(oids)));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -35,6 +35,7 @@
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;
import java.util.*;
@RestController
@@ -297,7 +298,6 @@
        return R.success("操作成功!");
    }
    /**
     * 申请编码保存
     * @param orderDTO 编码申请相关的信息,需要有属性和码段相关的信息
@@ -308,7 +308,6 @@
    public R addSaveCode(@RequestBody CodeOrderDTO orderDTO) throws Exception {
        return R.success(engineService.addSaveCode(orderDTO));
    }
    /**
     * 使用模板的主键获取表单的定义
@@ -390,7 +389,6 @@
        //TODO后续可以定义查询模板来查询
        return engineService.gridTableDataByClassifyOid(codeClassifyOid,templateOid,queryObject.getConditionMap(),queryObject.getPageHelper());
    }
    /***
     * 获取分类对象
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
@@ -90,8 +90,7 @@
     * @param oid 分类的主键
     * @return 数据集合
     */
    List<CodeClassify> selectAllLevelChildHasPath(@Param("oid") String oid,@Param("fieldInPath")String fieldInPath);
    List<CodeClassify> selectAllLevelChildHasPath(@Param("oid") String oid,@Param("fieldInPath")String fieldInPath,@Param("tenantId")String tenantId);
    @MapKey("OID")
    List<Map<String,Object>> selectAllLevelParentByOid(@Param("oid") String oid);
@@ -99,10 +98,8 @@
    @MapKey("OID")
    List<Map<String,Object>> selectAllLevelParents(@Param("oid") String oid);
    @MapKey("OID")
    List<Map<String,Object>> selectByFieldPath(@Param("fieldPath") String fieldPath);
    /**
     * 查根据id层级获取对象
@@ -114,7 +111,6 @@
    List<CodeClassify> selectByFieldNamePath(@Param("fieldPath") String fieldPath,@Param("fieldName") String fieldName);
    public List<CodeClassify> getIdPathToNamePathByParentId(@Param("parentId")String parentId);
    CodeClassify selectByIdRel(@Param("oid") String oid);
    /**
@@ -133,10 +129,12 @@
     * @return
     */
    List<CodeClassify> getRMLibByName(List<String> libNames,@Param("lcstatus")String lcstatus,@Param("tenantId") String tenantId);
    /***
     * 根据分类描述备注和库节点查询分类信息
     * @param desc
     * @param codeLibName
     * @param lcstatus
     * @param tenantId
     * @return
     */
    List<CodeClassify> getRMTypeByDesc(@Param("desc")String desc,@Param("lcstatus")String lcstatus,@Param("tenantId") String tenantId);
@@ -175,5 +173,5 @@
     * @param oid
     * @return
     */
    List<CodeClassify> selectAllClassifyByOid(@Param("oid") String oid,@Param("tenantId") String tenantId);
    List<CodeClassify> selectAllClassifyByOid(@Param("oid") String oid,@Param("fieldInPath")String fieldInPath,@Param("tenantId") String tenantId);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
@@ -291,8 +291,9 @@
    /**
     * 根据分类描述备注和库节点查询分类信息
     * @param oid
     * @param fieldInPath
     * @return
     */
    List<CodeClassifyVO> selectAllClassifyByOid(String oid);
    List<CodeClassifyVO> selectAllClassifyByOid(String oid, String fieldInPath);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeKeyAttrRepeatService.java
@@ -77,4 +77,26 @@
     * @return 关键数据查重规则显示对象
     */
    CodeKeyAttrRepeatRuleVO getObjectByOid(String oid);
    /**
     * 修改关键属性查重规则
     * @param codeKeyattrrepeat
     * @return
     */
    boolean addSave(CodeKeyAttrRepeat codeKeyattrrepeat);
    /**
     * 新增关键属性查重规则
     * @param codeKeyattrrepeat
     * @return
     */
    boolean update(CodeKeyAttrRepeat codeKeyattrrepeat);
    /**
     * 删除关键属性查重规则
     * @param oids
     * @return
     */
    boolean deleteByOids(String oids);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -639,12 +639,13 @@
     * @param oid
     * @return
     */
    public List<CodeClassifyVO> selectAllClassifyByOid(String oid){
        List<CodeClassify>  codeClassifyList=codeClassifyMapper.selectAllClassifyByOid(oid,AuthUtil.getTenantId());
    public List<CodeClassifyVO> selectAllClassifyByOid(String oid, String fieldInPath){
        List<CodeClassify>  codeClassifyList=codeClassifyMapper.selectAllClassifyByOid(oid,AuthUtil.getTenantId(),fieldInPath);
        List<CodeClassifyVO> voList = codeClassifyDO2VOs(codeClassifyList);
        return voList;
    }
    /***
     * 根据分类描述备注和库节点查询分类信息
     * @param desc
@@ -807,9 +808,8 @@
    @Override
    public List<CodeClassifyVO> listChildrenClassify(String codeClassifyOid, boolean allLevel, String fieldInPath, boolean enable) {
        if(allLevel){
            List<CodeClassify> classifyDOS = codeClassifyMapper.selectAllLevelChildHasPath(codeClassifyOid,fieldInPath);
            List<CodeClassify> classifyDOS = codeClassifyMapper.selectAllLevelChildHasPath(codeClassifyOid,fieldInPath,AuthUtil.getTenantId());
            if(!CollectionUtils.isEmpty(classifyDOS)){
                // 这儿用stream有点慢
                classifyDOS = classifyDOS.parallelStream().filter(s->FRAMEWORK_DATA_ENABLED.equalsIgnoreCase(s.getLcStatus())).collect(Collectors.toList());
            }
            return codeClassifyDO2VOs(classifyDOS);
@@ -928,7 +928,7 @@
        Map<String/**路径**/,String/**主键**/> oidPathMap = new HashMap<>();
        //我们需要查询所有已经存在的分类,主要是路径,用来判断分类的数据
        List<CodeClassify> existClassifyDOs = codeClassifyMapper.selectAllLevelChildHasPath("",null);
        List<CodeClassify> existClassifyDOs = codeClassifyMapper.selectAllLevelChildHasPath("",null,AuthUtil.getTenantId());
        Map<String/**路径**/, CodeClassify/**已经存在的数据**/> pathDOMap = Optional.ofNullable(existClassifyDOs).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> {
            String path = s.getPath();
            if(StringUtils.isNotBlank(path) && path.startsWith("#")){
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyAttrRepeatServiceImpl.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.code.service.impl;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.entity.CodeKeyAttrRepeat;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
@@ -26,16 +27,22 @@
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -50,12 +57,12 @@
@Service
public class CodeKeyAttrRepeatServiceImpl implements ICodeKeyAttrRepeatService {
    @Autowired
    CodeKeyAttrRepeatMapper codeKeyattrrepeatMapper;
    @Resource
    CodeKeyAttrRepeatMapper codeKeyAttrRepeatMapper;
    @Override
    public IPage<CodeKeyAttrRepeatVO> selectPlCodeKeyattrrepeatPage(IPage<CodeKeyAttrRepeatVO> page, CodeKeyAttrRepeatVO plCodeKeyattrrepeat) {
        return page.setRecords(codeKeyattrrepeatMapper.selectPlCodeKeyattrrepeatPage(page, plCodeKeyattrrepeat));
        return page.setRecords(codeKeyAttrRepeatMapper.selectPlCodeKeyattrrepeatPage(page, plCodeKeyattrrepeat));
    }
    /**
@@ -100,7 +107,7 @@
        if(!CollectionUtils.isEmpty(oidCollections)){
            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
            for(Collection<String> oids: oidCollectionsList){
                List<CodeKeyAttrRepeat> tempDOList =  codeKeyattrrepeatMapper.selectBatchIds(oids);
                List<CodeKeyAttrRepeat> tempDOList =  codeKeyAttrRepeatMapper.selectBatchIds(oids);
                if(!CollectionUtils.isEmpty(tempDOList)){
                    codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
                }
@@ -173,6 +180,58 @@
        BeanUtils.copyProperties(codeKeyAttrRepeatRuleVO,codeKeyattrrepeatVO);
        return codeKeyAttrRepeatRuleVO;
    }
    /**
     * 修改关键属性查重规则
     * @param codeKeyattrrepeat
     * @return
     */
    @Override
    public boolean addSave(CodeKeyAttrRepeat codeKeyattrrepeat) {
        // 设置默认值
        codeKeyattrrepeat.setCreator(AuthUtil.getUserAccount());
        codeKeyattrrepeat.setCreatetime(new Date());
        codeKeyattrrepeat.setLastmodifier(AuthUtil.getUserAccount());
        codeKeyattrrepeat.setLastmodifytime(new Date());
        codeKeyattrrepeat.setBtmname(MdmBtmTypeConstant.CODE_KEY_ATTR_REPEAT_RULE);
        codeKeyattrrepeat.setFirstr("1");
        codeKeyattrrepeat.setFirstv("1");
        codeKeyattrrepeat.setLastr("1");
        codeKeyattrrepeat.setLastv("1");
        codeKeyattrrepeat.setLcstatus("Enabled");
        codeKeyattrrepeat.setRevisionseq(1);
        codeKeyattrrepeat.setRevisionoid(VciBaseUtil.getPk());
        codeKeyattrrepeat.setRevisionvalue("1");
        codeKeyattrrepeat.setRevisionrule("1");
        codeKeyattrrepeat.setVersionseq(1);
        codeKeyattrrepeat.setVersionrule("0");
        codeKeyattrrepeat.setVersionvalue("1");
        return SqlHelper.retBool(codeKeyAttrRepeatMapper.insert(codeKeyattrrepeat));
    }
    /**
     * 新增关键属性查重规则
     * @param codeKeyattrrepeat
     * @return
     */
    @Override
    public boolean update(CodeKeyAttrRepeat codeKeyattrrepeat) {
        // 设置默认值
        codeKeyattrrepeat.setLastmodifier(AuthUtil.getUserAccount());
        codeKeyattrrepeat.setLastmodifytime(new Date());
        return SqlHelper.retBool(codeKeyAttrRepeatMapper.updateById(codeKeyattrrepeat));
    }
    /**
     * 删除关键属性查重规则
     * @param oids
     * @return
     */
    @Override
    public boolean deleteByOids(String oids) {
        return SqlHelper.retBool(codeKeyAttrRepeatMapper.deleteById(oids));
    }
    /**
     * 主键查询数据对象
     * @param oid 主键
@@ -182,11 +241,12 @@
    private CodeKeyAttrRepeat selectByOid(String oid) {
        VciBaseUtil.alertNotNull(oid,"主键");
        CodeKeyAttrRepeat codeKeyAttrRepeatRuleDO = codeKeyattrrepeatMapper.selectById(oid.trim());
        CodeKeyAttrRepeat codeKeyAttrRepeatRuleDO = codeKeyAttrRepeatMapper.selectById(oid.trim());
//            .selectByPrimaryKey(oid.trim());
        if(codeKeyAttrRepeatRuleDO == null || StringUtils.isBlank(codeKeyAttrRepeatRuleDO.getOid())){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
        return codeKeyAttrRepeatRuleDO;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -995,7 +995,6 @@
        }
    }
    /**
     * 初始化业务类型
     * --创建人默认为当前用户,如果需要修改,可以在获取后自行处理
@@ -2774,6 +2773,7 @@
        cbo.setName(orderDTO.getName());
        //数据的时候,编码是不变的
        cbo.setCreateTime(cbo.getCreateTime());
        cbo.setCreator(cbo.getCreator());
        cbo.setLastModifyTime(cbo.getLastModifyTime());
        cbo.setTenantId(AuthUtil.getTenantId());
        oldCbo.setLastV("0");
@@ -4188,7 +4188,7 @@
        toBo.setLastV(String.valueOf(1));
        // 数据升版不需要重新设置创建人,只对最后修改人做更新就可以了
        //toBo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setCreateTime(new Date());
        toBo.setCreateTime(fromBo.getCreateTime());
        // toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getAccount()));
        toBo.setLastModifyTime(new Date());
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -942,7 +942,7 @@
            if (CollectionUtils.isEmpty(ruleOidMap.values())) {
                throw new VciBaseException("导入的数据所选择的分类都没有设置编码规则");
            }
            // TODO: 改用oid查询规则的,别用id
            // TODO: 该用oid查询规则的,别用id
            Map<String, CodeRuleVO> ruleVOMap = ruleService.listCodeRuleByOids(ruleOidMap.values()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
            //校验编码规则和码段是否正确
            Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>();
@@ -1538,7 +1538,6 @@
                total += commonsMapper.queryCountBySql(countSql);
            }
        }else{
            total = commonsMapper.queryCountBySql(countSql);
        }
        List<String> selectFieldList = new ArrayList<>();
@@ -1966,7 +1965,6 @@
        //都转换完了。需要批量检查
        //如果出错了,我们依然执行有效的数据,无效的数据写回到excel中
        Map<String,String> errorKeyMap=new HashMap<>();
        //1.分类注入
@@ -3149,6 +3147,7 @@
        });
    }
    /**
     * excel转换为cbo的对象
     * @param classifyFullInfo 分类的全部信息
@@ -3166,7 +3165,7 @@
            ClientBusinessObject cbo=new ClientBusinessObject();
            DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId());
            rowData.getData().forEach((index,value)->{
                String field = fieldIndexMap.get(index);
                    String field = fieldIndexMap.get(index);
                if (StringUtils.isBlank(field)) {
                    throw new VciBaseException("第" + (index + 1) + "列的标题在系统中不存在");
                }
@@ -3523,6 +3522,7 @@
            });
        }
    }
    /***
     * 校验分类对应的模板信息
     * @param titleRowData
@@ -3606,6 +3606,7 @@
        }
        return codeClassifyTemplateVOList ;
    }
    /**
     * 从属性上获取参照的内容
     * @param attrVO 属性的信息
@@ -3874,7 +3875,7 @@
            if(StringUtils.isBlank(classifyPath)){
                classifyPath = "#current#";
            }
            if ( !pathMap.containsKey(classifyPath)) {
            if (!pathMap.containsKey(classifyPath)) {
                String row_index = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                errorMap.put(row_index,errorMap.getOrDefault(row_index,"") + ";分类路径不存在");
            } else {
@@ -4054,6 +4055,7 @@
            }
        }
    }
    private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){
        List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
        oldDataMap.stream().forEach(dataMap->{
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -1381,7 +1381,7 @@
                    TreeQueryObject treeQueryObject=new TreeQueryObject();
                    treeQueryObject.setParentOid(oid);
                    treeQueryObject.setQueryAllLevel(true);
                    dataCodeClassifyVOList=classifyService.selectAllClassifyByOid(oid);//.selectCodeClassifyDOByTree(treeQueryObject);
                    dataCodeClassifyVOList=classifyService.selectAllClassifyByOid(oid,"oid");//.selectCodeClassifyDOByTree(treeQueryObject);
                    //dataCodeClassifyVOList.add(CodeClassifyWrapper.build().entityVO(currentCodeClassify[0]));
                    Map<String, CodeClassifyVO> oidCodeclassifyDOMap = dataCodeClassifyVOList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -111,6 +111,7 @@
        order by lastmodifytime asc
    </select>
    <!--codeclassify0.parentCodeClassifyOid = '${oid}'-->
    <select id="selectAllLevelChildHasPath" resultMap="plCodeClassifyResultMap">
        select codeclassify0.OWNER as owner,
               codeclassify0.BTMTYPEID as btmtypeid,
@@ -155,10 +156,13 @@
                           on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid
            START WITH
            <if test="oid != null ">
                codeclassify0.parentCodeClassifyOid = '${oid}'
                codeclassify0.parentCodeClassifyOid = #{oid}
            </if>
            <if test="oid == null ">
                codeclassify0.parentCodeClassifyOid is null
            </if>
            <if test="tenantId != null and tenantId != ''">
                and  codeclassify0.tenant_id = #{tenantId}
            </if>
        CONNECT BY PRIOR codeclassify0.OID = codeclassify0.parentCodeClassifyOid
    </select>
@@ -461,9 +465,10 @@
        </if>
        order by id asc
    </select>
    <!--获取所有下级节点,不要动这个方法sql-->
    <select id="selectAllClassifyByOid" resultMap="plCodeClassifyResultMap">
        select codeclassify0.OWNER                 as owner,
        select codeclassify0.OWNER          as owner,
        codeclassify0.BTMTYPEID             as btmtypeid,
        codeclassify0.CREATOR               as creator,
        codeclassify0.CREATETIME            as createtime,