123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- 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<Long> itemIds = new ArrayList<>();
- List<ProjectItem> 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<Project> 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<Project> getLimit(Project project, int currPage, int pageSize) {
- int currIndex = (currPage - 1) * pageSize;
- List<Project> 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<Project> getProjectByOrganizationId(long organizationId) {
- return projectDao.getProjectByOrganizationId(organizationId);
- }
- public List<Project> getIds(List<Long> ids) {
- return projectDao.getIds(ids);
- }
- public List<Project> getProjectListIdentity() {
- UserContext userContext = ContextUtils.getUserContext();
- List<Project> list = new ArrayList<>();
- if (userContext.getUserId() == 1) {
- Set<JSONObject> set = new HashSet<>();
- set.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA));
- list = getAll();
- for (Project project : list) {
- project.setProjectListIdentity(set);
- }
- return list;
- }
- // 项目管理员
- Map<Long, Project> map = new HashMap();
- List<MgrOrganization> 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<JSONObject> set = new HashSet<>();
- set.add(JSONObject.parseObject(UserContext.IDENTITY_OWNER_DATA));
- for (Project project : list) {
- project.setProjectListIdentity(set);
- map.put(project.getId(), project);
- }
- }
- }
- // 组织和组织关联的
- Map<Long, Set<JSONObject>> projectListIdentity = userContext.getProjectListIdentity();
- List<Long> ids = new ArrayList<>();
- projectListIdentity.forEach((key, value) -> ids.add(key));
- if (ids.size() > 0) {
- // 所有者
- if (list.size() > 0) {
- List<Project> ls = getIds(ids);
- Map<Long, Project> mapID = new HashMap();
- for (Project project : ls) {
- Set<JSONObject> 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<Project> getBimByList() {
- List<Project> projectList = new ArrayList<>();
- for (Project p : projectDao.getAll()) {
- List<ProjectItem> items = new ArrayList<>();
- List<ProjectItem> 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<ProjectItem> projectItemList = p.getProjectItemList();
- Map<Long, ProjectItem> itemMap = new HashMap<>();
- List<Long> itemIds = new ArrayList<>();
- for (ProjectItem projectItem : projectItemList) {
- itemIds.add(projectItem.getId());
- itemMap.put(projectItem.getId(), projectItem);
- }
- if (itemIds.size() == 0) {
- return jsonArray;
- }
- List<Long> targetIds = new ArrayList<>();
- Map<Long, ProjectItemTarget> itemTargetMap = new HashMap<>();
- List<ProjectItemTarget> projectItemTargetList = projectItemTargetDao.getProjectItemIds(itemIds);
- for (ProjectItemTarget projectItemTarget : projectItemTargetList) {
- targetIds.add(projectItemTarget.getId());
- itemTargetMap.put(projectItemTarget.getId(), projectItemTarget);
- }
- if (targetIds.size() == 0) {
- return jsonArray;
- }
- Map<String, Long> bimModelMap = new HashMap<>();
- List<String> bimIds = new ArrayList<>();
- List<BimModelTarget> 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;
- }
- }
|