Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
Z
zlmy-cloud
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zlmy
zlmy-cloud
Commits
e082728b
Commit
e082728b
authored
Jan 14, 2026
by
鲁鸿波
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
事故导出优化bug修改,监督检查企业合规率详表开发
parent
9bebd4c8
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
691 additions
and
75 deletions
+691
-75
AccidentReportController.java
.../module/accident/controller/AccidentReportController.java
+30
-2
AccidentReportDetailTemplate.java
...accident/model/template/AccidentReportDetailTemplate.java
+248
-0
BeanConverExtensionUtil.java
...dule/accident/model/template/BeanConverExtensionUtil.java
+110
-0
THazardWorkPlanCheckDao.java
...com/testor/module/hazard/dao/THazardWorkPlanCheckDao.java
+38
-0
HazardWorkPlanCheckDetailResult.java
...ule/hazard/model/dto/HazardWorkPlanCheckDetailResult.java
+29
-0
HazardWorkPlanCheckDetail.java
...tor/module/hazard/model/vo/HazardWorkPlanCheckDetail.java
+55
-0
THazardWorkPlanCheckService.java
...or/module/hazard/service/THazardWorkPlanCheckService.java
+10
-0
THazardWorkPlanCheckServiceImpl.java
.../hazard/service/impl/THazardWorkPlanCheckServiceImpl.java
+6
-4
THazardWorkPlanCheck.xml
...src/main/resources/mapper/hazard/THazardWorkPlanCheck.xml
+165
-69
No files found.
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/accident/controller/AccidentReportController.java
View file @
e082728b
...
@@ -19,9 +19,10 @@ import com.testor.module.accident.model.dto.AccidentReportDelParam;
...
@@ -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.dto.AccidentReportDetail
;
import
com.testor.module.accident.model.req.*
;
import
com.testor.module.accident.model.req.*
;
import
com.testor.module.accident.model.resp.*
;
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.model.vo.AccidentReportVO
;
import
com.testor.module.accident.service.AccidentReportService
;
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.ReportDetailParam
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanDTO
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanDTO
;
...
@@ -319,7 +320,7 @@ public class AccidentReportController extends SuperController {
...
@@ -319,7 +320,7 @@ public class AccidentReportController extends SuperController {
return
baseResponse
;
return
baseResponse
;
}
}
@ApiOperation
(
value
=
"导出事故信息详情明细"
,
notes
=
"导出事故信息详情明细"
)
/*
@ApiOperation(value = "导出事故信息详情明细", notes = "导出事故信息详情明细")
@GetMapping(value = "/accidentReportDetailExport")
@GetMapping(value = "/accidentReportDetailExport")
public BaseResponse<BizGeneralResponse> export(HttpServletResponse response, ReportDetailParam reportDetailParam){
public BaseResponse<BizGeneralResponse> export(HttpServletResponse response, ReportDetailParam reportDetailParam){
BaseResponse<BizGeneralResponse> baseResponse=new BaseResponse<>();
BaseResponse<BizGeneralResponse> baseResponse=new BaseResponse<>();
...
@@ -337,6 +338,33 @@ public class AccidentReportController extends SuperController {
...
@@ -337,6 +338,33 @@ public class AccidentReportController extends SuperController {
baseResponse.setData(
baseResponse.setData(
BizGeneralResponse.builder().result(TypeHelper.castToString(true)).build());
BizGeneralResponse.builder().result(TypeHelper.castToString(true)).build());
return baseResponse;
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
;
}
}
}
}
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/accident/model/template/AccidentReportDetailTemplate.java
0 → 100644
View file @
e082728b
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
());
}
}
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/accident/model/template/BeanConverExtensionUtil.java
0 → 100644
View file @
e082728b
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
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/hazard/dao/THazardWorkPlanCheckDao.java
View file @
e082728b
...
@@ -6,6 +6,7 @@ import com.testor.module.hazard.model.domain.THazardWorkPlanCheck;
...
@@ -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.HazardWorkPlanCheckStatsDTO
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckComplianceStatisticsVO
;
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.HazardWorkPlanCheckProblemCountStatisticsVO
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO
;
import
com.tongtech.tfw.backend.common.models.supers.SuperDao
;
import
com.tongtech.tfw.backend.common.models.supers.SuperDao
;
...
@@ -128,4 +129,41 @@ public interface THazardWorkPlanCheckDao extends SuperDao<THazardWorkPlanCheck>
...
@@ -128,4 +129,41 @@ public interface THazardWorkPlanCheckDao extends SuperDao<THazardWorkPlanCheck>
*/
*/
Page
<
HazardWorkPlanCheckProblemCountStatisticsVO
>
corporateComplianceRate
(
@Param
(
"page"
)
IPage
page
,
@Param
(
"param"
)
THazardWorkPlanCheckParam
tHazardWorkPlanCheckParam
);
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);*/
}
}
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/hazard/model/dto/HazardWorkPlanCheckDetailResult.java
0 → 100644
View file @
e082728b
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
;
// 作业状态统计
}
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/hazard/model/vo/HazardWorkPlanCheckDetail.java
0 → 100644
View file @
e082728b
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
;
}
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/hazard/service/THazardWorkPlanCheckService.java
View file @
e082728b
...
@@ -9,6 +9,7 @@ import com.testor.module.hazard.model.dto.HazardWorkPlanCheckEnterpriseComplianc
...
@@ -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.HazardWorkPlanCheckStatsDTO
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckComplianceStatisticsVO
;
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.HazardWorkPlanCheckProblemCountStatisticsVO
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckProblemTypeStatisticsVO
;
import
com.testor.module.safe.model.dto.TSafeHazardOrgParam
;
import
com.testor.module.safe.model.dto.TSafeHazardOrgParam
;
...
@@ -132,4 +133,13 @@ public interface THazardWorkPlanCheckService extends SuperService<THazardWorkPla
...
@@ -132,4 +133,13 @@ public interface THazardWorkPlanCheckService extends SuperService<THazardWorkPla
*/
*/
Page
<
HazardWorkPlanCheckProblemCountStatisticsVO
>
corporateComplianceRate
(
THazardWorkPlanCheckParam
tHazardWorkPlanCheckParam
);
Page
<
HazardWorkPlanCheckProblemCountStatisticsVO
>
corporateComplianceRate
(
THazardWorkPlanCheckParam
tHazardWorkPlanCheckParam
);
/**
* 危险作业详表
* @param tHazardWorkPlanCheckParam
* @return
*/
Page
<
HazardWorkPlanCheckDetail
>
detailsOfHazardousOperations
(
THazardWorkPlanCheckParam
tHazardWorkPlanCheckParam
);
}
}
zlmy-modules/zlmy-boot/src/main/java/com/testor/module/hazard/service/impl/THazardWorkPlanCheckServiceImpl.java
View file @
e082728b
...
@@ -22,10 +22,7 @@ import com.testor.module.hazard.model.domain.THazardWorkPlanCheck;
...
@@ -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.HazardWorkPlanCheckEnterpriseComplianceDto
;
import
com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO
;
import
com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.dto.THazardWorkPlanCheckParam
;
import
com.testor.module.hazard.model.vo.HazardWorkPlanCheckComplianceStatisticsVO
;
import
com.testor.module.hazard.model.vo.*
;
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.service.THazardWorkPlanCheckService
;
import
com.testor.module.hazard.service.THazardWorkPlanCheckService
;
import
com.testor.module.iam.service.SysUserService
;
import
com.testor.module.iam.service.SysUserService
;
import
com.testor.module.notice.dao.TSysOrgDao
;
import
com.testor.module.notice.dao.TSysOrgDao
;
...
@@ -406,6 +403,11 @@ public class THazardWorkPlanCheckServiceImpl extends SuperServiceImpl<THazardWor
...
@@ -406,6 +403,11 @@ public class THazardWorkPlanCheckServiceImpl extends SuperServiceImpl<THazardWor
return
baseMapper
.
corporateComplianceRate
(
resultPage
,
tHazardWorkPlanCheckParam
);
return
baseMapper
.
corporateComplianceRate
(
resultPage
,
tHazardWorkPlanCheckParam
);
}
}
@Override
public
Page
<
HazardWorkPlanCheckDetail
>
detailsOfHazardousOperations
(
THazardWorkPlanCheckParam
tHazardWorkPlanCheckParam
)
{
return
null
;
}
public
String
montageStartTime
(
String
startTime
){
public
String
montageStartTime
(
String
startTime
){
if
(
startTime
!=
null
&&
!
""
.
equals
(
startTime
)
){
if
(
startTime
!=
null
&&
!
""
.
equals
(
startTime
)
){
startTime
=
startTime
+
" 00:00:00"
;
startTime
=
startTime
+
" 00:00:00"
;
...
...
zlmy-modules/zlmy-boot/src/main/resources/mapper/hazard/THazardWorkPlanCheck.xml
View file @
e082728b
...
@@ -302,75 +302,6 @@
...
@@ -302,75 +302,6 @@
</if>
</if>
</sql>
</sql>
<!--<select id="selectHazardWorkPlanCheckStats" resultType="com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO">
SELECT
<!– 企业总数(有检查记录的企业)–>
(SELECT COUNT(DISTINCT basic_unit)
FROM t_hazard_work_plan_check
WHERE status = '0'
AND check_status = '2'
<include refid="orgIdFilter" />
<include refid="checkTimeFilter" />
) AS basicUnitCount,
<!– 合规企业数(企业合规率 >= 95%)–>
(SELECT COUNT(*)
FROM (
SELECT basic_unit
FROM t_hazard_work_plan_check
WHERE status = '0'
AND check_status = '2'
<include refid="orgIdFilter" />
<include refid="checkTimeFilter" />
GROUP BY basic_unit
HAVING
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE (SUM(CASE WHEN is_compliant = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*))
END <![CDATA[ >= ]]> 95
) AS compliant_enterprises) AS complianceBasicUnitCount,
<!– 不合规企业数(企业合规率 < 95%)–>
(SELECT COUNT(*)
FROM (
SELECT basic_unit
FROM t_hazard_work_plan_check
WHERE status = '0'
AND check_status = '2'
<include refid="orgIdFilter" />
<include refid="checkTimeFilter" />
GROUP BY basic_unit
HAVING
CASE
WHEN COUNT(*) = 0 THEN 0
ELSE (SUM(CASE WHEN is_compliant = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*))
END <![CDATA[ < ]]> 95
) AS non_compliant_enterprises) AS noComplianceBasicUnitCount,
<!– 问题数–>
(SELECT COUNT(*)
FROM t_hazard_work_plan_check
WHERE status = '0'
AND check_status = '2'
AND is_compliant = '0'
<include refid="orgIdFilter" />
<include refid="checkTimeFilter" />
) AS numberCount,
<!–危险作业数量–>
(select count(1) from t_hazard_work_plan
where work_status!='0'
AND org_id IN (
SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId} OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
<if test="param.startTime != null and param.startTime != '' and param.endTime != null and param.endTime != ''">
AND create_date BETWEEN #{param.startTime} AND #{param.endTime}
</if>) As workCount
FROM DUAL
</select>-->
<select
id=
"selectHazardWorkPlanCheckStats"
resultType=
"com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO"
>
<select
id=
"selectHazardWorkPlanCheckStats"
resultType=
"com.testor.module.hazard.model.dto.HazardWorkPlanCheckStatsDTO"
>
SELECT
SELECT
...
@@ -520,5 +451,170 @@
...
@@ -520,5 +451,170 @@
ORDER BY complianceRate DESC
ORDER BY complianceRate DESC
</select>
</select>
<select
id=
"workStatusStatistics"
resultType=
"com.testor.module.hazard.model.vo.HazardWorkPlanCheckDetail"
>
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
sdd.dict_value problemType,
count(1) problemCount
FROM t_hazard_work_plan_check hwpc
LEFT JOIN t_sys_org so ON so.org_id = hwpc.basic_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 ON sdd.dict_data_id = hwpc.problem_type
WHERE hwpc.status = '0' and hwpc.is_compliant='0'
AND hwpc.basic_id IN (
SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId}
OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
<if
test=
"param.startTime != null and param.startTime != '' and param.endTime != null and param.endTime != ''"
>
AND hwpc.create_date BETWEEN #{param.startTime} AND #{param.endTime}
</if>
GROUP BY hq.org_name, region.org_name, bd.org_name, so.org_name,sdd.dict_value
ORDER BY hq.org_name, region.org_name, bd.org_name, so.org_name,sdd.dict_value,problemCount desc
</select>
<select
id=
"comprehensiveStatistics"
resultType=
"com.testor.module.hazard.model.vo.HazardWorkPlanCheckDetail"
>
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
sdd.dict_value as workLevelNameComplianceRate,
so.is_rent as isRent,
CASE
WHEN so.is_rent = '0' THEN '企业作业'
WHEN so.is_rent = '1' THEN '相关方作业'
ELSE '未知'
END as orgTypeName,
COUNT(DISTINCT hwpl.id) as totalWorkCount,
COUNT(DISTINCT CASE WHEN hwpc.is_compliant = '0' THEN hwpl.id END) as totalProblemCount,
CASE
WHEN COUNT(DISTINCT hwpl.id) = 0 THEN 100.00
ELSE ROUND(
(COUNT(DISTINCT hwpl.id) - COUNT(DISTINCT CASE WHEN hwpc.is_compliant = '0' THEN hwpl.id END))
* 100.0 / COUNT(DISTINCT hwpl.id),
2
)
END as CONCAT(totalComplianceRate,'%'),
COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END) as enterpriseWorkCount,
COUNT(DISTINCT CASE WHEN so.is_rent = '0' AND hwpc.is_compliant = '0' THEN hwpl.id END) as enterpriseProblemCount,
CASE
WHEN COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END) = 0 THEN 100.00
ELSE ROUND(
(COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END) -
COUNT(DISTINCT CASE WHEN so.is_rent = '0' AND hwpc.is_compliant = '0' THEN hwpl.id END))
* 100.0 / COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END),
2
)
END as CONCAT(enterpriseComplianceRate,'%'),
COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END) as relatedPartyWorkCount,
COUNT(DISTINCT CASE WHEN so.is_rent = '1' AND hwpc.is_compliant = '0' THEN hwpl.id END) as relatedPartyProblemCount,
CASE
WHEN COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END) = 0 THEN 100.00
ELSE ROUND(
(COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END) -
COUNT(DISTINCT CASE WHEN so.is_rent = '1' AND hwpc.is_compliant = '0' THEN hwpl.id END))
* 100.0 / COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END),
2
)
END as CONCAT(relatedPartyComplianceRate,'%'),
COUNT(DISTINCT hwpl.id) as workLevelTotalWorkCount,
COUNT(DISTINCT CASE WHEN hwpc.is_compliant = '0' THEN hwpl.id END) as workLevelProblemWorkCount,
CASE
WHEN COUNT(DISTINCT hwpl.id) = 0 THEN 100.00
ELSE ROUND(
(COUNT(DISTINCT hwpl.id) - COUNT(DISTINCT CASE WHEN hwpc.is_compliant = '0' THEN hwpl.id END))
* 100.0 / COUNT(DISTINCT hwpl.id),
2
)
END as CONCAT(workLevelComplianceRate,'%'),
COUNT(DISTINCT CASE WHEN hwpc.id IS NOT NULL THEN hwpl.id END) as workLevelCheckedCount,
CASE
WHEN COUNT(DISTINCT hwpl.id) = 0 THEN 0.00
ELSE ROUND(
COUNT(DISTINCT CASE WHEN hwpc.id IS NOT NULL THEN hwpl.id END) * 100.0 / COUNT(DISTINCT hwpl.id),
2
)
END as CONCAT(workLevelCheckRate,'%')
FROM t_hazard_work_plan hwpl
LEFT JOIN t_hazard_work_plan_check hwpc ON hwpc.plan_id = hwpl.id
LEFT JOIN t_sys_org so ON so.org_id = hwpl.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 ON sdd.dict_data_id = hwpl.work_level
AND sdd.dict_id = '222842ea3bb4468bbbeaa3856a4f2731'
WHERE hwpl.status = '0'
AND (hwpc.status = '0' OR hwpc.status IS NULL)
AND hwpc.basic_id IN (
SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId}
OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
<if
test=
"param.startTime != null and param.startTime != '' and param.endTime != null and param.endTime != ''"
>
AND hwpc.create_date BETWEEN #{param.startTime} AND #{param.endTime}
</if>
GROUP BY region.org_name, bd.org_name, so.org_name, sdd.dict_value, so.is_rent
ORDER BY region.org_name, bd.org_name, so.org_name, sdd.dict_value, so.is_rent,
workLevelComplianceRate DESC, workLevelCheckRate DESC
</select>
<select
id=
"isRentSpotCheckStatistics"
resultType=
"com.testor.module.hazard.model.vo.HazardWorkPlanCheckDetail"
>
SELECT
region.org_name as regionName,
bd.org_name as businessDeptName,
so.org_name as currentOrgName,
COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END) as enterpriseTotalWork,
COUNT(DISTINCT CASE WHEN so.is_rent = '0' AND hwpc.id IS NOT NULL THEN hwpl.id END) as enterpriseCheckedWork,
CASE
WHEN COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END) = 0 THEN 0.00
ELSE ROUND(
COUNT(DISTINCT CASE WHEN so.is_rent = '0' AND hwpc.id IS NOT NULL THEN hwpl.id END) * 100.0 /
COUNT(DISTINCT CASE WHEN so.is_rent = '0' THEN hwpl.id END),
2
)
END as CONCAT(enterpriseCheckRate,'%'),
COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END) as relatedPartyTotalWork,
COUNT(DISTINCT CASE WHEN so.is_rent = '1' AND hwpc.id IS NOT NULL THEN hwpl.id END) as relatedPartyCheckedWork,
CASE
WHEN COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END) = 0 THEN 0.00
ELSE ROUND(
COUNT(DISTINCT CASE WHEN so.is_rent = '1' AND hwpc.id IS NOT NULL THEN hwpl.id END) * 100.0 /
COUNT(DISTINCT CASE WHEN so.is_rent = '1' THEN hwpl.id END),
2
)
END as CONCAT(relatedPartyCheckRate,'%')
FROM t_hazard_work_plan hwpl
LEFT JOIN t_hazard_work_plan_check hwpc ON hwpc.plan_id = hwpl.id
AND hwpc.status = '0'
LEFT JOIN t_sys_org so ON so.org_id = hwpl.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
WHERE hwpl.status = '0'
AND hwpc.basic_id IN (
SELECT org_id FROM t_sys_org
WHERE org_id = #{param.orgId}
OR parent_ids LIKE CONCAT('%', #{param.orgId}, '%')
)
<if
test=
"param.startTime != null and param.startTime != '' and param.endTime != null and param.endTime != ''"
>
AND hwpc.create_date BETWEEN #{param.startTime} AND #{param.endTime}
</if>
GROUP BY region.org_name, bd.org_name, so.org_name
ORDER BY region.org_name, bd.org_name, so.org_name,enterpriseCheckRate desc,relatedPartyCheckRate desc;
</select>
</mapper>
</mapper>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment