ty
11 months ago
36 changed files with 2040 additions and 139 deletions
@ -0,0 +1,13 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.constants; |
||||||
|
|
||||||
|
/** |
||||||
|
* safeproduct 常量类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
public interface SafeProductConstant { |
||||||
|
|
||||||
|
int TRAIN_PLAN_HAS_TEST = 1; |
||||||
|
int TRAIN_PLAN_HAS_NO_TEST = 0; |
||||||
|
} |
@ -1,95 +0,0 @@ |
|||||||
package com.hnac.hzims.safeproduct.dto; |
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModel; |
|
||||||
import io.swagger.annotations.ApiModelProperty; |
|
||||||
import lombok.Data; |
|
||||||
import lombok.EqualsAndHashCode; |
|
||||||
import org.springblade.core.mp.base.BaseEntity; |
|
||||||
|
|
||||||
import javax.validation.constraints.Max; |
|
||||||
import javax.validation.constraints.Min; |
|
||||||
import javax.validation.constraints.NotNull; |
|
||||||
import javax.validation.constraints.Size; |
|
||||||
import java.util.Date; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author liwen |
|
||||||
* @date 2023-12-15 |
|
||||||
*/ |
|
||||||
@Data |
|
||||||
@EqualsAndHashCode(callSuper = true) |
|
||||||
@ApiModel(value = "演练记录DTO类") |
|
||||||
public class RehearsalRecordDTO extends BaseEntity { |
|
||||||
|
|
||||||
@Size(max = 50, message = "编码字段长度不能超过50") |
|
||||||
@ApiModelProperty("编码") |
|
||||||
private String code; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@Size(max = 50, message = "单位字段长度不能超过50") |
|
||||||
@ApiModelProperty("单位") |
|
||||||
private String unit; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@Size(max = 50, message = "演练科目字段长度不能超过50") |
|
||||||
@ApiModelProperty("演练科目") |
|
||||||
private String subject; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@ApiModelProperty("演练计划开始时间") |
|
||||||
private Date scheduledStartTime; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@ApiModelProperty("演练计划结束时间") |
|
||||||
private Date scheduledEndTime; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@Size(max = 255, message = "演练地点字段长度不能超过255") |
|
||||||
@ApiModelProperty("演练地点") |
|
||||||
private String location; |
|
||||||
|
|
||||||
@Min(value = 0, message = "参演人数不能小于0") |
|
||||||
@Max(value = 1000, message = "参演人数字段长度超出限制范围") |
|
||||||
@ApiModelProperty("参演人数") |
|
||||||
private Integer peopleNum; |
|
||||||
|
|
||||||
@Size(max = 5000, message = "参演人员字段长度超出限制范围") |
|
||||||
@ApiModelProperty("参演人员") |
|
||||||
private String[] people; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@Size(max = 10, message = "总指挥字段长度不能超过10") |
|
||||||
@ApiModelProperty("总指挥") |
|
||||||
private String commander; |
|
||||||
|
|
||||||
@ApiModelProperty("演练实际开始时间") |
|
||||||
private Date actualStartTime; |
|
||||||
|
|
||||||
@ApiModelProperty("演练实际结束时间") |
|
||||||
private Date actualEndTime; |
|
||||||
|
|
||||||
@Size(max = 250, message = "演练记录字段长度不能超过250") |
|
||||||
@ApiModelProperty("演练记录") |
|
||||||
private String record; |
|
||||||
|
|
||||||
@Size(max = 250, message = "演练评价字段长度不能超过250") |
|
||||||
@ApiModelProperty("演练评价") |
|
||||||
private String comment; |
|
||||||
|
|
||||||
@Size(max = 20, message = "演练方式字段长度不能超过20") |
|
||||||
@ApiModelProperty("演练方式") |
|
||||||
private String rehearsalMethod; |
|
||||||
|
|
||||||
@NotNull |
|
||||||
@Size(max = 20, message = "演练状态字段长度不能超过20") |
|
||||||
@ApiModelProperty("演练状态") |
|
||||||
private String rehearsalStatus; |
|
||||||
|
|
||||||
@Size(max = 1000, message = "演练图片字段长度不能超过1000") |
|
||||||
@ApiModelProperty("演练图片") |
|
||||||
private String[] images; |
|
||||||
|
|
||||||
@Size(max = 1000, message = "演练附件字段长度不能超过1000") |
|
||||||
@ApiModelProperty("演练附件") |
|
||||||
private String[] files; |
|
||||||
} |
|
@ -0,0 +1,20 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.dto; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "考试记录DTO类") |
||||||
|
public class TestDTO { |
||||||
|
|
||||||
|
@ApiModelProperty("考试记录id") |
||||||
|
private Long id; |
||||||
|
|
||||||
|
@ApiModelProperty("考试记录名称") |
||||||
|
private String testName; |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.dto; |
||||||
|
|
||||||
|
import com.hnac.hzims.safeproduct.vo.TestScoreVO; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "考试成绩DTO类") |
||||||
|
public class TestScoreDTO { |
||||||
|
|
||||||
|
@ApiModelProperty("考试记录id") |
||||||
|
private Long testId; |
||||||
|
|
||||||
|
@ApiModelProperty("考试成绩列表") |
||||||
|
private List<TestScoreVO> scoreList; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.dto; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "培训记录DTO类") |
||||||
|
public class TrainRecordDTO { |
||||||
|
|
||||||
|
@ApiModelProperty("培训记录id") |
||||||
|
private Long id; |
||||||
|
|
||||||
|
@ApiModelProperty("培训记录名称") |
||||||
|
private String trainRecordName; |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import org.springblade.core.mp.base.BaseEntity; |
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull; |
||||||
|
import javax.validation.constraints.Size; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
@TableName("hzims_test") |
||||||
|
@ApiModel(value = "考试记录实体类") |
||||||
|
public class TestEntity extends BaseEntity { |
||||||
|
|
||||||
|
@ApiModelProperty("培训计划id") |
||||||
|
private Long trainPlanId; |
||||||
|
|
||||||
|
@ApiModelProperty("培训记录id") |
||||||
|
private Long trainRecordId; |
||||||
|
|
||||||
|
@Size(max = 50, message = "名称字段长度不能超过50") |
||||||
|
@ApiModelProperty("考试记录名称") |
||||||
|
private String testName; |
||||||
|
|
||||||
|
@Size(max = 50, message = "编码字段长度不能超过50") |
||||||
|
@ApiModelProperty("编码") |
||||||
|
private String code; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 50, message = "单位字段长度不能超过50") |
||||||
|
@ApiModelProperty("单位") |
||||||
|
private String unit; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@ApiModelProperty("考试开始时间") |
||||||
|
private Date testStartTime; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@ApiModelProperty("考试结束时间") |
||||||
|
private Date testEndTime; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 255, message = "考试地点字段长度不能超过255") |
||||||
|
@ApiModelProperty("考试地点") |
||||||
|
private String location; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 50, message = "考试科目字段长度不能超过50") |
||||||
|
@ApiModelProperty("考试科目") |
||||||
|
private String subject; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 20, message = "监考人字段长度不能超过20") |
||||||
|
@ApiModelProperty("监考人") |
||||||
|
private String proctor; |
||||||
|
|
||||||
|
@Size(max = 1000, message = "参考人员字段长度超出限制范围") |
||||||
|
@ApiModelProperty("参考人员") |
||||||
|
private String peopleName; |
||||||
|
|
||||||
|
@Size(max = 1000, message = "考试图片字段长度不能超过1000") |
||||||
|
@ApiModelProperty("考试图片") |
||||||
|
private String imgPath; |
||||||
|
|
||||||
|
@Size(max = 1000, message = "考试附件字段长度不能超过1000") |
||||||
|
@ApiModelProperty("考试附件") |
||||||
|
private String filePath; |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import org.springblade.core.mp.base.BaseEntity; |
||||||
|
|
||||||
|
import javax.validation.constraints.Max; |
||||||
|
import javax.validation.constraints.Min; |
||||||
|
import javax.validation.constraints.NotNull; |
||||||
|
import javax.validation.constraints.Size; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
@TableName("hzims_test_score") |
||||||
|
@ApiModel(value = "考试记录实体类") |
||||||
|
public class TestScoreEntity extends BaseEntity { |
||||||
|
|
||||||
|
@ApiModelProperty("考试记录id") |
||||||
|
private Long testId; |
||||||
|
|
||||||
|
@Size(max = 50, message = "姓名字段长度不能超过50") |
||||||
|
@ApiModelProperty("姓名") |
||||||
|
private String name; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Min(value = 0, message = "成绩必须大于等于0") |
||||||
|
@Max(value = 100, message = "成绩必须小于等于100") |
||||||
|
@ApiModelProperty("成绩") |
||||||
|
private Integer score; |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import org.springblade.core.mp.base.BaseEntity; |
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull; |
||||||
|
import javax.validation.constraints.Size; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
@TableName("hzims_train_plan") |
||||||
|
@ApiModel(value = "培训计划实体类") |
||||||
|
public class TrainPlanEntity extends BaseEntity { |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 50, message = "单位字段长度不能超过50") |
||||||
|
@ApiModelProperty("单位") |
||||||
|
private String unit; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@ApiModelProperty("计划培训开始时间") |
||||||
|
private Date scheduledStartTime; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@ApiModelProperty("计划培训结束时间") |
||||||
|
private Date scheduledEndTime; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 255, message = "单位字段长度不能超过255") |
||||||
|
@ApiModelProperty("培训课程") |
||||||
|
private String lesson; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 255, message = "培训地点字段长度不能超过255") |
||||||
|
@ApiModelProperty("培训地点") |
||||||
|
private String location; |
||||||
|
|
||||||
|
@Size(max = 20, message = "培训方式字段长度不能超过20") |
||||||
|
@ApiModelProperty("培训方式") |
||||||
|
private String trainMethod; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 20, message = "培训讲师字段长度不能超过20") |
||||||
|
@ApiModelProperty("培训讲师") |
||||||
|
private String teacher; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 20, message = "培训状态字段长度不能超过20") |
||||||
|
@ApiModelProperty("培训状态") |
||||||
|
private String trainStatus; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@ApiModelProperty("关联考试:0-否,1-是") |
||||||
|
private Integer isTest; |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import org.springblade.core.mp.base.BaseEntity; |
||||||
|
|
||||||
|
import javax.validation.constraints.Size; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
@TableName("hzims_train_record") |
||||||
|
@ApiModel(value = "培训记录实体类") |
||||||
|
public class TrainRecordEntity extends BaseEntity { |
||||||
|
|
||||||
|
@ApiModelProperty("培训计划id") |
||||||
|
private Long trainPlanId; |
||||||
|
|
||||||
|
@Size(max = 50, message = "名称字段长度不能超过50") |
||||||
|
@ApiModelProperty("培训记录名称") |
||||||
|
private String trainRecordName; |
||||||
|
|
||||||
|
@Size(max = 50, message = "编码字段长度不能超过50") |
||||||
|
@ApiModelProperty("编码") |
||||||
|
private String code; |
||||||
|
|
||||||
|
@Size(max = 5000, message = "培训学员字段长度超出限制范围") |
||||||
|
@ApiModelProperty("培训学员") |
||||||
|
private String peopleName; |
||||||
|
|
||||||
|
@Size(max = 5000, message = "培训内容字段长度超出限制范围") |
||||||
|
@ApiModelProperty("培训内容") |
||||||
|
private String content; |
||||||
|
|
||||||
|
@ApiModelProperty("实际培训开始时间") |
||||||
|
private Date actualStartTime; |
||||||
|
|
||||||
|
@ApiModelProperty("实际培训结束时间") |
||||||
|
private Date actualEndTime; |
||||||
|
|
||||||
|
@Size(max = 250, message = "培训评价字段长度不能超过250") |
||||||
|
@ApiModelProperty("培训评价") |
||||||
|
private String command; |
||||||
|
|
||||||
|
@Size(max = 1000, message = "培训图片字段长度不能超过1000") |
||||||
|
@ApiModelProperty("培训图片") |
||||||
|
private String imgPath; |
||||||
|
|
||||||
|
@Size(max = 1000, message = "培训附件字段长度不能超过1000") |
||||||
|
@ApiModelProperty("培训附件") |
||||||
|
private String filePath; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "考试成绩VO类") |
||||||
|
public class TestScoreVO { |
||||||
|
|
||||||
|
@ApiModelProperty("姓名") |
||||||
|
private String name; |
||||||
|
|
||||||
|
@ApiModelProperty("成绩") |
||||||
|
private Integer score; |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "培训月度统计VO类") |
||||||
|
public class TrainMonthVO { |
||||||
|
|
||||||
|
@ApiModelProperty("单位") |
||||||
|
private String unit; |
||||||
|
|
||||||
|
@ApiModelProperty("应完成次数") |
||||||
|
private Long scheduledTrainNum; |
||||||
|
|
||||||
|
@ApiModelProperty("已完成次数") |
||||||
|
private Long finishedTrainNum; |
||||||
|
|
||||||
|
@ApiModelProperty("未完成次数") |
||||||
|
private Long unfinishedTrainNum; |
||||||
|
|
||||||
|
@ApiModelProperty("完成率") |
||||||
|
private BigDecimal completionRate; |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "培训年度统计VO类") |
||||||
|
public class TrainYearVO { |
||||||
|
|
||||||
|
@ApiModelProperty("单位") |
||||||
|
private String unit; |
||||||
|
|
||||||
|
@ApiModelProperty("1月完成数") |
||||||
|
private Long januaryNum; |
||||||
|
|
||||||
|
@ApiModelProperty("2月完成数") |
||||||
|
private Long februaryNum; |
||||||
|
|
||||||
|
@ApiModelProperty("3月完成数") |
||||||
|
private Long marchNum; |
||||||
|
|
||||||
|
@ApiModelProperty("4月完成数") |
||||||
|
private Long aprilNum; |
||||||
|
|
||||||
|
@ApiModelProperty("5月完成数") |
||||||
|
private Long mayNum; |
||||||
|
|
||||||
|
@ApiModelProperty("6月完成数") |
||||||
|
private Long juneNum; |
||||||
|
|
||||||
|
@ApiModelProperty("7月完成数") |
||||||
|
private Long julyNum; |
||||||
|
|
||||||
|
@ApiModelProperty("8月完成数") |
||||||
|
private Long augustNum; |
||||||
|
|
||||||
|
@ApiModelProperty("9月完成数") |
||||||
|
private Long septemberNum; |
||||||
|
|
||||||
|
@ApiModelProperty("10月完成数") |
||||||
|
private Long octoberNum; |
||||||
|
|
||||||
|
@ApiModelProperty("11月完成数") |
||||||
|
private Long novemberNum; |
||||||
|
|
||||||
|
@ApiModelProperty("12月完成数") |
||||||
|
private Long decemberNum; |
||||||
|
} |
@ -0,0 +1,261 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.controller; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||||
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||||
|
import com.hnac.hzims.common.utils.Condition; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestDTO; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestScoreDTO; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TrainRecordDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainRecordEntity; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestScoreService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITrainPlanService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITrainRecordService; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TestScoreVO; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainMonthVO; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainYearVO; |
||||||
|
import io.swagger.annotations.Api; |
||||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||||
|
import io.swagger.annotations.ApiImplicitParams; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.springblade.core.boot.ctrl.BladeController; |
||||||
|
import org.springblade.core.mp.support.Query; |
||||||
|
import org.springblade.core.secure.BladeUser; |
||||||
|
import org.springblade.core.tool.api.R; |
||||||
|
import org.springblade.system.feign.ISysClient; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
import springfox.documentation.annotations.ApiIgnore; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import javax.validation.Valid; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训管理接口类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@AllArgsConstructor |
||||||
|
@RequestMapping("/train") |
||||||
|
@Api(value = "培训管理", tags = "培训管理接口") |
||||||
|
public class TrainController extends BladeController { |
||||||
|
|
||||||
|
private final ITrainPlanService trainPlanService; |
||||||
|
|
||||||
|
private final ITrainRecordService trainRecordService; |
||||||
|
|
||||||
|
private final ITestService testService; |
||||||
|
|
||||||
|
private final ITestScoreService testScoreService; |
||||||
|
|
||||||
|
private final ISysClient sysClient; |
||||||
|
|
||||||
|
@PostMapping("/saveTrainPlan") |
||||||
|
@ApiOperation(value = "新增培训计划") |
||||||
|
@ApiOperationSupport(order = 1) |
||||||
|
public R saveTrainPlan(@Valid @RequestBody TrainPlanEntity trainPlanEntity) { |
||||||
|
return R.status(trainPlanService.save(trainPlanEntity)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/updateTrainPlan") |
||||||
|
@ApiOperation(value = "修改培训计划") |
||||||
|
@ApiOperationSupport(order = 2) |
||||||
|
public R updateTrainPlan(@Valid @RequestBody TrainPlanEntity trainPlanEntity) { |
||||||
|
return R.status(trainPlanService.updateById(trainPlanEntity)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/removeTrainPlan") |
||||||
|
@ApiOperation(value = "删除培训计划") |
||||||
|
@ApiOperationSupport(order = 3) |
||||||
|
public R removeTrainPlan(@RequestParam Long id) { |
||||||
|
return R.status(trainPlanService.removeTrainPlan(id)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/trainPlanDetail") |
||||||
|
@ApiOperation(value = "培训计划详情") |
||||||
|
@ApiOperationSupport(order = 4) |
||||||
|
public R<TrainPlanEntity> trainPlanDetail(@RequestParam Long id) { |
||||||
|
return R.data(trainPlanService.getById(id)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/trainPlanPage") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "unit", value = "单位", dataType = "query", paramType = "string"), |
||||||
|
@ApiImplicitParam(name = "scheduledStartTime", value = "计划培训开始时间", dataType = "query", paramType = "string"), |
||||||
|
@ApiImplicitParam(name = "scheduledEndTime", value = "计划培训结束时间", dataType = "query", paramType = "string") |
||||||
|
}) |
||||||
|
@ApiOperation(value = "培训计划分页") |
||||||
|
@ApiOperationSupport(order = 5) |
||||||
|
public R<IPage<TrainPlanEntity>> trainPlanPage(@ApiIgnore @RequestParam Map<String, Object> param, Query query) { |
||||||
|
IPage<TrainPlanEntity> page = trainPlanService.page(Condition.getPage(query), Condition.getQueryWrapper(param, TrainPlanEntity.class)); |
||||||
|
return R.data(page); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/saveTrainRecord") |
||||||
|
@ApiOperation(value = "新增培训记录") |
||||||
|
@ApiOperationSupport(order = 6) |
||||||
|
public R saveTrainRecord(@Valid @RequestBody TrainRecordEntity trainRecordEntity) { |
||||||
|
return R.status(trainRecordService.saveTrainRecord(trainRecordEntity)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/updateTrainRecord") |
||||||
|
@ApiOperation(value = "修改培训记录") |
||||||
|
@ApiOperationSupport(order = 7) |
||||||
|
public R updateTrainRecord(@Valid @RequestBody TrainRecordEntity trainRecordEntity) { |
||||||
|
return R.status(trainRecordService.updateById(trainRecordEntity)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/removeTrainRecord") |
||||||
|
@ApiOperation(value = "删除培训记录") |
||||||
|
@ApiOperationSupport(order = 8) |
||||||
|
public R removeTrainRecord(@RequestParam Long id) { |
||||||
|
return R.status(trainRecordService.removeTrainRecord(id)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/trainRecordDetail") |
||||||
|
@ApiOperation(value = "培训记录详情") |
||||||
|
@ApiOperationSupport(order = 9) |
||||||
|
public R<TrainRecordEntity> trainRecordDetail(@RequestParam Long id) { |
||||||
|
return R.data(trainRecordService.getById(id)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/trainRecordPage") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "trainPlanId", value = "培训计划id", dataType = "query", paramType = "string") |
||||||
|
}) |
||||||
|
@ApiOperation(value = "培训记录分页") |
||||||
|
@ApiOperationSupport(order = 10) |
||||||
|
public R<IPage<TrainRecordEntity>> trainRecordPage(@ApiIgnore @RequestParam Map<String, Object> param, Query query) { |
||||||
|
IPage<TrainRecordEntity> page = trainRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(param, TrainRecordEntity.class)); |
||||||
|
return R.data(page); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/getTrainRecordNameList") |
||||||
|
@ApiOperation(value = "培训记录名称列表") |
||||||
|
@ApiOperationSupport(order = 11) |
||||||
|
public R<List<TrainRecordDTO>> getTrainRecordNameList(@RequestParam String trainPlanId) { |
||||||
|
List<TrainRecordDTO> list = trainRecordService.getTrainRecordNameList(trainPlanId); |
||||||
|
return R.data(list); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/saveTest") |
||||||
|
@ApiOperation(value = "新增考试") |
||||||
|
@ApiOperationSupport(order = 12) |
||||||
|
public R saveTest(@Valid @RequestBody TestEntity testEntity) { |
||||||
|
return testService.saveTest(testEntity); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/updateTest") |
||||||
|
@ApiOperation(value = "修改考试") |
||||||
|
@ApiOperationSupport(order = 13) |
||||||
|
public R updateTest(@Valid @RequestBody TestEntity testEntity) { |
||||||
|
return R.status(testService.updateTest(testEntity)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/removeTest") |
||||||
|
@ApiOperation(value = "删除考试") |
||||||
|
@ApiOperationSupport(order = 14) |
||||||
|
public R removeTest(@RequestParam Long id) { |
||||||
|
return R.status(testService.removeTest(id)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/testDetail") |
||||||
|
@ApiOperation(value = "考试详情") |
||||||
|
@ApiOperationSupport(order = 15) |
||||||
|
public R<TestEntity> testDetail(@RequestParam Long id) { |
||||||
|
return R.data(testService.getById(id)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/testPage") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "trainRecordId", value = "培训记录id", dataType = "query", paramType = "string") |
||||||
|
}) |
||||||
|
@ApiOperation(value = "考试记录分页") |
||||||
|
@ApiOperationSupport(order = 16) |
||||||
|
public R<IPage<TestEntity>> testPage(@ApiIgnore @RequestParam Map<String, Object> param, Query query) { |
||||||
|
IPage<TestEntity> page = testService.page(Condition.getPage(query), Condition.getQueryWrapper(param, TestEntity.class)); |
||||||
|
return R.data(page); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/getTestNameList") |
||||||
|
@ApiOperation(value = "考试记录名称列表") |
||||||
|
@ApiOperationSupport(order = 17) |
||||||
|
public R<List<TestDTO>> getTestNameList(@RequestParam String trainPlanId) { |
||||||
|
List<TestDTO> list = testService.getTestNameList(trainPlanId); |
||||||
|
return R.data(list); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/testScoreList") |
||||||
|
@ApiOperation(value = "考试成绩列表") |
||||||
|
@ApiOperationSupport(order = 18) |
||||||
|
public R<List<TestScoreVO>> testScoreList(@RequestParam Long testId) { |
||||||
|
List<TestScoreVO> list = testScoreService.testScoreList(testId); |
||||||
|
return R.data(list); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/updateBatchScore") |
||||||
|
@ApiOperation(value = "批量填写分数") |
||||||
|
@ApiOperationSupport(order = 19) |
||||||
|
public R updateBatchScore(TestScoreDTO testScoreDTO) { |
||||||
|
return R.status(testScoreService.updateBatchScore(testScoreDTO)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/trainDataByMonth") |
||||||
|
@ApiOperation(value = "培训月度统计表") |
||||||
|
@ApiOperationSupport(order = 20) |
||||||
|
public R<IPage<TrainMonthVO>> trainDataByMonth(@RequestParam String month, Query query) { |
||||||
|
IPage<TrainMonthVO> page = trainPlanService.dataByMonth(month, query); |
||||||
|
return R.data(page); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/trainDataByYear") |
||||||
|
@ApiOperation(value = "培训年度统计表") |
||||||
|
@ApiOperationSupport(order = 21) |
||||||
|
public R<IPage<TrainYearVO>> trainDataByYear(@RequestParam String year, Query query) { |
||||||
|
IPage<TrainYearVO> page = trainPlanService.dataByYear(year, query); |
||||||
|
return R.data(page); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/getDeptName") |
||||||
|
@ApiOperation(value = "获取所属机构名") |
||||||
|
@ApiOperationSupport(order = 22) |
||||||
|
public R<String> getDeptName() { |
||||||
|
BladeUser bladeUser = getUser(); |
||||||
|
String deptId = bladeUser.getDeptId(); |
||||||
|
if (StringUtils.isNotBlank(deptId)) { |
||||||
|
return sysClient.getDeptName(Long.valueOf(deptId)); |
||||||
|
} |
||||||
|
return R.data(null, "所属机构为空"); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/exportTrainPlanData") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "unit", value = "单位", dataType = "query", paramType = "string"), |
||||||
|
@ApiImplicitParam(name = "scheduledStartTime", value = "计划开始时间", dataType = "query", paramType = "string"), |
||||||
|
@ApiImplicitParam(name = "scheduledEndTime", value = "计划结束时间", dataType = "query", paramType = "string") |
||||||
|
}) |
||||||
|
@ApiOperation(value = "培训计划数据导出") |
||||||
|
@ApiOperationSupport(order = 23) |
||||||
|
public void exportTrainPlanData(@ApiIgnore @RequestParam Map<String, Object> param, HttpServletResponse response) { |
||||||
|
trainPlanService.exportTrainPlanData(param, response); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/exportTrainRecordData") |
||||||
|
@ApiImplicitParams({ |
||||||
|
@ApiImplicitParam(name = "scheduledStartTime", value = "计划开始时间", dataType = "query", paramType = "string"), |
||||||
|
@ApiImplicitParam(name = "scheduledEndTime", value = "计划结束时间", dataType = "query", paramType = "string") |
||||||
|
}) |
||||||
|
@ApiOperation(value = "培训记录数据导出") |
||||||
|
@ApiOperationSupport(order = 24) |
||||||
|
public void exportTrainRecordData(@ApiIgnore @RequestParam Map<String, Object> param, HttpServletResponse response) { |
||||||
|
trainRecordService.exportTrainRecordData(param, response); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestEntity; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考试记录Mapper类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface TestMapper extends BaseMapper<TestEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询考试记录名称列表 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return 考试记录名称列表 |
||||||
|
*/ |
||||||
|
List<TestDTO> getTestNameList(String trainPlanId); |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
<?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.hnac.hzims.safeproduct.mapper.TestMapper"> |
||||||
|
|
||||||
|
<select id="getTestNameList" resultType="com.hnac.hzims.safeproduct.dto.TestDTO"> |
||||||
|
SELECT |
||||||
|
id, test_name |
||||||
|
FROM |
||||||
|
hzims_test |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND train_plan_id = #{trainPlanId} |
||||||
|
</select> |
||||||
|
</mapper> |
@ -0,0 +1,25 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestScoreEntity; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TestScoreVO; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考试成绩Mapper类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface TestScoreMapper extends BaseMapper<TestScoreEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询考试成绩列表 |
||||||
|
* @param testId 考试记录id |
||||||
|
* @return 考试成绩列表 |
||||||
|
*/ |
||||||
|
List<TestScoreVO> testScoreList(Long testId); |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
<?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.hnac.hzims.safeproduct.mapper.TestScoreMapper"> |
||||||
|
|
||||||
|
<select id="testScoreList" resultType="com.hnac.hzims.safeproduct.vo.TestScoreVO"> |
||||||
|
SELECT |
||||||
|
name, score |
||||||
|
FROM |
||||||
|
hzims_test_score |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
<if test="testId != null and testId != ''"> |
||||||
|
AND test_id = #{testId} |
||||||
|
</if> |
||||||
|
ORDER BY |
||||||
|
score DESC |
||||||
|
</select> |
||||||
|
</mapper> |
@ -0,0 +1,53 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||||
|
import com.hnac.hzims.safeproduct.dto.AnalysisYearDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainMonthVO; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainYearVO; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训计划Mapper类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface TrainPlanMapper extends BaseMapper<TrainPlanEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当月各单位的培训计划总数 |
||||||
|
* @param page 分页类 |
||||||
|
* @param month 月份 |
||||||
|
* @return 当月培训计划总数 |
||||||
|
*/ |
||||||
|
IPage<TrainMonthVO> selectByMonth(IPage<TrainMonthVO> page, String month); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当月各单位已完成的培训计划数据 |
||||||
|
* @param page1 分页类 |
||||||
|
* @param month 月份 |
||||||
|
* @return 当月已完成培训计划数 |
||||||
|
*/ |
||||||
|
IPage<TrainMonthVO> selectFinishedDataByMonth(IPage<TrainMonthVO> page1, String month); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当年的所有单位 |
||||||
|
* @param page 分页类 |
||||||
|
* @param year 年份 |
||||||
|
* @return 年度单位数据 |
||||||
|
*/ |
||||||
|
IPage<TrainYearVO> selectUnitByYear(IPage<TrainYearVO> page, String year); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询各单位全年已完成的培训计划数 |
||||||
|
* @param unitList 单元列表 |
||||||
|
* @param year 年份 |
||||||
|
* @return 单位各月的培训计划数 |
||||||
|
*/ |
||||||
|
List<AnalysisYearDTO> selectFinishedDataByUnit(List<String> unitList, String year); |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
<?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.hnac.hzims.safeproduct.mapper.TrainPlanMapper"> |
||||||
|
|
||||||
|
<select id="selectByMonth" resultType="com.hnac.hzims.safeproduct.vo.TrainMonthVO"> |
||||||
|
SELECT |
||||||
|
unit, count(1) as scheduled_train_num |
||||||
|
FROM |
||||||
|
hzims_train_plan |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND scheduled_train_time like concat('%', #{month}, '%') |
||||||
|
GROUP BY |
||||||
|
unit |
||||||
|
ORDER BY |
||||||
|
unit |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="selectFinishedDataByMonth" resultType="com.hnac.hzims.safeproduct.vo.TrainMonthVO"> |
||||||
|
SELECT |
||||||
|
unit, count(1) as finished_train_num |
||||||
|
FROM |
||||||
|
hzims_train_plan |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND scheduled_train_time like concat('%', #{month}, '%') |
||||||
|
AND train_status = 'FINISHED' |
||||||
|
GROUP BY |
||||||
|
unit |
||||||
|
ORDER BY |
||||||
|
unit |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="selectUnitByYear" resultType="com.hnac.hzims.safeproduct.vo.TrainYearVO"> |
||||||
|
SELECT |
||||||
|
distinct unit |
||||||
|
FROM |
||||||
|
hzims_train_plan |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND actual_train_time like concat('%', #{year}, '%') |
||||||
|
ORDER BY |
||||||
|
unit |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="selectFinishedDataByUnit" resultType="com.hnac.hzims.safeproduct.dto.AnalysisYearDTO"> |
||||||
|
SELECT |
||||||
|
unit, DATE_FORMAT(actual_train_time, '%m') as dateTime, count(1) as finished_num |
||||||
|
FROM |
||||||
|
hzims_train_plan |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND actual_train_time like concat('%', #{year}, '%') |
||||||
|
AND train_status = 'FINISHED' |
||||||
|
AND unit in |
||||||
|
<foreach collection="unitList" item="unit" open="(" close=")" separator=","> |
||||||
|
#{unit} |
||||||
|
</foreach> |
||||||
|
GROUP BY |
||||||
|
unit, DATE_FORMAT(actual_train_time, '%m') |
||||||
|
ORDER BY |
||||||
|
unit |
||||||
|
</select> |
||||||
|
</mapper> |
@ -0,0 +1,25 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.mapper; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TrainRecordDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainRecordEntity; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训记录Mapper类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface TrainRecordMapper extends BaseMapper<TrainRecordEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询培训记录名称列表 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return 培训记录名称列表 |
||||||
|
*/ |
||||||
|
List<TrainRecordDTO> getTrainRecordNameList(String trainPlanId); |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
<?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.hnac.hzims.safeproduct.mapper.TrainRecordMapper"> |
||||||
|
|
||||||
|
<select id="getTrainRecordNameList" resultType="com.hnac.hzims.safeproduct.dto.TrainRecordDTO"> |
||||||
|
SELECT |
||||||
|
id, train_record_name |
||||||
|
FROM |
||||||
|
hzims_train_record |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
<if test="trainPlanId != null and trainPlanId != ''"> |
||||||
|
AND train_plan_id = #{trainPlanId} |
||||||
|
</if> |
||||||
|
ORDER BY |
||||||
|
create_time DESC |
||||||
|
</select> |
||||||
|
</mapper> |
@ -0,0 +1,45 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestScoreDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestScoreEntity; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TestScoreVO; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考试成绩服务类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
public interface ITestScoreService extends IService<TestScoreEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询考试成绩列表 |
||||||
|
* @param testId 考试记录id |
||||||
|
* @return 考试成绩列表 |
||||||
|
*/ |
||||||
|
List<TestScoreVO> testScoreList(Long testId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 批量填写分数 |
||||||
|
* @param testScoreDTO 考试成绩DTO类 |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean updateBatchScore(TestScoreDTO testScoreDTO); |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除关联考试成绩 |
||||||
|
* @param testId 考试记录id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeRelativeTestScore(Long testId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询关联考试成绩 |
||||||
|
* @param testId 考试记录id |
||||||
|
* @return 考试成绩列表 |
||||||
|
*/ |
||||||
|
List<TestScoreEntity> getRelativeTestScore(Long testId); |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestEntity; |
||||||
|
import org.springblade.core.tool.api.R; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考试记录服务类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
public interface ITestService extends IService<TestEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 新增考试记录 |
||||||
|
* @param testEntity 考试记录实体类 |
||||||
|
* @return 返回结果封装类 |
||||||
|
*/ |
||||||
|
R saveTest(TestEntity testEntity); |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据编码查询考试记录 |
||||||
|
* @param code 编码 |
||||||
|
* @return 考试记录实体类 |
||||||
|
*/ |
||||||
|
TestEntity getTestByCode(String code); |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除关联考试记录 |
||||||
|
* @param trainRecordId 培训记录id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeRelativeTest(Long trainRecordId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询关联考试记录 |
||||||
|
* @param trainRecordId 培训记录id |
||||||
|
* @return 考试记录列表 |
||||||
|
*/ |
||||||
|
List<TestEntity> getRelativeTest(Long trainRecordId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除考试记录 |
||||||
|
* @param id 考试记录id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeTest(Long id); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询考试记录名称列表 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return 考试记录名称列表 |
||||||
|
*/ |
||||||
|
List<TestDTO> getTestNameList(String trainPlanId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 修改考试记录 |
||||||
|
* @param testEntity 考试记录实体类 |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean updateTest(TestEntity testEntity); |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainMonthVO; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainYearVO; |
||||||
|
import org.springblade.core.mp.support.Query; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训计划服务类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
public interface ITrainPlanService extends IService<TrainPlanEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 月度培训数据 |
||||||
|
* @param month 月份 |
||||||
|
* @param query 分页类 |
||||||
|
* @return 月度培训分页 |
||||||
|
*/ |
||||||
|
IPage<TrainMonthVO> dataByMonth(String month, Query query); |
||||||
|
|
||||||
|
/** |
||||||
|
* 年度培训数据 |
||||||
|
* @param year 年份 |
||||||
|
* @param query 分页类 |
||||||
|
* @return 年度培训分页 |
||||||
|
*/ |
||||||
|
IPage<TrainYearVO> dataByYear(String year, Query query); |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除培训计划 |
||||||
|
* @param id 培训计划id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeTrainPlan(Long id); |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训计划数据导出 |
||||||
|
* @param param 入参 |
||||||
|
* @param response 响应类 |
||||||
|
*/ |
||||||
|
void exportTrainPlanData(Map<String, Object> param, HttpServletResponse response); |
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TrainRecordDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainRecordEntity; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训记录服务类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
public interface ITrainRecordService extends IService<TrainRecordEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 新增培训记录 |
||||||
|
* @param trainRecordEntity 培训记录实体类 |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean saveTrainRecord(TrainRecordEntity trainRecordEntity); |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除关联培训记录 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeRelativeTrainRecord(Long trainPlanId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询关联培训记录 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return 培训记录列表 |
||||||
|
*/ |
||||||
|
List<TrainRecordEntity> getRelativeTrainRecord(Long trainPlanId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除培训记录 |
||||||
|
* @param id 培训记录id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeTrainRecord(Long id); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询培训记录名称列表 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return 培训记录名称列表 |
||||||
|
*/ |
||||||
|
List<TrainRecordDTO> getTrainRecordNameList(String trainPlanId); |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训记录数据导出 |
||||||
|
* @param param 入参 |
||||||
|
* @param response 响应类 |
||||||
|
*/ |
||||||
|
void exportTrainRecordData(Map<String, Object> param, HttpServletResponse response); |
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service.impl; |
||||||
|
|
||||||
|
import com.alibaba.excel.util.CollectionUtils; |
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestScoreDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestScoreEntity; |
||||||
|
import com.hnac.hzims.safeproduct.mapper.TestScoreMapper; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestScoreService; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TestScoreVO; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考试成绩服务实现类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class TestScoreServiceImpl extends ServiceImpl<TestScoreMapper, TestScoreEntity> implements ITestScoreService { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询考试成绩列表 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<TestScoreVO> testScoreList(Long testId) { |
||||||
|
return baseMapper.testScoreList(testId); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 批量填写分数 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean updateBatchScore(TestScoreDTO testScoreDTO) { |
||||||
|
List<TestScoreVO> scoreList = testScoreDTO.getScoreList(); |
||||||
|
List<TestScoreEntity> testScoreEntities = new ArrayList<>(); |
||||||
|
scoreList.forEach(score -> { |
||||||
|
TestScoreEntity testScoreEntity = new TestScoreEntity(); |
||||||
|
BeanUtils.copyProperties(score, testScoreEntity); |
||||||
|
testScoreEntities.add(testScoreEntity); |
||||||
|
}); |
||||||
|
return this.updateBatchById(testScoreEntities); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除关联考试成绩 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean removeRelativeTestScore(Long testId) { |
||||||
|
// 查询关联考试成绩
|
||||||
|
QueryWrapper<TestScoreEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().eq(TestScoreEntity::getTestId, testId); |
||||||
|
List<TestScoreEntity> testScoreList = this.list(queryWrapper); |
||||||
|
// 若无关联考试成绩,直接返回true
|
||||||
|
if (CollectionUtils.isEmpty(testScoreList)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
// 删除关联考试成绩
|
||||||
|
return this.removeByIds(testScoreList); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询关联考试成绩 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<TestScoreEntity> getRelativeTestScore(Long testId) { |
||||||
|
QueryWrapper<TestScoreEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().eq(TestScoreEntity::getTestId, testId); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,220 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service.impl; |
||||||
|
|
||||||
|
import cn.hutool.core.date.DatePattern; |
||||||
|
import com.alibaba.excel.util.CollectionUtils; |
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.hnac.hzims.common.logs.utils.StringUtils; |
||||||
|
import com.hnac.hzims.safeproduct.constants.SafeProductConstant; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TestDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TestScoreEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.mapper.TestMapper; |
||||||
|
import com.hnac.hzims.safeproduct.mapper.TrainPlanMapper; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestScoreService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestService; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TestScoreVO; |
||||||
|
import org.springblade.core.tool.api.R; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考试记录服务实现类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class TestServiceImpl extends ServiceImpl<TestMapper, TestEntity> implements ITestService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
ITestScoreService testScoreService; |
||||||
|
|
||||||
|
@Resource |
||||||
|
TrainPlanMapper trainPlanMapper; |
||||||
|
|
||||||
|
/** |
||||||
|
* 新增考试记录 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public R saveTest(TestEntity testEntity) { |
||||||
|
// 判断培训计划是否需要考试,若不需要,则无法新增考试记录
|
||||||
|
TrainPlanEntity trainPlanEntity = trainPlanMapper.selectById(testEntity.getTrainPlanId()); |
||||||
|
if (trainPlanEntity.getIsTest().equals(SafeProductConstant.TRAIN_PLAN_HAS_NO_TEST)) { |
||||||
|
return R.fail("该培训计划无法新增考试"); |
||||||
|
} |
||||||
|
// 获取当月时间(yyyymm)
|
||||||
|
String currentMonth = DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()); |
||||||
|
// 查询是否存在同月编号
|
||||||
|
String lastCode = getLastCode(currentMonth); |
||||||
|
// 若不存在,新增编号
|
||||||
|
String code; |
||||||
|
if (StringUtils.isNull(lastCode)) { |
||||||
|
code = "KSJL" + currentMonth + "001"; |
||||||
|
} else { // 若存在,编号递增
|
||||||
|
String oldNum = lastCode.substring(lastCode.length() - 3); |
||||||
|
int value = Integer.parseInt(oldNum) + 1; |
||||||
|
// 根据数位拼接编号
|
||||||
|
if (value < 10) { |
||||||
|
code = "KSJL" + currentMonth + "00" + value; |
||||||
|
} else if (value < 100) { |
||||||
|
code = "KSJL" + currentMonth + "0" + value; |
||||||
|
} else { |
||||||
|
code = "KSJL" + currentMonth + value; |
||||||
|
} |
||||||
|
} |
||||||
|
testEntity.setCode(code); |
||||||
|
boolean saveTest = this.save(testEntity); |
||||||
|
// 若新增考试记录成功,添加相关的参考人员数据
|
||||||
|
if (saveTest) { |
||||||
|
// 查询考试记录
|
||||||
|
TestEntity test = getTestByCode(testEntity.getCode()); |
||||||
|
// 获取姓名数组
|
||||||
|
String people = test.getPeopleName(); |
||||||
|
String[] person = people.split(",|,"); |
||||||
|
// 新增参考人员成绩数据
|
||||||
|
List<TestScoreEntity> scoreList = new ArrayList<>(); |
||||||
|
for(String name : person) { |
||||||
|
TestScoreEntity testScoreEntity = new TestScoreEntity(); |
||||||
|
testScoreEntity.setTestId(test.getId()); |
||||||
|
testScoreEntity.setName(name); |
||||||
|
scoreList.add(testScoreEntity); |
||||||
|
} |
||||||
|
return R.status(testScoreService.saveBatch(scoreList)); |
||||||
|
} |
||||||
|
return R.fail("新增考试记录失败"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据编码查询考试记录 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public TestEntity getTestByCode(String code) { |
||||||
|
QueryWrapper<TestEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().eq(TestEntity::getCode, code); |
||||||
|
return this.getOne(queryWrapper); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除关联考试记录 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean removeRelativeTest(Long trainRecordId) { |
||||||
|
// 查询关联考试记录
|
||||||
|
List<TestEntity> testList = getRelativeTest(trainRecordId); |
||||||
|
// 若无关联考试记录,直接返回true
|
||||||
|
if (CollectionUtils.isEmpty(testList)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
// 删除关联考试记录
|
||||||
|
boolean remove = this.removeByIds(testList); |
||||||
|
// 若删除考试记录成功,删除关联考试成绩
|
||||||
|
if (remove) { |
||||||
|
for (TestEntity test : testList) { |
||||||
|
boolean removeTestScore = testScoreService.removeRelativeTestScore(test.getId()); |
||||||
|
if (!removeTestScore) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询关联考试记录 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<TestEntity> getRelativeTest(Long trainRecordId) { |
||||||
|
QueryWrapper<TestEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().eq(TestEntity::getTrainRecordId, trainRecordId); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除考试记录 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public boolean removeTest(Long id) { |
||||||
|
boolean remove = this.removeById(id); |
||||||
|
// 若考试记录删除成功,删除关联考试成绩
|
||||||
|
if (remove) { |
||||||
|
return testScoreService.removeRelativeTestScore(id); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询考试记录名称列表 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<TestDTO> getTestNameList(String trainPlanId) { |
||||||
|
return baseMapper.getTestNameList(trainPlanId); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 修改考试记录 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public boolean updateTest(TestEntity testEntity) { |
||||||
|
// 判断考试人员是否有变化
|
||||||
|
TestEntity oldTest = getTestByCode(testEntity.getCode()); |
||||||
|
// 若不存在变化,更新考试记录
|
||||||
|
if (oldTest.getPeopleName().equals(testEntity.getPeopleName())) { |
||||||
|
return this.updateById(testEntity); |
||||||
|
} |
||||||
|
// 若存在变化,查询并删除关联考试成绩
|
||||||
|
List<TestScoreEntity> testScoreList = testScoreService.getRelativeTestScore(testEntity.getId()); |
||||||
|
boolean removeByIds = testScoreService.removeByIds(testScoreList); |
||||||
|
// 若删除成功,新增新的考试成绩数据
|
||||||
|
if (removeByIds) { |
||||||
|
String[] person = testEntity.getPeopleName().split(",|,"); |
||||||
|
// 新增参考人员成绩数据
|
||||||
|
List<TestScoreEntity> res = new ArrayList<>(); |
||||||
|
for (String name : person) { |
||||||
|
TestScoreEntity testScoreEntity = new TestScoreEntity(); |
||||||
|
testScoreEntity.setTestId(testEntity.getId()); |
||||||
|
testScoreEntity.setName(name); |
||||||
|
res.add(testScoreEntity); |
||||||
|
} |
||||||
|
return testScoreService.saveBatch(res); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询是否存在同月编号 |
||||||
|
* @param currentMonth 当月 |
||||||
|
* @return 存在则返回上一编号,否则返回null |
||||||
|
*/ |
||||||
|
private String getLastCode(String currentMonth) { |
||||||
|
String month = currentMonth.substring(currentMonth.length() - 2); |
||||||
|
List<TestEntity> list = getTestByMonth(month); |
||||||
|
if (CollectionUtils.isEmpty(list)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return list.get(0).getCode(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当月考试记录 |
||||||
|
* @param month 当月 |
||||||
|
* @return 当月考试记录 |
||||||
|
*/ |
||||||
|
public List<TestEntity> getTestByMonth(String month) { |
||||||
|
QueryWrapper<TestEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().like(TestEntity::getCreateTime, month) |
||||||
|
.orderByDesc(TestEntity::getCode); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,228 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service.impl; |
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.alibaba.excel.ExcelWriter; |
||||||
|
import com.alibaba.excel.converters.longconverter.LongStringConverter; |
||||||
|
import com.alibaba.excel.write.metadata.WriteSheet; |
||||||
|
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy; |
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.hnac.hzims.safeproduct.dto.AnalysisYearDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.RehearsalRecordEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainRecordEntity; |
||||||
|
import com.hnac.hzims.safeproduct.mapper.TrainPlanMapper; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITrainPlanService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITrainRecordService; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainMonthVO; |
||||||
|
import com.hnac.hzims.safeproduct.vo.TrainYearVO; |
||||||
|
import org.springblade.core.log.exception.ServiceException; |
||||||
|
import org.springblade.core.mp.support.Query; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
import org.springframework.util.CollectionUtils; |
||||||
|
|
||||||
|
import javax.servlet.ServletOutputStream; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.IOException; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.math.RoundingMode; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Optional; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训计划服务实现类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class TrainPlanServiceImpl extends ServiceImpl<TrainPlanMapper, TrainPlanEntity> implements ITrainPlanService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
ITrainRecordService trainRecordService; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
ITestService testService; |
||||||
|
|
||||||
|
/** |
||||||
|
* 月度培训数据 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public IPage<TrainMonthVO> dataByMonth(String month, Query query) { |
||||||
|
// 查询当月各单位的培训计划总数
|
||||||
|
IPage<TrainMonthVO> page = new Page<>(query.getCurrent(), query.getSize()); |
||||||
|
IPage<TrainMonthVO> unitPage = baseMapper.selectByMonth(page, month); |
||||||
|
List<TrainMonthVO> unitList = unitPage.getRecords(); |
||||||
|
// 查询当月各单位已完成的培训数据
|
||||||
|
IPage<TrainMonthVO> page1 = new Page<>(query.getCurrent(), query.getSize()); |
||||||
|
IPage<TrainMonthVO> finishedPage = baseMapper.selectFinishedDataByMonth(page1, month); |
||||||
|
List<TrainMonthVO> finishedList = finishedPage.getRecords(); |
||||||
|
// 处理统计数据
|
||||||
|
for (TrainMonthVO unit : unitList) { |
||||||
|
Long taskNum = unit.getScheduledTrainNum(); |
||||||
|
Optional<TrainMonthVO> finishedRehearsal = finishedList.stream().filter(x -> x.getUnit().equals(unit.getUnit())).findFirst(); |
||||||
|
Long finishedTaskNum = finishedRehearsal.isPresent() ? finishedRehearsal.get().getFinishedTrainNum() : 0L; |
||||||
|
unit.setFinishedTrainNum(finishedTaskNum); |
||||||
|
unit.setUnfinishedTrainNum(taskNum - finishedTaskNum); |
||||||
|
BigDecimal taskDecimal = new BigDecimal(taskNum); |
||||||
|
BigDecimal finishedDecimal = new BigDecimal(finishedTaskNum); |
||||||
|
unit.setCompletionRate(finishedDecimal.divide(taskDecimal, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")) |
||||||
|
.setScale(2, RoundingMode.HALF_UP)); |
||||||
|
} |
||||||
|
unitPage.setRecords(unitList); |
||||||
|
return unitPage; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 年度培训数据 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public IPage<TrainYearVO> dataByYear(String year, Query query) { |
||||||
|
IPage<TrainYearVO> page = new Page<>(query.getCurrent(), query.getSize()); |
||||||
|
// 查询当年的所有单位
|
||||||
|
IPage<TrainYearVO> unitPage = baseMapper.selectUnitByYear(page, year); |
||||||
|
List<TrainYearVO> records = unitPage.getRecords(); |
||||||
|
// 若无数据,返回空页面
|
||||||
|
if (CollectionUtils.isEmpty(records)) { |
||||||
|
return unitPage; |
||||||
|
} |
||||||
|
List<String> unitList = records.stream().map(TrainYearVO::getUnit).collect(Collectors.toList()); |
||||||
|
// 查询各单位全年已完成的培训计划数
|
||||||
|
List<AnalysisYearDTO> unitMonthDataList = baseMapper.selectFinishedDataByUnit(unitList, year); |
||||||
|
// 将各单位每个月的培训计划数据写入统计列表
|
||||||
|
unitMonthDataList.forEach(data -> { |
||||||
|
TrainYearVO trainYearVO = records.stream().filter(x -> x.getUnit().equals(data.getUnit())) |
||||||
|
.collect(Collectors.toList()).get(0); |
||||||
|
// 根据月份匹配写入对应字段
|
||||||
|
switch (data.getDateTime()) { |
||||||
|
case "01": |
||||||
|
trainYearVO.setJanuaryNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "02": |
||||||
|
trainYearVO.setFebruaryNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "03": |
||||||
|
trainYearVO.setMarchNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "04": |
||||||
|
trainYearVO.setAprilNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "05": |
||||||
|
trainYearVO.setMayNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "06": |
||||||
|
trainYearVO.setJuneNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "07": |
||||||
|
trainYearVO.setJulyNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "08": |
||||||
|
trainYearVO.setAugustNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "09": |
||||||
|
trainYearVO.setSeptemberNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "10": |
||||||
|
trainYearVO.setOctoberNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "11": |
||||||
|
trainYearVO.setNovemberNum(data.getFinishedNum()); |
||||||
|
break; |
||||||
|
case "12": |
||||||
|
trainYearVO.setDecemberNum(data.getFinishedNum()); |
||||||
|
} |
||||||
|
}); |
||||||
|
unitPage.setRecords(records); |
||||||
|
return unitPage; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除培训计划 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public boolean removeTrainPlan(Long id) { |
||||||
|
boolean remove = this.removeById(id); |
||||||
|
// 若培训计划删除成功,删除关联培训记录
|
||||||
|
if (remove) { |
||||||
|
return trainRecordService.removeRelativeTrainRecord(id); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训计划数据导出 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void exportTrainPlanData(Map<String, Object> param, HttpServletResponse response) { |
||||||
|
ServletOutputStream outputStream = null; |
||||||
|
try { |
||||||
|
outputStream = response.getOutputStream(); |
||||||
|
String unit = String.valueOf(param.get("unit")); |
||||||
|
String startTime = String.valueOf(param.get("scheduledStartTime")); |
||||||
|
String endTime = String.valueOf(param.get("scheduledEndTime")); |
||||||
|
List<TrainPlanEntity> rehearsalRecordList = getTrainPlanByUnitAndDate(unit, startTime, endTime); |
||||||
|
// 设置响应头
|
||||||
|
// URLEncoder.encode防止中文乱码
|
||||||
|
String fileName = URLEncoder.encode("培训计划表", "UTF-8"); |
||||||
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); |
||||||
|
response.setContentType("application/vnd.ms-excel"); |
||||||
|
response.setCharacterEncoding("UTF-8"); |
||||||
|
// ExcelWriter初始化
|
||||||
|
ExcelWriter excelWriter = EasyExcel |
||||||
|
.write(response.getOutputStream()) |
||||||
|
.autoCloseStream(Boolean.TRUE) |
||||||
|
.registerConverter(new LongStringConverter()) |
||||||
|
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(25)) |
||||||
|
.build(); |
||||||
|
WriteSheet writeSheet = EasyExcel.writerSheet(1, "培训计划表").head(TrainPlanEntity.class) |
||||||
|
.build(); |
||||||
|
excelWriter.write(rehearsalRecordList, writeSheet); |
||||||
|
excelWriter.finish(); |
||||||
|
} catch (Exception e) { |
||||||
|
// 重置response
|
||||||
|
response.reset(); |
||||||
|
response.setContentType("application/json"); |
||||||
|
response.setCharacterEncoding("utf-8"); |
||||||
|
throw new ServiceException("培训计划数据导出异常: " + e.getMessage()); |
||||||
|
} finally { |
||||||
|
if (outputStream != null) { |
||||||
|
try { |
||||||
|
outputStream.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
log.error("培训计划导出响应头输出流关闭异常: " + e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据单位和计划时间查询培训计划数据 |
||||||
|
* @param unit 单位 |
||||||
|
* @param startTime 计划开始时间 |
||||||
|
* @param endTime 计划结束时间 |
||||||
|
* @return 培训计划列表 |
||||||
|
*/ |
||||||
|
public List<TrainPlanEntity> getTrainPlanByUnitAndDate(String unit, String startTime, String endTime) { |
||||||
|
LambdaQueryWrapper<TrainPlanEntity> queryWrapper = new LambdaQueryWrapper<>(); |
||||||
|
if (!unit.equals("null")) { |
||||||
|
queryWrapper.eq(TrainPlanEntity::getUnit, unit); |
||||||
|
} |
||||||
|
if (!startTime.equals("null")) { |
||||||
|
queryWrapper.ge(TrainPlanEntity::getScheduledStartTime, startTime); |
||||||
|
} |
||||||
|
if (!endTime.equals("null")) { |
||||||
|
queryWrapper.lt(TrainPlanEntity::getScheduledEndTime, endTime); |
||||||
|
} |
||||||
|
queryWrapper.orderByDesc(TrainPlanEntity::getScheduledEndTime); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,217 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.service.impl; |
||||||
|
|
||||||
|
import cn.hutool.core.date.DatePattern; |
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.alibaba.excel.ExcelWriter; |
||||||
|
import com.alibaba.excel.converters.longconverter.LongStringConverter; |
||||||
|
import com.alibaba.excel.util.CollectionUtils; |
||||||
|
import com.alibaba.excel.write.metadata.WriteSheet; |
||||||
|
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy; |
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.hnac.hzims.common.logs.utils.StringUtils; |
||||||
|
import com.hnac.hzims.safeproduct.dto.TrainRecordDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.RehearsalRecordEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.entity.TrainRecordEntity; |
||||||
|
import com.hnac.hzims.safeproduct.mapper.TrainRecordMapper; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITestService; |
||||||
|
import com.hnac.hzims.safeproduct.service.ITrainRecordService; |
||||||
|
import org.springblade.core.log.exception.ServiceException; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import javax.servlet.ServletOutputStream; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.IOException; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训记录服务实现类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-25 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class TrainRecordServiceImpl extends ServiceImpl<TrainRecordMapper, TrainRecordEntity> implements ITrainRecordService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
ITestService testService; |
||||||
|
|
||||||
|
/** |
||||||
|
* 新增培训记录 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean saveTrainRecord(TrainRecordEntity trainRecordEntity) { |
||||||
|
// 获取当月时间(yyyymm)
|
||||||
|
String currentMonth = DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()); |
||||||
|
// 查询是否存在同月编号
|
||||||
|
String lastCode = getLastCode(currentMonth); |
||||||
|
// 若不存在,新增编号
|
||||||
|
String code; |
||||||
|
if (StringUtils.isNull(lastCode)) { |
||||||
|
code = "PXJL" + currentMonth + "001"; |
||||||
|
} else { // 若存在,编号递增
|
||||||
|
String oldNum = lastCode.substring(lastCode.length() - 3); |
||||||
|
int value = Integer.parseInt(oldNum) + 1; |
||||||
|
// 根据数位拼接编号
|
||||||
|
if (value < 10) { |
||||||
|
code = "PXJL" + currentMonth + "00" + value; |
||||||
|
} else if (value < 100) { |
||||||
|
code = "PXJL" + currentMonth + "0" + value; |
||||||
|
} else { |
||||||
|
code = "PXJL" + currentMonth + value; |
||||||
|
} |
||||||
|
} |
||||||
|
trainRecordEntity.setCode(code); |
||||||
|
return this.save(trainRecordEntity); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除关联培训记录 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public boolean removeRelativeTrainRecord(Long trainPlanId) { |
||||||
|
// 查询关联培训记录
|
||||||
|
List<TrainRecordEntity> trainRecordList = getRelativeTrainRecord(trainPlanId); |
||||||
|
// 若无关联培训记录,直接返回true
|
||||||
|
if (CollectionUtils.isEmpty(trainRecordList)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
// 删除关联培训记录
|
||||||
|
boolean remove = this.removeByIds(trainRecordList); |
||||||
|
// 若删除培训记录成功,则删除关联考试记录
|
||||||
|
if (remove) { |
||||||
|
for (TrainRecordEntity trainRecord : trainRecordList) { |
||||||
|
boolean removeTest = testService.removeRelativeTest(trainRecord.getId()); |
||||||
|
if (!removeTest) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询关联培训记录 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<TrainRecordEntity> getRelativeTrainRecord(Long trainPlanId) { |
||||||
|
QueryWrapper<TrainRecordEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().eq(TrainRecordEntity::getTrainPlanId, trainPlanId); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除培训记录 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public boolean removeTrainRecord(Long id) { |
||||||
|
boolean remove = this.removeById(id); |
||||||
|
// 若培训记录删除成功,删除关联考试记录
|
||||||
|
if (remove) { |
||||||
|
return testService.removeRelativeTest(id); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询培训记录名称列表 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<TrainRecordDTO> getTrainRecordNameList(String trainPlanId) { |
||||||
|
return baseMapper.getTrainRecordNameList(trainPlanId); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 培训记录数据导出 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void exportTrainRecordData(Map<String, Object> param, HttpServletResponse response) { |
||||||
|
ServletOutputStream outputStream = null; |
||||||
|
try { |
||||||
|
outputStream = response.getOutputStream(); |
||||||
|
String trainPlanId = String.valueOf(param.get("trainPlanId")); |
||||||
|
List<TrainRecordEntity> rehearsalRecordList = getTrainRecordByTrainPlanId(trainPlanId); |
||||||
|
// 设置响应头
|
||||||
|
// URLEncoder.encode防止中文乱码
|
||||||
|
String fileName = URLEncoder.encode("培训记录表", "UTF-8"); |
||||||
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); |
||||||
|
response.setContentType("application/vnd.ms-excel"); |
||||||
|
response.setCharacterEncoding("UTF-8"); |
||||||
|
// ExcelWriter初始化
|
||||||
|
ExcelWriter excelWriter = EasyExcel |
||||||
|
.write(response.getOutputStream()) |
||||||
|
.autoCloseStream(Boolean.TRUE) |
||||||
|
.registerConverter(new LongStringConverter()) |
||||||
|
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(25)) |
||||||
|
.build(); |
||||||
|
WriteSheet writeSheet = EasyExcel.writerSheet(1, "培训记录表").head(TrainRecordEntity.class) |
||||||
|
.build(); |
||||||
|
excelWriter.write(rehearsalRecordList, writeSheet); |
||||||
|
excelWriter.finish(); |
||||||
|
} catch (Exception e) { |
||||||
|
// 重置response
|
||||||
|
response.reset(); |
||||||
|
response.setContentType("application/json"); |
||||||
|
response.setCharacterEncoding("utf-8"); |
||||||
|
throw new ServiceException("培训记录数据导出异常: " + e.getMessage()); |
||||||
|
} finally { |
||||||
|
if (outputStream != null) { |
||||||
|
try { |
||||||
|
outputStream.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
log.error("培训记录导出响应头输出流关闭异常: " + e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询是否存在同月编号 |
||||||
|
* @param currentMonth 当月 |
||||||
|
* @return 存在则返回上一编号,否则返回null |
||||||
|
*/ |
||||||
|
private String getLastCode(String currentMonth) { |
||||||
|
String month = currentMonth.substring(currentMonth.length() - 2); |
||||||
|
List<TrainRecordEntity> list = getTrainByMonth(month); |
||||||
|
if (CollectionUtils.isEmpty(list)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return list.get(0).getCode(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当月培训记录 |
||||||
|
* @param month 当月 |
||||||
|
* @return 当月培训记录 |
||||||
|
*/ |
||||||
|
public List<TrainRecordEntity> getTrainByMonth(String month) { |
||||||
|
QueryWrapper<TrainRecordEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().like(TrainRecordEntity::getCreateTime, month) |
||||||
|
.orderByDesc(TrainRecordEntity::getCode); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据培训计划id查询培训记录数据 |
||||||
|
* @param trainPlanId 培训计划id |
||||||
|
* @return 培训记录列表 |
||||||
|
*/ |
||||||
|
public List<TrainRecordEntity> getTrainRecordByTrainPlanId(String trainPlanId) { |
||||||
|
LambdaQueryWrapper<TrainRecordEntity> queryWrapper = new LambdaQueryWrapper<>(); |
||||||
|
if (!trainPlanId.equals("null")) { |
||||||
|
queryWrapper.ge(TrainRecordEntity::getTrainPlanId, trainPlanId); |
||||||
|
} |
||||||
|
queryWrapper.orderByDesc(TrainRecordEntity::getActualEndTime); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue