OrgServiceImpl.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. package com.huaxu.service.impl;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.huaxu.dao.OrgMapper;
  4. import com.huaxu.dto.OrgTree;
  5. import com.huaxu.entity.Org;
  6. import com.huaxu.model.LoginUser;
  7. import com.huaxu.model.ProgramItem;
  8. import com.huaxu.service.OrgService;
  9. import com.huaxu.util.ByteArrayUtils;
  10. import com.huaxu.util.RedisUtil;
  11. import com.huaxu.util.UserUtil;
  12. import io.swagger.models.auth.In;
  13. import org.springframework.beans.BeanUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.util.*;
  17. import static com.google.common.collect.Lists.newArrayList;
  18. /**
  19. * 组织(Org表)服务实现类
  20. *
  21. * @author makejava
  22. * @since 2020-10-26 14:55:43
  23. */
  24. @Service("orgService")
  25. public class OrgServiceImpl implements OrgService {
  26. @Autowired
  27. private OrgMapper orgMapper;
  28. @Autowired
  29. private RedisUtil redisUtil;
  30. /**
  31. * 通过ID查询单条数据
  32. *
  33. * @param id 主键
  34. * @return 实例对象
  35. */
  36. @Override
  37. public Org selectById(Integer id) {
  38. return this.orgMapper.selectById(id);
  39. }
  40. /**
  41. * 查询所有
  42. *
  43. * @return 实例对象的集合
  44. */
  45. @Override
  46. public List<Org> selectAll() {
  47. return this.orgMapper.selectAll();
  48. }
  49. /**
  50. * 根据条件查询
  51. *
  52. * @return 实例对象的集合
  53. */
  54. @Override
  55. public List<Org> selectList(Org org) {
  56. return this.orgMapper.selectList(org);
  57. }
  58. /**
  59. * 新增数据
  60. *
  61. * @param org 实例对象
  62. * @return 实例对象
  63. */
  64. @Override
  65. public int insert(Org org) {
  66. LoginUser currentUser = UserUtil.getCurrentUser();
  67. org.setTenantId(currentUser.getTenantId());
  68. org.setCreateBy(currentUser.getUsername());
  69. org.setDateCreate(new Date());
  70. org.setStatus(1);
  71. if(org.getParentOrgId()==null){
  72. org.setParentOrgId(0);
  73. }
  74. redisUtil.del("orgInfo"+currentUser.getTenantId());
  75. return this.orgMapper.insert(org);
  76. }
  77. /**
  78. * 批量新增
  79. *
  80. * @param orgs 实例对象的集合
  81. * @return 生效的条数
  82. */
  83. @Override
  84. public int batchInsert(List<Org> orgs) {
  85. return this.orgMapper.batchInsert(orgs);
  86. }
  87. /**
  88. * 修改数据
  89. *
  90. * @param org 实例对象
  91. * @return 实例对象
  92. */
  93. @Override
  94. public int update(Org org) {
  95. Org orgType = orgMapper.findOrgType(org);
  96. if(!orgType.getOrgType().equals(org.getOrgType())){
  97. if(orgType.getChildType()!=null&&org.getOrgType().equals("department")
  98. &&orgType.getChildType().equals("company")){
  99. return -2;
  100. }else if(orgType.getParentType()!=null&&org.getOrgType().equals("company")&&
  101. orgType.getParentType().equals("department")){
  102. return -3;
  103. }
  104. }
  105. //將禁用的角色放入redis,作为登出判断
  106. String keyName="";
  107. if(org.getOrgType().equals("company")){
  108. keyName="disableCompany:";
  109. }else if(org.getOrgType().equals("department")){
  110. keyName="department:";
  111. }
  112. if(org.getOrgState()==0){
  113. String orgKey=keyName+org.getId();
  114. redisUtil.setExpire(orgKey.getBytes(), ByteArrayUtils.objectToBytes("1").get(), 60*60*24);//15分钟过期
  115. } if(org.getOrgState()==1){
  116. String orgKey=keyName+org.getId();
  117. redisUtil.del(orgKey.getBytes());
  118. }
  119. LoginUser currentUser = UserUtil.getCurrentUser();
  120. org.setUpdateBy(currentUser.getUsername());
  121. redisUtil.del("orgInfo"+currentUser.getTenantId());
  122. return this.orgMapper.update(org);
  123. }
  124. /**
  125. * 通过主键删除数据
  126. *
  127. * @param id 主键
  128. * @return 是否成功
  129. */
  130. @Override
  131. public int deleteById(Integer id) {
  132. return this.orgMapper.deleteById(id);
  133. }
  134. @Override
  135. public List<String> deleteAll(List<Integer> ids) {
  136. List<String>fail=new ArrayList<>();
  137. ids.forEach(id->{
  138. Org org=new Org();
  139. org.setId(id);
  140. Org orgUser = orgMapper.findOrgUser(org);
  141. if(orgUser==null){
  142. org.setStatus(0);
  143. orgMapper.update(org);
  144. }else {
  145. fail.add(orgUser.getOrgName());
  146. }
  147. });
  148. LoginUser currentUser = UserUtil.getCurrentUser();
  149. redisUtil.del("orgInfo"+currentUser.getTenantId());
  150. return fail;
  151. }
  152. /**
  153. * 查询总数据数
  154. *
  155. * @return 数据总数
  156. */
  157. @Override
  158. public int count() {
  159. return this.orgMapper.count();
  160. }
  161. /**
  162. * 分页查询
  163. *
  164. * @return 对象列表
  165. */
  166. @Override
  167. public IPage<Org> selectPage(Org org, IPage<Org> page) {
  168. LoginUser currentUser = UserUtil.getCurrentUser();
  169. org.setTenantId(currentUser.getTenantId());
  170. return this.orgMapper.selectPage(page, org);
  171. }
  172. @Override
  173. public List<OrgTree> getTrees(Org org) {
  174. LoginUser currentUser = UserUtil.getCurrentUser();
  175. org.setTenantId(currentUser.getTenantId());
  176. Set<Integer>orgIds=new HashSet<>();
  177. List<ProgramItem> programItemList = currentUser.getProgramItemList();
  178. if(programItemList!=null){
  179. programItemList.forEach(programItem -> {
  180. orgIds.add(programItem.getOrgId());
  181. });
  182. }
  183. List<OrgTree> trees=orgMapper.selectTrees(org);
  184. if(currentUser.getDepartmentId()==null){
  185. trees=getOrgTreeByOrg(trees,currentUser.getCompanyId(),orgIds);
  186. }else {
  187. trees=getOrgTreeByOrg(trees,currentUser.getDepartmentId(),orgIds);
  188. }
  189. return trees;
  190. }
  191. @Override
  192. public List<OrgTree> getUserTrees(Org org) {
  193. LoginUser currentUser = UserUtil.getCurrentUser();
  194. org.setTenantId(currentUser.getTenantId());
  195. Integer id=org.getId();
  196. org.setId(null);
  197. Set<Integer>orgIds=new HashSet<>();
  198. List<ProgramItem> programItemList = currentUser.getProgramItemList();
  199. if(programItemList!=null){
  200. programItemList.forEach(programItem -> {
  201. orgIds.add(programItem.getOrgId());
  202. });
  203. }
  204. List<OrgTree> trees=new ArrayList<>();
  205. if("company".equals(org.getOrgType())){
  206. if(currentUser.getDepartmentId()==null&&currentUser.getPermissonType()==2){
  207. trees=orgMapper.selectTrees(org);
  208. trees=getOrgTreeByOrg(trees,currentUser.getCompanyId(),orgIds);
  209. }else{
  210. org.setId(currentUser.getCompanyId());
  211. trees=orgMapper.selectTrees(org);
  212. }
  213. }else{
  214. if(currentUser.getDepartmentId()!=null&&currentUser.getPermissonType()==4){
  215. org.setOrgType("department");
  216. trees=orgMapper.selectTrees(org);
  217. trees=getOrgTreeByOrg(trees,currentUser.getDepartmentId(),orgIds);
  218. }if(currentUser.getDepartmentId()!=null&&currentUser.getPermissonType()==3){
  219. org.setId(currentUser.getDepartmentId());
  220. trees=orgMapper.selectTrees(org);
  221. }else{
  222. trees=orgMapper.selectTrees(org);
  223. trees=getOrgDepartmentTree(trees,id);
  224. }
  225. }
  226. return trees;
  227. }
  228. List<OrgTree> getOrgTreeByOrg(List<OrgTree> trees,int id, Set<Integer>orgIds){
  229. OrgTree fatherOrgTree=new OrgTree();
  230. for (OrgTree tree : trees) {
  231. if(tree.getId()==id){
  232. fatherOrgTree=tree;
  233. break;
  234. }
  235. }
  236. trees=getOrgTree(trees,id,1,orgIds);
  237. fatherOrgTree.setOrgs(trees);
  238. List<OrgTree> result=new ArrayList<>();
  239. result.add(fatherOrgTree);
  240. trees=result;
  241. return trees;
  242. }
  243. public List<OrgTree> getOrgTree(List<OrgTree> list, Integer id, Integer level, Set<Integer>orgIds) {
  244. List<OrgTree> temList = newArrayList();
  245. if (list != null) {
  246. for (OrgTree orgTree : list) {
  247. if (id.equals(orgTree.getParentOrgId())) {
  248. orgTree.setDisabled(false);
  249. List<OrgTree> chidren = getOrgTree(list, orgTree.getId(),level,orgIds);
  250. OrgTree temPermission = new OrgTree();
  251. BeanUtils.copyProperties(orgTree, temPermission);
  252. temPermission.setOrgs(chidren);
  253. temList.add(temPermission);
  254. level--;
  255. }
  256. }
  257. }
  258. if (temList.size() > 0) {
  259. return temList;
  260. } else {
  261. return null;
  262. }
  263. }
  264. public List<OrgTree> getOrgDepartmentTree(List<OrgTree> list, Integer id) {
  265. List<OrgTree> temList = newArrayList();
  266. if (list != null) {
  267. for (OrgTree orgTree : list) {
  268. if (id.equals(orgTree.getParentOrgId())
  269. &&"department".equals(orgTree.getOrgType())) {
  270. List<OrgTree> chidren = getOrgDepartmentTree(list, orgTree.getId());
  271. OrgTree temPermission = new OrgTree();
  272. BeanUtils.copyProperties(orgTree, temPermission);
  273. temPermission.setOrgs(chidren);
  274. temList.add(temPermission);
  275. ;
  276. }
  277. }
  278. }
  279. if (temList.size() > 0) {
  280. return temList;
  281. } else {
  282. return null;
  283. }
  284. }
  285. }