Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
@@ -19,24 +19,26 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.code.service.ICodeTempphaseService;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
import com.vci.ubcs.code.service.ICodePhaseattrService;
import com.vci.ubcs.code.service.ICodePhaseAttrService;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseEntityVO;
import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
import com.vci.ubcs.code.wrapper.CodeTemplatePhaseWapper;
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.MybatisParameterUtil;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import com.vci.ubcs.starter.web.util.BeanUtil;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
@@ -62,10 +64,10 @@
 * @since 2023-04-20
 */
@Service
public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTemplatePhaseMapper, CodeTempphaseEntity> implements ICodeTempphaseService {
public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTemplatePhaseMapper, CodeTemplatePhase> implements ICodeTempphaseService {
   @Autowired(required = false)
   private CodePhaseattrMapper codePhaseAttrMapper;
   private CodePhaseAttrMapper codePhaseAttrMapper;
   @Autowired(required = false)
   private CodeTemplatePhaseMapper codeTemplatePhaseMapper;
@@ -74,7 +76,7 @@
   private CommonsMapper commonsMapper;
   @Autowired(required = false)
   private ICodePhaseattrService codePhaseattrService;
   private ICodePhaseAttrService codePhaseattrService;
   /**
    * 对象的操作
@@ -90,23 +92,30 @@
   /**
    * 查询所有的模板阶段
    * @param codeTemplatePhaseVO 查询条件
    * @param query 分页和排序
    * @param conditionMap 查询条件
    * @param pageHelper 分页和排序
    * @return 执行结果
    * @throws VciBaseException 查询条件和分页出错的时候会抛出异常
    */
   @Override
   public DataGrid<CodeTemplatePhaseEntityVO> gridCodeTemplatePhase(CodeTemplatePhaseEntityVO codeTemplatePhaseVO, Query query) throws VciBaseException {
      query.setDescs("createTime");
      query.setSize(-1);
      IPage<CodeTempphaseEntity> doList = codeTemplatePhaseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeTemplatePhaseVO));
      DataGrid<CodeTemplatePhaseEntityVO> dataGrid=new DataGrid<CodeTemplatePhaseEntityVO>();
      if (!CollectionUtils.isEmpty(doList.getRecords())) {
         dataGrid.setData(codeTemplatePhaseDO2VOs(doList.getRecords()));
         dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeTemplatePhaseMapper.selectCount(Condition.getQueryWrapper(codeTemplatePhaseVO)))));
   public IPage<CodeTemplatePhaseVO> gridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
      Query query = new Query();
      if (pageHelper == null) {
         query.setSize(-1);
      }else {
         query.setSize(pageHelper.getLimit());
         query.setCurrent(pageHelper.getPage());
      }
      return dataGrid;
      query.setDescs("CREATETIME");
      CodeTemplatePhase codeTemplatePhase = new CodeTemplatePhase();
      BeanMap beanMap = BeanMap.create(codeTemplatePhase);
      beanMap.putAll(conditionMap);
      IPage<CodeTemplatePhase> doList = codeTemplatePhaseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeTemplatePhase));
      IPage<CodeTemplatePhaseVO> voList = new Page<>();
      if (!CollectionUtils.isEmpty(doList.getRecords())) {
         CodeTemplatePhaseWapper.build().pageVO(doList);
      }
      return voList;
   }
   /**
@@ -116,11 +125,11 @@
    * @throws VciBaseException 参数为空或者不存在的时候会抛出异常
    */
   @Override
   public List<CodeTemplatePhaseEntityVO> codeTemplatePhaseDO2VOs(Collection<CodeTempphaseEntity> codeTemplatePhaseEntityDOS) throws VciBaseException{
      List<CodeTemplatePhaseEntityVO> voList = new ArrayList<CodeTemplatePhaseEntityVO>();
   public List<CodeTemplatePhaseVO> codeTemplatePhaseDO2VOs(Collection<CodeTemplatePhase> codeTemplatePhaseEntityDOS) throws VciBaseException{
      List<CodeTemplatePhaseVO> voList = new ArrayList<CodeTemplatePhaseVO>();
      if(!CollectionUtils.isEmpty(codeTemplatePhaseEntityDOS)){
         for(CodeTempphaseEntity s: codeTemplatePhaseEntityDOS){
            CodeTemplatePhaseEntityVO vo =  codeTemplatePhaseDO2VO(s);
         for(CodeTemplatePhase s: codeTemplatePhaseEntityDOS){
            CodeTemplatePhaseVO vo =  codeTemplatePhaseDO2VO(s);
            if(vo != null){
               voList.add(vo);
            }
@@ -136,8 +145,8 @@
    * @throws VciBaseException 拷贝属性出错的时候会抛出异常
    */
   @Override
   public CodeTemplatePhaseEntityVO codeTemplatePhaseDO2VO(CodeTempphaseEntity codeTemplatePhaseEntityDO) throws VciBaseException{
      CodeTemplatePhaseEntityVO vo = new CodeTemplatePhaseEntityVO();
   public CodeTemplatePhaseVO codeTemplatePhaseDO2VO(CodeTemplatePhase codeTemplatePhaseEntityDO) throws VciBaseException{
      CodeTemplatePhaseVO vo = new CodeTemplatePhaseVO();
      if(codeTemplatePhaseEntityDO != null){
         BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseEntityDO,vo);
         //如果有lcstatus的类的话
@@ -156,14 +165,14 @@
      int updateCount = 0;
      Map<String,Object> condition = new HashMap<>(1);
      condition.put("codeclassifytemplateoid",templateOid);
      List<CodeTempphaseEntity> codeTempphaseEntities = baseMapper.selectByMap(condition);
      List<CodeTemplatePhase> codeTempphaseEntities = baseMapper.selectByMap(condition);
      if(!CollectionUtils.isEmpty(codeTempphaseEntities)) {
         updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTempphaseEntity::getOid).collect(Collectors.toList()));
//         batchCBO.copyFromOther(codeTemplatePhaseMapper.batchDeleteByOids(templatePhaseDOS.stream().map(CodeTemplatePhaseDO::getOid).collect(Collectors.toList())));
//         conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + classifyTemplateOid + "')");
         List<CodePhaseattrEntity> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(templateOid);
         updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTemplatePhase::getOid).collect(Collectors.toList()));
         //batchCBO.copyFromOther(codeTemplatePhaseMapper.batchDeleteByOids(templatePhaseDOS.stream().map(CodeTemplatePhaseDO::getOid).collect(Collectors.toList())));
         //conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + classifyTemplateOid + "')");
         List<CodePhaseAttr> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(templateOid);
         if(!CollectionUtils.isEmpty(phaseAttrDOS)){
            updateCount += codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseattrEntity::getOid).collect(Collectors.toList()));
            updateCount += codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()));
         }
      }
      return updateCount;
