ludc
2023-05-30 695e4a085727ef5017597dd1ab72a47d0e9883e6
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -2,53 +2,61 @@
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.vci.ubcs.code.bo.TreeWrapperOptions;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.entity.CodeClstemplateEntity;
import com.vci.ubcs.code.entity.CodeClassifyTemplate;
import com.vci.ubcs.code.entity.CodeOsbtmtypeEntity;
import com.vci.ubcs.code.entity.CodeOsbtmtypeattributeEntity;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
import com.vci.ubcs.code.mapper.CodeClassifyMapper;
import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
import com.vci.ubcs.code.mapper.CodeClassifyTemplateMapper;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeMapper;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeattributeMapper;
import com.vci.ubcs.code.po.CodeClassifyPO;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.service.ICodeKeyattrrepeatService;
import com.vci.ubcs.code.service.ICodeKeyAttrRepeatService;
import com.vci.ubcs.code.service.ICodeOsattributeService;
import com.vci.ubcs.code.service.ICodeRuleService;
import com.vci.ubcs.code.vo.CodeOsattributeVO;
import com.vci.ubcs.code.vo.CodeOsbtmtypeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.code.vo.pagemodel.TreeQueryObject;
import com.vci.ubcs.com.vci.starter.bo.WriteExcelData;
import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
import com.vci.ubcs.com.vci.starter.poi.bo.ReadExcelOption;
import com.vci.ubcs.com.vci.starter.poi.bo.WriteExcelOption;
import com.vci.ubcs.com.vci.starter.poi.constant.ExcelLangCodeConstant;
import com.vci.ubcs.com.vci.starter.poi.util.ExcelUtil;
import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.com.vci.starter.util.LocalFileUtil;
import com.vci.ubcs.com.vci.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.com.vci.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.com.vci.starter.web.pagemodel.Tree;
import com.vci.ubcs.com.vci.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.com.vci.starter.web.util.LangBaseUtil;
import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
import org.springblade.core.log.exception.ServiceException;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.bo.WriteExcelData;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
import com.vci.ubcs.starter.poi.bo.WriteExcelOption;
import com.vci.ubcs.starter.poi.constant.ExcelLangCodeConstant;
import com.vci.ubcs.starter.poi.util.ExcelUtil;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.BladeTreeQueryObject;
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.LangBaseUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.apache.poi.hssf.util.HSSFColor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
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 org.springframework.util.CollectionUtils;
@@ -66,15 +74,25 @@
   private CodeClassifyMapper codeClassifyMapper;
   @Resource
   private CodeClstemplateMapper codeClstemplateMapper;
   private CodeClassifyTemplateMapper codeClassifyTemplateMapper;
   @Resource
   private ICodeRuleService codeRuleService;
   @Resource
   private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
   @Resource
   CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper;
   private CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper;
   @Resource
   private IBtmTypeClient btmTypeClient;
   /**
    * 属性服务
    */
//   @Autowired
//   private OsAttributeServiceI attributeService;
   /**
    * 日志
@@ -87,7 +105,7 @@
   private RevisionModelUtil revisionModelUtil;
   @Resource
   private ICodeKeyattrrepeatService iCodeKeyattrrepeatService;
   private ICodeKeyAttrRepeatService iCodeKeyattrrepeatService;
   /**
    * 上级节点的属性名称
    */
