mingfu před 3 týdny
rodič
revize
9069be01b8

+ 1 - 1
back-ui/vite.config.js

@@ -3,7 +3,7 @@ import path from 'path'
 import createVitePlugins from './vite/plugins'
 import tailwindcss from '@tailwindcss/vite'
 
-const baseUrl = 'https://dz.shineking.top/prod-api' // 后端接口
+const baseUrl = 'http://localhost:8080' // 后端接口
 
 // https://vitejs.dev/config/
 export default defineConfig(({ mode, command }) => {

+ 11 - 5
ie-admin/src/main/java/com/ruoyi/web/controller/front/FrontStudentController.java

@@ -18,16 +18,19 @@ import com.ruoyi.dz.domain.DzControl;
 import com.ruoyi.dz.domain.DzSubject;
 import com.ruoyi.dz.service.IDzControlService;
 import com.ruoyi.dz.service.IDzSubjectService;
+import com.ruoyi.enums.PaperType;
 import com.ruoyi.ie.domain.AEnrollUniversity;
 import com.ruoyi.ie.domain.AMarjorPlan;
 import com.ruoyi.ie.service.IAEnrollUniversityService;
 import com.ruoyi.ie.service.IAMarjorPlanService;
 import com.ruoyi.learn.domain.*;
 import com.ruoyi.learn.service.ILearnDirectedKnowledgeService;
+import com.ruoyi.learn.service.ILearnExamineeService;
 import com.ruoyi.learn.service.ILearnPlanService;
 import com.ruoyi.learn.service.ILearnPlanStudyService;
 import com.ruoyi.sy.service.ISyMajorService;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.service.ExamService;
 import com.ruoyi.web.service.LearnStatService;
 import com.ruoyi.web.service.LearnTeacherService;
 import com.ruoyi.web.service.StudentService;
@@ -62,9 +65,11 @@ public class FrontStudentController extends BaseController {
     private final IDzSubjectService dzSubjectService;
     private final LearnTeacherService learnTeacherService;
     private final LearnStatService learnStatService;
+    private final ExamService examService;
+    private final ILearnExamineeService learnExamineeService;
 
     public FrontStudentController(IDzControlService dzControlService, IAEnrollUniversityService universityService, ISyMajorService syMajorService, ISysUserService sysUserService,
-                                  ILearnPlanService learnPlanService, ILearnPlanStudyService learnPlanStudyService, IAMarjorPlanService marjorPlanService, ILearnDirectedKnowledgeService learnDirectedKnowledgeService, StudentService studentService, IDzSubjectService dzSubjectService, LearnTeacherService learnTeacherService, LearnStatService learnStatService) {
+                                  ILearnPlanService learnPlanService, ILearnPlanStudyService learnPlanStudyService, IAMarjorPlanService marjorPlanService, ILearnDirectedKnowledgeService learnDirectedKnowledgeService, StudentService studentService, IDzSubjectService dzSubjectService, LearnTeacherService learnTeacherService, LearnStatService learnStatService, ExamService examService, ILearnExamineeService learnExamineeService) {
         this.dzControlService = dzControlService;
         this.universityService = universityService;
         this.syMajorService = syMajorService;
@@ -77,6 +82,8 @@ public class FrontStudentController extends BaseController {
         this.dzSubjectService = dzSubjectService;
         this.learnTeacherService = learnTeacherService;
         this.learnStatService = learnStatService;
+        this.examService = examService;
+        this.learnExamineeService = learnExamineeService;
     }
 
     @ApiOperation("02 全部科目")
@@ -317,16 +324,15 @@ public class FrontStudentController extends BaseController {
     @GetMapping("record/simulated")
     public AjaxResult getRecordSimulated()
     {
-        JSONObject data = JSONObject.of("name", "考试", "date", "2025-09-26 15:46", "total", 300, "score", 80, "rate", 82);
-        List<JSONObject> list = Lists.newArrayList(data);
-        return AjaxResult.success(list);
+        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
+        return AjaxResult.success(studentService.getSimulateList(sysUser.getUserId()));
     }
 
     @ApiOperation("52 记录-模拟卷结果")
     @GetMapping("record/simulated/{recordId}")
     public AjaxResult getSimulatedDetail(@ApiParam("记录ID") @PathVariable("recordId") Long recordId)
     {
-        return AjaxResult.success();
+        return AjaxResult.success(examService.loadExaminee(recordId, false));
     }
 
     @ApiOperation("53 记录-测试卷")

+ 42 - 11
ie-admin/src/main/java/com/ruoyi/web/service/ExamService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.util.DateUtils;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.ExamType;
 import com.ruoyi.common.enums.UserRegStatus;
@@ -143,6 +144,9 @@ public class ExamService {
             answerSheet.setSubjectId(learnPaper.getSubjectId());
             answerSheet.setSubjectName(dzSubjectService.selectDzSubjectBySubjectId(learnPaper.getSubjectId()).getSubjectName());
         }
+        if(null != examinee.getStats()) {
+            answerSheet.setStats(JSONObject.parseObject(examinee.getStats()));
+        }
         return answerSheet;
     }
 
@@ -173,18 +177,28 @@ public class ExamService {
 
         List<LearnAnswer> answersList = Lists.newArrayList();
         Integer wrongCount = 0;
+        Integer totalScore = 0;
+        Integer score = 0;
         for(PaperVO.QuestionAnswer question : answerSheet.getQuestions()) {
             if(CollectionUtils.isNotEmpty(question.getSubQuestions())) {
                 for(PaperVO.QuestionAnswer sq : question.getSubQuestions()) {
                     LearnAnswer answer = buildAnswer(answerSheet, questionMap, sq, answersList);
-                    if(answerSheet.getIsDone() && !answer.getState().equals(1)) {
-                        wrongCount++;
+                    if(answerSheet.getIsDone()) {
+                        totalScore += sq.getScore();
+                        score += answer.getScore();
+                        if(!answer.getState().equals(1)) {
+                            wrongCount++;
+                        }
                     }
                 }
             } else {
                 LearnAnswer answer = buildAnswer(answerSheet, questionMap, question, answersList);
-                if(answerSheet.getIsDone() && !answer.getState().equals(1)) {
-                    wrongCount++;
+                if(answerSheet.getIsDone()) {
+                    totalScore += question.getScore();
+                    score += answer.getScore();
+                    if(!answer.getState().equals(1)) {
+                        wrongCount++;
+                    }
                 }
             }
         }
@@ -203,18 +217,30 @@ public class ExamService {
         if(answerSheet.getIsDone()) {
             upExaminee.setEndTime(new Date());
             upExaminee.setState(ExamineeStatus.Commit.getVal());
+            upExaminee.setScore(score);
+            upExaminee.setScoreRate(score * 100 / totalScore);
             upExaminee.setWrongCount(wrongCount);
+            learnExamineeMapper.updateLearnExaminee(upExaminee);
             if(PaperType.Simulated.getVal().equals(exitExaminee.getPaperType())) {
+                List<JSONObject> paperStatList = learnExamineeMapper.selectExamRankingStats(upExaminee.getScore(), Lists.newArrayList(exitExaminee.getPaperId()));
+                JSONObject o = paperStatList.get(0);
+                Integer totalCount = o.getInteger("totalCount");
+                Integer maxScore = o.getInteger("maxScore");
+                Integer avgScore = o.getInteger("avgScore");
+                Integer lowCount = o.getInteger("lowCount");
                 JSONObject stats = new JSONObject();
-                stats.put("score", 100);
-                stats.put("rate", 50);
-                stats.put("maxScore", 300);
-                stats.put("averageScore", 100);
-                stats.put("hitRate", 50);
+                stats.put("score", upExaminee.getScore());
+                stats.put("rate", upExaminee.getScoreRate());
+                stats.put("maxScore", maxScore);
+                stats.put("averageScore", avgScore);
+                stats.put("hitRate", lowCount * 100 / totalCount);
                 upExaminee.setStats(JSONObject.toJSONString(stats));
+                learnExamineeMapper.updateLearnExaminee(upExaminee);
             }
+        } else {
+            learnExamineeMapper.updateLearnExaminee(upExaminee);
         }
-        learnExamineeMapper.updateLearnExaminee(upExaminee);
+
         if(answerSheet.getIsDone()) {
             // 关闭试卷
             LearnPaper up = new LearnPaper();
@@ -307,6 +333,10 @@ public class ExamService {
         answer.setMark(null != question.getIsMark() && question.getIsMark());
         answer.setNotKnow(null != question.getIsNotKnow() && question.getIsNotKnow());
         answer.setState(question.calcState(stdAnswer, answerSheet.getIsDone()));
+        if (answerSheet.getIsDone()) {
+            answer.setScore(answer.getState() == 1 ? stdAnswer.getScore() : 0);
+            answer.setScoreRate(answer.getScore() * 100 / stdAnswer.getScore());
+        }
         return answer;
     }
 
@@ -355,6 +385,7 @@ public class ExamService {
         upUser.setEvalCounts(evalCountObj.toJSONString());
         sysUserService.updateUserProfile(upUser);
 
+        existPaperIdSet.clear(); // TODO 临时清除重复检查
         LearnPaper paper = getBestPaper(sysUser.getExamType(), plan, subjectId, existPaperIdSet);
         examinee.setPaperId(paper.getId());
         examinee.setState(ExamineeStatus.Sign.getVal());
@@ -483,7 +514,7 @@ public class ExamService {
         answerSheet.setBeginTime(examinee.getBeginTime());
         answerSheet.setDuration(examinee.getDuration());
         if(StringUtils.isNotBlank(paper.getPaperInfo())) {
-            answerSheet.setConditions(JSONObject.parseObject(paper.getPaperInfo(), AnswerSheet.PaperCond.class));
+            answerSheet.setPaperInfo(JSONObject.parseObject(paper.getPaperInfo(), AnswerSheet.PaperCond.class));
         }
         answerSheet.setScoringType("1");
         answerSheet.setMode(0L);

+ 27 - 1
ie-admin/src/main/java/com/ruoyi/web/service/StudentService.java

@@ -1,6 +1,8 @@
 package com.ruoyi.web.service;
 
 import cn.hutool.core.lang.Dict;
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.util.DateUtils;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.AjaxResult2;
 import com.ruoyi.common.core.domain.entity.SysUser;
@@ -8,9 +10,12 @@ import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.dz.domain.DzSubject;
 import com.ruoyi.dz.service.IDzSubjectService;
 import com.ruoyi.enums.ExamineeStatus;
+import com.ruoyi.enums.PaperType;
+import com.ruoyi.learn.domain.LearnExaminee;
 import com.ruoyi.learn.domain.LearnPaper;
 import com.ruoyi.learn.domain.LearnStudent;
 import com.ruoyi.learn.domain.LearnTestStudent;
+import com.ruoyi.learn.mapper.LearnExamineeMapper;
 import com.ruoyi.learn.mapper.LearnPaperMapper;
 import com.ruoyi.learn.mapper.LearnStudentMapper;
 import com.ruoyi.learn.mapper.LearnTestStudentMapper;
@@ -31,13 +36,15 @@ public class StudentService {
     private final ILearnStudentService learnStudentService;
     private final IDzSubjectService dzSubjectService;
     private final LearnTeacherService learnTeacherService;
+    private final LearnExamineeMapper learnExamineeMapper;
 
-    public StudentService(LearnPaperMapper learnPaperMapper, LearnTestStudentMapper learnTestStudentMapper, ILearnStudentService learnStudentService, IDzSubjectService dzSubjectService, LearnTeacherService learnTeacherService) {
+    public StudentService(LearnPaperMapper learnPaperMapper, LearnTestStudentMapper learnTestStudentMapper, ILearnStudentService learnStudentService, IDzSubjectService dzSubjectService, LearnTeacherService learnTeacherService, LearnExamineeMapper learnExamineeMapper) {
         this.learnPaperMapper = learnPaperMapper;
         this.learnTestStudentMapper = learnTestStudentMapper;
         this.learnStudentService = learnStudentService;
         this.dzSubjectService = dzSubjectService;
         this.learnTeacherService = learnTeacherService;
+        this.learnExamineeMapper = learnExamineeMapper;
     }
 
     public List<DzSubject> getSubjectList(boolean directed) {
@@ -76,4 +83,23 @@ public class StudentService {
     public List<LearnPaper> selectLearnPaperForStudent(Long studentId, Integer status) {
         return learnPaperMapper.selectLearnPaperForStudent(studentId, status);
     }
+
+    public List<JSONObject> getSimulateList(Long studentId) {
+        LearnExaminee eCond = new LearnExaminee();
+        eCond.setStudentId(studentId);
+        eCond.setPaperType(PaperType.Simulated.getVal());
+
+        List<JSONObject> list = learnExamineeMapper.selectLearnExamineeList(eCond).stream().map(t -> {
+            JSONObject info = JSONObject.parseObject(t.getPaperInfo());
+            DzSubject dzSubject = dzSubjectService.selectDzSubjectBySubjectId(Long.parseLong(t.getPaperKey()));
+            String name = info.getString("universityName") + "-" + info.getString("majorName");
+            return JSONObject.of("id", t.getExamineeId(), "state", t.getState()
+                    , "subjectId", dzSubject.getSubjectName()
+                    , "name", name
+                    , "date", DateUtils.format(null != t.getEndTime() ? t.getEndTime() : t.getBeginTime(), "yyyy-MM-dd HH:mm")
+                    , "score", t.getScore());
+        }).collect(Collectors.toList());
+
+        return list;
+    }
 }

+ 4 - 1
ie-system/src/main/java/com/ruoyi/learn/domain/AnswerSheet.java

@@ -1,5 +1,6 @@
 package com.ruoyi.learn.domain;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
@@ -44,7 +45,7 @@ public class AnswerSheet {
     private Boolean isDone;
 
     @ApiModelProperty("题定义, time, score, types")
-    PaperCond conditions;
+    PaperCond paperInfo;
 
     @ApiModelProperty("做题时长")
     private Long duration;
@@ -68,6 +69,8 @@ public class AnswerSheet {
 
     List<PaperVO.QuestionAnswer> questions;
 
+    JSONObject stats;
+
     @Data
     public static class PaperCond {
         Integer time; // 秒

+ 6 - 6
ie-system/src/main/java/com/ruoyi/learn/domain/LearnAnswer.java

@@ -65,11 +65,11 @@ public class LearnAnswer extends BaseEntity
 
     /** 评分 */
     @Excel(name = "评分")
-    private Long score;
+    private Integer score;
 
     /** 得分率 */
     @Excel(name = "得分率")
-    private Long scoreRate;
+    private Integer scoreRate;
 
     private Boolean isMark;
     private Boolean isNotKnow;
@@ -194,22 +194,22 @@ public class LearnAnswer extends BaseEntity
         return scoreLevel;
     }
 
-    public void setScore(Long score) 
+    public void setScore(Integer score)
     {
         this.score = score;
     }
 
-    public Long getScore() 
+    public Integer getScore()
     {
         return score;
     }
 
-    public void setScoreRate(Long scoreRate) 
+    public void setScoreRate(Integer scoreRate)
     {
         this.scoreRate = scoreRate;
     }
 
-    public Long getScoreRate() 
+    public Integer getScoreRate()
     {
         return scoreRate;
     }

+ 6 - 6
ie-system/src/main/java/com/ruoyi/learn/domain/LearnExaminee.java

@@ -61,11 +61,11 @@ public class LearnExaminee extends BaseEntity
 
     /** 分值 */
     @Excel(name = "分值")
-    private Long score;
+    private Integer score;
 
     /** 分率 */
     @Excel(name = "分率")
-    private Long scoreRate;
+    private Integer scoreRate;
 
     /** 名次 */
     @Excel(name = "名次")
@@ -216,22 +216,22 @@ public class LearnExaminee extends BaseEntity
         return scoreLevel;
     }
 
-    public void setScore(Long score) 
+    public void setScore(Integer score)
     {
         this.score = score;
     }
 
-    public Long getScore() 
+    public Integer getScore()
     {
         return score;
     }
 
-    public void setScoreRate(Long scoreRate) 
+    public void setScoreRate(Integer scoreRate)
     {
         this.scoreRate = scoreRate;
     }
 
-    public Long getScoreRate() 
+    public Integer getScoreRate()
     {
         return scoreRate;
     }

+ 3 - 3
ie-system/src/main/java/com/ruoyi/learn/domain/LearnQuestions.java

@@ -149,7 +149,7 @@ public class LearnQuestions extends BaseEntity
 
     /** 得分 */
     @Excel(name = "得分")
-    private BigDecimal score;
+    private Integer score;
 
     /** 选项 */
     @Excel(name = "选项")
@@ -540,12 +540,12 @@ public class LearnQuestions extends BaseEntity
         return md52;
     }
 
-    public void setScore(BigDecimal score)
+    public void setScore(Integer score)
     {
         this.score = score;
     }
 
-    public BigDecimal getScore()
+    public Integer getScore()
     {
         return score;
     }

+ 9 - 9
ie-system/src/main/java/com/ruoyi/learn/domain/LearnWrongBook.java

@@ -65,11 +65,11 @@ public class LearnWrongBook extends BaseEntity
 
     /** 总分 */
     @Excel(name = "总分")
-    private Long scoreTotal;
+    private Integer scoreTotal;
 
     /** 得分 */
     @Excel(name = "得分")
-    private Long score;
+    private Integer score;
 
     /** 评级 */
     @Excel(name = "评级")
@@ -77,7 +77,7 @@ public class LearnWrongBook extends BaseEntity
 
     /** 得分率 */
     @Excel(name = "得分率")
-    private Long scoreRate;
+    private Integer scoreRate;
 
     /** 错误次数 */
     @Excel(name = "错误次数")
@@ -228,22 +228,22 @@ public class LearnWrongBook extends BaseEntity
         return answer2;
     }
 
-    public void setScoreTotal(Long scoreTotal)
+    public void setScoreTotal(Integer scoreTotal)
     {
         this.scoreTotal = scoreTotal;
     }
 
-    public Long getScoreTotal()
+    public Integer getScoreTotal()
     {
         return scoreTotal;
     }
 
-    public void setScore(Long score)
+    public void setScore(Integer score)
     {
         this.score = score;
     }
 
-    public Long getScore()
+    public Integer getScore()
     {
         return score;
     }
@@ -258,12 +258,12 @@ public class LearnWrongBook extends BaseEntity
         return scoreLevel;
     }
 
-    public void setScoreRate(Long scoreRate)
+    public void setScoreRate(Integer scoreRate)
     {
         this.scoreRate = scoreRate;
     }
 
-    public Long getScoreRate()
+    public Integer getScoreRate()
     {
         return scoreRate;
     }

+ 2 - 0
ie-system/src/main/java/com/ruoyi/learn/domain/PaperVO.java

@@ -75,6 +75,8 @@ public class PaperVO {
 
         @ApiModelProperty("答题正确状态 0 默认 1正确 2错误 3不会 4 未答")
         Integer state;
+        @ApiModelProperty("试题标准分")
+        Integer score;
 
         List<QuestionAnswer> subQuestions;
 

+ 6 - 0
ie-system/src/main/java/com/ruoyi/learn/mapper/LearnExamineeMapper.java

@@ -1,7 +1,11 @@
 package com.ruoyi.learn.mapper;
 
+import java.util.Collection;
 import java.util.List;
+
+import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.learn.domain.LearnExaminee;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 答卷Mapper接口
@@ -11,6 +15,8 @@ import com.ruoyi.learn.domain.LearnExaminee;
  */
 public interface LearnExamineeMapper 
 {
+    public List<JSONObject> selectExamRankingStats(@Param("stuScore") Integer stuScore, @Param("paperIds") Collection<Long> paperIds);
+
     /**
      * 查询答卷
      * 

+ 8 - 1
ie-system/src/main/resources/mapper/learn/LearnExamineeMapper.xml

@@ -55,8 +55,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="subjectiveCount != null "> and subjective_count = #{subjectiveCount}</if>
             <if test="subjectiveTotal != null "> and subjective_total = #{subjectiveTotal}</if>
         </where>
+        order by examinee_id desc
     </select>
-    
+
+    <select id="selectExamRankingStats" parameterType="Map" resultType="com.alibaba.fastjson2.JSONObject">
+        SELECT e2.`paper_id`, COUNT(*) totalCount, AVG(e2.`score`) maxScore, AVG(e2.`score`) avgScore, COUNT(IF(e2.`score` &lt; #{stuScore}, 1, 0)) lowCount  FROM `learn_examinee` e2
+        WHERE e2.`paper_type` = 20 and e2.paper_id in <foreach item="id" collection="paperIds" open="(" separator="," close=")">#{id}</foreach>
+        GROUP BY e2.`paper_id`
+    </select>
+
     <select id="selectLearnExamineeByExamineeId" parameterType="Long" resultMap="LearnExamineeResult">
         <include refid="selectLearnExamineeVo"/>
         where examinee_id = #{examineeId}

+ 6 - 1
ie-system/src/main/resources/mapper/learn/LearnPaperMapper.xml

@@ -15,6 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="fenshu"    column="fenshu"    />
         <result property="paperSource"    column="paperSource"    />
         <result property="directKey"    column="direct_key"    />
+        <result property="paperInfo"    column="paper_info"    />
         <result property="tiid"    column="tiid"    />
         <result property="osspath"    column="osspath"    />
         <result property="filename"    column="filename"    />
@@ -25,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectLearnPaperVo">
-        select id, subjectId, paperName, year, paperType, number, fenshu, paperSource, direct_key, tiid, osspath, filename, relate_id, locations, examineeTypes, createTime from learn_paper
+        select id, subjectId, paperName, year, paperType, number, fenshu, paperSource, direct_key, paper_info, tiid, osspath, filename, relate_id, locations, examineeTypes, createTime from learn_paper
     </sql>
 
     <select id="selectLearnPaperList" parameterType="LearnPaper" resultMap="LearnPaperResult">
@@ -40,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fenshu != null "> and fenshu = #{fenshu}</if>
             <if test="paperSource != null "> and paperSource = #{paperSource}</if>
             <if test="directKey != null  and directKey != ''"> and direct_key = #{directKey}</if>
+            <if test="paperInfo != null  and paperInfo != ''"> and paper_info = #{paperInfo}</if>
             <if test="tiid != null  and tiid != ''"> and tiid = #{tiid}</if>
             <if test="osspath != null  and osspath != ''"> and osspath = #{osspath}</if>
             <if test="filename != null  and filename != ''"> and filename like concat('%', #{filename}, '%')</if>
@@ -76,6 +78,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fenshu != null">fenshu,</if>
             <if test="paperSource != null">paperSource,</if>
             <if test="directKey != null and directKey != ''">direct_key,</if>
+            <if test="paperInfo != null and paperInfo != ''">direct_key,</if>
             <if test="tiid != null">tiid,</if>
             <if test="osspath != null">osspath,</if>
             <if test="filename != null">filename,</if>
@@ -94,6 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fenshu != null">#{fenshu},</if>
             <if test="paperSource != null">#{paperSource},</if>
             <if test="directKey != null and directKey != ''">#{directKey},</if>
+            <if test="paperInfo != null and paperInfo != ''">#{paperInfo},</if>
             <if test="tiid != null">#{tiid},</if>
             <if test="osspath != null">#{osspath},</if>
             <if test="filename != null">#{filename},</if>
@@ -116,6 +120,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fenshu != null">fenshu = #{fenshu},</if>
             <if test="paperSource != null">paperSource = #{paperSource},</if>
             <if test="directKey != null and directKey != ''">direct_key = #{directKey},</if>
+            <if test="paperInfo != null and paperInfo != ''">paper_info = #{paperInfo},</if>
             <if test="tiid != null">tiid = #{tiid},</if>
             <if test="osspath != null">osspath = #{osspath},</if>
             <if test="filename != null">filename = #{filename},</if>