ProjectService.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package com.bosshand.virgo.api.service;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.bosshand.virgo.api.dao.BimModelTargetDao;
  5. import com.bosshand.virgo.api.dao.ProjectDao;
  6. import com.bosshand.virgo.api.dao.ProjectItemDao;
  7. import com.bosshand.virgo.api.dao.ProjectItemTargetDao;
  8. import com.bosshand.virgo.api.model.BimModelTarget;
  9. import com.bosshand.virgo.api.model.Project;
  10. import com.bosshand.virgo.api.model.ProjectItem;
  11. import com.bosshand.virgo.api.model.ProjectItemTarget;
  12. import com.bosshand.virgo.api.util.PositionUtil;
  13. import com.bosshand.virgo.core.model.MgrOrganization;
  14. import com.bosshand.virgo.core.model.UserContext;
  15. import com.bosshand.virgo.core.utils.ContextUtils;
  16. import com.bosshand.virgo.core.utils.StringUtil;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.util.*;
  20. import java.util.stream.Collectors;
  21. @Service
  22. public class ProjectService {
  23. @Autowired
  24. private ProjectDao projectDao;
  25. @Autowired
  26. private ProjectItemDao projectItemDao;
  27. @Autowired
  28. private ProjectItemTargetDao projectItemTargetDao;
  29. @Autowired
  30. private BimModelTargetDao bimModelTargetDao;
  31. @Autowired
  32. private BimClient bimClient;
  33. public Project getLevel(long id) {
  34. Project project = projectDao.get(id);
  35. List<Long> itemIds = new ArrayList<>();
  36. List<ProjectItem> projectItemList = project.getProjectItemList();
  37. if (projectItemList != null) {
  38. projectItemList.forEach(ls -> itemIds.add(ls.getId()));
  39. }
  40. List<Long> targetIds = new ArrayList<>();
  41. if (itemIds.size() > 0) {
  42. List<ProjectItem> items = projectItemDao.getIds(itemIds);
  43. for (ProjectItem item : items) {
  44. List<ProjectItemTarget> projectItemTargetList = item.getProjectItemTargetList();
  45. if (projectItemTargetList.size() > 0) {
  46. projectItemTargetList.forEach(l -> targetIds.add(l.getId()));
  47. }
  48. }
  49. if (targetIds.size() > 0) {
  50. List<ProjectItemTarget> targetList = projectItemTargetDao.getIds(targetIds);
  51. if (targetList.size() > 0) {
  52. Map<Long, List<ProjectItemTarget>> map = targetList.stream().collect(Collectors.groupingBy(ProjectItemTarget::getProjectItemId));
  53. for (ProjectItem item : items) {
  54. item.setProjectItemTargetList(map.get(item.getId()));
  55. }
  56. }
  57. }
  58. project.setProjectItemList(items);
  59. }
  60. return project;
  61. }
  62. public Project get(long id) {
  63. Project project = projectDao.get(id);
  64. List<Long> itemIds = new ArrayList<>();
  65. List<ProjectItem> projectItemList = project.getProjectItemList();
  66. if (projectItemList != null) {
  67. projectItemList.forEach(ls -> itemIds.add(ls.getId()));
  68. }
  69. if (itemIds.size() > 0) {
  70. project.setProjectItemList(projectItemDao.getIds(itemIds));
  71. }
  72. return project;
  73. }
  74. public Project getProject(long id) {
  75. return projectDao.getProject(id);
  76. }
  77. public List<Project> getAll() {
  78. return projectDao.getAll();
  79. }
  80. public Project insert(Project project) {
  81. projectDao.insert(project);
  82. return project;
  83. }
  84. public int update(Project project) {
  85. return projectDao.update(project);
  86. }
  87. public int getTotalCount(Project project) {
  88. return projectDao.getTotalCount(project);
  89. }
  90. public List<Project> getLimit(Project project, int currPage, int pageSize) {
  91. int currIndex = (currPage - 1) * pageSize;
  92. List<Project> list = projectDao.getLimit(project, currIndex, pageSize);
  93. // 如果传入当前位置坐标就返回项目和当前位置坐标的距离(km)
  94. if (StringUtil.notBlank(project.getCoordinates())) {
  95. String[] currentCoordinates = project.getCoordinates().split(",");
  96. for (Project p : list) {
  97. if (StringUtil.notBlank(p.getCoordinates())) {
  98. String[] targetCoordinates = p.getCoordinates().split(",");
  99. Double distance = PositionUtil.getDistance4(
  100. Double.parseDouble(currentCoordinates[0]),
  101. Double.parseDouble(currentCoordinates[1]),
  102. Double.parseDouble(targetCoordinates[0]),
  103. Double.parseDouble(targetCoordinates[1])
  104. );
  105. p.setDistance(distance);
  106. }
  107. }
  108. }
  109. return list;
  110. }
  111. /**
  112. * 返回距离
  113. */
  114. public Project coordinates(Project p, String coordinates) {
  115. if (StringUtil.notBlank(coordinates)) {
  116. String[] currentCoordinates = coordinates.split(",");
  117. if (StringUtil.notBlank(p.getCoordinates())) {
  118. String[] targetCoordinates = p.getCoordinates().split(",");
  119. Double distance = PositionUtil.getDistance4(
  120. Double.parseDouble(currentCoordinates[0]),
  121. Double.parseDouble(currentCoordinates[1]),
  122. Double.parseDouble(targetCoordinates[0]),
  123. Double.parseDouble(targetCoordinates[1])
  124. );
  125. p.setDistance(distance);
  126. }
  127. }
  128. return p;
  129. }
  130. public void deleteProject(long id) {
  131. projectDao.delete(id);
  132. }
  133. public List<Project> getProjectByOrganizationId(long organizationId) {
  134. return projectDao.getProjectByOrganizationId(organizationId);
  135. }
  136. public List<Project> getIds(List<Long> ids) {
  137. return projectDao.getIds(ids);
  138. }
  139. public List<Project> getProjectListIdentity() {
  140. UserContext userContext = ContextUtils.getUserContext();
  141. List<Project> list = new ArrayList<>();
  142. if (userContext.getUserId() == 1) {
  143. Set<JSONObject> set = new HashSet<>();
  144. set.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA));
  145. list = getAll();
  146. for (Project project : list) {
  147. project.setProjectListIdentity(set);
  148. }
  149. return list;
  150. }
  151. // 项目管理员
  152. Map<Long, Project> map = new HashMap();
  153. List<MgrOrganization> organizationList = userContext.getOrganizationList();
  154. long adminOrganizationId = 0;
  155. for (MgrOrganization o : organizationList) {
  156. if (o.isB()) {
  157. adminOrganizationId = o.getId();
  158. }
  159. }
  160. if (adminOrganizationId != 0) {
  161. list = projectDao.getProjectByOrganizationId(adminOrganizationId);
  162. if (list != null && list.size() > 0) {
  163. Set<JSONObject> set = new HashSet<>();
  164. set.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA));
  165. for (Project project : list) {
  166. project.setProjectListIdentity(set);
  167. map.put(project.getId(), project);
  168. }
  169. }
  170. }
  171. // 组织和组织关联的
  172. Map<Long, Set<JSONObject>> projectListIdentity = userContext.getProjectListIdentity();
  173. List<Long> ids = new ArrayList<>();
  174. projectListIdentity.forEach((key, value) -> ids.add(key));
  175. if (ids.size() > 0) {
  176. // 所有者
  177. if (list.size() > 0) {
  178. List<Project> ls = getIds(ids);
  179. Map<Long, Project> mapID = new HashMap();
  180. for (Project project : ls) {
  181. Set<JSONObject> jsonObjects = projectListIdentity.get(project.getId());
  182. if(map.containsKey(project.getId())){
  183. jsonObjects.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA));
  184. }
  185. project.setProjectListIdentity(jsonObjects);
  186. mapID.put(project.getId(), project);
  187. }
  188. for (Project project : list) {
  189. if (!mapID.containsKey(project.getId())) {
  190. ls.add(project);
  191. }
  192. }
  193. return ls;
  194. }
  195. list = getIds(ids);
  196. for (Project project : list) {
  197. project.setProjectListIdentity(projectListIdentity.get(project.getId()));
  198. }
  199. return list;
  200. }
  201. return list;
  202. }
  203. public List<Project> getBimByList() {
  204. List<Project> projectList = new ArrayList<>();
  205. for (Project p : projectDao.getAll()) {
  206. List<ProjectItem> items = new ArrayList<>();
  207. List<ProjectItem> projectItemList = p.getProjectItemList();
  208. for (int i = 0; i < projectItemList.size(); i++) {
  209. if (projectItemList.get(i).getBimIntegrateId() != null && projectItemList.get(i).getBimIntegrateId() != "") {
  210. items.add(projectItemList.get(i));
  211. }
  212. }
  213. p.setProjectItemList(items);
  214. if (items.size() > 0) {
  215. projectList.add(p);
  216. }
  217. }
  218. return projectList;
  219. }
  220. public JSONArray bimList(long id) {
  221. JSONArray jsonArray = new JSONArray();
  222. Project p = projectDao.get(id);
  223. List<ProjectItem> projectItemList = p.getProjectItemList();
  224. Map<Long, ProjectItem> itemMap = new HashMap<>();
  225. List<Long> itemIds = new ArrayList<>();
  226. for (ProjectItem projectItem : projectItemList) {
  227. itemIds.add(projectItem.getId());
  228. itemMap.put(projectItem.getId(), projectItem);
  229. }
  230. if (itemIds.size() == 0) {
  231. return jsonArray;
  232. }
  233. List<Long> targetIds = new ArrayList<>();
  234. Map<Long, ProjectItemTarget> itemTargetMap = new HashMap<>();
  235. List<ProjectItemTarget> projectItemTargetList = projectItemTargetDao.getProjectItemIds(itemIds);
  236. for (ProjectItemTarget projectItemTarget : projectItemTargetList) {
  237. targetIds.add(projectItemTarget.getId());
  238. itemTargetMap.put(projectItemTarget.getId(), projectItemTarget);
  239. }
  240. if (targetIds.size() == 0) {
  241. return jsonArray;
  242. }
  243. Map<String, Long> bimModelMap = new HashMap<>();
  244. List<String> bimIds = new ArrayList<>();
  245. List<BimModelTarget> bimList = bimModelTargetDao.getProjectItemTargetIds(targetIds);
  246. for (BimModelTarget bim : bimList) {
  247. if (StringUtil.notBlank(bim.getBims())) {
  248. String[] split = bim.getBims().split(",");
  249. for (int i = 0; i < split.length; i++) {
  250. bimIds.add(split[i]);
  251. bimModelMap.put(split[i], bim.getProjectItemTargetId());
  252. }
  253. }
  254. }
  255. if (bimIds.size() == 0) {
  256. return jsonArray;
  257. }
  258. String join = String.join(",", bimIds);
  259. jsonArray = JSONObject.parseArray(bimClient.getBimIds(join));
  260. for (int i = 0; i < jsonArray.size(); i++) {
  261. JSONObject jo = jsonArray.getJSONObject(i);
  262. long targetId = bimModelMap.get(jo.getString("id"));
  263. ProjectItemTarget projectItemTarget = itemTargetMap.get(targetId);
  264. ProjectItem projectItem = itemMap.get(projectItemTarget.getProjectItemId());
  265. jo.put("projectItemId", projectItem.getId());
  266. jo.put("projectItemName", projectItem.getName());
  267. jo.put("projectItemTargetId", projectItemTarget.getId());
  268. jo.put("projectItemTargetName", projectItemTarget.getName());
  269. }
  270. return jsonArray;
  271. }
  272. }