|
|
|
@ -1,29 +1,38 @@
|
|
|
|
|
package com.hnac.hzims.safeproduct.service.impl; |
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DatePattern; |
|
|
|
|
import com.alibaba.druid.support.json.JSONUtils; |
|
|
|
|
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.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.RehearsalRecordDTO; |
|
|
|
|
import com.hnac.hzims.safeproduct.dto.RehearsalYearDTO; |
|
|
|
|
import com.hnac.hzims.safeproduct.entity.RehearsalRecordEntity; |
|
|
|
|
import com.hnac.hzims.safeproduct.enums.RehearsalStatusEnum; |
|
|
|
|
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 lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
import org.springblade.core.mp.support.Query; |
|
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletOutputStream; |
|
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.math.RoundingMode; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
import java.net.URLEncoder; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -33,6 +42,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
* @date 2023-12-13 |
|
|
|
|
*/ |
|
|
|
|
@Service |
|
|
|
|
@Slf4j |
|
|
|
|
public class RehearsalRecordServiceImpl extends ServiceImpl<RehearsalRecordMapper, RehearsalRecordEntity> implements IRehearsalRecordService { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -127,7 +137,7 @@ public class RehearsalRecordServiceImpl extends ServiceImpl<RehearsalRecordMappe
|
|
|
|
|
* 新增演练 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public boolean saveRehearsal(RehearsalRecordDTO rehearsalRecord) { |
|
|
|
|
public boolean saveRehearsal(RehearsalRecordEntity rehearsalRecord) { |
|
|
|
|
// 获取当月时间(yyyymm)
|
|
|
|
|
String currentMonth = DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()); |
|
|
|
|
// 查询是否存在同月编号
|
|
|
|
@ -149,19 +159,90 @@ public class RehearsalRecordServiceImpl extends ServiceImpl<RehearsalRecordMappe
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
rehearsalRecord.setCode(code); |
|
|
|
|
// DTO转实体类
|
|
|
|
|
RehearsalRecordEntity rehearsalRecordEntity = getStandardRehearsal(rehearsalRecord); |
|
|
|
|
return this.save(rehearsalRecordEntity); |
|
|
|
|
// 参演人数
|
|
|
|
|
String peopleName = rehearsalRecord.getPeopleName(); |
|
|
|
|
if (StringUtils.isNotEmpty(peopleName)) { |
|
|
|
|
int peopleNum = peopleName.split(",").length; |
|
|
|
|
rehearsalRecord.setPeopleNum(peopleNum); |
|
|
|
|
} |
|
|
|
|
return this.save(rehearsalRecord); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 修改演练 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public boolean updateRehearsal(RehearsalRecordDTO rehearsalRecord) { |
|
|
|
|
// DTO转实体类
|
|
|
|
|
RehearsalRecordEntity rehearsalRecordEntity = getStandardRehearsal(rehearsalRecord); |
|
|
|
|
return this.updateById(rehearsalRecordEntity); |
|
|
|
|
public boolean updateRehearsal(RehearsalRecordEntity rehearsalRecord) { |
|
|
|
|
// 参演人数
|
|
|
|
|
String peopleName = rehearsalRecord.getPeopleName(); |
|
|
|
|
if (StringUtils.isNotEmpty(peopleName)) { |
|
|
|
|
int peopleNum = peopleName.split(",").length; |
|
|
|
|
rehearsalRecord.setPeopleNum(peopleNum); |
|
|
|
|
} |
|
|
|
|
return this.updateById(rehearsalRecord); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 演练数据导出 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public void exportRehearsalData(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<RehearsalRecordEntity> rehearsalRecordList = getRehearsalByUnitAndDate(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(); |
|
|
|
|
Set<String> excludeColumnFiledNames = new HashSet<>(); |
|
|
|
|
excludeColumnFiledNames.add("peopleName"); |
|
|
|
|
excludeColumnFiledNames.add("commander"); |
|
|
|
|
excludeColumnFiledNames.add("record"); |
|
|
|
|
excludeColumnFiledNames.add("comment"); |
|
|
|
|
excludeColumnFiledNames.add("rehearsalMethod"); |
|
|
|
|
excludeColumnFiledNames.add("imgPath"); |
|
|
|
|
excludeColumnFiledNames.add("filePath"); |
|
|
|
|
excludeColumnFiledNames.add("id"); |
|
|
|
|
excludeColumnFiledNames.add("createUser"); |
|
|
|
|
excludeColumnFiledNames.add("createDept"); |
|
|
|
|
excludeColumnFiledNames.add("createTime"); |
|
|
|
|
excludeColumnFiledNames.add("updateUser"); |
|
|
|
|
excludeColumnFiledNames.add("updateTime"); |
|
|
|
|
excludeColumnFiledNames.add("status"); |
|
|
|
|
excludeColumnFiledNames.add("isDeleted"); |
|
|
|
|
WriteSheet writeSheet = EasyExcel.writerSheet(1, "演练记录表").head(RehearsalRecordEntity.class) |
|
|
|
|
.excludeColumnFiledNames(excludeColumnFiledNames) |
|
|
|
|
.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()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -191,20 +272,37 @@ public class RehearsalRecordServiceImpl extends ServiceImpl<RehearsalRecordMappe
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取标准演练实体类 |
|
|
|
|
* @param rehearsalRecord 演练记录DTO类 |
|
|
|
|
* @return 演练实体类 |
|
|
|
|
* 根据单位和计划时间查询演练记录 |
|
|
|
|
* @param unit 单位 |
|
|
|
|
* @param startTime 计划开始时间 |
|
|
|
|
* @param endTime 计划结束时间 |
|
|
|
|
* @return 演练记录列表 |
|
|
|
|
*/ |
|
|
|
|
private RehearsalRecordEntity getStandardRehearsal(RehearsalRecordDTO rehearsalRecord) { |
|
|
|
|
// DTO转实体类
|
|
|
|
|
RehearsalRecordEntity rehearsalRecordEntity = new RehearsalRecordEntity(); |
|
|
|
|
BeanUtils.copyProperties(rehearsalRecord, rehearsalRecordEntity); |
|
|
|
|
// 参演人数
|
|
|
|
|
rehearsalRecordEntity.setPeopleNum(rehearsalRecord.getPeople().length); |
|
|
|
|
// 数组转字符串
|
|
|
|
|
rehearsalRecordEntity.setPeopleName(Arrays.toString(rehearsalRecord.getPeople())); |
|
|
|
|
rehearsalRecordEntity.setImgPath(Arrays.toString(rehearsalRecord.getImages())); |
|
|
|
|
rehearsalRecordEntity.setFilePath(Arrays.toString(rehearsalRecord.getFiles())); |
|
|
|
|
return rehearsalRecordEntity; |
|
|
|
|
public List<RehearsalRecordEntity> getRehearsalByUnitAndDate(String unit, String startTime, String endTime) { |
|
|
|
|
LambdaQueryWrapper<RehearsalRecordEntity> queryWrapper = new LambdaQueryWrapper<>(); |
|
|
|
|
if (!unit.equals("null")) { |
|
|
|
|
queryWrapper.eq(RehearsalRecordEntity::getUnit, unit); |
|
|
|
|
} |
|
|
|
|
if (!startTime.equals("null")) { |
|
|
|
|
queryWrapper.ge(RehearsalRecordEntity::getScheduledStartTime, startTime); |
|
|
|
|
} |
|
|
|
|
if (!endTime.equals("null")) { |
|
|
|
|
queryWrapper.le(RehearsalRecordEntity::getScheduledEndTime, endTime); |
|
|
|
|
} |
|
|
|
|
queryWrapper.orderByDesc(RehearsalRecordEntity::getScheduledEndTime); |
|
|
|
|
return this.list(queryWrapper); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 查询时间范围内未开始的演练数据 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public List<RehearsalRecordEntity> getWaitingRehearsalInTimeRange(String startTime, String endTime) { |
|
|
|
|
QueryWrapper<RehearsalRecordEntity> queryWrapper = new QueryWrapper<>(); |
|
|
|
|
queryWrapper.lambda().eq(RehearsalRecordEntity::getRehearsalStatus, RehearsalStatusEnum.WAITING.getValue()) |
|
|
|
|
.ge(RehearsalRecordEntity::getScheduledEndTime, startTime) |
|
|
|
|
.lt(RehearsalRecordEntity::getScheduledEndTime, endTime); |
|
|
|
|
return this.list(queryWrapper); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|