package cn.iocoder.yudao.module.mes.service.safety; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.hrm.api.employee.HrmEmployeeApi; import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; import cn.iocoder.yudao.module.mes.dal.mysql.md.workstation.MesMdWorkshopMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; import java.util.Collection; import java.util.HashMap; 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.SafetyErrorCodeConstants.*; /** * 安全生产 - 主数据引用解析器 * *
模块内所有「人员」与「车间」字段统一走这里解析,避免每个 Service 重复写一遍。
* *统一约定:业务表存 {@code xxxId} 关联主数据,同时保留 {@code xxxName} 作为快照。 * 保存时从主数据把名称带出写快照;查询时用主数据最新值覆盖快照, * 这样员工调岗、车间改名后台账会自动跟着变,而主数据被删时老记录仍能靠快照展示。
* * @author 超级管理员 */ @Component public class SafetyRefResolver { @Resource private HrmEmployeeApi hrmEmployeeApi; @Resource private MesMdWorkshopMapper workshopMapper; // ==================== 员工 ==================== /** * 按员工编号取员工,必须存在 * * @throws cn.iocoder.yudao.framework.common.exception.ServiceException 员工不存在时抛出 */ public HrmEmployeeSimpleDTO requireEmployee(Long employeeId, cn.iocoder.yudao.framework.common.exception.ErrorCode errorCode) { if (employeeId == null) { throw exception(errorCode); } HrmEmployeeSimpleDTO employee = hrmEmployeeApi.getEmployee(employeeId); if (employee == null) { throw exception(errorCode); } return employee; } /** * 可空的员工解析:id 为空返回 null,不校验存在性(用于非必填字段) */ public HrmEmployeeSimpleDTO findEmployee(Long employeeId) { return employeeId == null ? null : hrmEmployeeApi.getEmployee(employeeId); } /** * 批量取员工,返回 id -> 员工 的 Map */ public Map