You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1014 lines
42 KiB

3 months ago
4 months ago
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
3 months ago
4 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
2 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. package com.gaotao.modules.automatedWarehouse.mapper;
  2. import com.gaotao.modules.api.entity.TaskNote;
  3. import com.gaotao.modules.automatedWarehouse.entity.*;
  4. import com.gaotao.modules.base.entity.PalletType;
  5. import com.gaotao.modules.warehouse.entity.Pallet;
  6. import com.gaotao.modules.warehouse.entity.PalletData;
  7. import org.apache.ibatis.annotations.Mapper;
  8. import org.apache.ibatis.annotations.Param;
  9. import org.hibernate.dialect.function.IntegralTimestampaddFunction;
  10. import java.util.Date;
  11. import java.util.List;
  12. import java.util.Map;
  13. @Mapper
  14. public interface WcsIntegrationMapper {
  15. List<WmsLabelAndPalletData> palletListForPartNo(PartPalletData inData);
  16. List<WmsTransportTask> checkPalletTask (@Param("site") String site, @Param("palletId") String palletId);
  17. void batchSaveTransportTask(@Param("list") List<WmsTransportTask> transportTaskList);
  18. void batchSaveOrderTask(@Param("list") List<WmsOrderTask> transportTaskList);
  19. void batchSaveOrderTaskDetail(@Param("list") List<WmsOrderTaskDetail> inList);
  20. // ==================== 打托相关方法 - AI制作 ====================
  21. /**
  22. * 检查栈板是否存在 - AI制作
  23. */
  24. Map<String, Object> getPalletInfo(@Param("site") String site, @Param("palletId") String palletId);
  25. /**
  26. * 获取栈板明细数量 - rqrq
  27. * @param site 工厂编码
  28. * @param palletId 栈板编码
  29. * @return 明细数量
  30. */
  31. int getPalletDetailCount(@Param("site") String site, @Param("palletId") String palletId);
  32. /**
  33. * 获取栈板类型的位置信息 - AI制作
  34. */
  35. List<String> getPalletTypePositions(@Param("site") String site, @Param("palletType") String palletType);
  36. /**
  37. * 获取栈板明细 - AI制作
  38. */
  39. List<Map<String, Object>> getPalletDetails(@Param("site") String site, @Param("palletId") String palletId,
  40. @Param("position") String position, @Param("layer") Integer layer);
  41. List<PalletDetailData> getPalletDetailsData(@Param("site") String site, @Param("palletId") String palletId);
  42. PalletType getPalletTypeInfoByPallet(@Param("site") String site,@Param("palletId") String palletId);
  43. /**
  44. * 根据位置获取层数 - AI制作
  45. */
  46. List<Integer> getLayersByPosition(@Param("site") String site, @Param("palletId") String palletId,
  47. @Param("position") String position);
  48. /**
  49. * 验证标签 - AI制作
  50. */
  51. Map<String, Object> validateLabel(@Param("site") String site, @Param("serialNo") String serialNo);
  52. /**
  53. * 获取栈板类型区域信息用于校验层级规则 - AI制作
  54. */
  55. List<Map<String, Object>> getPalletTypeAreaInfo(@Param("site") String site, @Param("palletType") String palletType);
  56. /**
  57. * 获取栈板指定层的明细统计 - AI制作
  58. */
  59. List<Map<String, Object>> getPalletLayerStatistics(@Param("site") String site, @Param("palletId") String palletId,
  60. @Param("layer") Integer layer);
  61. /**
  62. * 保存栈板明细 - AI制作
  63. */
  64. void savePalletDetail(@Param("site") String site, @Param("palletId") String palletId,
  65. @Param("position") String position, @Param("layer") Integer layer,
  66. @Param("serialNo") String serialNo, @Param("partNo") String partNo,
  67. @Param("createBy") String createBy);
  68. /**
  69. * @Description 保存栈板明细无校验用于自动拣选- rqrq
  70. * @param site 工厂编码
  71. * @param palletId 栈板编码
  72. * @param position 位置
  73. * @param layer 层数
  74. * @param serialNo 标签编码
  75. * @param partNo 物料编号
  76. * @param createBy 创建人
  77. * @param wcsFlag WCS标记1=待推送0=已推送
  78. * @author rqrq
  79. * @date 2025/10/09
  80. */
  81. void savePalletDetailNoValidation(@Param("site") String site, @Param("palletId") String palletId,
  82. @Param("position") String position, @Param("layer") Integer layer,
  83. @Param("serialNo") String serialNo, @Param("partNo") String partNo,
  84. @Param("createBy") String createBy, @Param("wcsFlag") Integer wcsFlag);
  85. /**
  86. * 根据标签查找栈板信息 - AI制作
  87. */
  88. Map<String, Object> findPalletByLabel(@Param("site") String site, @Param("serialNo") String serialNo);
  89. AgvStation getNowStation(@Param("site") String site, @Param("palletId") String palletId);
  90. /**
  91. * 获取指定位置已占用的层数排除指定标签 - AI制作
  92. */
  93. List<Integer> getOccupiedLayersExcludeSerial(@Param("site") String site, @Param("palletId") String palletId,
  94. @Param("position") String position, @Param("excludeSerialNo") String excludeSerialNo);
  95. void updatePalletLocationCode(@Param("site") String site, @Param("palletId") String palletId, @Param("newLocationCode") String newLocationCode);
  96. /**
  97. * 更新栈板明细位置 - AI制作
  98. */
  99. void updatePalletDetailPosition(@Param("site") String site, @Param("palletId") String palletId,
  100. @Param("serialNo") String serialNo, @Param("newPosition") String newPosition,
  101. @Param("newLayer") Integer newLayer, @Param("updatedBy") String updatedBy);
  102. /**
  103. * 删除栈板明细 - AI制作
  104. */
  105. void deletePalletDetail(@Param("site") String site, @Param("palletId") String palletId,
  106. @Param("serialNo") String serialNo);
  107. /**
  108. * @Description 检查上层是否有标签 - rqrq
  109. * @param site 工厂编码
  110. * @param palletId 栈板编码
  111. * @param position 位置
  112. * @param layer 当前层数
  113. * @return 上层标签数量
  114. * @author rqrq
  115. * @date 2025/11/22
  116. */
  117. Integer checkUpperLayerLabels(@Param("site") String site, @Param("palletId") String palletId,
  118. @Param("position") String position, @Param("layer") Integer layer);
  119. /**
  120. * 根据条码删除栈板明细不指定栈板ID用于从任何栈板中移除条码 - AI制作
  121. */
  122. void deletePalletDetailBySerialNo(@Param("site") String site, @Param("serialNo") String serialNo);
  123. /**
  124. * 恢复标签到原栈板分拣撤回保留所有原始字段包括wcs_flag - rqrq
  125. */
  126. void restorePalletDetail(@Param("site") String site, @Param("serialNo") String serialNo,
  127. @Param("originalPalletId") String originalPalletId,
  128. @Param("originalPosition") String originalPosition,
  129. @Param("originalLayer") Integer originalLayer,
  130. @Param("partNo") String partNo,
  131. @Param("createDate") Date createDate,
  132. @Param("createBy") String createBy,
  133. @Param("wcsFlag") Integer wcsFlag);
  134. /**
  135. * 更新栈板调用状态 - AI制作
  136. */
  137. void updatePalletCallingFlag(@Param("site") String site, @Param("palletId") String palletId,
  138. @Param("callingFlag") String callingFlag, @Param("updatedBy") String updatedBy);
  139. /**
  140. * 检查栈板是否正在被调用 - AI制作
  141. */
  142. String checkPalletCallingFlag(@Param("site") String site, @Param("palletId") String palletId);
  143. /**
  144. * @Description 查询栈板的运输任务检查是否有进行中的AGV任务- rqrq
  145. * @param site 工厂编码
  146. * @param palletId 栈板编码
  147. * @return 运输任务如果存在状态为"已预约""已创建""已下达"的任务
  148. * @author rqrq
  149. * @date 2025/11/01
  150. */
  151. WmsTransportTask getActivePalletTransportTask(@Param("site") String site, @Param("palletId") String palletId);
  152. /**
  153. * 统计栈板明细数量 - AI制作
  154. */
  155. int countPalletDetails(@Param("site") String site, @Param("palletId") String palletId);
  156. /**
  157. * 更新栈板空栈板标记 - AI制作
  158. */
  159. void updatePalletEmptyFlag(@Param("site") String site, @Param("palletId") String palletId,
  160. @Param("emptyFlag") String emptyFlag, @Param("updatedBy") String updatedBy);
  161. // ==================== 运输任务相关方法 - AI制作 ====================
  162. /**
  163. * 获取AGV站点列表 - AI制作
  164. */
  165. List<Map<String, Object>> getAgvStations();
  166. /**
  167. * 获取可用的AGV站点列表按状态和类型过滤- AI制作
  168. * @param statusDb 站点状态0-空闲1-有货null则不过滤
  169. * @return 符合条件的正式站点列表
  170. */
  171. List<AgvStation> getAvailableAgvStations(@Param("statusDb") Integer statusDb);
  172. /**
  173. * 根据目标区域查找第一个空闲站点 - AI制作
  174. * @param stationArea 目标区域station_area
  175. * @return 第一个空闲站点的station_code如果没有返回null
  176. */
  177. String findFirstFreeStationByArea(@Param("stationArea") String stationArea);
  178. /**
  179. * 根据起点站点获取可达目标站点 - AI制作
  180. */
  181. List<Map<String, Object>> getTargetStationsByStart(@Param("startStation") String startStation);
  182. /**
  183. * 插入单个运输任务 - AI制作
  184. */
  185. void insertTransportTask(WmsTransportTask task);
  186. void insertOrderTask(WmsOrderTask task);
  187. /**
  188. * @Description 删除运输任务根据taskNo- rqrq
  189. * @param taskNo 任务编号
  190. * @author rqrq
  191. * @date 2025/11/17
  192. */
  193. void deleteTransportTask(@Param("taskNo") String taskNo);
  194. /**
  195. * 检查站点是否有栈板 - AI制作
  196. */
  197. int checkStationHasPallet(@Param("site") String site, @Param("stationCode") String stationCode);
  198. PalletData getPalletDataByStation(@Param("site") String site, @Param("stationCode") String stationCode);
  199. /**
  200. * 获取站点的栈板ID - AI制作
  201. */
  202. String getPalletIdByStation(@Param("site") String site, @Param("stationCode") String stationCode);
  203. /**
  204. * 根据ID查询运输任务 - AI制作
  205. */
  206. WmsTransportTask getTransportTaskById(@Param("id") Long id);
  207. /**
  208. * 根据taskNo查询运输任务 - AI制作
  209. */
  210. WmsTransportTask getTransportTaskByTaskNo(@Param("taskNo") String taskNo);
  211. /**
  212. * 更新运输任务状态 - AI制作
  213. */
  214. void updateTransportTaskStatus(@Param("id") Long id, @Param("status") String status);
  215. /**
  216. * 根据taskNo更新运输任务状态 - AI制作
  217. */
  218. void updateTransportTaskStatusByTaskNo(@Param("taskNo") String taskNo, @Param("status") String status);
  219. /**
  220. * @Description 统计指定区域未完成的立库取货call料任务数量 - rqrq
  221. * @param site 工厂编码
  222. * @param areaType 区域类型
  223. * @return 未完成的call料任务数量
  224. * @author rqrq
  225. * @date 2025/11/22
  226. */
  227. Integer countUnfinishedCallTasksByArea(@Param("site") String site, @Param("areaType") String areaType);
  228. /**
  229. * 根据站点代码获取站点信息 - AI制作
  230. */
  231. Map<String, Object> getStationInfoByCode(@Param("stationCode") String stationCode);
  232. AgvStation getStationDataByCode(@Param("stationCode") String stationCode);
  233. /**
  234. * 更新栈板明细的wcs_flag为1 - AI制作
  235. */
  236. void updatePalletDetailWcsFlag(@Param("site") String site, @Param("palletId") String palletId);
  237. void reUpdatePalletDetailWcsFlag(@Param("site") String site, @Param("palletId") String palletId);
  238. List<PalletDetailData> getPalletDetailsNewDetail(@Param("site") String site, @Param("palletId") String palletId);
  239. void updateSOIssueNotifyOrderMaterialListDetailOutWcsFlag(@Param("site") String site, @Param("serialNo") String serialNo);
  240. /**
  241. * @Description 根据序列号列表查询SOIssueNotifyOrderMaterialList_detail明细 - rqrq
  242. * @param site 工厂编码
  243. * @param serialNos 序列号列表
  244. * @return 明细列表
  245. * @author rqrq
  246. * @date 2025/01/XX
  247. */
  248. List<com.gaotao.modules.notify.entity.SOIssueNotifyOrderMaterialListDetail> getSOIssueNotifyDetailsBySerialNos(
  249. @Param("site") String site, @Param("serialNos") List<String> serialNos);
  250. /**
  251. * @Description 根据序列号列表查询handling_unit的reserve_order_ref信息 - rqrq
  252. * @param site 工厂编码
  253. * @param serialNos 序列号列表
  254. * @return reserve信息列表
  255. * @author rqrq
  256. * @date 2025/10/30
  257. */
  258. List<HandlingUnitReserveInfo> getReserveOrderRefsBySerialNos(@Param("site") String site, @Param("serialNos") List<String> serialNos);
  259. /**
  260. * @Description 根据task_no+item_no+seq_no更新wms_order_task_detail状态为已完成已分拣 - rqrq
  261. * @param site 工厂编码
  262. * @param taskNo 任务编号
  263. * @param itemNo 任务行号
  264. * @param seqNo 序号
  265. * @author rqrq
  266. * @date 2025/01/XX
  267. */
  268. void updateWmsOrderTaskDetailStatusForSorting(@Param("site") String site, @Param("taskNo") String taskNo,
  269. @Param("itemNo") Integer itemNo, @Param("seqNo") Integer seqNo);
  270. void updateWmsOrderTaskDetailStatusForAllOuting(@Param("site") String site, @Param("taskNo") String taskNo,
  271. @Param("itemNo") Integer itemNo, @Param("seqNo") Integer seqNo);
  272. /**
  273. * @Description 批量更新wms_order_task_detail状态为已完成/已分拣优化版避免N+1查询- rqrq
  274. * @param site 工厂编码
  275. * @param taskDetails 任务明细列表包含taskNo, itemNo, seqNo
  276. * @author rqrq
  277. * @date 2025/10/31
  278. */
  279. void batchUpdateWmsOrderTaskDetailStatusForSorting(@Param("site") String site, @Param("taskDetails") List<TaskDetailKey> taskDetails);
  280. /**
  281. * @Description 批量查找序列号所在的托盘信息优化版避免N+1查询- rqrq
  282. * @param site 工厂编码
  283. * @param serialNos 序列号列表
  284. * @return Map<序列号, 托盘信息>key为serialNovalue包含palletId等信息
  285. * @author rqrq
  286. * @date 2025/10/31
  287. */
  288. List<Map<String, Object>> batchFindPalletsByLabels(@Param("site") String site, @Param("serialNos") List<String> serialNos);
  289. /**
  290. * @Description 批量删除指定序列号的托盘明细优化版避免N+1查询- rqrq
  291. * @param site 工厂编码
  292. * @param serialNos 序列号列表
  293. * @author rqrq
  294. * @date 2025/10/31
  295. */
  296. void batchDeletePalletDetailsBySerialNos(@Param("site") String site, @Param("serialNos") List<String> serialNos);
  297. /**
  298. * @Description 批量插入托盘明细无校验用于自动拣选优化版- rqrq
  299. * @param detailList 明细列表
  300. * @author rqrq
  301. * @date 2025/10/31
  302. */
  303. void batchSavePalletDetailNoValidation(@Param("detailList") List<PalletDetailInsert> detailList);
  304. /**
  305. * @Description 检查某个任务的所有明细是否都已完成 - rqrq
  306. * @param site 工厂编码
  307. * @param taskNo 任务编号
  308. * @param itemNo 任务行号
  309. * @return 未完成的明细数量
  310. * @author rqrq
  311. * @date 2025/01/XX
  312. */
  313. int checkAllTaskDetailCompleted(@Param("site") String site, @Param("taskNo") String taskNo,
  314. @Param("itemNo") Integer itemNo);
  315. /**
  316. * @Description 更新wms_order_task主表状态为已完成 - rqrq
  317. * @param site 工厂编码
  318. * @param taskNo 任务编号
  319. * @param itemNo 任务行号
  320. * @author rqrq
  321. * @date 2025/01/XX
  322. */
  323. void updateWmsOrderTaskStatusCompleted(@Param("site") String site, @Param("taskNo") String taskNo,
  324. @Param("itemNo") Integer itemNo);
  325. /**
  326. * @Description 根据task_ref+task_item+serialNo更新SOIssueNotifyOrderMaterialList_detail的out_wcs_flag为Y - rqrq
  327. * @param site 工厂编码
  328. * @param serialNo 序列号
  329. * @author rqrq
  330. * @date 2025/10/09
  331. */
  332. void updateSOIssueNotifyDetailOutWcsFlagBySerialNo(@Param("site") String site, @Param("serialNo") String serialNo);
  333. /**
  334. * @Description 批量更新多个序列号的out_wcs_flag为Y优化版避免N+1查询- rqrq
  335. * @param site 工厂编码
  336. * @param serialNos 序列号列表
  337. * @author rqrq
  338. * @date 2025/10/31
  339. */
  340. void batchUpdateSOIssueNotifyDetailOutWcsFlag(@Param("site") String site, @Param("serialNos") List<String> serialNos);
  341. /**
  342. * @Description 批量更新wms_order_task_detail状态为已完成/直接出库优化版避免N+1查询- rqrq
  343. * @param site 工厂编码
  344. * @param taskDetails 任务明细列表包含taskNo, itemNo, seqNo
  345. * @author rqrq
  346. * @date 2025/10/31
  347. */
  348. void batchUpdateWmsOrderTaskDetailStatus(@Param("site") String site, @Param("taskDetails") List<TaskDetailKey> taskDetails);
  349. /**
  350. * @Description 一次性更新所有已完成任务的主表状态优化版避免循环查询- rqrq
  351. * @param site 工厂编码
  352. * @param taskKeys 任务主键列表包含taskNo, itemNo
  353. * @author rqrq
  354. * @date 2025/10/31
  355. */
  356. void batchUpdateCompletedTaskStatus(@Param("site") String site, @Param("taskKeys") List<TaskDetailKey> taskKeys);
  357. void insertWmsTransportTaskDetail(WmsTransportTaskDetail inData);
  358. void insertWmsOrderTaskDetail(WmsOrderTaskDetail inData);
  359. Integer getMaxSeqNoForTaskDetail(@Param("site") String site, @Param("taskNo") String taskNo);
  360. void updateTransportTaskStatusForSiteAndNo(@Param("site") String site, @Param("taskNo") String taskNo,@Param("status") String status);
  361. /**
  362. * @Description 锁定任务明细进行处理使用status状态控制并发 - rqrq
  363. * @param id 明细ID
  364. * @return 更新的行数0表示锁定失败已被其他线程处理
  365. * @author rqrq
  366. * @date 2025/10/18
  367. */
  368. int lockTaskDetailForProcessing(@Param("id") Long id);
  369. /**
  370. * @Description 更新运输任务明细状态为最终状态 - rqrq
  371. * @param id 明细ID
  372. * @param status 新状态
  373. * @author rqrq
  374. * @date 2025/10/18
  375. */
  376. void updateTransportTaskDetailStatusForId(@Param("id") Long id, @Param("status") String status);
  377. /**
  378. * @Description 更新运输任务明细为失败状态包含错误信息 - rqrq
  379. * @param id 明细ID
  380. * @param errorCode 错误码处理失败=500
  381. * @param errorMsg 错误信息
  382. * @author rqrq
  383. * @date 2025/10/31
  384. */
  385. void updateTransportTaskDetailWithError(@Param("id") Long id, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg);
  386. /**
  387. * @Description 清除运输任务明细的错误信息处理成功 - rqrq
  388. * @param id 明细ID
  389. * @author rqrq
  390. * @date 2025/10/31
  391. */
  392. void clearTransportTaskDetailError(@Param("id") Long id);
  393. List<WmsTransportTaskDetail> getTransportTaskDetailListWithStatus(@Param("site") String site);
  394. /**
  395. * 查询指定状态的订单任务明细列表 - AI制作
  396. */
  397. List<WmsOrderTaskDetail> getOrderTaskDetailListWithStatus(@Param("site") String site);
  398. /**
  399. * 根据ID更新订单任务明细状态 - AI制作
  400. */
  401. void updateOrderTaskDetailStatusForId(@Param("id") Long id, @Param("status") String status);
  402. /**
  403. * 根据任务号获取栈板ID - AI制作
  404. */
  405. String getPalletIdByOrderTaskNo(@Param("taskNo") String taskNo);
  406. /**
  407. * 根据栈板号和任务类型查找订单任务 - AI制作
  408. */
  409. WmsOrderTask findOrderTaskByPalletAndType(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceType") String sourceType);
  410. /**
  411. * 获取订单任务明细的最大序号 - AI制作
  412. */
  413. Integer getMaxSeqNoForOrderTaskDetail(@Param("site") String site, @Param("taskNo") String taskNo);
  414. /**
  415. * 插入WCS回调任务 - AI制作
  416. */
  417. void insertWcsCallbackTask(WcsCallbackTask callbackTask);
  418. /**
  419. * 查询指定状态的WCS回调任务列表 - AI制作
  420. */
  421. List<WcsCallbackTask> getWcsCallbackTaskListWithStatus(@Param("site") String site);
  422. /**
  423. * 更新WCS回调任务状态 - AI制作
  424. */
  425. void updateWcsCallbackTaskStatus(@Param("id") Long id, @Param("status") String status,
  426. @Param("processStartTime") Date processStartTime,
  427. @Param("processEndTime") Date processEndTime,
  428. @Param("errorMsg") String errorMsg);
  429. /**
  430. * 原子性更新WCS回调任务状态乐观锁防止重复处理 - AI制作
  431. * @param id 任务ID
  432. * @param oldStatus 原状态必须匹配才能更新
  433. * @param newStatus 新状态
  434. * @param processStartTime 处理开始时间
  435. * @return 影响的行数0=更新失败1=更新成功
  436. */
  437. int updateWcsCallbackTaskStatusWithLock(@Param("id") Long id,
  438. @Param("oldStatus") String oldStatus,
  439. @Param("newStatus") String newStatus,
  440. @Param("processStartTime") Date processStartTime);
  441. void updatePalletWcsLocation(@Param("site") String site, @Param("palletId") String palletId, @Param("location") String location);
  442. /**
  443. * 更新WCS回调任务重试次数 - AI制作
  444. */
  445. void updateWcsCallbackTaskRetryCount(@Param("id") Long id, @Param("retryCount") Integer retryCount);
  446. /**
  447. * 根据栈板ID和动作类型查找订单任务 - AI制作
  448. */
  449. List<WmsOrderTask> findOrderTasksByPalletAndActionType(@Param("site") String site,
  450. @Param("palletId") String palletId,
  451. @Param("sourceType") String sourceType,
  452. @Param("status") String status);
  453. List<WmsOrderTask> findOrderTasksByTaskNo(@Param("site") String site,
  454. @Param("taskNo") String taskNo);
  455. WmsOrderTask findOrderTasksByTaskNoItem(@Param("site") String site,
  456. @Param("taskNo") String taskNo,
  457. @Param("itemNo") Integer itemNo);
  458. /**
  459. * 更新订单任务状态和WMS状态 - AI制作
  460. */
  461. void updateOrderTaskStatusAndWmsStatus(@Param("id") Long id,
  462. @Param("status") String status,
  463. @Param("wmsStatus") String wmsStatus);
  464. /**
  465. * 根据任务号更新订单任务明细状态 - AI制作
  466. */
  467. void updateOrderTaskDetailStatusByTaskNo(@Param("taskNo") String taskNo, @Param("status") String status, @Param("wmsStatus") String wmsStatus);
  468. void updateOrderTaskDetailStatusByTaskNoPalletId(@Param("site") String site,@Param("taskNo") String taskNo, @Param("status") String status, @Param("wmsStatus") String wmsStatus, @Param("palletId") String palletId);
  469. /**
  470. * 查询立库调栈板出库的订单任务列表 - AI制作
  471. */
  472. List<WmsOrderTask> getWcsOrderTaskListForPalletOut(@Param("site") String site);
  473. /**
  474. * 更新订单任务错误信息 - AI制作
  475. */
  476. void updateOrderTaskErrorInfo(@Param("id") Long id, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg);
  477. /**
  478. * 更新AGV站点状态 - AI制作
  479. */
  480. void updateAgvStationStatus(@Param("stationCode") String stationCode, @Param("statusDb") Integer statusDb, @Param("status") String status);
  481. void updateAgvStationAutoFlag(@Param("stationCode") String stationCode, @Param("flag") String flag);
  482. void updateWTTToLocationForId(@Param("site") String site,@Param("taskNo") String taskNo, @Param("toLocation") String toLocation);
  483. /**
  484. * @Description 更新运输任务的目标区域 - rqrq
  485. * @param taskNo 任务编号
  486. * @param toArea 目标区域
  487. * @author rqrq
  488. * @date 2025/11/17
  489. */
  490. void updateTransportTaskToArea(@Param("site") String site,@Param("taskNo") String taskNo, @Param("toArea") String toArea);
  491. /**
  492. * 获取AGV站点状态 - AI制作
  493. */
  494. Integer getAgvStationStatus(@Param("stationCode") String stationCode);
  495. String getAgvStationType(@Param("stationCode") String stationCode);
  496. /**
  497. * 获取栈板详细信息包含palletType和autoSort以及托盘类型详情 - AI制作
  498. */
  499. /**
  500. * 获取栈板详细信息包含类型关联数据 - AI制作
  501. * @param site 工厂编码
  502. * @param palletId 栈板编码
  503. * @return 栈板详细信息实体类
  504. */
  505. com.gaotao.modules.warehouse.entity.PalletData getPalletInfoWithTypeDetails(@Param("site") String site, @Param("palletId") String palletId);
  506. /**
  507. * 更新栈板类型自动分拣标志和存储类型 - AI制作/rqrq
  508. */
  509. void updatePalletTypeAndAutoSort(@Param("site") String site, @Param("palletId") String palletId,
  510. @Param("palletType") String palletType, @Param("autoSort") String autoSort,
  511. @Param("soreType") Integer soreType);
  512. /**
  513. * 获取指定层已占用的位置列表 - rqrq
  514. */
  515. List<String> getOccupiedPositionsByLayer(@Param("site") String site, @Param("palletId") String palletId,
  516. @Param("layer") Integer layer);
  517. /**
  518. * @Description 插入WCS回调栈板扫描记录 - rqrq
  519. * @param callback 回调记录
  520. * @author rqrq
  521. * @date 2025/10/07
  522. */
  523. void insertCallbackPalletScan(@Param("callback") WcsCallbackPalletScan callback);
  524. PalletType getPalletType(@Param("site") String site, @Param("palletType") String palletType);
  525. AgvStation getAgvStation( @Param("stationCode") String stationCode);
  526. // ==================== 栈板换站相关方法 - rqrq ====================
  527. /**
  528. * @Description 检查栈板calling_flag并获取当前站点信息 - rqrq
  529. * @param site 工厂编码
  530. * @param palletId 栈板编码
  531. * @return 栈板信息(包含calling_flag和当前站点ID站点编码)
  532. * @author rqrq
  533. * @date 2025/10/16
  534. */
  535. CheckPalletResult checkPalletForChangeStation(@Param("site") String site, @Param("palletId") String palletId);
  536. /**
  537. * @Description 获取可选择的区域列表(choose_able为Y) - rqrq
  538. * @return 区域列表
  539. * @author rqrq
  540. * @date 2025/10/16
  541. */
  542. List<Area> getAreaOptionsForChange();
  543. /**
  544. * @Description 根据区域获取可用站点列表 - rqrq
  545. * @param areaId 区域ID
  546. * @return 站点列表(active=Y, station_type=正式站点, status_db=0)
  547. * @author rqrq
  548. * @date 2025/10/16
  549. */
  550. List<AgvStation> getStationsByArea(@Param("areaId") String areaId);
  551. /**
  552. * @Description 根据区域查找第一个空闲站点用于自动分配- rqrq
  553. * @param areaId 区域ID
  554. * @return 第一个空闲站点的station_code如果没有返回null
  555. * @author rqrq
  556. * @date 2025/10/16
  557. */
  558. String findFirstFreeStationByAreaId(@Param("areaId") String areaId);
  559. // ==================== 手工移动托盘相关方法 - rqrq ====================
  560. /**
  561. * @Description 检查托盘是否可以手工移动判断calling_flag当前站点和站点类型- rqrq
  562. * @param site 工厂编码
  563. * @param palletId 托盘编码
  564. * @return 托盘信息(包含calling_flag当前站点编码站点类型是否可操作)
  565. * @author rqrq
  566. * @date 2025/10/16
  567. */
  568. CheckPalletResult checkPalletForManualMove(@Param("site") String site, @Param("palletId") String palletId);
  569. /**
  570. * @Description 更新托盘location_code为null移出站点- rqrq
  571. * @param site 工厂编码
  572. * @param palletId 托盘编码
  573. * @author rqrq
  574. * @date 2025/10/16
  575. */
  576. void updatePalletRemoveStation(@Param("site") String site, @Param("palletId") String palletId);
  577. /**
  578. * @Description 更新站点状态为空闲 - rqrq
  579. * @param stationCode 站点编码
  580. * @author rqrq
  581. * @date 2025/10/16
  582. */
  583. void updateStationToFree(@Param("stationCode") String stationCode);
  584. /**
  585. * @Description 更新托盘location_code绑定站点- rqrq
  586. * @param site 工厂编码
  587. * @param palletId 托盘编码
  588. * @param stationCode 站点编码
  589. * @author rqrq
  590. * @date 2025/10/16
  591. */
  592. void updatePalletBindStation(@Param("site") String site, @Param("palletId") String palletId, @Param("stationCode") String stationCode);
  593. /**
  594. * @Description 更新站点状态为有货 - rqrq
  595. * @param stationCode 站点编码
  596. * @author rqrq
  597. * @date 2025/10/16
  598. */
  599. void updateStationToOccupied(@Param("stationCode") String stationCode);
  600. // ==================== 空托盘组盘相关方法 - rqrq ====================
  601. /**
  602. * @Description 检查托盘是否为空托盘pallet_detail表无数据- rqrq
  603. * @param site 工厂编码
  604. * @param palletId 托盘编码
  605. * @return 托盘信息(包含当前站点ID站点编码托盘类型)
  606. * @author rqrq
  607. * @date 2025/10/16
  608. */
  609. CheckPalletResult checkEmptyPallet(@Param("site") String site, @Param("palletId") String palletId);
  610. /**
  611. * @Description 获取托盘类型列表根据pallet_family过滤- rqrq
  612. * @param site 工厂编码
  613. * @param palletFamily 托盘族可为空
  614. * @return 托盘类型列表
  615. * @author rqrq
  616. * @date 2025/10/16
  617. */
  618. List<PalletType> getPalletTypes(@Param("site") String site, @Param("palletFamily") String palletFamily);
  619. /**
  620. * @Description 获取需要自动续盘的站点列表 - rqrq
  621. * @return 符合自动续盘条件的站点列表auto_call_blank_pallet='Y', auto_call_blank_pallet_type有值, station_type='正式站点', status_db=0
  622. * @author rqrq
  623. * @date 2025/10/19
  624. */
  625. List<AgvStation> getAutoCallBlankPalletStations();
  626. // ==================== 取消WCS组盘相关方法 - rqrq ====================
  627. /**
  628. * @Description 检查栈板WCS组盘状态是否被调用是否发送组盘任务是否有明细- rqrq
  629. * @param site 工厂编码
  630. * @param palletId 栈板编码
  631. * @return 栈板信息(包含callingFlaghasSentWcsTaskhasDetail)
  632. * @author rqrq
  633. * @date 2025/10/16
  634. */
  635. CheckPalletResult checkPalletWcsStatus(@Param("site") String site, @Param("palletId") String palletId);
  636. /**
  637. * @Description 检查栈板是否有wcs_flag=0的明细已发送组盘任务- rqrq
  638. * @param site 工厂编码
  639. * @param palletId 栈板编码
  640. * @return wcs_flag=0的明细数量
  641. * @author rqrq
  642. * @date 2025/10/16
  643. */
  644. int countPalletDetailWithWcsFlagZero(@Param("site") String site, @Param("palletId") String palletId);
  645. int countPalletDetailWithWcsFlagOne(@Param("site") String site, @Param("palletId") String palletId);
  646. /**
  647. * @Description 更新栈板所有明细的wcs_flag为1取消组盘- rqrq
  648. * @param site 工厂编码
  649. * @param palletId 栈板编码
  650. * @author rqrq
  651. * @date 2025/10/16
  652. */
  653. void updateAllPalletDetailWcsFlagToOne(@Param("site") String site, @Param("palletId") String palletId);
  654. /**
  655. * @Description 删除栈板所有明细移出全部物料- rqrq
  656. * @param site 工厂编码
  657. * @param palletId 栈板编码
  658. * @author rqrq
  659. * @date 2025/10/16
  660. */
  661. void deleteAllPalletDetail(@Param("site") String site, @Param("palletId") String palletId);
  662. // ==================== 预约取托盘相关方法 - rqrq ====================
  663. /**
  664. * @Description 查询空托盘区可用的空托盘area_type=Z101, calling_flag=N, 托盘类型匹配, 站点空闲- rqrq
  665. * @param site 工厂编码
  666. * @param palletType 托盘类型
  667. * @param stationCode 目标站点编码
  668. * @return 可用的空托盘信息
  669. * @author rqrq
  670. * @date 2025/10/17
  671. */
  672. Pallet findAvailableEmptyPallet(@Param("site") String site, @Param("palletType") String palletType, @Param("stationCode") String stationCode);
  673. AgvStation getStationByCode(@Param("stationCode") String stationCode);
  674. /**
  675. * @Description 检查指定托盘是否就绪area_type在Z101/Z103/Z104, calling_flag=N, 站点空闲- rqrq
  676. * @param site 工厂编码
  677. * @param palletId 托盘编码
  678. * @param stationCode 目标站点编码
  679. * @return 托盘信息如果就绪
  680. * @author rqrq
  681. * @date 2025/10/17
  682. */
  683. Pallet checkPalletReady(@Param("site") String site, @Param("palletId") String palletId, @Param("stationCode") String stationCode);
  684. /**
  685. * @Description 使用乐观锁更新运输任务状态基于wms_status字段防止重复处理- rqrq
  686. * @param taskNo 任务编号
  687. * @param newStatus 新状态
  688. * @param palletId 托盘编码
  689. * @param fromLocation 起始位置栈板所在位置
  690. * @param toLocation 目标位置
  691. * @param oldWmsStatus 旧的wms_status乐观锁
  692. * @param newWmsStatus 新的wms_status
  693. * @return 影响的行数0=更新失败1=更新成功
  694. * @author rqrq
  695. * @date 2025/10/17
  696. */
  697. int updateTransportTaskWithLock(@Param("taskNo") String taskNo, @Param("newStatus") String newStatus,
  698. @Param("palletId") String palletId, @Param("fromLocation") String fromLocation,
  699. @Param("toLocation") String toLocation,
  700. @Param("oldWmsStatus") String oldWmsStatus, @Param("newWmsStatus") String newWmsStatus);
  701. /**
  702. * @Description 使用乐观锁更新AGV站点状态检查期望状态防止并发覆盖- rqrq
  703. * @param stationCode 站点编码
  704. * @param expectedStatusDb 期望的当前状态乐观锁
  705. * @param newStatusDb 新状态代码
  706. * @param newStatus 新状态描述
  707. * @return 影响的行数0=更新失败1=更新成功
  708. * @author rqrq
  709. * @date 2025/11/04
  710. */
  711. int updateAgvStationStatusWithLock(@Param("stationCode") String stationCode,
  712. @Param("expectedStatusDb") Integer expectedStatusDb,
  713. @Param("newStatusDb") Integer newStatusDb,
  714. @Param("newStatus") String newStatus);
  715. /**
  716. * @Description 根据栈板ID和sourceType查询最新的OrderTask按创建时间倒序- rqrq
  717. * @param site 工厂编码
  718. * @param palletId 栈板编码
  719. * @param sourceType 来源类型手工Call料
  720. * @return 最新的OrderTask
  721. * @author rqrq
  722. * @date 2025/10/17
  723. */
  724. WmsOrderTask findLatestOrderTaskByPallet(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceType") String sourceType);
  725. /**
  726. * @Description 根据栈板ID更新最新的TransportTask的source_bill_no和source_line_id - rqrq
  727. * @param site 工厂编码
  728. * @param palletId 栈板编码
  729. * @param sourceBillNo 来源单据号
  730. * @param sourceLineId 来源单据行号
  731. * @author rqrq
  732. * @date 2025/10/17
  733. */
  734. void updateTransportTaskSourceInfo(@Param("site") String site, @Param("palletId") String palletId,
  735. @Param("sourceBillNo") String sourceBillNo, @Param("sourceLineId") Integer sourceLineId);
  736. /**
  737. * @Description 根据任务编号更新运输任务的来源单据信息优化版本- rqrq
  738. * @param taskNo 运输任务编号
  739. * @param sourceBillNo 来源单号
  740. * @param sourceLineId 来源行号
  741. * @author rqrq
  742. * @date 2025/11/22
  743. */
  744. void updateTransportTaskSourceInfoByTaskNo(@Param("taskNo") String taskNo,
  745. @Param("sourceBillNo") String sourceBillNo,
  746. @Param("sourceLineId") Integer sourceLineId);
  747. // ==================== 调度发货任务相关方法 - rqrq ====================
  748. /**
  749. * @Description 根据栈板编码获取栈板信息 - rqrq
  750. * @param site 工厂编码
  751. * @param palletId 栈板编码
  752. * @return 栈板信息
  753. * @author rqrq
  754. * @date 2025/10/18
  755. */
  756. Pallet getPalletByCode(@Param("site") String site, @Param("palletId") String palletId);
  757. // ==================== 人工分拣补盘相关方法 - rqrq ====================
  758. /**
  759. * @Description 根据任务号和行号成对匹配查询发料明细的序列号列表 - rqrq
  760. * @param site 工厂编码
  761. * @param taskNotes 任务明细列表taskNo和itemNo成对匹配
  762. * @return 序列号列表
  763. * @author rqrq
  764. * @date 2025/10/19
  765. */
  766. List<String> getSerialNosByTaskRefAndItem(@Param("site") String site, @Param("taskNotes") List<TaskNote> taskNotes);
  767. /**
  768. * @Description 根据序列号列表查询栈板ID列表去重 - rqrq
  769. * @param site 工厂编码
  770. * @param serialNoList 序列号列表
  771. * @return 栈板ID列表
  772. * @author rqrq
  773. * @date 2025/10/19
  774. */
  775. List<String> getPalletIdsBySerialNos(@Param("site") String site, @Param("serialNoList") List<String> serialNoList);
  776. /**
  777. * @Description 检查栈板是否在指定wcsTaskID和站点生成过运输任务 - rqrq
  778. * @param site 工厂编码
  779. * @param palletId 栈板编码
  780. * @param sourceBillNo 来源单号wcsTaskID
  781. * @param stationCode 站点编码
  782. * @return 任务数量>0表示已存在
  783. * @author rqrq
  784. * @date 2025/10/19
  785. */
  786. int checkPalletTaskExists(@Param("site") String site, @Param("palletId") String palletId, @Param("sourceBillNo") String sourceBillNo, @Param("stationCode") String stationCode);
  787. /**
  788. * @Description 查询栈板是否存在未完成的运输任务 - rqrq
  789. * @param site 工厂编码
  790. * @param palletId 栈板编码
  791. * @return 未完成任务的任务编号如果存在不存在则返回null
  792. * @author rqrq
  793. * @date 2025/10/31
  794. */
  795. String getUnfinishedTaskByPalletId(@Param("site") String site, @Param("palletId") String palletId);
  796. /**
  797. * @Description 检查栈板是否放满根据pallet_type_area的点位数和max_layer判断 - rqrq
  798. * @param site 工厂编码
  799. * @param palletId 栈板编码
  800. * @return 是否已满1=已满0=未满
  801. * @author rqrq
  802. * @date 2025/10/19
  803. */
  804. int checkPalletIsFull(@Param("site") String site, @Param("palletId") String palletId);
  805. WmsTransportTask checkIfHasNeedTask(@Param("site") String site, @Param("palletId") String palletId);
  806. /**
  807. * @Description 查询最新的一条等待通道机复核的任务明细 - rqrq
  808. * @return 任务明细action_type='等待通道机复核' status='等待中'
  809. * @author rqrq
  810. * @date 2025/11/11
  811. */
  812. WmsTransportTaskDetail getLatestWaitingRfidReviewTaskDetail();
  813. /**
  814. * @Description 更新任务明细的RFID复核结果 - rqrq
  815. * @param id 任务明细ID
  816. * @param agvCode AGV代码复核结果1=成功2=失败
  817. * @param comment 备注RFID列表JSON字符串
  818. * @param status 状态已录入
  819. * @author rqrq
  820. * @date 2025/11/11
  821. */
  822. void updateTaskDetailWithRfidReviewResult(@Param("id") Long id,
  823. @Param("agvCode") String agvCode,
  824. @Param("comment") String comment,
  825. @Param("status") String status);
  826. /**
  827. * @Description 批量更新任务明细状态为已取消 - rqrq
  828. * @param site 站点
  829. * @param taskNo 任务号
  830. * @param status 状态已取消
  831. * @author rqrq
  832. * @date 2025/11/11
  833. */
  834. void updateTaskDetailStatusByTaskNo(@Param("site") String site,
  835. @Param("taskNo") String taskNo,
  836. @Param("status") String status);
  837. // ==================== 配送任务创建相关方法 - rqrq ====================
  838. /**
  839. * @Description 查询栈板物料的预约信息关联pallet_detail和handling_unit- rqrq
  840. * @param site 工厂编码
  841. * @param palletId 栈板编码
  842. * @return 物料预约信息列表包含serialNoreserveFlagreserveOrderRef1/2/3
  843. * @author rqrq
  844. * @date 2025/11/14
  845. */
  846. List<Map<String, Object>> getPalletMaterialReserveInfo(@Param("site") String site, @Param("palletId") String palletId);
  847. /**
  848. * @Description 根据notify_no和item_no查询申请单信息 - rqrq
  849. * @param site 工厂编码
  850. * @param notifyNo 申请单号
  851. * @param itemNo 行号
  852. * @return 订单信息包含productionAreaorderType
  853. * @author rqrq
  854. * @date 2025/11/14
  855. */
  856. Map<String, Object> getOrderInfoByNotifyAndItem(@Param("site") String site,
  857. @Param("notifyNo") String notifyNo,
  858. @Param("itemNo") String itemNo);
  859. /**
  860. * @Description 根据sitetaskNoitemNo查询运输任务 - rqrq
  861. * @param site 工厂编码
  862. * @param taskNo 任务编号
  863. * @param itemNo 任务行号
  864. * @return 运输任务信息
  865. * @author rqrq
  866. * @date 2025/11/25
  867. */
  868. WmsTransportTask getTransportTaskByTaskNoAndItem(@Param("site") String site,
  869. @Param("taskNo") String taskNo,
  870. @Param("itemNo") Integer itemNo);
  871. /**
  872. * @Description 更新运输任务的托盘ID - rqrq
  873. * @param site 工厂编码
  874. * @param taskNo 任务编号
  875. * @param itemNo 任务行号
  876. * @param palletId 新的托盘ID
  877. * @author rqrq
  878. * @date 2025/11/25
  879. */
  880. void updateTransportTaskPalletId(@Param("site") String site,
  881. @Param("taskNo") String taskNo,
  882. @Param("itemNo") Integer itemNo,
  883. @Param("palletId") String palletId);
  884. }