新增案例题相关接口

master
xiaoCJ 7 months ago
parent de371db22a
commit a45e5619ac

@ -4,9 +4,11 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sztzjy.money_management.annotation.AnonymousAccess;
import com.sztzjy.money_management.entity.CaseInfo;
import com.sztzjy.money_management.entity.Chapter;
import com.sztzjy.money_management.entity.ComCase;
import com.sztzjy.money_management.entity.ComCaseExample;
import com.sztzjy.money_management.mapper.CaseInfoMapper;
import com.sztzjy.money_management.mapper.ChapterMapper;
import com.sztzjy.money_management.mapper.ComCaseMapper;
import com.sztzjy.money_management.service.CaseService;
import com.sztzjy.money_management.util.ResultEntity;
@ -35,6 +37,8 @@ public class CaseController {
private CaseInfoMapper caseInfoMapper;
@Autowired
private ComCaseMapper comCaseMapper;
@Autowired
ChapterMapper chapterMapper;
@PostMapping("/insertCase")
@ApiOperation("新增案例老师和管理员新增根据caseinfo中的publish区分")
@ -108,4 +112,32 @@ public class CaseController {
PageInfo pageInfo = new PageInfo(caseInfoList);
return new ResultEntity<PageInfo<CaseInfo>>(pageInfo);
}
@PostMapping("/insertKnowledge")
@ApiOperation("知识点新增")
@AnonymousAccess
private ResultEntity<HttpStatus> insertKnowledge(@ApiParam("请求头可能装不下,放对象,传ID和knowledge")@RequestBody Chapter chapter) {
Chapter newChapter = chapterMapper.selectByPrimaryKey(chapter.getChapterId());
if (newChapter == null) {
return new ResultEntity<HttpStatus>(HttpStatus.INTERNAL_SERVER_ERROR, "服务器异常,请联系管理员!");
}
newChapter.setKnowledge(chapter.getKnowledge());
int i = chapterMapper.updateByPrimaryKeySelective(newChapter);
if (i <= 0) {
return new ResultEntity<HttpStatus>(HttpStatus.INTERNAL_SERVER_ERROR, "服务器异常,请联系管理员!");
}
return new ResultEntity<HttpStatus>(HttpStatus.OK, "新增成功!");
}
@PostMapping("/getKnowledge")
@ApiOperation("知识点展示")
@AnonymousAccess
private ResultEntity<String> getKnowledge(@RequestParam String chapterID) {
Chapter chapter = chapterMapper.selectByPrimaryKey(chapterID);
if (chapter == null) {
return null;
}
return new ResultEntity<>(chapter.getKnowledge());
}
}

