feat(safety): 安全生产二期 - 安全风险分级管控
按客户需求「建立安全风险分级管控与隐患排查治理双重预防机制」的第一重落地。
评估方法采用 LEC 法(格雷厄姆-金尼法):
D = L × E × C
D≥320 重大风险 / 160≤D<320 较大风险 / 70≤D<160 一般风险 / D<70 低风险
后端:
- 风险单元 MesSafetyRiskUnit(风险识别最小单元:车间设备/区域/作业活动)
- 风险清单 MesSafetyRisk(含 L/E/C 输入,D 值与风险等级由服务端自动计算)
- 五类管控措施字段:工程技术/管理/培训教育/个体防护/应急处置
- 删除风险单元时校验其下是否有风险清单,避免孤儿数据
- 编码唯一性校验(单元、风险各自独立)
- 错误码 1_040_904_xxx;字典常量 MES_SAFETY_*
前端:
- 风险单元管理页(增删改查 + 车间/责任人下拉)
- 风险清单管理页(L/E/C 选择后实时联动算出 D 与等级,弹窗顶部给出评估结论)
- 四色等级标签(重大红/较大橙/一般蓝/低绿)
SQL(mes_safety_risk_init.sql,可重复执行):
- 建表 2 张,菜单挂到「安全生产」目录下,字典 4 组
验证(线上实测):
- L=3,E=6,C=15 => D=270 较大风险
- L=10,E=10,C=100 => D=10000 重大风险
- L=1,E=1,C=1 => D=1 低风险
- 重复编码、删除有风险的单元均被正确拦截
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================================== |
| | | -- å®å
¨ç产模å ââ äºæï¼å®å
¨é£é©åçº§ç®¡æ§ |
| | | -- |
| | | -- å®ä½ï¼åéé¢é²æºå¶ç第ä¸éï¼é£é©å级管æ§ï¼ãå
è¯å«é£é©ç¹ãè¯ä¼°é£é©ççº§ï¼ |
| | | -- æè½æ®æ¤å¼å±éæ£ææ¥ï¼äºæä¹åçè½åç¹ï¼ã |
| | | -- |
| | | -- è¯ä¼°æ¹æ³ï¼LEC æ³ï¼æ ¼é·åå§-éå°¼æ³ï¼ |
| | | -- D = L Ã E Ã C |
| | | -- L äºæ
åçå¯è½æ§ 1 / 3 / 6 / 10 |
| | | -- E æ´é²äºå±é©ç¯å¢é¢ç 0.5 / 1 / 2 / 3 / 6 / 10 |
| | | -- C äºæ
åæä¸¥éæ§ 1 / 3 / 5 / 7 / 15 / 40 / 100 |
| | | -- ç级ååï¼Dâ¥320 é大(红)ï¼160â¤D<320 è¾å¤§(æ©)ï¼70â¤D<160 ä¸è¬(é»)ï¼D<70 ä½(è) |
| | | -- |
| | | -- å
å®¹ï¼ |
| | | -- 1. 建表 mes_safety_risk_unitï¼é£é©åå
/é£é©ç¹ï¼ |
| | | -- 2. 建表 mes_safety_riskï¼é£é©äºä»¶æ¸
å + LEC è¯ä¼°ï¼ |
| | | -- 3. åå
¸ï¼é£é©ç级 / é£é©ç±»å« / äºæ
ç±»å / åå
ç¶æ |
| | | -- 4. èåï¼æå¨ãå®å
¨ç产ãç®å½ä¸ |
| | | -- 5. ææè¶
级管çå |
| | | -- |
| | | -- ç¹æ§ï¼å¯é夿§è¡ |
| | | -- ===================================================================== |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 1. é£é©åå
ï¼é£é©ç¹ï¼ï¼é£é©è¯å«çæå°åå
ï¼å¦"é 纸车é´1#ç缸""é
çµå®¤" |
| | | -- --------------------------------------------------------------------- |
| | | CREATE TABLE IF NOT EXISTS `mes_safety_risk_unit` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `code` varchar(64) NOT NULL COMMENT 'é£é©åå
ç¼ç ', |
| | | `name` varchar(200) NOT NULL COMMENT 'é£é©åå
åç§°', |
| | | `workshop_id` bigint DEFAULT NULL COMMENT 'æå±è½¦é´ç¼å·', |
| | | `location` varchar(255) DEFAULT NULL COMMENT 'å
·ä½ä½ç½®', |
| | | `risk_category` tinyint DEFAULT NULL COMMENT 'é£é©ç±»å«ï¼åå
¸ mes_safety_risk_categoryï¼', |
| | | `charge_user_id` bigint DEFAULT NULL COMMENT '责任人ç¼å·', |
| | | `status` tinyint NOT NULL DEFAULT '1' COMMENT 'ç¶æï¼1=å¯ç¨ï¼0=åç¨', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_code` (`code`) USING BTREE, |
| | | KEY `idx_workshop` (`workshop_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='å®å
¨ç产-é£é©åå
'; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 2. é£é©äºä»¶æ¸
åï¼å« LEC è¯ä¼°ç»æï¼ |
| | | -- --------------------------------------------------------------------- |
| | | CREATE TABLE IF NOT EXISTS `mes_safety_risk` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `unit_id` bigint NOT NULL COMMENT 'é£é©åå
ç¼å·', |
| | | `code` varchar(64) NOT NULL COMMENT 'é£é©ç¼ç ', |
| | | `name` varchar(200) NOT NULL COMMENT 'é£é©åç§°/æè¿°', |
| | | `accident_type` tinyint DEFAULT NULL COMMENT 'å¯è½å¯¼è´çäºæ
ç±»åï¼åå
¸ mes_safety_accident_typeï¼', |
| | | `possible_consequence` varchar(500) DEFAULT NULL COMMENT 'å¯è½å¯¼è´çåæè¯´æ', |
| | | |
| | | `likelihood` decimal(6,2) DEFAULT NULL COMMENT 'L äºæ
åçå¯è½æ§', |
| | | `exposure` decimal(6,2) DEFAULT NULL COMMENT 'E æ´é²äºå±é©ç¯å¢é¢ç', |
| | | `consequence` decimal(6,2) DEFAULT NULL COMMENT 'C äºæ
åæä¸¥éæ§', |
| | | `risk_value` decimal(10,2) DEFAULT NULL COMMENT 'D é£é©å¼ = LÃEÃC', |
| | | `risk_level` tinyint DEFAULT NULL COMMENT 'é£é©ç级ï¼åå
¸ mes_safety_risk_levelï¼1é大 2è¾å¤§ 3ä¸è¬ 4ä½ï¼', |
| | | |
| | | `control_engineering` varchar(1000) DEFAULT NULL COMMENT 'å·¥ç¨ææ¯æªæ½', |
| | | `control_management` varchar(1000) DEFAULT NULL COMMENT 'ç®¡çæªæ½', |
| | | `control_training` varchar(1000) DEFAULT NULL COMMENT 'å¹è®æè²æªæ½', |
| | | `control_ppe` varchar(1000) DEFAULT NULL COMMENT '个ä½é²æ¤æªæ½', |
| | | `control_emergency` varchar(1000) DEFAULT NULL COMMENT 'åºæ¥å¤ç½®æªæ½', |
| | | |
| | | `evaluate_date` date DEFAULT NULL COMMENT 'æ¬æ¬¡è¯ä¼°æ¥æ', |
| | | `next_evaluate_date` date DEFAULT NULL COMMENT '䏿¬¡è¯ä¼°æ¥æ', |
| | | `charge_user_id` bigint DEFAULT NULL COMMENT '管æ§è´£ä»»äººç¼å·', |
| | | `status` tinyint NOT NULL DEFAULT '1' COMMENT 'ç¶æï¼1=ææï¼0=已失æ', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_code` (`code`) USING BTREE, |
| | | KEY `idx_unit` (`unit_id`) USING BTREE, |
| | | KEY `idx_level` (`risk_level`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='å®å
¨ç产-é£é©äºä»¶æ¸
å'; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 3. åå
¸ |
| | | -- --------------------------------------------------------------------- |
| | | DELETE FROM system_dict_data WHERE dict_type IN |
| | | ('mes_safety_risk_level', 'mes_safety_risk_category', 'mes_safety_accident_type', 'mes_safety_unit_status'); |
| | | |
| | | DELETE FROM system_dict_type WHERE type IN |
| | | ('mes_safety_risk_level', 'mes_safety_risk_category', 'mes_safety_accident_type', 'mes_safety_unit_status'); |
| | | |
| | | INSERT INTO system_dict_type (name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES ('å®å
¨ç产-é£é©ç级', 'mes_safety_risk_level', 0, 'æ LEC é£é©å¼ D ååï¼1é大 2è¾å¤§ 3ä¸è¬ 4ä½', '1', NOW(), '1', NOW(), b'0'), |
| | | ('å®å
¨ç产-é£é©ç±»å«', 'mes_safety_risk_category', 0, 'é£é©åå
çé£é©ç±»å«', '1', NOW(), '1', NOW(), b'0'), |
| | | ('å®å
¨ç产-äºæ
ç±»å', 'mes_safety_accident_type', 0, 'GB6441 ä¼ä¸èå·¥ä¼¤äº¡äºæ
åç±»ï¼å¸¸ç¨é¡¹ï¼', '1', NOW(), '1', NOW(), b'0'), |
| | | ('å®å
¨ç产-åå
ç¶æ', 'mes_safety_unit_status', 0, 'é£é©åå
ç¶æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_dict_data (sort, label, value, dict_type, status, color_type, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | -- é£é©ç级ï¼åè²ï¼ |
| | | (1, 'é大é£é©', '1', 'mes_safety_risk_level', 0, 'error', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, 'è¾å¤§é£é©', '2', 'mes_safety_risk_level', 0, 'warning', '1', NOW(), '1', NOW(), b'0'), |
| | | (3, 'ä¸è¬é£é©', '3', 'mes_safety_risk_level', 0, 'processing', '1', NOW(), '1', NOW(), b'0'), |
| | | (4, 'ä½é£é©', '4', 'mes_safety_risk_level', 0, 'success', '1', NOW(), '1', NOW(), b'0'), |
| | | -- é£é©ç±»å« |
| | | (1, '设å¤è®¾æ½', '1', 'mes_safety_risk_category', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, 'ä½ä¸æ´»å¨', '2', 'mes_safety_risk_category', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (3, 'ä½ä¸ç¯å¢', '3', 'mes_safety_risk_category', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (4, 'å®å
¨ç®¡ç', '4', 'mes_safety_risk_category', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | -- äºæ
ç±»å |
| | | (1, 'ç©ä½æå»', '1', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, '车è¾ä¼¤å®³', '2', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (3, 'æºæ¢°ä¼¤å®³', '3', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (4, 'èµ·é伤害', '4', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (5, '触çµ', '5', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (6, '淹溺', '6', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (7, 'ç¼ç«', '7', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (8, 'ç«ç¾', '8', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (9, 'é«å¤å è½', '9', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (10, 'åå¡', '10', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (11, 'é
ççç¸', '11', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (12, '容å¨çç¸', '12', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (13, '䏿¯åçªæ¯', '13', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (14, 'å
¶ä»ä¼¤å®³', '14', 'mes_safety_accident_type', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | -- åå
ç¶æ |
| | | (1, 'å¯ç¨', '1', 'mes_safety_unit_status', 0, 'success', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, 'åç¨', '0', 'mes_safety_unit_status', 0, 'default', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 4. èåï¼æå¨ 1065910 å®å
¨ç产ä¸ï¼ |
| | | -- --------------------------------------------------------------------- |
| | | DELETE FROM system_role_menu WHERE menu_id BETWEEN 1065917 AND 1065929; |
| | | |
| | | DELETE FROM system_menu WHERE id BETWEEN 1065917 AND 1065929; |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, |
| | | component, component_name, status, visible, keep_alive, always_show, |
| | | creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | -- é£é©åå
管ç |
| | | (1065917, 'é£é©åå
管ç', '', 2, 2, 1065910, 'risk-unit', 'ep:location', |
| | | 'safety/risk/unit/index', 'SafetyRiskUnit', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065918, 'é£é©åå
æ¥è¯¢', 'mes:safety-risk-unit:query', 3, 1, 1065917, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065919, 'é£é©åå
å建', 'mes:safety-risk-unit:create', 3, 2, 1065917, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065920, 'é£é©åå
æ´æ°', 'mes:safety-risk-unit:update', 3, 3, 1065917, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065921, 'é£é©åå
å é¤', 'mes:safety-risk-unit:delete', 3, 4, 1065917, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- é£é©æ¸
å管ç |
| | | (1065922, 'é£é©æ¸
å管ç', '', 2, 3, 1065910, 'risk-list', 'ep:warning', |
| | | 'safety/risk/list/index', 'SafetyRiskList', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065923, 'é£é©æ¸
åæ¥è¯¢', 'mes:safety-risk:query', 3, 1, 1065922, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065924, 'é£é©æ¸
åå建', 'mes:safety-risk:create', 3, 2, 1065922, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065925, 'é£é©æ¸
åæ´æ°', 'mes:safety-risk:update', 3, 3, 1065922, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065926, 'é£é©æ¸
åå é¤', 'mes:safety-risk:delete', 3, 4, 1065922, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 5. ææè¶
级管çå |
| | | -- --------------------------------------------------------------------- |
| | | INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted) |
| | | SELECT 1, m.id, '1', NOW(), '1', NOW(), b'0' |
| | | FROM system_menu m |
| | | WHERE m.id BETWEEN 1065917 AND 1065929; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 6. éªè¯ |
| | | -- --------------------------------------------------------------------- |
| | | SELECT id, parent_id, name, path, component, permission, type |
| | | FROM system_menu WHERE id BETWEEN 1065910 AND 1065929 ORDER BY id; |
| | | |
| | | SELECT dict_type, label, value FROM system_dict_data |
| | | WHERE dict_type LIKE 'mes_safety_%' ORDER BY dict_type, sort; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskUnitDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.md.workstation.MesMdWorkshopMapper; |
| | | import cn.iocoder.yudao.module.mes.service.safety.MesSafetyRiskService; |
| | | import cn.iocoder.yudao.module.mes.service.safety.MesSafetyRiskUnitService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©æ¸
å Controller |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Tag(name = "管çåå° - å®å
¨ç产-é£é©æ¸
å") |
| | | @RestController |
| | | @RequestMapping("/mes/safety/risk") |
| | | @Validated |
| | | public class MesSafetyRiskController { |
| | | |
| | | @Resource |
| | | private MesSafetyRiskService riskService; |
| | | |
| | | @Resource |
| | | private MesSafetyRiskUnitService riskUnitService; |
| | | |
| | | @Resource |
| | | private MesMdWorkshopMapper workshopMapper; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建é£é©æ¸
å") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk:create')") |
| | | public CommonResult<Long> createRisk(@Valid @RequestBody MesSafetyRiskSaveReqVO createReqVO) { |
| | | return success(riskService.createRisk(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°é£é©æ¸
å") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk:update')") |
| | | public CommonResult<Boolean> updateRisk(@Valid @RequestBody MesSafetyRiskSaveReqVO updateReqVO) { |
| | | riskService.updateRisk(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤é£é©æ¸
å") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk:delete')") |
| | | public CommonResult<Boolean> deleteRisk(@RequestParam("id") Long id) { |
| | | riskService.deleteRisk(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾é£é©æ¸
å") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk:query')") |
| | | public CommonResult<MesSafetyRiskRespVO> getRisk(@RequestParam("id") Long id) { |
| | | MesSafetyRiskDO risk = riskService.getRisk(id); |
| | | if (risk == null) { |
| | | return success(null); |
| | | } |
| | | List<MesSafetyRiskRespVO> list = buildRespList(Collections.singletonList(risk)); |
| | | return success(list.isEmpty() ? null : list.get(0)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "è·å¾é£é©æ¸
åå页") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk:query')") |
| | | public CommonResult<PageResult<MesSafetyRiskRespVO>> getRiskPage(@Valid MesSafetyRiskPageReqVO pageReqVO) { |
| | | PageResult<MesSafetyRiskDO> pageResult = riskService.getRiskPage(pageReqVO); |
| | | List<MesSafetyRiskRespVO> list = buildRespList(pageResult.getList()); |
| | | return success(new PageResult<>(list, pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/list-by-unit") |
| | | @Operation(summary = "è·å¾æå®é£é©åå
ä¸çé£é©æ¸
å") |
| | | @Parameter(name = "unitId", description = "é£é©åå
ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk:query')") |
| | | public CommonResult<List<MesSafetyRiskRespVO>> getRiskListByUnit(@RequestParam("unitId") Long unitId) { |
| | | return success(buildRespList(riskService.getRiskListByUnitId(unitId))); |
| | | } |
| | | |
| | | /** |
| | | * 转æ¢ä¸º VO å¹¶å¡«å
é£é©åå
åç§°ã车é´åç§°ã责任人å§åãé£é©ç级åç§° |
| | | */ |
| | | private List<MesSafetyRiskRespVO> buildRespList(List<MesSafetyRiskDO> list) { |
| | | if (list == null || list.isEmpty()) { |
| | | return Collections.emptyList(); |
| | | } |
| | | List<MesSafetyRiskRespVO> respList = BeanUtils.toBean(list, MesSafetyRiskRespVO.class); |
| | | |
| | | // é£é©åå
|
| | | Set<Long> unitIds = list.stream().map(MesSafetyRiskDO::getUnitId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, MesSafetyRiskUnitDO> unitMap = riskUnitService.getRiskUnitMap(unitIds); |
| | | |
| | | // 车é´åç§°ï¼ç»é£é©åå
ç workshopId åï¼ |
| | | Set<Long> workshopIds = unitMap.values().stream().map(MesSafetyRiskUnitDO::getWorkshopId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, String> workshopNameMap = new HashMap<>(); |
| | | if (!workshopIds.isEmpty()) { |
| | | List<MesMdWorkshopDO> workshops = workshopMapper.selectByIds(workshopIds); |
| | | workshops.forEach(w -> workshopNameMap.put(w.getId(), w.getName())); |
| | | } |
| | | |
| | | // 责任人å§å |
| | | Set<Long> userIds = list.stream().map(MesSafetyRiskDO::getChargeUserId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, AdminUserRespDTO> userMap = userIds.isEmpty() |
| | | ? Collections.emptyMap() : adminUserApi.getUserMap(userIds); |
| | | |
| | | for (MesSafetyRiskRespVO vo : respList) { |
| | | MesSafetyRiskUnitDO unit = unitMap.get(vo.getUnitId()); |
| | | if (unit != null) { |
| | | vo.setUnitName(unit.getName()); |
| | | vo.setWorkshopName(workshopNameMap.get(unit.getWorkshopId())); |
| | | } |
| | | AdminUserRespDTO user = userMap.get(vo.getChargeUserId()); |
| | | if (user != null) { |
| | | vo.setChargeUserName(user.getNickname()); |
| | | } |
| | | vo.setRiskLevelName(riskLevelName(vo.getRiskLevel())); |
| | | } |
| | | return respList; |
| | | } |
| | | |
| | | private String riskLevelName(Integer level) { |
| | | if (level == null) { |
| | | return null; |
| | | } |
| | | switch (level) { |
| | | case 1: return "é大é£é©"; |
| | | case 2: return "è¾å¤§é£é©"; |
| | | case 3: return "ä¸è¬é£é©"; |
| | | case 4: return "ä½é£é©"; |
| | | default: return null; |
| | | } |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskUnitDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.md.workstation.MesMdWorkshopMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskMapper; |
| | | import cn.iocoder.yudao.module.mes.service.safety.MesSafetyRiskUnitService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©åå
Controller |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Tag(name = "管çåå° - å®å
¨ç产-é£é©åå
") |
| | | @RestController |
| | | @RequestMapping("/mes/safety/risk-unit") |
| | | @Validated |
| | | public class MesSafetyRiskUnitController { |
| | | |
| | | @Resource |
| | | private MesSafetyRiskUnitService riskUnitService; |
| | | |
| | | @Resource |
| | | private MesMdWorkshopMapper workshopMapper; |
| | | |
| | | @Resource |
| | | private MesSafetyRiskMapper riskMapper; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建é£é©åå
") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk-unit:create')") |
| | | public CommonResult<Long> createRiskUnit(@Valid @RequestBody MesSafetyRiskUnitSaveReqVO createReqVO) { |
| | | return success(riskUnitService.createRiskUnit(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°é£é©åå
") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk-unit:update')") |
| | | public CommonResult<Boolean> updateRiskUnit(@Valid @RequestBody MesSafetyRiskUnitSaveReqVO updateReqVO) { |
| | | riskUnitService.updateRiskUnit(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤é£é©åå
") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk-unit:delete')") |
| | | public CommonResult<Boolean> deleteRiskUnit(@RequestParam("id") Long id) { |
| | | riskUnitService.deleteRiskUnit(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾é£é©åå
") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk-unit:query')") |
| | | public CommonResult<MesSafetyRiskUnitRespVO> getRiskUnit(@RequestParam("id") Long id) { |
| | | MesSafetyRiskUnitDO unit = riskUnitService.getRiskUnit(id); |
| | | if (unit == null) { |
| | | return success(null); |
| | | } |
| | | List<MesSafetyRiskUnitRespVO> list = buildRespList(Collections.singletonList(unit)); |
| | | return success(list.isEmpty() ? null : list.get(0)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "è·å¾é£é©åå
å页") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk-unit:query')") |
| | | public CommonResult<PageResult<MesSafetyRiskUnitRespVO>> getRiskUnitPage(@Valid MesSafetyRiskUnitPageReqVO pageReqVO) { |
| | | PageResult<MesSafetyRiskUnitDO> pageResult = riskUnitService.getRiskUnitPage(pageReqVO); |
| | | List<MesSafetyRiskUnitRespVO> list = buildRespList(pageResult.getList()); |
| | | return success(new PageResult<>(list, pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/simple-list") |
| | | @Operation(summary = "è·å¾é£é©åå
ç²¾ç®å表ï¼å¯ç¨ç¶æï¼ï¼ç¨äºä¸æéæ©") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-risk-unit:query')") |
| | | public CommonResult<List<MesSafetyRiskUnitRespVO>> getRiskUnitSimpleList() { |
| | | return success(buildRespList(riskUnitService.getRiskUnitSimpleList())); |
| | | } |
| | | |
| | | /** |
| | | * 转æ¢ä¸º VO å¹¶å¡«å
车é´åç§°ã责任人å§åãé£é©æ¡æ° |
| | | */ |
| | | private List<MesSafetyRiskUnitRespVO> buildRespList(List<MesSafetyRiskUnitDO> list) { |
| | | if (list == null || list.isEmpty()) { |
| | | return Collections.emptyList(); |
| | | } |
| | | List<MesSafetyRiskUnitRespVO> respList = BeanUtils.toBean(list, MesSafetyRiskUnitRespVO.class); |
| | | |
| | | // 车é´åç§° |
| | | Set<Long> workshopIds = list.stream().map(MesSafetyRiskUnitDO::getWorkshopId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, String> workshopNameMap = new HashMap<>(); |
| | | if (!workshopIds.isEmpty()) { |
| | | List<MesMdWorkshopDO> workshops = workshopMapper.selectByIds(workshopIds); |
| | | workshops.forEach(w -> workshopNameMap.put(w.getId(), w.getName())); |
| | | } |
| | | // 责任人å§å |
| | | Set<Long> userIds = list.stream().map(MesSafetyRiskUnitDO::getChargeUserId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, AdminUserRespDTO> userMap = userIds.isEmpty() |
| | | ? Collections.emptyMap() : adminUserApi.getUserMap(userIds); |
| | | |
| | | for (MesSafetyRiskUnitRespVO vo : respList) { |
| | | vo.setWorkshopName(workshopNameMap.get(vo.getWorkshopId())); |
| | | AdminUserRespDTO user = userMap.get(vo.getChargeUserId()); |
| | | if (user != null) { |
| | | vo.setChargeUserName(user.getNickname()); |
| | | } |
| | | Long count = riskMapper.selectCountByUnitIds(Collections.singletonList(vo.getId())); |
| | | vo.setRiskCount(count == null ? 0L : count); |
| | | } |
| | | return respList; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.ToString; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-é£é©æ¸
åå页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class MesSafetyRiskPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "é£é©ç¼ç ", example = "FX-001-01") |
| | | private String code; |
| | | |
| | | @Schema(description = "é£é©åç§°", example = "ç缸è¶
åçç¸") |
| | | private String name; |
| | | |
| | | @Schema(description = "é£é©åå
ç¼å·", example = "1") |
| | | private Long unitId; |
| | | |
| | | @Schema(description = "äºæ
ç±»å", example = "12") |
| | | private Integer accidentType; |
| | | |
| | | @Schema(description = "é£é©ç级", example = "1") |
| | | private Integer riskLevel; |
| | | |
| | | @Schema(description = "ç¶æ", example = "1") |
| | | private Integer status; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-é£é©æ¸
å Response VO") |
| | | @Data |
| | | public class MesSafetyRiskRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "é£é©åå
ç¼å·", example = "1") |
| | | private Long unitId; |
| | | |
| | | @Schema(description = "é£é©åå
åç§°", example = "é 纸车é´1#ç缸") |
| | | private String unitName; |
| | | |
| | | @Schema(description = "æå±è½¦é´åç§°", example = "é 纸车é´") |
| | | private String workshopName; |
| | | |
| | | @Schema(description = "é£é©ç¼ç ", example = "FX-001-01") |
| | | private String code; |
| | | |
| | | @Schema(description = "é£é©åç§°", example = "ç缸è¶
åçç¸") |
| | | private String name; |
| | | |
| | | @Schema(description = "äºæ
ç±»å", example = "12") |
| | | private Integer accidentType; |
| | | |
| | | @Schema(description = "å¯è½å¯¼è´çåæè¯´æ") |
| | | private String possibleConsequence; |
| | | |
| | | @Schema(description = "L äºæ
åçå¯è½æ§", example = "3") |
| | | private BigDecimal likelihood; |
| | | |
| | | @Schema(description = "E æ´é²äºå±é©ç¯å¢é¢ç", example = "6") |
| | | private BigDecimal exposure; |
| | | |
| | | @Schema(description = "C äºæ
åæä¸¥éæ§", example = "15") |
| | | private BigDecimal consequence; |
| | | |
| | | @Schema(description = "D é£é©å¼", example = "270") |
| | | private BigDecimal riskValue; |
| | | |
| | | @Schema(description = "é£é©ç级", example = "2") |
| | | private Integer riskLevel; |
| | | |
| | | @Schema(description = "é£é©ç级åç§°", example = "è¾å¤§é£é©") |
| | | private String riskLevelName; |
| | | |
| | | @Schema(description = "å·¥ç¨ææ¯æªæ½") |
| | | private String controlEngineering; |
| | | |
| | | @Schema(description = "ç®¡çæªæ½") |
| | | private String controlManagement; |
| | | |
| | | @Schema(description = "å¹è®æè²æªæ½") |
| | | private String controlTraining; |
| | | |
| | | @Schema(description = "个ä½é²æ¤æªæ½") |
| | | private String controlPpe; |
| | | |
| | | @Schema(description = "åºæ¥å¤ç½®æªæ½") |
| | | private String controlEmergency; |
| | | |
| | | @Schema(description = "æ¬æ¬¡è¯ä¼°æ¥æ") |
| | | private LocalDate evaluateDate; |
| | | |
| | | @Schema(description = "䏿¬¡è¯ä¼°æ¥æ") |
| | | private LocalDate nextEvaluateDate; |
| | | |
| | | @Schema(description = "管æ§è´£ä»»äººç¼å·", example = "1") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "管æ§è´£ä»»äººå§å", example = "å¼ ç¿") |
| | | private String chargeUserName; |
| | | |
| | | @Schema(description = "ç¶æ", example = "1") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-é£é©æ¸
åæ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class MesSafetyRiskSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "é£é©åå
ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "é£é©åå
ä¸è½ä¸ºç©º") |
| | | private Long unitId; |
| | | |
| | | @Schema(description = "é£é©ç¼ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "FX-001-01") |
| | | @NotEmpty(message = "é£é©ç¼ç ä¸è½ä¸ºç©º") |
| | | private String code; |
| | | |
| | | @Schema(description = "é£é©åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "ç缸è¶
åçç¸") |
| | | @NotEmpty(message = "é£é©åç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "äºæ
ç±»å", example = "12") |
| | | private Integer accidentType; |
| | | |
| | | @Schema(description = "å¯è½å¯¼è´çåæè¯´æ", example = "人å伤亡ãè®¾å¤ææ¯") |
| | | private String possibleConsequence; |
| | | |
| | | @Schema(description = "L äºæ
åçå¯è½æ§", example = "3") |
| | | private BigDecimal likelihood; |
| | | |
| | | @Schema(description = "E æ´é²äºå±é©ç¯å¢é¢ç", example = "6") |
| | | private BigDecimal exposure; |
| | | |
| | | @Schema(description = "C äºæ
åæä¸¥éæ§", example = "15") |
| | | private BigDecimal consequence; |
| | | |
| | | @Schema(description = "å·¥ç¨ææ¯æªæ½") |
| | | private String controlEngineering; |
| | | |
| | | @Schema(description = "ç®¡çæªæ½") |
| | | private String controlManagement; |
| | | |
| | | @Schema(description = "å¹è®æè²æªæ½") |
| | | private String controlTraining; |
| | | |
| | | @Schema(description = "个ä½é²æ¤æªæ½") |
| | | private String controlPpe; |
| | | |
| | | @Schema(description = "åºæ¥å¤ç½®æªæ½") |
| | | private String controlEmergency; |
| | | |
| | | @Schema(description = "æ¬æ¬¡è¯ä¼°æ¥æ") |
| | | private LocalDate evaluateDate; |
| | | |
| | | @Schema(description = "䏿¬¡è¯ä¼°æ¥æ") |
| | | private LocalDate nextEvaluateDate; |
| | | |
| | | @Schema(description = "管æ§è´£ä»»äººç¼å·", example = "1") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç¶æä¸è½ä¸ºç©º") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.ToString; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-é£é©åå
å页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class MesSafetyRiskUnitPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "é£é©åå
ç¼ç ", example = "FX-001") |
| | | private String code; |
| | | |
| | | @Schema(description = "é£é©åå
åç§°", example = "é 纸车é´1#ç缸") |
| | | private String name; |
| | | |
| | | @Schema(description = "æå±è½¦é´ç¼å·", example = "7") |
| | | private Long workshopId; |
| | | |
| | | @Schema(description = "é£é©ç±»å«", example = "1") |
| | | private Integer riskCategory; |
| | | |
| | | @Schema(description = "ç¶æ", example = "1") |
| | | private Integer status; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-é£é©åå
Response VO") |
| | | @Data |
| | | public class MesSafetyRiskUnitRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "é£é©åå
ç¼ç ", example = "FX-001") |
| | | private String code; |
| | | |
| | | @Schema(description = "é£é©åå
åç§°", example = "é 纸车é´1#ç缸") |
| | | private String name; |
| | | |
| | | @Schema(description = "æå±è½¦é´ç¼å·", example = "7") |
| | | private Long workshopId; |
| | | |
| | | @Schema(description = "æå±è½¦é´åç§°", example = "é 纸车é´") |
| | | private String workshopName; |
| | | |
| | | @Schema(description = "å
·ä½ä½ç½®", example = "é 纸车é´ä¸ä¾§") |
| | | private String location; |
| | | |
| | | @Schema(description = "é£é©ç±»å«", example = "1") |
| | | private Integer riskCategory; |
| | | |
| | | @Schema(description = "责任人ç¼å·", example = "1") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "责任人å§å", example = "å¼ ç¿") |
| | | private String chargeUserName; |
| | | |
| | | @Schema(description = "ç¶æ", example = "1") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "该åå
ä¸çé£é©æ¡æ°", example = "3") |
| | | private Long riskCount; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-é£é©åå
æ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class MesSafetyRiskUnitSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "é£é©åå
ç¼ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "FX-001") |
| | | @NotEmpty(message = "é£é©åå
ç¼ç ä¸è½ä¸ºç©º") |
| | | private String code; |
| | | |
| | | @Schema(description = "é£é©åå
åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "é 纸车é´1#ç缸") |
| | | @NotEmpty(message = "é£é©åå
åç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "æå±è½¦é´ç¼å·", example = "7") |
| | | private Long workshopId; |
| | | |
| | | @Schema(description = "å
·ä½ä½ç½®", example = "é 纸车é´ä¸ä¾§") |
| | | private String location; |
| | | |
| | | @Schema(description = "é£é©ç±»å«", example = "1") |
| | | private Integer riskCategory; |
| | | |
| | | @Schema(description = "责任人ç¼å·", example = "1") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç¶æä¸è½ä¸ºç©º") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.dataobject.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©äºä»¶æ¸
å DO |
| | | * |
| | | * éç¨ LEC æ³ï¼æ ¼é·åå§-éå°¼æ³ï¼è¯ä¼°ï¼ |
| | | * D = L Ã E Ã C |
| | | * Dâ¥320 é大(1) / 160â¤D<320 è¾å¤§(2) / 70â¤D<160 ä¸è¬(3) / D<70 ä½(4) |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("mes_safety_risk") |
| | | @KeySequence("mes_safety_risk_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class MesSafetyRiskDO extends BaseDO { |
| | | |
| | | /** |
| | | * ç¼å· |
| | | */ |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** |
| | | * é£é©åå
ç¼å· |
| | | */ |
| | | private Long unitId; |
| | | |
| | | /** |
| | | * é£é©ç¼ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * é£é©åç§° / æè¿° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * å¯è½å¯¼è´çäºæ
ç±»å |
| | | * |
| | | * åå
¸ mes_safety_accident_type |
| | | */ |
| | | private Integer accidentType; |
| | | |
| | | /** |
| | | * å¯è½å¯¼è´çåæè¯´æ |
| | | */ |
| | | private String possibleConsequence; |
| | | |
| | | /** |
| | | * L äºæ
åçå¯è½æ§ |
| | | */ |
| | | private BigDecimal likelihood; |
| | | |
| | | /** |
| | | * E æ´é²äºå±é©ç¯å¢é¢ç |
| | | */ |
| | | private BigDecimal exposure; |
| | | |
| | | /** |
| | | * C äºæ
åæä¸¥éæ§ |
| | | */ |
| | | private BigDecimal consequence; |
| | | |
| | | /** |
| | | * D é£é©å¼ = L à E à C |
| | | */ |
| | | private BigDecimal riskValue; |
| | | |
| | | /** |
| | | * é£é©ç级 |
| | | * |
| | | * åå
¸ mes_safety_risk_levelï¼1=é大 2=è¾å¤§ 3=ä¸è¬ 4=ä½ |
| | | */ |
| | | private Integer riskLevel; |
| | | |
| | | /** |
| | | * å·¥ç¨ææ¯æªæ½ |
| | | */ |
| | | private String controlEngineering; |
| | | |
| | | /** |
| | | * ç®¡çæªæ½ |
| | | */ |
| | | private String controlManagement; |
| | | |
| | | /** |
| | | * å¹è®æè²æªæ½ |
| | | */ |
| | | private String controlTraining; |
| | | |
| | | /** |
| | | * 个ä½é²æ¤æªæ½ |
| | | */ |
| | | private String controlPpe; |
| | | |
| | | /** |
| | | * åºæ¥å¤ç½®æªæ½ |
| | | */ |
| | | private String controlEmergency; |
| | | |
| | | /** |
| | | * æ¬æ¬¡è¯ä¼°æ¥æ |
| | | */ |
| | | private LocalDate evaluateDate; |
| | | |
| | | /** |
| | | * 䏿¬¡è¯ä¼°æ¥æ |
| | | */ |
| | | private LocalDate nextEvaluateDate; |
| | | |
| | | /** |
| | | * 管æ§è´£ä»»äººç¼å· |
| | | */ |
| | | private Long chargeUserId; |
| | | |
| | | /** |
| | | * ç¶æ |
| | | * |
| | | * 1=ææ 0=已失æ |
| | | */ |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.dataobject.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©åå
ï¼é£é©ç¹ï¼ DO |
| | | * |
| | | * é£é©è¯å«çæå°åå
ï¼ä¾å¦ãé çº¸è½¦é´ 1# ç缸ããé
çµå®¤ããæåä»åºã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("mes_safety_risk_unit") |
| | | @KeySequence("mes_safety_risk_unit_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class MesSafetyRiskUnitDO extends BaseDO { |
| | | |
| | | /** |
| | | * ç¼å· |
| | | */ |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** |
| | | * é£é©åå
ç¼ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * é£é©åå
åç§° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * æå±è½¦é´ç¼å· |
| | | */ |
| | | private Long workshopId; |
| | | |
| | | /** |
| | | * å
·ä½ä½ç½® |
| | | */ |
| | | private String location; |
| | | |
| | | /** |
| | | * é£é©ç±»å« |
| | | * |
| | | * åå
¸ mes_safety_risk_categoryï¼1=设å¤è®¾æ½ 2=ä½ä¸æ´»å¨ 3=ä½ä¸ç¯å¢ 4=å®å
¨ç®¡ç |
| | | */ |
| | | private Integer riskCategory; |
| | | |
| | | /** |
| | | * 责任人ç¼å· |
| | | */ |
| | | private Long chargeUserId; |
| | | |
| | | /** |
| | | * ç¶æ |
| | | * |
| | | * 1=å¯ç¨ 0=åç¨ |
| | | */ |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.mysql.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©äºä»¶æ¸
å Mapper |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Mapper |
| | | public interface MesSafetyRiskMapper extends BaseMapperX<MesSafetyRiskDO> { |
| | | |
| | | default PageResult<MesSafetyRiskDO> selectPage(MesSafetyRiskPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<MesSafetyRiskDO>() |
| | | .likeIfPresent(MesSafetyRiskDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(MesSafetyRiskDO::getName, reqVO.getName()) |
| | | .eqIfPresent(MesSafetyRiskDO::getUnitId, reqVO.getUnitId()) |
| | | .eqIfPresent(MesSafetyRiskDO::getAccidentType, reqVO.getAccidentType()) |
| | | .eqIfPresent(MesSafetyRiskDO::getRiskLevel, reqVO.getRiskLevel()) |
| | | .eqIfPresent(MesSafetyRiskDO::getStatus, reqVO.getStatus()) |
| | | .orderByDesc(MesSafetyRiskDO::getRiskValue) |
| | | .orderByDesc(MesSafetyRiskDO::getId)); |
| | | } |
| | | |
| | | default MesSafetyRiskDO selectByCode(String code) { |
| | | return selectOne(MesSafetyRiskDO::getCode, code); |
| | | } |
| | | |
| | | default List<MesSafetyRiskDO> selectListByUnitId(Long unitId) { |
| | | return selectList(new LambdaQueryWrapperX<MesSafetyRiskDO>() |
| | | .eq(MesSafetyRiskDO::getUnitId, unitId) |
| | | .orderByDesc(MesSafetyRiskDO::getRiskValue)); |
| | | } |
| | | |
| | | default Long selectCountByUnitIds(Collection<Long> unitIds) { |
| | | return selectCount(new LambdaQueryWrapperX<MesSafetyRiskDO>() |
| | | .in(MesSafetyRiskDO::getUnitId, unitIds)); |
| | | } |
| | | |
| | | default List<MesSafetyRiskDO> selectListByStatus(Integer status) { |
| | | return selectList(new LambdaQueryWrapperX<MesSafetyRiskDO>() |
| | | .eqIfPresent(MesSafetyRiskDO::getStatus, status) |
| | | .orderByDesc(MesSafetyRiskDO::getRiskValue)); |
| | | } |
| | | |
| | | /** |
| | | * æé£é©ç级ç»è®¡æ°éï¼ç¨äºçæ¿/ç»è®¡ï¼ |
| | | */ |
| | | default List<MesSafetyRiskDO> selectAllList() { |
| | | return selectList(new LambdaQueryWrapperX<MesSafetyRiskDO>() |
| | | .eq(MesSafetyRiskDO::getStatus, 1) |
| | | .orderByDesc(MesSafetyRiskDO::getRiskValue)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.dal.mysql.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskUnitDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©åå
Mapper |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Mapper |
| | | public interface MesSafetyRiskUnitMapper extends BaseMapperX<MesSafetyRiskUnitDO> { |
| | | |
| | | default PageResult<MesSafetyRiskUnitDO> selectPage(MesSafetyRiskUnitPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<MesSafetyRiskUnitDO>() |
| | | .likeIfPresent(MesSafetyRiskUnitDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(MesSafetyRiskUnitDO::getName, reqVO.getName()) |
| | | .eqIfPresent(MesSafetyRiskUnitDO::getWorkshopId, reqVO.getWorkshopId()) |
| | | .eqIfPresent(MesSafetyRiskUnitDO::getRiskCategory, reqVO.getRiskCategory()) |
| | | .eqIfPresent(MesSafetyRiskUnitDO::getStatus, reqVO.getStatus()) |
| | | .orderByDesc(MesSafetyRiskUnitDO::getId)); |
| | | } |
| | | |
| | | default MesSafetyRiskUnitDO selectByCode(String code) { |
| | | return selectOne(MesSafetyRiskUnitDO::getCode, code); |
| | | } |
| | | |
| | | default List<MesSafetyRiskUnitDO> selectSimpleList() { |
| | | return selectList(new LambdaQueryWrapperX<MesSafetyRiskUnitDO>() |
| | | .eq(MesSafetyRiskUnitDO::getStatus, 1) |
| | | .orderByAsc(MesSafetyRiskUnitDO::getCode)); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | // ========== å®å
¨ç产 (Safety) ========== |
| | | String MES_PRO_EMERGENCY_PLAN_TYPE = "mes_pro_emergency_plan_type"; // åºæ¥å¤ç½®é¢æ¡ç±»å |
| | | |
| | | // å®å
¨é£é©åçº§ç®¡æ§ |
| | | String MES_SAFETY_RISK_LEVEL = "mes_safety_risk_level"; // é£é©ç级ï¼1é大 2è¾å¤§ 3ä¸è¬ 4ä½ï¼ |
| | | String MES_SAFETY_RISK_CATEGORY = "mes_safety_risk_category"; // é£é©ç±»å« |
| | | String MES_SAFETY_ACCIDENT_TYPE = "mes_safety_accident_type"; // äºæ
ç±»å |
| | | String MES_SAFETY_UNIT_STATUS = "mes_safety_unit_status"; // é£é©åå
ç¶æ |
| | | } |
| | |
| | | ErrorCode MES_PRO_EMERGENCY_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_903_001, "颿¡ç¼ç å·²åå¨"); |
| | | ErrorCode MES_PRO_EMERGENCY_PLAN_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_903_002, "导å
¥æ°æ®ä¸è½ä¸ºç©º"); |
| | | |
| | | // ========== MES å®å
¨ç产 - é£é©å级管æ§ï¼1-040-904-000ï¼ ========== |
| | | ErrorCode MES_SAFETY_RISK_UNIT_NOT_EXISTS = new ErrorCode(1_040_904_000, "é£é©åå
ä¸åå¨"); |
| | | ErrorCode MES_SAFETY_RISK_UNIT_CODE_DUPLICATE = new ErrorCode(1_040_904_001, "é£é©åå
ç¼ç å·²åå¨"); |
| | | ErrorCode MES_SAFETY_RISK_UNIT_HAS_RISK = new ErrorCode(1_040_904_002, "该é£é©åå
ä¸å·²åå¨é£é©æ¸
åï¼æ æ³å é¤"); |
| | | ErrorCode MES_SAFETY_RISK_NOT_EXISTS = new ErrorCode(1_040_904_010, "é£é©æ¸
åè®°å½ä¸åå¨"); |
| | | ErrorCode MES_SAFETY_RISK_CODE_DUPLICATE = new ErrorCode(1_040_904_011, "é£é©ç¼ç å·²åå¨"); |
| | | ErrorCode MES_SAFETY_RISK_LEC_INVALID = new ErrorCode(1_040_904_012, "LEC è¯ä¼°å¼ä¸åæ³ï¼LãEãC é½å¿
é¡»å¤§äº 0"); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskDO; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©æ¸
å Service æ¥å£ |
| | | * |
| | | * é£é©è¯ä¼°éç¨ LEC æ³ï¼D = L à E à C |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesSafetyRiskService { |
| | | |
| | | /** |
| | | * è·å¾é£é©æ¸
åå页 |
| | | */ |
| | | PageResult<MesSafetyRiskDO> getRiskPage(MesSafetyRiskPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * è·å¾é£é©æ¸
å |
| | | */ |
| | | MesSafetyRiskDO getRisk(Long id); |
| | | |
| | | /** |
| | | * å建é£é©æ¸
åï¼èªå¨è®¡ç® D å¼ä¸é£é©ççº§ï¼ |
| | | */ |
| | | Long createRisk(MesSafetyRiskSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°é£é©æ¸
åï¼èªå¨éç® D å¼ä¸é£é©ççº§ï¼ |
| | | */ |
| | | void updateRisk(MesSafetyRiskSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å é¤é£é©æ¸
å |
| | | */ |
| | | void deleteRisk(Long id); |
| | | |
| | | /** |
| | | * è·å¾æå®é£é©åå
ä¸çé£é©æ¸
å |
| | | */ |
| | | List<MesSafetyRiskDO> getRiskListByUnitId(Long unitId); |
| | | |
| | | /** |
| | | * æ ¡éªé£é©æ¸
ååå¨ |
| | | */ |
| | | MesSafetyRiskDO validateRiskExists(Long id); |
| | | |
| | | /** |
| | | * 计ç®é£é©å¼ D = L à E à C |
| | | */ |
| | | java.math.BigDecimal calculateRiskValue(java.math.BigDecimal likelihood, |
| | | java.math.BigDecimal exposure, |
| | | java.math.BigDecimal consequence); |
| | | |
| | | /** |
| | | * æé£é©å¼è®¡ç®é£é©ç级ï¼Dâ¥320 é大(1)ï¼160â¤D<320 è¾å¤§(2)ï¼70â¤D<160 ä¸è¬(3)ï¼D<70 ä½(4) |
| | | */ |
| | | Integer calculateRiskLevel(java.math.BigDecimal riskValue); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.risk.MesSafetyRiskSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskMapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©æ¸
å Service å®ç° |
| | | * |
| | | * LEC æ³ï¼æ ¼é·åå§-éå°¼æ³ï¼ï¼ |
| | | * D = L Ã E Ã C |
| | | * ç级ï¼Dâ¥320 é大(1)ï¼160â¤D<320 è¾å¤§(2)ï¼70â¤D<160 ä¸è¬(3)ï¼D<70 ä½(4) |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MesSafetyRiskServiceImpl implements MesSafetyRiskService { |
| | | |
| | | /** é£é©ç级éå¼ */ |
| | | private static final BigDecimal LEVEL_1_THRESHOLD = new BigDecimal("320"); |
| | | private static final BigDecimal LEVEL_2_THRESHOLD = new BigDecimal("160"); |
| | | private static final BigDecimal LEVEL_3_THRESHOLD = new BigDecimal("70"); |
| | | |
| | | @Resource |
| | | private MesSafetyRiskMapper riskMapper; |
| | | |
| | | @Resource |
| | | private MesSafetyRiskUnitService riskUnitService; |
| | | |
| | | @Override |
| | | public PageResult<MesSafetyRiskDO> getRiskPage(MesSafetyRiskPageReqVO pageReqVO) { |
| | | return riskMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public MesSafetyRiskDO getRisk(Long id) { |
| | | return riskMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public Long createRisk(MesSafetyRiskSaveReqVO createReqVO) { |
| | | // 1. é£é©åå
å¿
é¡»åå¨ |
| | | riskUnitService.validateRiskUnitExists(createReqVO.getUnitId()); |
| | | // 2. ç¼ç å¯ä¸ |
| | | validateCodeUnique(null, createReqVO.getCode()); |
| | | // 3. 转æ¢å¹¶è®¡ç® LEC |
| | | MesSafetyRiskDO risk = BeanUtils.toBean(createReqVO, MesSafetyRiskDO.class); |
| | | applyLecEvaluation(risk); |
| | | riskMapper.insert(risk); |
| | | return risk.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void updateRisk(MesSafetyRiskSaveReqVO updateReqVO) { |
| | | validateRiskExists(updateReqVO.getId()); |
| | | riskUnitService.validateRiskUnitExists(updateReqVO.getUnitId()); |
| | | validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); |
| | | MesSafetyRiskDO updateObj = BeanUtils.toBean(updateReqVO, MesSafetyRiskDO.class); |
| | | applyLecEvaluation(updateObj); |
| | | riskMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteRisk(Long id) { |
| | | validateRiskExists(id); |
| | | riskMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<MesSafetyRiskDO> getRiskListByUnitId(Long unitId) { |
| | | return riskMapper.selectListByUnitId(unitId); |
| | | } |
| | | |
| | | @Override |
| | | public MesSafetyRiskDO validateRiskExists(Long id) { |
| | | if (id == null) { |
| | | throw exception(MES_SAFETY_RISK_NOT_EXISTS); |
| | | } |
| | | MesSafetyRiskDO risk = riskMapper.selectById(id); |
| | | if (risk == null) { |
| | | throw exception(MES_SAFETY_RISK_NOT_EXISTS); |
| | | } |
| | | return risk; |
| | | } |
| | | |
| | | @Override |
| | | public BigDecimal calculateRiskValue(BigDecimal likelihood, BigDecimal exposure, BigDecimal consequence) { |
| | | if (likelihood == null || exposure == null || consequence == null) { |
| | | return null; |
| | | } |
| | | if (likelihood.compareTo(BigDecimal.ZERO) <= 0 |
| | | || exposure.compareTo(BigDecimal.ZERO) <= 0 |
| | | || consequence.compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw exception(MES_SAFETY_RISK_LEC_INVALID); |
| | | } |
| | | // D = L à E à Cï¼ä¿ç 2 ä½å°æ° |
| | | return likelihood.multiply(exposure).multiply(consequence) |
| | | .setScale(2, java.math.RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | @Override |
| | | public Integer calculateRiskLevel(BigDecimal riskValue) { |
| | | if (riskValue == null) { |
| | | return null; |
| | | } |
| | | if (riskValue.compareTo(LEVEL_1_THRESHOLD) >= 0) { |
| | | return 1; // é大é£é© |
| | | } |
| | | if (riskValue.compareTo(LEVEL_2_THRESHOLD) >= 0) { |
| | | return 2; // è¾å¤§é£é© |
| | | } |
| | | if (riskValue.compareTo(LEVEL_3_THRESHOLD) >= 0) { |
| | | return 3; // ä¸è¬é£é© |
| | | } |
| | | return 4; // ä½é£é© |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å¹¶åå¡« D å¼ä¸é£é©ç级 |
| | | */ |
| | | private void applyLecEvaluation(MesSafetyRiskDO risk) { |
| | | // L/E/C é½ä¸ºç©ºæ¶è§ä¸ºæªè¯ä¼°ï¼ä¿æç©ºå¼ |
| | | if (risk.getLikelihood() == null && risk.getExposure() == null && risk.getConsequence() == null) { |
| | | risk.setRiskValue(null); |
| | | risk.setRiskLevel(null); |
| | | return; |
| | | } |
| | | BigDecimal riskValue = calculateRiskValue(risk.getLikelihood(), risk.getExposure(), risk.getConsequence()); |
| | | risk.setRiskValue(riskValue); |
| | | risk.setRiskLevel(calculateRiskLevel(riskValue)); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªç¼ç å¯ä¸ï¼id 为空表示æ°å¢ï¼ |
| | | */ |
| | | private void validateCodeUnique(Long id, String code) { |
| | | MesSafetyRiskDO exists = riskMapper.selectByCode(code); |
| | | if (exists == null) { |
| | | return; |
| | | } |
| | | if (id == null || !Objects.equals(exists.getId(), id)) { |
| | | throw exception(MES_SAFETY_RISK_CODE_DUPLICATE); |
| | | } |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskUnitDO; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©åå
Service æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesSafetyRiskUnitService { |
| | | |
| | | /** |
| | | * è·å¾é£é©åå
å页 |
| | | */ |
| | | PageResult<MesSafetyRiskUnitDO> getRiskUnitPage(MesSafetyRiskUnitPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * è·å¾é£é©åå
|
| | | */ |
| | | MesSafetyRiskUnitDO getRiskUnit(Long id); |
| | | |
| | | /** |
| | | * å建é£é©åå
|
| | | */ |
| | | Long createRiskUnit(MesSafetyRiskUnitSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°é£é©åå
|
| | | */ |
| | | void updateRiskUnit(MesSafetyRiskUnitSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å é¤é£é©åå
|
| | | * |
| | | * åå
ä¸è¥å·²æé£é©æ¸
åï¼ç¦æ¢å é¤ |
| | | */ |
| | | void deleteRiskUnit(Long id); |
| | | |
| | | /** |
| | | * è·å¾é£é©åå
ç²¾ç®å表ï¼å¯ç¨ç¶æï¼ï¼ç¨äºä¸æéæ© |
| | | */ |
| | | List<MesSafetyRiskUnitDO> getRiskUnitSimpleList(); |
| | | |
| | | /** |
| | | * æ ¡éªé£é©åå
åå¨ |
| | | */ |
| | | MesSafetyRiskUnitDO validateRiskUnitExists(Long id); |
| | | |
| | | /** |
| | | * æ¹éè·å¾é£é©åå
Mapï¼key 为 idï¼ |
| | | */ |
| | | java.util.Map<Long, MesSafetyRiskUnitDO> getRiskUnitMap(Collection<Long> ids); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.safety; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskUnitDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskUnitMapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - é£é©åå
Service å®ç° |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MesSafetyRiskUnitServiceImpl implements MesSafetyRiskUnitService { |
| | | |
| | | @Resource |
| | | private MesSafetyRiskUnitMapper riskUnitMapper; |
| | | |
| | | @Resource |
| | | private MesSafetyRiskMapper riskMapper; |
| | | |
| | | @Override |
| | | public PageResult<MesSafetyRiskUnitDO> getRiskUnitPage(MesSafetyRiskUnitPageReqVO pageReqVO) { |
| | | return riskUnitMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public MesSafetyRiskUnitDO getRiskUnit(Long id) { |
| | | return riskUnitMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public Long createRiskUnit(MesSafetyRiskUnitSaveReqVO createReqVO) { |
| | | // ç¼ç å¯ä¸æ§æ ¡éª |
| | | validateCodeUnique(null, createReqVO.getCode()); |
| | | MesSafetyRiskUnitDO unit = BeanUtils.toBean(createReqVO, MesSafetyRiskUnitDO.class); |
| | | riskUnitMapper.insert(unit); |
| | | return unit.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void updateRiskUnit(MesSafetyRiskUnitSaveReqVO updateReqVO) { |
| | | validateRiskUnitExists(updateReqVO.getId()); |
| | | validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); |
| | | MesSafetyRiskUnitDO updateObj = BeanUtils.toBean(updateReqVO, MesSafetyRiskUnitDO.class); |
| | | riskUnitMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteRiskUnit(Long id) { |
| | | validateRiskUnitExists(id); |
| | | // åå
ä¸å·²æé£é©æ¸
åæ¶ä¸å
许å é¤ï¼é¿å
产çå¤å¿æ°æ® |
| | | Long riskCount = riskMapper.selectCountByUnitIds(Collections.singletonList(id)); |
| | | if (riskCount != null && riskCount > 0) { |
| | | throw exception(MES_SAFETY_RISK_UNIT_HAS_RISK); |
| | | } |
| | | riskUnitMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<MesSafetyRiskUnitDO> getRiskUnitSimpleList() { |
| | | return riskUnitMapper.selectSimpleList(); |
| | | } |
| | | |
| | | @Override |
| | | public MesSafetyRiskUnitDO validateRiskUnitExists(Long id) { |
| | | if (id == null) { |
| | | throw exception(MES_SAFETY_RISK_UNIT_NOT_EXISTS); |
| | | } |
| | | MesSafetyRiskUnitDO unit = riskUnitMapper.selectById(id); |
| | | if (unit == null) { |
| | | throw exception(MES_SAFETY_RISK_UNIT_NOT_EXISTS); |
| | | } |
| | | return unit; |
| | | } |
| | | |
| | | @Override |
| | | public Map<Long, MesSafetyRiskUnitDO> getRiskUnitMap(Collection<Long> ids) { |
| | | if (ids == null || ids.isEmpty()) { |
| | | return Collections.emptyMap(); |
| | | } |
| | | List<MesSafetyRiskUnitDO> list = riskUnitMapper.selectByIds(ids); |
| | | return list.stream().collect(Collectors.toMap(MesSafetyRiskUnitDO::getId, u -> u, (a, b) -> a)); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªç¼ç å¯ä¸ï¼id 为空表示æ°å¢ï¼ |
| | | */ |
| | | private void validateCodeUnique(Long id, String code) { |
| | | MesSafetyRiskUnitDO exists = riskUnitMapper.selectByCode(code); |
| | | if (exists == null) { |
| | | return; |
| | | } |
| | | if (id == null || !Objects.equals(exists.getId(), id)) { |
| | | throw exception(MES_SAFETY_RISK_UNIT_CODE_DUPLICATE); |
| | | } |
| | | } |
| | | |
| | | } |