From 0a78fd26303b1ce7ac82a6bb5a10f0ce96756e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Thu, 5 Mar 2026 14:38:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(automatedWarehouse):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=94=B3=E8=AF=B7=E5=8D=95=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在NotifyDetailQueryController中新增closeNotifyTask接口 - 在NotifyDetailQueryMapper中添加相关数据库查询和更新方法 - 在NotifyDetailQueryMapper.xml中实现SQL查询语句 - 在NotifyDetailQueryService中定义closeNotifyTask服务方法 - 在NotifyDetailQueryServiceImpl中实现完整的业务逻辑 - 添加参数校验、数据验证和事务处理机制 - 实现栈板调用状态解除和订单状态更新功能 --- .../NotifyDetailQueryController.java | 20 +++++ .../mapper/NotifyDetailQueryMapper.java | 38 ++++++++ .../service/NotifyDetailQueryService.java | 16 ++++ .../impl/NotifyDetailQueryServiceImpl.java | 88 +++++++++++++++++++ .../NotifyDetailQueryMapper.xml | 50 +++++++++++ 5 files changed, 212 insertions(+) diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/controller/NotifyDetailQueryController.java b/src/main/java/com/gaotao/modules/automatedWarehouse/controller/NotifyDetailQueryController.java index d5bea2e..7c35d86 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/controller/NotifyDetailQueryController.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/controller/NotifyDetailQueryController.java @@ -45,4 +45,24 @@ public class NotifyDetailQueryController { List rows = notifyDetailQueryService.searchMaterialListDetail(data); return R.ok().put("rows", rows); } + + /** + * @Description 关闭申请单任务 - rqrq + *

功能说明:

+ * + * @param data 查询条件(包含site、notifyNo、itemNo、soorderNo) + * @return R 成功消息(包含解除的栈板列表) + * @author rqrq + * @date 2026/03/05 + */ + @PostMapping("/closeNotifyTask") + public R closeNotifyTask(@RequestBody SOIssueNotifyOrderListData data) throws Exception { + String message = notifyDetailQueryService.closeNotifyTask(data); + return R.ok(message); + } } diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/NotifyDetailQueryMapper.java b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/NotifyDetailQueryMapper.java index e3233f1..8b21a32 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/NotifyDetailQueryMapper.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/NotifyDetailQueryMapper.java @@ -33,5 +33,43 @@ public interface NotifyDetailQueryMapper { * @author rqrq */ List searchMaterialListDetail(@Param("query") SOIssueNotifyOrderMaterialListDetail data); + + /** + * @Description 根据主键查询申请单订单记录 - rqrq + * @param site 工厂 + * @param notifyNo 领料单号 + * @param itemNo 行号 + * @return SOIssueNotifyOrderList + * @author rqrq + */ + com.gaotao.modules.notify.entity.SOIssueNotifyOrderList getOrderByPrimaryKey(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("itemNo") java.math.BigDecimal itemNo); + + /** + * @Description 查询要解除调用的栈板列表 - rqrq + * @param site 工厂 + * @param notifyNo 领料单号 + * @param soorderNo 订单号 + * @return List 栈板ID列表 + * @author rqrq + */ + java.util.List getPalletsToRelease(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("soorderNo") String soorderNo); + + /** + * @Description 更新申请单的transport_flag为'Y'(用主键定位)- rqrq + * @param site 工厂 + * @param notifyNo 领料单号 + * @param itemNo 行号 + * @author rqrq + */ + void updateTransportFlag(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("itemNo") java.math.BigDecimal itemNo); + + /** + * @Description 解除栈板调用状态(根据remark匹配)- rqrq + * @param site 工厂 + * @param notifyNo 领料单号 + * @param soorderNo 订单号 + * @author rqrq + */ + void releasePalletCallingFlag(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("soorderNo") String soorderNo); } diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/NotifyDetailQueryService.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/NotifyDetailQueryService.java index 6f6bdef..2ed2159 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/NotifyDetailQueryService.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/NotifyDetailQueryService.java @@ -28,5 +28,21 @@ public interface NotifyDetailQueryService { * @author rqrq */ List searchMaterialListDetail(SOIssueNotifyOrderMaterialListDetail data); + + /** + * @Description 关闭申请单任务 - rqrq + *

功能说明:

+ *
    + *
  • 校验:pushWmsFlag必须是'Y',transportFlag必须是'N'
  • + *
  • 校验:pushWcsTime到当前时间超过1天
  • + *
  • 更新SOIssueNotifyOrderList的transport_flag改为'Y'(用主键site+notify_no+item_no定位)
  • + *
  • 解除相关栈板调用状态(用soorder_no匹配remark,calling_flag改为'N',remark清空)
  • + *
+ * @param data 查询条件(包含site、notifyNo、itemNo、soorderNo) + * @return String 成功消息(包含解除的栈板列表) + * @author rqrq + * @date 2026/03/05 + */ + String closeNotifyTask(SOIssueNotifyOrderListData data); } diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/NotifyDetailQueryServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/NotifyDetailQueryServiceImpl.java index 7fb0187..e32bbc1 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/NotifyDetailQueryServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/NotifyDetailQueryServiceImpl.java @@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gaotao.common.utils.PageUtils; import com.gaotao.modules.automatedWarehouse.mapper.NotifyDetailQueryMapper; import com.gaotao.modules.automatedWarehouse.service.NotifyDetailQueryService; +import com.gaotao.modules.notify.entity.SOIssueNotifyOrderList; import com.gaotao.modules.notify.entity.SOIssueNotifyOrderListData; import com.gaotao.modules.notify.entity.SOIssueNotifyOrderMaterialListDetail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; /** * @Description 申请单明细通用查询Service实现类 - rqrq @@ -56,5 +61,88 @@ public class NotifyDetailQueryServiceImpl implements NotifyDetailQueryService { System.out.println("查询申请单物料明细完成,共" + (rows != null ? rows.size() : 0) + "条记录 - rqrq"); return rows; } + + /** + * @Description 关闭申请单任务 - rqrq + * @param data 查询条件(包含site、notifyNo、itemNo、soorderNo) + * @return String 成功消息(包含解除的栈板列表) + * @author rqrq + * @date 2026/03/05 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String closeNotifyTask(SOIssueNotifyOrderListData data) { + System.out.println("开始关闭申请单任务 - rqrq,site=" + data.getSite() + ", notifyNo=" + data.getNotifyNo() + ", itemNo=" + data.getItemNo() + ", soorderNo=" + data.getSoorderNo()); + + // 1. 参数校验 - rqrq + if (!StringUtils.hasText(data.getSite())) { + throw new RuntimeException("工厂不能为空"); + } + if (!StringUtils.hasText(data.getNotifyNo())) { + throw new RuntimeException("领料单号不能为空"); + } + if (data.getItemNo() == null) { + throw new RuntimeException("行号不能为空"); + } + if (!StringUtils.hasText(data.getSoorderNo())) { + throw new RuntimeException("订单号不能为空"); + } + + // 2. 查询该订单记录,校验条件(用主键查询)- rqrq + SOIssueNotifyOrderList existOrder = notifyDetailQueryMapper.getOrderByPrimaryKey(data.getSite(), data.getNotifyNo(), data.getItemNo()); + + if (existOrder == null) { + throw new RuntimeException("订单不存在"); + } + + // 2.1 校验pushWmsFlag必须是'Y' - rqrq + if (!"Y".equals(existOrder.getPushWmsFlag())) { + throw new RuntimeException("只能关闭已推送WCS的任务(推送WCS=是)"); + } + + // 2.2 校验transportFlag必须是'N' - rqrq + if (!"N".equals(existOrder.getTransportFlag())) { + throw new RuntimeException("该任务已经是立库取出状态,无法关闭"); + } + + // 2.3 校验pushWcsTime到当前时间超过1天 - rqrq + Date pushWcsTime = existOrder.getPushWcsTime(); + if (pushWcsTime == null) { + throw new RuntimeException("该订单未记录推送WCS时间,无法关闭"); + } + + long diffMillis = new Date().getTime() - pushWcsTime.getTime(); + long diffDays = TimeUnit.MILLISECONDS.toDays(diffMillis); + + if (diffDays < 1) { + throw new RuntimeException("推送WCS时间未超过1天,无法关闭任务(已推送" + diffDays + "天)"); + } + + System.out.println("校验通过,推送WCS时间=" + pushWcsTime + ",已超过1天 - rqrq"); + + // 3. 先查询要解除调用的栈板列表 - rqrq + List palletIds = notifyDetailQueryMapper.getPalletsToRelease(data.getSite(), data.getNotifyNo(), data.getSoorderNo()); + System.out.println("查询到" + (palletIds != null ? palletIds.size() : 0) + "个栈板需要解除调用 - rqrq"); + + // 4. 更新SOIssueNotifyOrderList的transport_flag为'Y'(用主键site+notify_no+item_no)- rqrq + notifyDetailQueryMapper.updateTransportFlag(data.getSite(), data.getNotifyNo(), data.getItemNo()); + System.out.println("已更新transport_flag为Y - rqrq"); + + // 5. 解除相关栈板调用状态(用soorder_no匹配remark)- rqrq + String resultMessage; + if (palletIds != null && !palletIds.isEmpty()) { + notifyDetailQueryMapper.releasePalletCallingFlag(data.getSite(), data.getNotifyNo(), data.getSoorderNo()); + System.out.println("已解除栈板调用状态,栈板列表:" + String.join(", ", palletIds) + " - rqrq"); + + // 返回成功信息,包含解除的栈板列表 - rqrq + resultMessage = "强制完成成功!已解除以下栈板的调用状态:" + String.join("、", palletIds); + } else { + System.out.println("未找到需要解除调用的栈板 - rqrq"); + resultMessage = "强制完成成功!未找到需要解除调用的栈板"; + } + + System.out.println("关闭申请单任务完成 - rqrq"); + return resultMessage; + } } diff --git a/src/main/resources/mapper/automatedWarehouse/NotifyDetailQueryMapper.xml b/src/main/resources/mapper/automatedWarehouse/NotifyDetailQueryMapper.xml index f681e93..b6c6a0a 100644 --- a/src/main/resources/mapper/automatedWarehouse/NotifyDetailQueryMapper.xml +++ b/src/main/resources/mapper/automatedWarehouse/NotifyDetailQueryMapper.xml @@ -69,6 +69,56 @@ AND d.item_no = #{query.itemNo} ORDER BY d.bom_item_no, d.serialNo + + + + + + + + + + UPDATE SOIssueNotifyOrderList + SET transport_flag = 'Y' + WHERE site = #{site} + AND notify_no = #{notifyNo} + AND item_no = #{itemNo} + + + + + UPDATE pallet + SET calling_flag = 'N' + WHERE site = #{site} + AND calling_flag = 'Y' + AND remark LIKE '%' + #{site} + '%' + + AND remark LIKE '%' + #{notifyNo} + '%' + + AND remark LIKE '%' + #{soorderNo} + '%' +