liwen
1 year ago
18 changed files with 756 additions and 421 deletions
@ -0,0 +1,55 @@ |
|||||||
|
package com.hnac.hzims.safeproduct.dto; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
||||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-27 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ExcelIgnoreUnannotated |
||||||
|
@ApiModel(value = "演练数据导出DTO类") |
||||||
|
public class RehearsalExportDTO { |
||||||
|
|
||||||
|
@ApiModelProperty("单位") |
||||||
|
@ExcelProperty(value = "单位", index = 0) |
||||||
|
private String unit; |
||||||
|
|
||||||
|
@ApiModelProperty("演练科目") |
||||||
|
@ExcelProperty(value = "演练科目", index = 1) |
||||||
|
private String subject; |
||||||
|
|
||||||
|
@ApiModelProperty("演练计划开始时间") |
||||||
|
@ExcelProperty(value = "演练计划开始时间", index = 2) |
||||||
|
private Date scheduledStartTime; |
||||||
|
|
||||||
|
@ApiModelProperty("演练计划结束时间") |
||||||
|
@ExcelProperty(value = "演练计划结束时间", index = 3) |
||||||
|
private Date scheduledEndTime; |
||||||
|
|
||||||
|
@ApiModelProperty("演练地点") |
||||||
|
@ExcelProperty(value = "演练地点", index = 4) |
||||||
|
private String location; |
||||||
|
|
||||||
|
@ApiModelProperty("参演人数") |
||||||
|
@ExcelProperty(value = "参演人数", index = 5) |
||||||
|
private Integer peopleNum; |
||||||
|
|
||||||
|
@ApiModelProperty("演练实际开始时间") |
||||||
|
@ExcelProperty(value = "演练实际开始时间", index = 6) |
||||||
|
private Date actualStartTime; |
||||||
|
|
||||||
|
@ApiModelProperty("演练实际结束时间") |
||||||
|
@ExcelProperty(value = "演练实际结束时间", index = 7) |
||||||
|
private Date actualEndTime; |
||||||
|
|
||||||
|
@ApiModelProperty("演练状态") |
||||||
|
@ExcelProperty(value = "演练状态", index = 8) |
||||||
|
private String rehearsalStatus; |
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
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-27 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
@TableName("hzims_rehearsal_plan") |
||||||
|
@ApiModel(value = "演练计划实体类") |
||||||
|
public class RehearsalPlanEntity extends BaseEntity { |
||||||
|
|
||||||
|
@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; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 10, message = "总指挥字段长度不能超过10") |
||||||
|
@ApiModelProperty("总指挥") |
||||||
|
private String commander; |
||||||
|
|
||||||
|
@Size(max = 20, message = "演练方式字段长度不能超过20") |
||||||
|
@ApiModelProperty("演练方式") |
||||||
|
private String rehearsalMethod; |
||||||
|
|
||||||
|
@NotNull |
||||||
|
@Size(max = 20, message = "演练状态字段长度不能超过20") |
||||||
|
@ApiModelProperty("演练状态") |
||||||
|
private String rehearsalStatus; |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
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.dto.RehearsalExportDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.RehearsalPlanEntity; |
||||||
|
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-27 |
||||||
|
*/ |
||||||
|
@Mapper |
||||||
|
public interface RehearsalPlanMapper extends BaseMapper<RehearsalPlanEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当月各单位的演练总数 |
||||||
|
* @param page 分页类 |
||||||
|
* @param month 月份 |
||||||
|
* @return 当月的演练总数据 |
||||||
|
*/ |
||||||
|
IPage<RehearsalMonthVO> selectByMonth(IPage<RehearsalMonthVO> page, String month); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当月各单位已完成的演练数据 |
||||||
|
* @param page 分页类 |
||||||
|
* @param month 月份 |
||||||
|
* @return 当月的已完成数据 |
||||||
|
*/ |
||||||
|
IPage<RehearsalMonthVO> selectFinishedDataByMonth(IPage<RehearsalMonthVO> page, String month); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询当年的所有单位 |
||||||
|
* @param page 分页类 |
||||||
|
* @param year 年份 |
||||||
|
* @return 年度单位数据 |
||||||
|
*/ |
||||||
|
IPage<RehearsalYearVO> selectUnitByYear(IPage<RehearsalYearVO> page, @Param("year") String year); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询各单位全年已完成的演练数据 |
||||||
|
* @param unitList 单元列表 |
||||||
|
* @param year 年份 |
||||||
|
* @return 单位各月的数据列表 |
||||||
|
*/ |
||||||
|
List<AnalysisYearDTO> selectFinishedDataByUnit(@Param("unitList") List<String> unitList, @Param("year") String year); |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据单位和计划时间查询演练数据 |
||||||
|
* @param unit 单位 |
||||||
|
* @param startTime 计划开始时间 |
||||||
|
* @param endTime 计划结束时间 |
||||||
|
* @return 演练数据列表 |
||||||
|
*/ |
||||||
|
List<RehearsalExportDTO> getRehearsalByUnitAndDate(String unit, String startTime, String endTime); |
||||||
|
} |
@ -0,0 +1,84 @@ |
|||||||
|
<?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.RehearsalPlanMapper"> |
||||||
|
|
||||||
|
<select id="selectByMonth" resultType="com.hnac.hzims.safeproduct.vo.RehearsalMonthVO"> |
||||||
|
SELECT |
||||||
|
unit, count(1) as scheduled_task_num |
||||||
|
FROM |
||||||
|
hzims_rehearsal_plan |
||||||
|
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_plan |
||||||
|
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_plan |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND scheduled_end_time like concat('%', #{year}, '%') |
||||||
|
ORDER BY |
||||||
|
unit |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="selectFinishedDataByUnit" resultType="com.hnac.hzims.safeproduct.dto.AnalysisYearDTO"> |
||||||
|
SELECT |
||||||
|
unit, DATE_FORMAT(scheduled_end_time, '%m') as dateTime, count(1) as finished_num |
||||||
|
FROM |
||||||
|
hzims_rehearsal_plan |
||||||
|
WHERE |
||||||
|
is_deleted = 0 |
||||||
|
AND scheduled_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(scheduled_end_time, '%m') |
||||||
|
ORDER BY |
||||||
|
unit |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="getRehearsalByUnitAndDate" resultType="com.hnac.hzims.safeproduct.dto.RehearsalExportDTO"> |
||||||
|
SELECT |
||||||
|
t1.unit, t1.subject, t1.scheduled_start_time, t1.scheduled_end_time, t1.location, |
||||||
|
t2.people_num, t2.actual_start_time, t2.actual_end_time, t1.rehearsal_status |
||||||
|
FROM |
||||||
|
hzims_rehearsal_plan t1 |
||||||
|
LEFT JOIN hzims_rehearsal_record t2 ON t1.id = t2.rehearsal_record_id |
||||||
|
WHERE |
||||||
|
t1.is_deleted = 0 |
||||||
|
<if test="unit != null and unit != ''"> |
||||||
|
AND t1.unit = #{unit} |
||||||
|
</if> |
||||||
|
<if test="startTime != null and startTime != ''"> |
||||||
|
AND t1.scheduled_start_time >= #{startTime} |
||||||
|
</if> |
||||||
|
<if test="endTime != null and endTime != ''"> |
||||||
|
AND t1.scheduled_end_time < #{endTime} |
||||||
|
</if> |
||||||
|
</select> |
||||||
|
</mapper> |
@ -0,0 +1,67 @@ |
|||||||
|
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.RehearsalPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.vo.RehearsalMonthVO; |
||||||
|
import com.hnac.hzims.safeproduct.vo.RehearsalYearVO; |
||||||
|
import org.springblade.core.mp.support.Query; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 演练计划服务类 |
||||||
|
* |
||||||
|
* @author liwen |
||||||
|
* @date 2023-12-27 |
||||||
|
*/ |
||||||
|
public interface IRehearsalPlanService extends IService<RehearsalPlanEntity> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除演练计划 |
||||||
|
* @param id 演练计划id |
||||||
|
* @return true-成功,false-失败 |
||||||
|
*/ |
||||||
|
boolean removeRehearsalPlan(Long id); |
||||||
|
|
||||||
|
/** |
||||||
|
* 演练月度数据 |
||||||
|
* @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 param 入参 |
||||||
|
* @param response 响应类 |
||||||
|
*/ |
||||||
|
void exportRehearsalPlanData(Map<String, Object> param, HttpServletResponse response); |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询时间范围内未开始的演练数据 |
||||||
|
* @param startTime 开始时间 |
||||||
|
* @param endTime 结束时间 |
||||||
|
* @return 演练数据 |
||||||
|
*/ |
||||||
|
List<RehearsalPlanEntity> getWaitingRehearsalInTimeRange(String startTime, String endTime); |
||||||
|
|
||||||
|
/** |
||||||
|
* 演练计划分页 |
||||||
|
* @param param 入参 |
||||||
|
* @param query 分页类 |
||||||
|
* @return 演练计划数据 |
||||||
|
*/ |
||||||
|
IPage<RehearsalPlanEntity> rehearsalPlanPage(Map<String, Object> param, Query query); |
||||||
|
} |
@ -0,0 +1,259 @@ |
|||||||
|
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.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.utils.Condition; |
||||||
|
import com.hnac.hzims.safeproduct.dto.AnalysisYearDTO; |
||||||
|
import com.hnac.hzims.safeproduct.dto.RehearsalExportDTO; |
||||||
|
import com.hnac.hzims.safeproduct.entity.RehearsalPlanEntity; |
||||||
|
import com.hnac.hzims.safeproduct.enums.RehearsalStatusEnum; |
||||||
|
import com.hnac.hzims.safeproduct.mapper.RehearsalPlanMapper; |
||||||
|
import com.hnac.hzims.safeproduct.service.IRehearsalPlanService; |
||||||
|
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.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 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-27 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class RehearsalPlanServiceImpl extends ServiceImpl<RehearsalPlanMapper, RehearsalPlanEntity> |
||||||
|
implements IRehearsalPlanService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
IRehearsalRecordService rehearsalRecordService; |
||||||
|
|
||||||
|
/** |
||||||
|
* 删除演练计划 |
||||||
|
*/ |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
@Override |
||||||
|
public boolean removeRehearsalPlan(Long id) { |
||||||
|
boolean remove = this.removeById(id); |
||||||
|
// 若演练计划删除成功,删除关联演练记录
|
||||||
|
if (remove) { |
||||||
|
return rehearsalRecordService.removeRelativeRehearsalRecord(id); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 演练月度数据 |
||||||
|
*/ |
||||||
|
@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> page1 = new Page<>(query.getCurrent(), query.getSize()); |
||||||
|
IPage<RehearsalMonthVO> finishedPage = baseMapper.selectFinishedDataByMonth(page1, 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, 4, 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(); |
||||||
|
// 若无数据,返回空页面
|
||||||
|
if (org.springframework.util.CollectionUtils.isEmpty(records)) { |
||||||
|
return unitPage; |
||||||
|
} |
||||||
|
List<String> unitList = records.stream().map(RehearsalYearVO::getUnit).collect(Collectors.toList()); |
||||||
|
// 查询各单位全年已完成的演练数据
|
||||||
|
List<AnalysisYearDTO> 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 void exportRehearsalPlanData(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<RehearsalExportDTO> rehearsalList = getRehearsalByUnitAndDate(unit, startTime, endTime); |
||||||
|
// 处理演练状态信息
|
||||||
|
rehearsalList.forEach(record -> { |
||||||
|
String status; |
||||||
|
if (record.getRehearsalStatus().equals(RehearsalStatusEnum.WAITING.getValue())) { |
||||||
|
status = RehearsalStatusEnum.WAITING.getDesc(); |
||||||
|
} else if (record.getRehearsalStatus().equals(RehearsalStatusEnum.UNFINISHED.getValue())) { |
||||||
|
status = RehearsalStatusEnum.UNFINISHED.getDesc(); |
||||||
|
} else { |
||||||
|
status = RehearsalStatusEnum.FINISHED.getDesc(); |
||||||
|
} |
||||||
|
record.setRehearsalStatus(status); |
||||||
|
}); |
||||||
|
// 设置响应头
|
||||||
|
// 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(RehearsalExportDTO.class) |
||||||
|
.build(); |
||||||
|
excelWriter.write(rehearsalList, 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<RehearsalExportDTO> getRehearsalByUnitAndDate(String unit, String startTime, String endTime) { |
||||||
|
return baseMapper.getRehearsalByUnitAndDate(unit, startTime, endTime); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 查询时间范围内未开始的演练数据 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<RehearsalPlanEntity> getWaitingRehearsalInTimeRange(String startTime, String endTime) { |
||||||
|
QueryWrapper<RehearsalPlanEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.lambda().eq(RehearsalPlanEntity::getRehearsalStatus, RehearsalStatusEnum.WAITING.getValue()) |
||||||
|
.ge(RehearsalPlanEntity::getScheduledEndTime, startTime) |
||||||
|
.lt(RehearsalPlanEntity::getScheduledEndTime, endTime); |
||||||
|
return this.list(queryWrapper); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 演练计划分页 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public IPage<RehearsalPlanEntity> rehearsalPlanPage(Map<String, Object> param, Query query) { |
||||||
|
QueryWrapper<RehearsalPlanEntity> queryWrapper = new QueryWrapper<>(); |
||||||
|
String unit = String.valueOf(param.get("unit")); |
||||||
|
String startTime = String.valueOf(param.get("startTime")); |
||||||
|
String endTime = String.valueOf((param.get("endTime"))); |
||||||
|
if (unit.equals("null") || unit.equals("")) { |
||||||
|
queryWrapper.lambda().eq(RehearsalPlanEntity::getUnit, unit); |
||||||
|
} |
||||||
|
if (startTime.equals("null") || startTime.equals("")) { |
||||||
|
queryWrapper.lambda().ge(RehearsalPlanEntity::getScheduledStartTime, startTime); |
||||||
|
} |
||||||
|
if (endTime.equals("null") || endTime.equals("")) { |
||||||
|
queryWrapper.lambda().le(RehearsalPlanEntity::getScheduledEndTime, endTime); |
||||||
|
} |
||||||
|
return this.page(Condition.getPage(query), queryWrapper); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue