From 67647a9bdb5ca2c0acf5c5f635ec28d2e4d6c9db Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 08 十月 2026 13:58:51 +0800
Subject: [PATCH] fix:countTodayByCreateTime方法加上null值判断

---
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java |  171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 170 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
index 598ae6b..51d3aad 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.production.bean.dto.ProductionOrderPickDto;
+import com.ruoyi.production.bean.vo.AutoPickResultVo;
 import com.ruoyi.production.bean.vo.ProductionOrderPickVo;
 import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
 import com.ruoyi.production.mapper.ProductionOrderMapper;
@@ -16,6 +17,7 @@
 import com.ruoyi.production.mapper.ProductionOrderPickRecordMapper;
 import com.ruoyi.production.pojo.ProductionOrder;
 import com.ruoyi.production.pojo.ProductionOrderPick;
+import com.ruoyi.production.service.ProductionOrderService;
 import com.ruoyi.production.pojo.ProductionOrderPickRecord;
 import com.ruoyi.production.service.ProductionOrderPickService;
 import com.ruoyi.stock.dto.StockInventoryDto;
@@ -51,6 +53,7 @@
     private static final String FEED_RETURN_IN_RECORD_TYPE = StockInQualifiedRecordTypeEnum.FEED_RETURN_IN.getCode();
 
     private final ProductionOrderMapper productionOrderMapper;
+    private final ProductionOrderService productionOrderService;
     private final ProductionOperationTaskMapper productionOperationTaskMapper;
     private final ProductionOrderPickRecordMapper productionOrderPickRecordMapper;
     private final StockInventoryMapper stockInventoryMapper;
@@ -192,6 +195,147 @@
         fillBatchNoList(detailList);
         fillSelectableBatchNoList(detailList);
         return detailList;
