OrganizationServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. package com.keao.edu.user.service.impl;
  2. import com.keao.edu.auth.api.client.SysUserFeignService;
  3. import com.keao.edu.auth.api.entity.SysUser;
  4. import com.keao.edu.common.dal.BaseDAO;
  5. import com.keao.edu.common.exception.BizException;
  6. import com.keao.edu.common.service.impl.BaseServiceImpl;
  7. import com.keao.edu.common.tenant.OrganContextHolder;
  8. import com.keao.edu.im.api.client.ImFeignService;
  9. import com.keao.edu.im.api.entity.ImResult;
  10. import com.keao.edu.im.api.entity.ImUserModel;
  11. import com.keao.edu.user.dao.EmployeeDao;
  12. import com.keao.edu.user.dao.ExamOrganizationRelationDao;
  13. import com.keao.edu.user.dao.OrganizationDao;
  14. import com.keao.edu.user.dao.SysUserDao;
  15. import com.keao.edu.user.entity.Employee;
  16. import com.keao.edu.user.entity.Organization;
  17. import com.keao.edu.user.enums.YesOrNoEnum;
  18. import com.keao.edu.user.service.OrganizationService;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import org.springframework.util.CollectionUtils;
  25. import java.util.Collections;
  26. import java.util.List;
  27. import java.util.Objects;
  28. import java.util.Set;
  29. import java.util.stream.Collectors;
  30. @Service
  31. public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organization> implements OrganizationService {
  32. @Autowired
  33. private OrganizationDao organDao;
  34. @Autowired
  35. private ImFeignService imFeignService;
  36. @Autowired
  37. private SysUserFeignService sysUserFeignService;
  38. @Autowired
  39. private SysUserDao sysUserDao;
  40. @Autowired
  41. private EmployeeDao employeeDao;
  42. @Autowired
  43. private ExamOrganizationRelationDao examOrganizationRelationDao;
  44. @Override
  45. public BaseDAO<Integer, Organization> getDAO() {
  46. return organDao;
  47. }
  48. @Override
  49. @Transactional(rollbackFor = Exception.class)
  50. public void add(Organization organ) {
  51. //获取当前用的organ
  52. SysUser queryUserInfo = sysUserFeignService.queryUserInfo();
  53. Organization currentOrganization = organDao.findByUserId(queryUserInfo.getId());
  54. if(currentOrganization == null){
  55. Integer organId = OrganContextHolder.getOrganId();
  56. currentOrganization = organDao.get(organId);
  57. }
  58. if(currentOrganization.getLevel() == 3){
  59. throw new BizException("无权限创建合作单位");
  60. }
  61. SysUser sysUser = organ.getSysUser();
  62. // String tenantId = queryUserInfo.getTenantId();
  63. // organ.setTenantId(tenantId);
  64. // sysUser.setTenantId(tenantId);
  65. SysUser user = sysUserDao.queryByPhone(sysUser.getPhone());
  66. organ.setParentOrganId(currentOrganization.getId());
  67. organ.setLevel(currentOrganization.getLevel() + 1);
  68. if(user != null && user.getId() != null){
  69. // if(!user.getTenantId().equals(tenantId)){
  70. // throw new BizException("手机号已被占用");
  71. // }
  72. if(StringUtils.isNotEmpty(user.getUserType())){
  73. throw new BizException("手机号已被占用");
  74. }
  75. Organization organization = organDao.findByUserId(user.getId());
  76. if(organization == null){
  77. if(StringUtils.isEmpty(user.getPassword())){
  78. sysUser.setPassword(new BCryptPasswordEncoder().encode("123456"));
  79. }
  80. organ.setUserId(user.getId());
  81. organDao.insert(organ);
  82. organ.setParentOrganIdTag(currentOrganization.getParentOrganIdTag() + "," + organ.getId());
  83. organDao.update(organ);
  84. //新增用户角色
  85. if(sysUser.getRoles() != null){
  86. sysUserDao.batchAddEmployeeRole(user.getId(),sysUser.getRoles());
  87. }else {
  88. Integer roleIds = sysUserDao.queryRoleIds(queryUserInfo.getId());
  89. sysUserDao.batchAddEmployeeRole(user.getId(),roleIds);
  90. }
  91. if(StringUtils.isNotEmpty(user.getUserType())){
  92. if(!user.getUserType().contains("SYSTEM")){
  93. user.setUserType(user.getUserType() + ",SYSTEM");
  94. }
  95. }else {
  96. user.setUserType("SYSTEM");
  97. }
  98. user.setRealName(organ.getContactName());
  99. user.setPhone(organ.getContactPhone());
  100. sysUserDao.update(user);
  101. Employee employee = employeeDao.get(user.getId());
  102. if(employee == null){
  103. employee = new Employee();
  104. employee.setOrganId(organ.getId());
  105. employee.setUserId(user.getId());
  106. employee.setTenantId(organ.getTenantId());
  107. employee.setEmployeeType("ORGAN");
  108. employeeDao.insert(employee);
  109. }else {
  110. employee.setDelFlag(false);
  111. employee.setOrganId(organ.getId());
  112. employee.setUserId(user.getId());
  113. employee.setTenantId(organ.getTenantId());
  114. employee.setEmployeeType("ORGAN");
  115. employeeDao.update(employee);
  116. }
  117. }else if(organization.getDelFlag() == YesOrNoEnum.YES){
  118. SysUser sysUser1 = organization.getSysUser();
  119. if(StringUtils.isEmpty(sysUser1.getUserType())){
  120. sysUser.setUserType("SYSTEM");
  121. }else {
  122. sysUser.setUserType(sysUser1.getUserType() + ",SYSTEM");
  123. }
  124. sysUser.setRealName(organ.getContactName());
  125. sysUser.setPhone(organ.getContactPhone());
  126. sysUser.setId(sysUser1.getId());
  127. sysUserDao.update(sysUser);
  128. if(sysUser.getRoles() != null){
  129. sysUserDao.batchAddEmployeeRole(sysUser.getId(),sysUser.getRoles());
  130. }else {
  131. Integer roleIds = sysUserDao.queryRoleIds(queryUserInfo.getId());
  132. sysUserDao.batchAddEmployeeRole(sysUser.getId(),roleIds);
  133. }
  134. Employee employee = employeeDao.get(sysUser.getId());
  135. employee.setDelFlag(false);
  136. employee.setTenantId(organ.getTenantId());
  137. employee.setEmployeeType("ORGAN");
  138. employee.setOrganId(organization.getId());
  139. employeeDao.update(employee);
  140. organ.setParentOrganIdTag(currentOrganization.getParentOrganIdTag() + "," + organization.getId());
  141. organ.setDelFlag(YesOrNoEnum.NO);
  142. organ.setId(organization.getId());
  143. organDao.update(organ);
  144. }else{
  145. throw new BizException("用户已存在");
  146. }
  147. return;
  148. }
  149. sysUser.setPassword(new BCryptPasswordEncoder().encode("123456"));
  150. sysUser.setUserType("SYSTEM");
  151. sysUser.setRealName(organ.getContactName());
  152. sysUser.setPhone(organ.getContactPhone());
  153. sysUserDao.insert(sysUser);
  154. organ.setUserId(sysUser.getId());
  155. organDao.insert(organ);
  156. organ.setParentOrganIdTag(currentOrganization.getParentOrganIdTag() + "," + organ.getId());
  157. organDao.update(organ);
  158. //新增用户角色
  159. sysUserDao.delEmployeeRole(sysUser.getId());
  160. if(sysUser.getRoles() != null){
  161. sysUserDao.batchAddEmployeeRole(sysUser.getId(),sysUser.getRoles());
  162. }else {
  163. Integer roleIds = sysUserDao.queryRoleIds(queryUserInfo.getId());
  164. sysUserDao.batchAddEmployeeRole(sysUser.getId(),roleIds);
  165. }
  166. Employee employee = new Employee();
  167. employee.setOrganId(organ.getId());
  168. employee.setUserId(sysUser.getId());
  169. employee.setTenantId(organ.getTenantId());
  170. employee.setEmployeeType("ORGAN");
  171. employeeDao.insert(employee);
  172. ImResult imResult = imFeignService.register(new ImUserModel(sysUser.getId().toString(), sysUser.getRealName(),null));
  173. sysUser.setImToken(imResult.getToken());
  174. sysUserDao.update(sysUser);
  175. }
  176. @Override
  177. @Transactional(rollbackFor = Exception.class)
  178. public void updateOrganization(Organization organization) {
  179. SysUser sysUser = organization.getSysUser();
  180. Organization organization1 = organDao.get(organization.getId());
  181. if(null == organization1){
  182. throw new BizException("合作商信息不存在");
  183. }
  184. sysUser.setId(organization1.getUserId());
  185. // organization.setId(sysUser.getId());
  186. if(StringUtils.isNotEmpty(sysUser.getPhone())){
  187. SysUser queryByPhone = sysUserDao.queryByPhone(sysUser.getPhone());
  188. if(queryByPhone != null && !sysUser.getId().equals(queryByPhone.getId())){
  189. throw new BizException("手机号已存在");
  190. }
  191. }
  192. sysUser.setRealName(organization.getContactName());
  193. sysUser.setPhone(organization.getContactPhone());
  194. organization.setUserId(organization1.getUserId());
  195. organDao.update(organization);
  196. List<Organization> childOrgans = organDao.getChildOrgans(organization1.getParentOrganIdTag());
  197. Set<Integer> userIds = childOrgans.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
  198. userIds.add(sysUser.getId());
  199. sysUserDao.batchDelEmployeeRole(userIds);
  200. if(sysUser.getRoles() != null){
  201. sysUserDao.batchAddEmployeeRoles(userIds,sysUser.getRoles());
  202. }else {
  203. SysUser queryUserInfo = sysUserFeignService.queryUserInfo();
  204. Integer roleIds = sysUserDao.queryRoleIds(queryUserInfo.getId());
  205. sysUserDao.batchAddEmployeeRole(sysUser.getId(),roleIds);
  206. }
  207. sysUserDao.update(sysUser);
  208. imFeignService.update(new ImUserModel(sysUser.getId().toString(),sysUser.getRealName(),sysUser.getAvatar()));
  209. }
  210. @Override
  211. public List<Integer> getChildOrganIds(Integer organId, boolean includeSelf) {
  212. if(Objects.isNull(organId)){
  213. return null;
  214. }
  215. Organization organization = organDao.get(organId);
  216. if(Objects.isNull(organization)){
  217. throw new BizException("当前声部不存在");
  218. }
  219. List<Integer> selfAndChildOrganIds = organDao.getChildOrganIds(organization.getParentOrganIdTag());
  220. if(null == selfAndChildOrganIds){
  221. selfAndChildOrganIds= Collections.EMPTY_LIST;
  222. }
  223. if(!includeSelf){
  224. selfAndChildOrganIds.remove(organization.getId());
  225. }
  226. if(CollectionUtils.isEmpty(selfAndChildOrganIds)){
  227. selfAndChildOrganIds.add(0);
  228. }
  229. return selfAndChildOrganIds;
  230. }
  231. @Override
  232. public List<Organization> getChildOrgans(Integer organId, boolean includeSelf) {
  233. Organization organization = organDao.get(organId);
  234. if(Objects.isNull(organization)){
  235. throw new BizException("合作单位不存在");
  236. }
  237. List<Organization> selfAndChildOrgans = organDao.getChildOrgans(organization.getParentOrganIdTag());
  238. if(null == selfAndChildOrgans){
  239. selfAndChildOrgans= Collections.EMPTY_LIST;
  240. }
  241. if(includeSelf){
  242. selfAndChildOrgans.add(organization);
  243. }
  244. return selfAndChildOrgans;
  245. }
  246. @Override
  247. public List<Integer> getNextLevelOrganIds(Integer organId, boolean includeSelf) {
  248. if(Objects.isNull(organId)){
  249. return null;
  250. }
  251. Organization organization = organDao.get(organId);
  252. if(Objects.isNull(organization)){
  253. throw new BizException("当前声部不存在");
  254. }
  255. List<Integer> selfAndChildOrganIds = organDao.getNextLevelOrganIds(organization.getId());
  256. if(null == selfAndChildOrganIds){
  257. selfAndChildOrganIds= Collections.EMPTY_LIST;
  258. }
  259. if(includeSelf){
  260. selfAndChildOrganIds.add(organization.getId());
  261. }
  262. if(CollectionUtils.isEmpty(selfAndChildOrganIds)){
  263. selfAndChildOrganIds.add(0);
  264. }
  265. return selfAndChildOrganIds;
  266. }
  267. @Override
  268. @Transactional(rollbackFor = Exception.class)
  269. public void del(Integer id) {
  270. Organization organization = organDao.get(id);
  271. SysUser queryUserInfo = sysUserFeignService.queryUserInfo();
  272. if(queryUserInfo.getId().equals(organization.getUserId())){
  273. throw new BizException("删除失败:不支持此操作");
  274. }
  275. Integer count = examOrganizationRelationDao.findByOrganId(id);
  276. if(count == null || count == 0){
  277. SysUser sysUser = organization.getSysUser();
  278. String userType = sysUser.getUserType();
  279. if(userType.contains(",SYSTEM")){
  280. userType = userType.replace(",SYSTEM","");
  281. }else if(userType.contains("SYSTEM,")){
  282. userType = userType.replace("SYSTEM,","");
  283. }else {
  284. userType = "";
  285. }
  286. sysUserDao.updateUserType(sysUser.getId(),userType);
  287. sysUserDao.delEmployeeRole(organization.getUserId());
  288. employeeDao.delete(sysUser.getId());
  289. organDao.delete(id);
  290. }else {
  291. throw new BizException("删除失败:存在考试项目,无法删除");
  292. }
  293. }
  294. @Override
  295. public Organization getOrganization(Integer id) {
  296. Organization organization = organDao.get(id);
  297. SysUser sysUser = organization.getSysUser();
  298. Integer roleIds = sysUserDao.queryRoleIds(organization.getUserId());
  299. sysUser.setRoles(roleIds);
  300. return organization;
  301. }
  302. @Override
  303. public Organization findByUserId(Integer userId) {
  304. return organDao.findByUserId(userId);
  305. }
  306. }