@@ -255,7 +273,6 @@
      return codeClassifyMapper.checkHasChild(oid.trim());
   }
   /**
    * 删除主题库分类
    * @param codeClassify 主题库分类数据传输对象,oid和ts需要传输
@@ -274,7 +291,7 @@
      //先简称是否有关联模板,有模板要先删除
      Map<String,Object> condition = new HashMap<>(2);
      condition.put("codeClassifyOid",codeClassify.getOid());
      List<CodeClstemplateEntity> codeClstemplateEntities = codeClstemplateMapper.selectByMap(condition);
      List<CodeClassifyTemplate> codeClstemplateEntities = codeClassifyTemplateMapper.selectByMap(condition);
//      VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateDO.class);
//      queryWrapper.addQueryMap("codeClassifyOid",codeClassifyDTO.getOid());
//      List<CodeClassifyTemplateDO> codeClassifyTemplateDOListHaveTemplate =  codeClassifyTemplateMapper.selectByWrapper(queryWrapper);
@@ -298,7 +315,8 @@
               //2、查询要删除的子类数据
               List<CodeClassify>  codeClassifyDOList = codeClassifyMapper.selectBatchIds(s);
               deletes.addAll(codeClassifyDOList);
               codeClassifyMapper.deleteBatchIds(s);
//               codeClassifyMapper.deleteBatchIds(s);
               baseMapper.deleteBatchIds(s);
            }
         }
@@ -359,7 +377,6 @@
      return codeClassifyDO2VOs(codeClassifyDOList);
   }
   /**
    * 使用主键集合查询数据对象
    * @param oidCollections 主键的集合
@@ -378,7 +395,6 @@
      }
      return  codeClassifyList;
   }
   /**
    * 批量数据对象转换为显示对象
@@ -466,8 +482,45 @@
      return tree;
   }
   /**
    * 根据树形查询对象来查询数据对象
    *
    * @param treeQueryObject 树形查询对象
    * @return 查询结果,数据对象
    */
   @Override
   public List<CodeClassifyVO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject) {
      List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid());
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
      return voList;
   }
   /**
    * 使用编号的路径获取对象
    *
    * @param fieldPath 编号的路径,一定要从最顶层节点开始,格式为xxx/yyy/zz 这样
    * @return 分类的显示对象
    */
   @Override
   public CodeClassifyVO getObjectByClsfNamePath(String fieldPath){
      CodeClassifyVO codeClassifyVO=new CodeClassifyVO();
      List<CodeClassify> classifyList = codeClassifyMapper.selectByFieldNamePath(fieldPath,"name");
      if(classifyList.size()>0){
         codeClassifyVO=codeClassifyDO2VO(classifyList.get(0));
      }
      return codeClassifyVO;
   }
   /***
    * 根据上级节点获取下级节点代号路径和名称路径
    * @param classifyId
    * @param enable
    * @return
    */
   @Override
   public List<CodeClassifyVO> getIdPathToNamePathByParentId(String classifyId, boolean enable) {
      return null;
   }
//   /**
   //   /**
//    * 根据树形查询对象来查询数据对象
//    *
//    * @param treeQueryObject 树形查询对象
@@ -857,7 +910,7 @@
      condition.put("pkbtmtype",topClassifyVO.getBtmtypeid());
      List<CodeOsbtmtypeattributeEntity> unDefaultAttributes = codeOsbtmtypeattributeMapper.selectByMap(condition);
//      List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService. (topClassifyVO.getBtmtypeid());
      // List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService. (topClassifyVO.getBtmtypeid());
      List<CodeOsattributeVO> attributeVOS = new ArrayList<>();
      if(!CollectionUtils.isEmpty(unDefaultAttributes)){
         unDefaultAttributes.stream().forEach(attr->{
@@ -867,6 +920,7 @@
            attributeVO.setAttrlength(Short.valueOf(attr.getAttributelength()));
            attributeVO.setBtmtypeid(attr.getReferbtmtypeid());
            attributeVO.setBtmtypename(attr.getReferbtmtypename());
            attributeVO.setAttributedatatypetext(attr.getReferbtmtypename());
            boolean add = true;
            if(StringUtils.isNotBlank(id) && !attributeVO.getId().contains(id.replace("*",""))){
               add = false;
@@ -879,8 +933,8 @@
            }
         });
      }
