AdmComponentController.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.persagy.proxy.object.controller;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.map.MapUtil;
  4. import cn.hutool.core.util.IdUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.persagy.proxy.adm.constant.AdmDictCategoryEnum;
  7. import com.persagy.proxy.adm.request.AdmCreateRequest;
  8. import com.persagy.proxy.adm.request.AdmQueryCriteria;
  9. import com.persagy.proxy.adm.request.AdmResponse;
  10. import com.persagy.proxy.adm.utils.AdmContextUtil;
  11. import com.persagy.proxy.adm.utils.ObjectNameUtil;
  12. import com.persagy.proxy.dictionary.model.AdmDict;
  13. import com.persagy.proxy.dictionary.model.AdmObjectType;
  14. import com.persagy.proxy.dictionary.service.IAdmDictService;
  15. import com.persagy.proxy.object.model.AdmComponent;
  16. import com.persagy.proxy.object.service.IAdmComponentService;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.PostMapping;
  20. import org.springframework.web.bind.annotation.RequestBody;
  21. import org.springframework.web.bind.annotation.RequestMapping;
  22. import org.springframework.web.bind.annotation.RestController;
  23. import javax.ws.rs.QueryParam;
  24. import java.util.ArrayList;
  25. import java.util.HashMap;
  26. import java.util.List;
  27. import java.util.Map;
  28. /**
  29. * Adm 部件 API
  30. * @author lvxy
  31. * @date 2021/8/16
  32. */
  33. @Slf4j
  34. @RestController
  35. @RequestMapping("/object/component")
  36. public class AdmComponentController {
  37. @Autowired
  38. private IAdmComponentService service;
  39. @Autowired
  40. private IAdmDictService dictService;
  41. /**
  42. * 统计
  43. * @param request
  44. * @return
  45. * @throws Exception
  46. */
  47. @PostMapping("/count")
  48. public AdmResponse count(@RequestBody AdmQueryCriteria request) throws Exception {
  49. request.setName(AdmComponent.OBJ_TYPE);
  50. request.setOnlyCount(true);
  51. return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmComponent.class);
  52. }
  53. /**
  54. * 创建
  55. * @param createRequest
  56. * @return
  57. * @throws Exception
  58. */
  59. @PostMapping("/create")
  60. public AdmResponse create(@RequestBody AdmCreateRequest<AdmComponent> createRequest, @QueryParam("projectId") String projectId) throws Exception {
  61. List<AdmComponent> vos = CollUtil.newArrayList(createRequest.getContent());
  62. if(CollUtil.isEmpty(vos)){
  63. return AdmResponse.success();
  64. }
  65. // 查询所有设备类型
  66. AdmDict dictCond = AdmDict.builder().type(AdmDictCategoryEnum.COMPONENT.getValue()).build();
  67. AdmResponse dictResponse = dictService.queryCategory(AdmContextUtil.toDmpContext(), dictCond, AdmObjectType.class);
  68. List<AdmObjectType> dicts = (List<AdmObjectType>) dictResponse.getContent();
  69. // 转换为Map,key为编码后4位。用于适配旧类型编码
  70. Map<String, AdmObjectType> shortDictMap = new HashMap<>();
  71. Map<String, AdmObjectType> fullDictMap = new HashMap<>();
  72. for(int i = 0,j = CollUtil.size(dicts);i < j;i++) {
  73. AdmObjectType dict = dicts.get(i);
  74. shortDictMap.put(StrUtil.subSufByLength(dict.getCode(), 6), dict);
  75. fullDictMap.put(dict.getCode(), dict);
  76. }
  77. // 设备属性调整
  78. List<AdmComponent> filterVOs = new ArrayList<>();
  79. for(AdmComponent component:vos) {
  80. // 如果不是Eq开头,则重新生成ID
  81. if(StrUtil.startWith(component.getId(), "Ec")) {
  82. component.setId("Ec"+ IdUtil.simpleUUID());
  83. }
  84. // 类型编码适配
  85. String classCode = component.getClassCode();
  86. // 如果编码为空,或在4位、6位里都不存在,则报错
  87. if(StrUtil.isBlank(classCode) ||
  88. (shortDictMap.get(classCode) == null && fullDictMap.get(classCode) == null)) {
  89. log.error(StrUtil.format("没有找到对象类型【{}】!", component.getClassCode()));
  90. continue;
  91. }
  92. filterVOs.add(component);
  93. // 如果少于6位,则需要适配新编码
  94. if(classCode.length() < 8) {
  95. AdmObjectType dict = MapUtil.get(shortDictMap, classCode, AdmObjectType.class);
  96. component.setClassCode(dict.getCode());
  97. }
  98. // 如果名称为空,则提供默认名称
  99. if (StrUtil.isEmpty(component.getName())){
  100. AdmObjectType dict = MapUtil.get(fullDictMap, component.getClassCode(), AdmObjectType.class);
  101. String preName = dict == null ? "部件" : dict.getName();
  102. component.setName(ObjectNameUtil.objectName(preName + "-"));
  103. }
  104. }
  105. if(CollUtil.isEmpty(filterVOs)){
  106. return AdmResponse.success();
  107. }
  108. filterVOs = service.doInsert(AdmContextUtil.toDmpContext(), AdmComponent.class, filterVOs);
  109. return AdmResponse.success(filterVOs);
  110. }
  111. /**
  112. * 根据ID删除
  113. * @param vos
  114. * @return
  115. * @throws Exception
  116. */
  117. @PostMapping("/delete")
  118. public AdmResponse delete( @RequestBody List<AdmComponent> vos) throws Exception {
  119. service.doDelete(AdmContextUtil.toDmpContext(), vos);
  120. return AdmResponse.success();
  121. }
  122. /**
  123. * 更新
  124. * @param createRequest
  125. * @return
  126. * @throws Exception
  127. */
  128. @PostMapping("/update")
  129. public AdmResponse update(@RequestBody AdmCreateRequest<AdmComponent> createRequest, @QueryParam("projectId") String projectId) throws Exception {
  130. List<AdmComponent> vos = CollUtil.newArrayList(createRequest.getContent());
  131. vos = service.doUpdate(AdmContextUtil.toDmpContext(), AdmComponent.class, vos);
  132. return AdmResponse.success(vos);
  133. }
  134. /**
  135. * 查询
  136. *
  137. * @param request
  138. * @return
  139. * @throws Exception
  140. */
  141. @PostMapping("/query")
  142. public AdmResponse query(@RequestBody AdmQueryCriteria request) throws Exception {
  143. request.setName(AdmComponent.OBJ_TYPE);
  144. return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmComponent.class);
  145. }
  146. }