StructureServiceImpl.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package cn.cslg.pas.service.impl;
  2. import cn.cslg.pas.common.model.dto.StructureAddNewDTO;
  3. import cn.cslg.pas.common.model.dto.StructureQueryPageDTO;
  4. import cn.cslg.pas.common.model.dto.StructureUpdateDTO;
  5. import cn.cslg.pas.common.model.dto.UploadFileDTO;
  6. import cn.cslg.pas.common.model.vo.StructureVO;
  7. import cn.cslg.pas.common.utils.FileUtils;
  8. import cn.cslg.pas.domain.Structure;
  9. import cn.cslg.pas.domain.asso.AssoStructurePicture;
  10. import cn.cslg.pas.exception.XiaoShiException;
  11. import cn.cslg.pas.mapper.AssoStructurePictureMapper;
  12. import cn.cslg.pas.mapper.StructureMapper;
  13. import cn.cslg.pas.service.IStructureService;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.BeanUtils;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. /**
  22. * 架构的Service层接口实现类
  23. *
  24. * @Author chenyu
  25. * @Date 2023/3/10
  26. */
  27. @RequiredArgsConstructor
  28. @Slf4j
  29. @Service
  30. public class StructureServiceImpl implements IStructureService {
  31. private final StructureMapper structureMapper;
  32. private final AssoStructurePictureMapper assoStructurePictureMapper;
  33. private final FileUtils fileUtils;
  34. /**
  35. * 新增架构
  36. *
  37. * @param structureAddNewDTO 新增架构DTO对象
  38. * @param files 架构图片
  39. */
  40. @Override
  41. public void addNew(StructureAddNewDTO structureAddNewDTO, List<MultipartFile> files) {
  42. log.info("开始处理【新增架构】的业务,参数为:{}, {}", structureAddNewDTO, files);
  43. //取出DTO中父级id,若父级id为null则表示该架构为第1级架构,手动给其父级id设为0
  44. if (structureAddNewDTO.getParentId() == null) {
  45. structureAddNewDTO.setParentId(0);
  46. }
  47. Integer parentId = structureAddNewDTO.getParentId();
  48. String structureName = structureAddNewDTO.getStructureName();
  49. //检查名称是否被占用(检查当前父级下是否有同名架构)
  50. log.info("检查名称是否被占用(检查当前父级下是否有同名架构)");
  51. int count = structureMapper.countByparentIdAndStructureName(parentId, structureName);
  52. if (count > 0) {
  53. String message = "新增架构失败,当前父级下已存在【" + structureName + "】";
  54. log.info("{}", message);
  55. throw new XiaoShiException(message);
  56. }
  57. //DTO对象赋值给实体类
  58. Structure structure = new Structure();
  59. BeanUtils.copyProperties(structureAddNewDTO, structure);
  60. //数据入架构表(此时数据暂不含路径path)
  61. log.info("数据入架构表");
  62. int rows = structureMapper.insert(structure);
  63. if (rows != 1) {
  64. String message = "新增架构失败,服务器忙请稍后再次尝试!";
  65. log.info("{}", message);
  66. throw new XiaoShiException(message);
  67. }
  68. //数据入架构表后,取出id
  69. Integer structureId = structure.getId();
  70. String parentPath = structureAddNewDTO.getParentPath();
  71. String path;
  72. if (parentPath != null) {
  73. path = parentPath + "," + structureId;
  74. } else {
  75. path = "0," + structureId;
  76. }
  77. structure.setPath(path);
  78. log.info("更新架构表");
  79. rows = structureMapper.update(structure);
  80. if (rows != 1) {
  81. String message = "新增架构失败,服务器忙请稍后再次尝试!";
  82. log.info("{}", message);
  83. throw new XiaoShiException(message);
  84. }
  85. //如果前端有传来架构图片,则图片上传服务器并获取图片信息,将图片信息入架构图片关联表
  86. if (files != null && files.size() > 0) {
  87. ArrayList<AssoStructurePicture> assoStructurePictures = new ArrayList<>();
  88. for (MultipartFile file : files) {
  89. UploadFileDTO fileDTO = fileUtils.uploadFile(file);
  90. AssoStructurePicture assoStructurePicture = new AssoStructurePicture()
  91. .setStructureId(structureId)
  92. .setName(fileDTO.getName())
  93. .setSuffix(fileDTO.getExtName())
  94. .setUrl(fileDTO.getPath());
  95. assoStructurePictures.add(assoStructurePicture);
  96. }
  97. rows = assoStructurePictureMapper.insertBatch(assoStructurePictures);
  98. if (rows != assoStructurePictures.size()) {
  99. String message = "新增架构失败,数据入架构图片关联表失败,服务器忙请稍后再次尝试!";
  100. log.info("{}", message);
  101. throw new XiaoShiException(message);
  102. }
  103. }
  104. log.info("新增架构完成");
  105. }
  106. /**
  107. * 修改架构
  108. *
  109. * @param structureUpdateDTO 修改架构DTO对象
  110. * @param files 架构图片
  111. */
  112. @Override
  113. public void update(StructureUpdateDTO structureUpdateDTO, List<MultipartFile> files) {
  114. }
  115. /**
  116. * 分页查询架构树
  117. *
  118. * @param structureQueryPageDTO 分页信息
  119. * @return 返回查询到的数据
  120. */
  121. @Override
  122. public StructureVO query(StructureQueryPageDTO structureQueryPageDTO) {
  123. log.info("开始处理【分页查询架构】的业务,参数为:{}", structureQueryPageDTO);
  124. //取出DTO中structureId,若structureId为null则表示查询的是整个架构树,手动给structureId设为0
  125. if (structureQueryPageDTO.getStructureId() == null) {
  126. structureQueryPageDTO.setStructureId(0);
  127. }
  128. //从DTO中取出产品id、架构id、架构名称
  129. Integer productId = structureQueryPageDTO.getProductId();
  130. Integer structureId = structureQueryPageDTO.getStructureId();
  131. String structureName = structureQueryPageDTO.getStructureName();
  132. StructureVO structureVO = new StructureVO()
  133. .setProductId(productId)
  134. .setId(structureId)
  135. .setStructureName(structureName);
  136. diGui(structureVO, structureId);
  137. return structureVO;
  138. }
  139. //递归组装架构集合树
  140. private void diGui(StructureVO structureVO, Integer structureId) {
  141. List<StructureVO> structureVOs = structureMapper.selectByParentId(structureId);
  142. if (structureVOs != null) {
  143. structureVO.setChildren(structureVOs);
  144. for (StructureVO n : structureVOs) {
  145. structureId = n.getId();
  146. diGui(n, structureId);
  147. }
  148. }
  149. }
  150. }