SysController.java 39 KB

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