SystemServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. package jnpf.base.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import jnpf.base.UserInfo;
  5. import jnpf.base.entity.SystemEntity;
  6. import jnpf.base.mapper.SystemMapper;
  7. import jnpf.base.model.AppAuthorizationModel;
  8. import jnpf.base.service.ModuleService;
  9. import jnpf.base.service.SuperServiceImpl;
  10. import jnpf.base.service.SystemService;
  11. import jnpf.constant.CodeConst;
  12. import jnpf.constant.PermissionConst;
  13. import jnpf.permission.entity.RoleEntity;
  14. import jnpf.permission.entity.UserEntity;
  15. import jnpf.permission.model.user.WorkHandoverModel;
  16. import jnpf.permission.service.CodeNumService;
  17. import jnpf.permission.service.RoleService;
  18. import jnpf.permission.service.UserService;
  19. import jnpf.util.RandomUtil;
  20. import jnpf.util.StringUtil;
  21. import jnpf.util.UserProvider;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import java.util.*;
  26. /**
  27. * 系统
  28. *
  29. * @author JNPF开发平台组
  30. * @version V3.1.0
  31. * @copyright 引迈信息技术有限公司
  32. * @date 2019年9月27日 上午9:18
  33. */
  34. @Service
  35. public class SystemServiceImpl extends SuperServiceImpl<SystemMapper, SystemEntity> implements SystemService {
  36. @Autowired
  37. private ModuleService moduleService;
  38. @Autowired
  39. private RoleService roleService;
  40. @Autowired
  41. private UserService userService;
  42. @Autowired
  43. private CodeNumService codeNumService;
  44. @Override
  45. public List<SystemEntity> getList() {
  46. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  47. queryWrapper.lambda().eq(SystemEntity::getEnabledMark, 1);
  48. queryWrapper.lambda().orderByAsc(SystemEntity::getSortCode)
  49. .orderByDesc(SystemEntity::getCreatorTime);
  50. return this.list(queryWrapper);
  51. }
  52. @Override
  53. public List<SystemEntity> getList(String keyword, Boolean filterEnableMark, boolean verifyAuth, Boolean filterMain, boolean isList, List<String> moduleAuthorize) {
  54. UserInfo user = UserProvider.getUser();
  55. boolean flag = false;
  56. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  57. if (StringUtil.isNotEmpty(keyword)) {
  58. flag = true;
  59. queryWrapper.lambda().and(t ->
  60. t.like(SystemEntity::getFullName, keyword).or().like(SystemEntity::getEnCode, keyword)
  61. .or().like(SystemEntity::getDescription, keyword)
  62. );
  63. }
  64. if (filterEnableMark == null) {
  65. queryWrapper.lambda().eq(SystemEntity::getEnabledMark, 0);
  66. } else if (filterEnableMark) {
  67. queryWrapper.lambda().eq(SystemEntity::getEnabledMark, 1);
  68. }
  69. // 过滤掉系统应用
  70. if (filterMain != null && filterMain) {
  71. queryWrapper.lambda().ne(SystemEntity::getIsMain, 1);
  72. }
  73. //判断权限列表
  74. if (!user.getIsAdministrator() && verifyAuth) {
  75. if (user.getIsDevRole()) {
  76. queryWrapper.lambda().and(t -> t
  77. .eq(SystemEntity::getUserId, user.getUserId()).or()
  78. .like(SystemEntity::getAuthorizeId, user.getUserId()).or()
  79. .eq(SystemEntity::getAuthorizeId, PermissionConst.ALL_DEV_USER));
  80. } else {
  81. queryWrapper.lambda().eq(SystemEntity::getUserId, user.getUserId());
  82. }
  83. }
  84. //过滤租户分配黑名单
  85. if (moduleAuthorize.size() > 0) {
  86. queryWrapper.lambda().notIn(SystemEntity::getId, moduleAuthorize);
  87. }
  88. if (flag) {
  89. queryWrapper.lambda().orderByDesc(SystemEntity::getLastModifyTime);
  90. } else {
  91. queryWrapper.lambda().orderByAsc(SystemEntity::getSortCode).orderByDesc(SystemEntity::getCreatorTime);
  92. }
  93. return this.list(queryWrapper);
  94. }
  95. @Override
  96. public List<SystemEntity> getListByIdsKey(List<String> ids, String keyword) {
  97. if (CollectionUtil.isEmpty(ids)) return Collections.EMPTY_LIST;
  98. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  99. queryWrapper.lambda().in(SystemEntity::getId, ids);
  100. boolean flag = false;
  101. if (StringUtil.isNotEmpty(keyword)) {
  102. flag = true;
  103. queryWrapper.lambda().and(t ->
  104. t.like(SystemEntity::getFullName, keyword).or().like(SystemEntity::getEnCode, keyword)
  105. .or().like(SystemEntity::getDescription, keyword)
  106. );
  107. }
  108. if (flag) {
  109. queryWrapper.lambda().orderByDesc(SystemEntity::getLastModifyTime);
  110. } else {
  111. queryWrapper.lambda().orderByAsc(SystemEntity::getSortCode).orderByDesc(SystemEntity::getCreatorTime);
  112. }
  113. return this.list(queryWrapper);
  114. }
  115. @Override
  116. public SystemEntity getInfo(String id) {
  117. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  118. queryWrapper.lambda().eq(SystemEntity::getId, id);
  119. return this.getOne(queryWrapper);
  120. }
  121. @Override
  122. public Boolean isExistFullName(String id, String fullName) {
  123. if (StringUtil.isEmpty(fullName)) return false;
  124. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  125. queryWrapper.lambda().eq(SystemEntity::getFullName, fullName);
  126. if (StringUtil.isNotEmpty(id)) {
  127. queryWrapper.lambda().ne(SystemEntity::getId, id);
  128. }
  129. return this.count(queryWrapper) > 0;
  130. }
  131. @Override
  132. public Boolean isExistEnCode(String id, String enCode) {
  133. if (StringUtil.isEmpty(enCode)) return false;
  134. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  135. queryWrapper.lambda().eq(SystemEntity::getEnCode, enCode);
  136. if (StringUtil.isNotEmpty(id)) {
  137. queryWrapper.lambda().ne(SystemEntity::getId, id);
  138. }
  139. return this.count(queryWrapper) > 0;
  140. }
  141. @Override
  142. @Transactional
  143. public Boolean create(SystemEntity entity) {
  144. String userId = UserProvider.getUser().getUserId();
  145. entity.setId(RandomUtil.uuId());
  146. if (StringUtil.isEmpty(entity.getEnCode())) {
  147. entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.YY), code -> this.isExistEnCode(null, code)));
  148. }
  149. entity.setIsMain(0);
  150. entity.setCreatorUserId(userId);
  151. entity.setCreatorTime(new Date());
  152. entity.setUserId(userId);
  153. boolean save = this.save(entity);
  154. //创建审批中心菜单
  155. moduleService.createWorkMenu(entity.getId());
  156. return save;
  157. }
  158. @Override
  159. @Transactional
  160. public Boolean update(String id, SystemEntity entity) {
  161. entity.setId(id);
  162. if (entity.getIsMain() == null) {
  163. entity.setIsMain(0);
  164. }
  165. if (StringUtil.isEmpty(entity.getEnCode())) {
  166. entity.setEnCode(codeNumService.getCodeFunction(() -> codeNumService.getCodeOnce(CodeConst.YY), code -> this.isExistEnCode(id, code)));
  167. }
  168. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  169. entity.setLastModifyTime(new Date());
  170. return this.updateById(entity);
  171. }
  172. @Override
  173. @Transactional
  174. public Boolean delete(String id) {
  175. moduleService.deleteBySystemId(id);
  176. return this.removeById(id);
  177. }
  178. @Override
  179. public List<SystemEntity> getListByIds(List<String> list, List<String> moduleAuthorize) {
  180. List<SystemEntity> systemList = new ArrayList<>(16);
  181. if (list.size() > 0) {
  182. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  183. if (moduleAuthorize != null && moduleAuthorize.size() > 0) {
  184. queryWrapper.lambda().notIn(SystemEntity::getId, moduleAuthorize);
  185. }
  186. queryWrapper.lambda().in(SystemEntity::getId, list);
  187. queryWrapper.lambda().eq(SystemEntity::getEnabledMark, 1);
  188. queryWrapper.lambda().orderByAsc(SystemEntity::getSortCode).orderByDesc(SystemEntity::getCreatorTime);
  189. return this.list(queryWrapper);
  190. }
  191. return systemList;
  192. }
  193. @Override
  194. public SystemEntity getInfoByEnCode(String enCode) {
  195. if (StringUtil.isEmpty(enCode)) {
  196. return null;
  197. }
  198. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  199. queryWrapper.lambda().eq(SystemEntity::getEnCode, enCode);
  200. return this.getOne(queryWrapper);
  201. }
  202. @Override
  203. public List<SystemEntity> findSystemAdmin(List<String> moduleAuthorize) {
  204. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  205. if (moduleAuthorize != null && moduleAuthorize.size() > 0) {
  206. queryWrapper.lambda().notIn(SystemEntity::getId, moduleAuthorize);
  207. }
  208. queryWrapper.lambda().orderByAsc(SystemEntity::getSortCode).orderByDesc(SystemEntity::getCreatorTime);
  209. return this.list(queryWrapper);
  210. }
  211. @Override
  212. public boolean saveSystemAuthorizion(AppAuthorizationModel model) {
  213. SystemEntity info = this.getInfo(model.getSystemId());
  214. List<String> devUsers = model.getDevUsers();
  215. if (devUsers != null && !devUsers.isEmpty()) {
  216. StringBuilder stringBuilder = new StringBuilder();
  217. devUsers.forEach(item -> stringBuilder.append(item).append(","));
  218. info.setAuthorizeId(stringBuilder.toString().substring(0, stringBuilder.toString().length() - 1));
  219. } else {
  220. info.setAuthorizeId("");
  221. }
  222. if (model.getIsAllDevUser() != null && model.getIsAllDevUser() == 1) {
  223. info.setAuthorizeId(PermissionConst.ALL_DEV_USER);
  224. }
  225. return this.updateById(info);
  226. }
  227. @Override
  228. public List<SystemEntity> getAuthListByUser(String userId, Boolean isStand) {
  229. UserEntity user = userService.getInfo(userId);
  230. List<RoleEntity> userRoles = roleService.getUserRoles(userId);
  231. boolean isDevRole = userRoles.stream().anyMatch(t -> PermissionConst.DEVELOPER_CODE.equals(t.getEnCode()));
  232. if(isStand){
  233. isDevRole = UserProvider.getUser().getIsDevRole();
  234. }
  235. boolean isAdmin = Objects.equals(user.getIsAdministrator(), 1);
  236. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  237. //开发人员才有编辑权限
  238. if (isDevRole || isAdmin) {
  239. //判断权限列表
  240. if (!isAdmin) {
  241. queryWrapper.lambda().eq(SystemEntity::getUserId, userId).or();
  242. queryWrapper.lambda().like(SystemEntity::getAuthorizeId, userId).or();
  243. queryWrapper.lambda().eq(SystemEntity::getAuthorizeId, PermissionConst.ALL_DEV_USER);
  244. }
  245. } else {
  246. queryWrapper.lambda().eq(SystemEntity::getUserId, userId);
  247. }
  248. return list(queryWrapper);
  249. }
  250. @Override
  251. public void workHandover(WorkHandoverModel workHandoverModel) {
  252. String userId = workHandoverModel.getFromId();
  253. List<String> appList = workHandoverModel.getAppList();
  254. String appHandoverUser = workHandoverModel.getAppHandoverUser();
  255. List<SystemEntity> listByIds = this.getListByIds(appList, null);
  256. for (SystemEntity entity : listByIds) {
  257. if (Objects.equals(entity.getUserId(), userId)) {
  258. entity.setUserId(appHandoverUser);
  259. }
  260. if (StringUtil.isNotEmpty(entity.getAuthorizeId())) {
  261. String[] userIds = entity.getAuthorizeId().split(",");
  262. String author = String.join(",", Arrays.stream(userIds).map(s -> s.equals(userId) ? appHandoverUser : s).toArray(String[]::new));
  263. entity.setAuthorizeId(author);
  264. }
  265. this.updateById(entity);
  266. }
  267. }
  268. @Override
  269. public void changeSystemAuthorizion(AppAuthorizationModel model) {
  270. String systemId = model.getSystemId();
  271. String createUserId = model.getCreateUserId();
  272. SystemEntity info = this.getInfo(systemId);
  273. if (StringUtil.isNotEmpty(createUserId)) {
  274. info.setUserId(createUserId);
  275. }
  276. this.updateById(info);
  277. }
  278. @Override
  279. public List<SystemEntity> getListByIds(List<String> list, List<String> moduleAuthorize, int type) {
  280. List<SystemEntity> systemList = new ArrayList<>(16);
  281. if (!list.isEmpty()) {
  282. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  283. if (moduleAuthorize != null && !moduleAuthorize.isEmpty()) {
  284. queryWrapper.lambda().notIn(SystemEntity::getId, moduleAuthorize);
  285. }
  286. queryWrapper.lambda().in(SystemEntity::getId, list);
  287. if (type == 1) {
  288. queryWrapper.lambda().eq(SystemEntity::getEnabledMark, 1);
  289. }
  290. queryWrapper.lambda().orderByAsc(SystemEntity::getSortCode).orderByDesc(SystemEntity::getCreatorTime);
  291. return this.list(queryWrapper);
  292. }
  293. return systemList;
  294. }
  295. @Override
  296. public List<SystemEntity> getListByCreUser(String userId) {
  297. QueryWrapper<SystemEntity> queryWrapper = new QueryWrapper<>();
  298. queryWrapper.lambda().eq(SystemEntity::getUserId, userId);
  299. queryWrapper.lambda().eq(SystemEntity::getEnabledMark, 1);
  300. return list(queryWrapper);
  301. }
  302. }