|
|
package com.gaotao.modules.automatedWarehouse.mapper;
import com.gaotao.modules.api.entity.TaskNote;import com.gaotao.modules.automatedWarehouse.entity.*;import com.gaotao.modules.base.entity.PalletType;import com.gaotao.modules.warehouse.entity.Pallet;import com.gaotao.modules.warehouse.entity.PalletData;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.hibernate.dialect.function.IntegralTimestampaddFunction;
import java.util.Date;import java.util.List;import java.util.Map;
@Mapperpublic interface WcsIntegrationMapper {
List<WmsLabelAndPalletData> palletListForPartNo(PartPalletData inData);
List<WmsTransportTask> checkPalletTask (@Param("site") String site, @Param("palletId") String palletId); void batchSaveTransportTask(@Param("list") List<WmsTransportTask> transportTaskList); void batchSaveOrderTask(@Param("list") List<WmsOrderTask> transportTaskList); void batchSaveOrderTaskDetail(@Param("list") List<WmsOrderTaskDetail> inList); // ==================== 打托相关方法 - AI制作 ====================
/** * 检查栈板是否存在 - AI制作 */ Map<String, Object> getPalletInfo(@Param("site") String site, @Param("palletId") String palletId); /** * 获取栈板明细数量 - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 明细数量 */ int getPalletDetailCount(@Param("site") String site, @Param("palletId") String palletId); /** * 获取栈板类型的位置信息 - AI制作 */ List<String> getPalletTypePositions(@Param("site") String site, @Param("palletType") String palletType); /** * 获取栈板明细 - AI制作 */ List<Map<String, Object>> getPalletDetails(@Param("site") String site, @Param("palletId") String palletId, @Param("position") String position, @Param("layer") Integer layer); List<PalletDetailData> getPalletDetailsData(@Param("site") String site, @Param("palletId") String palletId);
PalletType getPalletTypeInfoByPallet(@Param("site") String site,@Param("palletId") String palletId); /** * 根据位置获取层数 - AI制作 */ List<Integer> getLayersByPosition(@Param("site") String site, @Param("palletId") String palletId, @Param("position") String position); /** * 验证标签 - AI制作 */ Map<String, Object> validateLabel(@Param("site") String site, @Param("serialNo") String serialNo); /** * 获取栈板类型区域信息(用于校验层级规则) - AI制作 */ List<Map<String, Object>> getPalletTypeAreaInfo(@Param("site") String site, @Param("palletType") String palletType); /** * 获取栈板指定层的明细统计 - AI制作 */ List<Map<String, Object>> getPalletLayerStatistics(@Param("site") String site, @Param("palletId") String palletId, @Param("layer") Integer layer); /** * 保存栈板明细 - AI制作 */ void savePalletDetail(@Param("site") String site, @Param("palletId") String palletId, @Param("position") String position, @Param("layer") Integer layer, @Param("serialNo") String serialNo, @Param("partNo") String partNo, @Param("createBy") String createBy);
/** * @Description 保存栈板明细(无校验,用于自动拣选)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @param position 位置 * @param layer 层数 * @param serialNo 标签编码 * @param partNo 物料编号 * @param createBy 创建人 * @param wcsFlag WCS标记(1=待推送,0=已推送) * @author rqrq * @date 2025/10/09 */ void savePalletDetailNoValidation(@Param("site") String site, @Param("palletId") String palletId, @Param("position") String position, @Param("layer") Integer layer, @Param("serialNo") String serialNo, @Param("partNo") String partNo, @Param("createBy") String createBy, @Param("wcsFlag") Integer wcsFlag); /** * 根据标签查找栈板信息 - AI制作 */ Map<String, Object> findPalletByLabel(@Param("site") String site, @Param("serialNo") String serialNo); AgvStation getNowStation(@Param("site") String site, @Param("palletId") String palletId); /** * 获取指定位置已占用的层数(排除指定标签) - AI制作 */ List<Integer> getOccupiedLayersExcludeSerial(@Param("site") String site, @Param("palletId") String palletId, @Param("position") String position, @Param("excludeSerialNo") String excludeSerialNo);
void updatePalletLocationCode(@Param("site") String site, @Param("palletId") String palletId, @Param("newLocationCode") String newLocationCode); /** * 更新栈板明细位置 - AI制作 */ void updatePalletDetailPosition(@Param("site") String site, @Param("palletId") String palletId, @Param("serialNo") String serialNo, @Param("newPosition") String newPosition, @Param("newLayer") Integer newLayer, @Param("updatedBy") String updatedBy); /** * 删除栈板明细 - AI制作 */ void deletePalletDetail(@Param("site") String site, @Param("palletId") String palletId, @Param("serialNo") String serialNo); /** * @Description 检查上层是否有标签 - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @param position 位置 * @param layer 当前层数 * @return 上层标签数量 * @author rqrq * @date 2025/11/22 */ Integer checkUpperLayerLabels(@Param("site") String site, @Param("palletId") String palletId, @Param("position") String position, @Param("layer") Integer layer); /** * 根据条码删除栈板明细(不指定栈板ID,用于从任何栈板中移除条码) - AI制作 */ void deletePalletDetailBySerialNo(@Param("site") String site, @Param("serialNo") String serialNo); /** * 恢复标签到原栈板(分拣撤回,保留所有原始字段包括wcs_flag) - rqrq */ void restorePalletDetail(@Param("site") String site, @Param("serialNo") String serialNo, @Param("originalPalletId") String originalPalletId, @Param("originalPosition") String originalPosition, @Param("originalLayer") Integer originalLayer, @Param("partNo") String partNo, @Param("createDate") Date createDate, @Param("createBy") String createBy, @Param("wcsFlag") Integer wcsFlag);
/** * 更新栈板调用状态 - AI制作 */ void updatePalletCallingFlag(@Param("site") String site, @Param("palletId") String palletId, @Param("callingFlag") String callingFlag, @Param("updatedBy") String updatedBy);
/** * 检查栈板是否正在被调用 - AI制作 */ String checkPalletCallingFlag(@Param("site") String site, @Param("palletId") String palletId);
/** * @Description 查询栈板的运输任务(检查是否有进行中的AGV任务)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 运输任务(如果存在状态为"已预约"、"已创建"或"已下达"的任务) * @author rqrq * @date 2025/11/01 */ WmsTransportTask getActivePalletTransportTask(@Param("site") String site, @Param("palletId") String palletId);
/** * 统计栈板明细数量 - AI制作 */ int countPalletDetails(@Param("site") String site, @Param("palletId") String palletId);
/** * 更新栈板空栈板标记 - AI制作 */ void updatePalletEmptyFlag(@Param("site") String site, @Param("palletId") String palletId, @Param("emptyFlag") String emptyFlag, @Param("updatedBy") String updatedBy);
// ==================== 运输任务相关方法 - AI制作 ====================
/** * 获取AGV站点列表 - AI制作 */ List<Map<String, Object>> getAgvStations();
/** * 获取可用的AGV站点列表(按状态和类型过滤)- AI制作 * @param statusDb 站点状态(0-空闲,1-有货),null则不过滤 * @return 符合条件的正式站点列表 */ List<AgvStation> getAvailableAgvStations(@Param("statusDb") Integer statusDb);
/** * 根据目标区域查找第一个空闲站点 - AI制作 * @param stationArea 目标区域(station_area) * @return 第一个空闲站点的station_code,如果没有返回null */ String findFirstFreeStationByArea(@Param("stationArea") String stationArea);
/** * 根据起点站点获取可达目标站点 - AI制作 */ List<Map<String, Object>> getTargetStationsByStart(@Param("startStation") String startStation);
/** * 插入单个运输任务 - AI制作 */ void insertTransportTask(WmsTransportTask task); void insertOrderTask(WmsOrderTask task); /** * @Description 删除运输任务(根据taskNo)- rqrq * @param taskNo 任务编号 * @author rqrq * @date 2025/11/17 */ void deleteTransportTask(@Param("taskNo") String taskNo);
/** * 检查站点是否有栈板 - AI制作 */ int checkStationHasPallet(@Param("site") String site, @Param("stationCode") String stationCode); PalletData getPalletDataByStation(@Param("site") String site, @Param("stationCode") String stationCode); /** * 获取站点的栈板ID - AI制作 */ String getPalletIdByStation(@Param("site") String site, @Param("stationCode") String stationCode);
/** * 根据ID查询运输任务 - AI制作 */ WmsTransportTask getTransportTaskById(@Param("id") Long id);
/** * 根据taskNo查询运输任务 - AI制作 */ WmsTransportTask getTransportTaskByTaskNo(@Param("taskNo") String taskNo);
/** * 更新运输任务状态 - AI制作 */ void updateTransportTaskStatus(@Param("id") Long id, @Param("status") String status);
/** * 根据taskNo更新运输任务状态 - AI制作 */ void updateTransportTaskStatusByTaskNo(@Param("taskNo") String taskNo, @Param("status") String status);
/** * @Description 统计指定区域未完成的立库取货call料任务数量 - rqrq * @param site 工厂编码 * @param areaType 区域类型 * @return 未完成的call料任务数量 * @author rqrq * @date 2025/11/22 */ Integer countUnfinishedCallTasksByArea(@Param("site") String site, @Param("areaType") String areaType);
/** * 根据站点代码获取站点信息 - AI制作 */ Map<String, Object> getStationInfoByCode(@Param("stationCode") String stationCode); AgvStation getStationDataByCode(@Param("stationCode") String stationCode); /** * 更新栈板明细的wcs_flag为1 - AI制作 */ void updatePalletDetailWcsFlag(@Param("site") String site, @Param("palletId") String palletId); void reUpdatePalletDetailWcsFlag(@Param("site") String site, @Param("palletId") String palletId);
List<PalletDetailData> getPalletDetailsNewDetail(@Param("site") String site, @Param("palletId") String palletId); void updateSOIssueNotifyOrderMaterialListDetailOutWcsFlag(@Param("site") String site, @Param("serialNo") String serialNo); /** * @Description 根据序列号列表查询SOIssueNotifyOrderMaterialList_detail明细 - rqrq * @param site 工厂编码 * @param serialNos 序列号列表 * @return 明细列表 * @author rqrq * @date 2025/01/XX */ List<com.gaotao.modules.notify.entity.SOIssueNotifyOrderMaterialListDetail> getSOIssueNotifyDetailsBySerialNos( @Param("site") String site, @Param("serialNos") List<String> serialNos); /** * @Description 根据序列号列表查询handling_unit的reserve_order_ref信息 - rqrq * @param site 工厂编码 * @param serialNos 序列号列表 * @return reserve信息列表 * @author rqrq * @date 2025/10/30 */ List<HandlingUnitReserveInfo> getReserveOrderRefsBySerialNos(@Param("site") String site, @Param("serialNos") List<String> serialNos); /** * @Description 根据task_no+item_no+seq_no更新wms_order_task_detail状态为已完成已分拣 - rqrq * @param site 工厂编码 * @param taskNo 任务编号 * @param itemNo 任务行号 * @param seqNo 序号 * @author rqrq * @date 2025/01/XX */ void updateWmsOrderTaskDetailStatusForSorting(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo, @Param("seqNo") Integer seqNo); void updateWmsOrderTaskDetailStatusForAllOuting(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo, @Param("seqNo") Integer seqNo); /** * @Description 批量更新wms_order_task_detail状态为已完成/已分拣(优化版,避免N+1查询)- rqrq * @param site 工厂编码 * @param taskDetails 任务明细列表(包含taskNo, itemNo, seqNo) * @author rqrq * @date 2025/10/31 */ void batchUpdateWmsOrderTaskDetailStatusForSorting(@Param("site") String site, @Param("taskDetails") List<TaskDetailKey> taskDetails); /** * @Description 批量查找序列号所在的托盘信息(优化版,避免N+1查询)- rqrq * @param site 工厂编码 * @param serialNos 序列号列表 * @return Map<序列号, 托盘信息>,key为serialNo,value包含palletId等信息 * @author rqrq * @date 2025/10/31 */ List<Map<String, Object>> batchFindPalletsByLabels(@Param("site") String site, @Param("serialNos") List<String> serialNos); /** * @Description 批量删除指定序列号的托盘明细(优化版,避免N+1查询)- rqrq * @param site 工厂编码 * @param serialNos 序列号列表 * @author rqrq * @date 2025/10/31 */ void batchDeletePalletDetailsBySerialNos(@Param("site") String site, @Param("serialNos") List<String> serialNos); /** * @Description 批量插入托盘明细(无校验,用于自动拣选,优化版)- rqrq * @param detailList 明细列表 * @author rqrq * @date 2025/10/31 */ void batchSavePalletDetailNoValidation(@Param("detailList") List<PalletDetailInsert> detailList);
/** * @Description 检查某个任务的所有明细是否都已完成 - rqrq * @param site 工厂编码 * @param taskNo 任务编号 * @param itemNo 任务行号 * @return 未完成的明细数量 * @author rqrq * @date 2025/01/XX */ int checkAllTaskDetailCompleted(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo);
/** * @Description 更新wms_order_task主表状态为已完成 - rqrq * @param site 工厂编码 * @param taskNo 任务编号 * @param itemNo 任务行号 * @author rqrq * @date 2025/01/XX */ void updateWmsOrderTaskStatusCompleted(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo); /** * @Description 根据task_ref+task_item+serialNo更新SOIssueNotifyOrderMaterialList_detail的out_wcs_flag为Y - rqrq * @param site 工厂编码
* @param serialNo 序列号 * @author rqrq * @date 2025/10/09 */ void updateSOIssueNotifyDetailOutWcsFlagBySerialNo(@Param("site") String site, @Param("serialNo") String serialNo); /** * @Description 批量更新多个序列号的out_wcs_flag为Y(优化版,避免N+1查询)- rqrq * @param site 工厂编码 * @param serialNos 序列号列表 * @author rqrq * @date 2025/10/31 */ void batchUpdateSOIssueNotifyDetailOutWcsFlag(@Param("site") String site, @Param("serialNos") List<String> serialNos); /** * @Description 批量更新wms_order_task_detail状态为已完成/直接出库(优化版,避免N+1查询)- rqrq * @param site 工厂编码 * @param taskDetails 任务明细列表(包含taskNo, itemNo, seqNo) * @author rqrq * @date 2025/10/31 */ void batchUpdateWmsOrderTaskDetailStatus(@Param("site") String site, @Param("taskDetails") List<TaskDetailKey> taskDetails); /** * @Description 一次性更新所有已完成任务的主表状态(优化版,避免循环查询)- rqrq * @param site 工厂编码 * @param taskKeys 任务主键列表(包含taskNo, itemNo) * @author rqrq * @date 2025/10/31 */ void batchUpdateCompletedTaskStatus(@Param("site") String site, @Param("taskKeys") List<TaskDetailKey> taskKeys); void insertWmsTransportTaskDetail(WmsTransportTaskDetail inData); void insertWmsOrderTaskDetail(WmsOrderTaskDetail inData);
Integer getMaxSeqNoForTaskDetail(@Param("site") String site, @Param("taskNo") String taskNo);
void updateTransportTaskStatusForSiteAndNo(@Param("site") String site, @Param("taskNo") String taskNo,@Param("status") String status); /** * @Description 锁定任务明细进行处理(使用status状态控制并发) - rqrq * @param id 明细ID * @return 更新的行数(0表示锁定失败,已被其他线程处理) * @author rqrq * @date 2025/10/18 */ int lockTaskDetailForProcessing(@Param("id") Long id); /** * @Description 更新运输任务明细状态为最终状态 - rqrq * @param id 明细ID * @param status 新状态 * @author rqrq * @date 2025/10/18 */ void updateTransportTaskDetailStatusForId(@Param("id") Long id, @Param("status") String status); /** * @Description 更新运输任务明细为失败状态(包含错误信息) - rqrq * @param id 明细ID * @param errorCode 错误码(处理失败=500) * @param errorMsg 错误信息 * @author rqrq * @date 2025/10/31 */ void updateTransportTaskDetailWithError(@Param("id") Long id, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg); /** * @Description 清除运输任务明细的错误信息(处理成功) - rqrq * @param id 明细ID * @author rqrq * @date 2025/10/31 */ void clearTransportTaskDetailError(@Param("id") Long id);
List<WmsTransportTaskDetail> getTransportTaskDetailListWithStatus(@Param("site") String site); /** * 查询指定状态的订单任务明细列表 - AI制作 */ List<WmsOrderTaskDetail> getOrderTaskDetailListWithStatus(@Param("site") String site); /** * 根据ID更新订单任务明细状态 - AI制作 */ void updateOrderTaskDetailStatusForId(@Param("id") Long id, @Param("status") String status); /** * 根据任务号获取栈板ID - AI制作 */ String getPalletIdByOrderTaskNo(@Param("taskNo") String taskNo); /** * 根据栈板号和任务类型查找订单任务 - AI制作 */ WmsOrderTask findOrderTaskByPalletAndType(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceType") String sourceType); /** * 获取订单任务明细的最大序号 - AI制作 */ Integer getMaxSeqNoForOrderTaskDetail(@Param("site") String site, @Param("taskNo") String taskNo); /** * 插入WCS回调任务 - AI制作 */ void insertWcsCallbackTask(WcsCallbackTask callbackTask); /** * 查询指定状态的WCS回调任务列表 - AI制作 */ List<WcsCallbackTask> getWcsCallbackTaskListWithStatus(@Param("site") String site); /** * 更新WCS回调任务状态 - AI制作 */ void updateWcsCallbackTaskStatus(@Param("id") Long id, @Param("status") String status, @Param("processStartTime") Date processStartTime, @Param("processEndTime") Date processEndTime, @Param("errorMsg") String errorMsg); /** * 原子性更新WCS回调任务状态(乐观锁,防止重复处理) - AI制作 * @param id 任务ID * @param oldStatus 原状态(必须匹配才能更新) * @param newStatus 新状态 * @param processStartTime 处理开始时间 * @return 影响的行数(0=更新失败,1=更新成功) */ int updateWcsCallbackTaskStatusWithLock(@Param("id") Long id, @Param("oldStatus") String oldStatus, @Param("newStatus") String newStatus, @Param("processStartTime") Date processStartTime);
void updatePalletWcsLocation(@Param("site") String site, @Param("palletId") String palletId, @Param("location") String location); /** * 更新WCS回调任务重试次数 - AI制作 */ void updateWcsCallbackTaskRetryCount(@Param("id") Long id, @Param("retryCount") Integer retryCount); /** * 根据栈板ID和动作类型查找订单任务 - AI制作 */ List<WmsOrderTask> findOrderTasksByPalletAndActionType(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceType") String sourceType, @Param("status") String status);
List<WmsOrderTask> findOrderTasksByTaskNo(@Param("site") String site, @Param("taskNo") String taskNo); WmsOrderTask findOrderTasksByTaskNoItem(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo);
/** * 更新订单任务状态和WMS状态 - AI制作 */ void updateOrderTaskStatusAndWmsStatus(@Param("id") Long id, @Param("status") String status, @Param("wmsStatus") String wmsStatus); /** * 根据任务号更新订单任务明细状态 - AI制作 */ void updateOrderTaskDetailStatusByTaskNo(@Param("taskNo") String taskNo, @Param("status") String status, @Param("wmsStatus") String wmsStatus); void updateOrderTaskDetailStatusByTaskNoPalletId(@Param("site") String site,@Param("taskNo") String taskNo, @Param("status") String status, @Param("wmsStatus") String wmsStatus, @Param("palletId") String palletId);
/** * 查询立库调栈板出库的订单任务列表 - AI制作 */ List<WmsOrderTask> getWcsOrderTaskListForPalletOut(@Param("site") String site); /** * 更新订单任务错误信息 - AI制作 */ void updateOrderTaskErrorInfo(@Param("id") Long id, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg); /** * 更新AGV站点状态 - AI制作 */ void updateAgvStationStatus(@Param("stationCode") String stationCode, @Param("statusDb") Integer statusDb, @Param("status") String status); void updateAgvStationAutoFlag(@Param("stationCode") String stationCode, @Param("flag") String flag);
void updateWTTToLocationForId(@Param("site") String site,@Param("taskNo") String taskNo, @Param("toLocation") String toLocation); /** * @Description 更新运输任务的目标区域 - rqrq * @param taskNo 任务编号 * @param toArea 目标区域 * @author rqrq * @date 2025/11/17 */ void updateTransportTaskToArea(@Param("site") String site,@Param("taskNo") String taskNo, @Param("toArea") String toArea); /** * 获取AGV站点状态 - AI制作 */ Integer getAgvStationStatus(@Param("stationCode") String stationCode); String getAgvStationType(@Param("stationCode") String stationCode); /** * 获取栈板详细信息(包含palletType和autoSort以及托盘类型详情) - AI制作 */ /** * 获取栈板详细信息(包含类型关联数据) - AI制作 * @param site 工厂编码 * @param palletId 栈板编码 * @return 栈板详细信息实体类 */ com.gaotao.modules.warehouse.entity.PalletData getPalletInfoWithTypeDetails(@Param("site") String site, @Param("palletId") String palletId);
/** * 更新栈板类型、自动分拣标志和存储类型 - AI制作/rqrq */ void updatePalletTypeAndAutoSort(@Param("site") String site, @Param("palletId") String palletId, @Param("palletType") String palletType, @Param("autoSort") String autoSort, @Param("soreType") Integer soreType);
/** * 获取指定层已占用的位置列表 - rqrq */ List<String> getOccupiedPositionsByLayer(@Param("site") String site, @Param("palletId") String palletId, @Param("layer") Integer layer); /** * @Description 插入WCS回调栈板扫描记录 - rqrq * @param callback 回调记录 * @author rqrq * @date 2025/10/07 */ void insertCallbackPalletScan(@Param("callback") WcsCallbackPalletScan callback);
PalletType getPalletType(@Param("site") String site, @Param("palletType") String palletType); AgvStation getAgvStation( @Param("stationCode") String stationCode); // ==================== 栈板换站相关方法 - rqrq ====================
/** * @Description 检查栈板calling_flag并获取当前站点信息 - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 栈板信息(包含calling_flag和当前站点ID、站点编码) * @author rqrq * @date 2025/10/16 */ CheckPalletResult checkPalletForChangeStation(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 获取可选择的区域列表(choose_able为Y) - rqrq * @return 区域列表 * @author rqrq * @date 2025/10/16 */ List<Area> getAreaOptionsForChange(); /** * @Description 根据区域获取可用站点列表 - rqrq * @param areaId 区域ID * @return 站点列表(active=Y, station_type=正式站点, status_db=0) * @author rqrq * @date 2025/10/16 */ List<AgvStation> getStationsByArea(@Param("areaId") String areaId); /** * @Description 根据区域查找第一个空闲站点(用于自动分配)- rqrq * @param areaId 区域ID * @return 第一个空闲站点的station_code,如果没有返回null * @author rqrq * @date 2025/10/16 */ String findFirstFreeStationByAreaId(@Param("areaId") String areaId); // ==================== 手工移动托盘相关方法 - rqrq ====================
/** * @Description 检查托盘是否可以手工移动(判断calling_flag、当前站点和站点类型)- rqrq * @param site 工厂编码 * @param palletId 托盘编码 * @return 托盘信息(包含calling_flag、当前站点编码、站点类型、是否可操作) * @author rqrq * @date 2025/10/16 */ CheckPalletResult checkPalletForManualMove(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 更新托盘location_code为null(移出站点)- rqrq * @param site 工厂编码 * @param palletId 托盘编码 * @author rqrq * @date 2025/10/16 */ void updatePalletRemoveStation(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 更新站点状态为空闲 - rqrq * @param stationCode 站点编码 * @author rqrq * @date 2025/10/16 */ void updateStationToFree(@Param("stationCode") String stationCode); /** * @Description 更新托盘location_code(绑定站点)- rqrq * @param site 工厂编码 * @param palletId 托盘编码 * @param stationCode 站点编码 * @author rqrq * @date 2025/10/16 */ void updatePalletBindStation(@Param("site") String site, @Param("palletId") String palletId, @Param("stationCode") String stationCode); /** * @Description 更新站点状态为有货 - rqrq * @param stationCode 站点编码 * @author rqrq * @date 2025/10/16 */ void updateStationToOccupied(@Param("stationCode") String stationCode); // ==================== 空托盘组盘相关方法 - rqrq ====================
/** * @Description 检查托盘是否为空托盘(pallet_detail表无数据)- rqrq * @param site 工厂编码 * @param palletId 托盘编码 * @return 托盘信息(包含当前站点ID、站点编码、托盘类型) * @author rqrq * @date 2025/10/16 */ CheckPalletResult checkEmptyPallet(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 获取托盘类型列表(根据pallet_family过滤)- rqrq * @param site 工厂编码 * @param palletFamily 托盘族(可为空) * @return 托盘类型列表 * @author rqrq * @date 2025/10/16 */ List<PalletType> getPalletTypes(@Param("site") String site, @Param("palletFamily") String palletFamily); /** * @Description 获取需要自动续盘的站点列表 - rqrq * @return 符合自动续盘条件的站点列表(auto_call_blank_pallet='Y', auto_call_blank_pallet_type有值, station_type='正式站点', status_db=0) * @author rqrq * @date 2025/10/19 */ List<AgvStation> getAutoCallBlankPalletStations(); // ==================== 取消WCS组盘相关方法 - rqrq ====================
/** * @Description 检查栈板WCS组盘状态(是否被调用、是否发送组盘任务、是否有明细)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 栈板信息(包含callingFlag、hasSentWcsTask、hasDetail) * @author rqrq * @date 2025/10/16 */ CheckPalletResult checkPalletWcsStatus(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 检查栈板是否有wcs_flag=0的明细(已发送组盘任务)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return wcs_flag=0的明细数量 * @author rqrq * @date 2025/10/16 */ int countPalletDetailWithWcsFlagZero(@Param("site") String site, @Param("palletId") String palletId); int countPalletDetailWithWcsFlagOne(@Param("site") String site, @Param("palletId") String palletId);
/** * @Description 更新栈板所有明细的wcs_flag为1(取消组盘)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @author rqrq * @date 2025/10/16 */ void updateAllPalletDetailWcsFlagToOne(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 删除栈板所有明细(移出全部物料)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @author rqrq * @date 2025/10/16 */ void deleteAllPalletDetail(@Param("site") String site, @Param("palletId") String palletId); // ==================== 预约取托盘相关方法 - rqrq ====================
/** * @Description 查询空托盘区可用的空托盘(area_type=Z101, calling_flag=N, 托盘类型匹配, 站点空闲)- rqrq * @param site 工厂编码 * @param palletType 托盘类型 * @param stationCode 目标站点编码 * @return 可用的空托盘信息 * @author rqrq * @date 2025/10/17 */ Pallet findAvailableEmptyPallet(@Param("site") String site, @Param("palletType") String palletType, @Param("stationCode") String stationCode); AgvStation getStationByCode(@Param("stationCode") String stationCode); /** * @Description 检查指定托盘是否就绪(area_type在Z101/Z103/Z104, calling_flag=N, 站点空闲)- rqrq * @param site 工厂编码 * @param palletId 托盘编码 * @param stationCode 目标站点编码 * @return 托盘信息(如果就绪) * @author rqrq * @date 2025/10/17 */ Pallet checkPalletReady(@Param("site") String site, @Param("palletId") String palletId, @Param("stationCode") String stationCode); /** * @Description 使用乐观锁更新运输任务状态(基于wms_status字段防止重复处理)- rqrq * @param taskNo 任务编号 * @param newStatus 新状态 * @param palletId 托盘编码 * @param fromLocation 起始位置(栈板所在位置) * @param toLocation 目标位置 * @param oldWmsStatus 旧的wms_status(乐观锁) * @param newWmsStatus 新的wms_status * @return 影响的行数(0=更新失败,1=更新成功) * @author rqrq * @date 2025/10/17 */ int updateTransportTaskWithLock(@Param("taskNo") String taskNo, @Param("newStatus") String newStatus, @Param("palletId") String palletId, @Param("fromLocation") String fromLocation, @Param("toLocation") String toLocation, @Param("oldWmsStatus") String oldWmsStatus, @Param("newWmsStatus") String newWmsStatus); /** * @Description 使用乐观锁更新AGV站点状态(检查期望状态,防止并发覆盖)- rqrq * @param stationCode 站点编码 * @param expectedStatusDb 期望的当前状态(乐观锁) * @param newStatusDb 新状态代码 * @param newStatus 新状态描述 * @return 影响的行数(0=更新失败,1=更新成功) * @author rqrq * @date 2025/11/04 */ int updateAgvStationStatusWithLock(@Param("stationCode") String stationCode, @Param("expectedStatusDb") Integer expectedStatusDb, @Param("newStatusDb") Integer newStatusDb, @Param("newStatus") String newStatus); /** * @Description 根据栈板ID和sourceType查询最新的OrderTask(按创建时间倒序)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @param sourceType 来源类型(如:手工Call料) * @return 最新的OrderTask * @author rqrq * @date 2025/10/17 */ WmsOrderTask findLatestOrderTaskByPallet(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceType") String sourceType); /** * @Description 根据栈板ID更新最新的TransportTask的source_bill_no和source_line_id - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @param sourceBillNo 来源单据号 * @param sourceLineId 来源单据行号 * @author rqrq * @date 2025/10/17 */ void updateTransportTaskSourceInfo(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceBillNo") String sourceBillNo, @Param("sourceLineId") Integer sourceLineId); /** * @Description 根据任务编号更新运输任务的来源单据信息(优化版本)- rqrq * @param taskNo 运输任务编号 * @param sourceBillNo 来源单号 * @param sourceLineId 来源行号 * @author rqrq * @date 2025/11/22 */ void updateTransportTaskSourceInfoByTaskNo(@Param("taskNo") String taskNo, @Param("sourceBillNo") String sourceBillNo, @Param("sourceLineId") Integer sourceLineId); // ==================== 调度发货任务相关方法 - rqrq ====================
/** * @Description 根据栈板编码获取栈板信息 - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 栈板信息 * @author rqrq * @date 2025/10/18 */ Pallet getPalletByCode(@Param("site") String site, @Param("palletId") String palletId); // ==================== 人工分拣补盘相关方法 - rqrq ====================
/** * @Description 根据任务号和行号成对匹配查询发料明细的序列号列表 - rqrq * @param site 工厂编码 * @param taskNotes 任务明细列表(taskNo和itemNo成对匹配) * @return 序列号列表 * @author rqrq * @date 2025/10/19 */ List<String> getSerialNosByTaskRefAndItem(@Param("site") String site, @Param("taskNotes") List<TaskNote> taskNotes); /** * @Description 根据序列号列表查询栈板ID列表(去重) - rqrq * @param site 工厂编码 * @param serialNoList 序列号列表 * @return 栈板ID列表 * @author rqrq * @date 2025/10/19 */ List<String> getPalletIdsBySerialNos(@Param("site") String site, @Param("serialNoList") List<String> serialNoList); /** * @Description 检查栈板是否在指定wcsTaskID和站点生成过运输任务 - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @param sourceBillNo 来源单号(wcsTaskID) * @param stationCode 站点编码 * @return 任务数量(>0表示已存在) * @author rqrq * @date 2025/10/19 */ int checkPalletTaskExists(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceBillNo") String sourceBillNo, @Param("stationCode") String stationCode); /** * @Description 查询栈板是否存在未完成的运输任务 - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 未完成任务的任务编号(如果存在),不存在则返回null * @author rqrq * @date 2025/10/31 */ String getUnfinishedTaskByPalletId(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 检查栈板是否放满(根据pallet_type_area的点位数和max_layer判断) - rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 是否已满(1=已满,0=未满) * @author rqrq * @date 2025/10/19 */ int checkPalletIsFull(@Param("site") String site, @Param("palletId") String palletId);
WmsTransportTask checkIfHasNeedTask(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 查询最新的一条等待通道机复核的任务明细 - rqrq * @return 任务明细(action_type='等待通道机复核' 且 status='等待中') * @author rqrq * @date 2025/11/11 */ WmsTransportTaskDetail getLatestWaitingRfidReviewTaskDetail(); /** * @Description 更新任务明细的RFID复核结果 - rqrq * @param id 任务明细ID * @param agvCode AGV代码(复核结果:1=成功,2=失败) * @param comment 备注(RFID列表JSON字符串) * @param status 状态(已录入) * @author rqrq * @date 2025/11/11 */ void updateTaskDetailWithRfidReviewResult(@Param("id") Long id, @Param("agvCode") String agvCode, @Param("comment") String comment, @Param("status") String status);
/** * @Description 批量更新任务明细状态为已取消 - rqrq * @param site 站点 * @param taskNo 任务号 * @param status 状态(已取消) * @author rqrq * @date 2025/11/11 */ void updateTaskDetailStatusByTaskNo(@Param("site") String site, @Param("taskNo") String taskNo, @Param("status") String status);
// ==================== 配送任务创建相关方法 - rqrq ====================
/** * @Description 查询栈板物料的预约信息(关联pallet_detail和handling_unit)- rqrq * @param site 工厂编码 * @param palletId 栈板编码 * @return 物料预约信息列表(包含serialNo、reserveFlag、reserveOrderRef1/2/3) * @author rqrq * @date 2025/11/14 */ List<Map<String, Object>> getPalletMaterialReserveInfo(@Param("site") String site, @Param("palletId") String palletId); /** * @Description 根据notify_no和item_no查询申请单信息 - rqrq * @param site 工厂编码 * @param notifyNo 申请单号 * @param itemNo 行号 * @return 订单信息(包含productionArea、orderType) * @author rqrq * @date 2025/11/14 */ Map<String, Object> getOrderInfoByNotifyAndItem(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("itemNo") String itemNo); /** * @Description 根据site、taskNo、itemNo查询运输任务 - rqrq * @param site 工厂编码 * @param taskNo 任务编号 * @param itemNo 任务行号 * @return 运输任务信息 * @author rqrq * @date 2025/11/25 */ WmsTransportTask getTransportTaskByTaskNoAndItem(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo); /** * @Description 更新运输任务的托盘ID - rqrq * @param site 工厂编码 * @param taskNo 任务编号 * @param itemNo 任务行号 * @param palletId 新的托盘ID * @author rqrq * @date 2025/11/25 */ void updateTransportTaskPalletId(@Param("site") String site, @Param("taskNo") String taskNo, @Param("itemNo") Integer itemNo, @Param("palletId") String palletId);
}
|