TreeNodeService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.TreeNodeDTO;
  3. import cn.cslg.pas.common.model.cronModel.*;
  4. import cn.cslg.pas.common.model.request.GroupRequest;
  5. import cn.cslg.pas.common.model.request.QueryRequest;
  6. import cn.cslg.pas.common.utils.CacheUtils;
  7. import cn.cslg.pas.common.utils.LoginUtils;
  8. import cn.cslg.pas.common.vo.business.TreeNodeVO;
  9. import cn.cslg.pas.domain.business.AssoTreeNodeFile;
  10. import cn.cslg.pas.domain.business.TreeNode;
  11. import cn.cslg.pas.exception.UnLoginException;
  12. import cn.cslg.pas.exception.XiaoShiException;
  13. import cn.cslg.pas.factorys.businessFactory.Business;
  14. import cn.cslg.pas.mapper.TreeNodeMapper;
  15. import cn.cslg.pas.service.common.FileManagerService;
  16. import cn.cslg.pas.service.permissions.PermissionService;
  17. import cn.cslg.pas.service.query.FormatQueryService;
  18. import com.alibaba.fastjson.JSONObject;
  19. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  20. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.springframework.beans.BeanUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import org.springframework.web.multipart.MultipartFile;
  27. import java.io.IOException;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. import java.util.stream.Collectors;
  31. /**
  32. * 架构的Service层
  33. * @Author xiexiang
  34. * @Date 2023/10/26
  35. */
  36. @Service
  37. @Slf4j
  38. public class TreeNodeService extends ServiceImpl<TreeNodeMapper, TreeNode> implements Business {
  39. @Autowired
  40. private TreeNodeMapper treeNodeMapper;
  41. @Autowired
  42. private AssoTreeNodeFileService assoTreeNodeFileService;
  43. @Autowired
  44. private FileManagerService fileManagerService;
  45. @Autowired
  46. private CacheUtils cacheUtils;
  47. @Autowired
  48. private LoginUtils loginUtils;
  49. @Autowired
  50. private FormatQueryService formatQueryService;
  51. @Autowired
  52. private PermissionService permissionService;
  53. @Override
  54. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  55. List<String> sqls = formatQueryService.reSqls(queryRequest,"treeNode");
  56. //根据sql查询产品架构信息
  57. List<TreeNodeVO> treeNodeVOS = treeNodeMapper.getTreeNode(sqls.get(0),sqls.get(1),sqls.get(2));
  58. //装载产品类别信息
  59. this.loadTreeNode(treeNodeVOS);
  60. Records records = new Records();
  61. records.setCurrent(queryRequest.getCurrent());
  62. records.setSize(queryRequest.getSize());
  63. records.setData(treeNodeVOS);
  64. // records.setTotal(total);
  65. return records;
  66. }
  67. /**
  68. * 新增架构
  69. * @param object
  70. * @param files
  71. * @return
  72. */
  73. @Override
  74. public Object addMessage(Object object, List<MultipartFile> files) {
  75. //object to treeNode
  76. TreeNodeDTO treeNodeDTO = (TreeNodeDTO)object;
  77. //获取登录人信息
  78. PersonnelVO personnelVO = new PersonnelVO();
  79. try {
  80. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  81. }
  82. catch (Exception e)
  83. {
  84. throw new UnLoginException("未登录");
  85. }
  86. treeNodeDTO.setName(treeNodeDTO.getName().trim());
  87. //根据名称查询是否重复
  88. String name = treeNodeDTO.getName();
  89. LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
  90. queryWrapper.eq(TreeNode::getName, name);
  91. List<TreeNode> treeNodes = this.list(queryWrapper);
  92. if(treeNodes != null && treeNodes.size() != 0){
  93. throw new XiaoShiException("参数错误");
  94. }
  95. //赋值
  96. TreeNode treeNode = new TreeNode();
  97. BeanUtils.copyProperties(treeNodeDTO, treeNode);
  98. treeNode.setCreateId("1");
  99. //数据入表
  100. treeNode.insert();
  101. //处理文件
  102. if(files != null && files.size() != 0){
  103. try {
  104. List<String> guids = fileManagerService.uploadFileGetGuid(files);
  105. List<AssoTreeNodeFile> assoTreeNodeFiles = new ArrayList<>();
  106. for(String item:guids){
  107. AssoTreeNodeFile assoTreeNodeFile = new AssoTreeNodeFile();
  108. assoTreeNodeFile.setTreeNodeId(treeNode.getId());
  109. assoTreeNodeFile.setFileGuid(item);
  110. assoTreeNodeFile.setCreateId(personnelVO.getGuid());
  111. assoTreeNodeFiles.add(assoTreeNodeFile);
  112. }
  113. if(assoTreeNodeFiles != null && assoTreeNodeFiles.size() != 0){
  114. assoTreeNodeFileService.saveBatch(assoTreeNodeFiles);
  115. }
  116. } catch (Exception e) {
  117. }
  118. }
  119. //返回id
  120. return treeNode.getId();
  121. }
  122. /**
  123. * 删除架构
  124. * @param ids
  125. * @return
  126. */
  127. @Override
  128. @Transactional(rollbackFor = Exception.class)
  129. public Object deleteMessage(List<Integer> ids) throws IOException {
  130. //根据架构id删除架构和文件关联
  131. LambdaQueryWrapper<AssoTreeNodeFile> queryWrapper = new LambdaQueryWrapper<>();
  132. queryWrapper.in(AssoTreeNodeFile::getTreeNodeId, ids);
  133. List<AssoTreeNodeFile> assoTreeNodeFiles = assoTreeNodeFileService.list(queryWrapper);
  134. List<String> guids = assoTreeNodeFiles.stream().map(AssoTreeNodeFile::getFileGuid).collect(Collectors.toList());
  135. //TODO 根据guids删除文件
  136. if(guids.size() != 0){
  137. fileManagerService.deleteFileFromFMS(guids);
  138. }
  139. //删除架构和文件关联表
  140. assoTreeNodeFiles.remove(queryWrapper);
  141. //根据架构id删除架构数据
  142. this.removeBatchByIds(ids);
  143. return ids;
  144. }
  145. /**
  146. * 更新架构
  147. * @param object
  148. * @param files
  149. * @return
  150. */
  151. @Override
  152. public Object updateMessage(Object object, List<MultipartFile> files) {
  153. //object to treeNode
  154. TreeNodeDTO treeNodeDTO = (TreeNodeDTO)object;
  155. //获取登录人信息
  156. PersonnelVO personnelVO;
  157. try {
  158. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  159. } catch (Exception e) {
  160. throw new UnLoginException("未登录");
  161. }
  162. treeNodeDTO.setName(treeNodeDTO.getName().trim());
  163. //根据名称查询是否重复
  164. String name = treeNodeDTO.getName();
  165. LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
  166. queryWrapper.eq(TreeNode::getName, name);
  167. List<TreeNode> treeNodes = this.list(queryWrapper);
  168. if(treeNodes == null && treeNodes.size() == 0){
  169. return null;
  170. }
  171. //赋值
  172. TreeNode treeNode = this.getById(treeNodeDTO.getId());
  173. BeanUtils.copyProperties(treeNodeDTO, treeNode);
  174. treeNode.setCreateId(null);
  175. //数据入表
  176. treeNode.insert();
  177. //处理文件
  178. if(files != null && files.size() != 0){
  179. try {
  180. List<String> guids = fileManagerService.uploadFileGetGuid(files);
  181. List<AssoTreeNodeFile> assoTreeNodeFiles = new ArrayList<>();
  182. for(String item:guids){
  183. AssoTreeNodeFile assoTreeNodeFile = new AssoTreeNodeFile();
  184. assoTreeNodeFile.setTreeNodeId(treeNode.getId());
  185. assoTreeNodeFile.setFileGuid(item);
  186. //TODO
  187. assoTreeNodeFile.setCreateId(null);
  188. assoTreeNodeFiles.add(assoTreeNodeFile);
  189. }
  190. if(assoTreeNodeFiles != null && assoTreeNodeFiles.size() != 0){
  191. assoTreeNodeFileService.saveBatch(assoTreeNodeFiles);
  192. }
  193. } catch (Exception e) {
  194. }
  195. }
  196. //返回id
  197. return treeNode.getId();
  198. }
  199. @Override
  200. public GroupVO getGroup(GroupRequest groupRequest,String tableName) throws Exception {
  201. return null;
  202. }
  203. private void loadTreeNode(List<TreeNodeVO> treeNodeVOS) throws IOException {
  204. List<String> createIds = new ArrayList<>();
  205. List<Integer> ids = new ArrayList<>();
  206. treeNodeVOS.forEach(
  207. item -> {
  208. if(item.getCreateId() != null){
  209. createIds.add(item.getCreateId());
  210. }
  211. if (item.getId() != null) {
  212. ids.add(item.getId());
  213. }
  214. }
  215. );
  216. List<Personnel> personnels = new ArrayList<>();
  217. List<String> guids = new ArrayList<>();
  218. List<SystemFile> systemFiles = new ArrayList<>();
  219. List<AssoTreeNodeFile> assoTreeNodeFiles = new ArrayList<>();
  220. if (ids.size() != 0) {
  221. //根据架构id获得架构与文件关联表
  222. LambdaQueryWrapper<AssoTreeNodeFile> queryWrapper = new LambdaQueryWrapper<>();
  223. queryWrapper.in(AssoTreeNodeFile::getTreeNodeId, ids);
  224. assoTreeNodeFiles = assoTreeNodeFileService.list(queryWrapper);
  225. guids = assoTreeNodeFiles.stream().map(AssoTreeNodeFile::getFileGuid).collect(Collectors.toList());
  226. }
  227. //查询创建人名称
  228. if (createIds.size() != 0) {
  229. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  230. JSONObject jsonObject = JSONObject.parseObject(res);
  231. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  232. }
  233. //查询文件
  234. if (guids.size() != 0) {
  235. String res = fileManagerService.getSystemFileFromFMS(guids);
  236. JSONObject jsonObject = JSONObject.parseObject(res);
  237. systemFiles = JSONObject.parseArray(jsonObject.getString("data"), SystemFile.class);
  238. }
  239. //装载信息
  240. for(TreeNodeVO treeNodeVO:treeNodeVOS){
  241. //装载人员信息
  242. //TODO
  243. // Personnel personnel = personnels.stream().filter(item -> item.getId().equals(treeNodeVO.getCreateId())).findFirst().orElse(null);
  244. // if(personnel != null){
  245. // treeNodeVO.setCreateName(personnel.getPersonnelName());
  246. // }
  247. //装载文件信息
  248. List<AssoTreeNodeFile> assoTreeNodeFilesTemp = assoTreeNodeFiles.stream().filter(item -> item.getTreeNodeId().equals(treeNodeVO.getId())).collect(Collectors.toList());
  249. if(assoTreeNodeFilesTemp.size() != 0){
  250. List<String> guidTemp = assoTreeNodeFilesTemp.stream().map(AssoTreeNodeFile::getFileGuid).collect(Collectors.toList());
  251. if (guidTemp.size() != 0) {
  252. List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
  253. if (systemFileTemp.size() != 0) {
  254. treeNodeVO.setSystemFileList(systemFileTemp);
  255. }
  256. }
  257. }
  258. }
  259. }
  260. }