学习记录

master
wenyu441069198 4 months ago
parent bb95bd444e
commit 58d8f0b1cb
  1. 19
      pom.xml
  2. 23
      src/main/java/com/teaching/backend/config/NonStaticResourceHttpRequestHandler.java
  3. 46
      src/main/java/com/teaching/backend/controller/records/BaseSourceApiController.java
  4. 56
      src/main/java/com/teaching/backend/controller/records/Bf.java
  5. 33
      src/main/java/com/teaching/backend/controller/records/KnowledgeLearningRecordController.java
  6. 58
      src/main/java/com/teaching/backend/controller/records/ResourceLearningRecordController.java
  7. 32
      src/main/java/com/teaching/backend/model/dto/upload/UploadFileParamsDto.java
  8. 4
      src/main/java/com/teaching/backend/model/entity/records/KnowledgeLearningRecord.java
  9. 4
      src/main/java/com/teaching/backend/model/entity/records/ResourceLearningRecord.java
  10. 4
      src/main/java/com/teaching/backend/model/vo/records/CourseLearningRecordsVo.java
  11. 37
      src/main/java/com/teaching/backend/model/vo/records/KnowledgeLearningRecordVo.java
  12. 29
      src/main/java/com/teaching/backend/model/vo/records/ResourceLearingRecordVo.java
  13. 6
      src/main/java/com/teaching/backend/service/impl/records/CourseLearningRecordServiceImpl.java
  14. 49
      src/main/java/com/teaching/backend/service/impl/records/KnowledgeLearningRecordServiceImpl.java
  15. 53
      src/main/java/com/teaching/backend/service/impl/records/ResourceLearningRecordServiceImpl.java
  16. 8
      src/main/java/com/teaching/backend/service/records/IKnowledgeLearningRecordService.java
  17. 7
      src/main/java/com/teaching/backend/service/records/IResourceLearningRecordService.java
  18. 101
      src/test/java/com/teaching/MinioTest.java

@ -221,6 +221,25 @@
<artifactId>commons-lang</artifactId> <artifactId>commons-lang</artifactId>
<version>2.6</version> <version>2.6</version>
</dependency> </dependency>
<!-- 文件下载-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
</dependencies> </dependencies>

@ -0,0 +1,23 @@
package com.teaching.backend.config;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import javax.servlet.http.HttpServletRequest;
/**
* @author longge93
*/
@Component
public class NonStaticResourceHttpRequestHandler extends ResourceHttpRequestHandler {
public final static String ATTR_FILE = "NON-STATIC-FILE";
@Override
protected Resource getResource(HttpServletRequest request) {
String filePath = (String) request.getAttribute(ATTR_FILE);
return new FileSystemResource(filePath);
}
}

@ -0,0 +1,46 @@
package com.teaching.backend.controller.records;
import com.teaching.backend.config.NonStaticResourceHttpRequestHandler;
import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping(value = "/api/baseResource")
public class BaseSourceApiController {
@Autowired
private NonStaticResourceHttpRequestHandler nonStaticResourceHttpRequestHandler;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "/video", method = RequestMethod.GET)
public void video(
HttpServletRequest request,
HttpServletResponse response
) {
try {
String path = "D:/Users/Desktop/image/剪映/7.18/7月20.mp4";
File file = new File(path);
if (file.exists()) {
request.setAttribute(NonStaticResourceHttpRequestHandler.ATTR_FILE, path);
nonStaticResourceHttpRequestHandler.handleRequest(request, response);
} else {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
}
} catch (Exception e) {
}
}
}

