Commit 856f0a73 authored by 鲁鸿波's avatar 鲁鸿波

危险作业统计开发

parent f2b6120b
......@@ -551,5 +551,5 @@ INSERT INTO "t_sys_dict_data" ("dict_data_id", "dict_id", "dict_key", "dict_valu
INSERT INTO "t_sys_dict_data" ("dict_data_id", "dict_id", "dict_key", "dict_value", "tree_sort", "status", "create_by", "create_date", "update_by", "update_date", "remarks", "parent_id", "parent_ids") VALUES ('27', '4', '11', '不涉及', '11', '0', NULL, '2026-01-09 15:07:41', NULL, '2026-01-09 15:07:41', NULL, NULL, NULL);
INSERT INTO "t_sys_dict_type" ("dict_id", "dict_name", "dict_type", "is_sys", "status", "create_by", "create_date", "update_by", "update_date", "remarks", "parent_id", "parent_ids", "tree_sort", "cascaded") VALUES ('5', '事故受伤部位', 'injured_area', NULL, NULL, NULL, '2026-01-09 15:10:48', NULL, '2026-01-09 15:10:48', NULL, NULL, NULL, NULL, NULL);
INSERT INTO "t_sys_dict_type" ("dict_id", "dict_name", "dict_type", "is_sys", "status", "create_by", "create_date", "update_by", "update_date", "remarks", "parent_id", "parent_ids", "tree_sort", "cascaded") VALUES ('5', '事故受伤部位', 'injured_area', '1', '0', NULL, '2026-01-09 15:10:48', NULL, '2026-01-09 15:10:48', NULL, NULL, NULL, NULL, NULL);
INSERT INTO "t_sys_dict_data" ("dict_data_id", "dict_id", "dict_key", "dict_value", "tree_sort", "status", "create_by", "create_date", "update_by", "update_date", "remarks", "parent_id", "parent_ids") VALUES ('28', '5', '1', '手臂', '1', '0', NULL, '2026-01-09 15:11:09', NULL, '2026-01-09 15:11:09', NULL, NULL, NULL);
......@@ -11,7 +11,9 @@ import com.testor.biz.util.CacheDicUtils;
import com.testor.common.constant.DicTypeCode;
import com.testor.common.constant.ProcessStatus;
import com.testor.common.model.UpdateProcessStatusReq;
import com.testor.common.util.BeanConverUtil;
import com.testor.common.util.EnumUtil;
import com.testor.common.util.excel.EasyExcelUtil;
import com.testor.module.accident.model.domain.AccidentReport;
import com.testor.module.accident.model.dto.AccidentReportDelParam;
import com.testor.module.accident.model.dto.AccidentReportDetail;
......@@ -19,16 +21,20 @@ import com.testor.module.accident.model.req.*;
import com.testor.module.accident.model.resp.*;
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;
import com.testor.module.hazard.model.dto.THazardWorkPlanParam;
import com.testor.module.hazard.model.template.THazardWorkPlanTemplate;
import com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemCountStatisticsVO;
import com.tongtech.tfw.backend.common.biz.constants.BizConstants;
import com.tongtech.tfw.backend.common.biz.models.BaseResponse;
import com.tongtech.tfw.backend.common.biz.models.BaseResponseList;
import com.tongtech.tfw.backend.common.biz.models.BizGeneralResponse;
import com.tongtech.tfw.backend.common.models.supers.SuperController;
import com.tongtech.tfw.backend.core.helper.StringHelper;
import com.tongtech.tfw.backend.core.helper.TypeHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
......@@ -40,6 +46,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
......@@ -312,4 +319,24 @@ public class AccidentReportController extends SuperController {
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 (org.apache.commons.collections4.CollectionUtils.isEmpty(accidentReportDetailPage.getRecords())) {
baseResponse.setData(BizGeneralResponse.builder().result("无事故信息详情明细数据").build());
return baseResponse;
}
List<AccidentReportDetailTemplate> accidentReportDetailTemplate = BeanConverUtil.converList(accidentReportDetailPage.getRecords(), AccidentReportDetailTemplate.class);
int index = 1;
for(AccidentReportDetailTemplate template : accidentReportDetailTemplate){
template.setNumber(String.valueOf(index++));
}
EasyExcelUtil.writeExcel(response, "事故信息详情明细", "事故信息详情明细", accidentReportDetailTemplate);
baseResponse.setData(
BizGeneralResponse.builder().result(TypeHelper.castToString(true)).build());
return baseResponse;
}
}
package com.testor.module.accident.template;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.testor.module.accident.model.domain.AccidentPersonnel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 事故统计详情表
*/
@Data
public class AccidentReportDetailTemplate {
@ExcelProperty("序号")
private String number;
@ExcelProperty("序号")
private String id;
@ExcelProperty("序号")
private String currentOrgName;
@ExcelProperty("序号")
private String businessDeptName;
@ExcelProperty("序号")
private String regionName;
/**
* 事故发生时间
*/
@ExcelProperty("事故发生时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date accidentTime;
/**
* 事故等级(国家)(字典:accident_level_country)
*/
@ExcelProperty("事故等级(国家)(字典:accident_level_country)")
private String accidentLevelCountry;
@ExcelProperty("事故等级(集团)")
private String accidentLevel;
@ExcelProperty("受伤人数")
private Integer reportCount;
/**
* 直接经济损失
*/
@ExcelProperty("直接经济损失")
private BigDecimal directEconomicLoss;
/**
* 损失工作日
*/
@ExcelProperty("损失工作日")
@TableField("lost_working_days")
private String lostWorkingDays;
/**
* 人员信息
*/
@ExcelProperty("人员信息")
private List<AccidentPersonnel> accidentPersonnelList;
@ExcelProperty("事故类型")
private String accidentType;
/**
* 涉及集团八大类风险(多选 字典:group_risk)
*/
@ExcelProperty("多选 涉及集团八大类风险(字典:group_risk)")
private String groupRiskDetail;
/**
* 涉及危险作业类型(多选 字典:dangerous_homework_category)
*/
@ExcelProperty("多选 涉及危险作业类型(字典:dangerous_homework_category)")
private String dangerousHomeworkCategoryDetail;
/**
* 受伤部位(多选 字典:injured_area)
*/
@ExcelProperty("多选 受伤部位(字典:injured_area)")
private String injuredAreaDetail;
/**
* 事故详细经过
*/
@ExcelProperty("事故详细经过")
private String accidentPassed;
/**
* 事故直接原因和间接原因
*/
@ExcelProperty("事故直接原因和间接原因")
private String accidentCause;
/**
* 改善措施
*/
@ExcelProperty("改善措施")
private String improvements;
/**
* 事故人员追责问责情况
*/
@ExcelProperty("事故人员追责问责情况")
private String personnelAccountabilityStatus;
/**
* 备注
*/
@ExcelProperty("备注")
private String remarks;
}
package com.testor.module.hazard.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.testor.module.accident.model.dto.AccidentReportDetail;
import com.testor.module.accident.template.AccidentReportDetailTemplate;
import com.testor.module.hazard.model.dto.*;
import com.testor.module.hazard.model.template.HazardWorkPlanStatisticsTemplate;
import com.tongtech.tfw.backend.common.biz.models.BaseResponse;
import com.testor.common.core.enums.BaseStatusEnum;
import com.testor.common.util.BeanConverUtil;
import com.testor.common.util.excel.EasyExcelUtil;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsDto;
import com.testor.module.hazard.model.dto.THazardWorkPlanDTO;
import com.testor.module.hazard.model.dto.THazardWorkPlanParam;
import com.testor.module.hazard.model.template.THazardWorkPlanTemplate;
import com.testor.module.hazard.model.vo.HazardWorkPlanStatisticsVO;
import com.testor.module.hazard.service.HazardWorkPlanStatisticsService;
import com.testor.module.hazard.service.THazardWorkPlanService;
import com.tongtech.tfw.backend.common.biz.models.BaseResponseList;
import com.tongtech.tfw.backend.common.biz.models.BizGeneralResponse;
import com.tongtech.tfw.backend.common.context.ContextUtils;
import com.tongtech.tfw.backend.common.models.supers.SuperController;
......@@ -152,4 +155,53 @@ public class HazardWorkPlanStatisticsController extends SuperController {
BizGeneralResponse.builder().result(TypeHelper.castToString(true)).build());
return baseResponse;
}
@GetMapping("/selectHazardWorkPlanStatistics")
@ApiOperation(value = "危险作业类型统计分布")
public BaseResponse<List<THazardWorkPlanStatistics>> selectHazardWorkPlanStatistics(HazardWorkPlanStatisticsDto param) {
BaseResponse<List<THazardWorkPlanStatistics>> response = new BaseResponse<>();
if(StringHelper.isEmpty(param.getOrgId())){
param.setOrgId(ContextUtils.getLoginUser().getOrgId());
}
List<THazardWorkPlanStatistics> dataList = hazardWorkPlanStatisticsService.selectHazardWorkPlanStatistics(param);
response.setData(dataList);
return response;
}
@GetMapping("/selectWorkStatusDetailStatistics")
@ApiOperation(value = "危险作业详情统计")
public BaseResponse<BaseResponseList<HazardWorkPlanStatisticsResult>> selectWorkStatusDetailStatistics(HazardWorkPlanStatisticsDto param) {
BaseResponse<BaseResponseList<HazardWorkPlanStatisticsResult>> response = new BaseResponse<>();
if(StringHelper.isEmpty(param.getOrgId())){
param.setOrgId(ContextUtils.getLoginUser().getOrgId());
}
BaseResponse<BaseResponseList<HazardWorkPlanStatisticsResult>>baseResponse=new BaseResponse<>();
Page<HazardWorkPlanStatisticsResult> resultList= hazardWorkPlanStatisticsService.selectWorkStatusDetailStatistics(param);
BaseResponseList<HazardWorkPlanStatisticsResult> baseResponseList=new BaseResponseList<>();
baseResponseList.setData(resultList.getRecords());
baseResponseList.setTotal(resultList.getTotal());
baseResponse.setData(baseResponseList);
return baseResponse;
}
@ApiOperation(value = "导出危险作业详情统计", notes = "导出危险作业详情统计")
@GetMapping(value = "/selectWorkStatusDetailStatisticsExport")
public BaseResponse<BizGeneralResponse> selectWorkStatusDetailStatisticsExport(HttpServletResponse response, HazardWorkPlanStatisticsDto param){
BaseResponse<BizGeneralResponse> baseResponse=new BaseResponse<>();
List<HazardWorkPlanStatisticsTemplate> hazardWorkPlanStatisticsTemplatePage = hazardWorkPlanStatisticsService.exportCompleteStatistics(param);
if (org.apache.commons.collections4.CollectionUtils.isEmpty(hazardWorkPlanStatisticsTemplatePage)) {
baseResponse.setData(BizGeneralResponse.builder().result("无危险作业详情数据").build());
return baseResponse;
}
List<HazardWorkPlanStatisticsTemplate> accidentReportDetailTemplate = BeanConverUtil.converList(hazardWorkPlanStatisticsTemplatePage, HazardWorkPlanStatisticsTemplate.class);
int index = 1;
for(HazardWorkPlanStatisticsTemplate template : hazardWorkPlanStatisticsTemplatePage){
template.setNumber(String.valueOf(index++));
}
EasyExcelUtil.writeExcel(response, "危险作业详情明细", "危险作业详情明细", accidentReportDetailTemplate);
baseResponse.setData(
BizGeneralResponse.builder().result(TypeHelper.castToString(true)).build());
return baseResponse;
}
}
package com.testor.module.hazard.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics;
import com.testor.module.hazard.model.dto.THazardWorkPlanStatistics;
import com.testor.module.hazard.model.vo.HazardWorkPlanStatisticsVO;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsDto;
import org.apache.ibatis.annotations.Param;
......@@ -43,4 +47,41 @@ public interface HazardWorkPlanStatisticsDao {
* @return
*/
public List<HazardWorkPlanStatisticsVO> statOperatorNum(@Param("query") HazardWorkPlanStatisticsDto param);
/**
* 危险作业类型统计图表
* @param hazardWorkPlanStatisticsDto
* @return
*/
List<THazardWorkPlanStatistics> selectHazardWorkPlanStatistics(@Param("query") HazardWorkPlanStatisticsDto hazardWorkPlanStatisticsDto);
/**
* 危险作业详情基础统计
* @param query
* @return
*/
List<THazardWorkPlanDetailStatistics> workBasicDetailStatistics(@Param("query") HazardWorkPlanStatisticsDto query);
/**
* 危险作业详情类别统计
* @param query
* @return
*/
List<THazardWorkPlanDetailStatistics> workTypeDetailStatistics(@Param("query") HazardWorkPlanStatisticsDto query);
/**
* 危险作业详情级别统计
* @param query
* @return
*/
List<THazardWorkPlanDetailStatistics> workLevelDetailStatistics(@Param("query") HazardWorkPlanStatisticsDto query);
/**
* 危险作业详情状态统计
* @param query
* @return
*/
List<THazardWorkPlanDetailStatistics> workStatusDetailStatistics(@Param("query") HazardWorkPlanStatisticsDto query);
}
......@@ -3,8 +3,10 @@ package com.testor.module.hazard.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.testor.module.hazard.model.domain.THazardWorkPlan;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsDto;
import com.testor.module.hazard.model.dto.THazardWorkPlanParam;
import com.testor.module.hazard.model.dto.THazardWorkPlanRiverside;
import com.testor.module.hazard.model.dto.THazardWorkPlanStatistics;
import com.testor.module.partner.model.dto.TJobStatisticsParam;
import com.testor.module.partner.model.vo.RegionalStatisticsVO;
import com.tongtech.tfw.backend.common.models.supers.SuperDao;
......@@ -73,4 +75,6 @@ public interface THazardWorkPlanDao extends SuperDao<THazardWorkPlan>
*/
List<RegionalStatisticsVO> selectWorkTypeCount(@Param("tJobStatisticsParam") TJobStatisticsParam tJobStatisticsParam);
}
......@@ -47,4 +47,10 @@ public class HazardWorkPlanStatisticsDto {
*/
@ApiModelProperty(value = "单位id")
private String orgId;
@ApiModelProperty(value = "每页数量")
private Integer size;
@ApiModelProperty(value = "当前页数")
private Integer current;
}
package com.testor.module.hazard.model.dto;
import lombok.Data;
import java.util.Map;
@Data
public class HazardWorkPlanStatisticsResult {
private String regionName; // 大区
private String businessDeptName; // 经营部
private String currentOrgName; // 企业名称
// 基础数量统计
private Integer workCount; // 危险作业总量
private Integer ownCount; // 自有员工作业数量
private Integer stakeholderCount; // 相关方作业数量
// 分类统计
private Map<String, Integer> workTypeStats; // 作业类别统计 <类别名称, 数量>
private Map<String, Integer> workLevelStats; // 作业级别统计 <级别名称, 数量>
private Map<String, Integer> workStatusStats; // 作业状态统计 <状态名称, 数量>
}
package com.testor.module.hazard.model.dto;
import lombok.Data;
import java.util.List;
@Data
public class HazardWorkPlanStatisticsResultVO {
private String regionName;
private String businessDeptName;
private String currentOrgName;
private Integer workCount;
private Integer ownCount;
private Integer stakeholderCount;
private List<WorkStatItem> workTypeStats; // 作业类别统计列表
private List<WorkStatItem> workLevelStats; // 作业级别统计列表
private List<WorkStatItem> workStatusStats; // 作业状态统计列表
}
package com.testor.module.hazard.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class THazardWorkPlanDetailStatistics {
@ApiModelProperty(value = "当前机构名称")
private String currentOrgName;
@ApiModelProperty(value = "经营部名称")
private String businessDeptName;
@ApiModelProperty(value = "大区名称")
private String regionName;
@ApiModelProperty(value = "危险作业总量")
private Integer workCount;
@ApiModelProperty(value = "自有员工作业数量")
private Integer ownCount;
@ApiModelProperty(value = "相关方作业数量")
private Integer stakeholderCount;
@ApiModelProperty(value = "作业类型")
private String workType;
@ApiModelProperty(value = "作业类型数量")
private Integer workTypeCount;
@ApiModelProperty(value = "作业级别")
private String workLevel;
@ApiModelProperty(value = "作业级别数量")
private Integer workLevelCount;
@ApiModelProperty(value = "作业状态")
private String workStatus;
@ApiModelProperty(value = "作业状态数量")
private Integer workStatusCount;
}
package com.testor.module.hazard.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class THazardWorkPlanStatistics {
/**
* 作业类型
*/
@ApiModelProperty(value = "作业类型")
private String workType;
/**
* 作业级别
*/
@ApiModelProperty(value = "作业级别")
private String workLevel;
/**
* 作业数量
*/
@ApiModelProperty(value = "作业数量")
private Integer count;
}
package com.testor.module.hazard.model.dto;
import lombok.Data;
@Data
public class WorkStatItem {
private String name; // 类别/级别/状态名称
private Integer count; // 数量
}
package com.testor.module.hazard.model.template;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class HazardWorkPlanStatisticsTemplate {
@ExcelProperty("序号")
private String number;
@ExcelProperty("大区")
private String regionName;
@ExcelProperty("经营部")
private String businessDeptName;
@ExcelProperty("企业名称")
private String currentOrgName;
@ExcelProperty("危险作业总量")
private Integer workCount;
@ExcelProperty("自有员工作业数量")
private Integer ownCount;
@ExcelProperty("相关方作业数量")
private Integer stakeholderCount;
// ============== 作业类别统计 ==============
@ExcelProperty("进仓作业")
private Integer workTypeIn;
@ExcelProperty("出仓作业")
private Integer workTypeOut;
@ExcelProperty("动火作业")
private Integer workTypeFire;
@ExcelProperty("有限空间作业")
private Integer workTypeLimitedSpace;
@ExcelProperty("吊装作业")
private Integer workTypeHoisting;
@ExcelProperty("高处作业")
private Integer workTypeHigh;
@ExcelProperty("临时用电作业")
private Integer workTypeTempElectricity;
@ExcelProperty("动土作业")
private Integer workTypeExcavation;
@ExcelProperty("断路作业")
private Integer workTypeRoadClosure;
@ExcelProperty("环流熏蒸作业")
private Integer workTypeCirculationFumigation;
@ExcelProperty("熏蒸作业")
private Integer workTypeFumigation;
@ExcelProperty("平仓作业")
private Integer workTypeClosing;
@ExcelProperty("筒仓清仓作业")
private Integer workTypeSiloCleaning;
@ExcelProperty("液氨接卸作业")
private Integer workTypeLiquidAmmonia;
@ExcelProperty("未知类别")
private Integer workTypeUnknown;
// ============== 作业级别统计 ==============
@ExcelProperty("高度危险")
private Integer workLevelHigh;
@ExcelProperty("较大危险")
private Integer workLevelMedium;
@ExcelProperty("一般危险")
private Integer workLevelLow;
@ExcelProperty("未知级别")
private Integer workLevelUnknown;
// ============== 作业状态统计 ==============
@ExcelProperty("技术交底")
private Integer workStatusTechBriefing;
@ExcelProperty("草稿")
private Integer workStatusDraft;
@ExcelProperty("已关闭")
private Integer workStatusClosed;
@ExcelProperty("作业前(条件确认)")
private Integer workStatusPreCondition;
@ExcelProperty("作业前(风险分析)")
private Integer workStatusPreRiskAnalysis;
@ExcelProperty("已超时自动取消")
private Integer workStatusTimeoutCancel;
@ExcelProperty("已取消")
private Integer workStatusCancelled;
@ExcelProperty("作业前(许可证)")
private Integer workStatusPreLicense;
@ExcelProperty("未知状态")
private Integer workStatusUnknown;
}
package com.testor.module.hazard.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsDto;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsResult;
import com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics;
import com.testor.module.hazard.model.dto.THazardWorkPlanStatistics;
import com.testor.module.hazard.model.template.HazardWorkPlanStatisticsTemplate;
import com.testor.module.hazard.model.vo.HazardWorkPlanStatisticsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -40,4 +47,26 @@ public interface HazardWorkPlanStatisticsService {
* @return
*/
public List<HazardWorkPlanStatisticsVO> statOperatorNum(HazardWorkPlanStatisticsDto param);
/**
* 危险作业类型统计图表
* @param hazardWorkPlanStatisticsDto
* @return
*/
List<THazardWorkPlanStatistics> selectHazardWorkPlanStatistics(HazardWorkPlanStatisticsDto hazardWorkPlanStatisticsDto);
/**
* 危险作业详情统计
* @param query
* @return
*/
Page<HazardWorkPlanStatisticsResult> selectWorkStatusDetailStatistics(HazardWorkPlanStatisticsDto query); // Changed from List to Page
/**
* 危险作业详情统计导出
* @param query
* @return
*/
List<HazardWorkPlanStatisticsTemplate> exportCompleteStatistics(HazardWorkPlanStatisticsDto query);
}
......@@ -135,4 +135,7 @@ public interface THazardWorkPlanService extends SuperService<THazardWorkPlan> {
*/
Integer unfinishedCount(List<String> orgIds);
}
package com.testor.module.hazard.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.testor.biz.sys.dict.data.dao.SysDictDataDao;
import com.testor.biz.sys.dict.data.service.SysDictDataService;
import com.testor.common.core.utils.StringUtils;
import com.testor.module.hazard.dao.HazardWorkPlanStatisticsDao;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsDto;
import com.testor.module.hazard.model.dto.HazardWorkPlanStatisticsResult;
import com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics;
import com.testor.module.hazard.model.dto.THazardWorkPlanStatistics;
import com.testor.module.hazard.model.template.HazardWorkPlanStatisticsTemplate;
import com.testor.module.hazard.model.vo.HazardWorkPlanStatisticsVO;
import com.testor.module.hazard.service.HazardWorkPlanStatisticsService;
import com.testor.module.sys.service.NewSysDictDataService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
@Service
public class HazardWorkPlanStatisticsServiceImpl implements HazardWorkPlanStatisticsService {
@Autowired
private HazardWorkPlanStatisticsDao hazardWorkPlanStatisticsDao;
@Autowired
private NewSysDictDataService dictDataService;
/**
* 危险作业分布统计,根据单位
*
......@@ -68,4 +81,386 @@ public class HazardWorkPlanStatisticsServiceImpl implements HazardWorkPlanStatis
public List<HazardWorkPlanStatisticsVO> statOperatorNum(HazardWorkPlanStatisticsDto param) {
return hazardWorkPlanStatisticsDao.statOperatorNum(param);
}
@Override
public List<THazardWorkPlanStatistics> selectHazardWorkPlanStatistics(HazardWorkPlanStatisticsDto hazardWorkPlanStatisticsDto) {
return hazardWorkPlanStatisticsDao.selectHazardWorkPlanStatistics(hazardWorkPlanStatisticsDto);
}
@Override
public Page<HazardWorkPlanStatisticsResult> selectWorkStatusDetailStatistics(HazardWorkPlanStatisticsDto query) {
// 0. 获取所有字典值
Map<String, List<String>> allDictValues = getAllDictValues();
// 1. 执行四个独立的查询
List<THazardWorkPlanDetailStatistics> workBasicDetailStatistics = hazardWorkPlanStatisticsDao.workBasicDetailStatistics(query);
List<THazardWorkPlanDetailStatistics> workTypeDetailStatistics = hazardWorkPlanStatisticsDao.workTypeDetailStatistics(query);
List<THazardWorkPlanDetailStatistics> workLevelDetailStatistics = hazardWorkPlanStatisticsDao.workLevelDetailStatistics(query);
List<THazardWorkPlanDetailStatistics> workStatusDetailStatistics = hazardWorkPlanStatisticsDao.workStatusDetailStatistics(query);
// 2. 创建结果列表
List<HazardWorkPlanStatisticsResult> resultList = new ArrayList<>();
// 3. 构建企业键值映射
Map<String, HazardWorkPlanStatisticsResult> resultMap = new HashMap<>();
// 3.1 处理基础数量统计
for (THazardWorkPlanDetailStatistics basicStat : workBasicDetailStatistics) {
String key = getOrgKey(basicStat.getRegionName(), basicStat.getBusinessDeptName(), basicStat.getCurrentOrgName());
HazardWorkPlanStatisticsResult result = new HazardWorkPlanStatisticsResult();
result.setRegionName(basicStat.getRegionName());
result.setBusinessDeptName(basicStat.getBusinessDeptName());
result.setCurrentOrgName(basicStat.getCurrentOrgName());
result.setWorkCount(basicStat.getWorkCount());
result.setOwnCount(basicStat.getOwnCount());
result.setStakeholderCount(basicStat.getStakeholderCount());
// 预初始化所有字典值为0
result.setWorkTypeStats(initializeDictStats(allDictValues.get("workType")));
result.setWorkLevelStats(initializeDictStats(allDictValues.get("workLevel")));
result.setWorkStatusStats(initializeDictStats(allDictValues.get("workStatus")));
resultMap.put(key, result);
}
// 3.2 处理作业类别统计
for (THazardWorkPlanDetailStatistics typeStat : workTypeDetailStatistics) {
String key = getOrgKey(typeStat.getRegionName(), typeStat.getBusinessDeptName(), typeStat.getCurrentOrgName());
HazardWorkPlanStatisticsResult result = resultMap.get(key);
if (result != null) {
String workType = typeStat.getWorkType() != null ? typeStat.getWorkType() : "未知类别";
Integer count = typeStat.getWorkTypeCount() != null ? typeStat.getWorkTypeCount() : 0;
// 如果字典值不在预定义列表中,添加到字典值列表
if (!result.getWorkTypeStats().containsKey(workType)) {
result.getWorkTypeStats().put(workType, 0);
}
result.getWorkTypeStats().put(workType, count);
}
}
// 3.3 处理作业级别统计
for (THazardWorkPlanDetailStatistics levelStat : workLevelDetailStatistics) {
String key = getOrgKey(levelStat.getRegionName(), levelStat.getBusinessDeptName(), levelStat.getCurrentOrgName());
HazardWorkPlanStatisticsResult result = resultMap.get(key);
if (result != null) {
String workLevel = levelStat.getWorkLevel() != null ? levelStat.getWorkLevel() : "未知级别";
Integer count = levelStat.getWorkLevelCount() != null ? levelStat.getWorkLevelCount() : 0;
// 如果字典值不在预定义列表中,添加到字典值列表
if (!result.getWorkLevelStats().containsKey(workLevel)) {
result.getWorkLevelStats().put(workLevel, 0);
}
result.getWorkLevelStats().put(workLevel, count);
}
}
// 3.4 处理作业状态统计
for (THazardWorkPlanDetailStatistics statusStat : workStatusDetailStatistics) {
String key = getOrgKey(statusStat.getRegionName(), statusStat.getBusinessDeptName(), statusStat.getCurrentOrgName());
HazardWorkPlanStatisticsResult result = resultMap.get(key);
if (result != null) {
String workStatus = statusStat.getWorkStatus() != null ? statusStat.getWorkStatus() : "未知状态";
Integer count = statusStat.getWorkStatusCount() != null ? statusStat.getWorkStatusCount() : 0;
// 如果字典值不在预定义列表中,添加到字典值列表
if (!result.getWorkStatusStats().containsKey(workStatus)) {
result.getWorkStatusStats().put(workStatus, 0);
}
result.getWorkStatusStats().put(workStatus, count);
}
}
// 3.5 确保所有预定义字典值都存在(即使没有数据也显示为0)
for (HazardWorkPlanStatisticsResult result : resultMap.values()) {
ensureAllDictValuesPresent(result, allDictValues);
}
// 4. 将Map转换为List
resultList.addAll(resultMap.values());
// 5. 排序(按组织层级)
resultList.sort((a, b) -> {
int regionCompare = StringUtils.compare(a.getRegionName(), b.getRegionName());
if (regionCompare != 0) return regionCompare;
int deptCompare = StringUtils.compare(a.getBusinessDeptName(), b.getBusinessDeptName());
if (deptCompare != 0) return deptCompare;
return StringUtils.compare(a.getCurrentOrgName(), b.getCurrentOrgName());
});
// 6. 手动分页处理
int total = resultList.size();
int pageSize = query.getSize();
int currentPage = query.getCurrent();
// 计算分页起始和结束索引
int startIndex = (currentPage - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, total);
Page<HazardWorkPlanStatisticsResult> page = new Page<>(currentPage, pageSize);
// 如果起始索引超出范围,返回空列表
if (startIndex >= total) {
page.setRecords(new ArrayList<>());
} else {
// 获取当前页的数据
List<HazardWorkPlanStatisticsResult> pageRecords = resultList.subList(startIndex, endIndex);
page.setRecords(pageRecords);
}
// 7. 设置分页信息
page.setTotal(total);
page.setPages((total + pageSize - 1) / pageSize); // 计算总页数
return page;
}
/**
* 初始化字典统计,所有值设为0
*/
private Map<String, Integer> initializeDictStats(List<String> dictValues) {
if (dictValues == null) {
return new HashMap<>();
}
Map<String, Integer> stats = new LinkedHashMap<>();
for (String dictValue : dictValues) {
stats.put(dictValue, 0);
}
return stats;
}
/**
* 确保所有预定义字典值都存在
*/
private void ensureAllDictValuesPresent(HazardWorkPlanStatisticsResult result, Map<String, List<String>> allDictValues) {
if (result == null || allDictValues == null) return;
// 确保作业类别字典值完整
if (allDictValues.containsKey("workType")) {
for (String dictValue : allDictValues.get("workType")) {
result.getWorkTypeStats().putIfAbsent(dictValue, 0);
}
}
// 确保作业级别字典值完整
if (allDictValues.containsKey("workLevel")) {
for (String dictValue : allDictValues.get("workLevel")) {
result.getWorkLevelStats().putIfAbsent(dictValue, 0);
}
}
// 确保作业状态字典值完整
if (allDictValues.containsKey("workStatus")) {
for (String dictValue : allDictValues.get("workStatus")) {
result.getWorkStatusStats().putIfAbsent(dictValue, 0);
}
}
}
private String getOrgKey(String regionName, String businessDeptName, String currentOrgName) {
return (regionName != null ? regionName : "") + "|" +
(businessDeptName != null ? businessDeptName : "") + "|" +
(currentOrgName != null ? currentOrgName : "");
}
// 获取所有字典值的方法
private Map<String, List<String>> getAllDictValues() {
Map<String, List<String>> dictValues = new HashMap<>();
// 获取作业类别字典值
List<String> workTypeDicts = dictDataService.getDictValuesByDictId("42a87414a06a4f57b9d3ffb1907284b4");
dictValues.put("workType", workTypeDicts != null ? workTypeDicts : new ArrayList<>());
// 获取作业级别字典值
List<String> workLevelDicts = dictDataService.getDictValuesByDictId("222842ea3bb4468bbbeaa3856a4f2731");
dictValues.put("workLevel", workLevelDicts != null ? workLevelDicts : new ArrayList<>());
// 获取作业状态字典值
List<String> workStatusDicts = dictDataService.getDictValuesByDictId("60c11c98359b4cd09b7220202abf9e0b");
dictValues.put("workStatus", workStatusDicts != null ? workStatusDicts : new ArrayList<>());
return dictValues;
}
/**
* 导出完整的危险作业统计数据(不分页,全部数据)
* @param query 查询条件
* @return 完整的导出数据列表
*/
public List<HazardWorkPlanStatisticsTemplate> exportCompleteStatistics(HazardWorkPlanStatisticsDto query) {
// 1. 设置不分页查询参数
HazardWorkPlanStatisticsDto noPageQuery = new HazardWorkPlanStatisticsDto();
// 复制查询条件
BeanUtils.copyProperties(query, noPageQuery);
// 设置不分页(获取所有数据)
noPageQuery.setCurrent(1);
noPageQuery.setSize(Integer.MAX_VALUE);
// 2. 执行查询(获取完整数据,不分页)
Page<HazardWorkPlanStatisticsResult> pageResult = selectWorkStatusDetailStatistics(noPageQuery);
// 3. 获取所有记录(不分页)
List<HazardWorkPlanStatisticsResult> allResults = pageResult.getRecords();
// 4. 转换为导出模板
return convertToExportTemplates(allResults);
}
/**
* 将统计结果列表转换为导出模板列表
*/
public List<HazardWorkPlanStatisticsTemplate> convertToExportTemplates(
List<HazardWorkPlanStatisticsResult> statisticsResults) {
List<HazardWorkPlanStatisticsTemplate> exportTemplates = new ArrayList<>();
if (statisticsResults == null || statisticsResults.isEmpty()) {
return exportTemplates;
}
// 设置序号
int index = 1;
for (HazardWorkPlanStatisticsResult result : statisticsResults) {
HazardWorkPlanStatisticsTemplate template = convertSingleResult(result, index++);
exportTemplates.add(template);
}
return exportTemplates;
}
/**
* 转换单个统计结果为导出模板
*/
private HazardWorkPlanStatisticsTemplate convertSingleResult(
HazardWorkPlanStatisticsResult result, int index) {
HazardWorkPlanStatisticsTemplate template = new HazardWorkPlanStatisticsTemplate();
// 2. 设置组织信息
template.setRegionName(result.getRegionName());
template.setBusinessDeptName(result.getBusinessDeptName());
template.setCurrentOrgName(result.getCurrentOrgName());
// 3. 设置基础数量统计
template.setWorkCount(result.getWorkCount() != null ? result.getWorkCount() : 0);
template.setOwnCount(result.getOwnCount() != null ? result.getOwnCount() : 0);
template.setStakeholderCount(result.getStakeholderCount() != null ? result.getStakeholderCount() : 0);
// 4. 设置作业类别统计
Map<String, Integer> workTypeStats = result.getWorkTypeStats();
if (workTypeStats != null) {
template.setWorkTypeIn(getValueOrZero(workTypeStats, "进仓作业"));
template.setWorkTypeOut(getValueOrZero(workTypeStats, "出仓作业"));
template.setWorkTypeFire(getValueOrZero(workTypeStats, "动火作业"));
template.setWorkTypeLimitedSpace(getValueOrZero(workTypeStats, "有限空间作业"));
template.setWorkTypeHoisting(getValueOrZero(workTypeStats, "吊装作业"));
template.setWorkTypeHigh(getValueOrZero(workTypeStats, "高处作业"));
template.setWorkTypeTempElectricity(getValueOrZero(workTypeStats, "临时用电作业"));
template.setWorkTypeExcavation(getValueOrZero(workTypeStats, "动土作业"));
template.setWorkTypeRoadClosure(getValueOrZero(workTypeStats, "断路作业"));
template.setWorkTypeCirculationFumigation(getValueOrZero(workTypeStats, "环流熏蒸作业"));
template.setWorkTypeFumigation(getValueOrZero(workTypeStats, "熏蒸作业"));
template.setWorkTypeClosing(getValueOrZero(workTypeStats, "平仓作业"));
template.setWorkTypeSiloCleaning(getValueOrZero(workTypeStats, "筒仓清仓作业"));
template.setWorkTypeLiquidAmmonia(getValueOrZero(workTypeStats, "液氨接卸作业"));
template.setWorkTypeUnknown(getValueOrZero(workTypeStats, "未知类别"));
} else {
// 如果为空,初始化所有值为0
initializeWorkTypeStats(template);
}
// 5. 设置作业级别统计
Map<String, Integer> workLevelStats = result.getWorkLevelStats();
if (workLevelStats != null) {
template.setWorkLevelHigh(getValueOrZero(workLevelStats, "高度危险"));
template.setWorkLevelMedium(getValueOrZero(workLevelStats, "较大危险"));
template.setWorkLevelLow(getValueOrZero(workLevelStats, "一般危险"));
template.setWorkLevelUnknown(getValueOrZero(workLevelStats, "未知级别"));
} else {
initializeWorkLevelStats(template);
}
// 6. 设置作业状态统计
Map<String, Integer> workStatusStats = result.getWorkStatusStats();
if (workStatusStats != null) {
template.setWorkStatusTechBriefing(getValueOrZero(workStatusStats, "技术交底"));
template.setWorkStatusDraft(getValueOrZero(workStatusStats, "草稿"));
template.setWorkStatusClosed(getValueOrZero(workStatusStats, "已关闭"));
template.setWorkStatusPreCondition(getValueOrZero(workStatusStats, "作业前(条件确认)"));
template.setWorkStatusPreRiskAnalysis(getValueOrZero(workStatusStats, "作业前(风险分析)"));
template.setWorkStatusTimeoutCancel(getValueOrZero(workStatusStats, "已超时自动取消"));
template.setWorkStatusCancelled(getValueOrZero(workStatusStats, "已取消"));
template.setWorkStatusPreLicense(getValueOrZero(workStatusStats, "作业前(许可证)"));
template.setWorkStatusUnknown(getValueOrZero(workStatusStats, "未知状态"));
} else {
initializeWorkStatusStats(template);
}
return template;
}
/**
* 初始化作业类别统计为0
*/
private void initializeWorkTypeStats(HazardWorkPlanStatisticsTemplate template) {
template.setWorkTypeIn(0);
template.setWorkTypeOut(0);
template.setWorkTypeFire(0);
template.setWorkTypeLimitedSpace(0);
template.setWorkTypeHoisting(0);
template.setWorkTypeHigh(0);
template.setWorkTypeTempElectricity(0);
template.setWorkTypeExcavation(0);
template.setWorkTypeRoadClosure(0);
template.setWorkTypeCirculationFumigation(0);
template.setWorkTypeFumigation(0);
template.setWorkTypeClosing(0);
template.setWorkTypeSiloCleaning(0);
template.setWorkTypeLiquidAmmonia(0);
template.setWorkTypeUnknown(0);
}
/**
* 初始化作业级别统计为0
*/
private void initializeWorkLevelStats(HazardWorkPlanStatisticsTemplate template) {
template.setWorkLevelHigh(0);
template.setWorkLevelMedium(0);
template.setWorkLevelLow(0);
template.setWorkLevelUnknown(0);
}
/**
* 初始化作业状态统计为0
*/
private void initializeWorkStatusStats(HazardWorkPlanStatisticsTemplate template) {
template.setWorkStatusTechBriefing(0);
template.setWorkStatusDraft(0);
template.setWorkStatusClosed(0);
template.setWorkStatusPreCondition(0);
template.setWorkStatusPreRiskAnalysis(0);
template.setWorkStatusTimeoutCancel(0);
template.setWorkStatusCancelled(0);
template.setWorkStatusPreLicense(0);
template.setWorkStatusUnknown(0);
}
/**
* 从Map中获取值,如果没有则返回0
*/
private Integer getValueOrZero(Map<String, Integer> map, String key) {
if (map == null || key == null) {
return 0;
}
Integer value = map.get(key);
return value != null ? value : 0;
}
}
......@@ -2443,6 +2443,8 @@ public class THazardWorkPlanServiceImpl extends SuperServiceImpl<THazardWorkPlan
return baseMapper.unfinishedCount(orgIds);
}
private void deleteDoneRecords(String bizId) {
try {
// 获取流程实例ID
......
......@@ -350,6 +350,7 @@ public class PortController {
accidentReportService.exports(response, request, accidentReportExportReq);
}
@ApiOperation(value = "本单位值班记录下载", notes = "")
@PostMapping("/getDutyRecord")
public void getDutyRecord(@RequestBody DutyDownload dutyDownload) {
......
......@@ -100,4 +100,11 @@ public interface NewSysDictDataService {
*/
List<SysDictData> getDictId(String dictId);
/**
* 根据字典id获取字典数据
* @param dictId 字典id
* @return
*/
List<String> getDictValuesByDictId(String dictId);
}
......@@ -170,4 +170,28 @@ public class NewSysDictDataServiceImpl implements NewSysDictDataService {
}
return Collections.emptyList();
}
/**
* 根据字典ID获取所有字典值(优化版)
* @param dictId 字典ID
* @return 字典值列表
*/
public List<String> getDictValuesByDictId(String dictId) {
// 直接查询字典数据表,不需要先检查字典类型表
List<SysDictData> dictDataList = sysDictDataService.list(
new QueryWrapper<SysDictData>()
.eq("dict_id", dictId)
.orderByAsc("tree_sort") // 按排序字段排序
);
if (ObjectHelper.isNotEmpty(dictDataList)) {
return dictDataList.stream()
.map(SysDictData::getDictValue)
.filter(value -> value != null && !value.trim().isEmpty())
.collect(Collectors.toList());
}
return Collections.emptyList();
}
}
......@@ -233,9 +233,9 @@
COALESCE(
(SELECT COUNT(1) FROM t_accident_personnel WHERE ref_id = tar.id AND status = '0'),
0
) as reportCount,
tar.*
) as reportCount
,
tar.id
FROM t_accident_report tar
LEFT JOIN t_sys_dict_data sdd2 ON tar.accident_level = sdd2.dict_key
......
......@@ -404,4 +404,191 @@
GROUP BY t.operator;
</select>
<select id="selectHazardWorkPlanStatistics" resultType="com.testor.module.hazard.model.dto.THazardWorkPlanStatistics">
SELECT
sdd.dict_value as workType,
sdd2.dict_value as workLevel,
COUNT(*) as count
FROM t_hazard_work_plan hwp
inner join t_sys_dict_data sdd on sdd.dict_data_id = hwp.work_type and sdd.dict_id = '42a87414a06a4f57b9d3ffb1907284b4'
inner join t_sys_dict_data sdd2 on sdd2.dict_data_id = hwp.work_level and sdd2.dict_id = '222842ea3bb4468bbbeaa3856a4f2731'
left join t_sys_org so on hwp.org_id = so.org_id
where hwp.status = '0' and hwp.work_type!='' and hwp.work_level !=''
<if test="query.workType!=null and query.workType != ''">
and hwp.work_type = #{query.workType}
</if>
<if test="query.workLevel!=null and query.workLevel != ''">
and hwp.work_level = #{query.workLevel}
</if>
<if test="query.isEscalated!=null and query.isEscalated != ''">
and hwp.is_escalated = #{query.isEscalated}
</if>
<if test="query.workStatus!=null and query.workStatus != ''">
and find_in_set(hwp.work_status, #{query.workStatus})
</if>
<if test="query.reportStartDate!=null and query.reportStartDate != '' and query.reportEndDate!=null and query.reportEndDate != ''">
and hwp.create_date <![CDATA[ >= ]]> #{query.reportStartDate} and hwp.create_date <![CDATA[ <= ]]> #{query.reportEndDate}
</if>
<if test="query.orgId != null and query.orgId != ''">
AND (
hwp.org_id = #{query.orgId}
OR so.parent_ids LIKE concat('%', #{query.orgId}, '%')
)
</if>
GROUP BY sdd.dict_value, sdd2.dict_value
order by sdd.dict_value, sdd2.dict_value
</select>
<select id="workBasicDetailStatistics" resultType="com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics">
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
COUNT(*) as workCount,
SUM(CASE WHEN so.is_rent = '0' THEN 1 ELSE 0 END) as ownCount,
SUM(CASE WHEN so.is_rent = '1' THEN 1 ELSE 0 END) as stakeholderCount
FROM t_hazard_work_plan hwp
LEFT JOIN t_sys_org so ON so.org_id = hwp.org_id
LEFT JOIN t_sys_org bd ON bd.org_id = so.parent_id
LEFT JOIN t_sys_org region ON region.org_id = bd.parent_id
LEFT JOIN t_sys_org hq ON hq.org_id = region.parent_id
WHERE hwp.status = '0'
<if test="query.workType!=null and query.workType != ''">
and hwp.work_type = #{query.workType}
</if>
<if test="query.workLevel!=null and query.workLevel != ''">
and hwp.work_level = #{query.workLevel}
</if>
<if test="query.isEscalated!=null and query.isEscalated != ''">
and hwp.is_escalated = #{query.isEscalated}
</if>
<if test="query.workStatus!=null and query.workStatus != ''">
and find_in_set(hwp.work_status, #{query.workStatus})
</if>
<if test="query.reportStartDate!=null and query.reportStartDate != '' and query.reportEndDate!=null and query.reportEndDate != ''">
and hwp.create_date <![CDATA[ >= ]]> #{query.reportStartDate} and hwp.create_date <![CDATA[ <= ]]> #{query.reportEndDate}
</if>
<if test="query.orgId != null and query.orgId != ''">
AND (
hwp.org_id = #{query.orgId}
OR so.parent_ids LIKE concat('%', #{query.orgId}, '%')
)
</if>
GROUP BY hq.org_name, region.org_name, bd.org_name, so.org_name
ORDER BY hq.org_name, region.org_name, bd.org_name, so.org_name, workCount DESC
</select>
<select id="workTypeDetailStatistics" resultType="com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics">
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
sdd_type.dict_value as workType,
COUNT(*) as workTypeCount
FROM t_hazard_work_plan hwp
LEFT JOIN t_sys_org so ON so.org_id = hwp.org_id
LEFT JOIN t_sys_org bd ON bd.org_id = so.parent_id
LEFT JOIN t_sys_org region ON region.org_id = bd.parent_id
LEFT JOIN t_sys_org hq ON hq.org_id = region.parent_id
LEFT JOIN t_sys_dict_data sdd_type ON sdd_type.dict_data_id = hwp.work_type
AND sdd_type.dict_id = '42a87414a06a4f57b9d3ffb1907284b4'
WHERE hwp.status = '0'
<if test="query.workLevel!=null and query.workLevel != ''">
and hwp.work_level = #{query.workLevel}
</if>
<if test="query.isEscalated!=null and query.isEscalated != ''">
and hwp.is_escalated = #{query.isEscalated}
</if>
<if test="query.workStatus!=null and query.workStatus != ''">
and find_in_set(hwp.work_status, #{query.workStatus})
</if>
<if test="query.reportStartDate!=null and query.reportStartDate != '' and query.reportEndDate!=null and query.reportEndDate != ''">
and hwp.create_date <![CDATA[ >= ]]> #{query.reportStartDate} and hwp.create_date <![CDATA[ <= ]]> #{query.reportEndDate}
</if>
<if test="query.orgId != null and query.orgId != ''">
AND (
hwp.org_id = #{query.orgId}
OR so.parent_ids LIKE concat('%', #{query.orgId}, '%')
)
</if>
GROUP BY hq.org_name, region.org_name, bd.org_name, so.org_name, sdd_type.dict_value
ORDER BY hq.org_name, region.org_name, bd.org_name, so.org_name
</select>
<select id="workLevelDetailStatistics" resultType="com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics">
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
sdd_level.dict_value as workLevel,
COUNT(*) as workLevelCount
FROM t_hazard_work_plan hwp
LEFT JOIN t_sys_org so ON so.org_id = hwp.org_id
LEFT JOIN t_sys_org bd ON bd.org_id = so.parent_id
LEFT JOIN t_sys_org region ON region.org_id = bd.parent_id
LEFT JOIN t_sys_org hq ON hq.org_id = region.parent_id
LEFT JOIN t_sys_dict_data sdd_level ON sdd_level.dict_data_id = hwp.work_level
AND sdd_level.dict_id = '222842ea3bb4468bbbeaa3856a4f2731'
WHERE hwp.status = '0'
<if test="query.workType!=null and query.workType != ''">
and hwp.work_type = #{query.workType}
</if>
<if test="query.isEscalated!=null and query.isEscalated != ''">
and hwp.is_escalated = #{query.isEscalated}
</if>
<if test="query.workStatus!=null and query.workStatus != ''">
and find_in_set(hwp.work_status, #{query.workStatus})
</if>
<if test="query.reportStartDate!=null and query.reportStartDate != '' and query.reportEndDate!=null and query.reportEndDate != ''">
and hwp.create_date <![CDATA[ >= ]]> #{query.reportStartDate} and hwp.create_date <![CDATA[ <= ]]> #{query.reportEndDate}
</if>
<if test="query.orgId != null and query.orgId != ''">
AND (
hwp.org_id = #{query.orgId}
OR so.parent_ids LIKE concat('%', #{query.orgId}, '%')
)
</if>
GROUP BY hq.org_name, region.org_name, bd.org_name, so.org_name, sdd_level.dict_value
ORDER BY hq.org_name, region.org_name, bd.org_name, so.org_name
</select>
<select id="workStatusDetailStatistics" resultType="com.testor.module.hazard.model.dto.THazardWorkPlanDetailStatistics">
-- 按危险作业状态统计
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
sdd_status.dict_value as workStatus,
COUNT(*) as workStatusCount
FROM t_hazard_work_plan hwp
LEFT JOIN t_sys_org so ON so.org_id = hwp.org_id
LEFT JOIN t_sys_org bd ON bd.org_id = so.parent_id
LEFT JOIN t_sys_org region ON region.org_id = bd.parent_id
LEFT JOIN t_sys_org hq ON hq.org_id = region.parent_id
LEFT JOIN t_sys_dict_data sdd_status ON sdd_status.dict_key = hwp.work_status
AND sdd_status.dict_id = '60c11c98359b4cd09b7220202abf9e0b'
WHERE hwp.status = '0'
<if test="query.workType!=null and query.workType != ''">
and hwp.work_type = #{query.workType}
</if>
<if test="query.workLevel!=null and query.workLevel != ''">
and hwp.work_level = #{query.workLevel}
</if>
<if test="query.isEscalated!=null and query.isEscalated != ''">
and hwp.is_escalated = #{query.isEscalated}
</if>
<if test="query.reportStartDate!=null and query.reportStartDate != '' and query.reportEndDate!=null and query.reportEndDate != ''">
and hwp.create_date <![CDATA[ >= ]]> #{query.reportStartDate} and hwp.create_date <![CDATA[ <= ]]> #{query.reportEndDate}
</if>
<if test="query.orgId != null and query.orgId != ''">
AND (
hwp.org_id = #{query.orgId}
OR so.parent_ids LIKE concat('%', #{query.orgId}, '%')
)
</if>
GROUP BY hq.org_name, region.org_name, bd.org_name, so.org_name, sdd_status.dict_value
ORDER BY hq.org_name, region.org_name, bd.org_name, so.org_name, workStatusCount DESC
</select>
</mapper>
\ No newline at end of file
......@@ -181,4 +181,6 @@
</if>
</select>
</mapper>
\ No newline at end of file
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