@ -5,7 +5,10 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sztzjy.money_management.annotation.AnonymousAccess;
import com.sztzjy.money_management.entity.ObjectiveQuestionWithBLOBs;
import com.sztzjy.money_management.entity.dto.ObjectiveQuestionDto;
import com.sztzjy.money_management.entity.dto.TopicDto;
import com.sztzjy.money_management.mapper.ObjectiveQuestionMapper;
import com.sztzjy.money_management.service.ObjectiveQuestionService;
import com.sztzjy.money_management.util.ResultEntity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -14,8 +17,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.List;
/**
@ -29,6 +32,9 @@ import java.util.List;
public class TopicController {
@Autowired
private ObjectiveQuestionMapper objectiveQuestionMapper;
@Autowired
private ObjectiveQuestionService objectiveQuestionService;
@PostMapping("/insertSingleTopic")
@ApiOperation("新增单个客观题")
@ -68,6 +74,23 @@ public class TopicController {
return new ResultEntity<HttpStatus>(HttpStatus.OK, "新增成功!");
}
@AnonymousAccess
@ApiOperation("本地excel导入试题")
@PostMapping("importTopicByLocal")
private ResultEntity<HttpStatus> importTopicByLocal(@RequestParam MultipartFile file,
@ApiParam("学校ID/999999999") @RequestParam String source,
@RequestParam(required = false) String chapterID,
@RequestParam(required = false) String chapterName,
@ApiParam("普通题库/金融智能/银行从业") @RequestParam String outLine,
@RequestParam(required = false) String subClass) throws Exception {
if (file == null) {
return new ResultEntity<>(HttpStatus.BAD_REQUEST, "导入文件不能为空");
}
return objectiveQuestionService.insertObjectiveByExcel(file, source, chapterID, chapterName, outLine, subClass);
}
@PostMapping("/updateTopicById")
@ApiOperation("编辑客观题")
private ResultEntity<HttpStatus> updateTopicById(@RequestBody ObjectiveQuestionWithBLOBs objectiveQuestionWithBLOBs) {
@ -80,11 +103,11 @@ public class TopicController {
}
@PostMapping("/deleteObjectiveBYId")
@ApiOperation("客观题单个删除")
@PostMapping("/deleteObjectiveBYList")
@ApiOperation("客观题删除")
@AnonymousAccess
private ResultEntity<HttpStatus> deleteObjectiveBYId(@RequestParam String objectiveQuestionId) {
int i = objectiveQuestionMapper.deleteByPrimaryKey(objectiveQuestionId);
private ResultEntity<HttpStatus> deleteObjectiveBYList(@RequestBody List<String> objectiveQuestionId) {
int i = objectiveQuestionMapper.batchDelete(objectiveQuestionId);
if (i > 0) {
return new ResultEntity<HttpStatus>(HttpStatus.OK, "删除成功!");
}
@ -100,12 +123,11 @@ public class TopicController {
}
@PostMapping("/getObjectiveCountByChapterId")
@ApiOperation("根据章节查看题目类型数量")
@ApiOperation("根据章节查看题目类型数量/模拟认证题库通用")
@AnonymousAccess
private ResultEntity<List<HashMap<Integer,Integer>>> getObjectiveCountByChapterId(@ApiParam("普通题库/金融智能/银行从业") @RequestParam String outLine,
@ApiParam("理论知识/专业能力公共基础/个人理财/风险管理/公司信贷/个人贷款") @RequestParam(required = false) String subClass,
@RequestParam String chapterId) {
return new ResultEntity<>(objectiveQuestionMapper.getObjectiveCountByChapterId(outLine, subClass, chapterId));
private ResultEntity<List<TopicDto>> getObjectiveCountByChapterId(@ApiParam("普通题库/金融智能/银行从业") @RequestParam String outLine,
@RequestParam(required = false) String chapterId) {
return new ResultEntity<>(objectiveQuestionMapper.getObjectiveCountByChapterId(outLine, chapterId));
}
@ -123,4 +145,21 @@ public class TopicController {
PageInfo pageInfo = new PageInfo(list);
return new ResultEntity<PageInfo<ObjectiveQuestionWithBLOBs>>(pageInfo);
}
@PostMapping("/commitObjectiveAnswer")
@ApiOperation("学习测评/提交")
@AnonymousAccess
private void commitObjectiveAnswer(@RequestParam List<ObjectiveQuestionDto> dtoList,
@RequestParam String userId,
@RequestParam String chapterId) {
objectiveQuestionService.commitObjectiveAnswer(dtoList, userId, chapterId);
}
@PostMapping("/getObjectiveRecord")
@ApiOperation("学习测评/随机10条展示/回显")
@AnonymousAccess
private ResultEntity<List<ObjectiveQuestionDto>> getObjectiveRecord(@RequestParam String chapterId,@RequestParam String trainingId) {
List<ObjectiveQuestionDto> list =objectiveQuestionService.getObjectiveRecord(chapterId,trainingId);
return new ResultEntity<List<ObjectiveQuestionDto>>(list);
}
}

@ -0,0 +1,18 @@
package com.sztzjy.money_management.controller;
import com.sztzjy.money_management.mapper.ObjectiveQuestionMapper;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author xcj
* @Date 2024/8/13
*/
@RestController
@Api(tags = "实训相关接口")
@RequestMapping("api/training")
public class TrainingController {
}

@ -0,0 +1,13 @@
package com.sztzjy.money_management.entity.dto;
import com.sztzjy.money_management.entity.ObjectiveQuestionWithBLOBs;
import lombok.Data;
/**
* @Author xcj
* @Date 2024/8/13
*/
@Data
public class ObjectiveQuestionDto extends ObjectiveQuestionWithBLOBs {
private String userAnswer;
}

@ -0,0 +1,24 @@
package com.sztzjy.money_management.entity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author xcj
* @Date 2024/8/13
*/
@Data
public class TopicDto {
@ApiModelProperty("所属大纲(普通题库/金融智能/银行从业)")
private String outline;
@ApiModelProperty("大纲子类(理论知识/专业能力公共基础/个人理财/风险管理/公司信贷/个人贷款)")
private String subclass;
@ApiModelProperty("题目类型0单选1多选2判断")
private Integer type;
@ApiModelProperty("题型数量")
private String count;
}

@ -3,11 +3,11 @@ package com.sztzjy.money_management.mapper;
import com.sztzjy.money_management.entity.ObjectiveQuestion;
import com.sztzjy.money_management.entity.ObjectiveQuestionExample;
import com.sztzjy.money_management.entity.ObjectiveQuestionWithBLOBs;
import com.sztzjy.money_management.entity.dto.ObjectiveQuestionDto;
import com.sztzjy.money_management.entity.dto.TopicDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.HashMap;
import java.util.List;
@Mapper
@ -40,13 +40,18 @@ public interface ObjectiveQuestionMapper {
int updateByPrimaryKey(ObjectiveQuestion record);
List<HashMap<Integer, Integer>> getObjectiveCountByChapterId(@Param("outLine") String outLine,
@Param("subClass") String subClass,
@Param("chapterId") String chapterId);
List<TopicDto> getObjectiveCountByChapterId(@Param("outLine") String outLine,
@Param("chapterId") String chapterId);
List<ObjectiveQuestionWithBLOBs> getObjectiveByType(@Param("type") int type,
@Param("outLine") String outLine,
@Param("subClass") String subClass,
@Param("content") String content);
int batchDelete(@Param("list") List<String> objectiveQuestionId);
int insertBatch(@Param("list") List<ObjectiveQuestionWithBLOBs> objectiveQuestionList);
List<ObjectiveQuestionDto> getObjectiveCount10(@Param("chapterId") String chapterId);
}

@ -0,0 +1,27 @@
package com.sztzjy.money_management.service;
import com.sztzjy.money_management.entity.ObjectiveQuestionWithBLOBs;
import com.sztzjy.money_management.entity.dto.ObjectiveQuestionDto;
import com.sztzjy.money_management.util.ResultEntity;
import org.springframework.http.HttpStatus;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
* @Author xcj
* @Date 2024/8/13
*/
public interface ObjectiveQuestionService {
ResultEntity<HttpStatus> insertObjectiveByExcel(MultipartFile file,
String source,
String chapterID,
String chapterName,
String outLine,
String subClass) throws Exception;
void commitObjectiveAnswer(List<ObjectiveQuestionDto> dtoList, String userId, String chapterId);
List<ObjectiveQuestionDto> getObjectiveRecord(String chapterId,String trainingId);
}

