From 0d92fcd3ce9561c070a81ac02b6b26aa30366be4 Mon Sep 17 00:00:00 2001 From: yuliang <398780299@qq.com> Date: Sun, 29 Jun 2025 20:24:38 +0800 Subject: [PATCH] =?UTF-8?q?cl2=20=E5=9F=BA=E4=BA=8E=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=92=8C=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=86=E6=AD=A5=E7=94=9F=E6=88=90=E8=AE=BE=E5=A4=87=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/galaxis/rcs/inv/InvManager.java | 150 +++++++++++++++++++++ .../main/java/com/galaxis/rcs/ptr/PtrAgvItem.java | 22 ++- 2 files changed, 170 insertions(+), 2 deletions(-) diff --git a/servo/src/main/java/com/galaxis/rcs/inv/InvManager.java b/servo/src/main/java/com/galaxis/rcs/inv/InvManager.java index 819f617..ff0d6e9 100644 --- a/servo/src/main/java/com/galaxis/rcs/inv/InvManager.java +++ b/servo/src/main/java/com/galaxis/rcs/inv/InvManager.java @@ -1,4 +1,154 @@ package com.galaxis.rcs.inv; +import com.galaxis.rcs.common.entity.LccInvLpn; +import com.querydsl.core.util.StringUtils; +import org.clever.data.jdbc.DaoFactory; +import org.clever.data.jdbc.QueryDSL; + +import java.sql.Date; + +import static com.galaxis.rcs.common.query.QLccInvLpn.lccInvLpn; +import static com.galaxis.rcs.common.query.QLccInvLedger.lccInvLedger; + public class InvManager { + private static final QueryDSL queryDSL = DaoFactory.getQueryDSL(); + + /** + * 记录库存 + * @param envId 环境ID + * @param lpn 容器号 + * @param locCode 库位号 + * @param layerIndex 堆叠层 + * @param qty 数量 >0 增加数量 <0 减数量 + * @param qtyIn 入库数量 >0 减数量 <0 减数量 + * @param qtyOut 出库数量 >0 减数量 <0 减数量 + */ + public static void invSave(Long envId, String lpn, String locCode, Integer layerIndex, int qty, int qtyIn, int qtyOut) { + if (envId == null || envId <= 0 + || lpn == null || StringUtils.isNullOrEmpty(lpn) || lpn.equals("N/A") + || locCode == null || StringUtils.isNullOrEmpty(locCode) || locCode.equals("N/A") + || layerIndex == null || layerIndex < 0) { + throw new RuntimeException("库存记录时,关键参数值不对"); + } + if (qty == 0 && qtyIn == 0 && qtyOut == 0) { + throw new RuntimeException("库存记录时,变化数量不能都为0"); + } + if (qtyIn != 0 && qtyOut != 0) { + throw new RuntimeException("库存记录时,不能同时为入库和出库"); + } + if (qty > 1 || qty < -1) { + throw new RuntimeException("库存记录时,数量变化值只能为0、1、-1"); + } + if (qtyIn > 1 || qtyIn < -1) { + throw new RuntimeException("库存记录时,预占数量变化值只能为0、1、-1"); + } + if (qtyOut > 1 || qtyOut < -1) { + throw new RuntimeException("库存记录时,预扣数量变化值只能为0、1、-1"); + } + if (qty == 1 && qtyIn == 1) { + throw new RuntimeException("库存记录时,数量增加时不能增加预占数量"); + } + if (qty == -1 && qtyOut == 1) { + throw new RuntimeException("库存记录时,数量扣减时不能对其增加预扣"); + } + + LccInvLpn lccInvLpnData = queryDSL.select(lccInvLpn) + .from(lccInvLpn) + .where(lccInvLpn.envId.eq(envId).and(lccInvLpn.locCode.eq(locCode)).and(lccInvLpn.lpn.eq(lpn))) + .fetchFirst(); + + if (lccInvLpnData != null) { + if ((lccInvLpnData.getQty() == 1 && qtyIn > 0) || (lccInvLpnData.getQty() == 1 && qty > 0)) { + throw new RuntimeException("库存记录时,当前货位有货, 不能放货或者准备放货"); + } else if ((lccInvLpnData.getQty() == 0 && qtyOut > 0) || (lccInvLpnData.getQty() == 0 && qty < 0)) { + throw new RuntimeException("库存记录时,当前货位无货, 不能取货或者准备取货"); + } else if (lccInvLpnData.getQtyIn() > 0 && qtyIn > 0) { + throw new RuntimeException("库存记录时,当前货位有预占, 不能准备放货"); + } else if (lccInvLpnData.getQtyOut() > 0 && qtyOut > 0) { + throw new RuntimeException("库存记录时,当前货位有预扣, 不能准备取货"); + } + } else { + if (qty < 0 || qtyIn < 0 || qtyOut < 0) { + throw new RuntimeException("没有找到原始库存,不能扣减数量"); + } + } + + queryDSL.beginTX(status -> { + if (lccInvLpnData != null) { + queryDSL.update(lccInvLpn) + .set(lccInvLpn.qty, lccInvLpn.qty.add(qty)) + .set(lccInvLpn.qtyIn, lccInvLpn.qtyIn.add(qtyIn)) + .set(lccInvLpn.qtyOut, lccInvLpn.qtyOut.add(qtyOut)) + .set(lccInvLpn.layerIndex, layerIndex) +// .set(lccInvLpn.updateAt, ) + .where(lccInvLpn.envId.eq(envId).and(lccInvLpn.locCode.eq(locCode)).and(lccInvLpn.lpn.eq(lpn))) + .execute(); + } else { + queryDSL.insert(lccInvLpn) + .set(lccInvLpn.envId, envId) + .set(lccInvLpn.lpn, lpn) + .set(lccInvLpn.locCode, locCode) + .set(lccInvLpn.layerIndex, layerIndex) + .set(lccInvLpn.qty, qty) + .set(lccInvLpn.qtyIn, qtyIn) + .set(lccInvLpn.qtyOut, qtyOut) + .execute(); + } + + // 记录账页 + queryDSL.insert(lccInvLedger) + .set(lccInvLedger.envId, envId) + .set(lccInvLedger.lpn, lpn) + .set(lccInvLedger.locCode, locCode) + .set(lccInvLedger.layerIndex, layerIndex) + .set(lccInvLedger.qtyChange, qty) + .set(lccInvLedger.qtyInChange, qtyIn) + .set(lccInvLedger.qtyOutChange, qtyOut) + .set(lccInvLedger.ledgerType, "记账") + .set(lccInvLedger.ledgerRemark, "N/A") + .execute(); + + // 删除所有数量预占预扣都为0的库存 + queryDSL.delete(lccInvLpn).where(lccInvLpn.qty.eq(0).and(lccInvLpn.qtyIn.eq(0)).and(lccInvLpn.qtyOut.eq(0))).execute(); + }); + + } + + + /** + * 记录库存 + * @param envId 环境ID + * @param lpn 容器号 + * @param locCode 库位号 + * @param qty 数量 >0 减数量 <0 减数量 + * @param qtyIn 入库数量 >0 减数量 <0 减数量 + * @param qtyOut 出库数量 >0 减数量 <0 减数量 + */ + public static void invSave(Long envId, String lpn, String locCode, int qty, int qtyIn, int qtyOut) { + invSave(envId, lpn, locCode, 0, qty, qtyIn, qtyOut); + } + + /** + * 保存库存 + * @param envId 环境ID + * @param lpn 容器号 + * @param locCode 库位号 + * @param layerIndex 堆叠层 + * @param qty 数量 >0 减数量 <0 减数量 + */ + public static void invSave(Long envId, String lpn, String locCode, int layerIndex, int qty) { + invSave(envId, lpn, locCode, layerIndex, qty, 0, 0); + } + + /** + * 保存库存 + * @param envId 环境ID + * @param lpn 容器号 + * @param locCode 库位号 + * @param qty 数量 >0 减数量 <0 减数量 + */ + public static void invSave(Long envId, String lpn, String locCode, int qty) { + invSave(envId, lpn, locCode, 0, qty, 0, 0); + } + } diff --git a/servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java b/servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java index aa1c4df..bd5d7e7 100644 --- a/servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java +++ b/servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java @@ -723,8 +723,21 @@ public abstract class PtrAgvItem extends ExecutorItem { } - if (deviceTaskList.size() <= 0) { - return; + if (deviceTaskList.isEmpty()) { + PtrAgvDeviceTask deviceTask = new PtrAgvDeviceTask(); + deviceTask.x = startPoint.logicX; + deviceTask.y = startPoint.logicY; + deviceTask.speed = speed; + deviceTask.direction = direction; + deviceTask.pickMode = 0; + deviceTask.startPoint = startPoint; + deviceTask.endPoint = startPoint; + deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet); + rotationPlanTaskIdSet.clear(); + // 行走任务完成后,检查用的字段 + deviceTask.checkLogicX = startPoint.logicX; + deviceTask.checkLogicY = startPoint.logicY; + deviceTaskList.add(deviceTask); } // 标记任务分组结束 @@ -734,8 +747,13 @@ public abstract class PtrAgvItem extends ExecutorItem { deviceTask.isGroupEnd = true; // 最后一个规划任务为旋转时需要添加一个endDirection if (rotationPlanTaskIdSet.size() > 0) { + deviceTask.operationType = COperationType.move; + deviceTask.pickMode = CPickMode.normal; deviceTask.endDirection = direction; deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet); + if (deviceTask.movePlanTaskId == null) { + deviceTask.movePlanTaskId = 0L; + } rotationPlanTaskIdSet.clear(); }