|
|
@@ -0,0 +1,399 @@
|
|
|
+package com.aijia.train.controller;
|
|
|
+
|
|
|
+import com.aijia.basic.utils.DateHelper;
|
|
|
+import com.aijia.core.utils.StringUtil;
|
|
|
+import com.aijia.core.web.BaseController;
|
|
|
+import com.aijia.core.web.ResponseConstant;
|
|
|
+import com.aijia.core.web.ResponseEntity;
|
|
|
+import com.aijia.kmt.annotation.IgnoreSecurity;
|
|
|
+import com.aijia.kmt.po.FileInfo;
|
|
|
+import com.aijia.kmt.po.base.IdWorker;
|
|
|
+import com.aijia.kmt.service.FileInfoService;
|
|
|
+import com.aijia.kmt.service.TokenManager;
|
|
|
+import com.aijia.kmt.utils.OSSUtils;
|
|
|
+import com.aijia.kmt.utils.PropertiesUtil;
|
|
|
+import com.aijia.train.bean.TrTrainFiles;
|
|
|
+import com.aijia.train.bean.TrTrainPartUser;
|
|
|
+import com.aijia.train.mapper.TrainFileServiceMapper;
|
|
|
+import com.aijia.train.mapper.TrainUserServiceMapper;
|
|
|
+import com.aijia.train.service.ITrainService;
|
|
|
+import com.aijia.train.vo.*;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * 类描述: 培训系统
|
|
|
+ */
|
|
|
+@Api(value = "培训系统", tags = "培训系统")
|
|
|
+@RestController
|
|
|
+@RequestMapping("/api/part/train")
|
|
|
+@Slf4j
|
|
|
+public class ApiTrainController extends BaseController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITrainService trainService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TokenManager tokenManager;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FileInfoService fileInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TrainUserServiceMapper userServiceMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TrainFileServiceMapper fileServiceMapper;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @IgnoreSecurity
|
|
|
+ @RequestMapping(value="/sendCode",method = RequestMethod.POST)
|
|
|
+ public ResponseEntity sendCode(@RequestBody TrainLoginVo req){
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ if(StringUtils.isBlank(req.getMobile())){
|
|
|
+ return responseEntity.failure(ResponseConstant.CODE_000,"请输入电话号码");
|
|
|
+ }
|
|
|
+
|
|
|
+ //查看是否是已经报名成功
|
|
|
+// String phoneKey = "train202107_"+req.getMobile().trim();
|
|
|
+ try {
|
|
|
+ String codeKey = "trainRepeatCode_".concat(req.getMobile().trim());
|
|
|
+ if(tokenManager.exists(codeKey)){
|
|
|
+ return responseEntity.failure("请于上次发送成功后60秒后再重新尝试!");
|
|
|
+ }
|
|
|
+ responseEntity = trainService.sendSmsV2(req.getMobile().trim());
|
|
|
+ }catch (Exception e){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_000,"发送短信验证码失败,请稍后重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @IgnoreSecurity
|
|
|
+ @RequestMapping(value = "/login", method = RequestMethod.POST)
|
|
|
+ @ApiOperation(value = "账号短信验证码登录接口", httpMethod = "POST", notes = "账号密码登录接口")
|
|
|
+ public ResponseEntity login(@RequestBody TrainLoginVo req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ Map<String, Object> data=new HashMap<String, Object>();
|
|
|
+ try {
|
|
|
+ //判断验证码是否正确
|
|
|
+ if(StringUtils.isBlank(req.getMobile())){
|
|
|
+ return responseEntity.failure(ResponseConstant.CODE_000,"请输入电话号码");
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(req.getMsgCode())){
|
|
|
+ return responseEntity.failure(ResponseConstant.CODE_000,"请输入验证码");
|
|
|
+ }
|
|
|
+ responseEntity = trainService.confirmSms(req.getMobile().trim(),req.getMsgCode());
|
|
|
+ if(responseEntity.getCode().equals(ResponseConstant.CODE_999)){
|
|
|
+ //查询此手机用户是否存在,如果不存在则新增一个手机用户,默认密码123456
|
|
|
+ TrTrainPartUser user = trainService.getTrainUserByMobile(req.getMobile(),req.getLoginType());
|
|
|
+ if(Objects.isNull(user)){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "您手机号码学习次数或者考核次数也用光,不能再登录!");
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(user.getName()) || user.getRoleType()==0 || StringUtils.isBlank(user.getSubject())){
|
|
|
+ /**
|
|
|
+ * 资料待补全
|
|
|
+ */
|
|
|
+ data.put("userStat",1);
|
|
|
+ }else{
|
|
|
+ /**
|
|
|
+ * 资料完善
|
|
|
+ */
|
|
|
+ data.put("userStat",2);
|
|
|
+ }
|
|
|
+ //创建token
|
|
|
+ data.put("accessToken",tokenManager.createToken("",user.getId(),"train"));
|
|
|
+ /**
|
|
|
+ * 0,兼职 1管理员
|
|
|
+ */
|
|
|
+ data.put("type",user.getManagerType());
|
|
|
+ data.put("roleType",user.getRoleType());
|
|
|
+ data.put("name",StringUtil.isEmpty(user.getName())?"":user.getName());
|
|
|
+ data.put("studyStat",user.getStudyStatus()<3?1:user.getStudyStatus()==3?2:user.getStudyStatus()==4?3:4);
|
|
|
+ responseEntity.success(data,"登录成功!");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("账号密码登录接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/fileList")
|
|
|
+ @ApiOperation(value = "自主学习-学习内容列表", notes = "学习中心-学习内容列表")
|
|
|
+ public ResponseEntity fileList(@RequestParam(name = "accessToken") String accessToken,@RequestBody EditVO req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ Map<String, Object> data=new HashMap<String, Object>();
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ TrTrainPartUser tbLibManager = trainService.getUserById(userId);
|
|
|
+ if(tbLibManager==null) {
|
|
|
+ responseEntity.failure("账号无身份权限");
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ if(req.getRoleType()==null || req.getRoleType()==0){
|
|
|
+ req.setRoleType(tbLibManager.getRoleType());
|
|
|
+ }
|
|
|
+ List<FileVO> list=trainService.findTrainFileList(userId,req.getRoleType());
|
|
|
+ data.put("list",list);
|
|
|
+ responseEntity.success(data, "查询成功");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("自主学习-选择身份接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ @RequestMapping(value = "/unlockFile")
|
|
|
+ @ApiOperation(value = "自主学习-解锁下一个", notes = "自主学习-解锁下一个")
|
|
|
+ public ResponseEntity unlockFile(@RequestParam(name = "accessToken") String accessToken, @RequestBody FileIdVO vo) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ Map<String, Object> data=new HashMap<String, Object>();
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ TrTrainPartUser user = trainService.getUserById(userId);
|
|
|
+
|
|
|
+ responseEntity = trainService.unlockNextFile(vo.getFileId(),user.getRoleType(),user.getSubject(),userId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("自主学习-解锁下一个", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ @RequestMapping(value = "/startStudy")
|
|
|
+ @ApiOperation(value = "自主学习-开始学习", notes = "自主学习-开始学习")
|
|
|
+ public ResponseEntity startStudy(@RequestParam(name = "accessToken") String accessToken) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ TrTrainPartUser user = trainService.getUserById(userId);
|
|
|
+ trainService.startStudy(user.getRoleType(),user.getSubject(),userId);
|
|
|
+ responseEntity.success("成功");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("自主学习-开始学习接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ @RequestMapping(value = "/partTeacherList")
|
|
|
+ @ApiOperation(value = "老师列表", notes = "老师列表")
|
|
|
+ public ResponseEntity partTeacherList(@RequestParam(name = "accessToken") String accessToken,@RequestBody TypeVO req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ try {
|
|
|
+ Map<String,Object> data = new HashMap<>(2);
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ TrTrainPartUser user = trainService.getUserById(userId);
|
|
|
+ List<Map<String,Object>> list = trainService.partTeacherList(user.getRoleType(),user.getSubject(),req.getType());
|
|
|
+ data.put("list",list);
|
|
|
+ responseEntity.success(data,"获取老师列表成功");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("老师列表接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ @RequestMapping(value = "/studyAgain")
|
|
|
+ @ApiOperation(value = "重新学习", notes = "重新学习")
|
|
|
+ public ResponseEntity studyAgain(@RequestParam(name = "accessToken") String accessToken,@RequestBody UserIdVO req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ try {
|
|
|
+ trainService.studyAgain(req.getUserId());
|
|
|
+ responseEntity.success("重新学习成功");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("重新学习接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "重新学习解锁失败");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ @RequestMapping(value = "/teacherAudit")
|
|
|
+ @ApiOperation(value = "考核", notes = "考核")
|
|
|
+ public ResponseEntity teacherAudit(@RequestParam(name = "accessToken") String accessToken,@RequestBody AuditVO req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ try {
|
|
|
+ /**
|
|
|
+ * type = 1 通过 2 = 不通过
|
|
|
+ */
|
|
|
+
|
|
|
+ trainService.teacherAudit(req.getType(),req.getUserId());
|
|
|
+ responseEntity.success("操作成功");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("考核接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "考核操作失败");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/teacherInfoEdit")
|
|
|
+ @ApiOperation(value = "信息编辑保存", notes = "信息编辑保存")
|
|
|
+ public ResponseEntity teacherInfoEdit(@RequestParam(name = "accessToken") String accessToken,@RequestBody EditVO req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+
|
|
|
+ responseEntity = trainService.teacherInfoEdit(userId,req.getName(),req.getRoleType(),req.getSubject());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("信息编辑保存接口", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "信息编辑保存失败");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping("/upload")
|
|
|
+ @ResponseBody
|
|
|
+ public ResponseEntity uploadFile(@RequestParam(name = "accessToken") String accessToken,
|
|
|
+ @RequestParam("roleType") int roleType,
|
|
|
+ @RequestParam("fileIndex") int fileIndex,
|
|
|
+ @RequestParam("file") MultipartFile file) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ Map<String, MultipartFile> fileList = new HashMap<>();
|
|
|
+ fileList.put("myFile",file);
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ TrTrainPartUser user = userServiceMapper.selectById(userId);
|
|
|
+ String filepath = "";
|
|
|
+ filepath= PropertiesUtil.getValue("file_save_path") + "/part/peixun/";
|
|
|
+ //文件信息入库
|
|
|
+ List<FileInfo> fileInfos = fileInfoService.uploadFile(userId, fileList, filepath);
|
|
|
+ if(fileInfos==null || fileInfos.size()==0){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_000, "上传文件失败");
|
|
|
+ }else{
|
|
|
+ FileInfo fileInfo = fileInfos.get(0);
|
|
|
+ Map<String, Object> data = new HashMap<String, Object>();
|
|
|
+ TrTrainFiles trainFiles = new TrTrainFiles();
|
|
|
+ int count = fileServiceMapper.selectCount(new QueryWrapper<TrTrainFiles>().eq("role_type",user.getRoleType()).eq("subject",user.getSubject()));
|
|
|
+ trainFiles.setCreateTime(new Date());
|
|
|
+ trainFiles.setFileIndex(count+1);
|
|
|
+ trainFiles.setFileName(fileInfo.getFileName());
|
|
|
+ trainFiles.setFileType(fileInfo.getFileExt());
|
|
|
+ trainFiles.setRoleType(user.getRoleType());
|
|
|
+ trainFiles.setFileUrl(fileInfo.getFilePath());
|
|
|
+ trainFiles.setSubject(user.getSubject());
|
|
|
+ fileServiceMapper.insert(trainFiles);
|
|
|
+ data.put("fileId", trainFiles.getId());
|
|
|
+ responseEntity.success(data, "上传文件成功 ");
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_000, "上传文件失败");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @RequestMapping(value = "/replaceFile")
|
|
|
+ @ApiOperation(value = "替换文件", notes = "替换文件")
|
|
|
+ public ResponseEntity replaceFile(@RequestParam(name = "accessToken") String accessToken,@RequestParam(name="fileId") String fileId,@RequestParam(name="file") MultipartFile file) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ Map<String, MultipartFile> fileList = new HashMap<>();
|
|
|
+ fileList.put("myFile",file);
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ TrTrainFiles trainFiles = fileServiceMapper.selectById(fileId);
|
|
|
+ if(trainFiles == null){
|
|
|
+ return responseEntity.failure("文件不存在,请检查请求参数!");
|
|
|
+ }
|
|
|
+ String filepath = PropertiesUtil.getValue("file_save_path") + "/part/peixun/";
|
|
|
+ //文件信息入库
|
|
|
+ List<FileInfo> fileInfos = fileInfoService.uploadFile(userId, fileList, filepath);
|
|
|
+ if(fileInfos==null || fileInfos.size()==0){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_000, "上传文件失败");
|
|
|
+ }else{
|
|
|
+ FileInfo fileInfo = fileInfos.get(0);
|
|
|
+ Map<String, Object> data = new HashMap<String, Object>();
|
|
|
+ //先删除原来的文件
|
|
|
+ fileInfoService.deleteByFilePath(trainFiles.getFileUrl());
|
|
|
+ //保存新的文件
|
|
|
+ trainFiles.setFileName(fileInfo.getFileName());
|
|
|
+ trainFiles.setFileType(fileInfo.getFileExt());
|
|
|
+ trainFiles.setFileUrl(fileInfo.getFilePath());
|
|
|
+ fileServiceMapper.updateById(trainFiles);
|
|
|
+ data.put("fileId", trainFiles.getId());
|
|
|
+ responseEntity.success(data, "替换文件成功 ");
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_000, "替换文件失败");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+ @RequestMapping(value = "/deleteFile")
|
|
|
+ @ApiOperation(value = "删除文件", notes = "删除文件")
|
|
|
+ public ResponseEntity deleteFile(@RequestParam(name = "accessToken") String accessToken,@RequestBody FileIdVO req) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ try {
|
|
|
+ TrTrainFiles trainFiles = fileServiceMapper.selectById(req.getFileId());
|
|
|
+ if(trainFiles == null){
|
|
|
+ return responseEntity.failure("文件不存在,请检查请求参数!");
|
|
|
+ }
|
|
|
+ List<TrTrainFiles> afterList = fileServiceMapper.selectList(
|
|
|
+ new QueryWrapper<TrTrainFiles>().eq("role_type",trainFiles.getRoleType())
|
|
|
+ .eq("subject",trainFiles.getSubject())
|
|
|
+ .gt("file_index",trainFiles.getFileIndex())
|
|
|
+ .orderByAsc("file_index")
|
|
|
+ );
|
|
|
+ //删除磁盘文件
|
|
|
+ fileInfoService.deleteByFilePath(trainFiles.getFileUrl());
|
|
|
+ //删除记录
|
|
|
+ fileServiceMapper.deleteById(req.getFileId());
|
|
|
+ //更新排序
|
|
|
+ if(Objects.nonNull(afterList) && afterList.size()>0){
|
|
|
+ afterList.forEach(o->{
|
|
|
+ o.setFileIndex(o.getFileIndex()-1);
|
|
|
+ fileServiceMapper.updateById(o);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ responseEntity.success("删除文件成功 ");
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_000, "删除文件失败");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "退出登录")
|
|
|
+ @RequestMapping(value = "/logout", method = RequestMethod.POST)
|
|
|
+ public ResponseEntity logout(@RequestParam(name = "accessToken") String accessToken) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ tokenManager.removeToken(accessToken, "train");
|
|
|
+ return responseEntity.success("成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "获取阿里云OSS上传securityToken,及文件后缀", httpMethod = "POST")
|
|
|
+ @RequestMapping(value = "/getOssfsTokenFileExt", method = RequestMethod.POST)
|
|
|
+ public ResponseEntity getOssfsToken(@RequestParam(name = "accessToken") String accessToken , @RequestBody OssfsTokenReq req) {
|
|
|
+ ResponseEntity responseEntity =new ResponseEntity();
|
|
|
+ try {
|
|
|
+ String userId = tokenManager.getUserId(accessToken);
|
|
|
+ Map<String,String> stsMap= OSSUtils.getSTSSecurityToken();
|
|
|
+ String preffix = "";
|
|
|
+ if (StringUtils.isNotBlank(req.getMiddleDir())){
|
|
|
+ preffix = "/" + req.getMiddleDir();
|
|
|
+ }
|
|
|
+ stsMap.put("uploadImgPath", preffix + DateHelper.formatDateByFormat(new Date(), "yyyy/MM/dd")+"/"+
|
|
|
+ IdWorker.generateId()+req.getFileExt());
|
|
|
+
|
|
|
+
|
|
|
+ stsMap.put("bucket",PropertiesUtil.getValue("bucketName"));
|
|
|
+ // stsMap.put("EndPoint","https://oss-cn-shenzhen.aliyuncs.com");
|
|
|
+
|
|
|
+ stsMap.put("endpoint",PropertiesUtil.getValue("img_url"));
|
|
|
+ stsMap.put("endpointOSS","https://"+PropertiesUtil.getValue("bucketName")+".oss-cn-shenzhen.aliyuncs.com");
|
|
|
+ responseEntity.success(stsMap,"成功");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("获取阿里云OSS上传securityToken", e);
|
|
|
+ responseEntity.failure(ResponseConstant.CODE_500, "暂未加载到数据,请稍后重试");
|
|
|
+ }
|
|
|
+ return responseEntity;
|
|
|
+ }
|
|
|
+}
|