@ -0,0 +1,210 @@
package com.sztzjy.money_management.service.impl;
import cn.hutool.core.util.IdUtil;
import com.sztzjy.money_management.entity.ObjectiveQuestionExample;
import com.sztzjy.money_management.entity.ObjectiveQuestionWithBLOBs;
import com.sztzjy.money_management.entity.StuTrainingExample;
import com.sztzjy.money_management.entity.StuTrainingWithBLOBs;
import com.sztzjy.money_management.entity.dto.ObjectiveQuestionDto;
import com.sztzjy.money_management.mapper.ObjectiveQuestionMapper;
import com.sztzjy.money_management.mapper.StuTrainingMapper;
import com.sztzjy.money_management.service.ObjectiveQuestionService;
import com.sztzjy.money_management.util.ResultEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
/**
* @Author xcj
* @Date 2024/8/13
*/
@Service
public class ObjectiveQuestionServiceImpl implements ObjectiveQuestionService {
@Autowired
private ObjectiveQuestionMapper objectiveQuestionMapper;
@Autowired
private StuTrainingMapper stuTrainingMapper;
@Override
public ResultEntity<HttpStatus> insertObjectiveByExcel(MultipartFile file, String source, String chapterID, String chapterName, String outLine, String subClass) throws Exception {
List<ObjectiveQuestionWithBLOBs> objectiveQuestionList = new ArrayList<>();
Workbook workbook = WorkbookFactory.create(file.getInputStream());
Sheet sheet = workbook.getSheetAt(0);
// 迭代每一行
Iterator<Row> iterator = sheet.iterator();
iterator.next();
while (iterator.hasNext()) {
Row row = iterator.next();
/*解析列下标从0开始*/
Cell cell0 = row.getCell(0);
Cell cell1 = row.getCell(1);
Cell cell2 = row.getCell(2);
Cell cell3 = row.getCell(3);
Cell cell4 = row.getCell(4);
Cell cell5 = row.getCell(5);
Cell cell6 = row.getCell(6);
Cell cell7 = row.getCell(7);
Cell cell8 = row.getCell(8);
Cell cell9 = row.getCell(9);
Cell cell10 = row.getCell(10);
//判断题的BCDE选项和解析可能为空
if (cell0 == null || cell1 == null || cell2 == null || cell6 == null || cell7 == null || cell9 == null) {
return new ResultEntity<>(HttpStatus.BAD_REQUEST, "必填项不能为空");
}
String content = this.getCellValue(cell0);//题干
String a = this.getCellValue(cell1); //选项A
String b = this.getCellValue(cell2);//选项B
String type = this.getCellValue(cell6);//题型
String answer = this.getCellValue(cell7);//答案
String score = this.getCellValue(cell9);//分值
String c = cell3 != null ? this.getCellValue(cell3) : null;
String d = cell4 != null ? this.getCellValue(cell4) : null;
String e = cell5 != null ? this.getCellValue(cell5) : null;
String analyze = cell8 != null ? this.getCellValue(cell8) : null;
ObjectiveQuestionWithBLOBs obj = new ObjectiveQuestionWithBLOBs();
String topicId = IdUtil.randomUUID();
obj.setObjectiveId(topicId);
obj.setContent(content);
obj.setType(Integer.valueOf(type));
obj.setSource(source);
obj.setQuestionA(a);
obj.setQuestionB(b);
obj.setQuestionC(c);
obj.setQuestionD(d);
obj.setQuestionE(e);
obj.setAnswer(answer);
obj.setAnalysis(analyze);
obj.setScore(BigDecimal.valueOf(Integer.parseInt(score)));
if (StringUtils.isNotBlank(chapterID)) {
obj.setChapterId(chapterID);
}
if (StringUtils.isNotBlank(chapterName)) {
obj.setChapterName(chapterName);
}
if (StringUtils.isNotBlank(subClass)) {
obj.setSubclass(subClass);
}
objectiveQuestionList.add(obj);
}
int result = objectiveQuestionMapper.insertBatch(objectiveQuestionList);
if (result > 0) {
return new ResultEntity<>(HttpStatus.OK, "批量导入成功!");
} else {
return new ResultEntity<>(HttpStatus.INTERNAL_SERVER_ERROR, "批量导入失败,请联系管理员!");
}
}
public String getCellValue(Cell cell) {
if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
Double d = cell.getNumericCellValue();
return String.valueOf(d.intValue());
}
return String.valueOf(cell.getStringCellValue());
}
@Override
public void commitObjectiveAnswer(List<ObjectiveQuestionDto> dtoList, String userId, String chapterId) {
StuTrainingExample stuTrainingExample = new StuTrainingExample();
stuTrainingExample.createCriteria().andUserIdEqualTo(userId).andChapterIdEqualTo(chapterId);
List<StuTrainingWithBLOBs> stuTrainingWithBLOBs = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample);
BigDecimal score = new BigDecimal(BigInteger.ZERO);
List<String> ids = new ArrayList<>();
List<String> answerList = new ArrayList<>();
int count = 0;
for (ObjectiveQuestionDto objectiveQuestionDto : dtoList) {
String dtoObjectiveId = objectiveQuestionDto.getObjectiveId();
ObjectiveQuestionWithBLOBs dataObjectiveQuestion = objectiveQuestionMapper.selectByPrimaryKey(dtoObjectiveId);
String rightAnswer = dataObjectiveQuestion.getAnswer();
String stuAnswer = objectiveQuestionDto.getUserAnswer();
if (rightAnswer.equals(stuAnswer)) {
score = score.add(dataObjectiveQuestion.getScore());
} else {
count += 1;
}
ids.add(dtoObjectiveId);
answerList.add(stuAnswer);
}
if (stuTrainingWithBLOBs != null && !stuTrainingWithBLOBs.isEmpty()) {
StuTrainingWithBLOBs dataTraining = stuTrainingWithBLOBs.get(0);
//两个参数都为空说明第一次提交,进行算分
if (StringUtils.isBlank(dataTraining.getLearningEvalIdList())
&& StringUtils.isBlank(dataTraining.getLearningEvalAnswer())) {
dataTraining.setLearningEvalAnswer(String.valueOf(answerList));
dataTraining.setLearningEvalIdList(String.valueOf(ids));
dataTraining.setExpTrainingScore(score);
// dataTraining.setLearningEvalCompleteStatus(count);
stuTrainingMapper.updateByPrimaryKeySelective(dataTraining);
}
}
}
@Override
public List<ObjectiveQuestionDto> getObjectiveRecord(String chapterId, String trainingId) {
StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainingMapper.selectByPrimaryKey(trainingId);
//沒提交过的展示十条随机
if (stuTrainingWithBLOBs == null
|| StringUtils.isBlank(stuTrainingWithBLOBs.getLearningEvalAnswer())
|| StringUtils.isBlank(stuTrainingWithBLOBs.getLearningEvalIdList())) {
return objectiveQuestionMapper.getObjectiveCount10(chapterId);
}
//提交过 回显答题数据
String learningEvalIdList = stuTrainingWithBLOBs.getLearningEvalIdList(); //学生作答题目ID
String learningEvalAnswer = stuTrainingWithBLOBs.getLearningEvalAnswer(); //学生提交答案
List<String> idList = Arrays.asList(learningEvalIdList.split(","));
List<String> stuAnswerList = Arrays.asList(learningEvalAnswer.split(","));
// 确保 idList 和 stuAnswerList 大小相同且顺序匹配
if (idList.size() != stuAnswerList.size()) {
throw new IllegalArgumentException("ID 和答案数量不匹配");
}
// 创建题目 ID 到答案的映射
Map<String, String> answerMap = new HashMap<>();
for (int i = 0; i < idList.size(); i++) {
answerMap.put(idList.get(i), stuAnswerList.get(i));
}
ObjectiveQuestionExample example = new ObjectiveQuestionExample();
example.createCriteria().andObjectiveIdIn(idList);
List<ObjectiveQuestionWithBLOBs> list = objectiveQuestionMapper.selectByExampleWithBLOBs(example);
List<ObjectiveQuestionDto> resultList = new ArrayList<>();
for (ObjectiveQuestionWithBLOBs objectiveQuestionWithBLOBs : list) {
ObjectiveQuestionDto objectiveQuestionDto = new ObjectiveQuestionDto();
BeanUtils.copyProperties(objectiveQuestionWithBLOBs, objectiveQuestionDto);
// 获取对应题目的答案并设置
String userAnswer = answerMap.get(objectiveQuestionWithBLOBs.getObjectiveId());
objectiveQuestionDto.setUserAnswer(userAnswer);
list.add(objectiveQuestionDto);
}
return resultList;
}
}