@ -0,0 +1,56 @@
package com.teaching.backend.controller.records;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.OutputStream;
@RestController
@RequestMapping("/api/bf")
public class Bf {
/**
* 根据本地图片全路径响应给浏览器1个图片流
*/
@RequestMapping("/showImage")
public void showImage(HttpServletResponse response, @RequestParam("fileName")String fileName) {
System.out.println(fileName);
show(response,fileName,"image");
}
/**
* 根据本地视频全路径响应给浏览器1个视频
*/
@RequestMapping("/showVideo")
public void showVideo(HttpServletResponse response, @RequestParam("fileName")String fileName) {
show(response,fileName,"video");
}
/**
* 响应文件
* @param response
* @param fileName 文件全路径
* @param type 响应流类型
*/
public void show(HttpServletResponse response, String fileName,String type){
try{
FileInputStream fis = new FileInputStream(fileName); // 以byte流的方式打开文件
int i=fis.available(); //得到文件大小
System.out.println(i);
byte data[]=new byte[i];
fis.read(data); //读数据
response.setContentType(type+"/*"); //设置返回的文件类型
OutputStream toClient=response.getOutputStream(); //得到向客户端输出二进制数据的对象
toClient.write(data); //输出数据
toClient.flush();
toClient.close();
fis.close();
}catch(Exception e){
e.printStackTrace();
System.out.println("文件不存在");
}
}
}

@ -1,5 +1,6 @@
package com.teaching.backend.controller.records; package com.teaching.backend.controller.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils; import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.filter.ValidateParams; import com.teaching.backend.filter.ValidateParams;
@ -7,12 +8,10 @@ import com.teaching.backend.model.entity.records.CourseLearningRecord;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord; import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl; import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
@RestController @RestController
@RequestMapping("/api/knowledgelearning") @RequestMapping("/api/knowledgelearning")
@ -27,4 +26,30 @@ public class KnowledgeLearningRecordController {
return knowledgeLearningRecordService.saveCoursesRecords(knowledgeLearningRecord); return knowledgeLearningRecordService.saveCoursesRecords(knowledgeLearningRecord);
} }
/**
* 获取当前登录用户的学习知识点记录
* @param pagenum
* @param pagesize
* @return
*/
@ApiOperation("根据用户id查询学习记录")
@ValidateParams({"userId"})
@GetMapping("/page")
public BaseResponse<Page> getAll(@RequestParam(value = "pagenum", defaultValue = "1") int pagenum,
@RequestParam(value = "pagesize", defaultValue = "10") int pagesize,
@RequestParam String userId,
@RequestParam String courseId){
return knowledgeLearningRecordService.getPage(pagenum, pagesize, userId, courseId);
}
/**
* 根据ids删除
* @param ids
* @return
*/
@ApiOperation("学习记录删除")
@DeleteMapping("/delete")
public BaseResponse<String> deleteRecords(@RequestParam List<Long> ids){
return knowledgeLearningRecordService.removeKnowledgeRecord(ids);
}
} }

@ -1,18 +1,23 @@
package com.teaching.backend.controller.records; package com.teaching.backend.controller.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils; import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.filter.ValidateParams;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord; import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.model.entity.records.ResourceLearningRecord; import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl; import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl;
import com.teaching.backend.service.impl.records.ResourceLearningRecordServiceImpl; import com.teaching.backend.service.impl.records.ResourceLearningRecordServiceImpl;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;
@RestController @RestController
@RequestMapping("/api/resourcelearningrecords") @RequestMapping("/api/resourcelearningrecords")
@ -26,4 +31,49 @@ public class ResourceLearningRecordController {
public BaseResponse<String> saveResourceRecords(@RequestBody ResourceLearningRecord resourceLearningRecord) { public BaseResponse<String> saveResourceRecords(@RequestBody ResourceLearningRecord resourceLearningRecord) {
return resourceLearningRecordService.saveCoursesRecords(resourceLearningRecord); return resourceLearningRecordService.saveCoursesRecords(resourceLearningRecord);
} }
/**
* 获取当前登录用户的学习资源记录
* @param pagenum
* @param pagesize
* @return
*/
@ApiOperation("根据用户id查询学习记录")
@ValidateParams({"userId"})
@GetMapping("/page")
public BaseResponse<Page> getAll(@RequestParam(value = "pagenum", defaultValue = "1") int pagenum,
@RequestParam(value = "pagesize", defaultValue = "10") int pagesize,
@RequestParam String userId,
@RequestParam String courseId,
@RequestParam String knowledgeId){
return resourceLearningRecordService.getPage(pagenum, pagesize, userId, knowledgeId,courseId);
}
/**
* 根据ids删除
* @param ids
* @return
*/
@ApiOperation("学习记录删除")
@DeleteMapping("/delete")
public BaseResponse<String> deleteRecords(@RequestParam List<Long> ids){
return resourceLearningRecordService.removeResourceRecord(ids);
}
@ApiOperation("上传图片")
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public BaseResponse<String> upload(@RequestPart("filedata") MultipartFile filedata){
//调用ser
//源文件
// File sourseFile = (File) file;
return ResultUtils.success("hello");
};
@GetMapping("/bf")
public BaseResponse<String> bf(@RequestParam String path, File file,HttpServletRequest request, HttpServletResponse response){
File sourseFile = new File(path);
return ResultUtils.success(path);
};
} }

@ -0,0 +1,32 @@
package com.teaching.backend.model.dto.upload;
import lombok.Data;
@Data
public class UploadFileParamsDto {
/**
* 文件名称
*/
private String filename;
/**
* 文件类型(文档音频视频)
*/
private String fileType;
/**
* 文件大小
*/
private Long fileSize;
/**
* 标签
*/
private String tags;
/**
* 上传人
*/
private String username;
/**
* 备注
*/
private String remark;
}

@ -37,8 +37,8 @@ public class KnowledgeLearningRecord implements Serializable {
@TableField("knowledge_id") @TableField("knowledge_id")
private String knowledgeId; private String knowledgeId;
@ApiModelProperty(value = "知识点id") @ApiModelProperty(value = "知识点名称")
@TableField("knowledge_id") @TableField("knowledge_name")
private String knowledgeName; private String knowledgeName;
@ApiModelProperty(value = "课程id") @ApiModelProperty(value = "课程id")

@ -37,6 +37,10 @@ public class ResourceLearningRecord implements Serializable {
@TableField("resource_id") @TableField("resource_id")
private String resourceId; private String resourceId;
@ApiModelProperty(value = "资源名称")
@TableField("resource_name")
private String resourceName;
@ApiModelProperty(value = "知识点id") @ApiModelProperty(value = "知识点id")
@TableField("knowledge_id") @TableField("knowledge_id")
private String knowledgeId; private String knowledgeId;

@ -17,6 +17,10 @@ public class CourseLearningRecordsVo {
* 课程学习id * 课程学习id
*/ */
private String id; private String id;
/**
* 课程id
*/
private String courseId;
/** /**
* 课程名称 * 课程名称
*/ */

@ -0,0 +1,37 @@
package com.teaching.backend.model.vo.records;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(description = "知识点学习记录")
public class KnowledgeLearningRecordVo {
/**
* 知识点学习id
*/
private String id;
/**
* 课程id
*/
private String coursesId;
/**
* 知识点id
*/
private String knowledgeId;
/**
* 知识点名称
*/
private String knowledgeName;
/**
* 用户id
*/
private String userId;
/**
* 学习人数
*/
private Integer number;
/**
* 学习时间
*/
private String time;
}

@ -0,0 +1,29 @@
package com.teaching.backend.model.vo.records;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(description = "资源学习记录")
public class ResourceLearingRecordVo {
/**
* 资源学习id
*/
private String id;
/**
* 资源名称
*/
private String resourceName;
/**
* 用户id
*/
private String userId;
/**
* 学习人数
*/
private Integer number;
/**
* 学习时间
*/
private String time;
}

@ -61,19 +61,21 @@ public class CourseLearningRecordServiceImpl extends ServiceImpl<CourseLearningR
Long count = courseLearningNumberService.query() Long count = courseLearningNumberService.query()
.eq("course_id", courseId).count(); .eq("course_id", courseId).count();
//2.2判断自己是否学习过 //2.2判断自己是否学习过
Long count1 = query().eq("user_id", userId).count(); Long count1 = query().eq("user_id", userId).eq("course_id", courseId).count();
if (count > 0){ if (count > 0){
//自己没学过,人数加1 //自己没学过,人数加1
if (count1 == 0){ if (count1 == 0){
courseLearningNumberService.update().setSql("number = number + 1").eq("course_id",courseId).update(); courseLearningNumberService.update().setSql("number = number + 1").eq("course_id",courseId).update();
// System.out.println("用户:"+userId+"第一次学这门课"); //System.out.println("用户:"+userId+"第一次学这门课");
} }
//System.out.println("重复学习");
}else { }else {
//该课程第一次被学,人数设置为1 //该课程第一次被学,人数设置为1
CourseLearningNumber courseLearningNumber = new CourseLearningNumber(); CourseLearningNumber courseLearningNumber = new CourseLearningNumber();
courseLearningNumber.setNumber(1); courseLearningNumber.setNumber(1);
courseLearningNumber.setCourseId(courseId); courseLearningNumber.setCourseId(courseId);
courseLearningNumberService.save(courseLearningNumber); courseLearningNumberService.save(courseLearningNumber);
//System.out.println("该课程第一次被学习");
} }
//设置人数 //设置人数
String numberId = courseLearningNumberService.query().eq("course_id", courseId).one().getId(); String numberId = courseLearningNumberService.query().eq("course_id", courseId).one().getId();

@ -2,20 +2,30 @@ package com.teaching.backend.service.impl.records;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils; import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.records.KnowledgeLearningRecordMapper; import com.teaching.backend.mapper.records.KnowledgeLearningRecordMapper;
import com.teaching.backend.model.entity.KnowGraph.KnowledgeLearningNumber; import com.teaching.backend.model.entity.KnowGraph.KnowledgeLearningNumber;
import com.teaching.backend.model.entity.courses.CourseLearningNumber; import com.teaching.backend.model.entity.courses.CourseLearningNumber;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord; import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.model.vo.records.KnowledgeLearningRecordVo;
import com.teaching.backend.service.impl.courses.CourseLearningNumberServiceImpl; import com.teaching.backend.service.impl.courses.CourseLearningNumberServiceImpl;
import com.teaching.backend.service.impl.knowledge.KnowledgeLearningNumberServiceImpl; import com.teaching.backend.service.impl.knowledge.KnowledgeLearningNumberServiceImpl;
import com.teaching.backend.service.records.IKnowledgeLearningRecordService; import com.teaching.backend.service.records.IKnowledgeLearningRecordService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* <p> * <p>
@ -44,7 +54,10 @@ public class KnowledgeLearningRecordServiceImpl extends ServiceImpl<KnowledgeLea
.eq("course_id", courseId) .eq("course_id", courseId)
.eq("knowledge_id",knowledgeId).count(); .eq("knowledge_id",knowledgeId).count();
//2.2判断自己是否学习过 //2.2判断自己是否学习过
Long count1 = query().eq("user_id", userId).count(); Long count1 = query()
.eq("user_id", userId)
.eq("courses_id", courseId)
.eq("knowledge_id",knowledgeId).count();
if (count > 0){ if (count > 0){
//自己没学过,人数加1 //自己没学过,人数加1
if (count1 == 0){ if (count1 == 0){
@ -68,4 +81,38 @@ public class KnowledgeLearningRecordServiceImpl extends ServiceImpl<KnowledgeLea
save(knowledgeLearningRecord); save(knowledgeLearningRecord);
return ResultUtils.success("添加成功"); return ResultUtils.success("添加成功");
} }
@Override
public BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String courseId) {
//格式化时间
String strDateFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
//分页查询
Page<KnowledgeLearningRecord> page = query()
.orderByDesc("times")
.eq("user_id", userId)
.eq("courses_id",courseId).page(new Page<>(pagenum, pagesize));
Page<KnowledgeLearningRecordVo> page1 = new Page<>();
List<KnowledgeLearningRecord> records = page.getRecords();
BeanUtil.copyProperties(page, page1);
List<KnowledgeLearningRecordVo> recordsVos = new ArrayList<>();
//copy集合
records.forEach(knowledgeLearningRecord -> {
KnowledgeLearningRecordVo knowledgeLearningRecordVo = new KnowledgeLearningRecordVo();
BeanUtil.copyProperties(knowledgeLearningRecord,knowledgeLearningRecordVo);
Date date = Date.from(knowledgeLearningRecord.getTimes().atZone(ZoneId.systemDefault()).toInstant());
knowledgeLearningRecordVo.setTime(sdf.format(date));
// //填充学习人数
knowledgeLearningRecordVo.setNumber(knowledgeLearningNumberService.getById(knowledgeLearningRecord.getNumber()).getNumber());
recordsVos.add(knowledgeLearningRecordVo);
});
page1.setRecords(recordsVos);
return ResultUtils.success(page1);
}
@Override
public BaseResponse<String> removeKnowledgeRecord(List<Long> ids) {
removeByIds(ids);
return ResultUtils.success("删除成功!");
}
} }

@ -1,18 +1,28 @@
package com.teaching.backend.service.impl.records; package com.teaching.backend.service.impl.records;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils; import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.records.ResourceLearningRecordMapper; import com.teaching.backend.mapper.records.ResourceLearningRecordMapper;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.model.entity.records.ResourceLearningRecord; import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import com.teaching.backend.model.entity.resource.ResourceLearningNumber; import com.teaching.backend.model.entity.resource.ResourceLearningNumber;
import com.teaching.backend.model.vo.records.KnowledgeLearningRecordVo;
import com.teaching.backend.model.vo.records.ResourceLearingRecordVo;
import com.teaching.backend.service.impl.resource.ResourceLearningNumberServiceImpl; import com.teaching.backend.service.impl.resource.ResourceLearningNumberServiceImpl;
import com.teaching.backend.service.records.IResourceLearningRecordService; import com.teaching.backend.service.records.IResourceLearningRecordService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* <p> * <p>
@ -44,7 +54,11 @@ public class ResourceLearningRecordServiceImpl extends ServiceImpl<ResourceLearn
.eq("knowledge_id",knowledgeId) .eq("knowledge_id",knowledgeId)
.eq("resource_id",resourceId).count(); .eq("resource_id",resourceId).count();
//2.2判断自己是否学习过 //2.2判断自己是否学习过
Long count1 = query().eq("user_id", userId).count(); Long count1 = query()
.eq("user_id", userId)
.eq("courses_id", courseId)
.eq("knowledge_id",knowledgeId)
.eq("resource_id",resourceId).count();
if (count > 0){ if (count > 0){
//自己没学过,人数加1 //自己没学过,人数加1
if (count1 == 0){ if (count1 == 0){
@ -73,4 +87,41 @@ public class ResourceLearningRecordServiceImpl extends ServiceImpl<ResourceLearn
save(resourceLearningRecord); save(resourceLearningRecord);
return ResultUtils.success("添加成功"); return ResultUtils.success("添加成功");
} }
@Override
public BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String knowledgeId, String courseId) {
//格式化时间
String strDateFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
//分页查询
Page<ResourceLearningRecord> page = query()
.orderByDesc("times")
.eq("user_id", userId)
.eq("knowledge_id",knowledgeId)
.eq("courses_id",courseId).page(new Page<>(pagenum, pagesize));
Page<ResourceLearingRecordVo> page1 = new Page<>();
List<ResourceLearningRecord> records = page.getRecords();
BeanUtil.copyProperties(page, page1);
List<ResourceLearingRecordVo> recordsVos = new ArrayList<>();
//copy集合
records.forEach(resourceLearningRecord -> {
ResourceLearingRecordVo resourceLearingRecordVo = new ResourceLearingRecordVo();
BeanUtil.copyProperties(resourceLearningRecord,resourceLearingRecordVo);
Date date = Date.from(resourceLearningRecord.getTimes().atZone(ZoneId.systemDefault()).toInstant());
resourceLearingRecordVo.setTime(sdf.format(date));
// //填充学习人数
resourceLearingRecordVo.setNumber(resourceLearningNumberService.getById(resourceLearningRecord.getNumber()).getNumber());
recordsVos.add(resourceLearingRecordVo);
});
page1.setRecords(recordsVos);
return ResultUtils.success(page1);
}
@Override
public BaseResponse<String> removeResourceRecord(List<Long> ids) {
removeByIds(ids);
return ResultUtils.success("删除成功!");
}
} }

@ -1,10 +1,13 @@
package com.teaching.backend.service.records; package com.teaching.backend.service.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord; import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
@ -16,4 +19,9 @@ import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
public interface IKnowledgeLearningRecordService extends IService<KnowledgeLearningRecord> { public interface IKnowledgeLearningRecordService extends IService<KnowledgeLearningRecord> {
BaseResponse<String> saveCoursesRecords(KnowledgeLearningRecord knowledgeLearningRecord); BaseResponse<String> saveCoursesRecords(KnowledgeLearningRecord knowledgeLearningRecord);
BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String courseId);
BaseResponse<String> removeKnowledgeRecord(List<Long> ids);
} }

