src/main/java/com/ycl/jxkg/controller/admin/CheatRecordController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/domain/entity/CheatRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/domain/form/CheatRecordForm.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/domain/query/CheatRecordQuery.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/domain/vo/CheatRecordVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/mapper/CheatRecordMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/service/CheatRecordService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/service/impl/CheatRecordServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/CheatRecordMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ycl/jxkg/controller/admin/CheatRecordController.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.CheatRecordService; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.form.CheatRecordForm; import com.ycl.jxkg.domain.query.CheatRecordQuery; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; /** * 作弊记录 前端控制器 * * @author xp * @since 2024-07-03 */ @Validated @RequiredArgsConstructor @Api(value = "作弊记录", tags = "作弊记录管理") @RestController @RequestMapping("/api/cheat-record") public class CheatRecordController { private final CheatRecordService cheatRecordService; @PostMapping @ApiOperation(value = "添加", notes = "添加") @PreAuthorize("hasAuthority('cheatRecord:add')") public Result add(@RequestBody @Validated(Add.class) CheatRecordForm form) { return cheatRecordService.add(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") @PreAuthorize("hasAuthority('cheatRecord:edit')") public Result update(@RequestBody @Validated(Update.class) CheatRecordForm form) { return cheatRecordService.update(form); } @DeleteMapping("/{id}") @ApiOperation(value = "ID删除", notes = "ID删除") @PreAuthorize("hasAuthority('cheatRecord:del')") public Result removeById(@PathVariable("id") String id) { return cheatRecordService.removeById(id); } @DeleteMapping("/batch") @ApiOperation(value = "批量删除", notes = "批量删除") @PreAuthorize("hasAuthority('cheatRecord:del:batch')") public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) { return cheatRecordService.remove(ids); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") @PreAuthorize("hasAuthority('cheatRecord:page')") public Result page(CheatRecordQuery query) { return cheatRecordService.page(query); } @GetMapping("/{id}") @ApiOperation(value = "详情", notes = "详情") @PreAuthorize("hasAuthority('cheatRecord:detail')") public Result detail(@PathVariable("id") Integer id) { return cheatRecordService.detail(id); } @GetMapping("/list") @PreAuthorize("hasAuthority('cheatRecord:list')") @ApiOperation(value = "列表", notes = "列表") public Result list() { return cheatRecordService.all(); } } src/main/java/com/ycl/jxkg/domain/entity/CheatRecord.java
New file @@ -0,0 +1,43 @@ package com.ycl.jxkg.domain.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import java.time.LocalDateTime; import com.ycl.jxkg.domain.base.AbsEntity; import lombok.Data; /** * 作弊记录 * * @author xp * @since 2024-07-03 */ @Data @TableName("t_cheat_record") public class CheatRecord extends AbsEntity { private static final long serialVersionUID = 1L; @TableField("user_id") /** 作弊用户ID */ private Integer userId; @TableField("exam_id") /** 考试ID */ private Integer examId; @TableField("cheat_content") /** 作弊内容 */ private String cheatContent; @TableField("cheat_time") /** 作弊时间 */ private LocalDateTime cheatTime; @TableField("add_user_id") /** 添加作弊的人 */ private Integer addUserId; } src/main/java/com/ycl/jxkg/domain/form/CheatRecordForm.java
New file @@ -0,0 +1,53 @@ 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.CheatRecord; 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-07-03 */ @Data @ApiModel(value = "CheatRecord表单", description = "作弊记录表单") public class CheatRecordForm extends AbsForm { @NotNull(message = "作弊人不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("用户ID") private Integer userId; @NotNull(message = "考试不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("考试ID") private Integer examId; @NotBlank(message = "请输入作弊内容", groups = {Add.class, Update.class}) @ApiModelProperty("作弊内容") private String cheatContent; @NotNull(message = "请选择作弊时间", groups = {Add.class, Update.class}) @ApiModelProperty("作弊时间") private Date cheatTime; @ApiModelProperty("添加作弊的人") private Integer addUserId; public static CheatRecord getEntityByForm(@NonNull CheatRecordForm form, CheatRecord entity) { if(entity == null) { entity = new CheatRecord(); } BeanUtils.copyProperties(form, entity); return entity; } } src/main/java/com/ycl/jxkg/domain/query/CheatRecordQuery.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-07-03 */ @Data @ApiModel(value = "CheatRecord查询", description = "作弊记录查询") public class CheatRecordQuery extends AbsQuery { } src/main/java/com/ycl/jxkg/domain/vo/CheatRecordVO.java
New file @@ -0,0 +1,51 @@ package com.ycl.jxkg.domain.vo; import com.ycl.jxkg.domain.base.AbsVo; import com.ycl.jxkg.domain.entity.CheatRecord; 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-07-03 */ @Data public class CheatRecordVO extends AbsVo { /** 用户ID */ private Integer userId; /** 考试ID */ private Integer examId; /** 作弊内容 */ private String cheatContent; /** 作弊时间 */ private Date cheatTime; /** 添加作弊的人 */ private Integer addUserId; /** */ private Date createTime; /** */ private Date updateTime; public static CheatRecordVO getVoByEntity(@NonNull CheatRecord entity, CheatRecordVO vo) { if(vo == null) { vo = new CheatRecordVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } src/main/java/com/ycl/jxkg/mapper/CheatRecordMapper.java
New file @@ -0,0 +1,34 @@ package com.ycl.jxkg.mapper; import com.ycl.jxkg.domain.entity.CheatRecord; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.jxkg.domain.query.CheatRecordQuery; import com.ycl.jxkg.domain.vo.CheatRecordVO; import com.ycl.jxkg.domain.form.CheatRecordForm; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 作弊记录 Mapper 接口 * * @author xp * @since 2024-07-03 */ @Mapper public interface CheatRecordMapper extends BaseMapper<CheatRecord> { /** * id查找作弊记录 * @param id * @return */ CheatRecordVO getById(Integer id); /** * 分页 */ IPage getPage(IPage page, @Param("query") CheatRecordQuery query); } src/main/java/com/ycl/jxkg/service/CheatRecordService.java
New file @@ -0,0 +1,65 @@ package com.ycl.jxkg.service; import com.ycl.jxkg.domain.entity.CheatRecord; import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.form.CheatRecordForm; import com.ycl.jxkg.domain.query.CheatRecordQuery; import java.util.List; /** * 作弊记录 服务类 * * @author xp * @since 2024-07-03 */ public interface CheatRecordService extends IService<CheatRecord> { /** * 添加 * @param form * @return */ Result add(CheatRecordForm form); /** * 修改 * @param form * @return */ Result update(CheatRecordForm form); /** * 批量删除 * @param ids * @return */ Result remove(List<String> ids); /** * id删除 * @param id * @return */ Result removeById(String id); /** * 分页查询 * @param query * @return */ Result page(CheatRecordQuery query); /** * 根据id查找 * @param id * @return */ Result detail(Integer id); /** * 列表 * @return */ Result all(); } src/main/java/com/ycl/jxkg/service/impl/CheatRecordServiceImpl.java
New file @@ -0,0 +1,139 @@ package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.jxkg.context.WebContext; import com.ycl.jxkg.domain.entity.CheatRecord; import com.ycl.jxkg.domain.entity.Exam; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.mapper.CheatRecordMapper; import com.ycl.jxkg.mapper.ExamMapper; import com.ycl.jxkg.mapper.UserMapper; import com.ycl.jxkg.service.CheatRecordService; import com.ycl.jxkg.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.jxkg.domain.form.CheatRecordForm; import com.ycl.jxkg.domain.vo.CheatRecordVO; import com.ycl.jxkg.domain.query.CheatRecordQuery; 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.Objects; import java.util.stream.Collectors; /** * 作弊记录 服务实现类 * * @author xp * @since 2024-07-03 */ @Service @RequiredArgsConstructor public class CheatRecordServiceImpl extends ServiceImpl<CheatRecordMapper, CheatRecord> implements CheatRecordService { private final CheatRecordMapper cheatRecordMapper; private final ExamMapper examMapper; private final UserMapper userMapper; private final WebContext webContext; /** * 添加 * @param form * @return */ @Override public Result add(CheatRecordForm form) { CheatRecord entity = CheatRecordForm.getEntityByForm(form, null); // 校验 Exam exam = examMapper.selectById(form.getExamId()); if (Objects.isNull(exam)) { throw new RuntimeException("考试不存在"); } User user = userMapper.selectById(form.getUserId()); if (Objects.isNull(user)) { throw new RuntimeException("作弊人不存在"); } entity.setAddUserId(webContext.getCurrentUser().getId()); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(CheatRecordForm form) { CheatRecord 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(CheatRecordQuery query) { IPage<CheatRecordVO> page = PageUtil.getPage(query, CheatRecordVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(Integer id) { CheatRecordVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List<CheatRecord> entities = baseMapper.selectList(null); List<CheatRecordVO> vos = entities.stream() .map(entity -> CheatRecordVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } } src/main/resources/mapper/CheatRecordMapper.xml
New file @@ -0,0 +1,49 @@ <?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.CheatRecordMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.vo.CheatRecordVO"> <result column="user_id" property="userId" /> <result column="exam_id" property="examId" /> <result column="cheat_content" property="cheatContent" /> <result column="cheat_time" property="cheatTime" /> <result column="add_user_id" property="addUserId" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> </resultMap> <select id="getById" resultMap="BaseResultMap"> SELECT TCR.user_id, TCR.exam_id, TCR.cheat_content, TCR.cheat_time, TCR.add_user_id, TCR.create_time, TCR.update_time, TCR.id FROM t_cheat_record TCR WHERE TCR.id = #{id} AND TCR.deleted = 0 </select> <select id="getPage" resultMap="BaseResultMap"> SELECT TCR.user_id, TCR.exam_id, TCR.cheat_content, TCR.cheat_time, TCR.add_user_id, TCR.create_time, TCR.update_time, TCR.id FROM t_cheat_record TCR WHERE TCR.deleted = 0 </select> </mapper>