11 changed files with 691 additions and 1 deletions
			
			
		@ -0,0 +1,23 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.safeproduct.dto; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.swagger.annotations.ApiModel; | 
				
			||||||
 | 
					import io.swagger.annotations.ApiModelProperty; | 
				
			||||||
 | 
					import lombok.Data; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-14 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					@ApiModel(value = "演练年度统计DTO类") | 
				
			||||||
 | 
					public class RehearsalYearDTO { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("单位") | 
				
			||||||
 | 
					    private String unit; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("日期") | 
				
			||||||
 | 
					    private String dateTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("完成数") | 
				
			||||||
 | 
					    private Long finishedNum; | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,93 @@ | 
				
			|||||||
 | 
					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; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					@EqualsAndHashCode(callSuper = true) | 
				
			||||||
 | 
					@TableName("hzims_rehearsal_record") | 
				
			||||||
 | 
					@ApiModel(value = "演练记录实体类") | 
				
			||||||
 | 
					public class RehearsalRecordEntity 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 = 1000000000, message = "参演人数超出限制范围") | 
				
			||||||
 | 
					    @ApiModelProperty("参演人数") | 
				
			||||||
 | 
					    private Integer peopleNum; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @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 imgPath; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Size(max = 1000, message = "演练附件字段长度不能超过1000") | 
				
			||||||
 | 
					    @ApiModelProperty("演练附件") | 
				
			||||||
 | 
					    private String filePath; | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,32 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.safeproduct.enums; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 演练状态枚举类 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-14 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public enum RehearsalStatusEnum { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    WAITING("WAITING", "未开始"), | 
				
			||||||
 | 
					    UNFINISHED("UNFINISHED", "未完成"), | 
				
			||||||
 | 
					    FINISHED("FINISHED", "已完成"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final String value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final String desc; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    RehearsalStatusEnum(String value, String desc) { | 
				
			||||||
 | 
					        this.value = value; | 
				
			||||||
 | 
					        this.desc = desc; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getValue() { | 
				
			||||||
 | 
					        return value; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getDesc() { | 
				
			||||||
 | 
					        return desc; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -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-14 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					@ApiModel(value = "演练月度统计VO类") | 
				
			||||||
 | 
					public class RehearsalMonthVO { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("单位") | 
				
			||||||
 | 
					    private String unit; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("计划任务总数") | 
				
			||||||
 | 
					    private Long scheduledTaskNum; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("已完成任务/次") | 
				
			||||||
 | 
					    private Long finishedTaskNum; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("未完成任务/次") | 
				
			||||||
 | 
					    private Long unfinishedTaskNum; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiModelProperty("任务完成率") | 
				
			||||||
 | 
					    private BigDecimal taskCompletionRate; | 
				
			||||||
 | 
					} | 
				
			||||||
@ -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-14 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					@ApiModel(value = "演练年度统计VO类") | 
				
			||||||
 | 
					public class RehearsalYearVO { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @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,93 @@ | 
				
			|||||||
 | 
					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.entity.RehearsalRecordEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.service.IRehearsalRecordService; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalMonthVO; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalYearVO; | 
				
			||||||
 | 
					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.springblade.core.boot.ctrl.BladeController; | 
				
			||||||
 | 
					import org.springblade.core.mp.support.Query; | 
				
			||||||
 | 
					import org.springblade.core.tool.api.R; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.*; | 
				
			||||||
 | 
					import springfox.documentation.annotations.ApiIgnore; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.validation.Valid; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 演练记录接口类 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@RestController | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					@RequestMapping("/rehearsal") | 
				
			||||||
 | 
					@Api(value = "演练记录", tags = "演练记录接口") | 
				
			||||||
 | 
					public class RehearsalRecordController extends BladeController { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final IRehearsalRecordService rehearsalRecordService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/save") | 
				
			||||||
 | 
					    @ApiOperation(value = "新增") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 1) | 
				
			||||||
 | 
					    public R save(@Valid @RequestBody RehearsalRecordEntity rehearsalRecord) { | 
				
			||||||
 | 
					        return R.status(rehearsalRecordService.saveRehearsal(rehearsalRecord)); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/update") | 
				
			||||||
 | 
					    @ApiOperation(value = "修改") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 2) | 
				
			||||||
 | 
					    public R update(@Valid @RequestBody RehearsalRecordEntity rehearsalRecord) { | 
				
			||||||
 | 
					        return R.status(rehearsalRecordService.updateById(rehearsalRecord)); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping("/remove") | 
				
			||||||
 | 
					    @ApiOperation(value = "删除") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 3) | 
				
			||||||
 | 
					    public R remove(@RequestParam Long id) { | 
				
			||||||
 | 
					        return R.status(rehearsalRecordService.removeById(id)); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping("/detail") | 
				
			||||||
 | 
					    @ApiOperation(value = "详情") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 4) | 
				
			||||||
 | 
					    public R<RehearsalRecordEntity> detail(@RequestParam Long id) { | 
				
			||||||
 | 
					        return R.data(rehearsalRecordService.getById(id)); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping("/page") | 
				
			||||||
 | 
					    @ApiImplicitParams({ | 
				
			||||||
 | 
					            @ApiImplicitParam() | 
				
			||||||
 | 
					    }) | 
				
			||||||
 | 
					    @ApiOperation(value = "分页") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 5) | 
				
			||||||
 | 
					    public R<IPage<RehearsalRecordEntity>> page(@ApiIgnore @RequestParam Map<String, Object> param, Query query) { | 
				
			||||||
 | 
					        IPage<RehearsalRecordEntity> page = rehearsalRecordService.page(Condition.getPage(query), | 
				
			||||||
 | 
					                Condition.getQueryWrapper(param, RehearsalRecordEntity.class)); | 
				
			||||||
 | 
					        return R.data(page); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping("/dataByMonth") | 
				
			||||||
 | 
					    @ApiOperation(value = "月度统计表") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 6) | 
				
			||||||
 | 
					    public R<IPage<RehearsalMonthVO>> dataByMonth(@RequestParam String month, Query query) { | 
				
			||||||
 | 
					        IPage<RehearsalMonthVO> page = rehearsalRecordService.dataByMonth(month, query); | 
				
			||||||
 | 
					        return R.data(page); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping("/dataByYear") | 
				
			||||||
 | 
					    @ApiOperation(value = "年度统计表") | 
				
			||||||
 | 
					    @ApiOperationSupport(order = 7) | 
				
			||||||
 | 
					    public R<IPage<RehearsalYearVO>> dataByYear(@RequestParam String year, Query query) { | 
				
			||||||
 | 
					        IPage<RehearsalYearVO> page = rehearsalRecordService.dataByYear(year, query); | 
				
			||||||
 | 
					        return R.data(page); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,54 @@ | 
				
			|||||||
 | 
					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.RehearsalYearDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.entity.RehearsalRecordEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalMonthVO; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalYearVO; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Mapper; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Param; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 演练记录Mapper类 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Mapper | 
				
			||||||
 | 
					public interface RehearsalRecordMapper extends BaseMapper<RehearsalRecordEntity> { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询当月各单位的演练总数 | 
				
			||||||
 | 
					     * @param page 分页类 | 
				
			||||||
 | 
					     * @param month 月份 | 
				
			||||||
 | 
					     * @return 当月的演练总数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    IPage<RehearsalMonthVO> selectByMonth(IPage<RehearsalMonthVO> page, @Param("month") String month); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询当月各单位已完成的演练数据 | 
				
			||||||
 | 
					     * @param page 分页类 | 
				
			||||||
 | 
					     * @param month 月份 | 
				
			||||||
 | 
					     * @return 当月的已完成数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    IPage<RehearsalMonthVO> selectFinishedDataByMonth(IPage<RehearsalMonthVO> page, @Param("month") String month); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询当年的所有单位 | 
				
			||||||
 | 
					     * @param page 分页类 | 
				
			||||||
 | 
					     * @param year 年份 | 
				
			||||||
 | 
					     * @return 年度单位数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    IPage<RehearsalYearVO> selectUnitByYear(IPage<RehearsalYearVO> page, @Param("year") String year); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询各单位全年已完成的演练数据 | 
				
			||||||
 | 
					     * @param unitList 单元列表 | 
				
			||||||
 | 
					     * @param year 年份 | 
				
			||||||
 | 
					     * @return 单位各月的数据列表 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<RehearsalYearDTO> selectFinishedDataByUnit(@Param("unitList") List<String> unitList, @Param("year") String year); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,65 @@ | 
				
			|||||||
 | 
					<?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.RehearsalRecordMapper"> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="selectByMonth" resultType="com.hnac.hzims.safeproduct.vo.RehearsalMonthVO"> | 
				
			||||||
 | 
					        SELECT | 
				
			||||||
 | 
					            unit, count(1) as scheduled_task_num | 
				
			||||||
 | 
					        FROM | 
				
			||||||
 | 
					            hzims_rehearsal_record | 
				
			||||||
 | 
					        WHERE | 
				
			||||||
 | 
					            is_deleted = 0 | 
				
			||||||
 | 
					            AND scheduled_end_time like concat('%', #{month}, '%') | 
				
			||||||
 | 
					        GROUP BY | 
				
			||||||
 | 
					            unit | 
				
			||||||
 | 
					        ORDER BY | 
				
			||||||
 | 
					            unit | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="selectFinishedDataByMonth" resultType="com.hnac.hzims.safeproduct.vo.RehearsalMonthVO"> | 
				
			||||||
 | 
					        SELECT | 
				
			||||||
 | 
					            unit, count(1) as finished_task_num | 
				
			||||||
 | 
					        FROM | 
				
			||||||
 | 
					            hzims_rehearsal_record | 
				
			||||||
 | 
					        WHERE | 
				
			||||||
 | 
					            is_deleted = 0 | 
				
			||||||
 | 
					            AND scheduled_end_time like concat('%', #{month}, '%') | 
				
			||||||
 | 
					            AND rehearsal_status = 'FINISHED' | 
				
			||||||
 | 
					        GROUP BY | 
				
			||||||
 | 
					            unit | 
				
			||||||
 | 
					        ORDER BY | 
				
			||||||
 | 
					            unit | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="selectUnitByYear" resultType="com.hnac.hzims.safeproduct.vo.RehearsalYearVO"> | 
				
			||||||
 | 
					        SELECT | 
				
			||||||
 | 
					            distinct unit | 
				
			||||||
 | 
					        FROM | 
				
			||||||
 | 
					            hzims_rehearsal_record | 
				
			||||||
 | 
					        WHERE | 
				
			||||||
 | 
					            is_deleted = 0 | 
				
			||||||
 | 
					            AND actual_end_time like concat('%', #{year}, '%') | 
				
			||||||
 | 
					        ORDER BY | 
				
			||||||
 | 
					            unit | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="selectFinishedDataByUnit" resultType="com.hnac.hzims.safeproduct.dto.RehearsalYearDTO"> | 
				
			||||||
 | 
					        SELECT | 
				
			||||||
 | 
					            unit, DATE_FORMAT(actual_end_time, '%m') as dateTime, count(1) as finished_num | 
				
			||||||
 | 
					        FROM | 
				
			||||||
 | 
					            hzims_rehearsal_record | 
				
			||||||
 | 
					        WHERE | 
				
			||||||
 | 
					            is_deleted = 0 | 
				
			||||||
 | 
					            AND actual_end_time like concat('%', #{year}, '%') | 
				
			||||||
 | 
					            AND rehearsal_status = 'FINISHED' | 
				
			||||||
 | 
					            AND unit in | 
				
			||||||
 | 
					            <foreach collection="unitList" item="unit" open="(" close=")" separator=","> | 
				
			||||||
 | 
					                #{unit} | 
				
			||||||
 | 
					            </foreach> | 
				
			||||||
 | 
					        GROUP BY | 
				
			||||||
 | 
					            unit, DATE_FORMAT(actual_end_time, '%m') | 
				
			||||||
 | 
					        ORDER BY | 
				
			||||||
 | 
					            unit | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</mapper> | 
				
			||||||
@ -0,0 +1,40 @@ | 
				
			|||||||
 | 
					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.RehearsalRecordEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalMonthVO; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalYearVO; | 
				
			||||||
 | 
					import org.springblade.core.mp.support.Query; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 演练记录服务类 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface IRehearsalRecordService extends IService<RehearsalRecordEntity> { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 演练月度数据 | 
				
			||||||
 | 
					     * @param month 月份 | 
				
			||||||
 | 
					     * @param query 分页类 | 
				
			||||||
 | 
					     * @return 月度统计分页 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    IPage<RehearsalMonthVO> dataByMonth(String month, Query query); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 演练年度数据 | 
				
			||||||
 | 
					     * @param year 年份 | 
				
			||||||
 | 
					     * @param query 分页类 | 
				
			||||||
 | 
					     * @return 年度统计分页 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    IPage<RehearsalYearVO> dataByYear(String year, Query query); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 新增演练 | 
				
			||||||
 | 
					     * @param rehearsalRecord 演练记录实体类 | 
				
			||||||
 | 
					     * @return 新增是否成功 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    boolean saveRehearsal(RehearsalRecordEntity rehearsalRecord); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,178 @@ | 
				
			|||||||
 | 
					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.core.metadata.IPage; | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
				
			||||||
 | 
					import com.hnac.hzims.common.logs.utils.StringUtils; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.dto.RehearsalYearDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.entity.RehearsalRecordEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.mapper.RehearsalRecordMapper; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.service.IRehearsalRecordService; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalMonthVO; | 
				
			||||||
 | 
					import com.hnac.hzims.safeproduct.vo.RehearsalYearVO; | 
				
			||||||
 | 
					import org.springblade.core.mp.support.Query; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					import java.math.RoundingMode; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Optional; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 演练记录服务实现类 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @author liwen | 
				
			||||||
 | 
					 * @date 2023-12-13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					public class RehearsalRecordServiceImpl extends ServiceImpl<RehearsalRecordMapper, RehearsalRecordEntity> implements IRehearsalRecordService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 演练月度数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public IPage<RehearsalMonthVO> dataByMonth(String month, Query query) { | 
				
			||||||
 | 
					        IPage<RehearsalMonthVO> page = new Page<>(query.getCurrent(), query.getSize()); | 
				
			||||||
 | 
					        // 查询当月各单位的演练总数
 | 
				
			||||||
 | 
					        IPage<RehearsalMonthVO> unitPage = baseMapper.selectByMonth(page, month); | 
				
			||||||
 | 
					        List<RehearsalMonthVO> unitList = unitPage.getRecords(); | 
				
			||||||
 | 
					        // 查询当月各单位已完成的演练数据
 | 
				
			||||||
 | 
					        IPage<RehearsalMonthVO> finishedPage = baseMapper.selectFinishedDataByMonth(page, month); | 
				
			||||||
 | 
					        List<RehearsalMonthVO> finishedList = finishedPage.getRecords(); | 
				
			||||||
 | 
					        // 处理统计数据
 | 
				
			||||||
 | 
					        for (RehearsalMonthVO unit : unitList) { | 
				
			||||||
 | 
					            Long taskNum = unit.getScheduledTaskNum(); | 
				
			||||||
 | 
					            Optional<RehearsalMonthVO> finishedRehearsal = finishedList.stream().filter(x -> x.getUnit().equals(unit.getUnit())).findFirst(); | 
				
			||||||
 | 
					            Long finishedTaskNum = finishedRehearsal.isPresent() ? finishedRehearsal.get().getFinishedTaskNum() : 0L; | 
				
			||||||
 | 
					            unit.setFinishedTaskNum(finishedTaskNum); | 
				
			||||||
 | 
					            unit.setUnfinishedTaskNum(taskNum - finishedTaskNum); | 
				
			||||||
 | 
					            BigDecimal taskDecimal = new BigDecimal(taskNum); | 
				
			||||||
 | 
					            BigDecimal finishedDecimal = new BigDecimal(finishedTaskNum); | 
				
			||||||
 | 
					            unit.setTaskCompletionRate(finishedDecimal.divide(taskDecimal, RoundingMode.HALF_UP).multiply(new BigDecimal("100")) | 
				
			||||||
 | 
					                    .setScale(2, RoundingMode.HALF_UP)); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        unitPage.setRecords(unitList); | 
				
			||||||
 | 
					        return unitPage; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 演练年度数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public IPage<RehearsalYearVO> dataByYear(String year, Query query) { | 
				
			||||||
 | 
					        IPage<RehearsalYearVO> page = new Page<>(query.getCurrent(), query.getSize()); | 
				
			||||||
 | 
					        // 查询当年的所有单位
 | 
				
			||||||
 | 
					        IPage<RehearsalYearVO> unitPage = baseMapper.selectUnitByYear(page, year); | 
				
			||||||
 | 
					        List<RehearsalYearVO> records = unitPage.getRecords(); | 
				
			||||||
 | 
					        List<String> unitList = records.stream().map(RehearsalYearVO::getUnit).collect(Collectors.toList()); | 
				
			||||||
 | 
					        // 查询各单位全年已完成的演练数据
 | 
				
			||||||
 | 
					        List<RehearsalYearDTO> unitMonthDataList = baseMapper.selectFinishedDataByUnit(unitList, year); | 
				
			||||||
 | 
					        // 将各单位每个月的演练数据写入统计列表
 | 
				
			||||||
 | 
					        unitMonthDataList.forEach(data -> { | 
				
			||||||
 | 
					            RehearsalYearVO rehearsalYearVO = records.stream().filter(x -> x.getUnit().equals(data.getUnit())) | 
				
			||||||
 | 
					                    .collect(Collectors.toList()).get(0); | 
				
			||||||
 | 
					            // 根据月份匹配写入对应字段
 | 
				
			||||||
 | 
					            switch (data.getDateTime()) { | 
				
			||||||
 | 
					                case "01": | 
				
			||||||
 | 
					                    rehearsalYearVO.setJanuaryNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "02": | 
				
			||||||
 | 
					                    rehearsalYearVO.setFebruaryNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "03": | 
				
			||||||
 | 
					                    rehearsalYearVO.setMarchNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "04": | 
				
			||||||
 | 
					                    rehearsalYearVO.setAprilNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "05": | 
				
			||||||
 | 
					                    rehearsalYearVO.setMayNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "06": | 
				
			||||||
 | 
					                    rehearsalYearVO.setJuneNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "07": | 
				
			||||||
 | 
					                    rehearsalYearVO.setJulyNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "08": | 
				
			||||||
 | 
					                    rehearsalYearVO.setAugustNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "09": | 
				
			||||||
 | 
					                    rehearsalYearVO.setSeptemberNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "10": | 
				
			||||||
 | 
					                    rehearsalYearVO.setOctoberNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "11": | 
				
			||||||
 | 
					                    rehearsalYearVO.setNovemberNum(data.getFinishedNum()); | 
				
			||||||
 | 
					                    break; | 
				
			||||||
 | 
					                case "12": | 
				
			||||||
 | 
					                    rehearsalYearVO.setDecemberNum(data.getFinishedNum()); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					        unitPage.setRecords(records); | 
				
			||||||
 | 
					        return unitPage; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 新增演练 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public boolean saveRehearsal(RehearsalRecordEntity rehearsalRecord) { | 
				
			||||||
 | 
					        // 获取当月时间(yyyymm)
 | 
				
			||||||
 | 
					        String currentMonth = DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()); | 
				
			||||||
 | 
					        // 查询是否存在同月编号
 | 
				
			||||||
 | 
					        String lastCode = getLastCode(currentMonth); | 
				
			||||||
 | 
					        // 若不存在,新增编号
 | 
				
			||||||
 | 
					        if (StringUtils.isNull(lastCode)) { | 
				
			||||||
 | 
					            String code = "YLJL" + currentMonth + "001"; | 
				
			||||||
 | 
					            rehearsalRecord.setCode(code); | 
				
			||||||
 | 
					            return this.save(rehearsalRecord); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        // 若存在,编号递增
 | 
				
			||||||
 | 
					        String oldNum = lastCode.substring(lastCode.length() - 3); | 
				
			||||||
 | 
					        int value = Integer.parseInt(oldNum) + 1; | 
				
			||||||
 | 
					        String code; | 
				
			||||||
 | 
					        // 根据数位拼接编号
 | 
				
			||||||
 | 
					        if (value < 10) { | 
				
			||||||
 | 
					            code = "YLJL" + currentMonth + "00" + value; | 
				
			||||||
 | 
					        } else if (value < 100) { | 
				
			||||||
 | 
					            code = "YLJL" + currentMonth + "0" + value; | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            code = "YLJL" + currentMonth + value; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        rehearsalRecord.setCode(code); | 
				
			||||||
 | 
					        return this.save(rehearsalRecord); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询是否存在同月编号 | 
				
			||||||
 | 
					     * @param currentMonth 当月 | 
				
			||||||
 | 
					     * @return 存在则返回上一编号,否则返回null | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String getLastCode(String currentMonth) { | 
				
			||||||
 | 
					        String month = currentMonth.substring(currentMonth.length() - 2); | 
				
			||||||
 | 
					        List<RehearsalRecordEntity> list = getRehearsalByMonth(month); | 
				
			||||||
 | 
					        if (CollectionUtils.isEmpty(list)) { | 
				
			||||||
 | 
					            return null; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return list.get(0).getCode(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询当月演练记录 | 
				
			||||||
 | 
					     * @param month 当月 | 
				
			||||||
 | 
					     * @return 当月演练数据表 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public List<RehearsalRecordEntity> getRehearsalByMonth(String month) { | 
				
			||||||
 | 
					        QueryWrapper<RehearsalRecordEntity> queryWrapper = new QueryWrapper<>(); | 
				
			||||||
 | 
					        queryWrapper.lambda().like(RehearsalRecordEntity::getCreateTime, month) | 
				
			||||||
 | 
					                .orderByDesc(RehearsalRecordEntity::getCode); | 
				
			||||||
 | 
					        return this.list(queryWrapper); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue