Commit e082728b authored by 鲁鸿波's avatar 鲁鸿波

事故导出优化bug修改,监督检查企业合规率详表开发

parent 9bebd4c8
......@@ -19,9 +19,10 @@ import com.testor.module.accident.model.dto.AccidentReportDelParam;
import com.testor.module.accident.model.dto.AccidentReportDetail;
import com.testor.module.accident.model.req.*;
import com.testor.module.accident.model.resp.*;
import com.testor.module.accident.model.template.AccidentReportDetailTemplate;
import com.testor.module.accident.model.template.BeanConverExtensionUtil;
import com.testor.module.accident.model.vo.AccidentReportVO;
import com.testor.module.accident.service.AccidentReportService;
import com.testor.module.accident.template.AccidentReportDetailTemplate;
import com.testor.module.hazard.model.dto.ReportDetailParam;
import com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam;
import com.testor.module.hazard.model.dto.THazardWorkPlanDTO;
......@@ -319,7 +320,7 @@ public class AccidentReportController extends SuperController {
return baseResponse;
}
@ApiOperation(value = "导出事故信息详情明细", notes = "导出事故信息详情明细")
/*@ApiOperation(value = "导出事故信息详情明细", notes = "导出事故信息详情明细")
@GetMapping(value = "/accidentReportDetailExport")
public BaseResponse<BizGeneralResponse> export(HttpServletResponse response, ReportDetailParam reportDetailParam){
BaseResponse<BizGeneralResponse> baseResponse=new BaseResponse<>();
......@@ -337,6 +338,33 @@ public class AccidentReportController extends SuperController {
baseResponse.setData(
BizGeneralResponse.builder().result(TypeHelper.castToString(true)).build());
return baseResponse;
}*/
@ApiOperation(value = "导出事故信息详情明细", notes = "导出事故信息详情明细")
@GetMapping(value = "/accidentReportDetailExport")
public BaseResponse<BizGeneralResponse> export(HttpServletResponse response, ReportDetailParam reportDetailParam) {
BaseResponse<BizGeneralResponse> baseResponse = new BaseResponse<>();
Page<AccidentReportDetail> accidentReportDetailPage = accidentReportService.selectAccidentReportDetail(reportDetailParam);
if (CollectionUtils.isEmpty(accidentReportDetailPage.getRecords())) {
baseResponse.setData(BizGeneralResponse.builder().result("无事故信息详情明细数据").build());
return baseResponse;
}
// 使用扩展的转换工具
BeanConverExtensionUtil.converAccidentReportDetailList(accidentReportDetailPage.getRecords())
// 设置序号
for (int i = 0; i < accidentReportDetailTemplate.size(); i++) {
accidentReportDetailTemplate.get(i).setNumber(String.valueOf(i + 1));
}
// 导出
EasyExcelUtil.writeExcel(response, "事故信息详情明细", "事故信息详情明细", accidentReportDetailTemplate);
baseResponse.setData(BizGeneralResponse.builder().result("true").build());
return baseResponse;
}
}
package com.testor.module.accident.model.template;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.testor.common.core.utils.StringUtils;
import com.testor.module.accident.model.domain.AccidentPersonnel;
import com.testor.module.accident.model.dto.AccidentReportDetail;
import lombok.Data;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 事故信息详情导出模板
*/
@Data
public class AccidentReportDetailTemplate {
@ExcelProperty("序号")
@ColumnWidth(8)
private String number;
@ExcelProperty("当前机构名称")
@ColumnWidth(20)
private String currentOrgName;
@ExcelProperty("经营部名称")
@ColumnWidth(20)
private String businessDeptName;
@ExcelProperty("大区名称")
@ColumnWidth(15)
private String regionName;
@ExcelProperty("事故发生时间")
@ColumnWidth(20)
private String accidentTime;
@ExcelProperty("事故等级(国家)")
@ColumnWidth(15)
private String accidentLevelCountry;
@ExcelProperty("事故等级(集团)")
@ColumnWidth(15)
private String accidentLevel;
@ExcelProperty("受伤人数")
@ColumnWidth(10)
private String reportCount;
@ExcelProperty("直接经济损失")
@ColumnWidth(15)
private String directEconomicLoss;
@ExcelProperty("损失工作日")
@ColumnWidth(15)
private String lostWorkingDays;
@ExcelProperty("事故类型")
@ColumnWidth(20)
private String accidentType;
@ExcelProperty("涉及集团八大类风险")
@ColumnWidth(30)
private String groupRisk;
@ExcelProperty("涉及危险作业类型")
@ColumnWidth(30)
private String dangerousHomeworkCategory;
@ExcelProperty("受伤部位")
@ColumnWidth(20)
private String injuredArea;
@ExcelProperty("事故详细经过")
@ColumnWidth(40)
private String accidentPassed;
@ExcelProperty("事故直接原因和间接原因")
@ColumnWidth(40)
private String accidentCause;
@ExcelProperty("改善措施")
@ColumnWidth(40)
private String improvements;
@ExcelProperty("人员追责问责情况")
@ColumnWidth(30)
private String personnelAccountabilityStatus;
@ExcelProperty("备注")
@ColumnWidth(30)
private String remarks;
// 人员信息相关字段
@ExcelProperty("人员归属类型")
@ColumnWidth(20)
private String personnelBelongType;
@ExcelProperty("人员年龄")
@ColumnWidth(15)
private String personnelAge;
@ExcelProperty("人员性别")
@ColumnWidth(15)
private String personnelSex;
// 转换方法:从AccidentReportDetail转换为Template
public static AccidentReportDetailTemplate fromAccidentReportDetail(AccidentReportDetail detail) {
if (detail == null) {
return null;
}
AccidentReportDetailTemplate template = new AccidentReportDetailTemplate();
// 复制基本字段
template.setCurrentOrgName(detail.getCurrentOrgName());
template.setBusinessDeptName(detail.getBusinessDeptName());
template.setRegionName(detail.getRegionName());
// 格式化日期
if (detail.getAccidentTime() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
template.setAccidentTime(sdf.format(detail.getAccidentTime()));
}
template.setAccidentLevelCountry(detail.getAccidentLevelCountry());
template.setAccidentLevel(detail.getAccidentLevel());
template.setReportCount(detail.getReportCount() != null ? String.valueOf(detail.getReportCount()) : "0");
template.setDirectEconomicLoss(formatBigDecimal(detail.getDirectEconomicLoss()));
template.setLostWorkingDays(detail.getLostWorkingDays());
template.setAccidentType(detail.getAccidentType());
template.setGroupRisk(detail.getGroupRisk());
template.setDangerousHomeworkCategory(detail.getDangerousHomeworkCategory());
template.setInjuredArea(detail.getInjuredArea());
template.setAccidentPassed(detail.getAccidentPassed());
template.setAccidentCause(detail.getAccidentCause());
template.setImprovements(detail.getImprovements());
template.setPersonnelAccountabilityStatus(detail.getPersonnelAccountabilityStatus());
template.setRemarks(detail.getRemarks());
// 处理人员信息
if (!CollectionUtils.isEmpty(detail.getAccidentPersonnelList())) {
template.setPersonnelBelongType(formatPersonnelBelongType(detail.getAccidentPersonnelList()));
template.setPersonnelAge(formatPersonnelAge(detail.getAccidentPersonnelList()));
template.setPersonnelSex(formatPersonnelSex(detail.getAccidentPersonnelList()));
} else {
template.setPersonnelBelongType("无");
template.setPersonnelAge("无");
template.setPersonnelSex("无");
}
return template;
}
private static String formatBigDecimal(BigDecimal value) {
if (value == null) {
return "0";
}
return value.toString();
}
/**
* 格式化人员归属类型
* 0: 承包商人员, 1: 企业人员
*/
private static String formatPersonnelBelongType(List<AccidentPersonnel> personnelList) {
if (CollectionUtils.isEmpty(personnelList)) {
return "";
}
List<String> belongTypes = new ArrayList<>();
for (AccidentPersonnel person : personnelList) {
String belongType = person.getBelongType();
if (StringUtils.hasText(belongType)) {
if ("0".equals(belongType)) {
belongTypes.add("承包商人员");
} else if ("1".equals(belongType)) {
belongTypes.add("企业人员");
} else {
belongTypes.add(belongType); // 如果是其他值,保持原样
}
}
}
return String.join(", ", belongTypes);
}
/**
* 格式化人员年龄
*/
private static String formatPersonnelAge(List<AccidentPersonnel> personnelList) {
if (CollectionUtils.isEmpty(personnelList)) {
return "";
}
return personnelList.stream()
.map(person -> {
if (person.getAge() != null) {
return String.valueOf(person.getAge());
}
return "";
})
.filter(StringUtils::hasText)
.collect(Collectors.joining(", "));
}
/**
* 格式化人员性别
*/
private static String formatPersonnelSex(List<AccidentPersonnel> personnelList) {
if (CollectionUtils.isEmpty(personnelList)) {
return "";
}
return personnelList.stream()
.map(person -> {
String sex = person.getSex();
if ("0".equals(sex)) {
return "男";
} else if ("1".equals(sex)) {
return "女";
} else {
return sex != null ? sex : "";
}
})
.filter(StringUtils::hasText)
.collect(Collectors.joining(", "));
}
/**
* 批量转换方法
*/
public static List<AccidentReportDetailTemplate> fromAccidentReportDetailList(List<AccidentReportDetail> detailList) {
if (CollectionUtils.isEmpty(detailList)) {
return Collections.emptyList();
}
return detailList.stream()
.map(AccidentReportDetailTemplate::fromAccidentReportDetail)
.collect(Collectors.toList());
}
}
package com.testor.module.accident.model.template;
import com.testor.common.util.BeanConverUtil;
import com.testor.module.accident.model.domain.AccidentPersonnel;
import com.testor.module.accident.model.dto.AccidentReportDetail;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class BeanConverExtensionUtil {
/**
* 转换事故详情列表,并处理人员信息字段
*/
public static List<AccidentReportDetailTemplate> converAccidentReportDetailList(
List<AccidentReportDetail> sourceList) {
if (CollectionUtils.isEmpty(sourceList)) {
return Collections.emptyList();
}
return sourceList.stream()
.map(BeanConverExtensionUtil::converAccidentReportDetail)
.collect(Collectors.toList());
}
/**
* 转换单个事故详情
*/
public static AccidentReportDetailTemplate converAccidentReportDetail(AccidentReportDetail source) {
if (source == null) {
return null;
}
// 使用BeanConverUtil转换基本字段
AccidentReportDetailTemplate template = BeanConverUtil.conver(source, AccidentReportDetailTemplate.class);
// 手动处理日期字段
if (source.getAccidentTime() != null) {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
template.setAccidentTime(sdf.format(source.getAccidentTime()));
}
// 手动处理BigDecimal字段
if (source.getDirectEconomicLoss() != null) {
template.setDirectEconomicLoss(source.getDirectEconomicLoss().toString());
}
// 处理人员信息字段
if (!CollectionUtils.isEmpty(source.getAccidentPersonnelList())) {
template.setPersonnelBelongType(formatPersonnelBelongType(source.getAccidentPersonnelList()));
template.setPersonnelAge(formatPersonnelAge(source.getAccidentPersonnelList()));
template.setPersonnelSex(formatPersonnelSex(source.getAccidentPersonnelList()));
} else {
template.setPersonnelBelongType("无");
template.setPersonnelAge("无");
template.setPersonnelSex("无");
}
return template;
}
private static String formatPersonnelBelongType(List<AccidentPersonnel> personnelList) {
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(personnelList)) {
return "";
}
List<String> belongTypes = new ArrayList<>();
for (AccidentPersonnel person : personnelList) {
String belongType = person.getBelongType();
if (com.testor.common.core.utils.StringUtils.hasText(belongType)) {
if ("0".equals(belongType)) {
belongTypes.add("承包商人员");
} else if ("1".equals(belongType)) {
belongTypes.add("企业人员");
} else {
belongTypes.add(belongType); // 如果是其他值,保持原样
}
}
}
return String.join(", ", belongTypes);
}
private static String formatPersonnelAge(List<AccidentPersonnel> personnelList) {
return personnelList.stream()
.map(person -> person.getAge() != null ? String.valueOf(person.getAge()) : "")
.filter(StringUtils::hasText)
.collect(Collectors.joining(", "));
}
private static String formatPersonnelSex(List<AccidentPersonnel> personnelList) {
return personnelList.stream()
.map(person -> {
String sex = person.getSex();
if ("0".equals(sex)) {
return "男";
} else if ("1".equals(sex)) {
return "女";
} else {
return sex != null ? sex : "";
}
})
.filter(StringUtils::hasText)
.collect(Collectors.joining(", "));
}
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import com.testor.module.hazard.model.domain.THazardWorkPlanCheck;
import com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO;
import com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckComplianceStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckDetail;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemCountStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO;
import com.tongtech.tfw.backend.common.models.supers.SuperDao;
......@@ -128,4 +129,41 @@ public interface THazardWorkPlanCheckDao extends SuperDao<THazardWorkPlanCheck>
*/
Page<HazardWorkPlanCheckProblemCountStatisticsVO> corporateComplianceRate(@Param("page") IPage page,@Param("param") THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
/**
* 企业合规率详情之危险作业状态统计
* @param tHazardWorkPlanCheckParam
* @return
*/
List<HazardWorkPlanCheckDetail> workStatusStatistics(@Param("param") THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
/**
* 企业合规率详情之组织机构类型抽查率/合规率 统计
* @param tHazardWorkPlanCheckParam
* @return
*/
List<HazardWorkPlanCheckDetail> isRentSpotCheckStatistics(@Param("param") THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
/**
* 企业合规率详情之组织机构类型抽查率/合规率 统计
* @param tHazardWorkPlanCheckParam
* @return
*/
List<HazardWorkPlanCheckDetail> comprehensiveStatistics(@Param("param") THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
/**
* 企业合规率详情之作业级别合规率统计
* @param tHazardWorkPlanCheckParam
* @return
*//*
List<HazardWorkPlanCheckDetail> complianceRateStatistics(@Param("param") THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
*//**
* 企业合规率详情之组织机构类型合规率统计
* @param tHazardWorkPlanCheckParam
* @return
*//*
List<HazardWorkPlanCheckDetail> isRentComplianceRateStatistics(@Param("param") THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);*/
}
package com.testor.module.hazard.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
@Data
public class HazardWorkPlanCheckDetailResult {
@ApiModelProperty("大区")
private String regionName;
@ApiModelProperty("经营部")
private String businessDeptName;
@ApiModelProperty("企业名称")
private String currentOrgName;
@ApiModelProperty("合规率")
private Map<String, Double> complianceRateStats;
@ApiModelProperty("抽查率")
private Map<String, Double> spotCheckRateStats;
@ApiModelProperty("危险作业状态")
private Map<String, Integer> workStatusStats; // 作业状态统计
}
package com.testor.module.hazard.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class HazardWorkPlanCheckDetail {
@ApiModelProperty(value = "大区名称")
private String regionName;
@ApiModelProperty(value = "经营部")
private String businessDeptName;
@ApiModelProperty(value = "企业名称")
private String currentOrgName;
@ApiModelProperty(value = "合规率之全部作业比例")
private String totalProblemCount;
@ApiModelProperty(value = "企业性质(企业/相关方)")
private String orgTypeName;
@ApiModelProperty(value = "合规率之企业作业比例")
private String enterpriseComplianceRate;
@ApiModelProperty(value = "合规率之相关方作业比例")
private String relatedPartyComplianceRate;
@ApiModelProperty(value = "作业级别名称")
private String workLevelNameComplianceRate;
@ApiModelProperty(value = "合规率作业级别比例")
private String workLevelComplianceRate;
@ApiModelProperty(value = "抽查率作业级别比例")
private String workLevelCheckRate;
@ApiModelProperty(value = "危险作业状态之问题名称")
private String problemName;
@ApiModelProperty(value = "危险作业状态之问题数量")
private Integer problemCount;
@ApiModelProperty(value = "抽查率之企业作业比例")
private String enterpriseCheckRate;
@ApiModelProperty(value = "抽查率之相关方作业比例")
private String relatedPartySpotCheckRate;
}
......@@ -9,6 +9,7 @@ import com.testor.module.hazard.model.dto.HazardWorkPlanCheckEnterpriseComplianc
import com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO;
import com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckComplianceStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckDetail;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemCountStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO;
import com.testor.module.safe.model.dto.TSafeHazardOrgParam;
......@@ -132,4 +133,13 @@ public interface THazardWorkPlanCheckService extends SuperService<THazardWorkPla
*/
Page<HazardWorkPlanCheckProblemCountStatisticsVO> corporateComplianceRate(THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
/**
* 危险作业详表
* @param tHazardWorkPlanCheckParam
* @return
*/
Page<HazardWorkPlanCheckDetail> detailsOfHazardousOperations(THazardWorkPlanCheckParam tHazardWorkPlanCheckParam);
}
......@@ -22,10 +22,7 @@ import com.testor.module.hazard.model.domain.THazardWorkPlanCheck;
import com.testor.module.hazard.model.dto.HazardWorkPlanCheckEnterpriseComplianceDto;
import com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO;
import com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckComplianceStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemCountStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckVO;
import com.testor.module.hazard.model.vo.*;
import com.testor.module.hazard.service.THazardWorkPlanCheckService;
import com.testor.module.iam.service.SysUserService;
import com.testor.module.notice.dao.TSysOrgDao;
......@@ -406,6 +403,11 @@ public class THazardWorkPlanCheckServiceImpl extends SuperServiceImpl<THazardWor
return baseMapper.corporateComplianceRate(resultPage,tHazardWorkPlanCheckParam);
}
@Override
public Page<HazardWorkPlanCheckDetail> detailsOfHazardousOperations(THazardWorkPlanCheckParam tHazardWorkPlanCheckParam) {
return null;
}
public String montageStartTime(String startTime){
if(startTime !=null && !"".equals(startTime) ){
startTime = startTime+" 00:00:00";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment