From 024504a3933e8f2f86e80383e61fa574524a0d28 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 三月 2026 16:39:52 +0800
Subject: [PATCH]  logo修改 +入库完成校验

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java |   87 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index 0b19e52..5088b9b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -26,11 +26,15 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
 @Service("locItemService")
 public class LocItemServiceImpl extends ServiceImpl<LocItemMapper, LocItem> implements LocItemService {
+
+    private static final BigDecimal FULL_OUT_QTY_TOLERANCE = new BigDecimal("0.000001");
 
     Logger logger = LoggerFactory.getLogger(LocItemServiceImpl.class);
 
@@ -52,7 +56,83 @@
     private WaveService waveService;
     @Autowired
     private BasStationService basStationService;
+    @Autowired
+    private MatnrService matnrService;
 
+    /** 鍏ュ簱/鍑哄簱淇濆瓨鍓嶏細鑻ヨ鏍兼垨鍨嬪彿涓虹┖鍒欎粠鐗╂枡甯﹀嚭 */
+    private void fillSpecModelFromMatnr(LocItem item) {
+        if (item == null || item.getMatnrId() == null) {
+            return;
+        }
+        if (StringUtils.isNotBlank(item.getSpec()) && StringUtils.isNotBlank(item.getModel())) {
+            return;
+        }
+        Matnr matnr = matnrService.getById(item.getMatnrId());
+        if (matnr == null) {
+            return;
+        }
+        if (StringUtils.isBlank(item.getSpec())) {
+            item.setSpec(matnr.getSpec());
+        }
+        if (StringUtils.isBlank(item.getModel())) {
+            item.setModel(matnr.getModel());
+        }
+    }
+
+    @Override
+    public boolean save(LocItem entity) {
+        fillSpecModelFromMatnr(entity);
+        return super.save(entity);
+    }
+
+    @Override
+    public boolean saveBatch(Collection<LocItem> entityList) {
+        if (entityList != null) {
+            entityList.forEach(this::fillSpecModelFromMatnr);
+        }
+        return super.saveBatch(entityList);
+    }
+
+    @Override
+    public boolean saveBatch(Collection<LocItem> entityList, int batchSize) {
+        if (entityList != null) {
+            entityList.forEach(this::fillSpecModelFromMatnr);
+        }
+        return super.saveBatch(entityList, batchSize);
+    }
+
+    @Override
+    public void fillSpecModelFromMatnrForRecords(List<LocItem> records) {
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+        Set<Long> matnrIds = new HashSet<>();
+        for (LocItem r : records) {
+            if (r.getMatnrId() != null && (StringUtils.isBlank(r.getSpec()) || StringUtils.isBlank(r.getModel()))) {
+                matnrIds.add(r.getMatnrId());
+            }
+        }
+        if (matnrIds.isEmpty()) {
+            return;
+        }
+        Map<Long, Matnr> matnrMap = matnrService.listByIds(matnrIds).stream()
+                .collect(Collectors.toMap(Matnr::getId, m -> m));
+        for (LocItem r : records) {
+            if (r.getMatnrId() == null) {
+                continue;
+            }
+            Matnr m = matnrMap.get(r.getMatnrId());
+            if (m == null) {
+                continue;
+            }
+            if (StringUtils.isBlank(r.getSpec())) {
+                r.setSpec(m.getSpec());
+            }
+            if (StringUtils.isBlank(r.getModel())) {
+                r.setModel(m.getModel());
+            }
+        }
+    }
 
     /**
      * 搴撳瓨鍑哄簱鐢熸垚鍑哄簱浠诲姟
@@ -167,12 +247,15 @@
             Double orgQty = locItems.stream().mapToDouble(LocItem::getAnfme).sum();
             List<LocItem> locItemList = listMap.get(key);
             Double outQty = locItemList.stream().mapToDouble(LocItem::getOutQty).sum();
+            BigDecimal orgQtyBd = BigDecimal.valueOf(orgQty).setScale(6, RoundingMode.HALF_UP);
+            BigDecimal outQtyBd = BigDecimal.valueOf(outQty).setScale(6, RoundingMode.HALF_UP);
 
             if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK)
                     || map.getType().equals(Constants.TASK_TYPE_ORDER_OUT_STOCK)
                     || map.getType().equals(Constants.TASK_TYPE_WAVE_OUT_STOCK)) {
-                if (orgQty.compareTo(outQty) > 0) {
-                    //鎷f枡鍑哄簱 -- 鐩樼偣鍑哄簱
+                // 鍑哄簱閲忚揪鍒板簱浣嶅簱瀛橈紙鍚宸級瑙嗕负鍏ㄧ増鍑哄簱锛岄伩鍏嶆诞鐐硅宸鑷磋鍒や负鎷f枡/閮ㄥ垎鍑哄簱
+                if (orgQtyBd.subtract(outQtyBd).compareTo(FULL_OUT_QTY_TOLERANCE) > 0) {
+                    // 鎷f枡鍑哄簱锛堥儴鍒嗗嚭搴擄級
                     DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                             .eq(DeviceSite::getSite, siteNo)
                             .eq(!Objects.isNull(loc.getChannel()),DeviceSite::getChannel, loc.getChannel())

--
Gitblit v1.9.1