From 64157cb1816cc1b48e4a58cb4e46aadc2a74b9bb 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: Tue, 23 Dec 2025 10:30:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(physical-inventory):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=9B=98=E7=82=B9=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增查询未处理异常盘点结果的接口和实现 - 新增保存异常处理结果的接口和事务处理逻辑 - 在盘点提交前添加单据状态检查防止非法操作 - 更新数据库映射文件添加异常查询和处理的SQL语句 - 修改处理方式显示为人工处理和系统处理两种类型 - 优化盘点回调和提交接口的状态验证机制 --- .../PhysicalInventoryController.java | 33 +++++++++ .../check/mapper/PhysicalInventoryMapper.java | 29 ++++++++ .../service/PhysicalInventoryService.java | 24 +++++++ .../impl/PhysicalInventoryServiceImpl.java | 72 +++++++++++++++++++ .../mapper/check/PhysicalInventoryMapper.xml | 63 +++++++++++++++- 5 files changed, 218 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gaotao/modules/check/controller/PhysicalInventoryController.java b/src/main/java/com/gaotao/modules/check/controller/PhysicalInventoryController.java index dff3708..2d0d12f 100644 --- a/src/main/java/com/gaotao/modules/check/controller/PhysicalInventoryController.java +++ b/src/main/java/com/gaotao/modules/check/controller/PhysicalInventoryController.java @@ -388,4 +388,37 @@ public class PhysicalInventoryController { int result = physicalInventoryService.pdaSubmitCount(site, countNo, palletId, scannedLabels, username); return R.ok().put("result", result); } + + // ==================== 异常处理 ==================== - rqrq + + /** + * @Description 查询未处理的异常盘点结果 - rqrq + * @param query 查询条件(包含site、countNo) + * @return R + * @author rqrq + */ + @PostMapping("/searchUnhandledExceptionList") + public R searchUnhandledExceptionList(@RequestBody CountResultData query) { + List result = physicalInventoryService.searchUnhandledExceptionList(query); + return R.ok().put("rows", result); + } + + /** + * @Description 保存异常处理结果 - rqrq + * @param query 包含site、countNo、username、exceptionList + * @return R + * @author rqrq + */ + @PostMapping("/saveExceptionHandle") + @SuppressWarnings("unchecked") + public R saveExceptionHandle(@RequestBody java.util.Map query) { + String site = (String) query.get("site"); + String countNo = (String) query.get("countNo"); + String username = (String) query.get("username"); + java.util.List> exceptionList = + (java.util.List>) query.get("exceptionList"); + + int result = physicalInventoryService.saveExceptionHandle(site, countNo, username, exceptionList); + return R.ok().put("result", result); + } } diff --git a/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java b/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java index c2e421a..e54b0b2 100644 --- a/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java +++ b/src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java @@ -546,4 +546,33 @@ public interface PhysicalInventoryMapper extends BaseMapper { * @author rqrq */ String getTaskNoByPallet(@Param("site") String site, @Param("countNo") String countNo, @Param("palletId") String palletId); + + // ==================== 异常处理 ==================== - rqrq + + /** + * @Description 查询未处理的异常盘点结果 - rqrq + *

查询条件:count_result != 'OK' AND handle_flag = 'N'

