SysAdminSetController.java 24 KB

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