ProjectService.java 8.4 KB

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