+ * @param query 查询条件(包含site、countNo) + * @return List + * @author rqrq + */ + List searchUnhandledExceptionList(@Param("query") CountResultData query); + + /** + * @Description 更新盘点结果的处理标记和处理方式 - rqrq + * @param id 盘点结果ID + * @param site 工厂编码 + * @param countNo 盘点单号 + * @param unitId 标签号 + * @param palletId 栈板号 + * @param handleFlag 处理标记(Y/N) + * @param handleType 处理方式(SYSTEM/MANUAL) + * @param username 操作人 + * @return int + * @author rqrq + */ + int updateCountResultHandleFlag(@Param("id") Long id, @Param("site") String site, + @Param("countNo") String countNo, @Param("unitId") String unitId, + @Param("palletId") String palletId, @Param("handleFlag") String handleFlag, + @Param("handleType") String handleType, @Param("username") String username); } diff --git a/src/main/java/com/gaotao/modules/check/service/PhysicalInventoryService.java b/src/main/java/com/gaotao/modules/check/service/PhysicalInventoryService.java index 58041b8..ab2072e 100644 --- a/src/main/java/com/gaotao/modules/check/service/PhysicalInventoryService.java +++ b/src/main/java/com/gaotao/modules/check/service/PhysicalInventoryService.java @@ -346,4 +346,28 @@ public interface PhysicalInventoryService { */ int pdaSubmitCount(String site, String countNo, String palletId, java.util.List> scannedLabels, String username); + + // ==================== 异常处理 ==================== - rqrq + + /** + * @Description 查询未处理的异常盘点结果 - rqrq + *

查询条件:count_result != 'OK' AND handle_flag = 'N'

+ * @param query 查询条件(包含site、countNo) + * @return List + * @author rqrq + */ + java.util.List searchUnhandledExceptionList(CountResultData query); + + /** + * @Description 保存异常处理结果 - rqrq + *

更新count_result表的handle_flag和handle_type字段

+ * @param site 工厂编码 + * @param countNo 盘点单号 + * @param username 操作人 + * @param exceptionList 异常处理列表(包含id、unitId、palletId、handleType) + * @return int 处理的记录数 + * @author rqrq + */ + int saveExceptionHandle(String site, String countNo, String username, + java.util.List> exceptionList); } diff --git a/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java b/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java index f253a4d..7f7b401 100644 --- a/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java +++ b/src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java @@ -1205,6 +1205,14 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl palletLabels = baseMapper.getPalletDetailByPalletId(site, palletId); log.info("栈板标签数量: {}", palletLabels.size()); @@ -1624,6 +1632,14 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl labelList = baseMapper.getCountLabelsByPalletId(site, countNo, palletId); if (labelList.isEmpty()) { @@ -1686,6 +1702,14 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl labelList = baseMapper.getCountLabelsByPalletId(site, countNo, palletId); if (labelList.isEmpty()) { @@ -1796,6 +1820,54 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl searchUnhandledExceptionList(CountResultData query) { + System.out.println("searchUnhandledExceptionList 开始"); + System.out.println("参数:site=" + query.getSite() + ", countNo=" + query.getCountNo()); + + java.util.List result = baseMapper.searchUnhandledExceptionList(query); + + System.out.println("searchUnhandledExceptionList 结束,结果数量: " + (result != null ? result.size() : 0)); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int saveExceptionHandle(String site, String countNo, String username, + java.util.List> exceptionList) { + System.out.println("saveExceptionHandle 开始"); + System.out.println("参数:site=" + site + ", countNo=" + countNo + ", username=" + username); + + if (exceptionList == null || exceptionList.isEmpty()) { + return 0; + } + + int updateCount = 0; + for (java.util.Map item : exceptionList) { + Long id = null; + Object idObj = item.get("id"); + if (idObj instanceof Number) { + id = ((Number) idObj).longValue(); + } else if (idObj instanceof String) { + id = Long.parseLong((String) idObj); + } + + String unitId = (String) item.get("unitId"); + String palletId = (String) item.get("palletId"); + String handleType = (String) item.get("handleType"); + + // 更新处理标记和处理方式 - rqrq + int updated = baseMapper.updateCountResultHandleFlag(id, site, countNo, unitId, palletId, + CountResult.HANDLE_FLAG_YES, handleType, username); + updateCount += updated; + } + + System.out.println("saveExceptionHandle 结束,更新数量: " + updateCount); + return updateCount; + } + /** * @Description 盘点完成后处理任务单(与RFID接口逻辑一致)- rqrq * diff --git a/src/main/resources/mapper/check/PhysicalInventoryMapper.xml b/src/main/resources/mapper/check/PhysicalInventoryMapper.xml index 7dd538f..814faff 100644 --- a/src/main/resources/mapper/check/PhysicalInventoryMapper.xml +++ b/src/main/resources/mapper/check/PhysicalInventoryMapper.xml @@ -333,9 +333,8 @@ ELSE '未处理' END AS handleFlagDesc, CASE r.handle_type - WHEN 'ADJUST' THEN '调整库存' - WHEN 'IGNORE' THEN '忽略差异' - WHEN 'RECOUNT' THEN '重新盘点' + WHEN 'MANUAL' THEN '人工处理' + WHEN 'SYSTEM' THEN '系统处理' ELSE '' END AS handleTypeDesc FROM count_result r @@ -946,5 +945,63 @@ AND cr.count_result != 'OK' AND (cr.handle_flag IS NULL OR cr.handle_flag = 'N') + + + + + + + UPDATE count_result + SET handle_type = #{handleType} + WHERE id = #{id} + + +