diff --git a/exam_paper_1742961626351.pdf b/exam_paper_1742961626351.pdf new file mode 100644 index 0000000..980ebcf Binary files /dev/null and b/exam_paper_1742961626351.pdf differ diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java index 22d53c7..1691c55 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -145,6 +145,11 @@ public class FileUploadUtils return desc; } + // 公共方法,间接调用私有方法 + public static String callGetPathFileName(String param1, String param2) throws IOException { + return getPathFileName(param1, param2); + } + private static final String getPathFileName(String uploadDir, String fileName) throws IOException { int dirLastIndex = RuoYiConfig.getProfile().length() + 1; diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSavePdfQueryBo.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSavePdfQueryBo.java new file mode 100644 index 0000000..a660146 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/WgzQuestionSavePdfQueryBo.java @@ -0,0 +1,64 @@ +package com.ruoyi.wgz.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 用户试卷存储pdf分页查询对象 wgz_question_save_pdf + * + * @author ruoyi + * @date 2025-03-26 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("用户试卷存储pdf分页查询对象") +public class WgzQuestionSavePdfQueryBo extends BaseEntity { + + /** 分页大小 */ + @ApiModelProperty("分页大小") + private Integer pageSize; + /** 当前页数 */ + @ApiModelProperty("当前页数") + private Integer pageNum; + /** 排序列 */ + @ApiModelProperty("排序列") + private String orderByColumn; + /** 排序的方向desc或者asc */ + @ApiModelProperty(value = "排序的方向", example = "asc,desc") + private String isAsc; + + + /** 1线上 2线下 */ + @ApiModelProperty("1线上 2线下") + private String type; + /** 用户主键ID */ + @ApiModelProperty("用户主键ID") + private Long userId; + /** pdf路径 */ + @ApiModelProperty("pdf路径") + private String path; + /** 及格线/总分(格式:60,100) */ + @ApiModelProperty("及格线/总分(格式:60,100)") + private String pass; + /** 最大超时时间(单位/分钟) */ + @ApiModelProperty("最大超时时间(单位/分钟)") + private Long timeOut; + /** 用时时间(时间戳/秒) */ + @ApiModelProperty("用时时间(时间戳/秒)") + private Long takeTime; + /** 总得分 */ + @ApiModelProperty("总得分") + private Long sumScore; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppSubmitATestPaperRes.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppSubmitATestPaperRes.java index eb196e5..d75860d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppSubmitATestPaperRes.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppSubmitATestPaperRes.java @@ -32,6 +32,6 @@ public class WgzAppSubmitATestPaperRes implements Serializable { @ApiModelProperty("答对题数") private Integer number; -// @ApiModelProperty("试卷") -// private String pdfStr; + @ApiModelProperty("试卷") + private String pdfStr; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppUserScoreQuery.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppUserScoreQuery.java index 16980c2..bd66a7b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppUserScoreQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/res/WgzAppUserScoreQuery.java @@ -24,4 +24,7 @@ public class WgzAppUserScoreQuery implements Serializable { @ApiModelProperty("当前分") private float CurrentMinute; + + @ApiModelProperty("试卷") + private String pdfStr; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSavePdf.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSavePdf.java new file mode 100644 index 0000000..eee3c6c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/domain/WgzQuestionSavePdf.java @@ -0,0 +1,74 @@ +package com.ruoyi.wgz.domain; + +import com.ruoyi.common.annotation.Excel; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.LocalDate; + +/** + * 用户试卷存储pdf对象 wgz_question_save_pdf + * + * @author ruoyi + * @date 2025-03-26 + */ +@Data +@NoArgsConstructor +@Accessors(chain = true) +@TableName("wgz_question_save_pdf") +@ApiModel("用户试卷存储pdf视图对象") +public class WgzQuestionSavePdf implements Serializable { + + private static final long serialVersionUID=1L; + + /** 主键iD */ + @ApiModelProperty("主键iD") + @TableId(value = "id") + private Long id; + + /** 1线上 2线下 */ + @Excel(name = "1线上 2线下") + @ApiModelProperty("1线上 2线下") + private String type; + + /** 用户主键ID */ + @Excel(name = "用户主键ID") + @ApiModelProperty("用户主键ID") + private Long userId; + + /** pdf路径 */ + @Excel(name = "pdf路径") + @ApiModelProperty("pdf路径") + private String path; + + /** 及格线/总分(格式:60,100) */ + @Excel(name = "及格线/总分" , readConverterExp = "格=式:60,100") + @ApiModelProperty("及格线/总分(格式:60,100)") + private String pass; + + /** 最大超时时间(单位/分钟) */ + @Excel(name = "最大超时时间" , readConverterExp = "单=位/分钟") + @ApiModelProperty("最大超时时间(单位/分钟)") + private int timeOut; + + /** 用时时间(时间戳/秒) */ + @Excel(name = "用时时间" , readConverterExp = "时=间戳/秒") + @ApiModelProperty("用时时间(时间戳/秒)") + private Long takeTime; + + /** 总得分 */ + @Excel(name = "总得分") + @ApiModelProperty("总得分") + private Double sumScore; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java index 7f7f43f..e262d89 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSaveMapper.java @@ -37,6 +37,6 @@ public interface WgzQuestionSaveMapper extends BaseMapperPlus { String pdfSumScore (@Param("userId") Long userId); // - @Select("SELECT c.question_type,c.question_text,c.OPTIONS,a.answer,c.correct_answer,a.correct,a.score,a.sign,a.id,a.pass,b.username FROM wgz_question_save AS a LEFT JOIN wgz_user AS b ON b.user_id=a.user_id LEFT JOIN wgz_question_bank AS c ON a.bank_id=c.id WHERE a.user_id=#{userId}") + @Select("SELECT c.question_type,c.question_text,c.OPTIONS,a.answer,c.correct_answer,a.correct,a.score,a.sign,a.id,a.pass,b.username as userName FROM wgz_question_save AS a LEFT JOIN wgz_user AS b ON b.user_id=a.user_id LEFT JOIN wgz_question_bank AS c ON a.bank_id=c.id WHERE a.user_id=#{userId}") List pdfSc (@Param("userId") Long userId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSavePdfMapper.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSavePdfMapper.java new file mode 100644 index 0000000..0b4737f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/mapper/WgzQuestionSavePdfMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.wgz.mapper; + +import com.ruoyi.wgz.domain.WgzQuestionSavePdf; +import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; +import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; +import org.apache.ibatis.annotations.CacheNamespace; + +/** + * 用户试卷存储pdfMapper接口 + * + * @author ruoyi + * @date 2025-03-26 + */ +// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象 +@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) +public interface WgzQuestionSavePdfMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSavePdfService.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSavePdfService.java new file mode 100644 index 0000000..2a27673 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzQuestionSavePdfService.java @@ -0,0 +1,65 @@ +package com.ruoyi.wgz.service; + +import com.ruoyi.wgz.domain.WgzQuestionSavePdf; +import com.ruoyi.wgz.bo.WgzQuestionSavePdfQueryBo; +import com.ruoyi.common.core.mybatisplus.core.IServicePlus; +import com.ruoyi.common.core.page.TableDataInfo; + +import java.util.Collection; +import java.util.List; + +/** + * 用户试卷存储pdfService接口 + * + * @author ruoyi + * @date 2025-03-26 + */ +public interface IWgzQuestionSavePdfService extends IServicePlus { + /** + * 查询单个 + * @return + */ + WgzQuestionSavePdf queryById(Long id); + + /** + * 查询列表 + */ + TableDataInfo queryPageList(WgzQuestionSavePdfQueryBo bo); + + /** + * 查询列表 + */ + List queryList(WgzQuestionSavePdfQueryBo bo); + + /** + * 根据新增业务对象插入用户试卷存储pdf + * @param bo 用户试卷存储pdf新增业务对象 + * @return + */ + Boolean insert(WgzQuestionSavePdf bo); + + /** + * 根据编辑业务对象修改用户试卷存储pdf + * @param bo 用户试卷存储pdf编辑业务对象 + * @return + */ + Boolean update(WgzQuestionSavePdf bo); + + /** + * 校验并删除数据 + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * APP相关 + * ================================================================================================================= + * ================================================================================================================= + * ================================================================================================================= + */ + + //根据当前用户ID查询用户试卷存储pdf + WgzQuestionSavePdf queryByUserId(Long userId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSavePdfServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSavePdfServiceImpl.java new file mode 100644 index 0000000..c902367 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSavePdfServiceImpl.java @@ -0,0 +1,98 @@ +package com.ruoyi.wgz.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.core.page.PagePlus; +import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.wgz.bo.WgzQuestionSavePdfQueryBo; +import com.ruoyi.wgz.domain.WgzQuestionSavePdf; +import com.ruoyi.wgz.mapper.WgzQuestionSavePdfMapper; +import com.ruoyi.wgz.service.IWgzQuestionSavePdfService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 用户试卷存储pdfService业务层处理 + * + * @author ruoyi + * @date 2025-03-26 + */ +@Service +public class WgzQuestionSavePdfServiceImpl extends ServicePlusImpl implements IWgzQuestionSavePdfService { + + @Override + public WgzQuestionSavePdf queryById(Long id){ + return getById(id); + } + + @Override + public TableDataInfo queryPageList(WgzQuestionSavePdfQueryBo bo) { + Page result = page(PageUtils.buildPage(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } + + @Override + public List queryList(WgzQuestionSavePdfQueryBo bo) { + return list(buildQueryWrapper(bo)); + } + + private LambdaQueryWrapper buildQueryWrapper(WgzQuestionSavePdfQueryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StrUtil.isNotBlank(bo.getType()), WgzQuestionSavePdf::getType, bo.getType()); + lqw.eq(bo.getUserId() != null, WgzQuestionSavePdf::getUserId, bo.getUserId()); + lqw.eq(StrUtil.isNotBlank(bo.getPath()), WgzQuestionSavePdf::getPath, bo.getPath()); + lqw.eq(StrUtil.isNotBlank(bo.getPass()), WgzQuestionSavePdf::getPass, bo.getPass()); + lqw.eq(bo.getTimeOut() != null, WgzQuestionSavePdf::getTimeOut, bo.getTimeOut()); + lqw.eq(bo.getTakeTime() != null, WgzQuestionSavePdf::getTakeTime, bo.getTakeTime()); + lqw.eq(bo.getSumScore() != null, WgzQuestionSavePdf::getSumScore, bo.getSumScore()); + return lqw; + } + + @Override + public Boolean insert(WgzQuestionSavePdf bo) { + WgzQuestionSavePdf add = BeanUtil.toBean(bo, WgzQuestionSavePdf.class); + validEntityBeforeSave(add); + return save(add); + } + + @Override + public Boolean update(WgzQuestionSavePdf bo) { + WgzQuestionSavePdf update = BeanUtil.toBean(bo, WgzQuestionSavePdf.class); + validEntityBeforeSave(update); + return updateById(update); + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(WgzQuestionSavePdf entity){ + //TODO 做一些数据校验,如唯一约束 + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return removeByIds(ids); + } + + + @Override + public WgzQuestionSavePdf queryByUserId(Long userId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(WgzQuestionSavePdf::getUserId, userId); + return baseMapper.selectOne(lqw); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java index 4af33e6..4d8e8ce 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzQuestionSaveServiceImpl.java @@ -1,12 +1,14 @@ package com.ruoyi.wgz.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.itextpdf.io.font.PdfEncodings; import com.itextpdf.io.image.ImageData; import com.itextpdf.io.image.ImageDataFactory; +import com.itextpdf.kernel.colors.ColorConstants; import com.itextpdf.kernel.colors.DeviceRgb; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; @@ -16,24 +18,21 @@ import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Image; import com.ruoyi.bgt.domain.vo.BgtQuestionResult; +import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.BaseException; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.wgz.bo.WgzQuestionSaveQueryBo; import com.ruoyi.wgz.bo.req.WgzAppSubmitATestPaperReq; import com.ruoyi.wgz.bo.res.WgzAppSubmitATestPaperRes; import com.ruoyi.wgz.bo.res.WgzAppUserScoreQuery; import com.ruoyi.wgz.bo.rests.*; -import com.ruoyi.wgz.domain.WgzQuestionBank; -import com.ruoyi.wgz.domain.WgzQuestionSave; -import com.ruoyi.wgz.domain.WgzQuestionsConfiguration; -import com.ruoyi.wgz.domain.WgzUser; +import com.ruoyi.wgz.domain.*; import com.ruoyi.wgz.mapper.WgzQuestionSaveMapper; -import com.ruoyi.wgz.service.IWgzQuestionBankService; -import com.ruoyi.wgz.service.IWgzQuestionSaveService; -import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService; -import com.ruoyi.wgz.service.IWgzUserService; +import com.ruoyi.wgz.service.*; import com.itextpdf.layout.properties.TextAlignment; import com.itextpdf.layout.element.Paragraph; import org.aspectj.weaver.patterns.TypePatternQuestions; @@ -44,6 +43,7 @@ import org.springframework.util.StringUtils; import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; @@ -70,6 +70,9 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl scoreTwo) { return res; } else { + corySumScore = scoreTwo; if (scoreOne == 0){ // 插入新数据 super.saveBatch(bqs); - return res; } // 先查询当前用户是否有答题,有就把之前的删除(真删) int deleteResult = baseMapper.delete(new LambdaQueryWrapper().eq(WgzQuestionSave::getUserId, req.getUserId())); @@ -223,15 +234,30 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl we = baseMapper.pdfSc(userId); if (!we.isEmpty()) { @@ -243,7 +269,8 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl + + + + + + + + + + + + + + + + diff --git a/ruoyi/uploadPath/upload/2025/03/25/06af7df3-4eb3-43e7-8e4a-db79c7e84276.jpg b/ruoyi/uploadPath/upload/2025/03/25/06af7df3-4eb3-43e7-8e4a-db79c7e84276.jpg new file mode 100644 index 0000000..2d595bf Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/25/06af7df3-4eb3-43e7-8e4a-db79c7e84276.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/25/1ef83771-4490-46ec-99e0-c5f38674171b.pdf b/ruoyi/uploadPath/upload/2025/03/25/1ef83771-4490-46ec-99e0-c5f38674171b.pdf new file mode 100644 index 0000000..b91e9f3 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/25/1ef83771-4490-46ec-99e0-c5f38674171b.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/25/a5591346-7976-4c7d-8f86-2b3181423a6a.jpg b/ruoyi/uploadPath/upload/2025/03/25/a5591346-7976-4c7d-8f86-2b3181423a6a.jpg new file mode 100644 index 0000000..0882fcf Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/25/a5591346-7976-4c7d-8f86-2b3181423a6a.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/25/edcdc006-e4ba-4254-9f80-dbbdbca6a713.jpg b/ruoyi/uploadPath/upload/2025/03/25/edcdc006-e4ba-4254-9f80-dbbdbca6a713.jpg new file mode 100644 index 0000000..da24892 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/25/edcdc006-e4ba-4254-9f80-dbbdbca6a713.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/004b8281-c250-4286-8a21-aab4c8d34a94.jpg b/ruoyi/uploadPath/upload/2025/03/26/004b8281-c250-4286-8a21-aab4c8d34a94.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/004b8281-c250-4286-8a21-aab4c8d34a94.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/0a229ed1-1111-4fc0-9b51-f6577f774381.xlsx b/ruoyi/uploadPath/upload/2025/03/26/0a229ed1-1111-4fc0-9b51-f6577f774381.xlsx new file mode 100644 index 0000000..1aacfcc Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/0a229ed1-1111-4fc0-9b51-f6577f774381.xlsx differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/19030236973006888963b5821d6-edb2-4b3a-92b5-bbf425266912.pdf b/ruoyi/uploadPath/upload/2025/03/26/19030236973006888963b5821d6-edb2-4b3a-92b5-bbf425266912.pdf new file mode 100644 index 0000000..8ac7fb0 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/19030236973006888963b5821d6-edb2-4b3a-92b5-bbf425266912.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/1903023697300688896cee1e0f1-ff49-485b-a527-0c63b12899ae.pdf b/ruoyi/uploadPath/upload/2025/03/26/1903023697300688896cee1e0f1-ff49-485b-a527-0c63b12899ae.pdf new file mode 100644 index 0000000..471b8cf Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/1903023697300688896cee1e0f1-ff49-485b-a527-0c63b12899ae.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/192ff6ea-21a4-4482-bf38-cd03127aff62.jpg b/ruoyi/uploadPath/upload/2025/03/26/192ff6ea-21a4-4482-bf38-cd03127aff62.jpg new file mode 100644 index 0000000..f937178 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/192ff6ea-21a4-4482-bf38-cd03127aff62.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/278407f6-bbc8-4b83-80ae-81bba7372ec9.jpg b/ruoyi/uploadPath/upload/2025/03/26/278407f6-bbc8-4b83-80ae-81bba7372ec9.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/278407f6-bbc8-4b83-80ae-81bba7372ec9.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/335da647-70b5-489b-8e56-edb7d0279438.jpg b/ruoyi/uploadPath/upload/2025/03/26/335da647-70b5-489b-8e56-edb7d0279438.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/335da647-70b5-489b-8e56-edb7d0279438.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/3906c5e0-69e9-42f9-9abd-fc8e94ff4b2e.jpg b/ruoyi/uploadPath/upload/2025/03/26/3906c5e0-69e9-42f9-9abd-fc8e94ff4b2e.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/3906c5e0-69e9-42f9-9abd-fc8e94ff4b2e.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/3e308a4c-ead4-4ad0-9e34-969754ca1919.docx b/ruoyi/uploadPath/upload/2025/03/26/3e308a4c-ead4-4ad0-9e34-969754ca1919.docx new file mode 100644 index 0000000..577708d Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/3e308a4c-ead4-4ad0-9e34-969754ca1919.docx differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/412d4cc9-3cb8-4b01-991e-280eb3b20b72.jpg b/ruoyi/uploadPath/upload/2025/03/26/412d4cc9-3cb8-4b01-991e-280eb3b20b72.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/412d4cc9-3cb8-4b01-991e-280eb3b20b72.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/44a187bd-d112-4a23-9b8f-ecdcd08993ca.pdf b/ruoyi/uploadPath/upload/2025/03/26/44a187bd-d112-4a23-9b8f-ecdcd08993ca.pdf new file mode 100644 index 0000000..b91e9f3 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/44a187bd-d112-4a23-9b8f-ecdcd08993ca.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/4963d288-9908-4069-b12f-8b4a54b43e87.jpg b/ruoyi/uploadPath/upload/2025/03/26/4963d288-9908-4069-b12f-8b4a54b43e87.jpg new file mode 100644 index 0000000..a495c86 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/4963d288-9908-4069-b12f-8b4a54b43e87.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/4f2b35b3-d904-4f1d-980b-f1fa7df3476e.jpg b/ruoyi/uploadPath/upload/2025/03/26/4f2b35b3-d904-4f1d-980b-f1fa7df3476e.jpg new file mode 100644 index 0000000..e69de29 diff --git a/ruoyi/uploadPath/upload/2025/03/26/54871cef-4508-4414-bce5-3002564f33b6.jpg b/ruoyi/uploadPath/upload/2025/03/26/54871cef-4508-4414-bce5-3002564f33b6.jpg new file mode 100644 index 0000000..a495c86 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/54871cef-4508-4414-bce5-3002564f33b6.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/57312bdb-83b1-414a-ab3d-57a24f3c179c.jpg b/ruoyi/uploadPath/upload/2025/03/26/57312bdb-83b1-414a-ab3d-57a24f3c179c.jpg new file mode 100644 index 0000000..a495c86 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/57312bdb-83b1-414a-ab3d-57a24f3c179c.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/622d814f-cab3-41d5-a2b7-e7c21d044c04.jpg b/ruoyi/uploadPath/upload/2025/03/26/622d814f-cab3-41d5-a2b7-e7c21d044c04.jpg new file mode 100644 index 0000000..f937178 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/622d814f-cab3-41d5-a2b7-e7c21d044c04.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/6241b850-6a19-498c-9dda-f5463195a0ce.jpg b/ruoyi/uploadPath/upload/2025/03/26/6241b850-6a19-498c-9dda-f5463195a0ce.jpg new file mode 100644 index 0000000..ed5c13f Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/6241b850-6a19-498c-9dda-f5463195a0ce.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/6475ff95-c026-498d-971b-69568d581ff7.jpg b/ruoyi/uploadPath/upload/2025/03/26/6475ff95-c026-498d-971b-69568d581ff7.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/6475ff95-c026-498d-971b-69568d581ff7.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/65d4fd8d-3509-45a4-a23f-9d1490a0ce3c.pdf b/ruoyi/uploadPath/upload/2025/03/26/65d4fd8d-3509-45a4-a23f-9d1490a0ce3c.pdf new file mode 100644 index 0000000..b91e9f3 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/65d4fd8d-3509-45a4-a23f-9d1490a0ce3c.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/6b3851df-cda3-4c2e-a697-7d67a07b33fa.jpg b/ruoyi/uploadPath/upload/2025/03/26/6b3851df-cda3-4c2e-a697-7d67a07b33fa.jpg new file mode 100644 index 0000000..8150891 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/6b3851df-cda3-4c2e-a697-7d67a07b33fa.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/70479896-904f-43b8-8cbb-59c3c051de44.jpg b/ruoyi/uploadPath/upload/2025/03/26/70479896-904f-43b8-8cbb-59c3c051de44.jpg new file mode 100644 index 0000000..f937178 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/70479896-904f-43b8-8cbb-59c3c051de44.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/7603c805-3bb5-4afd-a4cf-b3ddc6941f72.jpg b/ruoyi/uploadPath/upload/2025/03/26/7603c805-3bb5-4afd-a4cf-b3ddc6941f72.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/7603c805-3bb5-4afd-a4cf-b3ddc6941f72.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/877c5393-5c11-4d5d-9c75-57a0e4bb950c.jpg b/ruoyi/uploadPath/upload/2025/03/26/877c5393-5c11-4d5d-9c75-57a0e4bb950c.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/877c5393-5c11-4d5d-9c75-57a0e4bb950c.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/8c5a8e62-8925-45d7-b967-818d034c48e9.jpg b/ruoyi/uploadPath/upload/2025/03/26/8c5a8e62-8925-45d7-b967-818d034c48e9.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/8c5a8e62-8925-45d7-b967-818d034c48e9.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/90b44861-083f-4a16-ab11-a07a9b8e691a.jpg b/ruoyi/uploadPath/upload/2025/03/26/90b44861-083f-4a16-ab11-a07a9b8e691a.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/90b44861-083f-4a16-ab11-a07a9b8e691a.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/a343cc17-3f75-43d6-8e77-3f3e7067de93.jpg b/ruoyi/uploadPath/upload/2025/03/26/a343cc17-3f75-43d6-8e77-3f3e7067de93.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/a343cc17-3f75-43d6-8e77-3f3e7067de93.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/a8a47c22-40e3-4de5-9af7-b08b338f71d7.jpg b/ruoyi/uploadPath/upload/2025/03/26/a8a47c22-40e3-4de5-9af7-b08b338f71d7.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/a8a47c22-40e3-4de5-9af7-b08b338f71d7.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/b17c6418-32ba-4847-a494-52a8b4241c8c.jpg b/ruoyi/uploadPath/upload/2025/03/26/b17c6418-32ba-4847-a494-52a8b4241c8c.jpg new file mode 100644 index 0000000..8150891 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/b17c6418-32ba-4847-a494-52a8b4241c8c.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/ba4f703c-816e-48fa-b6d7-eb8dbbd2599f.jpg b/ruoyi/uploadPath/upload/2025/03/26/ba4f703c-816e-48fa-b6d7-eb8dbbd2599f.jpg new file mode 100644 index 0000000..e69de29 diff --git a/ruoyi/uploadPath/upload/2025/03/26/bbcc9f6e-eabc-4e8d-be71-8119c35ecf0b.jpg b/ruoyi/uploadPath/upload/2025/03/26/bbcc9f6e-eabc-4e8d-be71-8119c35ecf0b.jpg new file mode 100644 index 0000000..f937178 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/bbcc9f6e-eabc-4e8d-be71-8119c35ecf0b.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/bf108467-55c9-41c7-9710-ad6b3fdc64f5.jpg b/ruoyi/uploadPath/upload/2025/03/26/bf108467-55c9-41c7-9710-ad6b3fdc64f5.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/bf108467-55c9-41c7-9710-ad6b3fdc64f5.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/c18cac4e-c3b0-4920-8627-50e5f339333c.jpg b/ruoyi/uploadPath/upload/2025/03/26/c18cac4e-c3b0-4920-8627-50e5f339333c.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/c18cac4e-c3b0-4920-8627-50e5f339333c.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/c4c8d751-9c0a-4d3d-a6de-ac103eaa69fa.jpg b/ruoyi/uploadPath/upload/2025/03/26/c4c8d751-9c0a-4d3d-a6de-ac103eaa69fa.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/c4c8d751-9c0a-4d3d-a6de-ac103eaa69fa.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/c76f9c96-0bd6-4618-b98c-97e0f10299e3.jpg b/ruoyi/uploadPath/upload/2025/03/26/c76f9c96-0bd6-4618-b98c-97e0f10299e3.jpg new file mode 100644 index 0000000..0882fcf Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/c76f9c96-0bd6-4618-b98c-97e0f10299e3.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/c870f277-6b7c-46f5-bd84-e8138d875c88.jpg b/ruoyi/uploadPath/upload/2025/03/26/c870f277-6b7c-46f5-bd84-e8138d875c88.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/c870f277-6b7c-46f5-bd84-e8138d875c88.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/d69c9bbe-0e6f-4119-afdd-8d8f1939a6b2.jpg b/ruoyi/uploadPath/upload/2025/03/26/d69c9bbe-0e6f-4119-afdd-8d8f1939a6b2.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/d69c9bbe-0e6f-4119-afdd-8d8f1939a6b2.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/d9805abc-28fb-4f82-8382-3550b9c8467a.jpg b/ruoyi/uploadPath/upload/2025/03/26/d9805abc-28fb-4f82-8382-3550b9c8467a.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/d9805abc-28fb-4f82-8382-3550b9c8467a.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/dbb47e88-fd86-42cb-ad87-c2430bda61eb.jpg b/ruoyi/uploadPath/upload/2025/03/26/dbb47e88-fd86-42cb-ad87-c2430bda61eb.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/dbb47e88-fd86-42cb-ad87-c2430bda61eb.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/e2b43206-33da-4259-94d2-5e570aa641f4.jpg b/ruoyi/uploadPath/upload/2025/03/26/e2b43206-33da-4259-94d2-5e570aa641f4.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/e2b43206-33da-4259-94d2-5e570aa641f4.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/exam_paper_190302369730068889619a80eb6-322f-48e9-9aac-4d72559cd152.pdf b/ruoyi/uploadPath/upload/2025/03/26/exam_paper_190302369730068889619a80eb6-322f-48e9-9aac-4d72559cd152.pdf new file mode 100644 index 0000000..450726f Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/exam_paper_190302369730068889619a80eb6-322f-48e9-9aac-4d72559cd152.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/exam_paper_190302369730068889641d50e71-0e47-450c-9c3f-183650835a46.pdf b/ruoyi/uploadPath/upload/2025/03/26/exam_paper_190302369730068889641d50e71-0e47-450c-9c3f-183650835a46.pdf new file mode 100644 index 0000000..d51a385 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/exam_paper_190302369730068889641d50e71-0e47-450c-9c3f-183650835a46.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/exam_paper_1903023697300688896944dda61-0528-49dc-9ec6-6377327b1bd3.pdf b/ruoyi/uploadPath/upload/2025/03/26/exam_paper_1903023697300688896944dda61-0528-49dc-9ec6-6377327b1bd3.pdf new file mode 100644 index 0000000..92e5c11 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/exam_paper_1903023697300688896944dda61-0528-49dc-9ec6-6377327b1bd3.pdf differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/f8a7ba07-ba12-47ad-bb14-08865c0296b3.jpg b/ruoyi/uploadPath/upload/2025/03/26/f8a7ba07-ba12-47ad-bb14-08865c0296b3.jpg new file mode 100644 index 0000000..e69de29 diff --git a/ruoyi/uploadPath/upload/2025/03/26/fb9cd851-0f1b-4e26-9d64-e5f0cc5fe040.jpg b/ruoyi/uploadPath/upload/2025/03/26/fb9cd851-0f1b-4e26-9d64-e5f0cc5fe040.jpg new file mode 100644 index 0000000..a495c86 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/fb9cd851-0f1b-4e26-9d64-e5f0cc5fe040.jpg differ diff --git a/ruoyi/uploadPath/upload/2025/03/26/fbf104c7-c6b8-4676-9ed7-f174234c7dc1.jpg b/ruoyi/uploadPath/upload/2025/03/26/fbf104c7-c6b8-4676-9ed7-f174234c7dc1.jpg new file mode 100644 index 0000000..5974f29 Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/03/26/fbf104c7-c6b8-4676-9ed7-f174234c7dc1.jpg differ