DepartmentService.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. package com.bosshand.virgo.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.bosshand.virgo.core.dao.*;
  6. import com.bosshand.virgo.core.model.*;
  7. import com.bosshand.virgo.util.StringUtil;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import java.util.*;
  11. @Service
  12. public class DepartmentService {
  13. @Autowired
  14. MgrDepartmentDao mgrDepartmentDao;
  15. @Autowired
  16. MgrOrganizationTypeDao mgrOrganizationTypeDao;
  17. @Autowired
  18. MgrOrganizationDao mgrOrganizationDao;
  19. @Autowired
  20. MgrUserRoleDao mgrUserRoleDao;
  21. @Autowired
  22. MgrUserDao mgrUserDao;
  23. @Autowired
  24. AttendanceDao attendanceDao;
  25. public void saveDepartment(MgrDepartment department) {
  26. mgrDepartmentDao.insert(department);
  27. }
  28. public void deleteDepartment(int id) {
  29. mgrDepartmentDao.delete(id);
  30. }
  31. public void updateDepartment(MgrDepartment department) {
  32. mgrDepartmentDao.update(department);
  33. }
  34. public List<MgrOrganization> getListByProjectId(long projectId) {
  35. List<MgrDepartment> list = mgrDepartmentDao.getProjectId(projectId);
  36. if (list.size() > 0) {
  37. Set<Long> set = new HashSet<>();
  38. list.forEach(ls -> set.add(ls.getOrganizationId()));
  39. MgrDepartment department = new MgrDepartment();
  40. department.setProjectId(projectId);
  41. List<MgrOrganization> organizationList = mgrOrganizationDao.organizationByIds(new ArrayList<Long>(set));
  42. for (MgrOrganization organization : organizationList) {
  43. department.setOrganizationId(organization.getId());
  44. organization.setDepartmentList(getList(department));
  45. }
  46. return organizationList;
  47. }
  48. return new ArrayList<MgrOrganization>();
  49. }
  50. // get hierarchy
  51. public List<MgrDepartment> getList(MgrDepartment department) {
  52. List<MgrUserRole> mList = mgrUserRoleDao.getOrganizationId(department.getOrganizationId());
  53. List<MgrDepartment> list = mgrDepartmentDao.getList(department);
  54. list.forEach(ls -> ls.setUsers(getUserListByDepartment(mList, ls.getId())));
  55. List<Integer> ids = new ArrayList<>();
  56. list.forEach(ls -> {
  57. if (ls.getParentId() == -1) {
  58. ids.add(ls.getId());
  59. }
  60. });
  61. List<MgrDepartment> hierarchy = new ArrayList<>();
  62. if (ids.size() > 0) {
  63. ids.forEach(ll -> hierarchy.add(getNodeTreeById(ll, list)));
  64. }
  65. return hierarchy;
  66. }
  67. private MgrDepartment getNodeTreeById(int id, List<MgrDepartment> list) {
  68. MgrDepartment node = null;
  69. List<MgrDepartment> departmentList = list;
  70. for (MgrDepartment data : departmentList) {
  71. if (data.getId() == id) {
  72. node = data;
  73. break;
  74. }
  75. }
  76. if (node != null) {
  77. node.setChildren(getChildNode(node.getId(), departmentList));
  78. }
  79. return node;
  80. }
  81. private List<MgrDepartment> getChildNode(int parentId, List<MgrDepartment> list) {
  82. List<MgrDepartment> nodeList = new ArrayList<MgrDepartment>();
  83. nodeList.clear();
  84. for (MgrDepartment data : list) {
  85. if (data.getParentId() == parentId) {
  86. nodeList.add(data);
  87. }
  88. }
  89. if (nodeList.size() > 0) {
  90. for (MgrDepartment data : nodeList) {
  91. List<MgrDepartment> childList = getChildNode(data.getId(), list);
  92. data.setChildren(childList);
  93. }
  94. }
  95. return nodeList;
  96. }
  97. private List<MgrUser> getUserListByDepartment(List<MgrUserRole> list, int departmentId) {
  98. List<Long> userIds = new ArrayList<>();
  99. List<MgrUserRole> mlist = new ArrayList<>();
  100. list.forEach(ls -> {
  101. String departments = ls.getDepartments();
  102. if (StringUtil.notBlank(departments)) {
  103. String[] split = departments.split(",");
  104. for (int i = 0; i < split.length; i++) {
  105. if(StringUtil.notBlank(split[i])) {
  106. if (Integer.parseInt(split[i]) == departmentId) {
  107. userIds.add(ls.getUserId());
  108. mlist.add(ls);
  109. }
  110. }
  111. }
  112. }
  113. });
  114. if (userIds.size() == 0) {
  115. return new ArrayList<MgrUser>();
  116. }
  117. List<MgrUser> userList = mgrUserDao.getIds(userIds);
  118. for (MgrUser user : userList) {
  119. for (MgrUserRole ur : mlist) {
  120. if (user.getId() == ur.getUserId()) {
  121. user.setMenus(ur.getMenus());
  122. user.setResources(ur.getResources());
  123. user.setRoles(ur.getRoles());
  124. user.setOrganizationTypeRoles(ur.getOrganizationTypeRoles());
  125. }
  126. }
  127. }
  128. return userList;
  129. }
  130. // generation hierarchy
  131. public void saveDepartmentHierarchy(long organizationTypeId, long organizationId, long projectId) {
  132. MgrOrganizationType organizationType = mgrOrganizationTypeDao.get(organizationTypeId);
  133. String hierarchy = organizationType.getHierarchy();
  134. recursion(organizationId, projectId, hierarchy, -1);
  135. }
  136. private void recursion(long organizationId, long projectId, String st, int parentId) {
  137. JSONArray list = JSON.parseArray(st);
  138. if (list.size() == 0) {
  139. return;
  140. }
  141. for (int i = 0; i < list.size(); i++) {
  142. MgrDepartment d = new MgrDepartment();
  143. d.setOrganizationId(organizationId);
  144. d.setProjectId(projectId);
  145. d.setParentId(parentId);
  146. d.setTemplateId(Long.parseLong(list.getJSONObject(i).get("id").toString()));
  147. d.setName((String) list.getJSONObject(i).get("name"));
  148. mgrDepartmentDao.insert(d);
  149. recursion(organizationId, projectId, JSON.toJSONString(list.getJSONObject(i).get("children")), d.getId());
  150. }
  151. }
  152. public Map<String, Object> statisticalListByProjectId(long projectId, String startDate, String endDate) {
  153. Map<String, Object> map = new HashMap<>();
  154. List<MgrDepartment> list = mgrDepartmentDao.getProjectId(projectId);
  155. if (list.size() > 0) {
  156. Set<Long> set = new HashSet<>();
  157. list.forEach(ls -> set.add(ls.getOrganizationId()));
  158. MgrDepartment department = new MgrDepartment();
  159. department.setProjectId(projectId);
  160. List<MgrOrganization> organizationList = mgrOrganizationDao.organizationByIds(new ArrayList<Long>(set));
  161. int con = 0;
  162. int si = 0;
  163. Attendance attendance = new Attendance();
  164. attendance.setStartDate(startDate + " 00:00:00");
  165. attendance.setEndDate(endDate + " 23:59:59");
  166. for (MgrOrganization organization : organizationList) {
  167. department.setOrganizationId(organization.getId());
  168. List<MgrUserRole> mList = mgrUserRoleDao.getOrganizationId(department.getOrganizationId());
  169. List<MgrDepartment> alist = mgrDepartmentDao.getList(department);
  170. int cont = 0;
  171. for (MgrDepartment mgrDepartment : alist) {
  172. int size = getUserListByDepartment(mList, mgrDepartment.getId()).size();
  173. cont += size;
  174. }
  175. JSONObject json = new JSONObject();
  176. json.put("all", cont);
  177. attendance.setProjectId(projectId);
  178. attendance.setOrganizationId(organization.getId());
  179. List<Attendance> users = attendanceDao.getByUser(attendance);
  180. json.put("sign", users.size());
  181. map.put(organization.getName(), json);
  182. con += cont;
  183. si += users.size();
  184. }
  185. map.put("项目总人数", con);
  186. map.put("allSign", si);
  187. }
  188. return map;
  189. }
  190. public String personByProjectId(long projectId) {
  191. List<MgrDepartment> list = mgrDepartmentDao.getProjectId(projectId);
  192. JSONArray ja = new JSONArray();
  193. if (list.size() > 0) {
  194. Set<Long> set = new HashSet<>();
  195. list.forEach(ls -> set.add(ls.getOrganizationId()));
  196. MgrDepartment department = new MgrDepartment();
  197. department.setProjectId(projectId);
  198. List<MgrOrganization> organizationList = mgrOrganizationDao.organizationByIds(new ArrayList<Long>(set));
  199. for (MgrOrganization organization : organizationList) {
  200. JSONObject js = new JSONObject();
  201. department.setOrganizationId(organization.getId());
  202. List<MgrUserRole> mList = mgrUserRoleDao.getOrganizationId(department.getOrganizationId());
  203. List<MgrDepartment> alist = mgrDepartmentDao.getList(department);
  204. Set<MgrUser> set1 = new HashSet<>();
  205. for (MgrDepartment mgrDepartment : alist) {
  206. List<MgrUser> userListByDepartment = getUserListByDepartment(mList, mgrDepartment.getId());
  207. userListByDepartment.forEach(ls -> set1.add(ls));
  208. }
  209. js.put("organizationName", organization.getName());
  210. js.put("organizationId", organization.getId());
  211. JSONArray jaa = new JSONArray();
  212. for (MgrUser u : set1) {
  213. JSONObject jss = new JSONObject();
  214. jss.put("userId", u.getId());
  215. jss.put("userName", u.getName());
  216. jaa.add(jss);
  217. }
  218. js.put("userIds", jaa);
  219. ja.add(js);
  220. }
  221. }
  222. return JSONObject.toJSONString(ja);
  223. }
  224. }