SysAdminSetController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. package com.qmth.distributed.print.api;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.qmth.boot.api.constant.ApiConstant;
  4. import com.qmth.distributed.print.business.backup.MySQLDatabaseBackup;
  5. import com.qmth.distributed.print.business.bean.params.SysAdminSetParam;
  6. import com.qmth.distributed.print.business.bean.result.CustomPrivilegeResult;
  7. import com.qmth.distributed.print.business.bean.result.SysAdminSetResult;
  8. import com.qmth.teachcloud.common.annotation.OperationLogDetail;
  9. import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
  10. import com.qmth.teachcloud.common.bean.result.SysConfigResult;
  11. import com.qmth.teachcloud.common.bean.result.SysConfigResultOption;
  12. import com.qmth.teachcloud.common.contant.SystemConstant;
  13. import com.qmth.teachcloud.common.entity.*;
  14. import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
  15. import com.qmth.teachcloud.common.enums.FlowMsgTypeEnum;
  16. import com.qmth.teachcloud.common.enums.SyncModeEnum;
  17. import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
  18. import com.qmth.teachcloud.common.service.*;
  19. import com.qmth.teachcloud.common.util.Result;
  20. import com.qmth.teachcloud.common.util.ResultUtil;
  21. import io.swagger.annotations.*;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.util.CollectionUtils;
  24. import org.springframework.validation.BindingResult;
  25. import org.springframework.web.bind.annotation.*;
  26. import javax.annotation.Resource;
  27. import javax.validation.Valid;
  28. import java.security.NoSuchAlgorithmException;
  29. import java.util.*;
  30. import java.util.stream.Collectors;
  31. /**
  32. * @Description: 超管设置
  33. * @Param:
  34. * @return:
  35. * @Author: wangliang
  36. * @Date: 2021/10/29
  37. */
  38. @Api(tags = "超管设置Controller")
  39. @RestController
  40. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SET)
  41. //@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
  42. public class SysAdminSetController {
  43. @Resource
  44. SysPrivilegeService sysPrivilegeService;
  45. @Resource
  46. TSchoolPrivilegeService tSchoolPrivilegeService;
  47. @Resource
  48. SysRolePrivilegeService sysRolePrivilegeService;
  49. @Resource
  50. SysRoleService sysRoleService;
  51. @Resource
  52. CommonCacheService commonCacheService;
  53. @Resource
  54. SysUserRoleService sysUserRoleService;
  55. @Resource
  56. TeachcloudCommonService commonService;
  57. @Resource
  58. SysConfigService sysConfigService;
  59. @Resource
  60. MySQLDatabaseBackup mySQLDatabaseBackup;
  61. @Resource
  62. TSchoolRoleService tSchoolRoleService;
  63. @ApiOperation(value = "数据还原")
  64. @ApiResponses({@ApiResponse(code = 200, message = "数据还原信息", response = ResultUtil.class)})
  65. @RequestMapping(value = "/backup", method = RequestMethod.POST)
  66. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
  67. public Result sysadminBackup(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) throws Exception {
  68. mySQLDatabaseBackup.exportDatabaseTool();
  69. mySQLDatabaseBackup.deleteDbTool(SystemConstant.PRINT_DELETE_DATA_FILE_NAME, schoolId);
  70. return ResultUtil.ok(true);
  71. }
  72. @ApiOperation(value = "同步配置查询")
  73. @ApiResponses({@ApiResponse(code = 200, message = "同步配置信息", response = SysAdminSetResult.class)})
  74. @RequestMapping(value = "/sync/select", method = RequestMethod.POST)
  75. public Result sysadminSyncSelect(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  76. SysConfig sysConfigQuestionHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.QUESTION_HOST_URL);
  77. SysConfig sysConfigTeachcloudReportHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.TEACHCLOUD_REPORT_HOST_URL);
  78. SysConfig sysConfigOpenFlowMsgPush = commonCacheService.addSysConfigCache(schoolId, SystemConstant.OPEN_FLOW_MESSAGE_PUSH);
  79. SysConfig sysConfigFlowMsgType = commonCacheService.addSysConfigCache(schoolId, SystemConstant.FLOW_MESSAGE_TYPE);
  80. SysConfig sysConfigMqHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.MQ_HOST_URL);
  81. List<SysConfigResult> sysConfigResultList = new ArrayList<>();
  82. if (Objects.nonNull(sysConfigQuestionHostUrl)) {
  83. sysConfigResultList.add(new SysConfigResult(sysConfigQuestionHostUrl));
  84. } else {
  85. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.QUESTION_HOST_URL, "题库地址", "", 1));
  86. }
  87. if (Objects.nonNull(sysConfigTeachcloudReportHostUrl)) {
  88. sysConfigResultList.add(new SysConfigResult(sysConfigTeachcloudReportHostUrl));
  89. } else {
  90. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.TEACHCLOUD_REPORT_HOST_URL, "教研分析地址", "", 4));
  91. }
  92. if (Objects.nonNull(sysConfigOpenFlowMsgPush)) {
  93. sysConfigResultList.add(new SysConfigResult(sysConfigOpenFlowMsgPush));
  94. } else {
  95. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.OPEN_FLOW_MESSAGE_PUSH, "是否开启消息推送", "false", 5));
  96. }
  97. if (Objects.nonNull(sysConfigFlowMsgType)) {
  98. sysConfigResultList.add(new SysConfigResult(sysConfigFlowMsgType));
  99. } else {
  100. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.FLOW_MESSAGE_TYPE, "消息类型", FlowMsgTypeEnum.STANDARD, 6));
  101. }
  102. if (Objects.nonNull(sysConfigMqHostUrl)) {
  103. sysConfigResultList.add(new SysConfigResult(sysConfigMqHostUrl));
  104. } else {
  105. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.MQ_HOST_URL, "消息中心地址", "", 7));
  106. }
  107. return ResultUtil.ok(new SysAdminSetResult(schoolId, sysConfigResultList));
  108. }
  109. @ApiOperation(value = "同步配置保存")
  110. @ApiResponses({@ApiResponse(code = 200, message = "同步配置信息", response = ResultUtil.class)})
  111. @RequestMapping(value = "/sync/save", method = RequestMethod.POST)
  112. @Transactional
  113. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  114. public Result sysadminSyncSave(@Valid @RequestBody SysAdminSetParam sysAdminSetParam, BindingResult bindingResult) {
  115. if (bindingResult.hasErrors()) {
  116. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  117. }
  118. Optional.ofNullable(sysAdminSetParam.getParam()).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("同步配置地址不能为空"));
  119. List<SysConfigResult> sysConfigResultList = sysAdminSetParam.getParam();
  120. List<SysConfig> sysConfigList = new ArrayList<>();
  121. for (SysConfigResult s : sysConfigResultList) {
  122. sysConfigList.add(new SysConfig(sysAdminSetParam.getSchoolId(), s));
  123. }
  124. sysConfigService.saveOrUpdateBatch(sysConfigList);
  125. for (SysConfigResult s : sysConfigResultList) {
  126. commonCacheService.updateSysConfigCache(sysAdminSetParam.getSchoolId(), s.getCode());
  127. }
  128. return ResultUtil.ok(true);
  129. }
  130. @ApiOperation(value = "系统试卷规格配置查询")
  131. @ApiResponses({@ApiResponse(code = 200, message = "系统试卷规格配置信息", response = CustomPrivilegeResult.class)})
  132. @RequestMapping(value = "/paper/sys/select", method = RequestMethod.POST)
  133. public Result sysadminPaperSysSelect() {
  134. SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.SYS_PDF_SIZE_LIST);
  135. Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置全局上传试卷规格"));
  136. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult();
  137. SysConfigResult sysConfigResult = new SysConfigResult(sysConfig);
  138. sysConfigResult.setValue(Arrays.asList(sysConfigResult.getValue().toString().replaceAll("\\[", "").replaceAll("\\]", "").split(", ")));
  139. sysAdminSetResult.setResult(Arrays.asList(sysConfigResult));
  140. return ResultUtil.ok(sysAdminSetResult);
  141. }
  142. @ApiOperation(value = "试卷规格配置查询")
  143. @ApiResponses({@ApiResponse(code = 200, message = "试卷规格配置信息", response = SysAdminSetResult.class)})
  144. @RequestMapping(value = "/paper/select", method = RequestMethod.POST)
  145. public Result sysadminPaperSelect(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  146. SysConfig sysConfigPdfSize = commonCacheService.addSysConfigCache(schoolId, SystemConstant.PDF_SIZE_LIST);
  147. List<String> pdfSize = null;
  148. SysConfigResult sysConfigResult = null;
  149. if (Objects.nonNull(sysConfigPdfSize)) {
  150. pdfSize = Arrays.asList(sysConfigPdfSize.getConfigValue().replaceAll("\\[", "").replaceAll("\\]", "").split(", "));
  151. sysConfigResult = new SysConfigResult(sysConfigPdfSize);
  152. sysConfigResult.setValue(pdfSize);
  153. } else {
  154. sysConfigResult = new SysConfigResult(null, SystemConstant.PDF_SIZE_LIST, "允许上传试卷规格", new ArrayList<>(), 1);
  155. }
  156. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult(schoolId);
  157. sysAdminSetResult.setResult(Arrays.asList(sysConfigResult));
  158. return ResultUtil.ok(sysAdminSetResult);
  159. }
  160. @ApiOperation(value = "试卷规格配置保存")
  161. @ApiResponses({@ApiResponse(code = 200, message = "试卷规格配置信息", response = ResultUtil.class)})
  162. @RequestMapping(value = "/paper/save", method = RequestMethod.POST)
  163. @Transactional
  164. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  165. public Result sysadminPaperSave(@Valid @RequestBody SysAdminSetParam sysAdminSetParam, BindingResult bindingResult) {
  166. if (bindingResult.hasErrors()) {
  167. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  168. }
  169. Optional.ofNullable(sysAdminSetParam.getParam()).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("试卷规格配置不能为空"));
  170. List<SysConfigResult> sysConfigResultList = sysAdminSetParam.getParam();
  171. List<SysConfig> sysConfigList = new ArrayList<>();
  172. for (SysConfigResult s : sysConfigResultList) {
  173. SysConfig sysConfig = new SysConfig(sysAdminSetParam.getSchoolId(), s);
  174. sysConfig.setConfigValue(Arrays.asList(s.getValue().toString().replaceAll("\\[", "").replaceAll("\\]", "").split(", ")).toString());
  175. sysConfigList.add(sysConfig);
  176. }
  177. sysConfigService.saveOrUpdateBatch(sysConfigList);
  178. for (SysConfigResult s : sysConfigResultList) {
  179. commonCacheService.updateSysConfigCache(sysAdminSetParam.getSchoolId(), s.getCode());
  180. }
  181. return ResultUtil.ok(true);
  182. }
  183. @ApiOperation(value = "用户验证查询")
  184. @ApiResponses({@ApiResponse(code = 200, message = "用户验证信息", response = SysAdminSetResult.class)})
  185. @RequestMapping(value = "/user/select", method = RequestMethod.POST)
  186. public Result sysadminUserSelect(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  187. SysConfig sysConfigAccount = commonCacheService.addSysConfigCache(schoolId, SystemConstant.ACCOUNT_SMS_VERIFY);
  188. SysConfig sysConfigTeachcloudExchangeHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.TEACHCLOUD_EXCHANGE_HOST_URL);
  189. List<SysConfigResult> sysConfigResultList = new ArrayList<>();
  190. if (Objects.nonNull(sysConfigAccount)) {
  191. sysConfigResultList.add(new SysConfigResult(sysConfigAccount));
  192. } else {
  193. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.ACCOUNT_SMS_VERIFY, "用户/密码模式是否开启短信验证", false, 1));
  194. }
  195. if (Objects.nonNull(sysConfigTeachcloudExchangeHostUrl)) {
  196. sysConfigResultList.add(new SysConfigResult(sysConfigTeachcloudExchangeHostUrl));
  197. } else {
  198. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.TEACHCLOUD_EXCHANGE_HOST_URL, "第三方统一身份认证", "", 2));
  199. }
  200. return ResultUtil.ok(new SysAdminSetResult(schoolId, sysConfigResultList));
  201. }
  202. @ApiOperation(value = "用户验证保存")
  203. @ApiResponses({@ApiResponse(code = 200, message = "用户验证信息", response = ResultUtil.class)})
  204. @RequestMapping(value = "/user/save", method = RequestMethod.POST)
  205. @Transactional
  206. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  207. public Result sysadminUserSave(@Valid @RequestBody SysAdminSetParam sysAdminSetParam, BindingResult bindingResult) {
  208. if (bindingResult.hasErrors()) {
  209. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  210. }
  211. Optional.ofNullable(sysAdminSetParam.getParam()).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("用户/密码模式是否开启不能为空"));
  212. List<SysConfigResult> sysConfigResultList = sysAdminSetParam.getParam();
  213. List<SysConfig> sysConfigList = new ArrayList<>();
  214. for (SysConfigResult s : sysConfigResultList) {
  215. sysConfigList.add(new SysConfig(sysAdminSetParam.getSchoolId(), s));
  216. }
  217. sysConfigService.saveOrUpdateBatch(sysConfigList);
  218. for (SysConfigResult s : sysConfigResultList) {
  219. commonCacheService.updateSysConfigCache(sysAdminSetParam.getSchoolId(), s.getCode());
  220. }
  221. return ResultUtil.ok(true);
  222. }
  223. @ApiOperation(value = "查询自定义菜单权限")
  224. @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = CustomPrivilegeResult.class)})
  225. @RequestMapping(value = "/menu/custom/list", method = RequestMethod.POST)
  226. public Result customMenuList() {
  227. List<PrivilegeDto> customPrivilegeList = sysPrivilegeService.addCustomList();
  228. return ResultUtil.ok(new CustomPrivilegeResult(customPrivilegeList));
  229. }
  230. @ApiOperation(value = "学校新增/修改自定义菜单权限")
  231. @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = ResultUtil.class)})
  232. @RequestMapping(value = "/menu/custom/save", method = RequestMethod.POST)
  233. @Transactional
  234. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  235. public Result schoolPrivilegeSave(@Valid @RequestBody SysAdminSetParam tSchoolPrivilegeParam, BindingResult bindingResult) throws NoSuchAlgorithmException {
  236. if (bindingResult.hasErrors()) {
  237. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  238. }
  239. Set<Long> roleSetIds = null;
  240. QueryWrapper<TSchoolPrivilege> tSchoolPrivilegeQueryWrapper = new QueryWrapper<>();
  241. tSchoolPrivilegeQueryWrapper.lambda().eq(TSchoolPrivilege::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
  242. List<TSchoolPrivilege> tSchoolPrivileges = tSchoolPrivilegeService.list(tSchoolPrivilegeQueryWrapper);
  243. if (!CollectionUtils.isEmpty(tSchoolPrivileges)) {//编辑
  244. Set<Long> changePrivilegeSetIds = tSchoolPrivileges.stream().filter(s -> !Arrays.asList(tSchoolPrivilegeParam.getPrivilegeIds()).contains(s.getPrivilegeId()))
  245. .collect(Collectors.toList())
  246. .stream().map(s -> s.getPrivilegeId())
  247. .collect(Collectors.toSet());
  248. //数据发生改变
  249. if (!CollectionUtils.isEmpty(changePrivilegeSetIds)) {
  250. //查询该菜单下所有角色,删除该角色所发生改变的菜单数据
  251. QueryWrapper<SysRole> sysRoleQueryWrapper = new QueryWrapper<>();
  252. sysRoleQueryWrapper.lambda().eq(SysRole::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
  253. List<SysRole> sysRoleList = sysRoleService.list(sysRoleQueryWrapper);
  254. if (!CollectionUtils.isEmpty(sysRoleList)) {
  255. QueryWrapper<SysRolePrivilege> sysRolePrivilegeQueryWrapper = new QueryWrapper<>();
  256. sysRolePrivilegeQueryWrapper.lambda()
  257. .in(SysRolePrivilege::getRoleId, sysRoleList.stream().map(s -> s.getId()).collect(Collectors.toList()))
  258. .in(SysRolePrivilege::getPrivilegeId, changePrivilegeSetIds);
  259. List<SysRolePrivilege> sysRolePrivilegeList = sysRolePrivilegeService.list(sysRolePrivilegeQueryWrapper);
  260. //仅删除绑定了该权限的角色用户缓存
  261. roleSetIds = sysRolePrivilegeList.stream().map(s -> s.getRoleId()).collect(Collectors.toSet());
  262. sysRolePrivilegeService.remove(sysRolePrivilegeQueryWrapper);
  263. }
  264. }
  265. tSchoolPrivilegeService.remove(tSchoolPrivilegeQueryWrapper);
  266. }
  267. Long[] privilegeIds = tSchoolPrivilegeParam.getPrivilegeIds();
  268. if (Objects.nonNull(privilegeIds) && privilegeIds.length > 0) {
  269. List<TSchoolPrivilege> tSchoolPrivilegeList = new ArrayList<>();
  270. for (int i = 0; i < privilegeIds.length; i++) {
  271. tSchoolPrivilegeList.add(new TSchoolPrivilege(tSchoolPrivilegeParam.getSchoolId(), privilegeIds[i]));
  272. }
  273. tSchoolPrivilegeService.saveBatch(tSchoolPrivilegeList);
  274. }
  275. commonCacheService.removeSchoolPrivilegeCache(tSchoolPrivilegeParam.getSchoolId());
  276. //清缓存
  277. if (!CollectionUtils.isEmpty(roleSetIds)) {
  278. for (Long l : roleSetIds) {
  279. commonCacheService.removeRoleCache(l);
  280. // commonCacheService.removeRolePrivilegeCache(tSchoolPrivilegeParam.getSchoolId(), l);
  281. //绑定该角色的用户都需要清除鉴权缓存
  282. List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(l);
  283. for (SysUserRole s : sysUserRoleList) {
  284. SysUser user = commonCacheService.userCache(s.getUserId());
  285. if (Objects.nonNull(user)) {
  286. commonService.removeUserInfo(s.getUserId(), true);
  287. } else {
  288. sysUserRoleService.removeById(s);
  289. }
  290. }
  291. }
  292. }
  293. return ResultUtil.ok(true);
  294. }
  295. @ApiOperation(value = "学校已绑定自定义菜单权限列表")
  296. @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = SysAdminSetResult.class)})
  297. @RequestMapping(value = "/menu/custom/get_school_custom_privileges", method = RequestMethod.POST)
  298. public Result getSchoolPrivileges(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  299. List<TSchoolPrivilege> tSchoolPrivilegeList = commonCacheService.addSchoolPrivilegeCache(schoolId);
  300. List<String> privilegeIdList = tSchoolPrivilegeList.stream().map(s -> String.valueOf(s.getPrivilegeId())).collect(Collectors.toList());
  301. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult(schoolId);
  302. sysAdminSetResult.setPrivilegeIdList(CollectionUtils.isEmpty(privilegeIdList) ? new ArrayList<>() : privilegeIdList);
  303. return ResultUtil.ok(sysAdminSetResult);
  304. }
  305. @ApiOperation(value = "查询自定义角色权限")
  306. @ApiResponses({@ApiResponse(code = 200, message = "角色权限信息", response = CustomPrivilegeResult.class)})
  307. @RequestMapping(value = "/role/custom/list", method = RequestMethod.POST)
  308. public Result customRoleList() {
  309. List<SysRole> sysRoleList = commonCacheService.addCustomRoleCache();
  310. CustomPrivilegeResult customPrivilegeResult = new CustomPrivilegeResult();
  311. customPrivilegeResult.setCustomRoleList(sysRoleList);
  312. return ResultUtil.ok(sysRoleList);
  313. }
  314. @ApiOperation(value = "学校新增/修改自定义角色权限")
  315. @ApiResponses({@ApiResponse(code = 200, message = "角色权限信息", response = ResultUtil.class)})
  316. @RequestMapping(value = "/role/custom/save", method = RequestMethod.POST)
  317. @Transactional
  318. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  319. public Result schoolRoleSave(@Valid @RequestBody SysAdminSetParam tSchoolPrivilegeParam, BindingResult bindingResult) throws NoSuchAlgorithmException {
  320. if (bindingResult.hasErrors()) {
  321. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  322. }
  323. Set<Long> userSetIds = new HashSet<>();
  324. QueryWrapper<TSchoolRole> tSchoolRoleQueryWrapper = new QueryWrapper<>();
  325. tSchoolRoleQueryWrapper.lambda().eq(TSchoolRole::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
  326. List<TSchoolRole> tSchoolRoles = tSchoolRoleService.list(tSchoolRoleQueryWrapper);
  327. if (!CollectionUtils.isEmpty(tSchoolRoles)) {//编辑
  328. Set<Long> changeRoleSetIds = tSchoolRoles.stream().filter(s -> !Arrays.asList(tSchoolPrivilegeParam.getRoleIds()).contains(s.getRoleId()))
  329. .collect(Collectors.toList())
  330. .stream().map(s -> s.getRoleId())
  331. .collect(Collectors.toSet());
  332. //数据发生改变
  333. if (!CollectionUtils.isEmpty(changeRoleSetIds)) {
  334. //查询该角色下所有用户,删除该角色所发生改变的用户数据
  335. List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleIdsAndSchoolId(changeRoleSetIds, tSchoolPrivilegeParam.getSchoolId());
  336. if (!CollectionUtils.isEmpty(sysUserRoleList)) {
  337. List<Long> ids = new ArrayList<>(sysUserRoleList.size());
  338. for (SysUserRole s : sysUserRoleList) {
  339. userSetIds.add(s.getUserId());
  340. ids.add(s.getId());
  341. }
  342. sysUserRoleService.removeByIds(ids);
  343. }
  344. }
  345. tSchoolRoleService.remove(tSchoolRoleQueryWrapper);
  346. }
  347. Long[] roleIds = tSchoolPrivilegeParam.getRoleIds();
  348. if (Objects.nonNull(roleIds) && roleIds.length > 0) {
  349. List<TSchoolRole> tSchoolRoleList = new ArrayList<>();
  350. for (int i = 0; i < roleIds.length; i++) {
  351. tSchoolRoleList.add(new TSchoolRole(tSchoolPrivilegeParam.getSchoolId(), roleIds[i]));
  352. }
  353. tSchoolRoleService.saveBatch(tSchoolRoleList);
  354. }
  355. commonCacheService.removeSchoolRoleCache(tSchoolPrivilegeParam.getSchoolId());
  356. //清缓存
  357. if (!CollectionUtils.isEmpty(userSetIds)) {
  358. for (Long l : userSetIds) {
  359. SystemConstant.deleteUserCache(l);
  360. }
  361. }
  362. return ResultUtil.ok(true);
  363. }
  364. @ApiOperation(value = "学校已绑定自定义角色权限列表")
  365. @ApiResponses({@ApiResponse(code = 200, message = "角色权限信息", response = SysAdminSetResult.class)})
  366. @RequestMapping(value = "/role/custom/get_school_custom_roles", method = RequestMethod.POST)
  367. public Result getSchoolRoles(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  368. List<TSchoolRole> tSchoolRoleList = commonCacheService.addSchoolRoleCache(schoolId);
  369. List<String> roleIdList = tSchoolRoleList.stream().map(s -> String.valueOf(s.getRoleId())).collect(Collectors.toList());
  370. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult(schoolId);
  371. sysAdminSetResult.setRoleIdList(CollectionUtils.isEmpty(roleIdList) ? new ArrayList<>() : roleIdList);
  372. return ResultUtil.ok(sysAdminSetResult);
  373. }
  374. }