SysController.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715
  1. package com.qmth.distributed.print.api;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.qmth.boot.api.annotation.Aac;
  4. import com.qmth.boot.api.annotation.BOOL;
  5. import com.qmth.boot.api.constant.ApiConstant;
  6. import com.qmth.boot.api.exception.ApiException;
  7. import com.qmth.distributed.print.business.bean.params.LoginParam;
  8. import com.qmth.distributed.print.business.bean.result.DictionaryResult;
  9. import com.qmth.distributed.print.business.bean.result.EditResult;
  10. import com.qmth.distributed.print.business.entity.ExamPrintPlan;
  11. import com.qmth.distributed.print.business.entity.TBSyncTask;
  12. import com.qmth.distributed.print.business.enums.DictionaryEnum;
  13. import com.qmth.distributed.print.business.enums.LoginTypeEnum;
  14. import com.qmth.distributed.print.business.service.*;
  15. import com.qmth.distributed.print.business.util.PdfUtil;
  16. import com.qmth.teachcloud.common.bean.auth.AuthBean;
  17. import com.qmth.teachcloud.common.bean.result.LoginResult;
  18. import com.qmth.teachcloud.common.bean.result.UserLoginCheckResult;
  19. import com.qmth.teachcloud.common.config.DictionaryConfig;
  20. import com.qmth.teachcloud.common.contant.SystemConstant;
  21. import com.qmth.teachcloud.common.entity.*;
  22. import com.qmth.teachcloud.common.enums.*;
  23. import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
  24. import com.qmth.teachcloud.common.service.*;
  25. import com.qmth.teachcloud.common.util.FileUtil;
  26. import com.qmth.teachcloud.common.util.Result;
  27. import com.qmth.teachcloud.common.util.ResultUtil;
  28. import com.qmth.teachcloud.common.util.ServletUtil;
  29. import io.swagger.annotations.*;
  30. import org.apache.commons.codec.digest.DigestUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.apache.http.entity.ContentType;
  33. import org.slf4j.Logger;
  34. import org.slf4j.LoggerFactory;
  35. import org.springframework.beans.BeanUtils;
  36. import org.springframework.mock.web.MockMultipartFile;
  37. import org.springframework.transaction.annotation.Transactional;
  38. import org.springframework.validation.BindingResult;
  39. import org.springframework.web.bind.annotation.*;
  40. import org.springframework.web.multipart.MultipartFile;
  41. import javax.annotation.Resource;
  42. import javax.validation.Valid;
  43. import java.io.File;
  44. import java.io.FileInputStream;
  45. import java.io.FileOutputStream;
  46. import java.io.OutputStream;
  47. import java.security.NoSuchAlgorithmException;
  48. import java.util.*;
  49. import java.util.stream.Collectors;
  50. /**
  51. * @Date: 2021/3/30.
  52. */
  53. @Api(tags = "系统Controller")
  54. @RestController
  55. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}")
  56. public class SysController {
  57. private final static Logger log = LoggerFactory.getLogger(SysController.class);
  58. @Resource
  59. SysUserService sysUserService;
  60. @Resource
  61. BasicVerifyCodeService basicVerifyCodeService;
  62. @Resource
  63. DictionaryConfig dictionaryConfig;
  64. @Resource
  65. CommonCacheService commonCacheService;
  66. @Resource
  67. PrintCommonService printCommonService;
  68. @Resource
  69. TBTaskService tbTaskService;
  70. @Resource
  71. BasicAttachmentService basicAttachmentService;
  72. @Resource
  73. SysUserRoleService sysUserRoleService;
  74. @Resource
  75. TeachcloudCommonService teachcloudCommonService;
  76. @Resource
  77. SysOrgService sysOrgService;
  78. @Resource
  79. BasicMajorService basicMajorService;
  80. @Resource
  81. BasicClazzService basicClazzService;
  82. @Resource
  83. BasicStudentService basicStudentService;
  84. @Resource
  85. BasicSemesterService basicSemesterService;
  86. @Resource
  87. ExamPrintPlanService examPrintPlanService;
  88. @Resource
  89. TBSyncTaskService tbSyncTaskService;
  90. @Resource
  91. BasicCampusService basicCampusService;
  92. @Resource
  93. BasicExamService basicExamService;
  94. /**
  95. * 登录
  96. *
  97. * @param login
  98. * @return
  99. */
  100. @ApiOperation(value = "登录")
  101. @RequestMapping(value = "/login", method = RequestMethod.POST)
  102. @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
  103. @Aac(auth = BOOL.FALSE)
  104. public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody LoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
  105. if (bindingResult.hasErrors()) {
  106. return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
  107. }
  108. BasicSchool basicSchool = null;
  109. if (!login.getSchoolCode().equalsIgnoreCase(SystemConstant.ADMIN_CODE)) {
  110. basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
  111. if (Objects.isNull(basicSchool)) {
  112. throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
  113. }
  114. if (Objects.nonNull(basicSchool.getEnable()) && !basicSchool.getEnable()) {
  115. throw ExceptionResultEnum.SCHOOL_ENABLE.exception();
  116. }
  117. }
  118. QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
  119. if (Objects.nonNull(basicSchool)) {
  120. wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
  121. }
  122. // 账号密码登录
  123. List<SysUser> userList = null;
  124. if (LoginTypeEnum.ACCOUNT.name().equals(login.getType())) {
  125. String loginName = login.getLoginName();
  126. String password = login.getPassword();
  127. // 非空校验
  128. if (StringUtils.isBlank(loginName)) {
  129. throw ExceptionResultEnum.ERROR.exception("用户名不能为空");
  130. }
  131. if (StringUtils.isBlank(password)) {
  132. throw ExceptionResultEnum.ERROR.exception("密码不能为空");
  133. }
  134. wrapper.lambda().and(w -> w.eq(SysUser::getLoginName, loginName).or().eq(SysUser::getCode, loginName));
  135. userList = sysUserService.list(wrapper);
  136. //用户不存在
  137. if (userList == null || userList.isEmpty()) {
  138. throw ExceptionResultEnum.ERROR.exception("用户不存在");
  139. }
  140. if (userList.size() > 1) {
  141. throw ExceptionResultEnum.ERROR.exception("查出多个用户");
  142. }
  143. SysUser sysUser = userList.get(0);
  144. if (!sysUser.getEnable()) {
  145. throw ExceptionResultEnum.ERROR.exception("用户被禁用");
  146. }
  147. if (!password.equals(userList.get(0).getPassword())) {
  148. throw ExceptionResultEnum.ERROR.exception("密码错误");
  149. }
  150. } else if (LoginTypeEnum.PHONE.name().equals(login.getType())) {
  151. String mobileNumber = login.getMobileNumber();
  152. String code = login.getCode();
  153. // 非空校验
  154. if (StringUtils.isBlank(mobileNumber)) {
  155. throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
  156. }
  157. if (StringUtils.isBlank(code)) {
  158. throw ExceptionResultEnum.ERROR.exception("验证码不能为空");
  159. }
  160. wrapper.lambda().eq(SysUser::getMobileNumber, mobileNumber);
  161. userList = sysUserService.list(wrapper);
  162. //用户不存在
  163. if (userList == null || userList.isEmpty()) {
  164. throw ExceptionResultEnum.ERROR.exception("用户不存在");
  165. }
  166. if (userList.size() > 1) {
  167. throw ExceptionResultEnum.ERROR.exception("查出多个用户");
  168. }
  169. SysUser sysUser = userList.get(0);
  170. // 校验验证码
  171. sysUserService.checkSmsCode(sysUser.getId(), sysUser.getMobileNumber(), code);
  172. // 如果不是共用验证码再过期
  173. if (!dictionaryConfig.smsDomain().getSmsNormalCode().equals(login.getCode())) {
  174. sysUserService.expiredVerifyCode(sysUser.getId(), sysUser.getMobileNumber());
  175. }
  176. } else {
  177. throw ExceptionResultEnum.ERROR.exception("登录参数错误");
  178. }
  179. if (login.getSchoolCode().equalsIgnoreCase(SystemConstant.ADMIN_CODE)) {
  180. userList.forEach(o -> {
  181. AuthBean authBean = teachcloudCommonService.getUserAuth(o.getId());
  182. if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().size() > 0) {
  183. if (Objects.nonNull(authBean.getSchool())) {
  184. throw ExceptionResultEnum.ERROR.exception("用户无法通过当前页面登录");
  185. }
  186. }
  187. });
  188. }
  189. SysUser sysUser = userList.get(0);
  190. LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
  191. return ResultUtil.ok(loginResult);
  192. }
  193. /**
  194. * 登出
  195. *
  196. * @return
  197. */
  198. @ApiOperation(value = "登出")
  199. @RequestMapping(value = "/logout", method = RequestMethod.POST)
  200. @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
  201. public Result logout() throws NoSuchAlgorithmException {
  202. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  203. teachcloudCommonService.removeUserInfo(sysUser.getId(), false);
  204. return ResultUtil.ok();
  205. }
  206. /**
  207. * 发送验证码
  208. *
  209. * @param loginParam
  210. * @return
  211. */
  212. @ApiOperation(value = "发送验证码")
  213. @RequestMapping(value = "/get_verify_code", method = RequestMethod.POST)
  214. @Aac(auth = BOOL.FALSE)
  215. public Result getVerifyCode(@RequestBody LoginParam loginParam) {
  216. String mobileNumber = loginParam.getMobileNumber();
  217. if (StringUtils.isBlank(mobileNumber)) {
  218. throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
  219. }
  220. QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
  221. if (StringUtils.isNotBlank(loginParam.getSchoolCode())) {
  222. BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
  223. if (Objects.nonNull(basicSchool)) {
  224. wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
  225. }
  226. }
  227. wrapper.lambda().eq(SysUser::getMobileNumber, mobileNumber);
  228. List<SysUser> userList = sysUserService.list(wrapper);
  229. //用户不存在
  230. if (userList == null || userList.isEmpty()) {
  231. throw ExceptionResultEnum.ERROR.exception("手机号不存在");
  232. }
  233. if (userList.size() > 1) {
  234. throw ExceptionResultEnum.ERROR.exception("手机号绑定了多个用户");
  235. }
  236. SysUser sysUser = userList.get(0);
  237. if (!sysUser.getEnable()) {
  238. throw ExceptionResultEnum.ERROR.exception("手机号被禁用");
  239. }
  240. if (SystemConstant.strNotNull(mobileNumber)) {
  241. basicVerifyCodeService.sendVeirfyCode(mobileNumber, sysUser.getId());
  242. }
  243. int pwdCount = sysUser.getPwdCount();
  244. List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUser.getId());
  245. if (sysRoleList.stream().map(SysRole::getType).collect(Collectors.toSet()).contains(RoleTypeEnum.ADMIN)) {
  246. mobileNumber = sysUser.getLoginName() + "(特权用户)";
  247. pwdCount = 1;
  248. }
  249. UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(sysUser.getId(), mobileNumber, pwdCount);
  250. return ResultUtil.ok(userLoginCheckResult, "");
  251. }
  252. /**
  253. * 发送验证码(绑定手机号)
  254. *
  255. * @param loginParam
  256. * @return
  257. */
  258. @ApiOperation(value = "发送验证码(绑定手机号)")
  259. @RequestMapping(value = "/get_verify_code_for_bind", method = RequestMethod.POST)
  260. @Aac(auth = BOOL.FALSE)
  261. public Result getVerifyCodeForBind(@RequestBody LoginParam loginParam) {
  262. String loginName = loginParam.getLoginName();
  263. String password = loginParam.getPassword();
  264. String schoolCode = loginParam.getSchoolCode();
  265. String mobileNumber = loginParam.getMobileNumber();
  266. if (StringUtils.isBlank(schoolCode)) {
  267. throw ExceptionResultEnum.ERROR.exception("学校代码不能为空");
  268. }
  269. QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
  270. BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
  271. if (Objects.isNull(basicSchool)) {
  272. throw ExceptionResultEnum.ERROR.exception("学校不存在");
  273. }
  274. if (StringUtils.isBlank(mobileNumber)) {
  275. throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
  276. }
  277. wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId())
  278. .eq(SysUser::getMobileNumber, mobileNumber);
  279. List<SysUser> userList = sysUserService.list(wrapper);
  280. if (userList != null && userList.size() > 0) {
  281. throw ExceptionResultEnum.ERROR.exception("手机号已使用");
  282. }
  283. // 根据账号/密码取用户ID
  284. if (StringUtils.isBlank(loginName)) {
  285. throw ExceptionResultEnum.ERROR.exception("账号不能为空");
  286. }
  287. if (StringUtils.isBlank(password)) {
  288. throw ExceptionResultEnum.ERROR.exception("密码不能为空");
  289. }
  290. QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
  291. sysUserQueryWrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId())
  292. .and(w -> w.eq(SysUser::getLoginName, loginName).or().eq(SysUser::getCode, loginName))
  293. .eq(SysUser::getPassword, password);
  294. SysUser sysUser = sysUserService.getOne(sysUserQueryWrapper);
  295. if (sysUser == null) {
  296. throw ExceptionResultEnum.ERROR.exception("用户数据异常");
  297. }
  298. // 发送短信验证码
  299. basicVerifyCodeService.sendVeirfyCode(mobileNumber, sysUser.getId());
  300. int pwdCount = sysUser.getPwdCount();
  301. List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUser.getId());
  302. if (sysRoleList.stream().map(SysRole::getType).collect(Collectors.toSet()).contains(RoleTypeEnum.ADMIN)) {
  303. mobileNumber = sysUser.getLoginName() + "(特权用户)";
  304. pwdCount = 1;
  305. }
  306. UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(sysUser.getId(), mobileNumber, pwdCount);
  307. return ResultUtil.ok(userLoginCheckResult, "");
  308. }
  309. @ApiOperation(value = "根据机构代码查询机构信息接口")
  310. @RequestMapping(value = "/school/query_by_school_code", method = RequestMethod.POST)
  311. @ApiResponses({@ApiResponse(code = 200, message = "学校信息", response = EditResult.class)})
  312. @Aac(auth = BOOL.FALSE)
  313. public Result queryBySchoolCode(@ApiParam(value = "机构code", required = true) @RequestParam String code) {
  314. if (!code.equalsIgnoreCase(SystemConstant.ADMIN_CODE)) {
  315. BasicSchool basicSchool = commonCacheService.schoolCache(code);
  316. if (Objects.isNull(basicSchool)) {
  317. throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
  318. }
  319. Map<String, String> map = new HashMap<>();
  320. map.put(SystemConstant.LOGO, basicSchool.getLogo());
  321. map.put("name", basicSchool.getName());
  322. return ResultUtil.ok(map);
  323. } else {
  324. Map<String, String> map = new HashMap<>();
  325. map.put(SystemConstant.LOGO, dictionaryConfig.sysDomain().getAdminLogoUrl());
  326. map.put("name", null);
  327. return ResultUtil.ok(map);
  328. }
  329. }
  330. @ApiOperation(value = "文件上传接口")
  331. @RequestMapping(value = "/file/upload", method = RequestMethod.POST)
  332. @Transactional
  333. @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
  334. public Result fileUpload(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
  335. @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type) {
  336. BasicAttachment basicAttachment = null;
  337. try {
  338. basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
  339. if (Objects.isNull(basicAttachment)) {
  340. throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
  341. }
  342. } catch (Exception e) {
  343. log.error(SystemConstant.LOG_ERROR, e);
  344. if (Objects.nonNull(basicAttachment)) {
  345. basicAttachmentService.deleteAttachment(basicAttachment);
  346. }
  347. if (e instanceof ApiException) {
  348. ResultUtil.error((ApiException) e, e.getMessage());
  349. } else {
  350. ResultUtil.error(e.getMessage());
  351. }
  352. }
  353. return ResultUtil.ok(new EditResult(basicAttachment.getId(), teachcloudCommonService.filePreview(basicAttachment.getPath()), basicAttachment.getPages()));
  354. }
  355. @ApiOperation(value = "考试试卷文件上传接口")
  356. @RequestMapping(value = "/file/exam_paper_upload", method = RequestMethod.POST)
  357. @Transactional
  358. @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
  359. public Result fileExamPaperUpload(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
  360. @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type) {
  361. Map<String, EditResult> resultMap = new HashMap<>();
  362. BasicAttachment basicOriginalAttachment = null;
  363. BasicAttachment basicTranslateAttachment = null;
  364. EditResult original = new EditResult();
  365. EditResult translate = new EditResult();
  366. File pdfOriginalFile = null;
  367. File localTempFile = null;
  368. try {
  369. pdfOriginalFile = FileUtil.multipartFileToFile(file);
  370. PageSizeEnum pageSizeEnum = PdfUtil.getPdfFormat(pdfOriginalFile);
  371. switch (pageSizeEnum) {
  372. case A3:
  373. basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
  374. if (Objects.isNull(basicOriginalAttachment)) {
  375. throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
  376. }
  377. original.setId(basicOriginalAttachment.getId());
  378. original.setUrl(teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()));
  379. original.setPages(basicOriginalAttachment.getPages());
  380. BeanUtils.copyProperties(original, translate);
  381. break;
  382. case A4:
  383. basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
  384. if (Objects.isNull(basicOriginalAttachment)) {
  385. throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
  386. }
  387. original.setId(basicOriginalAttachment.getId());
  388. original.setUrl(teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()));
  389. original.setPages(basicOriginalAttachment.getPages());
  390. String destUrl = SystemConstant.PDF_TEMP_FILES_DIR + File.separator + file.getOriginalFilename();
  391. localTempFile = new File(destUrl);
  392. OutputStream out = new FileOutputStream(localTempFile);
  393. PdfUtil.concatPDFs(new FileInputStream(pdfOriginalFile), out, false);
  394. // File转换成MutipartFile
  395. FileInputStream inputStream = new FileInputStream(localTempFile);
  396. MultipartFile multipartFile = new MockMultipartFile(localTempFile.getName(), localTempFile.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
  397. basicTranslateAttachment = printCommonService.saveAttachment(multipartFile, DigestUtils.md5Hex(multipartFile.getBytes()), type);
  398. translate.setId(basicTranslateAttachment.getId());
  399. translate.setUrl(teachcloudCommonService.filePreview(basicTranslateAttachment.getPath()));
  400. translate.setPages(basicTranslateAttachment.getPages());
  401. break;
  402. default:
  403. throw ExceptionResultEnum.ERROR.exception("请上传A4或A3格式的试卷文件");
  404. }
  405. resultMap.put("original", original);
  406. resultMap.put("translate", translate);
  407. } catch (Exception e) {
  408. log.error(SystemConstant.LOG_ERROR, e);
  409. if (Objects.nonNull(basicOriginalAttachment)) {
  410. basicAttachmentService.deleteAttachment(basicOriginalAttachment);
  411. }
  412. if (Objects.nonNull(basicTranslateAttachment)) {
  413. basicAttachmentService.deleteAttachment(basicTranslateAttachment);
  414. }
  415. if (e instanceof ApiException) {
  416. ResultUtil.error((ApiException) e, e.getMessage());
  417. } else {
  418. ResultUtil.error(e.getMessage());
  419. }
  420. } finally {
  421. if (Objects.nonNull(localTempFile)) {
  422. FileUtil.deleteFile(localTempFile);
  423. }
  424. if (Objects.nonNull(pdfOriginalFile)) {
  425. FileUtil.deleteFile(pdfOriginalFile);
  426. }
  427. }
  428. return ResultUtil.ok(resultMap);
  429. }
  430. @ApiOperation(value = "文件下载接口")
  431. @RequestMapping(value = "/file/download", method = RequestMethod.POST)
  432. @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
  433. public Result fileDownload(@ApiParam(value = "任务id", required = true) @RequestParam String id,
  434. @ApiParam(value = "下载文件类型", required = true) @RequestParam DownloadFileEnum type) {
  435. String path = null;
  436. if (DownloadFileEnum.SYNC_REPORT.equals(type)) {
  437. TBSyncTask tbSyncTask = tbSyncTaskService.getById(SystemConstant.convertIdToLong(id));
  438. if (Objects.isNull(tbSyncTask)) {
  439. throw ExceptionResultEnum.SYNC_TASK_NO_DATA.exception();
  440. }
  441. path = tbSyncTask.getReportFilePath();
  442. } else {
  443. TBTask tbTask = tbTaskService.getById(Long.parseLong(id));
  444. if (Objects.isNull(tbTask)) {
  445. throw ExceptionResultEnum.TASK_NO_DATA.exception();
  446. }
  447. switch (type) {
  448. case IMPORT_FILE:
  449. path = tbTask.getImportFilePath();
  450. break;
  451. case TASK_REPORT:
  452. path = tbTask.getReportFilePath();
  453. break;
  454. case RESULT:
  455. path = tbTask.getResultFilePath();
  456. break;
  457. }
  458. }
  459. if (Objects.isNull(path)) {
  460. throw ExceptionResultEnum.PATH_NO_DATA.exception();
  461. }
  462. return ResultUtil.ok(new EditResult(teachcloudCommonService.filePreview(path)));
  463. }
  464. @ApiOperation(value = "文件预览接口")
  465. @RequestMapping(value = "/file/preview", method = RequestMethod.POST)
  466. @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
  467. public Result filePreview(@ApiParam(value = "附件id", required = false, defaultValue = "") @RequestParam(value = "id", required = false, defaultValue = "") String id) {
  468. if (StringUtils.isBlank(id)) {
  469. throw ExceptionResultEnum.ERROR.exception("没有附件");
  470. } else {
  471. BasicAttachment basicAttachment = basicAttachmentService.getById(Long.parseLong(id));
  472. return ResultUtil.ok(new EditResult(teachcloudCommonService.filePreview(basicAttachment.getPath())));
  473. }
  474. }
  475. @ApiOperation(value = "查询用户权限")
  476. @RequestMapping(value = "/get_menu", method = RequestMethod.POST)
  477. public Result getMenu() {
  478. return ResultUtil.ok(sysUserRoleService.listByUserId());
  479. }
  480. @ApiOperation(value = "获取服务器时间")
  481. @RequestMapping(value = "/get_system_time", method = RequestMethod.POST)
  482. @Aac(auth = BOOL.FALSE)
  483. public Result getSystemTime() {
  484. return ResultUtil.ok(System.currentTimeMillis());
  485. }
  486. @ApiOperation(value = "获取系统编码")
  487. @RequestMapping(value = "/get_code", method = RequestMethod.POST)
  488. // @Aac(auth = BOOL.FALSE)
  489. public Result getCode(@ApiParam(value = "编码类型", required = true) @RequestParam SystemCodeEnum type) {
  490. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  491. String number = teachcloudCommonService.getSysIncrCode(type, sysUser);
  492. return ResultUtil.ok((Object) number);
  493. }
  494. @ApiOperation(value = "共用接口-查询字典")
  495. @RequestMapping(value = "/get_dictionary", method = RequestMethod.POST)
  496. @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
  497. public Result findDictionaryList(@ApiParam(value = "校区id") @RequestParam(required = false) String campusId,
  498. @ApiParam(value = "学期id") @RequestParam(required = false) String semesterId,
  499. @ApiParam(value = "学院id") @RequestParam(required = false) String collegeId,
  500. @ApiParam(value = "专业id") @RequestParam(required = false) String majorId,
  501. @ApiParam(value = "班级id") @RequestParam(required = false) String clazzId,
  502. @ApiParam(value = "学生id") @RequestParam(required = false) String studentId,
  503. @ApiParam(value = "查询字典对象") @RequestParam(required = true) DictionaryEnum dictionaryEnum) {
  504. Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
  505. List<DictionaryResult> dictionaryResultList = new ArrayList<>();
  506. switch (dictionaryEnum) {
  507. case CAMPUS:
  508. List<BasicCampus> basicCampusList = basicCampusService.list(new QueryWrapper<BasicCampus>().lambda().eq(BasicCampus::getSchoolId, schoolId));
  509. dictionaryResultList = basicCampusList.stream().map(e -> {
  510. DictionaryResult dictionaryResult = new DictionaryResult();
  511. dictionaryResult.setName(e.getCampusName());
  512. dictionaryResult.setCode(e.getCampusCode());
  513. dictionaryResult.setId(e.getId());
  514. return dictionaryResult;
  515. }).collect(Collectors.toList());
  516. break;
  517. case SEMESTER:
  518. List<BasicSemester> basicSemesterList = basicSemesterService.list(new QueryWrapper<BasicSemester>().lambda().eq(BasicSemester::getSchoolId, schoolId).eq(BasicSemester::getEnable, true));
  519. dictionaryResultList = basicSemesterList.stream().map(e -> {
  520. DictionaryResult dictionaryResult = new DictionaryResult();
  521. dictionaryResult.setId(e.getId());
  522. dictionaryResult.setCode(e.getCode());
  523. dictionaryResult.setName(e.getName());
  524. return dictionaryResult;
  525. }).collect(Collectors.toList());
  526. break;
  527. case COLLEGE:
  528. if (Objects.nonNull(semesterId)) {
  529. QueryWrapper<BasicExam> basicExamQueryWrapper = new QueryWrapper<>();
  530. basicExamQueryWrapper.lambda().eq(BasicExam::getSemesterId, SystemConstant.convertIdToLong(semesterId));
  531. List<BasicExam> basicExamList = basicExamService.list(basicExamQueryWrapper);
  532. if (Objects.nonNull(basicExamList) && basicExamList.size() > 0) {
  533. List<Long> examIdList = basicExamList.stream().map(s -> s.getId()).collect(Collectors.toList());
  534. QueryWrapper<ExamPrintPlan> examPrintPlanQueryWrapper = new QueryWrapper<>();
  535. examPrintPlanQueryWrapper.lambda().in(ExamPrintPlan::getExamId, examIdList);
  536. List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
  537. if (Objects.nonNull(examPrintPlanList) && examPrintPlanList.size() > 0) {
  538. Set<Long> orgIdSet = examPrintPlanList.stream().map(s -> s.getOrgId()).collect(Collectors.toSet());
  539. QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
  540. sysOrgQueryWrapper.lambda().in(SysOrg::getId, orgIdSet);
  541. List<SysOrg> sysOrgList = sysOrgService.list(sysOrgQueryWrapper);
  542. List<SysOrg> newSysOrgList = new ArrayList<>();
  543. newSysOrgList.addAll(sysOrgList);
  544. for (SysOrg s : sysOrgList) {
  545. if (s.getType() == OrgTypeEnum.SCHOOL) {
  546. newSysOrgList.addAll(sysOrgService.findByConnectByRootOrgId(s.getId()));
  547. } else if (s.getType() == OrgTypeEnum.TEACHING_ROOM || s.getType() == OrgTypeEnum.FACULTY || s.getType() == OrgTypeEnum.PRINTING_HOUSE) {
  548. newSysOrgList.addAll(sysOrgService.findByConnectByParentId(s.getId(), true, false));
  549. }
  550. }
  551. newSysOrgList = newSysOrgList.stream().filter(s -> s.getType() == OrgTypeEnum.COLLEGE).collect(Collectors.toList());
  552. dictionaryResultList = newSysOrgList.stream().map(e -> {
  553. DictionaryResult dictionaryResult = new DictionaryResult();
  554. dictionaryResult.setId(e.getId());
  555. dictionaryResult.setCode(e.getCode());
  556. dictionaryResult.setName(e.getName());
  557. return dictionaryResult;
  558. }).collect(Collectors.toList());
  559. }
  560. }
  561. } else {
  562. List<SysOrg> sysOrgList = sysOrgService.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getEnable, true));
  563. dictionaryResultList = sysOrgList.stream().map(e -> {
  564. DictionaryResult dictionaryResult = new DictionaryResult();
  565. dictionaryResult.setId(e.getId());
  566. dictionaryResult.setCode(e.getCode());
  567. dictionaryResult.setName(e.getName());
  568. return dictionaryResult;
  569. }).collect(Collectors.toList());
  570. }
  571. break;
  572. case MAJOR:
  573. QueryWrapper<BasicMajor> majorQueryWrapper = new QueryWrapper<>();
  574. majorQueryWrapper.lambda()
  575. .eq(BasicMajor::getSchoolId, schoolId)
  576. .eq(BasicMajor::getEnable, true);
  577. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(collegeId))) {
  578. majorQueryWrapper.lambda().eq(BasicMajor::getBelongOrgId, collegeId);
  579. }
  580. List<BasicMajor> basicMajorList = basicMajorService.list(majorQueryWrapper);
  581. dictionaryResultList = basicMajorList.stream().map(e -> {
  582. DictionaryResult dictionaryResult = new DictionaryResult();
  583. dictionaryResult.setId(e.getId());
  584. dictionaryResult.setCode(e.getCode());
  585. dictionaryResult.setName(e.getName());
  586. return dictionaryResult;
  587. }).collect(Collectors.toList());
  588. break;
  589. case CLAZZ:
  590. QueryWrapper<BasicClazz> clazzQueryWrapper = new QueryWrapper<>();
  591. clazzQueryWrapper.lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getEnable, true);
  592. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(campusId))) {
  593. clazzQueryWrapper.lambda().eq(BasicClazz::getCampusId, campusId);
  594. }
  595. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(majorId))) {
  596. clazzQueryWrapper.lambda().eq(BasicClazz::getMajorId, majorId);
  597. }
  598. List<BasicClazz> basicClazzList = basicClazzService.list(clazzQueryWrapper);
  599. dictionaryResultList = basicClazzList.stream().map(e -> {
  600. DictionaryResult dictionaryResult = new DictionaryResult();
  601. dictionaryResult.setId(e.getId());
  602. dictionaryResult.setCode(e.getClazzCode());
  603. dictionaryResult.setName(e.getClazzName());
  604. return dictionaryResult;
  605. }).collect(Collectors.toList());
  606. break;
  607. case STUDENT:
  608. QueryWrapper<BasicStudent> studentQueryWrapper = new QueryWrapper<>();
  609. studentQueryWrapper.lambda().eq(BasicStudent::getSchoolId, schoolId).eq(BasicStudent::getEnable, true);
  610. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(campusId))) {
  611. studentQueryWrapper.lambda().eq(BasicStudent::getCampusId, campusId);
  612. }
  613. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(collegeId))) {
  614. studentQueryWrapper.lambda().eq(BasicStudent::getBelongOrgId, collegeId);
  615. }
  616. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(majorId))) {
  617. studentQueryWrapper.lambda().eq(BasicStudent::getMajorId, majorId);
  618. }
  619. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(clazzId))) {
  620. studentQueryWrapper.lambda().eq(BasicStudent::getClazzId, clazzId);
  621. }
  622. if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(studentId))) {
  623. studentQueryWrapper.lambda().eq(BasicStudent::getId, studentId);
  624. }
  625. List<BasicStudent> basicStudentList = basicStudentService.list(studentQueryWrapper);
  626. dictionaryResultList = basicStudentList.stream().map(e -> {
  627. DictionaryResult dictionaryResult = new DictionaryResult();
  628. dictionaryResult.setId(e.getId());
  629. dictionaryResult.setCode(e.getStudentCode());
  630. dictionaryResult.setName(e.getStudentName());
  631. return dictionaryResult;
  632. }).collect(Collectors.toList());
  633. break;
  634. }
  635. return ResultUtil.ok(dictionaryResultList);
  636. }
  637. /**
  638. * 获取用户阅卷角色
  639. *
  640. * @return
  641. */
  642. @ApiOperation(value = "获取用户阅卷角色")
  643. @RequestMapping(value = "/get_open_role", method = RequestMethod.POST)
  644. public Result getOpenRole() {
  645. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  646. SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId());
  647. List<SpecialPrivilegeEnum> list = new ArrayList<>();
  648. if (!SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)) {
  649. if (SpecialPrivilegeEnum.COMPOSITE.equals(userSpecialPrivilege)) {
  650. list.add(SpecialPrivilegeEnum.MARKER);
  651. list.add(SpecialPrivilegeEnum.SUBJECT_HEADER);
  652. } else {
  653. list.add(userSpecialPrivilege);
  654. }
  655. }
  656. return ResultUtil.ok(list);
  657. }
  658. }