ludc
2023-10-12 78c9c5d00e0b28177e2a40e1058773d6a1abef00
Merge remote-tracking branch 'origin/master'
已修改16个文件
已添加1个文件
487 ■■■■■ 文件已修改
Source/UBCS-WEB/src/option/system/dict.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/option/system/dictbiz.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/authority/apiscope.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/authority/datascope.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/authority/role.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/PasswordManagement/passwords.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/client.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/dept.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/menu.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/post.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/tenant.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/topmenu.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/user.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/option/system/dict.js
@@ -2,6 +2,7 @@
  height: 'auto',
  calcHeight: 20,
  tip: false,
  columnBtn:false,
  searchShow: true,
  searchMenuSpan: 10,
  border: true,
Source/UBCS-WEB/src/option/system/dictbiz.js
@@ -1,6 +1,7 @@
export const optionParent = {
  height: 'auto',
  calcHeight: 30,
  columnBtn:false,
  tip: false,
  searchShow: true,
  searchMenuSpan: 10,
Source/UBCS-WEB/src/views/authority/apiscope.vue
@@ -114,6 +114,7 @@
        menu: true,
        option: {
          lazy: true,
          columnBtn:false,
          tip: false,
          //simplePage: true,
          searchShow: true,
Source/UBCS-WEB/src/views/authority/datascope.vue
@@ -118,6 +118,7 @@
        watchMode: true,
        option: {
          lazy: true,
          columnBtn:false,
          tip: false,
          // simplePage: true,
          searchShow: true,
Source/UBCS-WEB/src/views/authority/role.vue
@@ -38,7 +38,7 @@
    <el-dialog title="角色权限配置"
      append-to-body
      :visible.sync="box"
      width="350px"
      width="350px"
      style="height: 115vh; margin-top: -13vh; overflow: hidden">
      <el-tabs type="border-card" style="overflow-y: auto; height: 72vh">
        <el-tab-pane label="菜单权限">
@@ -113,6 +113,7 @@
        option: {
          height: "auto",
          tip: false,
          columnBtn:false,
          // simplePage: true,
          searchShow: true,
          searchMenuSpan: 6,
Source/UBCS-WEB/src/views/system/PasswordManagement/passwords.vue
@@ -128,6 +128,7 @@
      option: {
        headerAlign: 'center',
        align: 'center',
        columnBtn:false,
        border: true,
        index: true,
        rowKey:'id',
Source/UBCS-WEB/src/views/system/client.vue
@@ -50,6 +50,7 @@
        selectionList: [],
        option: {
          height: 'auto',
          columnBtn:false,
          calcHeight: 30,
          tip: false,
          searchShow: true,
Source/UBCS-WEB/src/views/system/dept.vue
@@ -78,6 +78,7 @@
          tip: false,
          height:'auto',
          maxHeight:600,
          columnBtn:false,
          // simplePage: true,
          searchShow: true,
          searchMenuSpan: 6,
Source/UBCS-WEB/src/views/system/menu.vue
@@ -107,6 +107,7 @@
        option: {
          height: "auto",
          lazy: true,
          columnBtn:false,
          tip: false,
          simplePage: true,
          searchShow: true,
Source/UBCS-WEB/src/views/system/post.vue
@@ -55,6 +55,7 @@
        selectionList: [],
        option: {
          height: 'auto',
          columnBtn:false,
          calcHeight: 30,
          tip: false,
          searchShow: true,
Source/UBCS-WEB/src/views/system/tenant.vue
@@ -227,6 +227,7 @@
    option(){
      return{
          height: 'auto',
          columnBtn:false,
          calcHeight: 30,
          tip: false,
          searchShow: true,
Source/UBCS-WEB/src/views/system/topmenu.vue
@@ -93,6 +93,7 @@
        option: {
          height: 'auto',
          calcHeight: 30,
          columnBtn:false,
          tip: false,
          searchShow: true,
          searchMenuSpan: 6,
Source/UBCS-WEB/src/views/system/user.vue
@@ -278,6 +278,7 @@
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        columnBtn:false,
        border: true,
        index: true,
        selection: true,
@@ -548,12 +549,7 @@
                props: {
                  label: "postName",
                  value: "id"
                },
                rules: [{
                  required: true,
                  message: "请选择所属岗位",
                  trigger: "click"
                }],
                }
              },
            ]
          },
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeResembleRuleController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.vci.ubcs.code.controller;
import com.vci.ubcs.code.dto.CodeResembleRuleDTO;
import com.vci.ubcs.code.service.ICodeResembleRuleService;
import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Collection;
/**
 * ç›¸ä¼¼æŸ¥è¯¢è§„则控制器
 *
 * @author weidy
 * @date 2022-04-10
 */
@RestController
@RequestMapping("/resembleRuleController")
public class CodeResembleRuleController {
    /**
     * ç›¸ä¼¼æŸ¥è¯¢è§„则 æœåŠ¡
     */
    @Resource
    private ICodeResembleRuleService codeResembleRuleService;
    /**
     * ç›¸ä¼¼æŸ¥è¯¢è§„则列表
     * @param baseQueryObject åŸºç¡€æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象列表
     */
    @GetMapping("/gridCodeResembleRule")
    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(BaseQueryObject baseQueryObject){
        if(baseQueryObject == null){
            baseQueryObject = new BaseQueryObject();
        }
        return codeResembleRuleService.gridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
    /**
     * å¢žåŠ  ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象
     * @return æ‰§è¡Œç»“果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象
     */
    @PostMapping( "/addSave")
    public R<CodeResembleRuleVO> addSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.addSave(codeResembleRuleDTO);
        return R.data(codeResembleRuleVO);
    }
    /**
     * ä¿®æ”¹ ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象
     * @return æ‰§è¡Œç»“果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象
     */
    @PutMapping("/editSave")
    public R<CodeResembleRuleVO> editSave(@RequestBody CodeResembleRuleDTO codeResembleRuleDTO){
        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.editSave(codeResembleRuleDTO);
        return R.data(codeResembleRuleVO);
    }
    /**
     * åˆ é™¤ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     */
    @DeleteMapping( "/deleteData")
    public R delCodeResembleRule( CodeResembleRuleDTO codeResembleRuleDTO) {
        return codeResembleRuleService.deleteCodeResembleRule(codeResembleRuleDTO);
    }
    /**
     * ä¸»é”®èŽ·å–ç›¸ä¼¼æŸ¥è¯¢è§„åˆ™
     * @param oid ä¸»é”®
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象
     */
    @GetMapping("/getObjectByOid")
    public R<CodeResembleRuleVO> getObjectByOid(String oid){
        CodeResembleRuleVO codeResembleRuleVO = codeResembleRuleService.getObjectByOid(oid);
        return R.data(codeResembleRuleVO);
    }
    /**
     * ä¸»é”®æ‰¹é‡èŽ·å–ç›¸ä¼¼æŸ¥è¯¢è§„åˆ™
     * @param oids ä¸»é”®ï¼Œå¤šä¸ªä»¥é€—号分隔,但是受性能影响,建议一次查询不超过10000个
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象
     */
    @GetMapping("/listDataByOids")
    public R<CodeResembleRuleVO> listCodeResembleRuleByOids(String oids){
        Collection<CodeResembleRuleVO> voCollection =  codeResembleRuleService.listCodeResembleRuleByOids(VciBaseUtil.str2List(oids));
        R baseResult = R.success("查询成功!");
        baseResult.setData(voCollection);
        return  baseResult;
    }
    /**
     * å‚照相似查询规则列表
     * @param baseQueryObject åŸºç¡€æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象列表,生效的内容
     */
    @GetMapping("/refDataGrid")
    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(BaseQueryObject baseQueryObject){
        if(baseQueryObject == null){
            baseQueryObject = new BaseQueryObject();
        }
        return codeResembleRuleService.refDataGridCodeResembleRule(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeResembleRuleService.java
@@ -1,10 +1,18 @@
package com.vci.ubcs.code.service;
import com.github.yulichang.base.MPJBaseService;
import com.vci.ubcs.code.dto.CodeResembleRuleDTO;
import com.vci.ubcs.code.entity.CodeReferConfig;
import com.vci.ubcs.code.entity.CodeResembleRule;
import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import org.springblade.core.tool.api.R;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public interface ICodeResembleRuleService  extends MPJBaseService<CodeResembleRule>  {
    CodeResembleRuleVO getObjectByOid(String codeResembleRuleOid);
@@ -17,4 +25,67 @@
     */
    CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRule codeResembleRuleDO) throws VciBaseException;
    }
    /**
     * æŸ¥è¯¢æ‰€æœ‰çš„相似查询规则
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException æŸ¥è¯¢æ¡ä»¶å’Œåˆ†é¡µå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * æ‰¹é‡æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
     * @param codeResembleRuleDOs æ•°æ®å¯¹è±¡åˆ—表
     * @return æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å‚数为空或者不存在的时候会抛出异常
     */
    List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRule> codeResembleRuleDOs) throws VciBaseException;
    /**
     * å¢žåŠ ç›¸ä¼¼æŸ¥è¯¢è§„åˆ™
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
    /**
     * ä¿®æ”¹ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
    /**
     * åˆ é™¤ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     * @throws VciBaseException å‚数为空,被引用时抛出异常
     */
    R deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException;
    /**
     * ä¸»é”®æ‰¹é‡èŽ·å–ç›¸ä¼¼æŸ¥è¯¢è§„åˆ™
     * @param oidCollections ä¸»é”®é›†åˆï¼Œä½†æ˜¯å—性能影响,建议一次查询不超过10000个
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象
     * @throws VciBaseException æŸ¥è¯¢å‡ºçŽ°å¼‚å¸¸æ—¶ä¼šæŠ›å‡º
     */
    Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException;
    /**
     * å‚照相似查询规则列表
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象列表,生效的内容
     * @throws VciBaseException æŸ¥è¯¢æ¡ä»¶å’Œåˆ†é¡µå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeResembleRuleServiceImpl.java
@@ -1,6 +1,10 @@
package com.vci.ubcs.code.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.vci.ubcs.code.dto.CodeResembleRuleDTO;
import com.vci.ubcs.code.entity.CodeReferConfig;
import com.vci.ubcs.code.entity.CodeResembleRule;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
@@ -8,13 +12,27 @@
import com.vci.ubcs.code.mapper.CodeResembleRuleMapper;
import com.vci.ubcs.code.service.ICodeResembleRuleService;
import com.vci.ubcs.code.vo.pagemodel.CodeResembleRuleVO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.starter.exception.VciBaseException;
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.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
import java.util.*;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
/**
 * ç›¸ä¼¼æŸ¥è¯¢è§„则服务
@@ -23,6 +41,14 @@
 */
@Service
public class CodeResembleRuleServiceImpl extends MPJBaseServiceImpl<CodeResembleRuleMapper, CodeResembleRule> implements ICodeResembleRuleService {
    /**
     * å¯¹è±¡çš„æ“ä½œ
     */
    @Autowired
    private RevisionModelUtil revisionModelUtil;
    @Override
    public CodeResembleRuleVO getObjectByOid(String oid) {
        return codeResembleRuleDO2VO(selectByOid(oid));
@@ -62,4 +88,226 @@
        }
        return vo;
    }
    /**
     * æŸ¥è¯¢æ‰€æœ‰çš„相似查询规则
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException æŸ¥è¯¢æ¡ä»¶å’Œåˆ†é¡µå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public DataGrid<CodeResembleRuleVO> gridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
        if (pageHelper == null) {
            pageHelper = new PageHelper(-1);
        }
        Query query = new Query();
        query.setSize(pageHelper.getLimit());
        query.setCurrent(pageHelper.getPage());
        query.setDescs("createTime");
        Map<String, Object> condition = new HashMap<>(conditionMap);
        List<CodeResembleRule> doList = baseMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(condition, CodeResembleRule.class)).getRecords();
        DataGrid<CodeResembleRuleVO> dataGrid=new DataGrid<CodeResembleRuleVO>();
        if (!CollectionUtils.isEmpty(doList)) {
            dataGrid.setData(codeResembleRuleDO2VOs(doList));
            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(baseMapper.selectCount(Condition.getQueryWrapper(condition, CodeResembleRule.class)))));
        }
        return dataGrid;
    }
    /**
     * æ‰¹é‡æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
     * @param codeResembleRuleDOs æ•°æ®å¯¹è±¡åˆ—表
     * @return æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å‚数为空或者不存在的时候会抛出异常
     */
    @Override
    public List<CodeResembleRuleVO> codeResembleRuleDO2VOs(Collection<CodeResembleRule> codeResembleRuleDOs) throws VciBaseException{
        List<CodeResembleRuleVO> voList = new ArrayList<CodeResembleRuleVO>();
        if(!CollectionUtils.isEmpty(codeResembleRuleDOs)){
            for(CodeResembleRule s: codeResembleRuleDOs){
                CodeResembleRuleVO vo =  codeResembleRuleDO2VO(s);
                if(vo != null){
                    voList.add(vo);
                }
            }
        }
        return voList;
    }
//    /**
//     * æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
//     * @param  codeResembleRuleDO æ•°æ®å¯¹è±¡
//     * @return æ˜¾ç¤ºå¯¹è±¡
//     * @throws VciBaseException æ‹·è´å±žæ€§å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
//     */
//    @Override
//    public  CodeResembleRuleVO codeResembleRuleDO2VO(CodeResembleRule codeResembleRuleDO) throws VciBaseException{
//        CodeResembleRuleVO vo = new CodeResembleRuleVO();
//        if(codeResembleRuleDO != null){
//            BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDO,vo);
//            //如果有lcstatus的类的话
//            vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
//
//        }
//        return vo;
//    }
    /**
     * å¢žåŠ ç›¸ä¼¼æŸ¥è¯¢è§„åˆ™
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    public CodeResembleRuleVO addSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"需要添加的数据对象");
        //将DTO转换为DO
        CodeResembleRule codeResembleRuleDO = new CodeResembleRule();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,codeResembleRuleDO);
        DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeResembleRuleDO, MdmBtmTypeConstant.CODE_RESEMBLE_RULE);
        codeResembleRuleDO.setTenantId(AuthUtil.getTenantId());
        codeResembleRuleDO.setLctid("frameworkDataLc");
        codeResembleRuleDO.setLcStatus("Enabled");
        codeResembleRuleDO.setOwner(AuthUtil.getUser().getUserName());
        codeResembleRuleDO.setLastModifier(AuthUtil.getUser().getUserName());
        baseMapper.insert(codeResembleRuleDO);
        return codeResembleRuleDO2VO(codeResembleRuleDO);
    }
    /**
     * ä¿®æ”¹ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    public CodeResembleRuleVO editSave(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"数据对象",codeResembleRuleDTO.getOid(),"相似查询规则主键");
        //将DTO转换为DO
        CodeResembleRule codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
        revisionModelUtil.copyFromDTOIgnore(codeResembleRuleDTO,codeResembleRuleDO);
        codeResembleRuleDO.setLastModifier(AuthUtil.getUser().getUserName());
        codeResembleRuleDO.setLastModifyTime(new Date());
        codeResembleRuleDO.setTs(new Date());
        baseMapper.updateById(codeResembleRuleDO);
        return codeResembleRuleDO2VO(codeResembleRuleDO);
    }
    /**
     * æ ¡éªŒæ˜¯å¦å¯ä»¥åˆ é™¤ï¼Œå¦‚果存在下级,并且下级有数据引用则不能删除
     * @param codeResembleRuleDTO æ•°æ®ä¼ è¾“对象
     * @param codeResembleRuleDO æ•°æ®åº“中的数据对象
     * @return success为true为可以删除,false表示有数据引用,obj为true表示有下级
     */
    private R checkIsCanDeleteForDO(CodeResembleRuleDTO codeResembleRuleDTO, CodeResembleRule codeResembleRuleDO) {
        CodeResembleRule tsDO = new CodeResembleRule();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeResembleRuleDTO,tsDO);
//        boService.checkTs(tsDO);
//        QueryWrapper<CodeResembleRule> wrapper = new QueryWrapper<>();
//        wrapper.eq("oid",tsDO.getOid());
//        wrapper.eq("ts",tsDO.getTs());
        if(!checkIsLinked(codeResembleRuleDO.getOid())) {
            return R.success("可以删除!");
        }else{
            return R.fail(DATA_LINKED_NOT_DELETE);
        }
    }
    /**
     * æ ¡éªŒæ˜¯å¦è¢«å¼•用
     * @param oid ä¸»é”®
     * @throws VciBaseException è¢«å¼•用的时候会抛出异常
     */
    private boolean checkIsLinked(String oid) throws VciBaseException{
        //TODO æ·»åŠ éœ€è¦æ ¡éªŒå¼•ç”¨çš„åœ°æ–¹
        return false;
    }
    /**
     * åˆ é™¤ç›¸ä¼¼æŸ¥è¯¢è§„则
     * @param codeResembleRuleDTO ç›¸ä¼¼æŸ¥è¯¢è§„则数据传输对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     * @throws VciBaseException å‚数为空,被引用时抛出异常
     */
    @Override
    public R deleteCodeResembleRule(CodeResembleRuleDTO codeResembleRuleDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeResembleRuleDTO,"相似查询规则数据对象",codeResembleRuleDTO.getOid(),"相似查询规则的主键");
        CodeResembleRule codeResembleRuleDO = selectByOid(codeResembleRuleDTO.getOid());
        R baseResult = checkIsCanDeleteForDO(codeResembleRuleDTO,codeResembleRuleDO);
        if(baseResult.isSuccess()) {
        }else{
            return baseResult;
        }
        //执行删除操作
//        BatchCBO batchCBO = codeResembleRuleMapper.deleteByPrimaryKey(codeResembleRuleDO.getOid());
        int i = baseMapper.deleteById(codeResembleRuleDO.getOid());
        return (i > 0)?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
    }
//    /**
//     * ä¸»é”®æŸ¥è¯¢æ•°æ®å¯¹è±¡
//     * @param oid ä¸»é”®
//     * @return  æ•°æ®å¯¹è±¡
//     * @throws VciBaseException å‚数为空,并且数据不存在的时候会抛出异常
//     */
//    private CodeResembleRule selectByOid(String oid) throws VciBaseException{
//        VciBaseUtil.alertNotNull(oid,"主键");
//        CodeResembleRule codeResembleRuleDO = codeResembleRuleMapper.selectByPrimaryKey(oid.trim());
//        if(codeResembleRuleDO == null || StringUtils.isBlank(codeResembleRuleDO.getOid())){
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
//        return codeResembleRuleDO;
//    }
    /**
     * ä¸»é”®æ‰¹é‡èŽ·å–ç›¸ä¼¼æŸ¥è¯¢è§„åˆ™
     * @param oidCollections ä¸»é”®é›†åˆï¼Œä½†æ˜¯å—性能影响,建议一次查询不超过10000个
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象
     * @throws VciBaseException æŸ¥è¯¢å‡ºçŽ°å¼‚å¸¸æ—¶ä¼šæŠ›å‡º
     */
    @Override
    public Collection<CodeResembleRuleVO> listCodeResembleRuleByOids(Collection<String> oidCollections) throws VciBaseException{
        VciBaseUtil.alertNotNull(oidCollections,"数据对象主键集合");
        List<CodeResembleRule> codeResembleRuleDOList = listCodeResembleRuleDOByOidCollections(oidCollections);
        return codeResembleRuleDO2VOs(codeResembleRuleDOList);
    }
    /**
     * ä½¿ç”¨ä¸»é”®é›†åˆæŸ¥è¯¢æ•°æ®å¯¹è±¡
     * @param oidCollections ä¸»é”®çš„集合
     * @return æ•°æ®å¯¹è±¡åˆ—表
     */
    private List<CodeResembleRule> listCodeResembleRuleDOByOidCollections(Collection<String> oidCollections){
        List<CodeResembleRule> codeResembleRuleDOList = new ArrayList<CodeResembleRule>();
        if(!CollectionUtils.isEmpty(oidCollections)){
            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
            for(Collection<String> oids: oidCollectionsList){
                List<CodeResembleRule> tempDOList =  baseMapper.selectBatchIds(oids);
                if(!CollectionUtils.isEmpty(tempDOList)){
                    codeResembleRuleDOList.addAll(tempDOList);
                }
            }
        }
        return  codeResembleRuleDOList;
    }
    /**
     * å‚照相似查询规则列表
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return ç›¸ä¼¼æŸ¥è¯¢è§„则显示对象列表,生效的内容
     * @throws VciBaseException æŸ¥è¯¢æ¡ä»¶å’Œåˆ†é¡µå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public DataGrid<CodeResembleRuleVO> refDataGridCodeResembleRule(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
        if(conditionMap == null){
            conditionMap = new HashMap<String, String>();
        }
        return gridCodeResembleRule(conditionMap,pageHelper);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -29,6 +29,7 @@
import com.vci.ubcs.starter.web.enumpck.OsCodeFillTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciDateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -42,6 +43,7 @@
import static com.vci.ubcs.code.constant.MdmEngineConstant.*;
@Service
@Slf4j
public class MdmProductCodeServiceImpl  implements MdmProductCodeService {
    /**
@@ -97,9 +99,11 @@
            Map<String/**流水依据**/, Map<String/**码段的主键**/,Double/**最大流水号**/>> maxSerialMap = new HashMap<>();
            // TODO å¤šçº¿ç¨‹æµå¼•发的问题已修改
            dataCBOList.parallelStream().forEach(cbo->{
                log.info("code:----->"+cbo.getId());
//                VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
                String code = cbo.getId();
                List<String> serialUnitList = new ArrayList<>();
                String seclenghStr=cbo.getData().get(CODE_SEC_LENGTH_FIELD);
                String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#");
                cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//将此key除去
                cbo.getData().remove(IMPORT_ROW_INDEX);//将此key除去
@@ -110,18 +114,18 @@
                for (int i = 0; i < secLengths.length; i++) {
                    CodeBasicSecVO secVO = secVOList.get(i);
                    String thisSecValue  = "";
                    if(i == 0){
                        thisSecValue = code.contains("#")?code.substring(0,code.indexOf("#")):code;
                    /*if(i == 0){
                        thisSecValue = seclenghStr.contains("#")?code.substring(0,VciBaseUtil.getInt(secLengths[i])):code;
                    } else if(i == secLengths.length-1){
                        //最后
                        thisSecValue =  code.contains("#")?code.substring(code.lastIndexOf("#")):code;
                    }else {
                        thisSecValue =  seclenghStr.contains("#")?code.substring(VciBaseUtil.getInt(secLengths[i-1]),code.length()):code;
                    }else {*/
                        int start = 0;
                        for (int j = 0; j < i; j++) {
                            start += VciBaseUtil.getInt(secLengths[j]) + 1;
                            start += VciBaseUtil.getInt(secLengths[j]);
                        }
                        thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[1]));
                    }
                        thisSecValue = code.substring(start,start+VciBaseUtil.getInt(secLengths[i]));
                //    }
                    if(VciBaseUtil.getBoolean(secVO.getSerialDependFlag())){
                        serialUnitList.add(thisSecValue);
                    }
@@ -146,6 +150,12 @@
                                OsCodeFillTypeEnum.LEFT.getValue().equalsIgnoreCase(secVO.getCodeFillType()))));
                        }
                        Map<String, Double> thisUnitMaxMap = maxSerialMap.getOrDefault(serialUnitString, new HashMap<>());
                        if(thisUnitMaxMap.containsKey(secOid)){
                            Double maxValue=  thisUnitMaxMap.getOrDefault(secOid,new Double(-1));
                            if(maxValue>serialDb){
                                serialDb=maxValue;
                            }
                        }
                        thisUnitMaxMap.put(secOid,serialDb);
                        maxSerialMap.put(serialUnitString,thisUnitMaxMap);
                        serialUnFileStringList.add(String.valueOf(serialDb));
@@ -167,6 +177,7 @@
            //处理最大的流水号
            List<CodeSerialValue> addSerialValueList = new ArrayList<>();
            List<CodeSerialValue> editSerialValueList = new ArrayList<>();
            log.info("maxSerialMap:----->"+maxSerialMap.size());
            maxSerialMap.forEach((serialUnit,secOidMaxMap)->{
                secOidMaxMap.forEach((secOid,maxSerial)->{
                    QueryWrapper<CodeSerialValue> queryWrapper = new QueryWrapper<>();
@@ -176,8 +187,10 @@
                    queryWrapper.eq("codeSecOid", secOid);
                    List<CodeSerialValue> serialValueDOS = serialValueMapper.selectList(queryWrapper);
                    log.info("serialValueDOS--->"+serialValueDOS.size());
                    if (!CollectionUtils.isEmpty(serialValueDOS)) {
                        CodeSerialValue serialValueDO = serialValueDOS.get(0);
                        log.info("oldmaxSerial--->"+serialValueDO.getMaxSerial()+"---- newmaxSerial---->"+maxSerial);
                        if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<maxSerial){
                            serialValueDO.setMaxSerial(String.valueOf(maxSerial));
                            DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO);
@@ -318,6 +331,7 @@
                //要存储最后的全部allcode
                wrapperAllCode(classifyFullInfoBO, ruleVO, cbo, templateVO, allCodeDOList, serialUnitString, sb.toString());
            }
            //处理最大流水
            saveSerialValue( ruleVO, lastMaxSerialValueMap, maxSerialValueMap);
            allCodeDOList.stream().forEach(