package com.mes.device.service; import com.mes.device.entity.GlassInfo; import java.util.List; import java.util.Map; /** * 玻璃信息服务接口 * * @author mes * @since 2024-11-20 */ public interface GlassInfoService { /** * 根据玻璃ID查询玻璃信息 * * @param glassId 玻璃ID * @return 玻璃信息,如果不存在返回null */ GlassInfo getGlassInfo(String glassId); /** * 根据玻璃ID获取玻璃长度 * * @param glassId 玻璃ID * @return 玻璃长度(mm),如果不存在返回null */ Integer getGlassLength(String glassId); /** * 根据玻璃ID列表批量查询玻璃信息 * * @param glassIds 玻璃ID列表 * @return 玻璃信息列表 */ List getGlassInfos(List glassIds); /** * 根据玻璃ID列表批量获取玻璃长度映射 * * @param glassIds 玻璃ID列表 * @return 玻璃ID到长度的映射Map */ Map getGlassLengthMap(List glassIds); /** * 创建或更新玻璃信息 * * @param glassInfo 玻璃信息 * @return 是否成功 */ boolean saveOrUpdateGlassInfo(GlassInfo glassInfo); /** * 批量创建或更新玻璃信息 * * @param glassInfos 玻璃信息列表 * @return 是否成功 */ boolean batchSaveOrUpdateGlassInfo(List glassInfos); /** * 查询最近扫码的玻璃ID列表 * * @param minutesAgo 查询最近多少分钟内的记录,默认2分钟 * @param maxCount 最大返回数量,默认20 * @param workLine 工作线号(可选,用于过滤) * @return 玻璃ID列表 */ List getRecentScannedGlassIds(Integer minutesAgo, Integer maxCount, String workLine); /** * 批量更新玻璃状态 */ boolean updateGlassStatus(List glassIds, String status); /** * 获取 MES 工程导入 URL * * @return MES 工程导入 URL */ String getMesEngineeringImportUrl(); /** * 将前端上传的 Excel 行数据转换为 MES 导入工程所需的 JSON 结构 * * @param excelRows 前端解析后的行数据,字段示例: * glassId,width,height,thickness,quantity,orderNumber,filmsId,flowCardId,productName,customerName * @return 符合 MES 接口要求的请求体 Map */ Map buildEngineerImportPayload(List> excelRows); /** * 根据工程号查询玻璃信息列表 * * @param engineeringId 工程号 * @return 玻璃信息列表 */ List getGlassInfosByEngineeringId(String engineeringId); /** * 从Excel数据保存玻璃信息到本地数据库,并关联engineering_id * * @param excelRows Excel行数据 * @param engineeringId 工程号 */ void saveGlassInfosFromExcel(List> excelRows, String engineeringId); /** * 扫码交互后更新玻璃信息状态(将state从0改为1) * * @param glassId 玻璃ID * @param width 宽度(可选) * @param height 高度(可选) * @param workLine 产线编号(可选) * @return 是否更新成功 */ boolean updateGlassStateAfterScan(String glassId, Integer width, Integer height, Integer workLine); /** * 根据工程号删除玻璃信息 * * @param engineeringId 工程号 * @return 删除的玻璃数量 */ int deleteGlassInfosByEngineeringId(String engineeringId); }