SysController.java 39 KB

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