修改实验报告上传接口

master
whb 7 months ago
parent 32776fcaea
commit b269e45992

@ -40,6 +40,7 @@ public class Constant {
public static final String YONGHUDENGLUHUOYUEBIAO= "用户登录活跃表";
public static final String YONGHUXIAOFEINENGLIBIAO= "用户消费能力表";
public static final String YONGHUXINGWEIBIAO= "用户行为表";
public static final String YONGHUPINGLUNBIAO= "用户评论表";
public static final String FILTEROUTSTATIS_ONE= "剔除";

@ -119,18 +119,53 @@ public class StuConceptBlockController {
@PostMapping("/upload")
@ApiOperation("上传实训报告")
//@AnonymousAccess
@AnonymousAccess
public ResultDataEntity<StuPracticalTrainingReport> upload(@RequestParam(required = false) @RequestPart MultipartFile file,
@RequestParam(required = false) String stuBlockProduct) {
Gson gson = new Gson();
StuBlockProductWithDTO stuBlockProductWithBLOBs = gson.fromJson(stuBlockProduct, StuBlockProductWithDTO.class);
StuPracticalTrainingReport report = stuConceptBlockService.upload(file, stuBlockProductWithBLOBs);
StuPracticalTrainingReport report = stuConceptBlockService.upload(file, stuBlockProductWithBLOBs);
return new ResultDataEntity<>(HttpStatus.OK, report);
}
@PostMapping("/newUpload")
@ApiOperation("新版上传实训报告")
@AnonymousAccess
public ResultEntity newUpload(@RequestParam(required = false) @RequestPart MultipartFile file,
@RequestParam(required = false) String stuBlockProduct) {
Gson gson = new Gson();
StuBlockProductWithDTO stuBlockProductWithBLOBs = gson.fromJson(stuBlockProduct, StuBlockProductWithDTO.class);
// StuPracticalTrainingReport report = stuConceptBlockService.upload(file, stuBlockProductWithBLOBs);
return stuConceptBlockService.newUpload(file, stuBlockProductWithBLOBs);
}
@GetMapping("/downReportByZip")
@ApiOperation("新版上传实训报告下载ZIP")
@AnonymousAccess
public ResultEntity downReportByZip(HttpServletResponse response,String userId,String module,String reportName) {
return stuConceptBlockService.downReportByZip(response,userId,module,reportName);
}
/*
* @author whb
* @Date 2023/10/11

@ -270,7 +270,7 @@ public class StuExperimentalTrainingController {
@GetMapping("/downloadImg")
@ApiOperation("文字识别下载文档")
//@AnonymousAccess
@AnonymousAccess
// public void downloadImg(@RequestParam String userId, HttpServletResponse response) {
public void downloadImg(@RequestParam String userId, String TOKEN, HttpServletResponse response) {
TokenProvider.getJWTUser(TOKEN);

@ -1,5 +1,7 @@
package com.sztzjy.marketing.controller.task;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
import com.sztzjy.marketing.entity.StuAiLimit;
import com.sztzjy.marketing.entity.StuAiLimitExample;
import com.sztzjy.marketing.mapper.StuAiLimitMapper;
@ -28,14 +30,16 @@ public class RankScheduled {
@Scheduled(fixedDelay = 1800000)
public void updateUserRank(){
log.info("定时任务:==================总排名排序======================");
log.info("定时任务:==================总排名排序开始--start======================");
TimeInterval timer = DateUtil.timer();
//先查询所有学校id
List<String> schoolIds=userMapper.selectSchool();
for (int i = 0; i < schoolIds.size(); i++) {
String schoolId = schoolIds.get(i);
userService.totalRank(schoolId); //总成绩排名
}
log.info("定时任务:==================总排名完成结束--end======================,用时:{}",timer.interval());
}
@Scheduled(cron = "0 0 0 * * ?")
public void clearLimit(){

@ -44,7 +44,7 @@ public class StuPracticalTrainingReport {
private Integer status;
@ApiModelProperty("大模块")
@ApiModelProperty("上传次数")
private String ascription;
public Integer getId() {

@ -12,8 +12,6 @@ public class StuBlockProductWithDTO {
private String schoolId;
private String userId;
private String module;
}

@ -8,6 +8,7 @@ import com.sztzjy.marketing.entity.dto.StuAssessmentQuestionDetailsDTO;
import com.sztzjy.marketing.entity.dto.StuBlockProductWithDTO;
import com.sztzjy.marketing.entity.dto.StuLearningAssessmentScoreDTO;
import com.sztzjy.marketing.entity.dto.StuScoreDetailsDTO;
import com.sztzjy.marketing.util.ResultEntity;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
@ -46,4 +47,15 @@ public interface StuConceptBlockService {
void hashWatchScore(StuScoreDetailsDTO stuScoreDetailsDTO);
void hashReadingScore(StuScoreDetailsDTO stuScoreDetailsDTO);
//上传实验报告
ResultEntity newUpload(MultipartFile file, StuBlockProductWithDTO stuBlockProductWithBLOBs);
/**
* ZIP
* @param userId ID
* @return
*/
ResultEntity downReportByZip(HttpServletResponse response,String userId,String module,String reportName);
}

@ -2,8 +2,11 @@ package com.sztzjy.marketing.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ZipUtil;
import com.sztzjy.marketing.config.exception.handler.ServiceException;
import com.sztzjy.marketing.entity.*;
import com.sztzjy.marketing.entity.dto.*;
@ -13,14 +16,19 @@ import com.sztzjy.marketing.service.UserBehaviorProfilingAnaService;
import com.sztzjy.marketing.util.BigDecimalUtils;
import com.sztzjy.marketing.util.ConvertUtil;
import com.sztzjy.marketing.util.PdfUtil;
import com.sztzjy.marketing.util.ResultEntity;
import com.sztzjy.marketing.util.compute.ScoringUtil;
import com.sztzjy.marketing.util.file.IFileUtil;
import org.apache.poi.util.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import util.convertPDF.PDFConvertUtil;
@ -29,9 +37,12 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Service
@ -269,6 +280,7 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService {
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public StuPracticalTrainingReport upload(MultipartFile file, StuBlockProductWithDTO stuBlockProductWithBLOBs) {
if (file.isEmpty()) {
@ -702,6 +714,162 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService {
anaService.personalScoreEntry(stuScoreDetailsList,tchConceptualTechnologyWeight);
}
//上传实验报告
@Override
@Transactional(rollbackFor = Exception.class)
public ResultEntity newUpload(MultipartFile file, StuBlockProductWithDTO stuBlockProductWithBLOBs) {
if (!StringUtils.hasText(stuBlockProductWithBLOBs.getSchoolId()))
{
throw new RuntimeException("学校ID不能为空");
}
if (!StringUtils.hasText(stuBlockProductWithBLOBs.getUserId()))
{
throw new RuntimeException("用户ID不能为空");
}
if (!StringUtils.hasText(stuBlockProductWithBLOBs.getModule()))
{
throw new RuntimeException("模块不能为空");
}
//上传文件
//判断文件格式是否符合条件
String sp = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
String [] array = {"docx","doc", "pdf", "jpg", "png", "mp4", "avi"};
List<String> collect = Arrays.stream(array).collect(Collectors.toList());
if (!collect.contains(sp)){
throw new RuntimeException("上传格式仅支持Word,PDF,图片,视频");
}
//查询是第几次上传文件
StuPracticalTrainingReportExample example = new StuPracticalTrainingReportExample();
example.createCriteria().andSchoolIdEqualTo(stuBlockProductWithBLOBs.getSchoolId())
.andModuleEqualTo(stuBlockProductWithBLOBs.getModule())
.andUseridEqualTo(stuBlockProductWithBLOBs.getUserId());
List<StuPracticalTrainingReport> stuPracticalTrainingReportList = stuPracticalTrainingReportMapper.selectByExample(example);
if (CollectionUtils.isEmpty(stuPracticalTrainingReportList)){
//第一次上传
StuPracticalTrainingReport stuPracticalTrainingReport = uploadByReport(file,stuBlockProductWithBLOBs);
stuPracticalTrainingReport.setAscription(String.valueOf(1));
stuPracticalTrainingReportMapper.insertSelective(stuPracticalTrainingReport);
stuPracticalTrainingReportList.add(stuPracticalTrainingReport);
return new ResultEntity<>(HttpStatus.OK,stuPracticalTrainingReportList);
}else if (stuPracticalTrainingReportList.size() == 1){
StuPracticalTrainingReport stuPracticalTrainingReport = uploadByReport(file,stuBlockProductWithBLOBs);
stuPracticalTrainingReport.setAscription(String.valueOf(2));
stuPracticalTrainingReportMapper.insertSelective(stuPracticalTrainingReport);
stuPracticalTrainingReportList.add(stuPracticalTrainingReport);
return new ResultEntity<>(HttpStatus.OK,stuPracticalTrainingReportList);
}else if (stuPracticalTrainingReportList.size() == 2){
StuPracticalTrainingReport stuPracticalTrainingReport = uploadByReport(file,stuBlockProductWithBLOBs);
stuPracticalTrainingReport.setAscription(String.valueOf(3));
stuPracticalTrainingReportMapper.insertSelective(stuPracticalTrainingReport);
stuPracticalTrainingReportList.add(stuPracticalTrainingReport);
return new ResultEntity<>(HttpStatus.OK,stuPracticalTrainingReportList);
}else {
return new ResultEntity<>(HttpStatus.BAD_REQUEST,"系统允许您上传至多三份实验报告!",stuPracticalTrainingReportList);
}
}
@Override
public ResultEntity downReportByZip(HttpServletResponse response,String userId,String module,String reportName) {
StuPracticalTrainingReportExample example = new StuPracticalTrainingReportExample();
StuPracticalTrainingReportExample.Criteria criteria = example.createCriteria()
.andModuleEqualTo(module)
.andUseridEqualTo(userId);
if (StringUtils.hasText(reportName)) {
criteria.andReportNameEqualTo(reportName);
List<StuPracticalTrainingReport> stuPracticalTrainingReportList = stuPracticalTrainingReportMapper.selectByExample(example);
if (CollectionUtils.isEmpty(stuPracticalTrainingReportList)) {
return new ResultEntity<>(HttpStatus.OK);
}
fileUtil.download(response, stuPracticalTrainingReportList.get(0).getUrl());
}
// //批量下载
List<StuPracticalTrainingReport> stuPracticalTrainingReportList = stuPracticalTrainingReportMapper.selectByExample(example);
if (CollectionUtils.isEmpty(stuPracticalTrainingReportList)) {
return new ResultEntity<>(HttpStatus.OK);
} else {
List<String> urlList = stuPracticalTrainingReportList.stream()
.map(item -> filePath + item.getUrl())
.collect(Collectors.toList());
// 创建字节输出流和ZIP输出流
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream)) {
// 将文件逐个添加到ZIP中
for (String filePathStr : urlList) {
File file = new File(filePathStr);
if (file.exists()) {
try (FileInputStream fis = new FileInputStream(file)) {
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
IOUtils.copy(fis, zipOutputStream);
zipOutputStream.closeEntry();
}
}
}
// 完成ZIP写入
zipOutputStream.finish();
// 设置响应头,触发浏览器下载
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"reports.zip\"");
response.setContentLength(byteArrayOutputStream.size());
// 将ZIP文件内容写入响应
try (OutputStream outputStream = response.getOutputStream()) {
byteArrayOutputStream.writeTo(outputStream);
outputStream.flush();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return null;
}
private StuPracticalTrainingReport uploadByReport(MultipartFile file, StuBlockProductWithDTO stuBlockProductWithBLOBs) {
StuPracticalTrainingReport stuPracticalTrainingReport = new StuPracticalTrainingReport();
String upload = fileUtil.upload(file);
stuPracticalTrainingReport.setId((int) IdUtil.getSnowflakeNextId());
stuPracticalTrainingReport.setModule(stuBlockProductWithBLOBs.getModule());
stuPracticalTrainingReport.setSize((int) file.getSize());
stuPracticalTrainingReport.setReportName(file.getOriginalFilename());
stuPracticalTrainingReport.setSchoolId(stuBlockProductWithBLOBs.getSchoolId());
stuPracticalTrainingReport.setUserid(stuBlockProductWithBLOBs.getUserId());
stuPracticalTrainingReport.setUploadTime(new Date());
stuPracticalTrainingReport.setUrl(upload);
return stuPracticalTrainingReport;
}
public File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
// 创建一个临时文件

@ -163,6 +163,20 @@ public class StuUserProfileDatabaseServiceImpl implements StuUserProfileDatabase
return new ResultEntity<>(HttpStatus.OK,new PageInfo<>(userAttributeBehaviorList));
//todo 用户评论表
case Constant.YONGHUPINGLUNBIAO:
//开启分页
PageHelper.startPage(index,size);
//用户行为表
StuUserAttributeBehaviorExample behaviorExample = new StuUserAttributeBehaviorExample();
behaviorExample.setOrderByClause("id asc");
List<StuUserAttributeBehavior> behaviorList = userAttributeBehaviorMapper.selectByExample(behaviorExample);
if (behaviorList.isEmpty()) {
throw new ServiceException(HttpStatus.OK, "未查询到用户数据!");
}
return new ResultEntity<>(HttpStatus.OK,new PageInfo<>(behaviorList));
//todo 用户评论表
}
}

@ -1,6 +1,6 @@
package com.sztzjy.marketing.util.excel;
import cn.hutool.core.util.IdUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener;
@ -11,20 +11,14 @@ import com.sztzjy.marketing.config.ThreadPoolConfig;
import com.sztzjy.marketing.entity.StuUploadExcelUser;
import com.sztzjy.marketing.mapper.StuUploadExcelUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
// 有个很重要的点 DemoDataListener 不能被spring管理要每次读取excel都要new,然后里面用到spring可以构造方法传进去
@Slf4j

Loading…
Cancel
Save