package com.gaotao.modules.autoWareHourceHaian.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnWmsTransportTaskData; import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnWmsTransportTask; import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnWmsTransportTaskDetail; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; /** * @author rqrq * @Description 海安AGV任务Mapper:提供查询能力并承接AGV回调明细落库(幂等去重) - rqrq */ @Mapper public interface HaiAnAgvTaskMapper { /** * 按工厂、托盘、实际任务号及来源WOT判断齐套运输;仅下达和缺主单取消使用,未匹配返回false。- rqrq * 只认WOT的齐套运输类型,不兼容旧单据;SQL失败由调用方事务回滚。- rqrq */ boolean isCacheTransportTask(@Param("site") String site, @Param("palletId") String palletId, @Param("taskNo") String taskNo, @Param("sourceBillNo") String sourceBillNo); /** * @author rqrq * @Description 分页查询海安运输任务主表 - rqrq */ IPage getTransportTaskList(Page page, @Param("data") HaiAnWmsTransportTaskData data); /** * @author rqrq * @Description 按任务号查询海安运输任务步骤明细(明细层已改为to_location+to_area,不再返回from_location) - rqrq */ List getTransportTaskDetails(@Param("site") String site, @Param("taskNo") String taskNo); /** * @author rqrq * @Description 按site+taskNo查询当前最大步骤序号并返回下一个序号,避免并发插入序号冲突 - rqrq */ Integer getNextSeqNoForTaskDetail(@Param("site") String site, @Param("taskNo") String taskNo); /** * @author rqrq * @Description 按site+taskNo(wmsId)+actionType统计明细条数,不校验托盘号;查询锁保持至调用方事务结束,防止并发重复落库 - rqrq */ Integer countTaskDetailByType(@Param("site") String site, @Param("taskNo") String taskNo, @Param("actionType") String actionType); /** * @author rqrq * @Description 写入haian_wms_transport_task_detail,所有动作同步落pallet_id供轨迹展示,状态统一“已录入” - rqrq */ int insertTransportTaskDetail(HaiAnWmsTransportTaskDetail detail); /** * @author rqrq * @Description 查询待处理海安AGV回调明细(状态控制并发),供定时任务轮询消费 - rqrq */ List getTransportTaskDetailListWithStatus(@Param("site") String site); /** * @author rqrq * @Description 通过明细ID乐观锁抢占处理权:仅允许“已录入/处理失败/回调处理失败”更新为“处理中” - rqrq * @return 影响行数,0=抢占失败(已被其他线程处理),1=抢占成功 - rqrq */ int lockTaskDetailForProcessing(@Param("id") Long id); /** * @author rqrq * @Description 更新海安AGV回调明细状态,可按需回写完成时间用于追溯处理耗时 - rqrq */ int updateTransportTaskDetailStatusForId(@Param("id") Long id, @Param("status") String status, @Param("completeTime") Date completeTime); /** * @author rqrq * @Description 回写海安AGV回调明细错误信息,便于定时任务失败重试与排障 - rqrq */ int updateTransportTaskDetailWithError(@Param("id") Long id, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg); /** * @author rqrq * @Description 清空海安AGV回调明细错误信息,防止历史失败原因污染成功记录 - rqrq */ int clearTransportTaskDetailError(@Param("id") Long id); /** * 重复RFID回调按 site+taskNo+明细ID回写等待或完成;只更新已抢占的处理中明细,失败让整个回调回滚。 - rqrq * @param site 工厂编码,不得用登录态替代 - rqrq * @param taskNo 当前搬运任务号 - rqrq * @param id 当前RFID回调明细ID,仅用于定位回调,不参与发料任务查重 - rqrq * @param status 原回调写待自动发料,重复回调或已完成任务写已完成 - rqrq * @param completeTime 等待时为空,完成时为当前时间 - rqrq * @return 更新行数,必须为1 - rqrq */ int updateRfidDetailForExistingAutoIssue(@Param("site") String site, @Param("taskNo") String taskNo, @Param("id") Long id, @Param("status") String status, @Param("completeTime") Date completeTime); /** * @author rqrq * @Description 按site+taskNo查询海安运输任务主记录,供回调消费阶段做状态联动 - rqrq */ HaiAnWmsTransportTask getTransportTaskByTaskNo(@Param("site") String site, @Param("taskNo") String taskNo); /** * @author rqrq * @Description 新增海安运输任务主记录(下达任务场景),并落from_area/to_area用于后续放货完成与取消处理 - rqrq */ int insertTransportTask(HaiAnWmsTransportTask task); /** * @author rqrq * @Description 下达任务回调重复到达时,按taskNo更新主记录关键字段(from/to区域、托盘、来源单号、状态) - rqrq */ int updateTransportTaskForDispatch(HaiAnWmsTransportTask task); /** * @author rqrq * @Description 按site+taskNo更新海安运输任务主状态,可在完成/取消时补齐complete_time - rqrq */ int updateTransportTaskStatusByTaskNo(@Param("site") String site, @Param("taskNo") String taskNo, @Param("status") String status, @Param("completeTime") Date completeTime); /** * @author rqrq * @Description 按site+notifyNo统计shoporder领料主单,供RFID复核判断是否挂起待自动发料;NOLOCK允许脏读,短暂未提交主单可能漏挂,下一轮不会再扫已完成/待自动发料以外的RFID明细 - rqrq * @param site 工厂site,必须与回调一致 - rqrq * @param notifyNo 标签预定主单号 reserve_order_ref1 - rqrq * @param orderType 申请单类型,RFID场景固定 shoporder - rqrq * @return 命中行数,大于0表示需要自动发料挂起 - rqrq */ Integer countShoporderNotifyHeader(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("orderType") String orderType); }