+    }
+
+    @Override
+    public AutoPickResultVo autoPick(List<Long> orderIds) {
+        // 鑷姩棰嗘枡鎬绘祦绋嬶細
+        // 1) 閬嶅巻鐩爣璁㈠崟锛岃鍙朆OM闇�姹傛竻鍗曪紱
+        // 2) 鎸� 璁㈠崟ID+瑙勬牸ID+宸ュ簭ID 鍘婚噸鍒ゆ柇鏄惁宸查鏂欙紱
+        // 3) 瀵规湭棰嗘枡涓旀湁闇�姹傜殑鐗╂枡锛岄�愮瑪鎵ц savePick 棰嗘枡锛�
+        // 4) 姹囨�绘垚鍔�/璺宠繃/澶辫触鏄庣粏骞惰繑鍥炪��
+        AutoPickResultVo result = new AutoPickResultVo();
+        if (orderIds == null || orderIds.isEmpty()) {
+            return result;
+        }
+
+        result.setOrderTotal(orderIds.size());
+
+        for (Long orderId : orderIds) {
+            ProductionOrder order = productionOrderMapper.selectById(orderId);
+            if (order == null) {
+                result.setOrderFail(result.getOrderFail() + 1);
+                AutoPickResultVo.ItemDetail failItem = new AutoPickResultVo.ItemDetail();
+                failItem.setProductionOrderId(orderId);
+                failItem.setReason("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+                result.getFailList().add(failItem);
+                continue;
+            }
+
+            // 鑾峰彇BOM闇�姹傛竻鍗�
+            List<ProductionOrderPickVo> demandList = productionOrderService.pick(orderId);
+            if (demandList == null || demandList.isEmpty()) {
+                result.setOrderFail(result.getOrderFail() + 1);
+                AutoPickResultVo.ItemDetail failItem = new AutoPickResultVo.ItemDetail();
+                failItem.setProductionOrderId(orderId);
+                failItem.setProductionOrderNo(order.getNpsNo());
+                failItem.setReason("鏃燘OM鐗╂枡闇�姹�");
+                result.getFailList().add(failItem);
+                continue;
+            }
+
+            // 鏌ヨ宸查鏂欒褰曪紙鎸� 宸ュ簭ID#瑙勬牸ID 鍘婚噸锛�
+            Set<String> pickedKeys = list(Wrappers.<ProductionOrderPick>lambdaQuery()
+                    .eq(ProductionOrderPick::getProductionOrderId, orderId)
+                    .eq(ProductionOrderPick::getReturned, false)).stream()
+                    .map(p -> (p.getTechnologyOperationId() == null ? "null" : p.getTechnologyOperationId())
+                            + "#" + p.getProductModelId())
+                    .collect(Collectors.toSet());
+
+            boolean orderHasSuccess = false;
+            boolean orderHasFail = false;
+
+            for (ProductionOrderPickVo demand : demandList) {
+                result.setMaterialTotal(result.getMaterialTotal() + 1);
+
+                String key = (demand.getTechnologyOperationId() == null ? "null" : demand.getTechnologyOperationId())
+                        + "#" + demand.getProductModelId();
+
+                // 宸查鏂欑殑璺宠繃
+                if (pickedKeys.contains(key)) {
+                    result.setMaterialSkip(result.getMaterialSkip() + 1);
+                    AutoPickResultVo.ItemDetail skipItem = new AutoPickResultVo.ItemDetail();
+                    skipItem.setProductionOrderId(orderId);
+                    skipItem.setProductionOrderNo(order.getNpsNo());
+                    skipItem.setProductModelId(demand.getProductModelId());
+                    skipItem.setTechnologyOperationId(demand.getTechnologyOperationId());
+                    skipItem.setOperationName(demand.getOperationName());
+                    skipItem.setDemandedQuantity(demand.getDemandedQuantity());
+                    skipItem.setReason("宸查鏂�");
+                    result.getSkipList().add(skipItem);
+                    continue;
+                }
+
+                BigDecimal demandQty = demand.getDemandedQuantity();
+                if (demandQty == null || demandQty.compareTo(BigDecimal.ZERO) <= 0) {
+                    result.setMaterialSkip(result.getMaterialSkip() + 1);
+                    AutoPickResultVo.ItemDetail skipItem = new AutoPickResultVo.ItemDetail();
+                    skipItem.setProductionOrderId(orderId);
+                    skipItem.setProductionOrderNo(order.getNpsNo());
+                    skipItem.setProductModelId(demand.getProductModelId());
+                    skipItem.setTechnologyOperationId(demand.getTechnologyOperationId());
+                    skipItem.setOperationName(demand.getOperationName());
+                    skipItem.setDemandedQuantity(demandQty);
+                    skipItem.setReason("闇�姹傛暟閲忎负0鎴栫┖");
+                    result.getSkipList().add(skipItem);
+                    continue;
+                }
+
+                // 鎵ц棰嗘枡
+                try {
+                    ProductionOrderPickDto dto = new ProductionOrderPickDto();
+                    dto.setProductionOrderId(orderId);
+                    dto.setProductModelId(demand.getProductModelId());
+                    dto.setPickQuantity(demandQty);
+                    dto.setPickType((byte) 1); // 1=姝e父棰嗘枡
+                    dto.setBatchNoList(demand.getBatchNoList());
+                    dto.setTechnologyOperationId(demand.getTechnologyOperationId());
+                    dto.setOperationName(demand.getOperationName());
+                    dto.setDemandedQuantity(demand.getDemandedQuantity());
+                    dto.setBom(demand.getBom());
+                    dto.setRemark("鑷姩棰嗘枡");
+
+                    savePick(dto);
+
+                    result.setMaterialSuccess(result.getMaterialSuccess() + 1);
+                    orderHasSuccess = true;
+                    AutoPickResultVo.ItemDetail successItem = new AutoPickResultVo.ItemDetail();
+                    successItem.setProductionOrderId(orderId);
+                    successItem.setProductionOrderNo(order.getNpsNo());
+                    successItem.setProductModelId(demand.getProductModelId());
+                    successItem.setTechnologyOperationId(demand.getTechnologyOperationId());
+                    successItem.setOperationName(demand.getOperationName());
+                    successItem.setDemandedQuantity(demandQty);
+                    successItem.setPickQuantity(demandQty);
+                    result.getSuccessList().add(successItem);
+                } catch (Exception e) {
+                    result.setMaterialFail(result.getMaterialFail() + 1);
+                    orderHasFail = true;
+                    AutoPickResultVo.ItemDetail failItem = new AutoPickResultVo.ItemDetail();
+                    failItem.setProductionOrderId(orderId);
+                    failItem.setProductionOrderNo(order.getNpsNo());
+                    failItem.setProductModelId(demand.getProductModelId());
+                    failItem.setTechnologyOperationId(demand.getTechnologyOperationId());
+                    failItem.setOperationName(demand.getOperationName());
+                    failItem.setDemandedQuantity(demandQty);
+                    failItem.setReason(e.getMessage());
+                    result.getFailList().add(failItem);
+                }
+            }
+
+            if (orderHasSuccess) {
+                result.setOrderSuccess(result.getOrderSuccess() + 1);
+            }
+            if (orderHasFail) {
+                result.setOrderFail(result.getOrderFail() + 1);
+            }
+            // 濡傛灉鏃㈡病鏈夋垚鍔熶篃娌℃湁澶辫触锛堝叏璺宠繃锛夛紝璁㈠崟涓嶇畻澶辫触涔熶笉绠楁垚鍔�
+            if (!orderHasSuccess && !orderHasFail) {
+                result.setOrderSuccess(result.getOrderSuccess() + 1);
+            }
+        }
+
+        return result;
     }
 
     private void processDeletePickIds(ProductionOrderPickDto rootDto,
@@ -430,7 +574,7 @@
         BigDecimal totalReturnQty = oldReturnQty.add(currentReturnQty);
         if (currentReturnQty.compareTo(BigDecimal.ZERO) > 0) {
             String returnBatchNo = resolveInventoryBatchNoFromStored(oldPick.getBatchNo());
-            addInventory(oldPick.getId(), oldPick.getProductModelId(), returnBatchNo, currentReturnQty, FEED_RETURN_IN_RECORD_TYPE);
+            addInventoryRecordOnly(oldPick.getId(), oldPick.getProductModelId(), returnBatchNo, currentReturnQty, FEED_RETURN_IN_RECORD_TYPE);
         }
 
         BigDecimal actualQty = defaultDecimal(oldPick.getQuantity())
@@ -737,6 +881,31 @@
         }
     }
 
