From 181252cf8ba494441b1fdb3873da7afa90ff0813 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期四, 26 二月 2026 10:51:49 +0800
Subject: [PATCH] 库存统计优化,增加手动统计

---
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java |  137 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 1 deletions(-)

diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
index 24520e5..9ff3f5c 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/GrainService.java
@@ -1,16 +1,26 @@
 package com.fzzy.igds.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fzzy.igds.constant.OrderRespEnum;
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.data.GrainData;
 import com.fzzy.igds.data.GrainParam;
+import com.fzzy.igds.domain.Depot;
 import com.fzzy.igds.domain.Grain;
 import com.fzzy.igds.mapper.GrainMapper;
 import com.fzzy.igds.utils.ContextUtil;
 import com.fzzy.igds.utils.DateUtil;
+import com.fzzy.igds.websocket.WebSocketPacket;
+import com.fzzy.igds.websocket.WebSocketServer;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
-import java.util.List;
+import java.util.*;
 
 /**
  * @Description
@@ -23,6 +33,10 @@
 
     @Resource
     private GrainMapper grainMapper;
+    @Resource
+    private RedisCache redisCache;
+    @Resource
+    private DepotService depotService;
 
     /**
      * 鏌ヨ鏁版嵁
@@ -59,7 +73,128 @@
         return grainMapper.selectList(queryWrapper);
     }
 
+    /**
+     * 鍒嗛〉鏌ヨ鏁版嵁
+     * @param page
+     * @param param
+     */
+    public void pageData(Page<Grain> page, Map<String, Object> param) {
+
+        QueryWrapper<Grain> queryWrapper = new QueryWrapper<>();
+
+        queryWrapper.eq("company_id", ContextUtil.getCompanyId());
+        queryWrapper.eq("dept_id", ContextUtil.subDeptId(null));
+
+        String ids = (String) param.get("ids");
+        if (StringUtils.isNotBlank(ids)) {
+            queryWrapper.in("depot_id", ids);
+        }
+        Date date = (Date) param.get(("start"));
+        if (null != date) {
+            queryWrapper.ge("receive_date", DateUtil.getCurZero(date));
+        }
+        date = (Date) param.get(("end"));
+        if (null != date) {
+            queryWrapper.le("receive_date", DateUtil.getNextZero(date));
+        }
+        queryWrapper.orderByDesc("batch_id");
+        grainMapper.selectPage(page, queryWrapper);
+    }
+
+    /**
+     * JPA - 鏇存柊鏁版嵁
+     * @param data
+     */
+    public void saveOrUpdateGrain(Grain data, String batchTag) {
+        if (StringUtils.isEmpty(data.getCompanyId())) {
+            data.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(data.getBatchId())) {
+            data.setBatchId(DateFormatUtils.format(data.getReceiveDate(), "yyyyMMddHHmm"));
+        }
+        if(StringUtils.isEmpty(batchTag)){
+            //鑷姩鐢熸垚
+            batchTag = "01";
+        }
+
+        if(StringUtils.isBlank(data.getCreateBy())){
+            data.setCreateBy(ContextUtil.getLoginUserName());
+            data.setCreateTime(new Date());
+        }
+
+        data.setUpdateBy(ContextUtil.getLoginUserName());
+        data.setUpdateTime(new Date());
+
+        data.setBatchTag(batchTag);
+        int insert = grainMapper.updateById(data);
+        if(insert == 0){
+            grainMapper.insert(data);
+        }
+
+        updateCacheGrainData(data);
+    }
 
 
+    /**
+     * 鏇存柊缂撳瓨涓渶鏂扮殑绮儏妫�娴嬫暟鎹�
+     *
+     * @param data 褰撳墠鏁版嵁涓烘爣鍑嗙殑Grain鏁版嵁锛屾病鏈夊仛鏇存柊鐐逛綅淇℃伅
+     * @return key=鍙傝�冪紪鐮�
+     */
+    public void updateCacheGrainData(Grain data) {
+
+        GrainData grainData = new GrainData();
+        BeanUtils.copyProperties(data, grainData);
+
+        String key = RedisConst.buildKey(data.getCompanyId(),
+                RedisConst.KEY_GRAIN, grainData.getDepotId());
+        redisCache.setCacheObject(key, grainData);
+
+
+        //鎺ㄩ�佸ぇ灞�
+        String deptId = data.getDeptId();
+        if (null == deptId) {
+            Depot depot = depotService.getCacheDepot(data.getCompanyId(), data.getDepotId());
+            if (null == depot) {
+                return;
+            }
+            deptId = depot.getDeptId();
+        }
+        Map<String, GrainData> mapData = this.getCacheGrainDateMap(data.getCompanyId(), deptId);
+        WebSocketPacket packet = new WebSocketPacket();
+        packet.setBizType("screen");
+        packet.setCompanyId(ContextUtil.getCompanyId());
+        packet.setDeptId(deptId);
+        packet.setBizId("grain");
+        packet.setOrderResp(OrderRespEnum.ORDER_INPROGRESS.getCode());
+        packet.setData(mapData);
+        WebSocketServer.sendByPocket(packet);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨涓渶鏂扮殑绮儏妫�娴嬫暟鎹�
+     *
+     * @param companyId
+     * @return key=鍙傝�冪紪鐮�
+     */
+    public Map<String, GrainData> getCacheGrainDateMap(String companyId, String deptId) {
+        if (null == companyId || null == deptId) return null;
+
+        String pattern = RedisConst.buildKey(companyId, RedisConst.KEY_GRAIN) + "*";
+
+        Collection<String> keys = redisCache.keys(pattern);
+
+        if (null == keys || keys.isEmpty()) return null;
+
+        Map<String, GrainData> result = new HashMap<>();
+        GrainData data;
+        for (String key : keys) {
+            data = (GrainData) redisCache.getCacheObject(key);
+            if (null == data) continue;
+
+            result.put(data.getDepotId(), data);
+        }
+        return result;
+    }
 
 }

--
Gitblit v1.9.3