@ -1,10 +1,13 @@
package com.teaching.backend.service.records; package com.teaching.backend.service.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.entity.records.ResourceLearningRecord; import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
@ -16,4 +19,8 @@ import com.teaching.backend.model.entity.records.ResourceLearningRecord;
public interface IResourceLearningRecordService extends IService<ResourceLearningRecord> { public interface IResourceLearningRecordService extends IService<ResourceLearningRecord> {
BaseResponse<String> saveCoursesRecords(ResourceLearningRecord resourceLearningRecord); BaseResponse<String> saveCoursesRecords(ResourceLearningRecord resourceLearningRecord);
BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String knowledgeId, String courseId);
BaseResponse<String> removeResourceRecord(List<Long> ids);
} }

@ -0,0 +1,101 @@
package com.teaching;
import org.junit.jupiter.api.Test;
import org.springframework.util.DigestUtils;
import java.io.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MinioTest {
//分块测试
@Test
public void testChunk() throws IOException {
//源文件
File sourseFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20.mp4");
//分块文件存储路径
String chunkFilePath = "D:/Users/Desktop/image/剪映/7.18/chunk/";
//分块文件大小
int chunkSize = 1024 * 1024 * 1;
//分块文件个数
int chunkNum = (int) Math.ceil(sourseFile.length() * 1.0 / chunkSize);
//使用流从源文件读数据,向分块文件中写数据
RandomAccessFile raf_r = new RandomAccessFile(sourseFile, "r");
//缓存区
byte[] bytes = new byte[1024];
for (int i = 0; i < chunkNum; i++) {
File chunkFile = new File(chunkFilePath + i);
//分块文件写入流
RandomAccessFile raf_rw = new RandomAccessFile(chunkFile, "rw");
int len = -1;
while((len=raf_r.read(bytes)) != -1){
raf_rw.write(bytes, 0, len);
if (chunkFile.length() >= chunkSize){
break;
}
}
raf_rw.close();
}
raf_r.close();
}
//将分块进行合并
@Test
public void testMerge() throws IOException {
//块文件目录
File chunkFolder = new File("D:\\Users\\Desktop\\image\\剪映\\7.18\\chunk");
//源文件
File sourseFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20.mp4");
//合并后的文件
File mergeFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20_merge.mp4");
//取出所有分块文件
File[] files = chunkFolder.listFiles();
//将数组转成list
List<File> fileList = Arrays.asList(files);
//对分块文件排序
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Integer.parseInt(o1.getName()) - Integer.parseInt(o2.getName()); //升序
}
});
//向合并文件写的流
RandomAccessFile raf_rw = new RandomAccessFile(mergeFile, "rw");
//缓存区
byte[] bytes = new byte[1024];
//遍历分块文件,向合并的文件写
for (File file : fileList) {
//读分块的流
RandomAccessFile raf_r = new RandomAccessFile(file, "r");
int len = -1;
while((len = raf_r.read(bytes)) != -1){
raf_rw.write(bytes, 0, len);
}
raf_r.close();
}
raf_rw.close();
//合并文件完成后对合并的文件校验
FileInputStream fileInputStream_merge = new FileInputStream(mergeFile);
FileInputStream fileInputStream_source = new FileInputStream(sourseFile);
String md5_merge = DigestUtils.md5DigestAsHex(fileInputStream_merge);
String md5_source = DigestUtils.md5DigestAsHex(fileInputStream_source);
if (md5_merge.equals(md5_source)){
System.out.println("文件合并成功!");
}
}
//将分块文件上传到minio
public void uploadChunk(){
}
//调用minio接口合并分块
//批量清理分块文件
}
Loading…
Cancel
Save