123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851 |
- package com.qmth.distributed.print.api;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.qmth.boot.api.annotation.Aac;
- import com.qmth.boot.api.constant.ApiConstant;
- import com.qmth.boot.api.exception.ApiException;
- import com.qmth.distributed.print.business.bean.params.LoginParam;
- import com.qmth.distributed.print.business.bean.result.DictionaryResult;
- import com.qmth.distributed.print.business.bean.result.EditResult;
- import com.qmth.distributed.print.business.entity.BasicExamStudent;
- import com.qmth.distributed.print.business.entity.BasicTeachClazz;
- import com.qmth.distributed.print.business.entity.TBSyncTask;
- import com.qmth.distributed.print.business.enums.DictionaryEnum;
- import com.qmth.distributed.print.business.enums.LoginTypeEnum;
- import com.qmth.distributed.print.business.service.*;
- import com.qmth.distributed.print.business.util.PdfUtil;
- import com.qmth.teachcloud.common.annotation.OperationLogDetail;
- import com.qmth.teachcloud.common.bean.auth.AuthBean;
- import com.qmth.teachcloud.common.bean.result.LoginResult;
- import com.qmth.teachcloud.common.bean.result.UserLoginCheckResult;
- import com.qmth.teachcloud.common.config.DictionaryConfig;
- import com.qmth.teachcloud.common.contant.SystemConstant;
- import com.qmth.teachcloud.common.entity.*;
- import com.qmth.teachcloud.common.enums.*;
- import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
- import com.qmth.teachcloud.common.enums.log.SystemEnum;
- import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
- import com.qmth.teachcloud.common.service.*;
- import com.qmth.teachcloud.common.util.FileUtil;
- import com.qmth.teachcloud.common.util.Result;
- import com.qmth.teachcloud.common.util.ResultUtil;
- import com.qmth.teachcloud.common.util.ServletUtil;
- import io.swagger.annotations.*;
- import org.apache.commons.collections4.CollectionUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.validation.BindingResult;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletResponse;
- import javax.validation.Valid;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.security.NoSuchAlgorithmException;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- /**
- * @Date: 2021/3/30.
- */
- @Api(tags = "系统Controller")
- @RestController
- @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_COMMON)
- public class SysController {
- private final static Logger log = LoggerFactory.getLogger(SysController.class);
- @Value("${com.qmth.logging.file-path}")
- private String sysLogPath;
- @Resource
- SysUserService sysUserService;
- @Resource
- BasicSchoolService basicSchoolService;
- @Resource
- BasicVerifyCodeService basicVerifyCodeService;
- @Resource
- DictionaryConfig dictionaryConfig;
- @Resource
- CommonCacheService commonCacheService;
- @Resource
- PrintCommonService printCommonService;
- @Resource
- TBTaskService tbTaskService;
- @Resource
- BasicAttachmentService basicAttachmentService;
- @Resource
- SysUserRoleService sysUserRoleService;
- @Resource
- TeachcloudCommonService teachcloudCommonService;
- @Resource
- BasicMajorService basicMajorService;
- @Resource
- BasicClazzService basicClazzService;
- @Resource
- TeachClazzService teachClazzService;
- @Resource
- BasicStudentService basicStudentService;
- @Resource
- BasicCourseService basicCourseService;
- @Resource
- BasicSemesterService basicSemesterService;
- @Resource
- TBSyncTaskService tbSyncTaskService;
- @Resource
- AuthInfoService authInfoService;
- @Resource
- BasicOperationLogService basicOperationLogService;
- @Resource
- ConditionService conditionService;
- @Resource
- BasicTeachClazzService basicTeachClazzService;
- @Resource
- BasicExamStudentService basicExamStudentService;
- /**
- * 登录
- *
- * @param login
- * @return
- */
- @ApiOperation(value = "登录")
- @RequestMapping(value = "/login", method = RequestMethod.POST)
- @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
- @Aac(auth = false)
- public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody LoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
- if (bindingResult.hasErrors()) {
- return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
- }
- if (Objects.nonNull(login.getSchoolCode()) && login.getSchoolCode().contains("#")) {
- login.setSchoolCode(login.getSchoolCode().substring(0, login.getSchoolCode().indexOf("#")));
- }
- BasicSchool basicSchool = null;
- if (!login.getSchoolCode().equalsIgnoreCase(SystemConstant.ADMIN_CODE)) {
- basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
- if (Objects.isNull(basicSchool)) {
- throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
- }
- if (Objects.nonNull(basicSchool.getEnable()) && !basicSchool.getEnable()) {
- throw ExceptionResultEnum.SCHOOL_ENABLE.exception();
- }
- }
- QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
- if (Objects.nonNull(basicSchool)) {
- wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
- }
- // 账号密码登录
- List<SysUser> userList = null;
- if (LoginTypeEnum.ACCOUNT.name().equals(login.getType())) {
- String loginName = login.getLoginName();
- String password = login.getPassword();
- // 非空校验
- if (StringUtils.isBlank(loginName)) {
- throw ExceptionResultEnum.ERROR.exception("用户名不能为空");
- }
- if (StringUtils.isBlank(password)) {
- throw ExceptionResultEnum.ERROR.exception("密码不能为空");
- }
- wrapper.lambda().and(w -> w.eq(SysUser::getLoginName, loginName).or().eq(SysUser::getCode, loginName));
- userList = sysUserService.list(wrapper);
- //用户不存在
- if (userList == null || userList.isEmpty()) {
- throw ExceptionResultEnum.ERROR.exception("用户名或密码错误");
- }
- if (userList.size() > 1) {
- throw ExceptionResultEnum.ERROR.exception("用户名或密码错误");
- }
- SysUser sysUser = userList.get(0);
- if (!sysUser.getEnable()) {
- throw ExceptionResultEnum.ERROR.exception("用户被禁用");
- }
- if (!password.equals(userList.get(0).getPassword())) {
- throw ExceptionResultEnum.ERROR.exception("用户名或密码错误");
- }
- //2022.11.10日加入用户/密码模式是否开启短信验证
- if (!login.getSchoolCode().equalsIgnoreCase(SystemConstant.ADMIN_CODE)) {
- SysConfig sysConfigAccount = commonCacheService.addSysConfigCache(basicSchool.getId(), SystemConstant.ACCOUNT_SMS_VERIFY);
- if (Objects.nonNull(sysConfigAccount) && Objects.nonNull(sysConfigAccount.getConfigValue())
- && Boolean.valueOf(sysConfigAccount.getConfigValue())) {
- // 校验验证码
- sysUserService.checkSmsCode(sysUser.getId(), sysUser.getMobileNumber(), login.getCode());
- // 如果不是共用验证码再过期
- SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.SMS_NORMAL_CODE);
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置万能短信验证码"));
- if (!sysConfig.getConfigValue().equals(login.getCode())) {
- sysUserService.expiredVerifyCode(sysUser.getId(), sysUser.getMobileNumber());
- }
- }
- }
- } else if (LoginTypeEnum.PHONE.name().equals(login.getType())) {
- String mobileNumber = login.getMobileNumber();
- String code = login.getCode();
- // 非空校验
- if (StringUtils.isBlank(mobileNumber)) {
- throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
- }
- if (StringUtils.isBlank(code)) {
- throw ExceptionResultEnum.ERROR.exception("验证码不能为空");
- }
- wrapper.lambda().eq(SysUser::getMobileNumber, mobileNumber);
- userList = sysUserService.list(wrapper);
- //用户不存在
- if (userList == null || userList.isEmpty()) {
- throw ExceptionResultEnum.ERROR.exception("用户不存在");
- }
- if (userList.size() > 1) {
- throw ExceptionResultEnum.ERROR.exception("查出多个用户");
- }
- SysUser sysUser = userList.get(0);
- // 校验验证码
- sysUserService.checkSmsCode(sysUser.getId(), sysUser.getMobileNumber(), code);
- // 如果不是共用验证码再过期
- SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.SMS_NORMAL_CODE);
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置万能短信验证码"));
- if (!sysConfig.getConfigValue().equals(login.getCode())) {
- sysUserService.expiredVerifyCode(sysUser.getId(), sysUser.getMobileNumber());
- }
- } else {
- throw ExceptionResultEnum.ERROR.exception("登录参数错误");
- }
- if (login.getSchoolCode().equalsIgnoreCase(SystemConstant.ADMIN_CODE)) {
- userList.forEach(o -> {
- AuthBean authBean = teachcloudCommonService.getUserAuth(o.getId());
- if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().size() > 0) {
- if (Objects.nonNull(authBean.getSchool())) {
- throw ExceptionResultEnum.ERROR.exception("用户无法通过当前页面登录");
- }
- }
- });
- }
- SysUser sysUser = userList.get(0);
- LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
- loginResult.setUiSetting(sysUser.getUiSetting());
- try {
- basicOperationLogService.saveOperateLogWithNoAuth(sysUser.getSchoolId(), sysUser.getOrgId(), sysUser.getId(), "用户登录", CustomizedOperationTypeEnum.LOGIN, SystemEnum.DISTRIBUTED_PRINT);
- } catch (Exception e) {
- log.error(e.getMessage());
- }
- return ResultUtil.ok(loginResult);
- }
- /**
- * 登出
- *
- * @return
- */
- @ApiOperation(value = "登出")
- @RequestMapping(value = "/logout", method = RequestMethod.POST)
- @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
- @OperationLogDetail(detail = "用户登出(注销)", customizedOperationType = CustomizedOperationTypeEnum.LOGOUT)
- public Result logout() throws NoSuchAlgorithmException {
- SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
- teachcloudCommonService.removeUserInfo(sysUser.getId(), false);
- return ResultUtil.ok();
- }
- /**
- * 发送验证码
- *
- * @param loginParam
- * @return
- */
- @ApiOperation(value = "发送验证码")
- @RequestMapping(value = "/get_verify_code", method = RequestMethod.POST)
- @Aac(auth = false)
- public Result getVerifyCode(@RequestBody LoginParam loginParam) {
- String mobileNumber = loginParam.getMobileNumber();
- if (StringUtils.isBlank(mobileNumber)) {
- throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
- }
- QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
- if (StringUtils.isNotBlank(loginParam.getSchoolCode())) {
- if (loginParam.getSchoolCode().contains("#")) {
- loginParam.setSchoolCode(loginParam.getSchoolCode().substring(0, loginParam.getSchoolCode().indexOf("#")));
- }
- BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
- if (Objects.nonNull(basicSchool)) {
- wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
- }
- }
- wrapper.lambda().eq(SysUser::getMobileNumber, mobileNumber);
- List<SysUser> userList = sysUserService.list(wrapper);
- //用户不存在
- if (userList == null || userList.isEmpty()) {
- throw ExceptionResultEnum.ERROR.exception("手机号不存在");
- }
- if (userList.size() > 1) {
- throw ExceptionResultEnum.ERROR.exception("手机号绑定了多个用户");
- }
- SysUser sysUser = userList.get(0);
- if (!sysUser.getEnable()) {
- throw ExceptionResultEnum.ERROR.exception("手机号被禁用");
- }
- if (SystemConstant.strNotNull(mobileNumber)) {
- basicVerifyCodeService.sendVeirfyCode(mobileNumber, sysUser);
- }
- int pwdCount = sysUser.getPwdCount();
- List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUser.getId());
- if (sysRoleList.stream().map(SysRole::getType).collect(Collectors.toSet()).contains(RoleTypeEnum.ADMIN)) {
- mobileNumber = sysUser.getLoginName() + "(特权用户)";
- pwdCount = 1;
- }
- UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(sysUser.getId(), mobileNumber, pwdCount);
- return ResultUtil.ok(userLoginCheckResult, "");
- }
- /**
- * 发送验证码
- *
- * @param loginParam
- * @return
- */
- @ApiOperation(value = "发送验证码")
- @RequestMapping(value = "/get_verify_code_by_account", method = RequestMethod.POST)
- @Aac(auth = false)
- public Object getverifyCodeByAccount(@RequestBody LoginParam loginParam) {
- String loginName = loginParam.getLoginName();
- String password = loginParam.getPassword();
- QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
- if (StringUtils.isNotBlank(loginParam.getSchoolCode())) {
- if (loginParam.getSchoolCode().contains("#")) {
- loginParam.setSchoolCode(loginParam.getSchoolCode().substring(0, loginParam.getSchoolCode().indexOf("#")));
- }
- BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
- wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
- }
- wrapper.lambda().eq(SysUser::getLoginName, loginName);
- SysUser user = sysUserService.getOne(wrapper);
- //用户不存在
- if (Objects.isNull(user)) {
- throw ExceptionResultEnum.ERROR.exception("用户不存在");
- }
- if (!password.equals(user.getPassword())) {
- throw ExceptionResultEnum.ERROR.exception("密码错误");
- }
- String mobileNumber = user.getMobileNumber();
- if (Objects.isNull(mobileNumber)) {
- throw ExceptionResultEnum.ERROR.exception("用户未绑定手机号码");
- }
- basicVerifyCodeService.sendVeirfyCode(mobileNumber, user);
- return ResultUtil.ok(mobileNumber, "");
- }
- /**
- * 发送验证码(绑定手机号)
- *
- * @param loginParam
- * @return
- */
- @ApiOperation(value = "发送验证码(绑定手机号)")
- @RequestMapping(value = "/get_verify_code_for_bind", method = RequestMethod.POST)
- @Aac(auth = false)
- public Result getVerifyCodeForBind(@RequestBody LoginParam loginParam) {
- String loginName = loginParam.getLoginName();
- String password = loginParam.getPassword();
- String schoolCode = loginParam.getSchoolCode();
- if (Objects.nonNull(schoolCode) && schoolCode.contains("#")) {
- schoolCode = schoolCode.substring(0, schoolCode.indexOf("#"));
- }
- String mobileNumber = loginParam.getMobileNumber();
- if (StringUtils.isBlank(schoolCode)) {
- throw ExceptionResultEnum.ERROR.exception("学校代码不能为空");
- }
- QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
- BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
- if (Objects.isNull(basicSchool)) {
- throw ExceptionResultEnum.ERROR.exception("学校不存在");
- }
- if (StringUtils.isBlank(mobileNumber)) {
- throw ExceptionResultEnum.ERROR.exception("手机号不能为空");
- }
- wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId())
- .eq(SysUser::getMobileNumber, mobileNumber);
- List<SysUser> userList = sysUserService.list(wrapper);
- if (userList != null && userList.size() > 0) {
- throw ExceptionResultEnum.ERROR.exception("手机号已使用");
- }
- // 根据账号/密码取用户ID
- if (StringUtils.isBlank(loginName)) {
- throw ExceptionResultEnum.ERROR.exception("账号不能为空");
- }
- if (StringUtils.isBlank(password)) {
- throw ExceptionResultEnum.ERROR.exception("密码不能为空");
- }
- QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
- sysUserQueryWrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId())
- .and(w -> w.eq(SysUser::getLoginName, loginName).or().eq(SysUser::getCode, loginName))
- .eq(SysUser::getPassword, password);
- SysUser sysUser = sysUserService.getOne(sysUserQueryWrapper);
- if (sysUser == null) {
- throw ExceptionResultEnum.ERROR.exception("用户数据异常");
- }
- // 发送短信验证码
- basicVerifyCodeService.sendVeirfyCode(mobileNumber, sysUser);
- int pwdCount = sysUser.getPwdCount();
- List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUser.getId());
- if (sysRoleList.stream().map(SysRole::getType).collect(Collectors.toSet()).contains(RoleTypeEnum.ADMIN)) {
- mobileNumber = sysUser.getLoginName() + "(特权用户)";
- pwdCount = 1;
- }
- UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(sysUser.getId(), mobileNumber, pwdCount);
- return ResultUtil.ok(userLoginCheckResult, "");
- }
- @ApiOperation(value = "根据机构代码查询机构信息接口")
- @RequestMapping(value = "/school/query_by_school_code", method = RequestMethod.POST)
- @ApiResponses({@ApiResponse(code = 200, message = "学校信息", response = EditResult.class)})
- @Aac(auth = false)
- public Result queryBySchoolCode(@ApiParam(value = "机构code") @RequestParam(required = false) String code) {
- if (Objects.nonNull(code) && code.contains("#")) {
- code = code.substring(0, code.indexOf("#"));
- }
- Map<String, Object> map = new HashMap<>();
- map.put(SystemConstant.VERSION, SystemConstant.VERSION_VALUE);
- if (!SystemConstant.ADMIN_CODE.equalsIgnoreCase(code)) {
- BasicSchool basicSchool = null;
- if (StringUtils.isNotBlank(code)) {
- basicSchool = commonCacheService.schoolCache(code);
- } else {
- List<BasicSchool> basicSchoolList = basicSchoolService.listByDefaultSchool(true);
- if (CollectionUtils.isNotEmpty(basicSchoolList)) {
- basicSchool = basicSchoolList.get(0);
- }
- }
- Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.SCHOOL_NO_DATA.exception());
- code = basicSchool.getCode();
- authInfoService.appHasExpired(code);
- SysConfig sysConfig = commonCacheService.addSysConfigCache(basicSchool.getId(), SystemConstant.ACCOUNT_SMS_VERIFY);
- map.put(SystemConstant.LOGO, basicSchool.getLogo());
- map.put("name", basicSchool.getName());
- map.put("accountSmsVerify", Objects.nonNull(sysConfig) ? Boolean.valueOf(sysConfig.getConfigValue()) : false);
- // 若为在线激活,则允许手机号登录
- map.put("phoneLogin", authInfoService.allowPhoneLogin(basicSchool.getId()));
- map.put("schoolCode", code);
- } else {
- SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.ADMIN_LOGO_URL);
- map.put(SystemConstant.LOGO, Objects.nonNull(sysConfig) ? sysConfig.getConfigValue() : null);
- map.put("name", null);
- map.put("accountSmsVerify", false);
- // 若为在线激活,则允许手机号登录,超管默认false
- map.put("phoneLogin", false);
- map.put("schoolCode", SystemConstant.ADMIN_CODE);
- }
- return ResultUtil.ok(map);
- }
- @ApiOperation(value = "文件上传接口")
- @RequestMapping(value = "/file/upload", method = RequestMethod.POST)
- @Transactional
- @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
- public Result fileUpload(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
- @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type) {
- BasicAttachment basicAttachment = null;
- try {
- basicAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
- if (Objects.isNull(basicAttachment)) {
- throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
- }
- } catch (Exception e) {
- log.error(SystemConstant.LOG_ERROR, e);
- if (Objects.nonNull(basicAttachment)) {
- basicAttachmentService.deleteAttachment(basicAttachment);
- }
- if (e instanceof ApiException) {
- ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
- } else {
- ResultUtil.error(e.getMessage());
- }
- }
- return ResultUtil.ok(new EditResult(basicAttachment.getId(), teachcloudCommonService.filePreview(basicAttachment.getPath()), basicAttachment.getPages()));
- }
- @ApiOperation(value = "考试试卷文件上传接口")
- @RequestMapping(value = "/file/exam_paper_upload", method = RequestMethod.POST)
- @Transactional
- @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
- public Result fileExamPaperUpload(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
- @ApiParam(value = "上传文件类型", required = true) @RequestParam UploadFileEnum type) {
- Map<String, EditResult> resultMap = new HashMap<>();
- BasicAttachment basicOriginalAttachment = null;
- BasicAttachment basicTranslateAttachment = null;
- File pdfOriginalFile = null;
- File localTempFile = null;
- try {
- pdfOriginalFile = FileUtil.multipartFileToFile(file);
- PageSizeEnum pageSizeEnum = PdfUtil.getPdfFormat(pdfOriginalFile);
- basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
- if (Objects.isNull(basicOriginalAttachment)) {
- throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
- }
- EditResult original = new EditResult(basicOriginalAttachment.getId(), teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()), basicOriginalAttachment.getPages(), pageSizeEnum);
- EditResult translate = new EditResult();
- BeanUtils.copyProperties(original, translate);
- // switch (pageSizeEnum) {
- // case A3:
- // basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
- // if (Objects.isNull(basicOriginalAttachment)) {
- // throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
- // }
- // original.setId(basicOriginalAttachment.getId());
- // original.setUrl(teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()));
- // original.setPages(basicOriginalAttachment.getPages());
- //
- // BeanUtils.copyProperties(original, translate);
- // break;
- // case A4:
- // basicOriginalAttachment = printCommonService.saveAttachment(file, ServletUtil.getRequestMd5(), type);
- // if (Objects.isNull(basicOriginalAttachment)) {
- // throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
- // }
- // original.setId(basicOriginalAttachment.getId());
- // original.setUrl(teachcloudCommonService.filePreview(basicOriginalAttachment.getPath()));
- // original.setPages(basicOriginalAttachment.getPages());
- //
- // String destUrl = dictionaryConfig.fssLocalPdfDomain().getConfig() + File.separator + file.getOriginalFilename();
- // localTempFile = new File(destUrl);
- // OutputStream out = new FileOutputStream(localTempFile);
- // PdfUtil.concatPDFs(new FileInputStream(pdfOriginalFile), out, false);
- // // File转换成MutipartFile
- // FileInputStream inputStream = new FileInputStream(localTempFile);
- // MultipartFile multipartFile = new MockMultipartFile(localTempFile.getName(), localTempFile.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
- // basicTranslateAttachment = printCommonService.saveAttachment(multipartFile, DigestUtils.md5Hex(multipartFile.getBytes()), type);
- // translate.setId(basicTranslateAttachment.getId());
- // translate.setUrl(teachcloudCommonService.filePreview(basicTranslateAttachment.getPath()));
- // translate.setPages(basicTranslateAttachment.getPages());
- // break;
- // default:
- // throw ExceptionResultEnum.ERROR.exception("请上传A4或A3格式的试卷文件");
- // }
- resultMap.put("original", original);
- resultMap.put("translate", translate);
- } catch (Exception e) {
- log.error(SystemConstant.LOG_ERROR, e);
- if (Objects.nonNull(basicOriginalAttachment)) {
- basicAttachmentService.deleteAttachment(basicOriginalAttachment);
- }
- if (Objects.nonNull(basicTranslateAttachment)) {
- basicAttachmentService.deleteAttachment(basicTranslateAttachment);
- }
- if (e instanceof ApiException) {
- ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
- } else {
- ResultUtil.error(e.getMessage());
- }
- } finally {
- if (Objects.nonNull(localTempFile) && Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss()) {
- FileUtil.deleteFile(localTempFile);
- }
- if (Objects.nonNull(pdfOriginalFile) && Objects.nonNull(dictionaryConfig.sysDomain())) {
- FileUtil.deleteFile(pdfOriginalFile);
- }
- }
- return ResultUtil.ok(resultMap);
- }
- @ApiOperation(value = "文件下载接口")
- @RequestMapping(value = "/file/download", method = RequestMethod.POST)
- @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
- public Result fileDownload(@ApiParam(value = "任务id", required = true) @RequestParam String id,
- @ApiParam(value = "下载文件类型", required = true) @RequestParam DownloadFileEnum type) {
- String path = null;
- if (DownloadFileEnum.SYNC_REPORT.equals(type)) {
- TBSyncTask tbSyncTask = tbSyncTaskService.getById(SystemConstant.convertIdToLong(id));
- if (Objects.isNull(tbSyncTask)) {
- throw ExceptionResultEnum.SYNC_TASK_NO_DATA.exception();
- }
- path = tbSyncTask.getReportFilePath();
- } else {
- TBTask tbTask = tbTaskService.getById(Long.parseLong(id));
- if (Objects.isNull(tbTask)) {
- throw ExceptionResultEnum.TASK_NO_DATA.exception();
- }
- switch (type) {
- case IMPORT_FILE:
- path = tbTask.getImportFilePath();
- break;
- case TASK_REPORT:
- path = tbTask.getReportFilePath();
- break;
- case RESULT:
- path = tbTask.getResultFilePath();
- break;
- case ERROR_FILE:
- path = tbTask.getErrorFilePath();
- break;
- default:
- break;
- }
- }
- if (Objects.isNull(path)) {
- throw ExceptionResultEnum.PATH_NO_DATA.exception();
- }
- return ResultUtil.ok(new EditResult(teachcloudCommonService.filePreview(path)));
- }
- @ApiOperation(value = "文件预览接口")
- @RequestMapping(value = "/file/preview", method = RequestMethod.POST)
- @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
- public Result filePreview(@ApiParam(value = "附件id", required = false, defaultValue = "") @RequestParam(value = "id", required = false, defaultValue = "") String id) {
- if (StringUtils.isBlank(id)) {
- throw ExceptionResultEnum.ERROR.exception("没有附件");
- } else {
- BasicAttachment basicAttachment = basicAttachmentService.getById(Long.parseLong(id));
- return ResultUtil.ok(new EditResult(teachcloudCommonService.filePreview(basicAttachment.getPath())));
- }
- }
- @ApiOperation(value = "查询用户权限")
- @RequestMapping(value = "/get_menu", method = RequestMethod.POST)
- public Result getMenu() {
- return ResultUtil.ok(sysUserRoleService.listByUserId());
- }
- @ApiOperation(value = "获取服务器时间")
- @RequestMapping(value = "/get_system_time", method = RequestMethod.POST)
- @Aac(auth = false)
- public Result getSystemTime() {
- return ResultUtil.ok(System.currentTimeMillis());
- }
- @ApiOperation(value = "获取系统编码")
- @RequestMapping(value = "/get_code", method = RequestMethod.POST)
- public Result getCode(@ApiParam(value = "编码类型", required = true) @RequestParam SystemCodeEnum type) {
- SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
- String number = teachcloudCommonService.getSysIncrCode(type, sysUser);
- return ResultUtil.ok((Object) number);
- }
- @ApiOperation(value = "共用接口-查询字典")
- @RequestMapping(value = "/get_dictionary", method = RequestMethod.POST)
- @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
- public Result findDictionaryList(@ApiParam(value = "学生学院id") @RequestParam(required = false) String collegeId,
- @ApiParam(value = "专业id") @RequestParam(required = false) String majorId,
- @ApiParam(value = "班级id") @RequestParam(required = false) String clazzId,
- @ApiParam(value = "学生id") @RequestParam(required = false) String studentId,
- @ApiParam(value = "考试id") @RequestParam(required = false) String examId,
- @ApiParam(value = "查询字典对象", required = true) @RequestParam DictionaryEnum dictionaryEnum) {
- Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
- List<DictionaryResult> dictionaryResultList = new ArrayList<>();
- switch (dictionaryEnum) {
- case SEMESTER:
- List<BasicSemester> basicSemesterList = basicSemesterService.list(
- new QueryWrapper<BasicSemester>().lambda().eq(BasicSemester::getSchoolId, schoolId).eq(BasicSemester::getEnable, true).orderByDesc(BasicSemester::getCreateTime));
- dictionaryResultList = basicSemesterList.stream().map(e -> {
- DictionaryResult dictionaryResult = new DictionaryResult();
- dictionaryResult.setId(e.getId());
- dictionaryResult.setCode(e.getCode());
- dictionaryResult.setName(e.getName());
- return dictionaryResult;
- }).collect(Collectors.toList());
- break;
- case COLLEGE:
- List<SysOrg> sysOrgs = conditionService.listCollege();
- dictionaryResultList = sysOrgs.stream().map(e -> {
- DictionaryResult dictionaryResult = new DictionaryResult();
- dictionaryResult.setId(e.getId());
- dictionaryResult.setName(e.getName());
- return dictionaryResult;
- }).collect(Collectors.toList());
- break;
- // case COLLEGE:
- // if (Objects.nonNull(semesterId)) {
- // QueryWrapper<BasicExam> basicExamQueryWrapper = new QueryWrapper<>();
- // basicExamQueryWrapper.lambda().eq(BasicExam::getSemesterId, SystemConstant.convertIdToLong(semesterId));
- // List<BasicExam> basicExamList = basicExamService.list(basicExamQueryWrapper);
- // if (Objects.nonNull(basicExamList) && basicExamList.size() > 0) {
- // List<Long> examIdList = basicExamList.stream().map(BaseEntity::getId).collect(Collectors.toList());
- // QueryWrapper<ExamPrintPlan> examPrintPlanQueryWrapper = new QueryWrapper<>();
- // examPrintPlanQueryWrapper.lambda().in(ExamPrintPlan::getExamId, examIdList);
- // List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(examPrintPlanQueryWrapper);
- // if (Objects.nonNull(examPrintPlanList) && examPrintPlanList.size() > 0) {
- // Set<Long> orgIdSet = examPrintPlanList.stream().map(ExamPrintPlan::getOrgId).collect(Collectors.toSet());
- // QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
- // sysOrgQueryWrapper.lambda().in(SysOrg::getId, orgIdSet);
- // List<SysOrg> sysOrgList = sysOrgService.list(sysOrgQueryWrapper);
- // List<SysOrg> newSysOrgList = new ArrayList<>(sysOrgList);
- // for (SysOrg s : sysOrgList) {
- // if (s.getType() == OrgTypeEnum.SCHOOL) {
- // newSysOrgList.addAll(sysOrgService.findByConnectByRootOrgId(s.getId()));
- // } else if (s.getType() == OrgTypeEnum.TEACHING_ROOM || s.getType() == OrgTypeEnum.FACULTY || s.getType() == OrgTypeEnum.PRINTING_HOUSE) {
- // newSysOrgList.addAll(sysOrgService.findByConnectByParentId(s.getId(), true, false));
- // }
- // }
- // Map<Long, SysOrg> sysOrgMap = new LinkedHashMap<>();
- // for (SysOrg s : newSysOrgList) {
- // if (s.getType() == OrgTypeEnum.COLLEGE) {
- // sysOrgMap.put(s.getId(), s);
- // }
- // }
- // List<DictionaryResult> finalDictionaryResultList = dictionaryResultList;
- // sysOrgMap.forEach((k, v) -> {
- // DictionaryResult dictionaryResult = new DictionaryResult();
- // dictionaryResult.setId(v.getId());
- // dictionaryResult.setCode(v.getCode());
- // dictionaryResult.setName(v.getName());
- // finalDictionaryResultList.add(dictionaryResult);
- // });
- // }
- // }
- // } else {
- // List<SysOrg> sysOrgList = sysOrgService.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getEnable, true));
- // dictionaryResultList = sysOrgList.stream().map(e -> {
- // DictionaryResult dictionaryResult = new DictionaryResult();
- // dictionaryResult.setId(e.getId());
- // dictionaryResult.setCode(e.getCode());
- // dictionaryResult.setName(e.getName());
- // return dictionaryResult;
- // }).collect(Collectors.toList());
- // }
- // break;
- case MAJOR:
- QueryWrapper<BasicMajor> majorQueryWrapper = new QueryWrapper<>();
- majorQueryWrapper.lambda().eq(BasicMajor::getSchoolId, schoolId).eq(BasicMajor::getEnable, true);
- if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(collegeId))) {
- majorQueryWrapper.lambda().eq(BasicMajor::getBelongOrgId, collegeId);
- }
- List<BasicMajor> basicMajorList = basicMajorService.list(majorQueryWrapper);
- dictionaryResultList = basicMajorList.stream().map(e -> {
- DictionaryResult dictionaryResult = new DictionaryResult();
- dictionaryResult.setId(e.getId());
- dictionaryResult.setCode(e.getCode());
- dictionaryResult.setName(e.getName());
- return dictionaryResult;
- }).collect(Collectors.toList());
- break;
- case CLAZZ:
- QueryWrapper<BasicTeachClazz> clazzQueryWrapper = new QueryWrapper<>();
- clazzQueryWrapper.lambda().eq(BasicTeachClazz::getSchoolId, schoolId).eq(BasicTeachClazz::getExamId, examId);
- List<BasicTeachClazz> basicTeachClazzList = basicTeachClazzService.list(clazzQueryWrapper);
- List<DictionaryResult> resultBasicClazzList = basicTeachClazzList.stream().map(e -> {
- DictionaryResult dictionaryResult = new DictionaryResult();
- dictionaryResult.setId(e.getId());
- dictionaryResult.setName(e.getClazzName());
- return dictionaryResult;
- }).collect(Collectors.toList());
- dictionaryResultList.addAll(resultBasicClazzList);
- break;
- case ALL_CLAZZ: //针对归档管理临时处理用
- throw ExceptionResultEnum.ERROR.exception("使用枚举[CLAZZ]");
- case COURSE: // 考生字典查询课程
- dictionaryResultList = basicCourseService.list(
- new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId)).stream().flatMap(e -> {
- DictionaryResult dictionaryResult = new DictionaryResult();
- dictionaryResult.setId(e.getId());
- dictionaryResult.setCode(e.getCode());
- dictionaryResult.setName(e.getName());
- return Stream.of(dictionaryResult);
- }).collect(Collectors.toList());
- break;
- case STUDENT:
- QueryWrapper<BasicExamStudent> studentQueryWrapper = new QueryWrapper<>();
- studentQueryWrapper.lambda().eq(BasicExamStudent::getSchoolId, schoolId);
- if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(clazzId))) {
- studentQueryWrapper.lambda().eq(BasicExamStudent::getClazzId, clazzId);
- }
- if (SystemConstant.longNotNull(SystemConstant.convertIdToLong(studentId))) {
- studentQueryWrapper.lambda().eq(BasicExamStudent::getId, studentId);
- }
- List<BasicExamStudent> basicExamStudentList = basicExamStudentService.list(studentQueryWrapper);
- dictionaryResultList = basicExamStudentList.stream().map(e -> {
- DictionaryResult dictionaryResult = new DictionaryResult();
- dictionaryResult.setId(e.getId());
- dictionaryResult.setCode(e.getStudentCode());
- dictionaryResult.setName(e.getStudentName());
- return dictionaryResult;
- }).collect(Collectors.toList());
- break;
- default:
- break;
- }
- return ResultUtil.ok(dictionaryResultList);
- }
- /**
- * 获取用户阅卷角色
- *
- * @return
- */
- @ApiOperation(value = "获取用户阅卷角色")
- @RequestMapping(value = "/get_open_role", method = RequestMethod.POST)
- public Result getOpenRole() {
- SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
- SpecialPrivilegeEnum userSpecialPrivilege = sysUserService.findUserSpecialPrivilegeByUserId(sysUser.getId(), sysUser.getSchoolId());
- List<SpecialPrivilegeEnum> list = new ArrayList<>();
- if (!SpecialPrivilegeEnum.UNIDENTIFIED.equals(userSpecialPrivilege)) {
- if (SpecialPrivilegeEnum.COMPOSITE.equals(userSpecialPrivilege)) {
- list.add(SpecialPrivilegeEnum.MARKER);
- } else {
- list.add(userSpecialPrivilege);
- }
- }
- return ResultUtil.ok(list);
- }
- /**
- * 下载导入模板
- *
- * @return
- */
- @ApiOperation(value = "下载导入模板")
- @RequestMapping(value = "/download_import_template", method = RequestMethod.POST)
- public void downloadImportTemplate(@RequestParam(value = "type") String type, HttpServletResponse response) throws IOException {
- List<String> templateEnums = Stream.of(ImportTemplateEnum.values()).map(m -> m.name()).collect(Collectors.toList());
- if (!templateEnums.contains(type)) {
- throw ExceptionResultEnum.ERROR.exception("不支持的模板类型");
- }
- ImportTemplateEnum importTemplateEnum = ImportTemplateEnum.valueOf(type);
- InputStream inputStream = FileUtil.getStream("temps/" + importTemplateEnum.getTemplateName());
- // 导出
- FileUtil.outputFile(response, inputStream, importTemplateEnum.getFileName());
- }
- @ApiOperation(value = "系统日志下载")
- @RequestMapping(value = "/log/download", method = RequestMethod.POST)
- @Aac(auth = false)
- public void sysLogDownload(HttpServletResponse response) {
- FileUtil.outputFile(response, new File(sysLogPath), "sys.log");
- }
- }
|