ProjectServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. package com.fdkankan.site.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.fdkankan.site.common.PageInfo;
  7. import com.fdkankan.site.common.ResultCode;
  8. import com.fdkankan.site.common.util.JwtUtil;
  9. import com.fdkankan.site.common.util.VUtils;
  10. import com.fdkankan.site.entity.Project;
  11. import com.fdkankan.site.entity.ProjectBim;
  12. import com.fdkankan.site.entity.ProjectNum;
  13. import com.fdkankan.site.entity.ProjectTeam;
  14. import com.fdkankan.site.exception.BusinessException;
  15. import com.fdkankan.site.httpClient.bim.BusinessStatus;
  16. import com.fdkankan.site.httpClient.client.FdKKClient;
  17. import com.fdkankan.site.httpClient.response.FdkkResponse;
  18. import com.fdkankan.site.mapper.IProjectMapper;
  19. import com.fdkankan.site.request.ProjectAddSceneParam;
  20. import com.fdkankan.site.request.ProjectDelSceneParam;
  21. import com.fdkankan.site.request.ProjectListParam;
  22. import com.fdkankan.site.request.SceneNumParam;
  23. import com.fdkankan.site.response.ProjectInfoVo;
  24. import com.fdkankan.site.response.ProjectVo;
  25. import com.fdkankan.site.response.SceneVo;
  26. import com.fdkankan.site.response.UserData;
  27. import com.fdkankan.site.service.*;
  28. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import javax.annotation.Resource;
  34. import java.util.*;
  35. import java.util.stream.Collectors;
  36. /**
  37. * <p>
  38. * 服务实现类
  39. * </p>
  40. *
  41. * @author
  42. * @since 2022-10-10
  43. */
  44. @Service
  45. public class ProjectServiceImpl extends ServiceImpl<IProjectMapper, Project> implements IProjectService {
  46. @Autowired
  47. IProjectNumService projectNumService;
  48. @Autowired
  49. IProjectTeamService projectTeamService;
  50. @Autowired
  51. IProjectBimService projectBimService;
  52. @Autowired
  53. ISceneService sceneService;
  54. @Autowired
  55. IProjectLogService projectLogService;
  56. @Override
  57. public Object getUserData(String token) {
  58. UserData userData = new UserData();
  59. String userName = JwtUtil.getUserName(token);
  60. List<ProjectTeam> teamList = projectTeamService.getListByUserName(userName);
  61. Set<Integer> projectIds = teamList.parallelStream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
  62. List<ProjectNum> numList = projectNumService.getListByProjectIds(projectIds);
  63. long count = 0L;
  64. if(projectIds.size() >0){
  65. LambdaQueryWrapper<Project> wrapper = new LambdaQueryWrapper<>();
  66. wrapper.in(Project::getProjectId,projectIds);
  67. wrapper.eq(Project::getProjectStatus,1);
  68. count = this.count(wrapper);
  69. }
  70. userData.setProjectCount((long) projectIds.size());
  71. userData.setProjectSceneCount((long) numList.size());
  72. userData.setProjectOverCount(count);
  73. return userData;
  74. }
  75. @Override
  76. public Object pageList(ProjectListParam param, String token) {
  77. String userName = JwtUtil.getUserName(token);
  78. List<ProjectTeam> projectTeamList = projectTeamService.getListByUserName(userName);
  79. Set<Integer> projectIdSet = projectTeamList.stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
  80. if(projectIdSet.size() <=0){
  81. Page<ProjectVo> voPage = new Page<>(param.getPageNum(), param.getPageSize());
  82. voPage.setTotal(0);
  83. voPage.setRecords(new ArrayList<>());
  84. return PageInfo.PageInfo(voPage);
  85. }
  86. LambdaQueryWrapper<Project> wrapper = new LambdaQueryWrapper<>();
  87. wrapper.in(Project::getProjectId,projectIdSet);
  88. if(StringUtils.isNotBlank(param.getProjectName())){
  89. wrapper.like(Project::getProjectName,param.getProjectName());
  90. }
  91. if(StringUtils.isNotBlank(param.getStartTime())){
  92. wrapper.ge(Project::getCreateTime,param.getStartTime());
  93. }
  94. if(StringUtils.isNotBlank(param.getEndTime())){
  95. wrapper.le(Project::getCreateTime,param.getEndTime());
  96. }
  97. if(param.getProjectStatus() !=null){
  98. wrapper.eq(Project::getProjectStatus,param.getProjectStatus());
  99. }
  100. if(StringUtils.isNotBlank(param.getProjectCreater())){
  101. Set<Integer> projectIds = projectTeamService.getProjectIdByCreater(param.getProjectCreater());
  102. if(projectIds.size() >0){
  103. wrapper.in(Project::getProjectId,projectIds);
  104. }
  105. }
  106. wrapper.orderByDesc(Project::getCreateTime);
  107. Page<Project> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  108. Set<Integer> projectIds = page.getRecords().stream().map(Project::getProjectId).collect(Collectors.toSet());
  109. HashMap<Integer,String> createrMap = projectTeamService.getProjectCreaterMap(projectIds);
  110. List<ProjectVo> voList = new ArrayList<>();
  111. for (Project record : page.getRecords()) {
  112. ProjectVo projectVo = new ProjectVo();
  113. BeanUtils.copyProperties(record,projectVo);
  114. projectVo.setProjectCreater(createrMap.get(record.getProjectId()));
  115. voList.add(projectVo);
  116. }
  117. Page<ProjectVo> voPage = new Page<>(param.getPageNum(), param.getPageSize());
  118. voPage.setTotal(page.getTotal());
  119. voPage.setRecords(voList);
  120. return PageInfo.PageInfo(voPage);
  121. }
  122. @Override
  123. public ProjectInfoVo getProjectInfo(Integer projectId) {
  124. VUtils.isTure(projectId == null).throwMessage(ResultCode.PARAM_MISS);
  125. Project project = this.getById(projectId);
  126. VUtils.isTure(project == null).throwMessage(ResultCode.PROJECT_NOT_EXIST);
  127. ProjectInfoVo infoVo = new ProjectInfoVo();
  128. BeanUtils.copyProperties(project,infoVo);
  129. ProjectTeam projectCreater = projectTeamService.getProjectCreater(projectId);
  130. if(projectCreater!= null){
  131. infoVo.setProjectCreater(projectCreater.getUserName());
  132. }
  133. infoVo.setSceneList(this.getSceneList(projectId));
  134. ProjectBim bim = null;
  135. List<ProjectBim> projectBims = projectBimService.getByProjectId(projectId);
  136. for (ProjectBim projectBim : projectBims) {
  137. if(projectBim.getBimStatus().equals(BusinessStatus.DONE.getInfo()) ||
  138. projectBim.getBimStatus().equals(BusinessStatus.UPLOAD.getInfo())){
  139. bim = projectBim;
  140. }
  141. }
  142. infoVo.setBimData(bim);
  143. return infoVo;
  144. }
  145. @Override
  146. public void over(Project param) {
  147. VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
  148. LambdaUpdateWrapper<Project> wrapper = new LambdaUpdateWrapper<>();
  149. wrapper.eq(Project::getProjectId,param.getProjectId())
  150. .set(Project::getProjectStatus,1);
  151. this.update(wrapper);
  152. }
  153. @Override
  154. public List<SceneVo> getSceneList(Integer projectId) {
  155. Set<Integer> projectIds = new HashSet<>(Arrays.asList(projectId));
  156. List<ProjectNum> projectNums = projectNumService.getListByProjectIds(projectIds);
  157. HashMap<Integer,List<String>> typeMap = projectNumService.getTypeMap(projectNums);
  158. List<SceneVo> list = new ArrayList<>();
  159. if(typeMap.size() >0){
  160. list = sceneService.getListByNumMap(typeMap);
  161. }
  162. return list;
  163. }
  164. @Override
  165. public Project addProject(Project param, String token) {
  166. VUtils.isTure(StringUtils.isBlank(param.getProjectName()) ).throwMessage(ResultCode.PARAM_MISS);
  167. Project project = new Project();
  168. BeanUtils.copyProperties(param,project);
  169. this.save(project);
  170. projectTeamService.addProject(project.getProjectId(),token);
  171. return project;
  172. }
  173. @Override
  174. public void addScene(ProjectAddSceneParam param) {
  175. Project project = this.getById(param.getProjectId());
  176. VUtils.isTure(project == null).throwMessage(ResultCode.PARAM_MISS);
  177. Set<Integer> projectIds = new HashSet<>(Arrays.asList(param.getProjectId()));
  178. List<ProjectNum> projectNums = projectNumService.getListByProjectIds(projectIds);
  179. List<String> hasNumList = projectNums.stream().map(ProjectNum::getNum).collect(Collectors.toList());
  180. List<String> paramNumList = new ArrayList<>();
  181. HashMap<String, Integer> numType = new HashMap<>();
  182. List<SceneNumParam> sceneNumParam = param.getSceneNumParam();
  183. for (SceneNumParam numParam : sceneNumParam) {
  184. if(numParam.getNumList() == null || numParam.getNumList().size() <=0){
  185. continue;
  186. }
  187. for (String num : numParam.getNumList()) {
  188. numType.put(num,numParam.getType());
  189. }
  190. paramNumList.addAll(numParam.getNumList());
  191. }
  192. List<String> delNumList = new ArrayList<>();
  193. for (String num : hasNumList) {
  194. if(!paramNumList.contains(num)){
  195. delNumList.add(num);
  196. }
  197. }
  198. List<String> addNumList = new ArrayList<>();
  199. for (String num : paramNumList) {
  200. if(!hasNumList.contains(num)){
  201. addNumList.add(num);
  202. }
  203. }
  204. Set<String> numList = projectNumService.getNumList();
  205. for (String num : addNumList) {
  206. if(numList.contains(num)){
  207. throw new BusinessException(ResultCode.SCENE_BIND.code,num +ResultCode.SCENE_BIND.msg);
  208. }
  209. }
  210. if(delNumList.size() >0){
  211. projectNumService.delByNumList(param.getProjectId(),delNumList);
  212. projectLogService.addLog(param.getProjectId(),"删除场景",param.getToken(),delNumList);
  213. }
  214. if(addNumList.size() >0){
  215. projectNumService.addByNumList(param.getProjectId(),numType,addNumList);
  216. projectLogService.addLog(param.getProjectId(),"添加场景",param.getToken(),addNumList);
  217. }
  218. project.setUpdateTime(null);
  219. this.updateById(project);
  220. }
  221. @Override
  222. public void delScene(ProjectDelSceneParam param) {
  223. Project project = this.getById(param.getProjectId());
  224. VUtils.isTure(project == null).throwMessage(ResultCode.PARAM_MISS);
  225. VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
  226. VUtils.isTure(StringUtils.isBlank(param.getNum())).throwMessage(ResultCode.PARAM_MISS);
  227. projectNumService.delByNumList(param.getProjectId(),Arrays.asList(param.getNum()));
  228. projectLogService.addLog(param.getProjectId(),"删除场景",param.getToken(),Arrays.asList(param.getNum()));
  229. project.setUpdateTime(null);
  230. this.updateById(project);
  231. }
  232. @Override
  233. public void deleteBim(Integer bimId,String token) {
  234. ProjectBim bim = projectBimService.getById(bimId);
  235. if(bim != null){
  236. projectLogService.addLog(bim.getProjectId(),"删除BIM:"+bim.getBimName(),token,null);
  237. projectBimService.removeById(bimId);
  238. }
  239. }
  240. @Override
  241. public HashMap<Integer, Project> getByIds(Set<Integer> projectIds) {
  242. HashMap<Integer, Project> map = new HashMap<>();
  243. if(projectIds.size() >0){
  244. LambdaQueryWrapper<Project> wrapper = new LambdaQueryWrapper<>();
  245. wrapper.in(Project::getProjectId,projectIds);
  246. List<Project> list = this.list(wrapper);
  247. list.forEach(entity -> map.put(entity.getProjectId(),entity));
  248. }
  249. return map;
  250. }
  251. @Override
  252. public HashMap<Integer, Project> getAndDelByIds(Set<Integer> projectIds) {
  253. HashMap<Integer, Project> map = new HashMap<>();
  254. if(projectIds.size() >0){
  255. List<Project> list = this.getBaseMapper().getAndDelByIds(projectIds);
  256. list.forEach(entity -> map.put(entity.getProjectId(),entity));
  257. }
  258. return map;
  259. }
  260. @Override
  261. public void updateName(Project param) {
  262. VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
  263. LambdaUpdateWrapper<Project> wrapper = new LambdaUpdateWrapper<>();
  264. wrapper.eq(Project::getProjectId,param.getProjectId());
  265. if(StringUtils.isNotBlank(param.getProjectName())){
  266. wrapper.set(Project::getProjectName,param.getProjectName());
  267. }
  268. if(StringUtils.isNotBlank(param.getProjectMsg())){
  269. wrapper.set(Project::getProjectMsg,param.getProjectMsg());
  270. }
  271. if(StringUtils.isNotBlank(param.getProjectImg())){
  272. wrapper.set(Project::getProjectImg,param.getProjectImg());
  273. }
  274. this.update(wrapper);
  275. }
  276. @Override
  277. public void updateBimName(ProjectBim projectBim,String token) {
  278. projectBimService.updateBimName(projectBim);
  279. projectLogService.addLog(projectBim.getProjectId(),"修改BIM名称:"+projectBim.getBimName(),token,null);
  280. }
  281. @Override
  282. public void updatePanos(Project param) {
  283. VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
  284. VUtils.isTure(StringUtils.isBlank(param.getPanos())).throwMessage(ResultCode.PARAM_MISS);
  285. LambdaUpdateWrapper<Project> wrapper = new LambdaUpdateWrapper<>();
  286. wrapper.eq(Project::getProjectId,param.getProjectId());
  287. if(StringUtils.isNotBlank(param.getPanos())){
  288. wrapper.set(Project::getPanos,param.getPanos());
  289. }
  290. this.update(wrapper);
  291. }
  292. }