From 2f432f52c1cfb1567dadcf6e040c5d38b0a26a79 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期五, 28 十一月 2025 17:31:49 +0800
Subject: [PATCH] 数量检测配置页面

---
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceSerService.java |  407 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 407 insertions(+), 0 deletions(-)

diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceSerService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceSerService.java
new file mode 100644
index 0000000..bc994f1
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceSerService.java
@@ -0,0 +1,407 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.DeviceSer;
+import com.fzzy.igds.repository.DeviceSerRepository;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysDeptService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 13:48
+ */
+@Slf4j
+@Service
+public class DeviceSerService {
+    @Resource
+    private ISysDeptService iSysDeptService;
+    @Resource
+    private DeviceSerRepository deviceSerRepository;
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * JPA 鏌ヨ鍒嗘満鍒楄〃
+     *
+     * @return
+     */
+    public List<DeviceSer> getAllSer() {
+        SysUser user = ContextUtil.getLoginUser();
+        SysDept userDept = iSysDeptService.selectDeptById(user.getDeptId());
+        if (Constant.DEPT_TYPE_20.equals(userDept.getType())) {
+            return deviceSerRepository.getDataByDeptId(user.getDeptId() + "");
+        }else {
+            return deviceSerRepository.getDataByParentId(user.getDeptId() + "%");
+        }
+
+    }
+
+    /**
+     * JPA 鏌ヨ鍒嗘満
+     *
+     * @param companyId
+     * @param id
+     * @return
+     */
+    public DeviceSer getDataById(String companyId, String id) {
+
+        if (StringUtils.isEmpty(id)) {
+            return null;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        return deviceSerRepository.getDataById(companyId, id);
+    }
+
+    /**
+     * JPA 鏇存柊淇濆瓨鍒嗘満
+     *
+     * @param ser
+     */
+    public void saveSer(DeviceSer ser) {
+        if (null == ser.getNetworkType()) {
+            ser.setNetworkType(Constant.NETWORK_01);
+        }
+        if (null == ser.getSn()) {
+            ser.setSn(ser.getId());
+        }
+        if (StringUtils.isEmpty(ser.getCompanyId())) {
+            ser.setCompanyId(ContextUtil.getCompanyId());
+            ser.setCreateBy(ContextUtil.getLoginUserName());
+            ser.setCreateTime(new Date());
+        }
+
+        ser.setUpdateBy(ContextUtil.getLoginUserName());
+        ser.setUpdateTime(new Date());
+        deviceSerRepository.save(ser);
+        refreshCache(ser.getCompanyId());
+    }
+
+    /**
+     * JPA 鏇存柊淇濆瓨鍒嗘満
+     *
+     * @param ser
+     */
+    public void delSer(DeviceSer ser) {
+        deviceSerRepository.delete(ser);
+
+        //鍒犻櫎缂撳瓨
+        delCache(ser.getCompanyId(), ser.getId());
+
+    }
+
+    /**
+     * 鏇存柊鍒嗘満淇℃伅
+     * @param status
+     * @param ip
+     * @param port
+     */
+    public void updateStatusByIp(String status, String ip, Integer port) {
+        String companyId = ContextUtil.getCompanyId();
+        DeviceSer ser = this.getCacheSerByIp(companyId, ip);
+
+        ser.setStatus(status);
+        ser.setIp(ip);
+        ser.setPort(port);
+        ser.setUpdateTime(new Date());
+
+        deviceSerRepository.save(ser);
+        setCacheSer(ser);
+    }
+
+    /**
+     * 鏇存柊鍒嗘満淇℃伅
+     * @param data
+     */
+    public void updateByData(DeviceSer data) {
+        if (null == data) {
+            return;
+        }
+        DeviceSer ser = this.getCacheSer(data.getCompanyId(), data.getId());
+        if (null == ser) {
+            return;
+        }
+        ser.setStatus(Constant.YN_Y);
+        ser.setIp(data.getIp());
+        ser.setPort(data.getPort());
+        ser.setUpdateTime(new Date());
+        ser.setSn(data.getSn());
+        deviceSerRepository.save(ser);
+
+        setCacheSer(ser);
+    }
+
+    /**
+     * 鏇存柊鍒嗘満淇℃伅
+     * @param companyId
+     * @param serId
+     * @param controlModel
+     */
+    public void updateControlModel(String companyId, String serId, String controlModel) {
+
+        DeviceSer ser = this.getCacheSer(companyId, serId);
+        if (null == ser) {
+            return;
+        }
+
+        ser.setStatus(Constant.YN_Y);
+        ser.setControlModel(controlModel);
+        ser.setUpdateTime(new Date());
+        deviceSerRepository.save(ser);
+
+        setCacheSer(ser);
+    }
+
+    /**
+     * 鍒锋柊缂撳瓨
+     *
+     * @param companyId
+     */
+    public void refreshCache(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        List<DeviceSer> list = this.getAllSer();
+        this.setCacheSer(list, companyId);
+    }
+
+    /**
+     * 璁剧疆鍗曚釜鍒嗘満缂撳瓨
+     *
+     * @param ser
+     */
+    public void setCacheSer(DeviceSer ser) {
+        if (null == ser) {
+            return;
+        }
+        ContextUtil.addSerCompany(ser.getSn(), ser.getCompanyId());
+        String key = RedisConst.buildKey(ser.getCompanyId(), RedisConst.KEY_DEVICE_SER_LIST, ser.getId());
+        redisCache.setCacheObject(key, ser);
+    }
+
+    /**
+     * 璁剧疆缂撳瓨
+     *
+     * @param data
+     * @param companyId
+     */
+    public void setCacheSer(List<DeviceSer> data, String companyId) {
+        if (null == data) {
+            return;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String key;
+        for (DeviceSer ser : data) {
+            ContextUtil.addSerCompany(ser.getSn(), ser.getCompanyId());
+            key = RedisConst.buildKey(companyId, RedisConst.KEY_DEVICE_SER_LIST, ser.getId());
+            redisCache.setCacheObject(key, ser);
+        }
+    }
+
+    /**
+     * 鍒犻櫎缂撳瓨淇℃伅
+     *
+     * @param companyId
+     * @param serId
+     */
+    public void delCache(String companyId, String serId) {
+        if (StringUtils.isEmpty(serId)) {
+            return;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEVICE_SER_LIST, serId);
+        redisCache.deleteObject(key);
+    }
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鑾峰彇鍒嗘満鍒楄〃
+     *
+     * @param companyId
+     * @return
+     */
+    public List<DeviceSer> getCacheSerList(String companyId) {
+
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String pattern = RedisConst.buildKey(companyId, RedisConst.KEY_DEVICE_SER_LIST) + "*";
+        Collection<String> keys = redisCache.keys(pattern);
+
+        List<DeviceSer> result = new ArrayList<>();
+        if (null == keys) {
+            return result;
+        }
+        for (String key : keys) {
+            result.add((DeviceSer) redisCache.getCacheObject(key));
+        }
+        if (result.size() < 1) {
+            result = getAllSer();
+        }
+        if (result.size() < 1) {
+            return null;
+        }
+        //閲嶆柊鎺掑簭
+        Collections.sort(result, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum());
+        return result;
+    }
+
+    /**
+     * 鏍规嵁绫诲瀷鑾峰彇鍒嗘満淇℃伅
+     * @param companyId
+     * @param type
+     * @return
+     */
+    public List<DeviceSer> getSerCacheByType(String companyId, String type) {
+        List<DeviceSer> listAll = this.getCacheSerList(companyId);
+        if (null == listAll || listAll.isEmpty()){
+            return null;
+        }
+        if (null == type){
+            return listAll;
+        }
+        List<DeviceSer> result = new ArrayList<DeviceSer>();
+        for (DeviceSer ser : listAll) {
+            if (ser.getType().equals(type))
+                result.add(ser);
+        }
+        return result;
+    }
+
+    /**
+     * 鏍规嵁鍒嗘満ID鑾峰彇鍒嗘満淇℃伅
+     *
+     * @param companyId
+     * @param serId
+     * @return
+     */
+    public DeviceSer getCacheSer(String companyId, String serId) {
+        if (StringUtils.isEmpty(serId)) {
+            return null;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEVICE_SER_LIST, serId);
+
+        DeviceSer ser = (DeviceSer) redisCache.getCacheObject(key);
+
+        if (null == ser) {
+            ser = getDataById(companyId, serId);
+            if (null == ser) {
+                log.error("---------缂撳瓨涓病鏈夎幏鍙栧埌鍒嗘満缂撳瓨----------");
+                return null;
+            }
+            redisCache.setCacheObject(key, ser);
+        }
+        return ser;
+    }
+
+    /**
+     * 鏍规嵁鍒嗘満IP鑾峰彇鍒嗘満淇℃伅
+     *
+     * @param companyId
+     * @param ip
+     * @return
+     */
+    public DeviceSer getCacheSerByIp(String companyId, String ip) {
+        if (StringUtils.isEmpty(companyId)) {
+            return null;
+        }
+        List<DeviceSer> serList = getCacheSerList(companyId);
+        if (null == serList) {
+            return null;
+        }
+        for (DeviceSer deviceSer : serList) {
+            if (deviceSer.getIp().equals(ip)) {
+                return deviceSer;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鏍规嵁鍒嗘満IP鍜岀鍙h幏鍙栧垎鏈轰俊鎭�
+     *
+     * @param companyId
+     * @param ip
+     * @param port
+     * @return
+     */
+    public DeviceSer getCacheSerByIp(String companyId, String ip, Integer port) {
+        if (StringUtils.isEmpty(companyId)) {
+            return null;
+        }
+        List<DeviceSer> serList = getCacheSerList(companyId);
+        if (null == serList) {
+            return null;
+        }
+        for (DeviceSer deviceSer : serList) {
+            if (deviceSer.getIp().equals(ip) && deviceSer.getPort() == port) {
+                return deviceSer;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鏍规嵁鍒嗘満SN鑾峰彇鍒嗘満淇℃伅
+     *
+     * @param companyId
+     * @param sn
+     * @return
+     */
+    public DeviceSer getCacheSerBySn(String companyId, String sn) {
+
+        if (StringUtils.isEmpty(companyId)) {
+            return null;
+        }
+        List<DeviceSer> serList = getCacheSerList(companyId);
+        if (null == serList) {
+            return null;
+        }
+        for (DeviceSer deviceSer : serList) {
+            if (deviceSer.getSn().equals(sn)) {
+                return deviceSer;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * JPA-鏇存柊璁惧鍏ㄩ儴绂荤嚎
+     * @param companyId
+     */
+    public void allOffLine(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        deviceSerRepository.updateSerStatus(companyId, Constant.YN_N);
+    }
+
+    /**
+     * JPA-鏍规嵁SN鏇存柊鐘舵��
+     * @param ip
+     * @param port
+     * @param sn
+     * @param status
+     */
+    public void onlineBySn(String ip, Integer port, String sn, String status) {
+        deviceSerRepository.updateBySn(ip, port, status, sn, new Date());
+    }
+
+}

--
Gitblit v1.9.3