src/main/java/com/ycl/jxkg/controller/admin/ClassesController.java
@@ -65,7 +65,7 @@ return classesService.page(query); } @GetMapping("/dissolution/{id}") @PutMapping("/dissolution/{id}") @ApiOperation(value = "解散", notes = "解散") @PreAuthorize("hasAuthority('classes:dissolution')") public Result dissolution(@PathVariable("id") Integer id) { src/main/java/com/ycl/jxkg/controller/admin/ClassesNotifyController.java
New file @@ -0,0 +1,83 @@ package com.ycl.jxkg.controller.admin; import com.ycl.jxkg.group.Update; import com.ycl.jxkg.group.Add; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import lombok.RequiredArgsConstructor; import java.util.List; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import com.ycl.jxkg.service.ClassesNotifyService; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.form.ClassesNotifyForm; import com.ycl.jxkg.domain.query.ClassesNotifyQuery; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; /** * 班级通知 前端控制器 * * @author xp * @since 2024-06-05 */ @Validated @RequiredArgsConstructor @Api(value = "班级通知", tags = "班级通知管理") @RestController @RequestMapping("/api/classes-notify") public class ClassesNotifyController { private final ClassesNotifyService classesNotifyService; @PostMapping @ApiOperation(value = "添加", notes = "添加") @PreAuthorize("hasAuthority('classesNotify:add')") public Result add(@RequestBody @Validated(Add.class) ClassesNotifyForm form) { return classesNotifyService.add(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") @PreAuthorize("hasAuthority('classesNotify:edit')") public Result update(@RequestBody @Validated(Update.class) ClassesNotifyForm form) { return classesNotifyService.update(form); } @DeleteMapping("/{id}") @ApiOperation(value = "ID删除", notes = "ID删除") @PreAuthorize("hasAuthority('classesNotify:del')") public Result removeById(@PathVariable("id") String id) { return classesNotifyService.removeById(id); } @DeleteMapping("/batch") @ApiOperation(value = "批量删除", notes = "批量删除") @PreAuthorize("hasAuthority('classesNotify:del:batch')") public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) { return classesNotifyService.remove(ids); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") @PreAuthorize("hasAuthority('classesNotify:page')") public Result page(ClassesNotifyQuery query) { return classesNotifyService.page(query); } @GetMapping("/{id}") @ApiOperation(value = "详情", notes = "详情") @PreAuthorize("hasAuthority('classesNotify:detail')") public Result detail(@PathVariable("id") Integer id) { return classesNotifyService.detail(id); } @GetMapping("/list") @PreAuthorize("hasAuthority('classesNotify:list')") @ApiOperation(value = "列表", notes = "列表") public Result list() { return classesNotifyService.all(); } } src/main/java/com/ycl/jxkg/controller/admin/QuestionController.java
@@ -4,15 +4,16 @@ import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.base.SystemCode; import com.ycl.jxkg.domain.entity.Question; import com.ycl.jxkg.domain.enums.QuestionTypeEnum; import com.ycl.jxkg.domain.question.QuestionObject; import com.ycl.jxkg.domain.vo.admin.question.QuestionEditRequestVO; import com.ycl.jxkg.domain.vo.admin.question.QuestionPageRequestVO; import com.ycl.jxkg.domain.vo.admin.question.QuestionResponseVO; import com.ycl.jxkg.service.QuestionService; import com.ycl.jxkg.service.TextContentService; import com.ycl.jxkg.utils.*; import com.ycl.jxkg.utils.ErrorUtil; import com.ycl.jxkg.utils.HtmlUtil; import com.ycl.jxkg.utils.JsonUtil; import com.ycl.jxkg.utils.PageInfoHelper; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -26,7 +27,6 @@ public class QuestionController extends BaseApiController { private final QuestionService questionService; private final TextContentService textContentService; @RequestMapping(value = "/page", method = RequestMethod.POST) public Result<PageInfo<QuestionResponseVO>> pageList(@RequestBody QuestionPageRequestVO model) { @@ -34,7 +34,6 @@ PageInfo<QuestionResponseVO> page = PageInfoHelper.copyMap(pageInfo, q -> { QuestionResponseVO vo = new QuestionResponseVO(); BeanUtils.copyProperties(q, vo); vo.setScore(ExamUtil.scoreToVM(Integer.valueOf(q.getScore()))); QuestionObject questionObject = JsonUtil.toJsonObject(q.getContent(), QuestionObject.class); String clearHtml = HtmlUtil.clear(questionObject.getTitleContent()); vo.setShortTitle(clearHtml); @@ -68,8 +67,7 @@ @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST) public Result delete(@PathVariable Integer id) { Question question = questionService.getById(id); questionService.updateById(question); questionService.removeById(id); return Result.ok(); } @@ -82,15 +80,13 @@ return new Result<>(SystemCode.ParameterValidError.getCode(), errorMsg); } } if (qType == QuestionTypeEnum.GapFilling.getCode()) { Integer fillSumScore = model.getItems().stream().mapToInt(d -> ExamUtil.scoreFromVM(d.getScore())).sum(); Integer questionScore = ExamUtil.scoreFromVM(model.getScore()); if (!fillSumScore.equals(questionScore)) { String errorMsg = ErrorUtil.parameterErrorFormat("score", "空分数和与题目总分不相等"); return new Result<>(SystemCode.ParameterValidError.getCode(), errorMsg); } } return Result.ok(); } @PostMapping(value = "/status") public Result<String> status(@RequestBody QuestionResponseVO question) { questionService.updateStatus(question); return Result.ok("操作成功"); } } src/main/java/com/ycl/jxkg/domain/entity/ClassesNotify.java
New file @@ -0,0 +1,34 @@ package com.ycl.jxkg.domain.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.ycl.jxkg.domain.base.AbsEntity; import lombok.Data; /** * 班级通知 * * @author xp * @since 2024-06-05 */ @Data @TableName("t_classes_notify") public class ClassesNotify extends AbsEntity { private static final long serialVersionUID = 1L; @TableField("classes_id") /** 班级 */ private Integer classesId; @TableField("teacher_id") /** 发出通知者 */ private Integer teacherId; @TableField("notify_content") /** 通知内容 */ private String notifyContent; } src/main/java/com/ycl/jxkg/domain/entity/Question.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.ycl.jxkg.domain.base.AbsEntity; import com.ycl.jxkg.domain.enums.QuestionTypeEnum; import com.ycl.jxkg.domain.enums.general.StatusEnum; import com.ycl.jxkg.utils.ExamUtil; import lombok.Data; @@ -28,18 +29,6 @@ */ @TableField("subject_id") private Integer subjectId; /** * 题目总分(千分制) */ @TableField("score") private Integer score; /** * 级别 */ @TableField("grade_level") private Integer gradeLevel; /** * 题目难度 @@ -66,10 +55,10 @@ private Integer createUser; /** * 1.正常 * 1.启用、2.禁用 */ @TableField("status") private Integer status; private StatusEnum status; /** * 创建时间 src/main/java/com/ycl/jxkg/domain/entity/Subject.java
@@ -1,11 +1,12 @@ package com.ycl.jxkg.domain.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.ycl.jxkg.domain.base.AbsEntity; import lombok.Data; import java.io.Serializable; import java.util.Date; @Data @TableName("t_subject") @@ -18,22 +19,18 @@ private String name; /** * 年级 (1-12) 小学 初中 */ @TableField("level") private Integer level; /** * 一年级、二年级等 */ @TableField("level_name") private String levelName; /** * 排序 */ @TableField("item_order") private Integer itemOrder; @TableField("create_user") private Integer createUser; @TableField(value = "create_time", fill = FieldFill.INSERT) private Date createTime; @TableField(value = "status") private Integer status; } src/main/java/com/ycl/jxkg/domain/enums/QuestionStatusEnum.java
File was deleted src/main/java/com/ycl/jxkg/domain/enums/general/StatusEnum.java
New file @@ -0,0 +1,27 @@ package com.ycl.jxkg.domain.enums.general; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.Getter; /** * @author gonghl * @since 2024/6/5 上午 10:54 */ @Getter public enum StatusEnum { ENABLE("1", "启用"), DISABLE("2", "禁用"), ; @EnumValue final String value; @JsonValue final String desc; StatusEnum(String value, String desc) { this.value = value; this.desc = desc; } } src/main/java/com/ycl/jxkg/domain/form/ClassesNotifyForm.java
New file @@ -0,0 +1,50 @@ package com.ycl.jxkg.domain.form; import com.ycl.jxkg.group.Update; import com.ycl.jxkg.group.Add; import com.ycl.jxkg.domain.base.AbsForm; import com.ycl.jxkg.domain.entity.ClassesNotify; import org.springframework.beans.BeanUtils; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import org.springframework.lang.NonNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * 班级通知表单 * * @author xp * @since 2024-06-05 */ @Data @ApiModel(value = "ClassesNotify表单", description = "班级通知表单") public class ClassesNotifyForm extends AbsForm { @NotNull(message = "班级不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("班级") private Integer classesId; @NotNull(message = "发出通知者不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("发出通知者") private Integer teacherId; @NotBlank(message = "通知内容不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("通知内容") private String notifyContent; @NotNull(message = "不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("") private Date createTime; public static ClassesNotify getEntityByForm(@NonNull ClassesNotifyForm form, ClassesNotify entity) { if(entity == null) { entity = new ClassesNotify(); } BeanUtils.copyProperties(form, entity); return entity; } } src/main/java/com/ycl/jxkg/domain/query/ClassesNotifyQuery.java
New file @@ -0,0 +1,22 @@ package com.ycl.jxkg.domain.query; import com.ycl.jxkg.domain.base.AbsQuery; import java.util.List; import org.springframework.lang.NonNull; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * 班级通知查询 * * @author xp * @since 2024-06-05 */ @Data @ApiModel(value = "ClassesNotify查询", description = "班级通知查询") public class ClassesNotifyQuery extends AbsQuery { } src/main/java/com/ycl/jxkg/domain/question/QuestionItemObject.java
@@ -9,8 +9,6 @@ private String content; private Integer score; private String itemUuid; } src/main/java/com/ycl/jxkg/domain/vo/ClassesNotifyVO.java
New file @@ -0,0 +1,42 @@ package com.ycl.jxkg.domain.vo; import com.ycl.jxkg.domain.base.AbsVo; import com.ycl.jxkg.domain.entity.ClassesNotify; import java.util.List; import org.springframework.lang.NonNull; import org.springframework.beans.BeanUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * 班级通知展示 * * @author xp * @since 2024-06-05 */ @Data public class ClassesNotifyVO extends AbsVo { /** 班级 */ private Integer classesId; /** 发出通知者 */ private Integer teacherId; /** 通知内容 */ private String notifyContent; /** */ private Date createTime; public static ClassesNotifyVO getVoByEntity(@NonNull ClassesNotify entity, ClassesNotifyVO vo) { if(vo == null) { vo = new ClassesNotifyVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } src/main/java/com/ycl/jxkg/domain/vo/admin/education/SubjectEditRequestVO.java
@@ -2,7 +2,6 @@ import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -15,9 +14,6 @@ private String name; @NotNull private Integer level; @NotBlank private String levelName; private Integer itemOrder; } src/main/java/com/ycl/jxkg/domain/vo/admin/education/SubjectPageRequestVO.java
@@ -7,8 +7,8 @@ @Data public class SubjectPageRequestVO extends BasePage { private Integer id; private Integer name; private Integer level; private Integer status; } src/main/java/com/ycl/jxkg/domain/vo/admin/education/SubjectResponseVO.java
@@ -1,5 +1,6 @@ package com.ycl.jxkg.domain.vo.admin.education; import com.ycl.jxkg.domain.enums.general.StatusEnum; import lombok.Data; @@ -10,8 +11,11 @@ private String name; private Integer level; private Integer itemOrder; private String levelName; private StatusEnum status; private String createTime; } src/main/java/com/ycl/jxkg/domain/vo/admin/question/QuestionEditItemVO.java
@@ -14,8 +14,6 @@ @NotBlank private String content; private String score; private String itemUuid; src/main/java/com/ycl/jxkg/domain/vo/admin/question/QuestionEditRequestVO.java
@@ -34,9 +34,6 @@ private String correct; @NotBlank private String score; @Range(min = 1, max = 5, message = "请选择题目难度") private Integer difficult; src/main/java/com/ycl/jxkg/domain/vo/admin/question/QuestionPageRequestVO.java
@@ -3,17 +3,19 @@ import com.ycl.jxkg.base.BasePage; import lombok.Data; import java.util.List; @Data public class QuestionPageRequestVO extends BasePage { private Integer id; private Integer level; private Integer status; private Integer subjectId; private List<Integer> subjectId; private Integer questionType; private List<Integer> questionType; private String content; src/main/java/com/ycl/jxkg/domain/vo/admin/question/QuestionResponseVO.java
@@ -1,5 +1,6 @@ package com.ycl.jxkg.domain.vo.admin.question; import com.ycl.jxkg.domain.enums.general.StatusEnum; import lombok.Data; @@ -24,9 +25,7 @@ private String createUserName; private String score; private Integer status; private StatusEnum status; private String correct; src/main/java/com/ycl/jxkg/domain/vo/student/education/SubjectEditRequestVO.java
@@ -14,9 +14,6 @@ private String name; @NotNull private Integer level; @NotBlank private String levelName; private Integer itemOrder; } src/main/java/com/ycl/jxkg/mapper/ClassesNotifyMapper.java
New file @@ -0,0 +1,34 @@ package com.ycl.jxkg.mapper; import com.ycl.jxkg.domain.entity.ClassesNotify; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.jxkg.domain.query.ClassesNotifyQuery; import com.ycl.jxkg.domain.vo.ClassesNotifyVO; import com.ycl.jxkg.domain.form.ClassesNotifyForm; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 班级通知 Mapper 接口 * * @author xp * @since 2024-06-05 */ @Mapper public interface ClassesNotifyMapper extends BaseMapper<ClassesNotify> { /** * id查找班级通知 * @param id * @return */ ClassesNotifyVO getById(Integer id); /** * 分页 */ IPage getPage(IPage page, @Param("query") ClassesNotifyQuery query); } src/main/java/com/ycl/jxkg/service/ClassesNotifyService.java
New file @@ -0,0 +1,65 @@ package com.ycl.jxkg.service; import com.ycl.jxkg.domain.entity.ClassesNotify; import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.form.ClassesNotifyForm; import com.ycl.jxkg.domain.query.ClassesNotifyQuery; import java.util.List; /** * 班级通知 服务类 * * @author xp * @since 2024-06-05 */ public interface ClassesNotifyService extends IService<ClassesNotify> { /** * 添加 * @param form * @return */ Result add(ClassesNotifyForm form); /** * 修改 * @param form * @return */ Result update(ClassesNotifyForm form); /** * 批量删除 * @param ids * @return */ Result remove(List<String> ids); /** * id删除 * @param id * @return */ Result removeById(String id); /** * 分页查询 * @param query * @return */ Result page(ClassesNotifyQuery query); /** * 根据id查找 * @param id * @return */ Result detail(Integer id); /** * 列表 * @return */ Result all(); } src/main/java/com/ycl/jxkg/service/QuestionService.java
@@ -24,4 +24,11 @@ Integer selectAllCount(); List<Integer> selectMothCount(); /** * 更新题目状态 * @param question 题目 * @return 更新结果 */ Boolean updateStatus(QuestionResponseVO question); } src/main/java/com/ycl/jxkg/service/SubjectService.java
@@ -13,7 +13,5 @@ List<Subject> allSubject(); Integer levelBySubjectId(Integer id); PageInfo<Subject> page(SubjectPageRequestVO requestVM); } src/main/java/com/ycl/jxkg/service/impl/ClassesNotifyServiceImpl.java
New file @@ -0,0 +1,119 @@ package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.jxkg.domain.entity.ClassesNotify; import com.ycl.jxkg.mapper.ClassesNotifyMapper; import com.ycl.jxkg.service.ClassesNotifyService; import com.ycl.jxkg.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.jxkg.domain.form.ClassesNotifyForm; import com.ycl.jxkg.domain.vo.ClassesNotifyVO; import com.ycl.jxkg.domain.query.ClassesNotifyQuery; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import com.ycl.jxkg.utils.PageUtil; import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; import java.util.List; import java.util.stream.Collectors; /** * 班级通知 服务实现类 * * @author xp * @since 2024-06-05 */ @Service @RequiredArgsConstructor public class ClassesNotifyServiceImpl extends ServiceImpl<ClassesNotifyMapper, ClassesNotify> implements ClassesNotifyService { private final ClassesNotifyMapper classesNotifyMapper; /** * 添加 * @param form * @return */ @Override public Result add(ClassesNotifyForm form) { ClassesNotify entity = ClassesNotifyForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(ClassesNotifyForm form) { ClassesNotify entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(ClassesNotifyQuery query) { IPage<ClassesNotifyVO> page = PageUtil.getPage(query, ClassesNotifyVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(Integer id) { ClassesNotifyVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List<ClassesNotify> entities = baseMapper.selectList(null); List<ClassesNotifyVO> vos = entities.stream() .map(entity -> ClassesNotifyVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } } src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java
@@ -188,7 +188,7 @@ ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = new ExamPaperQuestionCustomerAnswer(); examPaperQuestionCustomerAnswer.setQuestionId(question.getId()); examPaperQuestionCustomerAnswer.setExamPaperId(examPaper.getId()); examPaperQuestionCustomerAnswer.setQuestionScore(question.getScore()); examPaperQuestionCustomerAnswer.setQuestionScore(null); examPaperQuestionCustomerAnswer.setSubjectId(examPaper.getSubjectId()); examPaperQuestionCustomerAnswer.setItemOrder(itemOrder); examPaperQuestionCustomerAnswer.setCreateTime(now); @@ -217,13 +217,13 @@ case TrueFalse: examPaperQuestionCustomerAnswer.setAnswer(customerQuestionAnswer.getContent()); examPaperQuestionCustomerAnswer.setDoRight(question.getCorrect().equals(customerQuestionAnswer.getContent())); examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? question.getScore() : 0); examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? null : 0); break; case MultipleChoice: String customerAnswer = ExamUtil.contentToString(customerQuestionAnswer.getContentArray()); examPaperQuestionCustomerAnswer.setAnswer(customerAnswer); examPaperQuestionCustomerAnswer.setDoRight(customerAnswer.equals(question.getCorrect())); examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? question.getScore() : 0); examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? null : 0); break; case GapFilling: String correctAnswer = JsonUtil.toJsonStr(customerQuestionAnswer.getContentArray()); src/main/java/com/ycl/jxkg/service/impl/QuestionServiceImpl.java
@@ -1,26 +1,24 @@ package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.jxkg.domain.other.KeyValue; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycl.jxkg.domain.entity.Question; import com.ycl.jxkg.domain.entity.TextContent; import com.ycl.jxkg.domain.enums.QuestionStatusEnum; import com.ycl.jxkg.domain.enums.QuestionTypeEnum; import com.ycl.jxkg.domain.enums.general.StatusEnum; import com.ycl.jxkg.domain.other.KeyValue; import com.ycl.jxkg.domain.question.QuestionItemObject; import com.ycl.jxkg.domain.question.QuestionObject; import com.ycl.jxkg.domain.vo.admin.question.QuestionResponseVO; import com.ycl.jxkg.mapper.QuestionMapper; import com.ycl.jxkg.service.QuestionService; import com.ycl.jxkg.service.SubjectService; import com.ycl.jxkg.service.TextContentService; import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.JsonUtil; import com.ycl.jxkg.utils.ExamUtil; import com.ycl.jxkg.domain.vo.admin.question.QuestionEditItemVO; import com.ycl.jxkg.domain.vo.admin.question.QuestionEditRequestVO; import com.ycl.jxkg.domain.vo.admin.question.QuestionPageRequestVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycl.jxkg.domain.vo.admin.question.QuestionResponseVO; import com.ycl.jxkg.mapper.QuestionMapper; import com.ycl.jxkg.service.QuestionService; import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.ExamUtil; import com.ycl.jxkg.utils.JsonUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -35,13 +33,11 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> implements QuestionService { private final QuestionMapper questionMapper; private final TextContentService textContentService; private final SubjectService subjectService; @Override public PageInfo<QuestionResponseVO> page(QuestionPageRequestVO requestVM) { return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "create_time desc").doSelectPageInfo(() -> questionMapper.page(requestVM) ); } @@ -51,19 +47,16 @@ @Transactional public Question insertFullQuestion(QuestionEditRequestVO model, Integer userId) { Date now = new Date(); Integer gradeLevel = subjectService.levelBySubjectId(model.getSubjectId()); //题干、解析、选项等 插入 String questionObject = setQuestionInfoFromVM(model); Question question = new Question(); question.setSubjectId(model.getSubjectId()); question.setGradeLevel(gradeLevel); question.setCreateTime(now); question.setQuestionType(model.getQuestionType()); question.setStatus(QuestionStatusEnum.OK.getCode()); question.setStatus(StatusEnum.ENABLE); question.setCorrectFromVM(model.getCorrect(), model.getCorrectArray()); question.setScore(ExamUtil.scoreFromVM(model.getScore())); question.setDifficult(model.getDifficult()); question.setContent(questionObject); question.setCreateUser(userId); @@ -74,11 +67,8 @@ @Override @Transactional public Question updateFullQuestion(QuestionEditRequestVO model) { Integer gradeLevel = subjectService.levelBySubjectId(model.getSubjectId()); Question question = questionMapper.selectById(model.getId()); question.setSubjectId(model.getSubjectId()); question.setGradeLevel(gradeLevel); question.setScore(ExamUtil.scoreFromVM(model.getScore())); question.setDifficult(model.getDifficult()); question.setCorrectFromVM(model.getCorrect(), model.getCorrectArray()); //题干、解析、选项等 更新 @@ -123,7 +113,6 @@ default: break; } questionEditRequestVO.setScore(ExamUtil.scoreToVM(question.getScore())); questionEditRequestVO.setAnalyze(questionObject.getAnalyze()); @@ -131,9 +120,6 @@ List<QuestionEditItemVO> editItems = questionObject.getQuestionItemObjects().stream().map(o -> { QuestionEditItemVO questionEditItemVO = new QuestionEditItemVO(); BeanUtils.copyProperties(o, questionEditItemVO); if (o.getScore() != null) { questionEditItemVO.setScore(ExamUtil.scoreToVM(o.getScore())); } return questionEditItemVO; }).collect(Collectors.toList()); questionEditRequestVO.setItems(editItems); @@ -147,7 +133,6 @@ item.setPrefix(i.getPrefix()); item.setContent(i.getContent()); item.setItemUuid(i.getItemUuid()); item.setScore(ExamUtil.scoreFromVM(i.getScore())); return item; } ).collect(Collectors.toList()); @@ -176,5 +161,12 @@ }).collect(Collectors.toList()); } @Override public Boolean updateStatus(QuestionResponseVO question) { return new LambdaUpdateChainWrapper<>(questionMapper) .set(Question::getStatus, question.getStatus()) .eq(Question::getId, question.getId()) .update(); } } src/main/java/com/ycl/jxkg/service/impl/SubjectServiceImpl.java
@@ -29,13 +29,8 @@ } @Override public Integer levelBySubjectId(Integer id) { return baseMapper.selectById(id).getLevel(); } @Override public PageInfo<Subject> page(SubjectPageRequestVO requestVM) { return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "item_order").doSelectPageInfo(() -> subjectMapper.page(requestVM) ); } src/main/resources/mapper/ClassesNotifyMapper.xml
New file @@ -0,0 +1,46 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.jxkg.mapper.ClassesNotifyMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.vo.ClassesNotifyVO"> <result column="classes_id" property="classesId" /> <result column="teacher_id" property="teacherId" /> <result column="notify_content" property="notifyContent" /> <result column="create_time" property="createTime" /> </resultMap> <select id="getById" resultMap="BaseResultMap"> SELECT TCN.classes_id, TCN.teacher_id, TCN.notify_content, TCN.create_time, TCN.id FROM t_classes_notify TCN WHERE TCN.id = #{id} AND TCN.deleted = 0 </select> <select id="getPage" resultMap="BaseResultMap"> SELECT TCN.classes_id, TCN.teacher_id, TCN.notify_content, TCN.create_time, TCN.id FROM t_classes_notify TCN WHERE TCN.deleted = 0 </select> </mapper> src/main/resources/mapper/QuestionMapper.xml
@@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.jxkg.mapper.QuestionMapper"> <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.Question"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="question_type" jdbcType="INTEGER" property="questionType"/> <result column="subject_id" jdbcType="INTEGER" property="subjectId"/> <result column="score" jdbcType="INTEGER" property="score"/> <result column="grade_level" jdbcType="INTEGER" property="gradeLevel"/> <result column="difficult" jdbcType="INTEGER" property="difficult"/> <result column="correct" jdbcType="VARCHAR" property="correct"/> <result column="content" jdbcType="VARCHAR" property="content"/> @@ -16,11 +15,8 @@ <result column="deleted" jdbcType="BIT" property="deleted"/> </resultMap> <sql id="Base_Column_List"> id , question_type, subject_id, score, grade_level, difficult, correct, content, create_user, status, create_time, deleted id, question_type, subject_id, difficult, correct, content, create_user, status, create_time, deleted </sql> <select id="page" resultType="com.ycl.jxkg.domain.vo.admin.question.QuestionResponseVO" parameterType="com.ycl.jxkg.domain.vo.admin.question.QuestionPageRequestVO"> SELECT @@ -36,16 +32,16 @@ <if test="id != null "> and tq.id= #{id} </if> <if test="level != null "> and tq.grade_level= #{level} <if test="status != null"> and tq.status = #{status} </if> <if test="subjectId != null "> and tq.subject_id= #{subjectId} <if test="subjectId != null and subjectId.size() > 0"> and tq.subject_id in <foreach collection="subjectId" item="item" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="questionType != null "> and tq.question_type= #{questionType} <if test="questionType != null and questionType.size() > 0"> and tq.question_type in <foreach collection="questionType" item="item" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="content != null"> <if test="content != null and content != ''"> and instr(tq.content, #{content}) </if> </where> src/main/resources/mapper/SubjectMapper.xml
@@ -4,14 +4,14 @@ <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.Subject"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="name" jdbcType="VARCHAR" property="name"/> <result column="level" jdbcType="INTEGER" property="level"/> <result column="level_name" jdbcType="VARCHAR" property="levelName"/> <result column="item_order" jdbcType="INTEGER" property="itemOrder"/> <result column="status" jdbcType="INTEGER" property="status"/> <result column="create_user" jdbcType="INTEGER" property="createUser"/> <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> <result column="deleted" jdbcType="BIT" property="deleted"/> </resultMap> <sql id="Base_Column_List"> id , name, level, level_name, item_order, deleted id, name, item_order, deleted, status, create_user, create_time </sql> @@ -35,11 +35,11 @@ FROM t_subject <where> and deleted=0 <if test="id != null "> and id= #{id} <if test="status != null"> and status = #{status} </if> <if test="level != null "> and level= #{level} <if test="name != null and name != ''"> and instr(name, #{name}) </if> </where> </select>