SysAdminSetController.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  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. @Resource
  64. private FileUploadService fileUploadService;
  65. @ApiOperation(value = "数据还原")
  66. @ApiResponses({@ApiResponse(code = 200, message = "数据还原信息", response = ResultUtil.class)})
  67. @RequestMapping(value = "/backup", method = RequestMethod.POST)
  68. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
  69. public Result sysadminBackup(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) throws Exception {
  70. mySQLDatabaseBackup.exportDatabaseTool();
  71. mySQLDatabaseBackup.deleteDbTool(SystemConstant.PRINT_DELETE_DATA_FILE_NAME, schoolId);
  72. return ResultUtil.ok(true);
  73. }
  74. @ApiOperation(value = "同步配置查询")
  75. @ApiResponses({@ApiResponse(code = 200, message = "同步配置信息", response = SysAdminSetResult.class)})
  76. @RequestMapping(value = "/sync/select", method = RequestMethod.POST)
  77. public Result sysadminSyncSelect(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  78. SysConfig sysConfigQuestionHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.QUESTION_HOST_URL);
  79. SysConfig sysConfigTeachcloudReportHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.TEACHCLOUD_REPORT_HOST_URL);
  80. SysConfig sysConfigOpenFlowMsgPush = commonCacheService.addSysConfigCache(schoolId, SystemConstant.OPEN_FLOW_MESSAGE_PUSH);
  81. SysConfig sysConfigFlowMsgType = commonCacheService.addSysConfigCache(schoolId, SystemConstant.FLOW_MESSAGE_TYPE);
  82. SysConfig sysConfigMqHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.MQ_HOST_URL);
  83. List<SysConfigResult> sysConfigResultList = new ArrayList<>();
  84. if (Objects.nonNull(sysConfigQuestionHostUrl)) {
  85. sysConfigResultList.add(new SysConfigResult(sysConfigQuestionHostUrl));
  86. } else {
  87. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.QUESTION_HOST_URL, "题库地址", "", 1));
  88. }
  89. if (Objects.nonNull(sysConfigTeachcloudReportHostUrl)) {
  90. sysConfigResultList.add(new SysConfigResult(sysConfigTeachcloudReportHostUrl));
  91. } else {
  92. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.TEACHCLOUD_REPORT_HOST_URL, "教研分析地址", "", 4));
  93. }
  94. if (Objects.nonNull(sysConfigOpenFlowMsgPush)) {
  95. sysConfigResultList.add(new SysConfigResult(sysConfigOpenFlowMsgPush));
  96. } else {
  97. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.OPEN_FLOW_MESSAGE_PUSH, "是否开启消息推送", "false", 5));
  98. }
  99. if (Objects.nonNull(sysConfigFlowMsgType)) {
  100. sysConfigResultList.add(new SysConfigResult(sysConfigFlowMsgType));
  101. } else {
  102. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.FLOW_MESSAGE_TYPE, "消息类型", FlowMsgTypeEnum.STANDARD, 6));
  103. }
  104. if (Objects.nonNull(sysConfigMqHostUrl)) {
  105. sysConfigResultList.add(new SysConfigResult(sysConfigMqHostUrl));
  106. } else {
  107. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.MQ_HOST_URL, "消息中心地址", "", 7));
  108. }
  109. return ResultUtil.ok(new SysAdminSetResult(schoolId, sysConfigResultList));
  110. }
  111. @ApiOperation(value = "同步配置保存")
  112. @ApiResponses({@ApiResponse(code = 200, message = "同步配置信息", response = ResultUtil.class)})
  113. @RequestMapping(value = "/sync/save", method = RequestMethod.POST)
  114. @Transactional
  115. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  116. public Result sysadminSyncSave(@Valid @RequestBody SysAdminSetParam sysAdminSetParam, BindingResult bindingResult) {
  117. if (bindingResult.hasErrors()) {
  118. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  119. }
  120. Optional.ofNullable(sysAdminSetParam.getParam()).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("同步配置地址不能为空"));
  121. List<SysConfigResult> sysConfigResultList = sysAdminSetParam.getParam();
  122. List<SysConfig> sysConfigList = new ArrayList<>();
  123. for (SysConfigResult s : sysConfigResultList) {
  124. sysConfigList.add(new SysConfig(sysAdminSetParam.getSchoolId(), s));
  125. }
  126. sysConfigService.saveOrUpdateBatch(sysConfigList);
  127. for (SysConfigResult s : sysConfigResultList) {
  128. commonCacheService.updateSysConfigCache(sysAdminSetParam.getSchoolId(), s.getCode());
  129. }
  130. return ResultUtil.ok(true);
  131. }
  132. @ApiOperation(value = "系统试卷规格配置查询")
  133. @ApiResponses({@ApiResponse(code = 200, message = "系统试卷规格配置信息", response = CustomPrivilegeResult.class)})
  134. @RequestMapping(value = "/paper/sys/select", method = RequestMethod.POST)
  135. public Result sysadminPaperSysSelect() {
  136. SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.SYS_PDF_SIZE_LIST);
  137. Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置全局上传试卷规格"));
  138. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult();
  139. SysConfigResult sysConfigResult = new SysConfigResult(sysConfig);
  140. sysConfigResult.setValue(Arrays.asList(sysConfigResult.getValue().toString().replaceAll("\\[", "").replaceAll("\\]", "").split(", ")));
  141. sysAdminSetResult.setResult(Arrays.asList(sysConfigResult));
  142. return ResultUtil.ok(sysAdminSetResult);
  143. }
  144. @ApiOperation(value = "试卷规格配置查询")
  145. @ApiResponses({@ApiResponse(code = 200, message = "试卷规格配置信息", response = SysAdminSetResult.class)})
  146. @RequestMapping(value = "/paper/select", method = RequestMethod.POST)
  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. public Result sysadminUserSelect(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  189. SysConfig sysConfigAccount = commonCacheService.addSysConfigCache(schoolId, SystemConstant.ACCOUNT_SMS_VERIFY);
  190. SysConfig sysConfigTeachcloudExchangeHostUrl = commonCacheService.addSysConfigCache(schoolId, SystemConstant.TEACHCLOUD_EXCHANGE_HOST_URL);
  191. List<SysConfigResult> sysConfigResultList = new ArrayList<>();
  192. if (Objects.nonNull(sysConfigAccount)) {
  193. sysConfigResultList.add(new SysConfigResult(sysConfigAccount));
  194. } else {
  195. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.ACCOUNT_SMS_VERIFY, "用户/密码模式是否开启短信验证", false, 1));
  196. }
  197. if (Objects.nonNull(sysConfigTeachcloudExchangeHostUrl)) {
  198. sysConfigResultList.add(new SysConfigResult(sysConfigTeachcloudExchangeHostUrl));
  199. } else {
  200. sysConfigResultList.add(new SysConfigResult(null, SystemConstant.TEACHCLOUD_EXCHANGE_HOST_URL, "第三方统一身份认证", "", 2));
  201. }
  202. return ResultUtil.ok(new SysAdminSetResult(schoolId, sysConfigResultList));
  203. }
  204. @ApiOperation(value = "用户验证保存")
  205. @ApiResponses({@ApiResponse(code = 200, message = "用户验证信息", response = ResultUtil.class)})
  206. @RequestMapping(value = "/user/save", method = RequestMethod.POST)
  207. @Transactional
  208. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  209. public Result sysadminUserSave(@Valid @RequestBody SysAdminSetParam sysAdminSetParam, BindingResult bindingResult) {
  210. if (bindingResult.hasErrors()) {
  211. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  212. }
  213. Optional.ofNullable(sysAdminSetParam.getParam()).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("用户/密码模式是否开启不能为空"));
  214. List<SysConfigResult> sysConfigResultList = sysAdminSetParam.getParam();
  215. List<SysConfig> sysConfigList = new ArrayList<>();
  216. for (SysConfigResult s : sysConfigResultList) {
  217. sysConfigList.add(new SysConfig(sysAdminSetParam.getSchoolId(), s));
  218. }
  219. sysConfigService.saveOrUpdateBatch(sysConfigList);
  220. for (SysConfigResult s : sysConfigResultList) {
  221. commonCacheService.updateSysConfigCache(sysAdminSetParam.getSchoolId(), s.getCode());
  222. }
  223. return ResultUtil.ok(true);
  224. }
  225. @ApiOperation(value = "查询自定义菜单权限")
  226. @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = CustomPrivilegeResult.class)})
  227. @RequestMapping(value = "/menu/custom/list", method = RequestMethod.POST)
  228. public Result customMenuList() {
  229. List<PrivilegeDto> customPrivilegeList = sysPrivilegeService.addCustomList();
  230. return ResultUtil.ok(new CustomPrivilegeResult(customPrivilegeList));
  231. }
  232. @ApiOperation(value = "学校新增/修改自定义菜单权限")
  233. @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = ResultUtil.class)})
  234. @RequestMapping(value = "/menu/custom/save", method = RequestMethod.POST)
  235. @Transactional
  236. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  237. public Result schoolPrivilegeSave(@Valid @RequestBody SysAdminSetParam tSchoolPrivilegeParam, BindingResult bindingResult) throws NoSuchAlgorithmException {
  238. if (bindingResult.hasErrors()) {
  239. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  240. }
  241. Set<Long> roleSetIds = null;
  242. QueryWrapper<TSchoolPrivilege> tSchoolPrivilegeQueryWrapper = new QueryWrapper<>();
  243. tSchoolPrivilegeQueryWrapper.lambda().eq(TSchoolPrivilege::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
  244. List<TSchoolPrivilege> tSchoolPrivileges = tSchoolPrivilegeService.list(tSchoolPrivilegeQueryWrapper);
  245. if (!CollectionUtils.isEmpty(tSchoolPrivileges)) {//编辑
  246. Set<Long> changePrivilegeSetIds = tSchoolPrivileges.stream().filter(s -> !Arrays.asList(tSchoolPrivilegeParam.getPrivilegeIds()).contains(s.getPrivilegeId()))
  247. .collect(Collectors.toList())
  248. .stream().map(s -> s.getPrivilegeId())
  249. .collect(Collectors.toSet());
  250. //数据发生改变
  251. if (!CollectionUtils.isEmpty(changePrivilegeSetIds)) {
  252. //查询该菜单下所有角色,删除该角色所发生改变的菜单数据
  253. QueryWrapper<SysRole> sysRoleQueryWrapper = new QueryWrapper<>();
  254. sysRoleQueryWrapper.lambda().eq(SysRole::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
  255. List<SysRole> sysRoleList = sysRoleService.list(sysRoleQueryWrapper);
  256. if (!CollectionUtils.isEmpty(sysRoleList)) {
  257. QueryWrapper<SysRolePrivilege> sysRolePrivilegeQueryWrapper = new QueryWrapper<>();
  258. sysRolePrivilegeQueryWrapper.lambda()
  259. .in(SysRolePrivilege::getRoleId, sysRoleList.stream().map(s -> s.getId()).collect(Collectors.toList()))
  260. .in(SysRolePrivilege::getPrivilegeId, changePrivilegeSetIds);
  261. List<SysRolePrivilege> sysRolePrivilegeList = sysRolePrivilegeService.list(sysRolePrivilegeQueryWrapper);
  262. //仅删除绑定了该权限的角色用户缓存
  263. roleSetIds = sysRolePrivilegeList.stream().map(s -> s.getRoleId()).collect(Collectors.toSet());
  264. sysRolePrivilegeService.remove(sysRolePrivilegeQueryWrapper);
  265. }
  266. }
  267. tSchoolPrivilegeService.remove(tSchoolPrivilegeQueryWrapper);
  268. }
  269. Long[] privilegeIds = tSchoolPrivilegeParam.getPrivilegeIds();
  270. if (Objects.nonNull(privilegeIds) && privilegeIds.length > 0) {
  271. List<TSchoolPrivilege> tSchoolPrivilegeList = new ArrayList<>();
  272. for (int i = 0; i < privilegeIds.length; i++) {
  273. tSchoolPrivilegeList.add(new TSchoolPrivilege(tSchoolPrivilegeParam.getSchoolId(), privilegeIds[i]));
  274. }
  275. tSchoolPrivilegeService.saveBatch(tSchoolPrivilegeList);
  276. }
  277. commonCacheService.removeSchoolPrivilegeCache(tSchoolPrivilegeParam.getSchoolId());
  278. //清缓存
  279. if (!CollectionUtils.isEmpty(roleSetIds)) {
  280. for (Long l : roleSetIds) {
  281. commonCacheService.removeRoleCache(l);
  282. // commonCacheService.removeRolePrivilegeCache(tSchoolPrivilegeParam.getSchoolId(), l);
  283. //绑定该角色的用户都需要清除鉴权缓存
  284. List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(l);
  285. for (SysUserRole s : sysUserRoleList) {
  286. SysUser user = commonCacheService.userCache(s.getUserId());
  287. if (Objects.nonNull(user)) {
  288. commonService.removeUserInfo(s.getUserId(), true);
  289. } else {
  290. sysUserRoleService.removeById(s);
  291. }
  292. }
  293. }
  294. }
  295. return ResultUtil.ok(true);
  296. }
  297. @ApiOperation(value = "学校已绑定自定义菜单权限列表")
  298. @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = SysAdminSetResult.class)})
  299. @RequestMapping(value = "/menu/custom/get_school_custom_privileges", method = RequestMethod.POST)
  300. public Result getSchoolPrivileges(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  301. List<TSchoolPrivilege> tSchoolPrivilegeList = commonCacheService.addSchoolPrivilegeCache(schoolId);
  302. List<String> privilegeIdList = tSchoolPrivilegeList.stream().map(s -> String.valueOf(s.getPrivilegeId())).collect(Collectors.toList());
  303. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult(schoolId);
  304. sysAdminSetResult.setPrivilegeIdList(CollectionUtils.isEmpty(privilegeIdList) ? new ArrayList<>() : privilegeIdList);
  305. return ResultUtil.ok(sysAdminSetResult);
  306. }
  307. @ApiOperation(value = "查询自定义角色权限")
  308. @ApiResponses({@ApiResponse(code = 200, message = "角色权限信息", response = CustomPrivilegeResult.class)})
  309. @RequestMapping(value = "/role/custom/list", method = RequestMethod.POST)
  310. public Result customRoleList() {
  311. List<SysRole> sysRoleList = commonCacheService.addCustomRoleCache();
  312. CustomPrivilegeResult customPrivilegeResult = new CustomPrivilegeResult();
  313. customPrivilegeResult.setCustomRoleList(sysRoleList);
  314. return ResultUtil.ok(sysRoleList);
  315. }
  316. @ApiOperation(value = "学校新增/修改自定义角色权限")
  317. @ApiResponses({@ApiResponse(code = 200, message = "角色权限信息", response = ResultUtil.class)})
  318. @RequestMapping(value = "/role/custom/save", method = RequestMethod.POST)
  319. @Transactional
  320. @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EDIT)
  321. public Result schoolRoleSave(@Valid @RequestBody SysAdminSetParam tSchoolPrivilegeParam, BindingResult bindingResult) throws NoSuchAlgorithmException {
  322. if (bindingResult.hasErrors()) {
  323. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  324. }
  325. Set<Long> userSetIds = new HashSet<>();
  326. QueryWrapper<TSchoolRole> tSchoolRoleQueryWrapper = new QueryWrapper<>();
  327. tSchoolRoleQueryWrapper.lambda().eq(TSchoolRole::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
  328. List<TSchoolRole> tSchoolRoles = tSchoolRoleService.list(tSchoolRoleQueryWrapper);
  329. if (!CollectionUtils.isEmpty(tSchoolRoles)) {//编辑
  330. Set<Long> changeRoleSetIds = tSchoolRoles.stream().filter(s -> !Arrays.asList(tSchoolPrivilegeParam.getRoleIds()).contains(s.getRoleId()))
  331. .collect(Collectors.toList())
  332. .stream().map(s -> s.getRoleId())
  333. .collect(Collectors.toSet());
  334. //数据发生改变
  335. if (!CollectionUtils.isEmpty(changeRoleSetIds)) {
  336. //查询该角色下所有用户,删除该角色所发生改变的用户数据
  337. List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleIdsAndSchoolId(changeRoleSetIds, tSchoolPrivilegeParam.getSchoolId());
  338. if (!CollectionUtils.isEmpty(sysUserRoleList)) {
  339. List<Long> ids = new ArrayList<>(sysUserRoleList.size());
  340. for (SysUserRole s : sysUserRoleList) {
  341. userSetIds.add(s.getUserId());
  342. ids.add(s.getId());
  343. }
  344. sysUserRoleService.removeByIds(ids);
  345. }
  346. }
  347. tSchoolRoleService.remove(tSchoolRoleQueryWrapper);
  348. }
  349. Long[] roleIds = tSchoolPrivilegeParam.getRoleIds();
  350. if (Objects.nonNull(roleIds) && roleIds.length > 0) {
  351. List<TSchoolRole> tSchoolRoleList = new ArrayList<>();
  352. for (int i = 0; i < roleIds.length; i++) {
  353. tSchoolRoleList.add(new TSchoolRole(tSchoolPrivilegeParam.getSchoolId(), roleIds[i]));
  354. }
  355. tSchoolRoleService.saveBatch(tSchoolRoleList);
  356. }
  357. commonCacheService.removeSchoolRoleCache(tSchoolPrivilegeParam.getSchoolId());
  358. //清缓存
  359. if (!CollectionUtils.isEmpty(userSetIds)) {
  360. for (Long l : userSetIds) {
  361. SystemConstant.deleteUserCache(l);
  362. }
  363. }
  364. return ResultUtil.ok(true);
  365. }
  366. @ApiOperation(value = "学校已绑定自定义角色权限列表")
  367. @ApiResponses({@ApiResponse(code = 200, message = "角色权限信息", response = SysAdminSetResult.class)})
  368. @RequestMapping(value = "/role/custom/get_school_custom_roles", method = RequestMethod.POST)
  369. public Result getSchoolRoles(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  370. List<TSchoolRole> tSchoolRoleList = commonCacheService.addSchoolRoleCache(schoolId);
  371. List<String> roleIdList = tSchoolRoleList.stream().map(s -> String.valueOf(s.getRoleId())).collect(Collectors.toList());
  372. SysAdminSetResult sysAdminSetResult = new SysAdminSetResult(schoolId);
  373. sysAdminSetResult.setRoleIdList(CollectionUtils.isEmpty(roleIdList) ? new ArrayList<>() : roleIdList);
  374. return ResultUtil.ok(sysAdminSetResult);
  375. }
  376. @ApiOperation(value = "课程目标达成度模板配置查询")
  377. @ApiResponses({@ApiResponse(code = 200, message = "课程目标达成度模板配置查询", response = CustomPrivilegeResult.class)})
  378. @RequestMapping(value = "/course/degree/select", method = RequestMethod.POST)
  379. public Result sysadminCourseDegreeSelect(@ApiParam(value = "学校id ", required = true) @RequestParam Long schoolId) {
  380. SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.SCHOOL_COURSE_DEGREE_TEMPLATE);
  381. SysConfigResult sysConfigResult = new SysConfigResult();
  382. if (sysConfig != null) {
  383. sysConfigResult = new SysConfigResult(sysConfig);
  384. if (sysConfigResult != null && sysConfigResult.getValue() != null) {
  385. sysConfigResult.setValue(fileUploadService.filePreview(Long.valueOf(sysConfigResult.getValue().toString())));
  386. }
  387. }
  388. return ResultUtil.ok(sysConfigResult);
  389. }
  390. @ApiOperation(value = "课程目标达成度模板配置保存")
  391. @ApiResponses({@ApiResponse(code = 200, message = "课程目标达成度模板配置保存", response = CustomPrivilegeResult.class)})
  392. @RequestMapping(value = "/course/degree/save", method = RequestMethod.POST)
  393. public Result sysadminCourseDegreeSave(@ApiParam(value = "学校ID", required = true) @RequestParam Long schoolId,
  394. @ApiParam(value = "附件ID", required = true) @RequestParam Long attachmentId) {
  395. SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.SCHOOL_COURSE_DEGREE_TEMPLATE);
  396. if (sysConfig == null) {
  397. sysConfig = new SysConfig(schoolId, SystemConstant.SCHOOL_COURSE_DEGREE_TEMPLATE, "课程目标达成度模板配置", String.valueOf(attachmentId));
  398. } else {
  399. sysConfig.setConfigValue(String.valueOf(attachmentId));
  400. }
  401. if (sysConfigService.saveOrUpdate(sysConfig)) {
  402. commonCacheService.updateSysConfigCache(schoolId, sysConfig.getConfigKey());
  403. }
  404. SysConfigResult sysConfigResult = new SysConfigResult(sysConfig);
  405. if (sysConfigResult != null && sysConfigResult.getValue() != null) {
  406. sysConfigResult.setValue(fileUploadService.filePreview(Long.valueOf(sysConfigResult.getValue().toString())));
  407. }
  408. return ResultUtil.ok(sysConfigResult);
  409. }
  410. }