ToolController.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package com.persagy.bdtp.adm.controller;
  2. import cn.hutool.core.util.IdUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.fasterxml.jackson.databind.node.ObjectNode;
  7. import com.persagy.bdtp.adm.client.RwdClient;
  8. import com.persagy.bdtp.adm.common.AdmConst;
  9. import com.persagy.bdtp.adm.common.AdmRequest;
  10. import com.persagy.bdtp.adm.common.AdmResult;
  11. import com.persagy.bdtp.adm.dao.AdmContainerConfigMapper;
  12. import com.persagy.bdtp.adm.dao.AdmInfosConfigMapper;
  13. import com.persagy.bdtp.adm.dao.AdmPipeConfigMapper;
  14. import com.persagy.bdtp.adm.dao.AdmRelsConfigMapper;
  15. import com.persagy.bdtp.adm.entity.*;
  16. import com.persagy.bdtp.adm.entity.db.*;
  17. import com.persagy.bdtp.adm.service.IConfigService;
  18. import com.persagy.bdtp.adm.service.ISyncApp;
  19. import com.persagy.bdtp.adm.service.ServiceUtil;
  20. import com.persagy.dmp.basic.model.QueryCriteria;
  21. import com.persagy.dmp.common.constant.ResponseCode;
  22. import com.persagy.dmp.common.exception.BusinessException;
  23. import com.persagy.dmp.define.entity.GraphDefine;
  24. import com.persagy.dmp.define.entity.RelationDefine;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.beans.factory.annotation.Qualifier;
  27. import org.springframework.web.bind.annotation.*;
  28. import java.io.IOException;
  29. import java.util.*;
  30. @CrossOrigin
  31. @RestController
  32. @RequestMapping("/tool")
  33. public class ToolController {
  34. @Autowired
  35. private ObjectMapper objectMapper;
  36. @Autowired
  37. @Qualifier(ServiceUtil.SYNC_APP_IMPL)
  38. private ISyncApp syncApp;
  39. @Autowired
  40. private RwdClient rwdClient;
  41. @Autowired
  42. private IConfigService configService;
  43. @RequestMapping("/dict")
  44. public AdmResult<Dict> dict(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
  45. Dict map = syncApp.queryDict(req.getGroupCode(), req.getProjectId(), req.getUserId(), !"infos".equals(module), false);
  46. List<Map<String, Object>> majorList = map.getMajor();
  47. List<TypeDef> sysList = map.getSystem();
  48. List<TypeDef> equipList = map.getEquipment();
  49. distinct(sysList);
  50. distinct(equipList);
  51. clearTime(majorList);
  52. clearTime(sysList);
  53. clearTime(equipList);
  54. //组织专业-系统树形结构
  55. for(Map<String, Object> major : majorList){
  56. ArrayList<TypeDef> childrenSys = new ArrayList<>();
  57. major.put("children", childrenSys);
  58. String majorCode = (String) major.get("code");
  59. for(Iterator<TypeDef> sysIter = sysList.iterator(); sysIter.hasNext();){
  60. TypeDef sysDef = sysIter.next();
  61. if(sysDef.getMajorCode() != null && sysDef.getMajorCode().equals(majorCode)){
  62. childrenSys.add(sysDef);
  63. sysIter.remove();
  64. }
  65. }
  66. }
  67. map.setSystem(null);
  68. if("infos".equals(module)) { //信息点配置
  69. } else { //关系、管道、无模型设备
  70. List<RelationDefine> relDefs = (List<RelationDefine>)map.getRelation();
  71. List<GraphDefine> graph = ServiceUtil.call (() -> rwdClient.queryGraphDef(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), new QueryCriteria()));
  72. List<Map<String, Object>> rels = new ArrayList<>();
  73. for(GraphDefine gd : graph){
  74. HashMap<String, Object> m = new HashMap<>();
  75. m.put("code", gd.getCode());
  76. m.put("name", gd.getName());
  77. m.put("type", "graph");
  78. rels.add(m);
  79. ArrayList<RelationDefine> chidren = new ArrayList<>();
  80. m.put("children", chidren);
  81. for(RelationDefine relDef : relDefs) {
  82. if(relDef.getGraphCode().equals(gd.getCode()))
  83. chidren.add(relDef);
  84. }
  85. }
  86. map.setRelation(rels);
  87. }
  88. return AdmResult.success(map);
  89. }
  90. private <T> void distinct(List<T> list){
  91. List<T> result = new ArrayList<>();
  92. HashSet<String> codes = new HashSet<>();
  93. for(T def : list) {
  94. String code = null;
  95. if(def instanceof TypeDef)
  96. code = ((TypeDef) def).getCode();
  97. else if(def instanceof InfoDef)
  98. code = ((InfoDef) def).getCode();
  99. if(!codes.contains(code)) {
  100. codes.add(code);
  101. result.add(def);
  102. }
  103. }
  104. list.clear();
  105. list.addAll(result);
  106. }
  107. private void clearTime(List<?> list){
  108. for(Object o : list) {
  109. if(o instanceof TypeDef) {
  110. ((TypeDef) o).setCreationTime(null);
  111. ((TypeDef) o).setModifiedTime(null);
  112. } else if(o instanceof Map) {
  113. ((Map) o).put("creationTime", null);
  114. ((Map) o).put("modifiedTime", null);
  115. ((Map) o).put("name", ((Map) o).get("label")); //handle major
  116. }
  117. }
  118. }
  119. @RequestMapping("/cfgs")
  120. public AdmResult<Object> cfgs(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
  121. String projectId = req.getProjectId();
  122. HashMap<String, Object> data = new HashMap<>();
  123. //配置数据查询
  124. if("infos".equals(module)) { //信息点配置
  125. List<AdmInfosConfig> infoConfig = configService.queryInfosConfig(projectId);
  126. data.put("infoConfig", infoConfig);
  127. } else {
  128. List<AdmRelsConfig> relConfig = configService.queryRelsConfig(projectId);
  129. List<AdmPipeConfig> pipeConfig = configService.queryPipeConfig(projectId);
  130. List<AdmContainerConfig> containerConfig = configService.queryContainerConfig(projectId);
  131. data.put("relConfig", relConfig);
  132. data.put("pipeConfig", pipeConfig);
  133. data.put("containerConfig", containerConfig);
  134. }
  135. return AdmResult.success(data);
  136. }
  137. @RequestMapping("/typeInfos")
  138. public AdmResult<Object> typeInfos(@RequestBody AdmRequest req, @RequestParam String typeCode){
  139. QueryCriteria criteria = new QueryCriteria();
  140. ObjectNode node = objectMapper.createObjectNode();
  141. node.put("classCode", typeCode);
  142. criteria.setCriteria(node);
  143. List<Object> roots = new ArrayList<>();
  144. List<InfoDef> funcList = ServiceUtil.call(() -> rwdClient.queryFunc(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), criteria));
  145. distinct(funcList);
  146. for(InfoDef infoDef : funcList) {
  147. buildInfosTree(roots, infoDef);
  148. }
  149. return AdmResult.success(roots);
  150. }
  151. private void buildInfosTree(List<Object> roots, InfoDef infoDef){
  152. Map<String, Object> folder = null;
  153. if(StrUtil.isNotBlank(infoDef.getFirstTag())) {
  154. folder = findParent(roots, infoDef.getFirstTag());
  155. if(StrUtil.isNotBlank(infoDef.getSecondTag())){
  156. folder = findParent((List<Object>) folder.get("children"), infoDef.getSecondTag());
  157. }
  158. }
  159. if(folder == null)
  160. roots.add(infoDef);
  161. else
  162. ((List<Object>) folder.get("children")).add(infoDef);
  163. }
  164. private Map<String, Object> findParent(List<Object> list, String tag){
  165. for(Object o : list){
  166. if(o instanceof Map){
  167. if(tag.equals(((Map) o).get("code")))
  168. return (Map<String, Object>) o;
  169. }
  170. }
  171. Map<String, Object> p = new HashMap<>();
  172. p.put("code", tag);
  173. p.put("name", tag);
  174. p.put("info_tag", true);
  175. p.put("children", new ArrayList<>());
  176. list.add(p);
  177. return p;
  178. }
  179. @Autowired
  180. private AdmRelsConfigMapper relsConfigMapper;
  181. @Autowired
  182. private AdmPipeConfigMapper pipeConfigMapper;
  183. @Autowired
  184. private AdmContainerConfigMapper containerConfigMapper;
  185. @PostMapping("/updateCfgItem")
  186. public AdmResult<Object> updateCfgItem(@RequestBody Map<String, Object> content) {
  187. String type = (String) content.get("type");
  188. Map<String, Object> itemMap = (Map<String, Object>) content.get("item");
  189. String delId = (String) content.get("delId");
  190. String newId = null;
  191. if(itemMap != null && !itemMap.containsKey("id")){
  192. newId = IdUtil.fastSimpleUUID();
  193. itemMap.put("id", newId);
  194. }
  195. boolean create = newId != null;
  196. if("rel".equals(type)) {
  197. doUpdateItem(delId, itemMap, create, AdmRelsConfig.class, relsConfigMapper);
  198. } else if ("pipe".equals(type)) {
  199. doUpdateItem(delId, itemMap, create, AdmPipeConfig.class, pipeConfigMapper);
  200. } else if("container".equals(type)) {
  201. doUpdateItem(delId, itemMap, create, AdmContainerConfig.class, containerConfigMapper);
  202. }
  203. return AdmResult.success(newId);
  204. }
  205. private <T extends BaseAdmEntity> void doUpdateItem(String delId, Map<String, Object> itemMap, boolean create, Class<T> cls, BaseMapper<T> mapper){
  206. if(StrUtil.isNotBlank(delId))
  207. mapper.deleteById(delId);
  208. else {
  209. T cfg = mapToObj(itemMap, cls);
  210. if(create)
  211. mapper.insert(cfg);
  212. else
  213. mapper.updateById(cfg);
  214. }
  215. }
  216. private <T extends BaseAdmEntity> T mapToObj(Map<String, Object> map, Class<T> cls){
  217. try {
  218. String json = objectMapper.writeValueAsString(map);
  219. return objectMapper.readValue(json, cls);
  220. } catch (IOException e) {
  221. e.printStackTrace();
  222. throw new BusinessException(ResponseCode.A0427.getCode(), ResponseCode.A0427.getDesc());
  223. }
  224. }
  225. @Autowired
  226. private AdmInfosConfigMapper infosConfigMapper;
  227. @PostMapping("/updateInfos")
  228. public AdmResult<Object> updateInfos(@RequestBody AdmInfosConfig cfg) {
  229. String newId = null;
  230. if(StrUtil.isBlank(cfg.getId())){
  231. newId = IdUtil.fastSimpleUUID();
  232. cfg.setId(newId);
  233. }
  234. if(cfg.getInfos() != null) {
  235. for(Object o : cfg.getInfos()) {
  236. if(o instanceof Map){
  237. ((Map<?, ?>) o).remove("name");
  238. ((Map<?, ?>) o).remove("cfgItemType");
  239. }
  240. }
  241. }
  242. if(newId != null)
  243. infosConfigMapper.insert(cfg);
  244. else
  245. infosConfigMapper.updateById(cfg);
  246. return AdmResult.success(newId);
  247. }
  248. }