+    private void addInventoryRecordOnly(Long recordId,
+                                        Long productModelId,
+                                        String batchNo,
+                                        BigDecimal quantity,
+                                        String stockInRecordType) {
+        // 浠呰褰曞叆搴撶敵璇凤紝涓嶅仛瀹℃牳閫氳繃銆�
+        BigDecimal addQuantity = defaultDecimal(quantity);
+        if (addQuantity.compareTo(BigDecimal.ZERO) <= 0) {
+            return;
+        }
+        try {
+            StockInventoryDto stockInventoryDto = new StockInventoryDto();
+            stockInventoryDto.setProductModelId(productModelId);
+            stockInventoryDto.setBatchNo(batchNo);
+            stockInventoryDto.setQualitity(addQuantity);
+            stockInventoryDto.setRecordType(stockInRecordType);
+            stockInventoryDto.setRecordId(recordId == null ? 0L : recordId);
+            stockInventoryService.addStockInRecordOnly(stockInventoryDto);
+        } catch (ServiceException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new ServiceException("閫�鏂欏叆搴撹褰曚繚瀛樺け璐ワ細" + ex.getMessage());
+        }
+    }
+
     private List<ProductionOrderPickDto> resolvePickItems(ProductionOrderPickDto dto) {
         // 瑙f瀽鏂板鍦烘櫙鐨勯鏂欐槑缁嗛泦鍚堛��
         if (dto == null) {

--
Gitblit v1.9.3