@@ -176,29 +185,29 @@
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> attrDOList){
   public List<CodeClassifyTemplateAttr> codeTemplateAttrModifyTrigger(List<CodeClassifyTemplateAttr> attrDOList){
      //属性修改的时候,需要同步修改对应属性的名称
//      BatchCBO batchCBO = new BatchCBO();
      List<CodePhaseattrEntity> phaseAttrDOS =codePhaseAttrMapper.listLinkAttrDOByTemplateAttrDOS(VciBaseUtil.toInSql(attrDOList.stream()
         .map(CodeClstempattrEntity::getId).collect(Collectors.toList()).toArray(new String[0])),attrDOList.get(0).getClassifytemplateoid());
      //BatchCBO batchCBO = new BatchCBO();
      List<CodePhaseAttr> phaseAttrDOS =codePhaseAttrMapper.listLinkAttrDOByTemplateAttrDOS(VciBaseUtil.toInSql(attrDOList.stream()
         .map(CodeClassifyTemplateAttr::getId).collect(Collectors.toList()).toArray(new String[0])),attrDOList.get(0).getClassifyTemplateOid());
      boolean resSavePhaseAttr = false;
      if(!CollectionUtils.isEmpty(phaseAttrDOS)){
         //说明有属性,我们去替换一下
         Map<String, CodeClstempattrEntity> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
         Map<String, CodeClassifyTemplateAttr> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
         phaseAttrDOS.stream().forEach(phaseAttrDO->{
            if(attrDOMap.containsKey(phaseAttrDO.getId())){
               CodeClstempattrEntity attrDO = attrDOMap.get(phaseAttrDO.getId());
               CodeClassifyTemplateAttr attrDO = attrDOMap.get(phaseAttrDO.getId());
               phaseAttrDO.setId(attrDO.getId());
               phaseAttrDO.setName(attrDO.getName());
               phaseAttrDO.setAttributegroup(attrDO.getAttributegroup());
               phaseAttrDO.setAttributeGroup(attrDO.getAttributeGroup());
            }
         });
//         codePhaseattrMapper.
         codePhaseattrService.saveBatch(phaseAttrDOS);
//         BatchCBO updateCBO =
//         codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
//         batchCBO.copyFromOther(updateCBO);
         resSavePhaseAttr = codePhaseattrService.saveBatch(phaseAttrDOS);
         //BatchCBO updateCBO =
         //codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
         //batchCBO.copyFromOther(updateCBO);
      }
      return attrDOList;
      return resSavePhaseAttr ? attrDOList:null;
   }
   /**
@@ -209,17 +218,53 @@
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public CodeTemplatePhaseEntityVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
   public CodeTemplatePhaseVO addSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
      VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"需要添加的数据对象",codeTemplatePhaseDTO.getAttributes(),"包含的属性");
      //将DTO转换为DO
      CodeTempphaseEntity codeTemplatePhaseEntityDO = new CodeTempphaseEntity();
      codeTemplatePhaseEntityDO.setOid(VciBaseUtil.getPk());
      BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO, codeTemplatePhaseEntityDO);
      CodeTemplatePhase codeTemplatePhaseDO = new CodeTemplatePhase();
      BeanUtilForVCI.copyPropertiesIgnoreCase(codeTemplatePhaseDTO, codeTemplatePhaseDO);
      DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeTemplatePhaseDO,MdmBtmTypeConstant.CODE_TEMPLATE_PHASE);
      //WebUtil.setPersistence(false);
      boolean resBoolean = codeTemplatePhaseMapper.insert(codeTemplatePhaseEntityDO) > 0;
      List<CodePhaseattrEntity> attrDOList = new ArrayList<>();
      boolean resInsertTempPhase = codeTemplatePhaseMapper.insert(codeTemplatePhaseDO) > 0;
      List<CodePhaseAttr> attrDOList = new ArrayList<>();
      CodeTemplatePhase finalCodeTemplatePhaseDO = codeTemplatePhaseDO;
      codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
         CodePhaseattrEntity attrDO = new CodePhaseattrEntity();
         CodePhaseAttr attrDO = new CodePhaseAttr();
         BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
         attrDO.setOid(VciBaseUtil.getPk());
         attrDO.setCodePhaseOid(finalCodeTemplatePhaseDO.getOid());
         attrDOList.add(attrDO);
      });
      boolean resPhaseAttr = codePhaseattrService.saveOrUpdateBatch(attrDOList);
      //WebUtil.setPersistence(true);
      return resInsertTempPhase && resPhaseAttr ? codeTemplatePhaseDO2VO(codeTemplatePhaseDO):null;
   }
   /**
    * 修改模板阶段
    * @param codeTemplatePhaseDTO 模板阶段数据传输对象
    * @return 执行结果
    * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public CodeTemplatePhaseVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
      VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"数据对象",codeTemplatePhaseDTO.getOid(),"模板阶段主键",codeTemplatePhaseDTO.getAttributes(),"包含的属性");
      //将DTO转换为DO
      CodeTemplatePhase codeTemplatePhaseEntityDO = selectByOid(codeTemplatePhaseDTO.getOid());
      revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO, codeTemplatePhaseEntityDO);
      DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeTemplatePhaseEntityDO);
      //WebUtil.setPersistence(false);
      codeTemplatePhaseMapper.updateById(codeTemplatePhaseEntityDO);
      //把以前的删除
      List<CodePhaseAttr> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseEntityDO.getOid());
      if(!CollectionUtils.isEmpty(phaseAttrDOS)){
         codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()));
      }
      List<CodePhaseAttr> attrDOList = new ArrayList<>();
      codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
         CodePhaseAttr attrDO = new CodePhaseAttr();
         BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
         attrDO.setOid(VciBaseUtil.getPk());
         attrDO.setCodePhaseOid(codeTemplatePhaseEntityDO.getOid());
@@ -231,36 +276,19 @@
   }
   /**
    * 修改模板阶段
    * @param codeTemplatePhaseDTO 模板阶段数据传输对象
    * @return 执行结果
    * @throws VciBaseException 参数为空,唯一项,必输项不通过时会抛出异常
    * 模板属性删除的时候触发
    * @param attrDOList 属性的数据对象
    * @return 受影响的数据
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public CodeTemplatePhaseEntityVO editSave(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
      VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"数据对象",codeTemplatePhaseDTO.getOid(),"模板阶段主键",codeTemplatePhaseDTO.getAttributes(),"包含的属性");
      //将DTO转换为DO
      CodeTempphaseEntity codeTemplatePhaseEntityDO = selectByOid(codeTemplatePhaseDTO.getOid());
      revisionModelUtil.copyFromDTOIgnore(codeTemplatePhaseDTO, codeTemplatePhaseEntityDO);
      //WebUtil.setPersistence(false);
      codeTemplatePhaseMapper.updateById(codeTemplatePhaseEntityDO);
      //把以前的删除
      List<CodePhaseattrEntity> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseEntityDO.getOid());
   public R codeTemplateAttrDeleteTrigger(List<CodeClassifyTemplateAttr> attrDOList){
      List<CodePhaseAttr> phaseAttrDOS =listLinkAttrDOByTemplateAttrDOS(attrDOList);
      boolean resDeletePhaseAttr = false;
      if(!CollectionUtils.isEmpty(phaseAttrDOS)){
         codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseattrEntity::getOid).collect(Collectors.toList()));
         //属性被删除的时候,阶段里面也一样要被删除
         resDeletePhaseAttr = codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList())) > 0;
      }
      List<CodePhaseattrEntity> attrDOList = new ArrayList<>();
      codeTemplatePhaseDTO.getAttributes().stream().forEach(attrDTO->{
         CodePhaseattrEntity attrDO = new CodePhaseattrEntity();
         BeanUtilForVCI.copyPropertiesIgnoreCase(attrDTO,attrDO);
         attrDO.setOid(VciBaseUtil.getPk());
         attrDO.setCodePhaseOid(codeTemplatePhaseEntityDO.getOid());
         attrDOList.add(attrDO);
      });
      codePhaseattrService.saveBatch(attrDOList);
      //WebUtil.setPersistence(true);
      return codeTemplatePhaseDO2VO(codeTemplatePhaseEntityDO);
      return R.status(resDeletePhaseAttr);
   }
   /**
@@ -273,9 +301,9 @@
   @Transactional(rollbackFor = Exception.class)
   public R deleteCodeTemplatePhase(CodeTemplatePhaseDTO codeTemplatePhaseDTO) throws VciBaseException{
      VciBaseUtil.alertNotNull(codeTemplatePhaseDTO,"模板阶段数据对象",codeTemplatePhaseDTO.getOid(),"模板阶段的主键");
      CodeTempphaseEntity codeTemplatePhaseEntityDO = selectByOid(codeTemplatePhaseDTO.getOid());
      CodeTemplatePhase codeTemplatePhaseEntityDO = selectByOid(codeTemplatePhaseDTO.getOid());
      R baseResult = checkIsCanDeleteForDO(codeTemplatePhaseDTO, codeTemplatePhaseEntityDO);
      if(!baseResult.isSuccess()) {
      if(baseResult.isSuccess()) {
      }else{
         return baseResult;
      }
@@ -283,10 +311,10 @@
      //WebUtil.setPersistence(false);
      boolean batchCBO = codeTemplatePhaseMapper.deleteById(codeTemplatePhaseEntityDO.getOid())>0;
      //需要删除属性
      List<CodePhaseattrEntity> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseEntityDO.getOid());
      List<CodePhaseAttr> phaseAttrDOS = listPhaseAttrDOByPhaseOid(codeTemplatePhaseEntityDO.getOid());
      boolean deleteCBO = false;
      if(!CollectionUtils.isEmpty(phaseAttrDOS)) {
         deleteCBO = codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseattrEntity::getOid).collect(Collectors.toList()))>0;
         deleteCBO = codePhaseAttrMapper.deleteBatchIds(phaseAttrDOS.stream().map(CodePhaseAttr::getOid).collect(Collectors.toList()))>0;
      }
      //WebUtil.setPersistence(true);
      return (batchCBO || deleteCBO)?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
@@ -299,7 +327,7 @@
    * @throws VciBaseException 参数为空,数据不存在时会抛出异常
    */
   @Override
   public CodeTemplatePhaseEntityVO getObjectByOid(String oid) throws VciBaseException{
   public CodeTemplatePhaseVO getObjectByOid(String oid) throws VciBaseException{
      return codeTemplatePhaseDO2VO(selectByOid(oid));
   }
@@ -310,10 +338,10 @@
    * @throws VciBaseException 查询出现异常时会抛出
    */
   @Override
   public Collection<CodeTemplatePhaseEntityVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
   public Collection<CodeTemplatePhaseVO> listCodeTemplatePhaseByOids(Collection<String> oidCollections) throws VciBaseException{
      VciBaseUtil.alertNotNull(oidCollections,"数据对象主键集合");
      List<CodeTempphaseEntity> codeTemplatePhaseEntityDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
      return codeTemplatePhaseDO2VOs(codeTemplatePhaseEntityDOList);
      List<CodeTemplatePhase> codeTemplatePhaseEntityDOList = listCodeTemplatePhaseDOByOidCollections(oidCollections);
      return CodeTemplatePhaseWapper.build().listVO(codeTemplatePhaseEntityDOList);
   }
   /**
@@ -324,18 +352,11 @@
    * @throws VciBaseException 查询条件和分页出错的时候会抛出异常
    */
   @Override
   public DataGrid<CodeTemplatePhaseEntityVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
   public IPage<CodeTemplatePhaseVO> refDataGridCodeTemplatePhase(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
      if(conditionMap == null){
         conditionMap = new HashMap<String, String>();
         conditionMap = new HashMap<>();
      }
      CodeTemplatePhaseEntityVO codeTemplatePhaseVO = new CodeTemplatePhaseEntityVO();
      BeanMap beanMap = BeanMap.create(codeTemplatePhaseVO);
      beanMap.putAll(conditionMap);
      Query query = new Query();
      query.setSize(pageHelper.getLimit());
      query.setCurrent(pageHelper.getPage());
      return gridCodeTemplatePhase(codeTemplatePhaseVO,query);
      return gridCodeTemplatePhase(conditionMap,pageHelper);
   }
   /**
@@ -346,22 +367,26 @@
    * @return 属性的信息
    */
   @Override
   public DataGrid<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
   public IPage<CodeClassifyTemplateAttrVO> gridUnUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
      if(conditionMap == null){
         conditionMap = new HashMap<String, String>();
      }
      if(!conditionMap.containsKey("classifyTemplateOid")){
         return new DataGrid<>("没有模板的主键");
         throw new VciBaseException("没有模板的主键");
      }
      //需要判断阶段的主键是否存在
      String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
      LambdaQueryWrapper<CodeClassifyTemplateAttr> queryWrapper = null;
      MPJLambdaWrapper<CodeClassifyTemplateAttr> queryWrapper = new MPJLambdaWrapper<>();
      queryWrapper.selectAll(CodeClassifyTemplateAttr.class)
         .selectAs(CodeClassifyTemplate::getName,CodeClassifyTemplateAttr::getClassifyTemplateOidName)
         .leftJoin(CodeClassifyTemplate.class, CodeClassifyTemplate::getOid, CodeClassifyTemplateAttr::getClassifyTemplateOid)
         .eq(CodeClassifyTemplateAttr::getClassifyTemplateOid,conditionMap.getOrDefault("classifyTemplateOid",null));
      if(StringUtils.isNotBlank(codePhaseOid)){
         //排除阶段上使用的
         conditionMap.remove("codePhaseOid");
         List<String> ids = commonsMapper.selectById("(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" + codePhaseOid + "')");
         if(ids.size()<=1000){
            queryWrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda().notIn(CodeClassifyTemplateAttr::getId, ids);
         if(ids.size()<1000){
            queryWrapper = queryWrapper.notIn(CodeClassifyTemplateAttr::getId, ids);
         }else {
            queryWrapper = MybatisParameterUtil.cutNotInParameter(queryWrapper,CodeClassifyTemplateAttr::getId,ids);
         }
@@ -378,27 +403,29 @@
    * @return 属性的信息
    */
   @Override
   public DataGrid<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
   public IPage<CodeClassifyTemplateAttrVO> gridUsedAttribute(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
      if(conditionMap == null){
         conditionMap = new HashMap<String, String>();
      }
      String codePhaseOid = conditionMap.getOrDefault("codePhaseOid", null);
      if(StringUtils.isBlank(codePhaseOid)){
         return new DataGrid<>();
         return new Page<>();
      }
      conditionMap.remove("codePhaseOid");
      CodeTempphaseEntity phaseDO = selectByOid(codePhaseOid);
      CodeTemplatePhase phaseDO = selectByOid(codePhaseOid);
      List<String> ids = commonsMapper.selectById("(select id from " + getPhaseAttrTable() + " where codePhaseOid ='" +codePhaseOid + "')");
      LambdaQueryWrapper<CodeClassifyTemplateAttr> queryWrapper = null;
      //         Wrappers.<CodeClassifyTemplateAttrVO>query()
      //         .in("id", ids)
      if(ids.size()<=1000){
         queryWrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda().in(CodeClassifyTemplateAttr::getId, ids);
      //这儿是个连表查询语句
      MPJLambdaWrapper<CodeClassifyTemplateAttr> mpjLambdaWrapper = new MPJLambdaWrapper<>();
      mpjLambdaWrapper.selectAll(CodeClassifyTemplateAttr.class)
         .selectAs(CodeClassifyTemplate::getName,CodeClassifyTemplateAttr::getClassifyTemplateOidName)
         .leftJoin(CodeClassifyTemplate.class, CodeClassifyTemplate::getOid, CodeClassifyTemplateAttr::getClassifyTemplateOid)
         .eq(CodeClassifyTemplateAttr::getClassifyTemplateOid,phaseDO.getCodeClassifyTemplateOid());
      if(ids.size()<1000){
         mpjLambdaWrapper = mpjLambdaWrapper.in(CodeClassifyTemplateAttr::getId, ids);
      }else {
         queryWrapper = MybatisParameterUtil.cutInParameter(queryWrapper,CodeClassifyTemplateAttr::getId,ids);
         mpjLambdaWrapper = MybatisParameterUtil.cutInParameter(mpjLambdaWrapper,CodeClassifyTemplateAttr::getId,ids);
      }
      queryWrapper.eq(CodeClassifyTemplateAttr::getClassifyTemplateOid,phaseDO.getCodeClassifyTemplateOid());
      return tempAttrService.gridCodeClassifyTemplateAttr(queryWrapper,pageHelper);
      return tempAttrService.gridCodeClassifyTemplateAttr(mpjLambdaWrapper,pageHelper);
   }
   /**
@@ -406,7 +433,20 @@
    * @return 表名
    */
   private String getPhaseAttrTable(){
      return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR_TABLENAME);
      /**以前VciQueryWrapperForDO.USER_TABLE_COMPATIBILITY在启动时初始化值为true所以拼接出来的表名是正确的,
       现在因为搬过来没有被赋值为true所以表名拿到的是错误的这儿暂时写死
       **/
      //return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_PHASE_ATTR_TABLENAME);
      return "pl_"+MdmBtmTypeConstant.CODE_PHASE_ATTR_TABLENAME;
   }
   /**
    * 阶段的表名
    * @return 表名
    */
   private String getPhaseTable(){
      //return VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_TEMPLATE_PHASE);
      return "pl_"+MdmBtmTypeConstant.CODE_TEMPLATE_PHASE;
   }
   /**
@@ -414,12 +454,12 @@
    * @param oidCollections 主键的集合
    * @return 数据对象列表
    */
   private List<CodeTempphaseEntity> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
      List<CodeTempphaseEntity> codeTemplatePhaseEntityDOList = new ArrayList<CodeTempphaseEntity>();
   private List<CodeTemplatePhase> listCodeTemplatePhaseDOByOidCollections(Collection<String> oidCollections){
      List<CodeTemplatePhase> codeTemplatePhaseEntityDOList = new ArrayList<>();
      if(!CollectionUtils.isEmpty(oidCollections)){
         Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
         for(Collection<String> oids: oidCollectionsList){
            List<CodeTempphaseEntity> tempDOList =  codeTemplatePhaseMapper.selectBatchIds(oids);
            List<CodeTemplatePhase> tempDOList =  codeTemplatePhaseMapper.selectBatchIds(oids);
            if(!CollectionUtils.isEmpty(tempDOList)){
               codeTemplatePhaseEntityDOList.addAll(tempDOList);
            }
@@ -434,10 +474,10 @@
    * @param codeTemplatePhaseEntityDO 数据库中的数据对象
    * @return success为true为可以删除,false表示有数据引用,obj为true表示有下级
    */
   private R checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTempphaseEntity codeTemplatePhaseEntityDO) {
      CodeTempphaseEntity tsDO = new CodeTempphaseEntity();
   private R checkIsCanDeleteForDO(CodeTemplatePhaseDTO codeTemplatePhaseDTO, CodeTemplatePhase codeTemplatePhaseEntityDO) {
      CodeTemplatePhase tsDO = new CodeTemplatePhase();
      BeanUtil.convert(codeTemplatePhaseDTO,tsDO);
      if (checkTs(tsDO)) {
      if (!checkTs(tsDO,codeTemplatePhaseEntityDO)) {
         return R.fail(TS_NOT_PROCESS);
      }
      if(!checkIsLinked(codeTemplatePhaseEntityDO.getOid())) {
@@ -449,15 +489,13 @@
   /**
    * 检查ts
    * @param tempDO
    * @param codeTempphaseDO
    * @return
    */
   private boolean checkTs(CodeTempphaseEntity tempDO){
      LambdaQueryWrapper<CodeTempphaseEntity> wrapper = Wrappers.<CodeTempphaseEntity>query()
         .lambda().eq(CodeTempphaseEntity::getOid,tempDO.getOid()).select(CodeTempphaseEntity::getTs);
      long dbTs = codePhaseAttrMapper.selectById(wrapper).getTs().getTime();
      long currentTs = tempDO.getTs().getTime();
      if(dbTs == currentTs){
   private boolean checkTs(CodeTemplatePhase tempDO, CodeTemplatePhase codeTempphaseDO){
      Date dbTs = codeTempphaseDO.getTs();
      Date currentTs = tempDO.getTs();
      if(currentTs == null ?  dbTs == null:currentTs.compareTo(dbTs)==0){
         return true;
      }
      return false;
@@ -478,12 +516,41 @@
    * @param codePhaseOid 阶段的主键
    * @return 包含属性的数据对象
    */
   private List<CodePhaseattrEntity> listPhaseAttrDOByPhaseOid(String codePhaseOid){
   private List<CodePhaseAttr> listPhaseAttrDOByPhaseOid(String codePhaseOid){
      if(StringUtils.isBlank(codePhaseOid)||StringUtils.isEmpty(codePhaseOid)){
         return null;
      }
      List<CodePhaseattrEntity> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(codePhaseOid);
      List<CodePhaseAttr> phaseAttrDOS = codePhaseAttrMapper.selectByPhasea(codePhaseOid);
      return phaseAttrDOS;
   }
   /**
    * 使用模板的属性获取阶段中包含的属性内容
    * @param attrDOList 属性的数据对象
    * @return 阶段里的属性数据对象
    */
   private List<CodePhaseAttr> listLinkAttrDOByTemplateAttrDOS(List<CodeClassifyTemplateAttr> attrDOList){
      if(!CollectionUtils.isEmpty(attrDOList)) {
         //查询这个模板里包含的所有阶段的这些属性
         //因为oracle里表的字段不能超过1000个,所以我们这里默认属性个数是小于1000的;
         List<String> oids = commonsMapper.selectById("select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + attrDOList.get(0).getClassifyTemplateOid() + "'");
         LambdaQueryWrapper<CodePhaseAttr> queryWrapper = new LambdaQueryWrapper<>();
         if(oids.size()<1000){
            queryWrapper.in(CodePhaseAttr::getCodePhaseOid,oids);
         }else {
            MybatisParameterUtil.cutInParameter(queryWrapper,CodePhaseAttr::getCodePhaseOid,oids);
         }
         if(attrDOList.size()<1000){
            queryWrapper.in(CodePhaseAttr::getId,VciBaseUtil.toInSql(attrDOList.stream().map(CodeClassifyTemplateAttr::getId).collect(Collectors.toList()).toArray(new String[0])));
         }else {
            MybatisParameterUtil.cutInParameter(queryWrapper,CodePhaseAttr::getId,attrDOList.stream().map(CodeClassifyTemplateAttr::getId).collect(Collectors.toList()));
         }
         //conditionMap.put("codePhaseOid", QueryOptionConstant.IN + "(select oid from " + getPhaseTable() + " where codeClassifyTemplateOid='" + attrDOList.get(0).getClassifyTemplateOid() + "')");
         //conditionMap.put("id", QueryOptionConstant.IN + "(" +  VciBaseUtil.toInSql(attrDOList.stream().map(CodeClassifyTemplateAttr::getId).collect(Collectors.toList()).toArray(new String[0])) + ")");
         return codePhaseAttrMapper.selectList(queryWrapper);
      }else{
         return new ArrayList<>();
      }
   }
   /**
@@ -492,9 +559,9 @@
    * @return  数据对象
    * @throws VciBaseException 参数为空,并且数据不存在的时候会抛出异常
    */
   private CodeTempphaseEntity selectByOid(String oid) throws VciBaseException{
   private CodeTemplatePhase selectByOid(String oid) throws VciBaseException{
      VciBaseUtil.alertNotNull(oid,"主键");
      CodeTempphaseEntity codeTemplatePhaseEntityDO = codeTemplatePhaseMapper.selectById(oid.trim());
      CodeTemplatePhase codeTemplatePhaseEntityDO = codeTemplatePhaseMapper.selectById(oid.trim());
      if(codeTemplatePhaseEntityDO == null || StringUtils.isBlank(codeTemplatePhaseEntityDO.getOid())){
         throw new VciBaseException(DATA_OID_NOT_EXIST);
      }