OrgServiceImpl.java 12 KB

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