123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- package com.persagy.bdtp.adm.controller;
- import cn.hutool.core.util.IdUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.mapper.BaseMapper;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import com.persagy.bdtp.adm.client.RwdClient;
- import com.persagy.bdtp.adm.common.AdmConst;
- import com.persagy.bdtp.adm.common.AdmRequest;
- import com.persagy.bdtp.adm.common.AdmResult;
- import com.persagy.bdtp.adm.dao.AdmContainerConfigMapper;
- import com.persagy.bdtp.adm.dao.AdmInfosConfigMapper;
- import com.persagy.bdtp.adm.dao.AdmPipeConfigMapper;
- import com.persagy.bdtp.adm.dao.AdmRelsConfigMapper;
- import com.persagy.bdtp.adm.entity.*;
- import com.persagy.bdtp.adm.entity.db.*;
- import com.persagy.bdtp.adm.service.IConfigService;
- import com.persagy.bdtp.adm.service.ISyncApp;
- import com.persagy.bdtp.adm.service.ServiceUtil;
- import com.persagy.dmp.basic.model.QueryCriteria;
- import com.persagy.dmp.common.constant.ResponseCode;
- import com.persagy.dmp.common.exception.BusinessException;
- import com.persagy.dmp.define.entity.GraphDefine;
- import com.persagy.dmp.define.entity.RelationDefine;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.web.bind.annotation.*;
- import java.io.IOException;
- import java.util.*;
- @CrossOrigin
- @RestController
- @RequestMapping("/tool")
- public class ToolController {
- @Autowired
- private ObjectMapper objectMapper;
- @Autowired
- @Qualifier(ServiceUtil.SYNC_APP_IMPL)
- private ISyncApp syncApp;
- @Autowired
- private RwdClient rwdClient;
- @Autowired
- private IConfigService configService;
- @RequestMapping("/dict")
- public AdmResult<Dict> dict(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
- Dict map = syncApp.queryDict(req.getGroupCode(), req.getProjectId(), req.getUserId(), !"infos".equals(module), false);
- List<Map<String, Object>> majorList = map.getMajor();
- List<TypeDef> sysList = map.getSystem();
- List<TypeDef> equipList = map.getEquipment();
- distinct(sysList);
- distinct(equipList);
- clearTime(majorList);
- clearTime(sysList);
- clearTime(equipList);
- //组织专业-系统树形结构
- for(Map<String, Object> major : majorList){
- ArrayList<TypeDef> childrenSys = new ArrayList<>();
- major.put("children", childrenSys);
- String majorCode = (String) major.get("code");
- for(Iterator<TypeDef> sysIter = sysList.iterator(); sysIter.hasNext();){
- TypeDef sysDef = sysIter.next();
- if(sysDef.getMajorCode() != null && sysDef.getMajorCode().equals(majorCode)){
- childrenSys.add(sysDef);
- sysIter.remove();
- }
- }
- }
- map.setSystem(null);
- if("infos".equals(module)) { //信息点配置
- } else { //关系、管道、无模型设备
- List<RelationDefine> relDefs = (List<RelationDefine>)map.getRelation();
- List<GraphDefine> graph = ServiceUtil.call (() -> rwdClient.queryGraphDef(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), new QueryCriteria()));
- List<Map<String, Object>> rels = new ArrayList<>();
- for(GraphDefine gd : graph){
- HashMap<String, Object> m = new HashMap<>();
- m.put("code", gd.getCode());
- m.put("name", gd.getName());
- m.put("type", "graph");
- rels.add(m);
- ArrayList<RelationDefine> chidren = new ArrayList<>();
- m.put("children", chidren);
- for(RelationDefine relDef : relDefs) {
- if(relDef.getGraphCode().equals(gd.getCode()))
- chidren.add(relDef);
- }
- }
- map.setRelation(rels);
- }
- return AdmResult.success(map);
- }
- private <T> void distinct(List<T> list){
- List<T> result = new ArrayList<>();
- HashSet<String> codes = new HashSet<>();
- for(T def : list) {
- String code = null;
- if(def instanceof TypeDef)
- code = ((TypeDef) def).getCode();
- else if(def instanceof InfoDef)
- code = ((InfoDef) def).getCode();
- if(!codes.contains(code)) {
- codes.add(code);
- result.add(def);
- }
- }
- list.clear();
- list.addAll(result);
- }
- private void clearTime(List<?> list){
- for(Object o : list) {
- if(o instanceof TypeDef) {
- ((TypeDef) o).setCreationTime(null);
- ((TypeDef) o).setModifiedTime(null);
- } else if(o instanceof Map) {
- ((Map) o).put("creationTime", null);
- ((Map) o).put("modifiedTime", null);
- ((Map) o).put("name", ((Map) o).get("label")); //handle major
- }
- }
- }
- @RequestMapping("/cfgs")
- public AdmResult<Object> cfgs(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
- String projectId = req.getProjectId();
- HashMap<String, Object> data = new HashMap<>();
- //配置数据查询
- if("infos".equals(module)) { //信息点配置
- List<AdmInfosConfig> infoConfig = configService.queryInfosConfig(projectId);
- data.put("infoConfig", infoConfig);
- } else {
- List<AdmRelsConfig> relConfig = configService.queryRelsConfig(projectId);
- List<AdmPipeConfig> pipeConfig = configService.queryPipeConfig(projectId);
- List<AdmContainerConfig> containerConfig = configService.queryContainerConfig(projectId);
- data.put("relConfig", relConfig);
- data.put("pipeConfig", pipeConfig);
- data.put("containerConfig", containerConfig);
- }
- return AdmResult.success(data);
- }
- @RequestMapping("/typeInfos")
- public AdmResult<Object> typeInfos(@RequestBody AdmRequest req, @RequestParam String typeCode){
- QueryCriteria criteria = new QueryCriteria();
- ObjectNode node = objectMapper.createObjectNode();
- node.put("classCode", typeCode);
- criteria.setCriteria(node);
- List<Object> roots = new ArrayList<>();
- List<InfoDef> funcList = ServiceUtil.call(() -> rwdClient.queryFunc(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), criteria));
- distinct(funcList);
- for(InfoDef infoDef : funcList) {
- buildInfosTree(roots, infoDef);
- }
- return AdmResult.success(roots);
- }
- private void buildInfosTree(List<Object> roots, InfoDef infoDef){
- Map<String, Object> folder = null;
- if(StrUtil.isNotBlank(infoDef.getFirstTag())) {
- folder = findParent(roots, infoDef.getFirstTag());
- if(StrUtil.isNotBlank(infoDef.getSecondTag())){
- folder = findParent((List<Object>) folder.get("children"), infoDef.getSecondTag());
- }
- }
- if(folder == null)
- roots.add(infoDef);
- else
- ((List<Object>) folder.get("children")).add(infoDef);
- }
- private Map<String, Object> findParent(List<Object> list, String tag){
- for(Object o : list){
- if(o instanceof Map){
- if(tag.equals(((Map) o).get("code")))
- return (Map<String, Object>) o;
- }
- }
- Map<String, Object> p = new HashMap<>();
- p.put("code", tag);
- p.put("name", tag);
- p.put("info_tag", true);
- p.put("children", new ArrayList<>());
- list.add(p);
- return p;
- }
- @Autowired
- private AdmRelsConfigMapper relsConfigMapper;
- @Autowired
- private AdmPipeConfigMapper pipeConfigMapper;
- @Autowired
- private AdmContainerConfigMapper containerConfigMapper;
- @PostMapping("/updateCfgItem")
- public AdmResult<Object> updateCfgItem(@RequestBody Map<String, Object> content) {
- String type = (String) content.get("type");
- Map<String, Object> itemMap = (Map<String, Object>) content.get("item");
- String delId = (String) content.get("delId");
- String newId = null;
- if(itemMap != null && !itemMap.containsKey("id")){
- newId = IdUtil.fastSimpleUUID();
- itemMap.put("id", newId);
- }
- boolean create = newId != null;
- if("rel".equals(type)) {
- doUpdateItem(delId, itemMap, create, AdmRelsConfig.class, relsConfigMapper);
- } else if ("pipe".equals(type)) {
- doUpdateItem(delId, itemMap, create, AdmPipeConfig.class, pipeConfigMapper);
- } else if("container".equals(type)) {
- doUpdateItem(delId, itemMap, create, AdmContainerConfig.class, containerConfigMapper);
- }
- return AdmResult.success(newId);
- }
-
- private <T extends BaseAdmEntity> void doUpdateItem(String delId, Map<String, Object> itemMap, boolean create, Class<T> cls, BaseMapper<T> mapper){
- if(StrUtil.isNotBlank(delId))
- mapper.deleteById(delId);
- else {
- T cfg = mapToObj(itemMap, cls);
- if(create)
- mapper.insert(cfg);
- else
- mapper.updateById(cfg);
- }
- }
- private <T extends BaseAdmEntity> T mapToObj(Map<String, Object> map, Class<T> cls){
- try {
- String json = objectMapper.writeValueAsString(map);
- return objectMapper.readValue(json, cls);
- } catch (IOException e) {
- e.printStackTrace();
- throw new BusinessException(ResponseCode.A0427.getCode(), ResponseCode.A0427.getDesc());
- }
- }
- @Autowired
- private AdmInfosConfigMapper infosConfigMapper;
- @PostMapping("/updateInfos")
- public AdmResult<Object> updateInfos(@RequestBody AdmInfosConfig cfg) {
- String newId = null;
- if(StrUtil.isBlank(cfg.getId())){
- newId = IdUtil.fastSimpleUUID();
- cfg.setId(newId);
- }
- if(cfg.getInfos() != null) {
- for(Object o : cfg.getInfos()) {
- if(o instanceof Map){
- ((Map<?, ?>) o).remove("name");
- ((Map<?, ?>) o).remove("cfgItemType");
- }
- }
- }
- if(newId != null)
- infosConfigMapper.insert(cfg);
- else
- infosConfigMapper.updateById(cfg);
- return AdmResult.success(newId);
- }
- }
|