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