feat(safety): 安全生产三期 - 隐患排查治理
按客户需求「风险分级管控与隐患排查治理双重预防机制」的第二重落地。
状态流转:
0 待整改 --提交整改--> 20 待验收 --验收通过--> 30 已闭环
└--验收驳回--> 10 整改中(重新整改)
后端:
- 隐患台账 MesSafetyHazard:来源/等级/类别、关联风险单元、位置、发现人、
整改责任人与期限、整改要求、整改措施、验收信息
- 关键校验:
* 只有「待整改/整改中」可提交整改,已提交待验收的不可重复提交
* 只有「待验收」可验收
* 验收驳回必须填写驳回原因
* 已闭环的隐患不允许再修改基本信息(且 update 接口不回写状态与整改/验收字段)
- 超期判定由服务端计算(有期限、未闭环、期限早于今天)
- 反向引用保护:风险单元/风险清单被隐患引用后禁止删除
- 错误码 1_040_905_xxx;字典常量 MES_SAFETY_HAZARD_*
前端:
- 隐患列表:等级/来源字典渲染、超期红色标记、按状态动态显示可用操作
- 登记/修改表单、提交整改弹窗、整改验收弹窗(通过/驳回二选一,驳回必填原因)
SQL(mes_safety_hazard_init.sql,可重复执行):
- 建表 1 张、菜单挂到「安全生产」目录、字典 3 组、6 个按钮权限
注:本期只提交代码,SQL 尚未执行、未部署,待安全生产全部能力点完成后统一发布。
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================================== |
| | | -- å®å
¨ç产模å ââ 䏿ï¼éæ£ææ¥æ²»ç |
| | | -- |
| | | -- å®ä½ï¼åéé¢é²æºå¶ç第äºéãä¸ä¸æãé£é©å级管æ§ãé
å¥ä½¿ç¨ï¼ |
| | | -- 鿣å¯å
³èå°å
·ä½é£é©ç¹ï¼å½¢æãé£é©è¯å« â éæ£ææ¥ â æ´æ¹éç¯ãç宿´é¾è·¯ã |
| | | -- |
| | | -- ç¶ææµè½¬ï¼ |
| | | -- 0 å¾
æ´æ¹ ââæäº¤æ´æ¹ââ> 20 å¾
éªæ¶ ââéªæ¶éè¿ââ> 30 å·²éç¯ |
| | | -- â |
| | | -- âââéªæ¶é©³åââ> 10 æ´æ¹ä¸ï¼éæ°æ´æ¹ï¼ |
| | | -- |
| | | -- å
å®¹ï¼ |
| | | -- 1. 建表 mes_safety_hazardï¼éæ£å°è´¦ï¼ |
| | | -- 2. åå
¸ï¼éæ£æ¥æº / 鿣ç级 / éæ£ç¶æ |
| | | -- 3. èåï¼æå¨ãå®å
¨ç产ãç®å½ä¸ |
| | | -- 4. ææè¶
级管çå |
| | | -- |
| | | -- ç¹æ§ï¼å¯é夿§è¡ |
| | | -- ===================================================================== |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 1. 鿣å°è´¦ |
| | | -- --------------------------------------------------------------------- |
| | | CREATE TABLE IF NOT EXISTS `mes_safety_hazard` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `code` varchar(64) NOT NULL COMMENT '鿣ç¼ç ', |
| | | `name` varchar(200) NOT NULL COMMENT '鿣åç§°/ç®è¿°', |
| | | |
| | | `source` tinyint DEFAULT NULL COMMENT 'éæ£æ¥æºï¼åå
¸ mes_safety_hazard_sourceï¼', |
| | | `hazard_level` tinyint DEFAULT NULL COMMENT '鿣ç级ï¼åå
¸ mes_safety_hazard_levelï¼1ä¸è¬ 2é大ï¼', |
| | | `category` tinyint DEFAULT NULL COMMENT 'éæ£ç±»å«ï¼å¤ç¨ mes_safety_risk_categoryï¼', |
| | | |
| | | `unit_id` bigint DEFAULT NULL COMMENT 'å
³èé£é©åå
ç¼å·', |
| | | `risk_id` bigint DEFAULT NULL COMMENT 'å
³èé£é©æ¸
åç¼å·', |
| | | `workshop_id` bigint DEFAULT NULL COMMENT 'æå±è½¦é´ç¼å·', |
| | | `location` varchar(255) DEFAULT NULL COMMENT 'å
·ä½ä½ç½®', |
| | | |
| | | `description` varchar(1000) DEFAULT NULL COMMENT '鿣æè¿°', |
| | | `found_date` date DEFAULT NULL COMMENT 'åç°æ¥æ', |
| | | `founder_user_id` bigint DEFAULT NULL COMMENT 'åç°äººç¼å·', |
| | | |
| | | `charge_user_id` bigint DEFAULT NULL COMMENT 'æ´æ¹è´£ä»»äººç¼å·', |
| | | `deadline` date DEFAULT NULL COMMENT 'æ´æ¹æé', |
| | | `rectify_requirement` varchar(1000) DEFAULT NULL COMMENT 'æ´æ¹è¦æ±', |
| | | |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0å¾
æ´æ¹ 10æ´æ¹ä¸ 20å¾
éªæ¶ 30å·²éç¯', |
| | | |
| | | `measure` varchar(1000) DEFAULT NULL COMMENT 'æ´æ¹æªæ½', |
| | | `finish_date` date DEFAULT NULL COMMENT 'æ´æ¹å®ææ¥æ', |
| | | |
| | | `check_user_id` bigint DEFAULT NULL COMMENT 'éªæ¶äººç¼å·', |
| | | `check_time` datetime DEFAULT NULL COMMENT 'éªæ¶æ¶é´', |
| | | `check_result` varchar(500) DEFAULT NULL COMMENT 'éªæ¶æè§/ç»è®º', |
| | | `reject_reason` varchar(500) DEFAULT NULL COMMENT 'éªæ¶é©³ååå ', |
| | | |
| | | `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_status` (`status`) USING BTREE, |
| | | KEY `idx_workshop` (`workshop_id`) USING BTREE, |
| | | KEY `idx_risk` (`risk_id`) USING BTREE, |
| | | KEY `idx_deadline` (`deadline`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='å®å
¨ç产-éæ£ææ¥å°è´¦'; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 2. åå
¸ |
| | | -- --------------------------------------------------------------------- |
| | | DELETE FROM system_dict_data WHERE dict_type IN |
| | | ('mes_safety_hazard_source', 'mes_safety_hazard_level', 'mes_safety_hazard_status'); |
| | | |
| | | DELETE FROM system_dict_type WHERE type IN |
| | | ('mes_safety_hazard_source', 'mes_safety_hazard_level', 'mes_safety_hazard_status'); |
| | | |
| | | INSERT INTO system_dict_type (name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES ('å®å
¨ç产-éæ£æ¥æº', 'mes_safety_hazard_source', 0, '鿣åç°çéå¾', '1', NOW(), '1', NOW(), b'0'), |
| | | ('å®å
¨ç产-鿣ç级', 'mes_safety_hazard_level', 0, '1ä¸è¬éæ£ 2é大鿣', '1', NOW(), '1', NOW(), b'0'), |
| | | ('å®å
¨ç产-éæ£ç¶æ', 'mes_safety_hazard_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_hazard_source', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, 'ä¸é¡¹æ£æ¥', '2', 'mes_safety_hazard_source', 0, 'processing', '1', NOW(), '1', NOW(), b'0'), |
| | | (3, 'ä¸çº§æ£æ¥', '3', 'mes_safety_hazard_source', 0, 'warning', '1', NOW(), '1', NOW(), b'0'), |
| | | (4, 'å工䏿¥', '4', 'mes_safety_hazard_source', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | (5, 'å
¶ä»', '5', 'mes_safety_hazard_source', 0, 'default', '1', NOW(), '1', NOW(), b'0'), |
| | | -- 鿣ç级 |
| | | (1, 'ä¸è¬éæ£', '1', 'mes_safety_hazard_level', 0, 'warning', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, 'é大鿣', '2', 'mes_safety_hazard_level', 0, 'error', '1', NOW(), '1', NOW(), b'0'), |
| | | -- éæ£ç¶æ |
| | | (1, 'å¾
æ´æ¹', '0', 'mes_safety_hazard_status', 0, 'error', '1', NOW(), '1', NOW(), b'0'), |
| | | (2, 'æ´æ¹ä¸', '10', 'mes_safety_hazard_status', 0, 'processing', '1', NOW(), '1', NOW(), b'0'), |
| | | (3, 'å¾
éªæ¶', '20', 'mes_safety_hazard_status', 0, 'warning', '1', NOW(), '1', NOW(), b'0'), |
| | | (4, 'å·²éç¯', '30', 'mes_safety_hazard_status', 0, 'success', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 3. èåï¼æå¨ 1065910 å®å
¨ç产ä¸ï¼ |
| | | -- --------------------------------------------------------------------- |
| | | DELETE FROM system_role_menu WHERE menu_id BETWEEN 1065927 AND 1065940; |
| | | |
| | | DELETE FROM system_menu WHERE id BETWEEN 1065927 AND 1065940; |
| | | |
| | | 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 |
| | | (1065927, 'éæ£ææ¥æ²»ç', '', 2, 4, 1065910, 'hazard', 'ep:search', |
| | | 'safety/hazard/index', 'SafetyHazard', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065928, '鿣æ¥è¯¢', 'mes:safety-hazard:query', 3, 1, 1065927, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065929, '鿣ç»è®°', 'mes:safety-hazard:create', 3, 2, 1065927, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065930, 'éæ£æ´æ°', 'mes:safety-hazard:update', 3, 3, 1065927, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065931, '鿣å é¤', 'mes:safety-hazard:delete', 3, 4, 1065927, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065932, 'æäº¤æ´æ¹', 'mes:safety-hazard:rectify', 3, 5, 1065927, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1065933, 'æ´æ¹éªæ¶', 'mes:safety-hazard:check', 3, 6, 1065927, '', '', NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 4. ææè¶
级管çå |
| | | -- --------------------------------------------------------------------- |
| | | 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 1065927 AND 1065940; |
| | | |
| | | -- --------------------------------------------------------------------- |
| | | -- 5. éªè¯ |
| | | -- --------------------------------------------------------------------- |
| | | SELECT id, parent_id, name, path, component, permission, type |
| | | FROM system_menu WHERE id BETWEEN 1065910 AND 1065940 ORDER BY id; |
| | | |
| | | SELECT dict_type, label, value FROM system_dict_data |
| | | WHERE dict_type LIKE 'mes_safety_hazard%' 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.hazard.MesSafetyHazardCheckReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardRectifyReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyHazardDO; |
| | | 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.MesSafetyHazardService; |
| | | 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.time.LocalDate; |
| | | 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/hazard") |
| | | @Validated |
| | | public class MesSafetyHazardController { |
| | | |
| | | @Resource |
| | | private MesSafetyHazardService hazardService; |
| | | |
| | | @Resource |
| | | private MesSafetyRiskUnitService riskUnitService; |
| | | |
| | | @Resource |
| | | private MesSafetyRiskService riskService; |
| | | |
| | | @Resource |
| | | private MesMdWorkshopMapper workshopMapper; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "ç»è®°éæ£") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:create')") |
| | | public CommonResult<Long> createHazard(@Valid @RequestBody MesSafetyHazardSaveReqVO createReqVO) { |
| | | return success(hazardService.createHazard(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°éæ£") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:update')") |
| | | public CommonResult<Boolean> updateHazard(@Valid @RequestBody MesSafetyHazardSaveReqVO updateReqVO) { |
| | | hazardService.updateHazard(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤éæ£") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:delete')") |
| | | public CommonResult<Boolean> deleteHazard(@RequestParam("id") Long id) { |
| | | hazardService.deleteHazard(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/rectify") |
| | | @Operation(summary = "æäº¤æ´æ¹") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:rectify')") |
| | | public CommonResult<Boolean> rectifyHazard(@Valid @RequestBody MesSafetyHazardRectifyReqVO reqVO) { |
| | | hazardService.rectifyHazard(reqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/check") |
| | | @Operation(summary = "æ´æ¹éªæ¶") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:check')") |
| | | public CommonResult<Boolean> checkHazard(@Valid @RequestBody MesSafetyHazardCheckReqVO reqVO) { |
| | | hazardService.checkHazard(reqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾éæ£") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:query')") |
| | | public CommonResult<MesSafetyHazardRespVO> getHazard(@RequestParam("id") Long id) { |
| | | MesSafetyHazardDO hazard = hazardService.getHazard(id); |
| | | if (hazard == null) { |
| | | return success(null); |
| | | } |
| | | List<MesSafetyHazardRespVO> list = buildRespList(Collections.singletonList(hazard)); |
| | | return success(list.isEmpty() ? null : list.get(0)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "è·å¾éæ£å页") |
| | | @PreAuthorize("@ss.hasPermission('mes:safety-hazard:query')") |
| | | public CommonResult<PageResult<MesSafetyHazardRespVO>> getHazardPage(@Valid MesSafetyHazardPageReqVO pageReqVO) { |
| | | PageResult<MesSafetyHazardDO> pageResult = hazardService.getHazardPage(pageReqVO); |
| | | List<MesSafetyHazardRespVO> list = buildRespList(pageResult.getList()); |
| | | return success(new PageResult<>(list, pageResult.getTotal())); |
| | | } |
| | | |
| | | /** |
| | | * 转æ¢ä¸º VO å¹¶å¡«å
车é´ã人åãå
³èé£é©ä¿¡æ¯ãè¶
ææ è®° |
| | | */ |
| | | private List<MesSafetyHazardRespVO> buildRespList(List<MesSafetyHazardDO> list) { |
| | | if (list == null || list.isEmpty()) { |
| | | return Collections.emptyList(); |
| | | } |
| | | List<MesSafetyHazardRespVO> respList = BeanUtils.toBean(list, MesSafetyHazardRespVO.class); |
| | | |
| | | // 车é´åç§° |
| | | Set<Long> workshopIds = list.stream().map(MesSafetyHazardDO::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 = new HashSet<>(); |
| | | list.forEach(h -> { |
| | | if (h.getFounderUserId() != null) userIds.add(h.getFounderUserId()); |
| | | if (h.getChargeUserId() != null) userIds.add(h.getChargeUserId()); |
| | | if (h.getCheckUserId() != null) userIds.add(h.getCheckUserId()); |
| | | }); |
| | | Map<Long, AdminUserRespDTO> userMap = userIds.isEmpty() |
| | | ? Collections.emptyMap() : adminUserApi.getUserMap(userIds); |
| | | |
| | | // é£é©åå
åç§° |
| | | Set<Long> unitIds = list.stream().map(MesSafetyHazardDO::getUnitId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, MesSafetyRiskUnitDO> unitMap = riskUnitService.getRiskUnitMap(unitIds); |
| | | |
| | | LocalDate today = LocalDate.now(); |
| | | for (MesSafetyHazardRespVO vo : respList) { |
| | | vo.setWorkshopName(workshopNameMap.get(vo.getWorkshopId())); |
| | | AdminUserRespDTO founder = userMap.get(vo.getFounderUserId()); |
| | | if (founder != null) vo.setFounderUserName(founder.getNickname()); |
| | | AdminUserRespDTO charge = userMap.get(vo.getChargeUserId()); |
| | | if (charge != null) vo.setChargeUserName(charge.getNickname()); |
| | | AdminUserRespDTO checker = userMap.get(vo.getCheckUserId()); |
| | | if (checker != null) vo.setCheckUserName(checker.getNickname()); |
| | | |
| | | MesSafetyRiskUnitDO unit = unitMap.get(vo.getUnitId()); |
| | | if (unit != null) vo.setUnitName(unit.getName()); |
| | | |
| | | if (vo.getRiskId() != null) { |
| | | MesSafetyRiskDO risk = riskService.getRisk(vo.getRiskId()); |
| | | if (risk != null) vo.setRiskName(risk.getName()); |
| | | } |
| | | |
| | | // è¶
æå¤æï¼ææéãæªéç¯ã䏿鿩äºä»å¤© |
| | | vo.setOverdue(vo.getDeadline() != null |
| | | && !MesSafetyHazardDO.STATUS_CLOSED.equals(vo.getStatus()) |
| | | && vo.getDeadline().isBefore(today)); |
| | | } |
| | | return respList; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-éæ£æ´æ¹éªæ¶ Request VO") |
| | | @Data |
| | | public class MesSafetyHazardCheckReqVO { |
| | | |
| | | @Schema(description = "鿣ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "鿣ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "éªæ¶æ¯å¦éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "éªæ¶ç»è®ºä¸è½ä¸ºç©º") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "éªæ¶æè§ï¼éè¿æ¶å¡«åï¼", example = "å·²æ´æ¹å°ä½") |
| | | private String checkResult; |
| | | |
| | | @Schema(description = "驳ååå ï¼ä¸éè¿æ¶å¿
å¡«ï¼", example = "鲿¤ç½©åºå®ä¸ç¢") |
| | | private String rejectReason; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard; |
| | | |
| | | 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; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-鿣å页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class MesSafetyHazardPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "鿣ç¼ç ", example = "YH-001") |
| | | private String code; |
| | | |
| | | @Schema(description = "鿣åç§°", example = "é
çµç®±ç¼ºé²æ¤ç½©") |
| | | private String name; |
| | | |
| | | @Schema(description = "éæ£æ¥æº", example = "1") |
| | | private Integer source; |
| | | |
| | | @Schema(description = "鿣ç级", example = "1") |
| | | private Integer hazardLevel; |
| | | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "æå±è½¦é´ç¼å·", example = "7") |
| | | private Long workshopId; |
| | | |
| | | @Schema(description = "æ´æ¹è´£ä»»äººç¼å·", example = "1") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "å
³èé£é©æ¸
åç¼å·", example = "1") |
| | | private Long riskId; |
| | | |
| | | @Schema(description = "åç°æ¥æ-èµ·", example = "2026-11-01") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate foundDateStart; |
| | | |
| | | @Schema(description = "åç°æ¥æ-æ¢", example = "2026-11-30") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate foundDateEnd; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-鿣æäº¤æ´æ¹ Request VO") |
| | | @Data |
| | | public class MesSafetyHazardRectifyReqVO { |
| | | |
| | | @Schema(description = "鿣ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "鿣ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ´æ¹æªæ½", requiredMode = Schema.RequiredMode.REQUIRED, |
| | | example = "å·²å è£
鲿¤ç½©å¹¶åºå®") |
| | | @NotEmpty(message = "æ´æ¹æªæ½ä¸è½ä¸ºç©º") |
| | | private String measure; |
| | | |
| | | @Schema(description = "æ´æ¹å®ææ¥æ", example = "2026-11-05") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate finishDate; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-鿣 Response VO") |
| | | @Data |
| | | public class MesSafetyHazardRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "鿣ç¼ç ", example = "YH-001") |
| | | private String code; |
| | | |
| | | @Schema(description = "鿣åç§°", example = "é
çµç®±ç¼ºé²æ¤ç½©") |
| | | private String name; |
| | | |
| | | @Schema(description = "éæ£æ¥æº", example = "1") |
| | | private Integer source; |
| | | |
| | | @Schema(description = "鿣ç级", example = "1") |
| | | private Integer hazardLevel; |
| | | |
| | | @Schema(description = "éæ£ç±»å«", example = "1") |
| | | private Integer category; |
| | | |
| | | @Schema(description = "å
³èé£é©åå
ç¼å·", example = "1") |
| | | private Long unitId; |
| | | |
| | | @Schema(description = "å
³èé£é©åå
åç§°") |
| | | private String unitName; |
| | | |
| | | @Schema(description = "å
³èé£é©æ¸
åç¼å·", example = "1") |
| | | private Long riskId; |
| | | |
| | | @Schema(description = "å
³èé£é©åç§°") |
| | | private String riskName; |
| | | |
| | | @Schema(description = "æå±è½¦é´ç¼å·", example = "7") |
| | | private Long workshopId; |
| | | |
| | | @Schema(description = "æå±è½¦é´åç§°") |
| | | private String workshopName; |
| | | |
| | | @Schema(description = "å
·ä½ä½ç½®") |
| | | private String location; |
| | | |
| | | @Schema(description = "鿣æè¿°") |
| | | private String description; |
| | | |
| | | @Schema(description = "åç°æ¥æ") |
| | | private LocalDate foundDate; |
| | | |
| | | @Schema(description = "åç°äººç¼å·", example = "1") |
| | | private Long founderUserId; |
| | | |
| | | @Schema(description = "åç°äººå§å") |
| | | private String founderUserName; |
| | | |
| | | @Schema(description = "æ´æ¹è´£ä»»äººç¼å·", example = "1") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "æ´æ¹è´£ä»»äººå§å") |
| | | private String chargeUserName; |
| | | |
| | | @Schema(description = "æ´æ¹æé") |
| | | private LocalDate deadline; |
| | | |
| | | @Schema(description = "æ´æ¹è¦æ±") |
| | | private String rectifyRequirement; |
| | | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "æ¯å¦è¶
æ", example = "false") |
| | | private Boolean overdue; |
| | | |
| | | @Schema(description = "æ´æ¹æªæ½") |
| | | private String measure; |
| | | |
| | | @Schema(description = "æ´æ¹å®ææ¥æ") |
| | | private LocalDate finishDate; |
| | | |
| | | @Schema(description = "éªæ¶äººç¼å·", example = "1") |
| | | private Long checkUserId; |
| | | |
| | | @Schema(description = "éªæ¶äººå§å") |
| | | private String checkUserName; |
| | | |
| | | @Schema(description = "éªæ¶æ¶é´") |
| | | private LocalDateTime checkTime; |
| | | |
| | | @Schema(description = "éªæ¶æè§") |
| | | private String checkResult; |
| | | |
| | | @Schema(description = "éªæ¶é©³ååå ") |
| | | private String rejectReason; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - å®å
¨ç产-鿣ç»è®°/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class MesSafetyHazardSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "鿣ç¼ç ", requiredMode = Schema.RequiredMode.REQUIRED, example = "YH-001") |
| | | @NotEmpty(message = "鿣ç¼ç ä¸è½ä¸ºç©º") |
| | | private String code; |
| | | |
| | | @Schema(description = "鿣åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "é
çµç®±ç¼ºé²æ¤ç½©") |
| | | @NotEmpty(message = "鿣åç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "éæ£æ¥æº", example = "1") |
| | | private Integer source; |
| | | |
| | | @Schema(description = "鿣ç级", example = "1") |
| | | private Integer hazardLevel; |
| | | |
| | | @Schema(description = "éæ£ç±»å«", example = "1") |
| | | private Integer category; |
| | | |
| | | @Schema(description = "å
³èé£é©åå
ç¼å·", example = "1") |
| | | private Long unitId; |
| | | |
| | | @Schema(description = "å
³èé£é©æ¸
åç¼å·", example = "1") |
| | | private Long riskId; |
| | | |
| | | @Schema(description = "æå±è½¦é´ç¼å·", example = "7") |
| | | private Long workshopId; |
| | | |
| | | @Schema(description = "å
·ä½ä½ç½®", example = "é 纸车é´é
çµæ¿") |
| | | private String location; |
| | | |
| | | @Schema(description = "鿣æè¿°") |
| | | private String description; |
| | | |
| | | @Schema(description = "åç°æ¥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate foundDate; |
| | | |
| | | @Schema(description = "åç°äººç¼å·", example = "1") |
| | | private Long founderUserId; |
| | | |
| | | @Schema(description = "æ´æ¹è´£ä»»äººç¼å·", example = "1") |
| | | @NotNull(message = "æ´æ¹è´£ä»»äººä¸è½ä¸ºç©º") |
| | | private Long chargeUserId; |
| | | |
| | | @Schema(description = "æ´æ¹æé") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate deadline; |
| | | |
| | | @Schema(description = "æ´æ¹è¦æ±") |
| | | private String rectifyRequirement; |
| | | |
| | | @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.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - éæ£ææ¥å°è´¦ DO |
| | | * |
| | | * ç¶ææµè½¬ï¼ |
| | | * 0 å¾
æ´æ¹ ââæäº¤æ´æ¹ââ> 20 å¾
éªæ¶ ââéªæ¶éè¿ââ> 30 å·²éç¯ |
| | | * âââéªæ¶é©³åââ> 10 æ´æ¹ä¸ï¼éæ°æ´æ¹ï¼ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("mes_safety_hazard") |
| | | @KeySequence("mes_safety_hazard_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class MesSafetyHazardDO extends BaseDO { |
| | | |
| | | /** ç¶æï¼å¾
æ´æ¹ */ |
| | | public static final Integer STATUS_PENDING = 0; |
| | | /** ç¶æï¼æ´æ¹ä¸ï¼éªæ¶é©³åååå°æ¤ç¶æï¼ */ |
| | | public static final Integer STATUS_RECTIFYING = 10; |
| | | /** ç¶æï¼å¾
éªæ¶ */ |
| | | public static final Integer STATUS_TO_CHECK = 20; |
| | | /** ç¶æï¼å·²éç¯ */ |
| | | public static final Integer STATUS_CLOSED = 30; |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** |
| | | * 鿣ç¼ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * 鿣åç§° / ç®è¿° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * éæ£æ¥æº |
| | | * |
| | | * åå
¸ mes_safety_hazard_sourceï¼1æ¥å¸¸ææ¥ 2ä¸é¡¹æ£æ¥ 3ä¸çº§æ£æ¥ 4å工䏿¥ 5å
¶ä» |
| | | */ |
| | | private Integer source; |
| | | |
| | | /** |
| | | * 鿣ç级 |
| | | * |
| | | * åå
¸ mes_safety_hazard_levelï¼1ä¸è¬éæ£ 2é大鿣 |
| | | */ |
| | | private Integer hazardLevel; |
| | | |
| | | /** |
| | | * éæ£ç±»å« |
| | | * |
| | | * å¤ç¨ mes_safety_risk_category |
| | | */ |
| | | private Integer category; |
| | | |
| | | /** |
| | | * å
³èé£é©åå
ç¼å· |
| | | */ |
| | | private Long unitId; |
| | | |
| | | /** |
| | | * å
³èé£é©æ¸
åç¼å· |
| | | */ |
| | | private Long riskId; |
| | | |
| | | /** |
| | | * æå±è½¦é´ç¼å· |
| | | */ |
| | | private Long workshopId; |
| | | |
| | | /** |
| | | * å
·ä½ä½ç½® |
| | | */ |
| | | private String location; |
| | | |
| | | /** |
| | | * 鿣æè¿° |
| | | */ |
| | | private String description; |
| | | |
| | | /** |
| | | * åç°æ¥æ |
| | | */ |
| | | private LocalDate foundDate; |
| | | |
| | | /** |
| | | * åç°äººç¼å· |
| | | */ |
| | | private Long founderUserId; |
| | | |
| | | /** |
| | | * æ´æ¹è´£ä»»äººç¼å· |
| | | */ |
| | | private Long chargeUserId; |
| | | |
| | | /** |
| | | * æ´æ¹æé |
| | | */ |
| | | private LocalDate deadline; |
| | | |
| | | /** |
| | | * æ´æ¹è¦æ± |
| | | */ |
| | | private String rectifyRequirement; |
| | | |
| | | /** |
| | | * ç¶æï¼0å¾
æ´æ¹ 10æ´æ¹ä¸ 20å¾
éªæ¶ 30å·²éç¯ |
| | | */ |
| | | private Integer status; |
| | | |
| | | /** |
| | | * æ´æ¹æªæ½ |
| | | */ |
| | | private String measure; |
| | | |
| | | /** |
| | | * æ´æ¹å®ææ¥æ |
| | | */ |
| | | private LocalDate finishDate; |
| | | |
| | | /** |
| | | * éªæ¶äººç¼å· |
| | | */ |
| | | private Long checkUserId; |
| | | |
| | | /** |
| | | * éªæ¶æ¶é´ |
| | | */ |
| | | private LocalDateTime checkTime; |
| | | |
| | | /** |
| | | * éªæ¶æè§ |
| | | */ |
| | | private String checkResult; |
| | | |
| | | /** |
| | | * éªæ¶é©³ååå |
| | | */ |
| | | private String rejectReason; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | 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.hazard.MesSafetyHazardPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyHazardDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - 鿣å°è´¦ Mapper |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Mapper |
| | | public interface MesSafetyHazardMapper extends BaseMapperX<MesSafetyHazardDO> { |
| | | |
| | | default PageResult<MesSafetyHazardDO> selectPage(MesSafetyHazardPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<MesSafetyHazardDO>() |
| | | .likeIfPresent(MesSafetyHazardDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(MesSafetyHazardDO::getName, reqVO.getName()) |
| | | .eqIfPresent(MesSafetyHazardDO::getSource, reqVO.getSource()) |
| | | .eqIfPresent(MesSafetyHazardDO::getHazardLevel, reqVO.getHazardLevel()) |
| | | .eqIfPresent(MesSafetyHazardDO::getStatus, reqVO.getStatus()) |
| | | .eqIfPresent(MesSafetyHazardDO::getWorkshopId, reqVO.getWorkshopId()) |
| | | .eqIfPresent(MesSafetyHazardDO::getChargeUserId, reqVO.getChargeUserId()) |
| | | .eqIfPresent(MesSafetyHazardDO::getRiskId, reqVO.getRiskId()) |
| | | .geIfPresent(MesSafetyHazardDO::getFoundDate, reqVO.getFoundDateStart()) |
| | | .leIfPresent(MesSafetyHazardDO::getFoundDate, reqVO.getFoundDateEnd()) |
| | | .orderByDesc(MesSafetyHazardDO::getId)); |
| | | } |
| | | |
| | | default MesSafetyHazardDO selectByCode(String code) { |
| | | return selectOne(MesSafetyHazardDO::getCode, code); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æªéç¯ä¸å·²è¶
æç鿣ï¼ç¨äºé¾ææé/ç»è®¡ï¼ |
| | | */ |
| | | default List<MesSafetyHazardDO> selectOverdueList(LocalDate today) { |
| | | return selectList(new LambdaQueryWrapperX<MesSafetyHazardDO>() |
| | | .lt(MesSafetyHazardDO::getDeadline, today) |
| | | .ne(MesSafetyHazardDO::getStatus, MesSafetyHazardDO.STATUS_CLOSED) |
| | | .orderByAsc(MesSafetyHazardDO::getDeadline)); |
| | | } |
| | | |
| | | /** |
| | | * æç¶æç»è®¡æ°é |
| | | */ |
| | | default Long selectCountByStatus(Integer status) { |
| | | return selectCount(new LambdaQueryWrapperX<MesSafetyHazardDO>() |
| | | .eq(MesSafetyHazardDO::getStatus, status)); |
| | | } |
| | | |
| | | /** |
| | | * é£é©åå
被å¼ç¨æ°éï¼ç¨äºå é¤åå
åçæ ¡éªï¼ |
| | | */ |
| | | default Long selectCountByUnitId(Long unitId) { |
| | | return selectCount(new LambdaQueryWrapperX<MesSafetyHazardDO>() |
| | | .eq(MesSafetyHazardDO::getUnitId, unitId)); |
| | | } |
| | | |
| | | /** |
| | | * é£é©æ¸
å被å¼ç¨æ°é |
| | | */ |
| | | default Long selectCountByRiskId(Long riskId) { |
| | | return selectCount(new LambdaQueryWrapperX<MesSafetyHazardDO>() |
| | | .eq(MesSafetyHazardDO::getRiskId, riskId)); |
| | | } |
| | | |
| | | default List<MesSafetyHazardDO> selectAllList() { |
| | | return selectList(new LambdaQueryWrapperX<MesSafetyHazardDO>() |
| | | .orderByDesc(MesSafetyHazardDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | 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"; // é£é©åå
ç¶æ |
| | | |
| | | // éæ£ææ¥æ²»ç |
| | | String MES_SAFETY_HAZARD_SOURCE = "mes_safety_hazard_source"; // éæ£æ¥æº |
| | | String MES_SAFETY_HAZARD_LEVEL = "mes_safety_hazard_level"; // 鿣ç级ï¼1ä¸è¬ 2éå¤§ï¼ |
| | | String MES_SAFETY_HAZARD_STATUS = "mes_safety_hazard_status"; // éæ£ç¶æ |
| | | } |
| | |
| | | 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"); |
| | | |
| | | // ========== MES å®å
¨ç产 - éæ£ææ¥æ²»çï¼1-040-905-000ï¼ ========== |
| | | ErrorCode MES_SAFETY_HAZARD_NOT_EXISTS = new ErrorCode(1_040_905_000, "éæ£è®°å½ä¸åå¨"); |
| | | ErrorCode MES_SAFETY_HAZARD_CODE_DUPLICATE = new ErrorCode(1_040_905_001, "鿣ç¼ç å·²åå¨"); |
| | | ErrorCode MES_SAFETY_HAZARD_STATUS_INVALID = new ErrorCode(1_040_905_002, "å½åéæ£ç¶æä¸å
许该æä½"); |
| | | ErrorCode MES_SAFETY_HAZARD_REJECT_REASON_REQUIRED = new ErrorCode(1_040_905_003, "éªæ¶ä¸éè¿æ¶å¿
须填å驳ååå "); |
| | | ErrorCode MES_SAFETY_HAZARD_HAS_REFERENCE = new ErrorCode(1_040_905_004, "该记å½å·²è¢«éæ£å¼ç¨ï¼æ æ³å é¤"); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.hazard.MesSafetyHazardCheckReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardRectifyReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyHazardDO; |
| | | |
| | | /** |
| | | * å®å
¨ç产 - 鿣 Service æ¥å£ |
| | | * |
| | | * ç¶ææµè½¬ï¼0 å¾
æ´æ¹ â 20 å¾
éªæ¶ â 30 å·²éç¯ï¼éªæ¶é©³å â 10 æ´æ¹ä¸ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesSafetyHazardService { |
| | | |
| | | PageResult<MesSafetyHazardDO> getHazardPage(MesSafetyHazardPageReqVO pageReqVO); |
| | | |
| | | MesSafetyHazardDO getHazard(Long id); |
| | | |
| | | Long createHazard(MesSafetyHazardSaveReqVO createReqVO); |
| | | |
| | | void updateHazard(MesSafetyHazardSaveReqVO updateReqVO); |
| | | |
| | | void deleteHazard(Long id); |
| | | |
| | | /** |
| | | * æäº¤æ´æ¹ï¼0å¾
æ´æ¹ / 10æ´æ¹ä¸ â 20å¾
éªæ¶ |
| | | */ |
| | | void rectifyHazard(MesSafetyHazardRectifyReqVO reqVO); |
| | | |
| | | /** |
| | | * æ´æ¹éªæ¶ï¼20å¾
éªæ¶ â 30å·²éç¯ï¼éè¿ï¼æ 10æ´æ¹ä¸ï¼é©³åï¼ |
| | | */ |
| | | void checkHazard(MesSafetyHazardCheckReqVO reqVO); |
| | | |
| | | MesSafetyHazardDO validateHazardExists(Long id); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.hazard.MesSafetyHazardCheckReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardRectifyReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyHazardDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyHazardMapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | 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 å®ç° |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MesSafetyHazardServiceImpl implements MesSafetyHazardService { |
| | | |
| | | @Resource |
| | | private MesSafetyHazardMapper hazardMapper; |
| | | |
| | | @Override |
| | | public PageResult<MesSafetyHazardDO> getHazardPage(MesSafetyHazardPageReqVO pageReqVO) { |
| | | return hazardMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public MesSafetyHazardDO getHazard(Long id) { |
| | | return hazardMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public Long createHazard(MesSafetyHazardSaveReqVO createReqVO) { |
| | | validateCodeUnique(null, createReqVO.getCode()); |
| | | MesSafetyHazardDO hazard = BeanUtils.toBean(createReqVO, MesSafetyHazardDO.class); |
| | | // æ°å»ºå³ä¸ºå¾
æ´æ¹ |
| | | hazard.setStatus(MesSafetyHazardDO.STATUS_PENDING); |
| | | if (hazard.getFoundDate() == null) { |
| | | hazard.setFoundDate(LocalDate.now()); |
| | | } |
| | | hazardMapper.insert(hazard); |
| | | return hazard.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void updateHazard(MesSafetyHazardSaveReqVO updateReqVO) { |
| | | MesSafetyHazardDO exists = validateHazardExists(updateReqVO.getId()); |
| | | // å·²éç¯ç鿣ä¸å
许åä¿®æ¹åºæ¬ä¿¡æ¯ |
| | | if (MesSafetyHazardDO.STATUS_CLOSED.equals(exists.getStatus())) { |
| | | throw exception(MES_SAFETY_HAZARD_STATUS_INVALID); |
| | | } |
| | | validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); |
| | | MesSafetyHazardDO updateObj = BeanUtils.toBean(updateReqVO, MesSafetyHazardDO.class); |
| | | // ç¶æä¸æ´æ¹/éªæ¶ä¿¡æ¯ä¸éè¿æ¤æ¥å£ä¿®æ¹ |
| | | updateObj.setStatus(null); |
| | | updateObj.setMeasure(null); |
| | | updateObj.setFinishDate(null); |
| | | updateObj.setCheckUserId(null); |
| | | updateObj.setCheckTime(null); |
| | | updateObj.setCheckResult(null); |
| | | updateObj.setRejectReason(null); |
| | | hazardMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteHazard(Long id) { |
| | | validateHazardExists(id); |
| | | hazardMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public void rectifyHazard(MesSafetyHazardRectifyReqVO reqVO) { |
| | | MesSafetyHazardDO hazard = validateHazardExists(reqVO.getId()); |
| | | // åªæãå¾
æ´æ¹ããæ´æ¹ä¸ãå¯ä»¥æäº¤æ´æ¹ï¼å·²æäº¤å¾
éªæ¶æå·²éç¯ä¸å¯éå¤æäº¤ |
| | | if (!MesSafetyHazardDO.STATUS_PENDING.equals(hazard.getStatus()) |
| | | && !MesSafetyHazardDO.STATUS_RECTIFYING.equals(hazard.getStatus())) { |
| | | throw exception(MES_SAFETY_HAZARD_STATUS_INVALID); |
| | | } |
| | | MesSafetyHazardDO updateObj = new MesSafetyHazardDO(); |
| | | updateObj.setId(reqVO.getId()); |
| | | updateObj.setMeasure(reqVO.getMeasure()); |
| | | updateObj.setFinishDate(reqVO.getFinishDate() != null ? reqVO.getFinishDate() : LocalDate.now()); |
| | | updateObj.setStatus(MesSafetyHazardDO.STATUS_TO_CHECK); |
| | | // éæ°æäº¤æ¶æ¸
空ä¸ä¸æ¬¡ç驳ååå |
| | | updateObj.setRejectReason(""); |
| | | hazardMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void checkHazard(MesSafetyHazardCheckReqVO reqVO) { |
| | | MesSafetyHazardDO hazard = validateHazardExists(reqVO.getId()); |
| | | // åªæãå¾
éªæ¶ãå¯ä»¥éªæ¶ |
| | | if (!MesSafetyHazardDO.STATUS_TO_CHECK.equals(hazard.getStatus())) { |
| | | throw exception(MES_SAFETY_HAZARD_STATUS_INVALID); |
| | | } |
| | | MesSafetyHazardDO updateObj = new MesSafetyHazardDO(); |
| | | updateObj.setId(reqVO.getId()); |
| | | updateObj.setCheckResult(reqVO.getCheckResult()); |
| | | updateObj.setCheckTime(LocalDateTime.now()); |
| | | if (Boolean.TRUE.equals(reqVO.getPass())) { |
| | | // éªæ¶éè¿ â éç¯ |
| | | updateObj.setStatus(MesSafetyHazardDO.STATUS_CLOSED); |
| | | updateObj.setRejectReason(""); |
| | | } else { |
| | | // éªæ¶é©³å â å¿
须填åå ï¼éåæ´æ¹ä¸ |
| | | if (reqVO.getRejectReason() == null || reqVO.getRejectReason().trim().isEmpty()) { |
| | | throw exception(MES_SAFETY_HAZARD_REJECT_REASON_REQUIRED); |
| | | } |
| | | updateObj.setStatus(MesSafetyHazardDO.STATUS_RECTIFYING); |
| | | updateObj.setRejectReason(reqVO.getRejectReason()); |
| | | } |
| | | hazardMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public MesSafetyHazardDO validateHazardExists(Long id) { |
| | | if (id == null) { |
| | | throw exception(MES_SAFETY_HAZARD_NOT_EXISTS); |
| | | } |
| | | MesSafetyHazardDO hazard = hazardMapper.selectById(id); |
| | | if (hazard == null) { |
| | | throw exception(MES_SAFETY_HAZARD_NOT_EXISTS); |
| | | } |
| | | return hazard; |
| | | } |
| | | |
| | | private void validateCodeUnique(Long id, String code) { |
| | | MesSafetyHazardDO exists = hazardMapper.selectByCode(code); |
| | | if (exists == null) { |
| | | return; |
| | | } |
| | | if (id == null || !Objects.equals(exists.getId(), id)) { |
| | | throw exception(MES_SAFETY_HAZARD_CODE_DUPLICATE); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | 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.MesSafetyHazardMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskMapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | |
| | | @Resource |
| | | private MesSafetyRiskUnitService riskUnitService; |
| | | |
| | | @Resource |
| | | private MesSafetyHazardMapper hazardMapper; |
| | | |
| | | @Override |
| | | public PageResult<MesSafetyRiskDO> getRiskPage(MesSafetyRiskPageReqVO pageReqVO) { |
| | |
| | | @Override |
| | | public void deleteRisk(Long id) { |
| | | validateRiskExists(id); |
| | | // å·²è¢«éæ£å¼ç¨çé£é©ä¸å
许å é¤ |
| | | Long hazardCount = hazardMapper.selectCountByRiskId(id); |
| | | if (hazardCount != null && hazardCount > 0) { |
| | | throw exception(MES_SAFETY_HAZARD_HAS_REFERENCE); |
| | | } |
| | | riskMapper.deleteById(id); |
| | | } |
| | | |
| | |
| | | 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.MesSafetyHazardMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskMapper; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskUnitMapper; |
| | | import jakarta.annotation.Resource; |
| | |
| | | |
| | | @Resource |
| | | private MesSafetyRiskMapper riskMapper; |
| | | |
| | | @Resource |
| | | private MesSafetyHazardMapper hazardMapper; |
| | | |
| | | @Override |
| | | public PageResult<MesSafetyRiskUnitDO> getRiskUnitPage(MesSafetyRiskUnitPageReqVO pageReqVO) { |
| | |
| | | if (riskCount != null && riskCount > 0) { |
| | | throw exception(MES_SAFETY_RISK_UNIT_HAS_RISK); |
| | | } |
| | | // å·²è¢«éæ£å¼ç¨çåå
ä¹ä¸å
许å é¤ |
| | | Long hazardCount = hazardMapper.selectCountByUnitId(id); |
| | | if (hazardCount != null && hazardCount > 0) { |
| | | throw exception(MES_SAFETY_HAZARD_HAS_REFERENCE); |
| | | } |
| | | riskUnitMapper.deleteById(id); |
| | | } |
| | | |