@ -454,6 +454,14 @@
where objective_id = #{objectiveId,jdbcType=VARCHAR}
</update>
<resultMap id="dtoMap" type="com.sztzjy.money_management.entity.dto.TopicDto">
<result column="count" jdbcType="VARCHAR" property="count"/>
<result column="type" jdbcType="INTEGER" property="type"/>
<result column="outline" jdbcType="VARCHAR" property="outline"/>
<result column="subclass" jdbcType="VARCHAR" property="subclass"/>
</resultMap>
<!--下面为自己新增-->
<select id="getObjectiveByType" resultMap="ResultMapWithBLOBs">
select * from objective_question
@ -473,8 +481,11 @@
</where>
</select>
<select id="getObjectiveCountByChapterId" resultType="java.util.HashMap">
SELECT type, count(*) AS count
<select id="getObjectiveCountByChapterId" resultMap="dtoMap">
SELECT type,
MAX(outline) AS outline,
MAX(subclass) AS subclass,
count(*) AS count
FROM objective_question
<where>
<if test="chapterId !=null">
@ -483,11 +494,51 @@
<if test="outLine !=null and outLine !=''">
and outline = #{outLine}
</if>
<if test="subClass !=null and subClass !=''">
and subClass = #{subClass}
</if>
</where>
GROUP BY type
</select>
<delete id="batchDelete" parameterType="java.util.List">
delete from objective_question
where objective_id in
<foreach collection="list" separator="," open="(" close=")" item="id">
#{id}
</foreach>
</delete>
<insert id="insertBatch" parameterType="java.util.List">
insert into objective_question (objective_id, chapter_id, chapter_name,
source, type, score,
question_a, question_b, question_c,
question_d, question_e, answer,
outline, subclass, content,
analysis) VALUES
<foreach collection="objectiveQuestionList" item="item" index="index" separator=",">
(
(#{objectiveId}, #{chapterId}, #{chapterName},
#{source}, #{type}, #{score},
#{questionA}, #{questionB}, #{questionC},
#{questionD}, #{questionE}, #{answer},
#{outline}, #{subclass}, #{content},
#{analysis})
)
</foreach>
</insert>
<select id="getObjectiveCount10" resultMap="ResultMapWithBLOBs">
select objective_id, chapter_id, chapter_name, source, type, score, question_a, question_b,
question_c, question_d, question_e, outline, subclass,content
from objective_question
<where>
<if test="chapterId !=null">
chapter_id = #{chapterId}
</if>
and outline = '普通题库'
and source = '999999999'
</where>
ORDER BY RAND()
LIMIT 10;
</select>
</mapper>
Loading…
Cancel
Save