| | |
| | | |
| | | 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.CodeClassifyFullInfoBO; |
| | | import com.vci.ubcs.code.entity.CodeClassify; |
| | | 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.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.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.omd.cache.EnumCache; |
| | | import com.vci.ubcs.omd.enums.EnumEnum; |
| | | import com.vci.ubcs.omd.feign.IBtmTypeClient; |
| | | import com.vci.ubcs.omd.vo.BtmTypeAttributeVO; |
| | | 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.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.PageHelper; |
| | | 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 org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springblade.core.cache.utils.CacheUtil; |
| | | import com.vci.ubcs.core.log.exception.ServiceException; |
| | | 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; |
| | | |
| | |
| | | private ICodeRuleService codeRuleService; |
| | | |
| | | @Resource |
| | | private CodeOsbtmtypeMapper codeOsbtmtypeMapper; |
| | | @Resource |
| | | CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper; |
| | | @Resource |
| | | ICodeRuleService ICodeRuleService; |
| | | private IBtmTypeClient btmTypeClient; |
| | | |
| | | /** |
| | | * 日志 |
| | |
| | | if(StringUtils.isBlank(oid)){ |
| | | throw new ServiceException("oid不能为空!"); |
| | | } |
| | | return !codeClassifyMapper.checkHasChild(oid.trim()); |
| | | return codeClassifyMapper.checkHasChild(oid.trim()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除主题库分类 |
| | |
| | | return codeClassifyDO2VOs(codeClassifyDOList); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 使用主键集合查询数据对象 |
| | | * @param oidCollections 主键的集合 |
| | |
| | | } |
| | | return codeClassifyList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 批量数据对象转换为显示对象 |
| | |
| | | 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 树形查询对象 |
| | |
| | | return excelName; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 导入分类 |
| | | * |
| | |
| | | |
| | | List<String> btmOids = poList.stream().filter(s -> StringUtils.isNotBlank(s.getKeyRepeatRuleId())) |
| | | .map(CodeClassifyPO::getBtmTypeId).collect(Collectors.toList()); |
| | | Map<String, CodeOsbtmtypeEntity> btmVOMap = Optional.ofNullable(btmOids.size()==0 ? null: codeOsbtmtypeMapper.selectBatchIds(btmOids) |
| | | ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2)); |
| | | // Map<String, CodeOsbtmtypeVO> btmVOMap = null; |
| | | Map<String, BtmTypeVO> btmVOMap = Optional |
| | | .ofNullable(btmOids.size()==0 ? null: btmTypeClient.selectByIdCollection(btmOids).getData()) |
| | | .orElse(new ArrayList<BtmTypeVO>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2)); |
| | | // Map<String, CodeOsbtmtypeVO> btmVOMap = null; |
| | | Map<String/**路径**/,String/**主键**/> oidPathMap = new HashMap<>(); |
| | | |
| | | //我们需要查询所有已经存在的分类,主要是路径,用来判断分类的数据 |
| | |
| | | classify.setDescription(po.getDescription()); |
| | | oidPathMap.put(po.getPath(),classify.getOid()); |
| | | if(StringUtils.isNotBlank(po.getBtmTypeId())){ |
| | | CodeOsbtmtypeVO typeVO = (CodeOsbtmtypeVO)btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT)); |
| | | BtmTypeVO typeVO = (BtmTypeVO)btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT)); |
| | | classify.setBtmTypeId(typeVO.getId()); |
| | | classify.setBtmTypeName(typeVO.getName()); |
| | | } |
| | |
| | | * @return 属性的信息,包含默认的属性 |
| | | */ |
| | | @Override |
| | | public DataGrid<CodeOsattributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) { |
| | | public DataGrid<BtmTypeAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) { |
| | | if(baseQueryObject == null){ |
| | | baseQueryObject = new BaseQueryObject(); |
| | | } |
| | |
| | | baseQueryObject.setConditionMap(new HashMap<>()); |
| | | } |
| | | String classifyOid = baseQueryObject.getConditionMap().getOrDefault("codeClassifyOid",""); |
| | | String btmTypeOid = baseQueryObject.getConditionMap().getOrDefault("btmTypeOid",""); |
| | | String id = baseQueryObject.getConditionMap().getOrDefault("id",""); |
| | | String name = baseQueryObject.getConditionMap().getOrDefault("name",""); |
| | | if(StringUtils.isBlank(classifyOid)){ |
| | | return new DataGrid<>(); |
| | | } |
| | | if(StringUtils.isBlank(btmTypeOid)){ |
| | | return new DataGrid<>(); |
| | | } |
| | | CodeClassifyVO topClassifyVO = getTopClassifyVO(classifyOid); |
| | |
| | | |
| | | Map<String,Object> condition = new HashMap<>(1); |
| | | condition.put("pkbtmtype",topClassifyVO.getBtmtypeid()); |
| | | |
| | | List<CodeOsbtmtypeattributeEntity> unDefaultAttributes = codeOsbtmtypeattributeMapper.selectByMap(condition); |
| | | // List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService. (topClassifyVO.getBtmtypeid()); |
| | | List<CodeOsattributeVO> attributeVOS = new ArrayList<>(); |
| | | BtmTypeVO data = btmTypeClient.getDetail(btmTypeOid).getData(); |
| | | List<BtmTypeAttributeVO> unDefaultAttributes = data.getAttributes(); |
| | | // List<CodeOsbtmtypeattributeEntity> unDefaultAttributes = codeOsbtmtypeattributeMapper.selectByMap(condition); |
| | | // List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService. (topClassifyVO.getBtmtypeid()); |
| | | List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>(); |
| | | if(!CollectionUtils.isEmpty(unDefaultAttributes)){ |
| | | unDefaultAttributes.stream().forEach(attr->{ |
| | | CodeOsattributeVO attributeVO = new CodeOsattributeVO(); |
| | | BtmTypeAttributeVO attributeVO = new BtmTypeAttributeVO(); |
| | | BeanUtils.copyProperties(attr,attributeVO); |
| | | attributeVO.setAttributedatatype(attr.getAttrdatatype()); |
| | | attributeVO.setAttrlength(Short.valueOf(attr.getAttributelength())); |
| | | attributeVO.setBtmtypeid(attr.getReferbtmtypeid()); |
| | | attributeVO.setBtmtypename(attr.getReferbtmtypename()); |
| | | attributeVO.setAttrDataType(attr.getAttrDataType()); |
| | | attributeVO.setAttributeLength(attr.getAttributeLength()); |
| | | attributeVO.setBtmTypeId(data.getId()); |
| | | attributeVO.setBtmname(data.getName()); |
| | | attributeVO.setAttrDataTypeText(EnumCache.getValue(EnumEnum.VCO_FIELD_TYPE,attr.getAttrDataType())); |
| | | boolean add = true; |
| | | if(StringUtils.isNotBlank(id) && !attributeVO.getId().contains(id.replace("*",""))){ |
| | | add = false; |
| | |
| | | } |
| | | }); |
| | | } |
| | | // if(!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())){ |
| | | // attributeService.getDefaultAttributeVOs().stream().forEach(attr->{ |
| | | // boolean add = true; |
| | | // if(StringUtils.isNotBlank(id) && !attr.getId().contains(id.replace("*",""))){ |
| | | // add = false; |
| | | // } |
| | | // if(StringUtils.isNotBlank(name) && !attr.getId().contains(name.replace("*",""))){ |
| | | // add = false; |
| | | // } |
| | | // if(add){ |
| | | // attributeVOS.add(attr); |
| | | // } |
| | | // }); |
| | | // } |
| | | DataGrid<CodeOsattributeVO> dataGrid = new DataGrid<>(); |
| | | DataGrid<BtmTypeAttributeVO> dataGrid = new DataGrid<>(); |
| | | dataGrid.setData(attributeVOS); |
| | | dataGrid.setTotal(attributeVOS.size()); |
| | | return dataGrid; |
| | |
| | | * @throws VciBaseException 参数为空,数据不存在时会抛出异常 |
| | | */ |
| | | @Override |
| | | public CodeClassifyVO getObjectByOid(String oid) throws VciBaseException{ |
| | | public CodeClassifyVO getObjectByOid(String oid) throws VciBaseException{ |
| | | return codeClassifyDO2VO(selectByOid(oid)); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 主题库的树 |
| | | * 主题库的树,已联调业务类型查询feign |
| | | * |
| | | * @param treeQueryObject 树形查询对象 |
| | | * @return 主题库显示树 |
| | |
| | | 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 -> !CollectionUtils.isEmpty(btmTypeVOS.stream().filter(btmType -> { |
| | | if(Objects.equals(tree.getAttributes().get("id"), btmType.getId())){ |
| | | tree.getAttributes().put("btmTypeOid",btmType.getOid()); |
| | | return true; |
| | | } |
| | | return false; |
| | | }).collect(Collectors.toList()))) |
| | | .collect(Collectors.toList()); |
| | | return treeList; |
| | | } |
| | | |
| | | /** |
| | |
| | | CodeClassify classifyDO = selectByOid(codeClassifyOid); |
| | | //查询上级 |
| | | fullInfo.setCurrentClassifyVO(codeClassifyDO2VO(classifyDO)); |
| | | List<Map<String, Object>> maps = codeClassifyMapper.selectAllLevelParentByOid(codeClassifyOid); |
| | | List<CodeClassify> codeClassifyList = new ArrayList<>(); |
| | | for (Map<String, Object> map : maps) { |
| | | CodeClassify codeClassify = new CodeClassify(); |
| | | codeClassify.setOid(String.valueOf(map.get("OID"))); |
| | | codeClassify.setOid(String.valueOf(map.get("LEVEL"))); |
| | | codeClassifyList.add(codeClassify); |
| | | } |
| | | // 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(); |
| | | } |
| | | |
| | | } |