//      if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){
//         attributeService.getDefaultAttributeVOs().stream().forEach(attr->{
//      if(!CollectionUtils.isEmpty(codeOsattributeService.getDefaultAttributeVOs())){
//         codeOsattributeService.getDefaultAttributeVOs().stream().forEach(attr->{
//            boolean add = true;
//            if(StringUtils.isNotBlank(id) && !attr.getId().contains(id.replace("*",""))){
//               add = false;
@@ -952,6 +1006,17 @@
   }
   /**
    * 主键获取主题库分类
    * @param oid 主键
    * @return 主题库分类显示对象
    * @throws VciBaseException 参数为空,数据不存在时会抛出异常
    */
   @Override
   public CodeClassifyVO getObjectByOid(String oid) throws VciBaseException{
      return codeClassifyDO2VO(selectByOid(oid));
   }
   /**
    * 使用编号的路径获取对象
    *
    * @param idPath 编号的路径,一定要从最顶层节点开始,格式为xxx/yyy/zz 这样
@@ -968,7 +1033,7 @@
   }
   /**
    * 主题库的树
    * 主题库的树,已经联调业务类型查询
    *
    * @param treeQueryObject 树形查询对象
    * @return 主题库显示树
@@ -979,10 +1044,103 @@
         treeQueryObject = new TreeQueryObject();
      }
      if(treeQueryObject.getConditionMap() == null){
         treeQueryObject.setConditionMap(new HashMap<>());
         treeQueryObject.setConditionMap(new HashMap<String,String>());
      }
      treeQueryObject.getConditionMap().put(PARENT_FIELD_NAME, "=null");
      return treeCodeClassify(treeQueryObject);
      List<Tree> trees = treeCodeClassify(treeQueryObject);
      treeQueryObject.getConditionMap().put("domain", AppConstant.APPLICATION_NAME_CODE);
      BaseQueryObject baseQueryObject = new BaseQueryObject();
      baseQueryObject.setConditionMap(treeQueryObject.getConditionMap());
      List<BtmTypeVO> btmTypeVOS = btmTypeClient.getRef(baseQueryObject).getData();
      if(Func.isEmpty(btmTypeVOS) || Func.isEmpty(trees)){
         return null;
      }
      List<Tree> treeList = trees.stream().filter(tree -> btmTypeVOS.stream().
         anyMatch(btmType -> Objects.equals(tree.getAttributes().get("id"), btmType.getId()))).collect(Collectors.toList());
      return treeList;
   }
   /**
    * 获取这个分类下的业务类型,当前没有就获取上级的第一个业务类型
    * @param oid 当前分类的oid
    * @return oid,id,name,btmtypeid,btmtypename,没有就返回null
    */
   @Override
   public CodeClassify selectBtmOrParentBtm(String oid){
      List<CodeClassify> oidList = selectAllLevelParents(oid);
      return oidList.size()==0?null:oidList.get(0);
   }
   /**
    * 获取所有层级上级关联业务类型数据
    * @param oid 当前分类的oid
    * @return oid,id,name,btmtypeid,btmtypename
    */
   @Override
   public List<CodeClassify> selectAllLevelParents(String oid){
//      String sql = "select oid,id,name,btmtypeid,btmtypename from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where btmtypeid is not null start with oid= :oid connect by prior PARENTCODECLASSIFYOID=oid ";
//      Map< String,String> conditionMap = new HashMap< String,String>();
//      conditionMap.put("oid",oid);
//      List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
      List<Map<String, Object>> dataList = codeClassifyMapper.selectAllLevelParents(oid);
      List<CodeClassify> oidList = new ArrayList<CodeClassify>();
      if(!CollectionUtils.isEmpty(dataList)){
         for(Map data:dataList){
            CodeClassify codeClassifyDO = new CodeClassify();
            codeClassifyDO.setOid(VciBaseUtil.getStringValueFromObject(data.get("OID")));
            codeClassifyDO.setId(VciBaseUtil.getStringValueFromObject(data.get("ID")));
            codeClassifyDO.setName(VciBaseUtil.getStringValueFromObject(data.get("NAME")));
            codeClassifyDO.setBtmTypeId(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPEID")));
            codeClassifyDO.setBtmTypeName(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPENAME")));
            oidList.add(codeClassifyDO);
         }
      }
      return oidList;
   }
   /**
    * 使用分类主键获取分类相关的所有信息
    *
    * @param codeClassifyOid 分类的主键
    * @return 分类上级,下级的信息
    */
   @Override
   public CodeClassifyFullInfoBO getClassifyFullInfo(String codeClassifyOid) {
      VciBaseUtil.alertNotNull(codeClassifyOid,"分类的主键");
      CodeClassifyFullInfoBO fullInfo = new CodeClassifyFullInfoBO();
      CodeClassify classifyDO = selectByOid(codeClassifyOid);
      //查询上级
      fullInfo.setCurrentClassifyVO(codeClassifyDO2VO(classifyDO));
//      List<Map<String, Object>> maps = codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid);
//      List<Map<String, Object>> maps = selectAllLevelParentByOid(codeClassifyOid);
      List<CodeClassify> codeClassifyList = selectAllLevelParentByOid(codeClassifyOid);
//      for (Map<String, Object> map : maps) {
//         CodeClassify codeClassify = new CodeClassify();
//         codeClassify.setOid(String.valueOf(map.get("OID")));
//         codeClassify.setDataLevel((Integer) map.get("LEVEL"));
//         codeClassifyList.add(codeClassify);
//      }
      fullInfo.setParentClassifyVOs(codeClassifyDO2VOs(codeClassifyList));
      if(!CollectionUtils.isEmpty(fullInfo.getParentClassifyVOs())){
         fullInfo.setTopClassifyVO(fullInfo.getParentClassifyVOs().stream().filter(s->StringUtils.isBlank(s.getParentcodeclassifyoid())).findFirst().orElseGet(()->null));
      }
      return fullInfo;
   }
   /**
    * 统计子节点的个数
    *
    * @param codeClassifyOid 分类的主键
    * @return 个数
    */
   @Override
   public int countChildrenByClassifyOid(String codeClassifyOid) {
//      Map<String,String> conditionMap = new HashMap<>();
//      conditionMap.put("parentCodeClassifyOid",codeClassifyOid);
      QueryWrapper<CodeClassify> wrapper = new QueryWrapper<>();
      wrapper.eq("parentCodeClassifyOid",codeClassifyOid);
      return codeClassifyMapper.selectCount(wrapper).intValue();
   }
}