Merge remote-tracking branch 'origin/dev-tmp1' into dev-tmp1

dev-tmp1
luotaiqian 2026-08-19 16:23:14 +08:00
commit 728ed85b90
12 changed files with 166 additions and 10 deletions

View File

@ -31,6 +31,24 @@ public class ClassManagementController {
return SingleResponse.success(classManagementService.saveClass(dto)); return SingleResponse.success(classManagementService.saveClass(dto));
} }
@ApiOperation("完成")
@PostMapping("/complete")
public SingleResponse<Boolean> complete(@RequestBody ClassManagementDTO dto) {
return SingleResponse.success(classManagementService.complete(dto));
}
@ApiOperation("延期")
@PostMapping("/delay")
public SingleResponse<Boolean> delay(@RequestBody ClassManagementDTO dto) {
return SingleResponse.success(classManagementService.delay(dto));
}
@ApiOperation("绑定试卷")
@PostMapping("/bindPaper")
public SingleResponse<Boolean> bindPaper(@RequestBody ClassManagementDTO dto) {
return SingleResponse.success(classManagementService.bindPaper(dto));
}
@ApiOperation("班级详情") @ApiOperation("班级详情")
@GetMapping("/get") @GetMapping("/get")
public SingleResponse<ClassManagementVO> get(@ApiParam("主键ID") @RequestParam Long id) { public SingleResponse<ClassManagementVO> get(@ApiParam("主键ID") @RequestParam Long id) {

View File

@ -0,0 +1,23 @@
package org.qinan.cedu.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ClassStatusEnum {
NOT_APPLIED(0, "未申请"),
PENDING_START(1, "待开班"),
IN_PROGRESS(2, "培训中"),
FINISHED(3, "培训结束");
private final int code;
private final String desc;
public static ClassStatusEnum fromCode(int code) {
for (ClassStatusEnum status : values()) {
if (status.code == code) return status;
}
return null;
}
}

View File

@ -76,4 +76,22 @@ public class ClassManagementDTO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime delayTime; private LocalDateTime delayTime;
/**
* 12
*/
@ApiModelProperty("试卷类型1自动生成试卷、2平台组卷等")
private Integer paperType;
/**
* ()
*/
@ApiModelProperty("考试时长(分)")
private Integer examMinutes;
/**
* id
*/
@ApiModelProperty("试卷id")
private Long paperId;
} }

View File

@ -28,10 +28,10 @@ public class ClassStudentExamRecordDTO {
private Long classId; private Long classId;
@ApiModelProperty("试卷名称") @ApiModelProperty("试卷名称")
private String examName; private String paperName;
@ApiModelProperty("试卷id") @ApiModelProperty("试卷id")
private Long examId; private Long paperId;
@ApiModelProperty("得分") @ApiModelProperty("得分")
private BigDecimal score; private BigDecimal score;

View File

@ -77,4 +77,22 @@ public class ClassManagementDO extends BaseEntity {
@TableField("delay_time") @TableField("delay_time")
private LocalDateTime delayTime; private LocalDateTime delayTime;
/**
* 12
*/
@TableField("paper_type")
private Integer paperType;
/**
* ()
*/
@TableField("exam_minutes")
private Integer examMinutes;
/**
* id
*/
@TableField("paper_id")
private Long paperId;
} }

View File

@ -31,11 +31,11 @@ public class ClassStudentExamRecordDO extends BaseEntity {
@TableField("class_id") @TableField("class_id")
private Long classId; private Long classId;
@TableField("exam_name") @TableField("paper_name")
private String examName; private String paperName;
@TableField("exam_id") @TableField("paper_id")
private Long examId; private Long paperId;
@TableField("score") @TableField("score")
private BigDecimal score; private BigDecimal score;

View File

@ -18,7 +18,7 @@ public class ClassStudentExamRecordPageQuery extends BasePageQuery {
private Long studentId; private Long studentId;
@ApiModelProperty("试卷id") @ApiModelProperty("试卷id")
private Long examId; private Long paperId;
@ApiModelProperty("是否通过0-未通过1-通过)") @ApiModelProperty("是否通过0-未通过1-通过)")
private Integer passed; private Integer passed;

View File

@ -75,4 +75,22 @@ public class ClassManagementVO extends BaseVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime delayTime; private LocalDateTime delayTime;
/**
* 12
*/
@ApiModelProperty("试卷类型1自动生成试卷、2平台组卷等")
private Integer paperType;
/**
* ()
*/
@ApiModelProperty("考试时长(分)")
private Integer examMinutes;
/**
* id
*/
@ApiModelProperty("试卷id")
private Long paperId;
} }

View File

@ -27,10 +27,10 @@ public class ClassStudentExamRecordVO extends BaseVO {
private Long classId; private Long classId;
@ApiModelProperty("试卷名称") @ApiModelProperty("试卷名称")
private String examName; private String paperName;
@ApiModelProperty("试卷id") @ApiModelProperty("试卷id")
private Long examId; private Long paperId;
@ApiModelProperty("得分") @ApiModelProperty("得分")
private BigDecimal score; private BigDecimal score;

View File

@ -21,4 +21,10 @@ public interface ClassManagementService extends IService<ClassManagementDO> {
boolean updateClass(ClassManagementDTO dto); boolean updateClass(ClassManagementDTO dto);
boolean deleteById(Long id); boolean deleteById(Long id);
Boolean complete(ClassManagementDTO dto);
Boolean bindPaper(ClassManagementDTO dto);
Boolean delay(ClassManagementDTO dto);
} }

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.qinan.cedu.convertor.ClassManagementConvertor; import org.qinan.cedu.convertor.ClassManagementConvertor;
import org.qinan.cedu.enums.ClassStatusEnum;
import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.enums.DeleteEnum;
import org.qinan.cedu.mapper.ClassManagementMapper; import org.qinan.cedu.mapper.ClassManagementMapper;
import org.qinan.cedu.model.dto.ClassManagementDTO; import org.qinan.cedu.model.dto.ClassManagementDTO;
@ -14,9 +15,12 @@ import org.qinan.cedu.service.ClassManagementService;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Objects;
/** /**
* *
@ -91,4 +95,55 @@ public class ClassManagementServiceImpl extends ServiceImpl<ClassManagementMappe
.eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) .eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.update(); .update();
} }
@Override
public Boolean complete(ClassManagementDTO dto) {
LocalDate start = dto.getStartDate().toLocalDate();
LocalDate end = dto.getDelayTime().toLocalDate();;
if (Objects.isNull(end)) {
end = dto.getEndDate().toLocalDate();
}
LocalDate now = LocalDate.now();
ClassStatusEnum pendingStart;
if (now.isBefore(start)) {
pendingStart = ClassStatusEnum.PENDING_START;
} else if (now.isAfter(start) && now.isBefore(end)) {
pendingStart = ClassStatusEnum.IN_PROGRESS;
} else if (now.isAfter(end)){
pendingStart = ClassStatusEnum.FINISHED;
} else {
pendingStart = ClassStatusEnum.NOT_APPLIED;
}
return this.lambdaUpdate()
.set(ClassManagementDO::getStatus, pendingStart.getCode())
.set(ClassManagementDO::getUpdateTime, LocalDateTime.now())
.eq(ClassManagementDO::getId, dto.getId())
.eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.update();
}
@Override
public Boolean bindPaper(ClassManagementDTO dto) {
return this.lambdaUpdate()
.set(ClassManagementDO::getPaperId, dto.getPaperId())
.set(ClassManagementDO::getPaperType, dto.getPaperType())
.set(ClassManagementDO::getExamMinutes, dto.getExamMinutes())
.set(ClassManagementDO::getUpdateTime, LocalDateTime.now())
.eq(ClassManagementDO::getId, dto.getId())
.eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.update();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean delay(ClassManagementDTO dto) {
this.lambdaUpdate()
.set(ClassManagementDO::getDelayTime, dto.getDelayTime())
.set(ClassManagementDO::getUpdateTime, LocalDateTime.now())
.eq(ClassManagementDO::getId, dto.getId())
.eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.update();
// 判断状态
return complete(dto);
}
} }

View File

@ -33,7 +33,7 @@ public class ClassStudentExamRecordServiceImpl extends ServiceImpl<ClassStudentE
.eq(ClassStudentExamRecordDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) .eq(ClassStudentExamRecordDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.eq(query.getClassId() != null, ClassStudentExamRecordDO::getClassId, query.getClassId()) .eq(query.getClassId() != null, ClassStudentExamRecordDO::getClassId, query.getClassId())
.eq(query.getStudentId() != null, ClassStudentExamRecordDO::getStudentId, query.getStudentId()) .eq(query.getStudentId() != null, ClassStudentExamRecordDO::getStudentId, query.getStudentId())
.eq(query.getExamId() != null, ClassStudentExamRecordDO::getExamId, query.getExamId()) .eq(query.getPaperId() != null, ClassStudentExamRecordDO::getPaperId, query.getPaperId())
.eq(query.getPassed() != null, ClassStudentExamRecordDO::getPassed, query.getPassed()) .eq(query.getPassed() != null, ClassStudentExamRecordDO::getPassed, query.getPassed())
.orderByDesc(ClassStudentExamRecordDO::getCreateTime) .orderByDesc(ClassStudentExamRecordDO::getCreateTime)
.page(new Page<>(query.getCurrent(), query.getSize())) .page(new Page<>(query.getCurrent(), query.getSize()))