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(@RequestBody AdmRequest req, @RequestParam(required = false) String module){ Dict map = syncApp.queryDict(req.getGroupCode(), req.getProjectId(), req.getUserId(), !"infos".equals(module), false); List> majorList = map.getMajor(); List sysList = map.getSystem(); List equipList = map.getEquipment(); distinct(sysList); distinct(equipList); clearTime(majorList); clearTime(sysList); clearTime(equipList); //组织专业-系统树形结构 for(Map major : majorList){ ArrayList childrenSys = new ArrayList<>(); major.put("children", childrenSys); String majorCode = (String) major.get("code"); for(Iterator 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 relDefs = (List)map.getRelation(); List graph = ServiceUtil.call (() -> rwdClient.queryGraphDef(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), new QueryCriteria())); List> rels = new ArrayList<>(); for(GraphDefine gd : graph){ HashMap m = new HashMap<>(); m.put("code", gd.getCode()); m.put("name", gd.getName()); m.put("type", "graph"); rels.add(m); ArrayList 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 void distinct(List list){ List result = new ArrayList<>(); HashSet 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 cfgs(@RequestBody AdmRequest req, @RequestParam(required = false) String module){ String projectId = req.getProjectId(); HashMap data = new HashMap<>(); //配置数据查询 if("infos".equals(module)) { //信息点配置 List infoConfig = configService.queryInfosConfig(projectId); data.put("infoConfig", infoConfig); } else { List relConfig = configService.queryRelsConfig(projectId); List pipeConfig = configService.queryPipeConfig(projectId); List containerConfig = configService.queryContainerConfig(projectId); data.put("relConfig", relConfig); data.put("pipeConfig", pipeConfig); data.put("containerConfig", containerConfig); } return AdmResult.success(data); } @RequestMapping("/typeInfos") public AdmResult typeInfos(@RequestBody AdmRequest req, @RequestParam String typeCode){ QueryCriteria criteria = new QueryCriteria(); ObjectNode node = objectMapper.createObjectNode(); node.put("classCode", typeCode); criteria.setCriteria(node); List roots = new ArrayList<>(); List 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 roots, InfoDef infoDef){ Map folder = null; if(StrUtil.isNotBlank(infoDef.getFirstTag())) { folder = findParent(roots, infoDef.getFirstTag()); if(StrUtil.isNotBlank(infoDef.getSecondTag())){ folder = findParent((List) folder.get("children"), infoDef.getSecondTag()); } } if(folder == null) roots.add(infoDef); else ((List) folder.get("children")).add(infoDef); } private Map findParent(List list, String tag){ for(Object o : list){ if(o instanceof Map){ if(tag.equals(((Map) o).get("code"))) return (Map) o; } } Map 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 updateCfgItem(@RequestBody Map content) { String type = (String) content.get("type"); Map itemMap = (Map) 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 void doUpdateItem(String delId, Map itemMap, boolean create, Class cls, BaseMapper 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 mapToObj(Map map, Class 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 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); } }