package com.bosshand.virgo.api.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.bosshand.virgo.api.dao.BimModelTargetDao; import com.bosshand.virgo.api.dao.ProjectDao; import com.bosshand.virgo.api.dao.ProjectItemDao; import com.bosshand.virgo.api.dao.ProjectItemTargetDao; import com.bosshand.virgo.api.model.BimModelTarget; import com.bosshand.virgo.api.model.Project; import com.bosshand.virgo.api.model.ProjectItem; import com.bosshand.virgo.api.model.ProjectItemTarget; import com.bosshand.virgo.api.util.PositionUtil; import com.bosshand.virgo.core.model.MgrOrganization; import com.bosshand.virgo.core.model.UserContext; import com.bosshand.virgo.core.utils.ContextUtils; import com.bosshand.virgo.core.utils.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class ProjectService { @Autowired private ProjectDao projectDao; @Autowired private ProjectItemDao projectItemDao; @Autowired private ProjectItemTargetDao projectItemTargetDao; @Autowired private BimModelTargetDao bimModelTargetDao; @Autowired private BimClient bimClient; public Project get(long id) { Project project = projectDao.get(id); List itemIds = new ArrayList<>(); List projectItemList = project.getProjectItemList(); if (projectItemList != null) { projectItemList.forEach(ls -> itemIds.add(ls.getId())); } if (itemIds.size() > 0) { project.setProjectItemList(projectItemDao.getIds(itemIds)); } return project; } public Project getProject(long id) { return projectDao.getProject(id); } public List getAll() { return projectDao.getAll(); } public Project insert(Project project) { projectDao.insert(project); return project; } public int update(Project project) { return projectDao.update(project); } public int getTotalCount(Project project) { return projectDao.getTotalCount(project); } public List getLimit(Project project, int currPage, int pageSize) { int currIndex = (currPage - 1) * pageSize; List list = projectDao.getLimit(project, currIndex, pageSize); // 如果传入当前位置坐标就返回项目和当前位置坐标的距离(km) if (StringUtil.notBlank(project.getCoordinates())) { String[] currentCoordinates = project.getCoordinates().split(","); for (Project p : list) { if (StringUtil.notBlank(p.getCoordinates())) { String[] targetCoordinates = p.getCoordinates().split(","); Double distance = PositionUtil.getDistance4( Double.parseDouble(currentCoordinates[0]), Double.parseDouble(currentCoordinates[1]), Double.parseDouble(targetCoordinates[0]), Double.parseDouble(targetCoordinates[1]) ); p.setDistance(distance); } } } return list; } /** * 返回距离 */ public Project coordinates(Project p, String coordinates) { if (StringUtil.notBlank(coordinates)) { String[] currentCoordinates = coordinates.split(","); if (StringUtil.notBlank(p.getCoordinates())) { String[] targetCoordinates = p.getCoordinates().split(","); Double distance = PositionUtil.getDistance4( Double.parseDouble(currentCoordinates[0]), Double.parseDouble(currentCoordinates[1]), Double.parseDouble(targetCoordinates[0]), Double.parseDouble(targetCoordinates[1]) ); p.setDistance(distance); } } return p; } public void deleteProject(long id) { projectDao.delete(id); } public List getProjectByOrganizationId(long organizationId) { return projectDao.getProjectByOrganizationId(organizationId); } public List getIds(List ids) { return projectDao.getIds(ids); } public List getProjectListIdentity() { UserContext userContext = ContextUtils.getUserContext(); List list = new ArrayList<>(); if (userContext.getUserId() == 1) { Set set = new HashSet<>(); set.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA)); list = getAll(); for (Project project : list) { project.setProjectListIdentity(set); } return list; } // 项目管理员 Map map = new HashMap(); List organizationList = userContext.getOrganizationList(); long adminOrganizationId = 0; for (MgrOrganization o : organizationList) { if (o.isB()) { adminOrganizationId = o.getId(); } } if (adminOrganizationId != 0) { list = projectDao.getProjectByOrganizationId(adminOrganizationId); if (list != null && list.size() > 0) { Set set = new HashSet<>(); set.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA)); for (Project project : list) { project.setProjectListIdentity(set); map.put(project.getId(), project); } } } // 组织和组织关联的 Map> projectListIdentity = userContext.getProjectListIdentity(); List ids = new ArrayList<>(); projectListIdentity.forEach((key, value) -> ids.add(key)); if (ids.size() > 0) { // 所有者 if (list.size() > 0) { List ls = getIds(ids); Map mapID = new HashMap(); for (Project project : ls) { Set jsonObjects = projectListIdentity.get(project.getId()); if(map.containsKey(project.getId())){ jsonObjects.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA)); } project.setProjectListIdentity(jsonObjects); mapID.put(project.getId(), project); } for (Project project : list) { if (!mapID.containsKey(project.getId())) { ls.add(project); } } return ls; } list = getIds(ids); for (Project project : list) { project.setProjectListIdentity(projectListIdentity.get(project.getId())); } return list; } return list; } public List getBimByList() { List projectList = new ArrayList<>(); for (Project p : projectDao.getAll()) { List items = new ArrayList<>(); List projectItemList = p.getProjectItemList(); for (int i = 0; i < projectItemList.size(); i++) { if (projectItemList.get(i).getBimIntegrateId() != null && projectItemList.get(i).getBimIntegrateId() != "") { items.add(projectItemList.get(i)); } } p.setProjectItemList(items); if (items.size() > 0) { projectList.add(p); } } return projectList; } public JSONArray bimList(long id) { JSONArray jsonArray = new JSONArray(); Project p = projectDao.get(id); List projectItemList = p.getProjectItemList(); Map itemMap = new HashMap<>(); List itemIds = new ArrayList<>(); for (ProjectItem projectItem : projectItemList) { itemIds.add(projectItem.getId()); itemMap.put(projectItem.getId(), projectItem); } if (itemIds.size() == 0) { return jsonArray; } List targetIds = new ArrayList<>(); Map itemTargetMap = new HashMap<>(); List projectItemTargetList = projectItemTargetDao.getProjectItemIds(itemIds); for (ProjectItemTarget projectItemTarget : projectItemTargetList) { targetIds.add(projectItemTarget.getId()); itemTargetMap.put(projectItemTarget.getId(), projectItemTarget); } if (targetIds.size() == 0) { return jsonArray; } Map bimModelMap = new HashMap<>(); List bimIds = new ArrayList<>(); List bimList = bimModelTargetDao.getProjectItemTargetIds(targetIds); for (BimModelTarget bim : bimList) { if (bim.getBims() != null) { String[] split = bim.getBims().split(","); for (int i = 0; i < split.length; i++) { bimIds.add(split[i]); bimModelMap.put(split[i], bim.getProjectItemTargetId()); } } } if (bimIds.size() == 0) { return jsonArray; } String join = String.join(",", bimIds); jsonArray = JSONObject.parseArray(bimClient.getBimIds(join)); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jo = jsonArray.getJSONObject(i); long targetId = bimModelMap.get(jo.getString("id")); ProjectItemTarget projectItemTarget = itemTargetMap.get(targetId); ProjectItem projectItem = itemMap.get(projectItemTarget.getProjectItemId()); jo.put("projectItemId", projectItem.getId()); jo.put("projectItemName", projectItem.getName()); jo.put("projectItemTargetId", projectItemTarget.getId()); jo.put("projectItemTargetName", projectItemTarget.getName()); } return jsonArray; } }