From dec93e6c6923238869a5accf278028cdd6a18bec Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期五, 28 十一月 2025 16:50:15 +0800
Subject: [PATCH] 出入库流程及设备、监控、分机、粮情等配置页面及功能

---
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java                             |   55 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java                 |   25 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java                 |   10 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConfPR.java                    |   65 
 fzzy-igdss-view/src/main/java/models/core.model.xml                                |  484 ++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutSysConfRepository.java |   48 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotConfService.java          |  249 ++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceIotService.java          |  194 +
 fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConf.view.xml                  |  254 ++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/SecCameraRepository.java    |   51 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceIotRepository.java    |   41 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCameraPR.java                       |  183 +
 fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutConf.java                  |    2 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSer.view.xml                     |  427 ++++
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConf.view.xml                     |  322 +++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotConfRepository.java    |   56 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConfPR.java                       |   71 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml                     | 1207 +++++++++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceSerService.java          |  407 +++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreDeptService.java           |   17 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutConfService.java          |  233 ++
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConfPR.java                       |   77 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIotPR.java                       |  132 +
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DicArea.view.xml                       |    2 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSerPR.java                       |  105 +
 fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConf.view.xml                     |  804 +++++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutConfRepository.java    |   41 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeptRepository.java         |    2 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java                |   64 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIot.view.xml                     |  324 +++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceSerRepository.java    |   73 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SecCameraService.java          |  177 +
 fzzy-igdss-view/src/main/java/com/fzzy/igds/DeptPR.java                            |   12 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotConf.java                  |    4 
 34 files changed, 6,208 insertions(+), 10 deletions(-)

diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
index d89f627..7ea3309 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
@@ -67,4 +67,14 @@
 
     public static final String NETWORK_01 = "01";// 鏈夌嚎妯″紡
     public static final String NETWORK_02 = "02";// 鏃犵嚎妯″紡
+
+    /**
+     * 缂撳瓨KEY-鍑哄叆搴撴祦绋嬮厤缃俊鎭�
+     */
+    public static final String CACHE_INOUT_SYS_CONF = "INOUT_SYS_CONF";
+
+    /**
+     * 缂撳瓨KEY-鍑哄叆搴撻厤缃俊鎭紦瀛�
+     */
+    public static final String CACHE_INOUT_CONF_LIST = "INOUT_CONF";
 }
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotConf.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotConf.java
index 2671061..ceb2be3 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotConf.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotConf.java
@@ -103,10 +103,6 @@
     @TableField("grain_auto")
     private String grainAuto = Constant.YN_N;
 
-    @Column(name = "only_cur_depot", columnDefinition = "varchar(40) COMMENT '鏄剧ず褰撳墠'")
-    @TableField("only_cur_depot")
-    private String onlyCurDepot = "Y";
-
     @Column(name = "is_only_th", columnDefinition = "varchar(40) COMMENT '绮儏鏄惁娓╂箍搴�'")
     @TableField("is_only_th")
     private String isOnlyTH = Constant.YN_N;
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutConf.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutConf.java
index 6e659d4..1a6655e 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutConf.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutConf.java
@@ -97,7 +97,7 @@
     @TableField("snap_type")
     private String snapType;
 
-    @Column(name = "plate_snap_type", columnDefinition = "varchar(40) COMMENT '杞︾墝璇嗗埆鎶撴媿鏂瑰紡'")
+    @Column(name = "plate_snap_type", columnDefinition = "varchar(40) COMMENT '鎶撳浘璇嗗埆'")
     @TableField("plate_snap_type")
     private String plateSnapType;
 
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotConfRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotConfRepository.java
new file mode 100644
index 0000000..8090d33
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotConfRepository.java
@@ -0,0 +1,56 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.DepotConf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 15:38
+ */
+@Service
+public interface DepotConfRepository extends JpaRepository<DepotConf, String> {
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鑾峰彇浠撳簱璐т綅淇℃伅
+     *
+     * @param companyId
+     * @return
+     */
+    @Query("from DepotConf where companyId =:companyId order by depotId")
+    List<DepotConf> getDepotConfByCompanyId(@Param("companyId") String companyId);
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦粨搴撹揣浣嶄俊鎭�
+     *
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    @Query("from DepotConf where companyId =:companyId and deptId =:deptId order by depotId")
+    List<DepotConf> getDepotConf(@Param("companyId") String companyId, @Param("deptId") String deptId);
+
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鍜屼粨搴撶紪鐮佽幏鍙栦粨搴撹揣浣嶄俊鎭�
+     * @param companyId
+     * @param depotId
+     * @return
+     */
+    @Query("from DepotConf where companyId =:companyId and depotId =:depotId")
+    DepotConf getDepotConfByDepotId(@Param("companyId") String companyId, @Param("depotId") String depotId);
+
+
+    @Transactional
+    @Modifying
+    @Query("update DepotConf set grainFreq=:grainFreq where companyId=:companyId and deptId =:deptId")
+    int updateGrainFreq(@Param("grainFreq") String grainFreq, @Param("companyId") String companyId, @Param("deptId") String deptId);
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeptRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeptRepository.java
index 39ff99e..63e7f04 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeptRepository.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeptRepository.java
@@ -28,7 +28,7 @@
     /**
      * 鏍规嵁companyId鑾峰彇淇℃伅
      *
-     * @param companyId
+     * @param id
      * @return
      */
     @Query("from Dept where id =:id order by id")
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceIotRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceIotRepository.java
new file mode 100644
index 0000000..98d1329
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceIotRepository.java
@@ -0,0 +1,41 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.DeviceIot;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 14:42
+ */
+@Service
+public interface DeviceIotRepository extends JpaRepository<DeviceIot, String>, JpaSpecificationExecutor<DeviceIot> {
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鑾峰彇浠撳簱璐т綅淇℃伅
+     *
+     * @param companyId
+     * @return
+     */
+    @Query("from DeviceIot where companyId =:companyId order by id")
+    List<DeviceIot> getDeviceIotByCompanyId(@Param("companyId") String companyId);
+
+    /**
+     * 鏇存柊璁惧浣嶇疆
+     * @param deviceId
+     * @param posX
+     * @param posY
+     */
+    @Transactional
+    @Modifying
+    @Query("update DeviceIot set posX =:posX,posY =:posY where id =:deviceId")
+    void updatePos(@Param("deviceId") String deviceId, @Param("posX") Double posX, @Param("posY") Double posY);
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceSerRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceSerRepository.java
new file mode 100644
index 0000000..68d6e8d
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeviceSerRepository.java
@@ -0,0 +1,73 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.DeviceSer;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 13:48
+ */
+@Service
+public interface DeviceSerRepository extends JpaRepository<DeviceSer, String> {
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鑾峰彇浠撳簱璐т綅淇℃伅
+     *
+     * @param companyId
+     * @return
+     */
+    @Query("from DeviceSer where companyId =:companyId order by orderNum")
+    List<DeviceSer> getDataByDeptId(@Param("companyId") String companyId);
+
+
+    /**
+     * 鑾峰彇涓嬪睘鍒嗘満淇℃伅
+     *
+     * @param parentId
+     * @return
+     */
+    @Query("from DeviceSer where deptId like:parentId order by orderNum")
+    List<DeviceSer> getDataByParentId(@Param("parentId") String parentId);
+
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鑾峰彇浠撳簱璐т綅淇℃伅
+     *
+     * @param companyId
+     * @return
+     */
+    @Query("from DeviceSer where companyId =:companyId and id =:id order by orderNum")
+    DeviceSer getDataById(@Param("companyId") String companyId, @Param("id") String id);
+
+    /**
+     * 鏇存柊鍒嗘満鐘舵��
+     * @param companyId
+     * @param status
+     */
+    @Transactional
+    @Modifying
+    @Query("update DeviceSer set status =:status where  companyId =:companyId")
+    void updateSerStatus(@Param("companyId") String companyId, @Param("status") String status);
+
+    /**
+     * 鏍规嵁SN鏇存柊鐘舵��
+     * @param ip
+     * @param port
+     * @param status
+     * @param sn
+     * @param updateTime
+     */
+    @Transactional
+    @Modifying
+    @Query("update DeviceSer set status =:status,ip =:ip,port =:port,updateTime =:updateTime where sn =:sn")
+    void updateBySn(@Param("ip") String ip, @Param("port") Integer port,@Param("status") String status,@Param("sn") String sn,@Param("updateTime") Date updateTime);
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutConfRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutConfRepository.java
new file mode 100644
index 0000000..4f16d63
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutConfRepository.java
@@ -0,0 +1,41 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.InoutConf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 20:23
+ */
+@Service
+public interface InoutConfRepository extends JpaRepository<InoutConf, String> {
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦俊鎭�
+     *
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    @Query("from InoutConf where companyId =:companyId and deptId =:deptId order by sort,inoutProgress")
+    List<InoutConf> getInoutConfList(@Param("companyId") String companyId, @Param("deptId") String deptId);
+
+    /**
+     * 鏇存柊鐘舵��
+     * @param status
+     * @param ip
+     * @param port
+     */
+    @Transactional
+    @Modifying
+    @Query("update InoutConf set status =:status where ip =:ip and port =:port")
+    void updateInoutConfStatus(@Param("status") String status, @Param("ip") String ip, @Param("port") Integer port);
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutSysConfRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutSysConfRepository.java
new file mode 100644
index 0000000..68de24c
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/InoutSysConfRepository.java
@@ -0,0 +1,48 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.InoutSysConf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 20:23
+ */
+@Service
+public interface InoutSysConfRepository extends JpaRepository<InoutSysConf, String> {
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦俊鎭�
+     *
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    @Query("from InoutSysConf where companyId =:companyId and deptId =:deptId")
+    InoutSysConf getInoutSysConf(@Param("companyId") String companyId, @Param("deptId") String deptId);
+
+
+    /**
+     * 鏍规嵁id鑾峰彇淇℃伅
+     *
+     * @param parentId
+     * @return
+     */
+    @Query("from InoutSysConf where deptId like:parentId order by deptId")
+    List<InoutSysConf> getDataByParentId(@Param("parentId") String parentId);
+
+    /**
+     * 鏍规嵁companyId鑾峰彇淇℃伅
+     *
+     * @param companyId
+     * @return
+     */
+    @Query("from InoutSysConf where deptId =:id order by deptId")
+    List<InoutSysConf> getDataById(@Param("id") String id);
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/SecCameraRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/SecCameraRepository.java
new file mode 100644
index 0000000..4b5ab43
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/SecCameraRepository.java
@@ -0,0 +1,51 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.Camera;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 10:48
+ */
+@Service
+public interface SecCameraRepository extends JpaRepository<Camera, String> , JpaSpecificationExecutor<Camera> {
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦俊鎭�
+     *
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    @Query("from Camera where companyId =:companyId and deptId =:deptId order by orderNum")
+    List<Camera> listCamera(@Param("companyId") String companyId, @Param("deptId") String deptId);
+
+    /**
+     * 鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦俊鎭�
+     *
+     * @param companyId
+     * @return
+     */
+    @Query("from Camera where companyId =:companyId order by orderNum")
+    List<Camera> listCameraByCompanyId(@Param("companyId") String companyId);
+
+    /**
+     * 鏇存柊璁惧浣嶇疆
+     * @param id
+     * @param posX
+     * @param posY
+     */
+    @Transactional
+    @Modifying
+    @Query("update Camera set posX =:posX,posY =:posY where id =:id")
+    void updatePosById(@Param("id") String id, @Param("posX") Double posX, @Param("posY") Double posY);
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreDeptService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreDeptService.java
index ad5fde1..9a33407 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreDeptService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreDeptService.java
@@ -25,6 +25,8 @@
     private ISysDeptService iSysDeptService;
     @Resource
     private DeptRepository deptRepository;
+    @Resource
+    private InoutConfService inoutConfService;
 
 
     /**
@@ -36,6 +38,14 @@
         return deptRepository.getDataByParentId(parentId + "%");
     }
 
+
+    /**
+     * jpa鏌ヨ淇℃伅
+     * @return
+     */
+    public List<Dept> getAllDeptData() {
+        return deptRepository.getAllData(ContextUtil.getCompanyId());
+    }
 
     /**
      * jpa鏌ヨ淇℃伅
@@ -70,6 +80,9 @@
         dept.setCreateTime(new Date());
 
         this.update(dept);
+
+        //鐢熸垚鍑哄叆搴撴祦绋嬮厤缃俊鎭�
+        inoutConfService.initSysConfData(sysDept.getCompanyId(), dept.getId());
     }
 
     /**
@@ -93,6 +106,10 @@
      * @return
      */
     public void delData(String deptId) {
+        //鍒犻櫎搴撳尯淇℃伅
         deptRepository.deleteById(deptId);
+
+        //鍒犻櫎娴佺▼閰嶇疆淇℃伅
+        inoutConfService.delSysConfData(deptId);
     }
 }
\ No newline at end of file
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotConfService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotConfService.java
new file mode 100644
index 0000000..1dcfdd3
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotConfService.java
@@ -0,0 +1,249 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.domain.DepotConf;
+import com.fzzy.igds.repository.DepotConfRepository;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 15:42
+ */
+@Slf4j
+@Service
+public class DepotConfService {
+
+    @Resource
+    private DepotConfRepository depotConfRepository;
+    @Resource
+    private DepotService depotService;
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * jpa鏌ヨ閰嶇疆淇℃伅
+     *
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    public List<DepotConf> getConfList(String companyId, String deptId) {
+
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        if (StringUtils.isEmpty(deptId)) {
+            deptId = ContextUtil.subDeptId(null);
+        }
+        return depotConfRepository.getDepotConf(companyId, deptId);
+    }
+
+    /**
+     * jpa鏇存柊淇濆瓨閰嶇疆淇℃伅
+     *
+     * @param conf
+     */
+    public void saveConf(DepotConf conf) {
+        if (StringUtils.isEmpty(conf.getCompanyId())) {
+            conf.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(conf.getDeptId())) {
+            conf.setDeptId(ContextUtil.subDeptId(null));
+            conf.setCreateBy(ContextUtil.getLoginUserName());
+            conf.setCreateTime(new Date());
+        }
+        conf.setUpdateBy(ContextUtil.getLoginUserName());
+        conf.setUpdateTime(new Date());
+        depotConfRepository.save(conf);
+        flushConfCache(conf.getCompanyId());
+    }
+
+    /**
+     * jpa鍒犻櫎閰嶇疆淇℃伅
+     *
+     * @param conf
+     * @return
+     */
+    public void deleteDepotConf(DepotConf conf) {
+        depotConfRepository.delete(conf);
+
+        //鍒犻櫎閰嶇疆缂撳瓨
+        this.delCacheDepotConf(conf, conf.getCompanyId());
+    }
+
+    /**
+     * 璁剧疆缂撳瓨淇℃伅
+     *
+     * @param list
+     * @param companyId
+     */
+    public void setCacheDepotConf(List<DepotConf> list, String companyId) {
+        if (null != list) {
+            Depot depot;
+            String key;
+            for (DepotConf depotConf : list) {
+                depot = depotService.getCacheDepot(companyId, depotConf.getDepotId());
+                if (null != depot) {
+                    depotConf.setDepotName(depot.getName());
+                    depotConf.setDepotType(depot.getDepotType());
+                }
+                key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF, depotConf.getDepotId());
+                redisCache.setCacheObject(key, depotConf);
+            }
+        }
+    }
+
+    /**
+     * 鍒犻櫎缂撳瓨淇℃伅
+     *
+     * @param depotConf
+     * @param companyId
+     */
+    public void delCacheDepotConf(DepotConf depotConf, String companyId) {
+        if (null == depotConf) {
+            return;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF, depotConf.getDepotId());
+        redisCache.deleteObject(key);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨-鏍规嵁缁勭粐缂栫爜鑾峰彇閰嶇疆淇℃伅闆嗗悎
+     *
+     * @param companyId
+     * @return
+     */
+    public List<DepotConf> getCacheDepotConfList(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF) + "*";
+
+        Collection<String> keys = redisCache.keys(patten);
+        if (null == keys || keys.isEmpty()) {
+            return null;
+        }
+
+        List<DepotConf> result = new ArrayList<>();
+        for (String key : keys) {
+            result.add((DepotConf) redisCache.getCacheObject(key));
+        }
+
+        return result;
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨-鏍规嵁缁勭粐缂栫爜鍜岀伯鎯呭垎鏈篒D鑾峰彇閰嶇疆淇℃伅闆嗗悎
+     *
+     * @param companyId
+     * @param serId
+     * @return
+     */
+    public List<DepotConf> getCacheDepotConfList(String companyId, String serId) {
+        List<DepotConf> list = getCacheDepotConfList(companyId);
+
+        if (null == list || list.isEmpty()) {
+            return null;
+        }
+        return list.stream()
+                .filter(item -> null != item.getGrainSer() && item.getGrainSer().equals(serId))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨-鏍规嵁缁勭粐缂栫爜鍜岀伯鎯呭垎鏈篒D鑾峰彇閰嶇疆淇℃伅
+     *
+     * @param companyId
+     * @param serId
+     * @return
+     */
+    public DepotConf getCacheDepotConfBySerId(String companyId, String serId) {
+        List<DepotConf> data = getCacheDepotConfList(companyId);
+        if (null == data) {
+            return null;
+        }
+
+        return data.stream().filter(item -> serId.equals(item.getGrainSer()))
+                .findAny().orElse(null);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨-鏍规嵁缁勭粐缂栫爜鍜屼粨搴撶紪鐮佽幏鍙栭厤缃俊鎭�
+     *
+     * @param companyId
+     * @param depotId
+     * @return
+     */
+    public DepotConf getCacheDepotConfByDepotId(String companyId, String depotId) {
+        if (StringUtils.isEmpty(depotId)) {
+            return null;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF, depotId);
+        DepotConf depotConf = redisCache.getCacheObject(key);
+        if (null == depotConf) {
+            depotConf = depotConfRepository.getDepotConfByDepotId(companyId, depotId);
+            redisCache.setCacheObject(key, depotConf);
+        }
+
+        return depotConf;
+    }
+
+    /**
+     * 鏍规嵁浠撳簱鍒楄〃锛岃嚜鍔ㄧ敓鎴愪粨搴撻厤缃俊鎭�
+     * @param companyId
+     */
+    private void addConfByDepot(String companyId) {
+        List<Depot> list = depotService.getCacheDepotList(companyId);
+        if (null == list || list.isEmpty()) {
+            return;
+        }
+        DepotConf conf;
+        for (Depot depot : list) {
+            conf = new DepotConf();
+            conf.setDepotId(depot.getId());
+            conf.setCompanyId(depot.getCompanyId());
+            conf.setDeptId(depot.getDeptId());
+            this.saveConf(conf);
+        }
+    }
+
+    /**
+     * 鍒锋柊浠撳簱閰嶇疆缂撳瓨
+     * @param companyId
+     */
+    public void flushConfCache(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+
+        List<DepotConf> list = depotConfRepository.getDepotConfByCompanyId(companyId);
+
+        this.setCacheDepotConf(list, companyId);
+    }
+
+    /**
+     * 鏇存柊绮儏淇濆瓨棰戠巼
+     * @param freq
+     */
+    public void updateFreq(String freq) {
+        depotConfRepository.updateGrainFreq(ContextUtil.getCompanyId(), ContextUtil.subDeptId(null), freq);
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceIotService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceIotService.java
new file mode 100644
index 0000000..b147541
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DeviceIotService.java
@@ -0,0 +1,194 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.DeviceIot;
+import com.fzzy.igds.repository.DeviceIotRepository;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 14:45
+ */
+@Slf4j
+@Service
+public class DeviceIotService {
+
+    @Resource
+    private RedisCache redisCache;
+    @Resource
+    private DeviceIotRepository deviceIotRepository;
+
+    /**
+     * JPA鍒嗛〉鏌ヨ鏁版嵁
+     *
+     * @param specification
+     * @param pageable
+     * @return
+     */
+    public Page<DeviceIot> findAll(Specification<DeviceIot> specification, Pageable pageable) {
+        return deviceIotRepository.findAll(specification, pageable);
+    }
+
+    /**
+     * JPA - 淇濆瓨鏁版嵁
+     * @param deviceIot
+     */
+    public void updateDeviceIot(DeviceIot deviceIot) {
+        if (StringUtils.isEmpty(deviceIot.getCompanyId())) {
+            deviceIot.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(deviceIot.getDeptId())) {
+            deviceIot.setDeptId(ContextUtil.subDeptId(null));
+        }
+        if (StringUtils.isEmpty(deviceIot.getId())) {
+            deviceIot.setId(ContextUtil.generateId());
+            deviceIot.setCreateBy(ContextUtil.getLoginUserName());
+            deviceIot.setCreateTime(new Date());
+        }
+        deviceIot.setUpdateBy(ContextUtil.getLoginUserName());
+        deviceIot.setUpdateTime(new Date());
+        deviceIotRepository.save(deviceIot);
+    }
+
+    /**
+     * JPA - 鍒犻櫎鏁版嵁
+     * @param deviceIot
+     */
+    public void delDepotDeviceIot(DeviceIot deviceIot) {
+        deviceIotRepository.delete(deviceIot);
+    }
+
+    /**
+     * jpa鏇存柊璁惧浣嶇疆
+     *
+     * @param deviceId
+     * @param posX
+     * @param posY
+     */
+    public void updatePos(String deviceId, Double posX, Double posY) {
+        deviceIotRepository.updatePos(deviceId, posX, posY);
+    }
+
+    /**
+     * 鍒锋柊缂撳瓨
+     * @param companyId
+     */
+    public void refreshCache(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        // 鑾峰彇鎵�鏈夌殑璁惧淇℃伅
+        List<DeviceIot> listAll =deviceIotRepository.getDeviceIotByCompanyId(companyId);
+
+        if (null != listAll) {
+            this.setCacheAllDeviceIot(listAll, companyId);
+        }
+    }
+
+    /**
+     * 璁剧疆缂撳瓨
+     * @param listAll
+     * @param companyId
+     */
+    public void setCacheAllDeviceIot(List<DeviceIot> listAll, String companyId) {
+        // 棣栧厛鎸夌収鍒嗘満鍒嗙粍锛岀劧鍚庡瓨鏇存柊缂撳瓨銆�
+        Map<String, List<DeviceIot>> map = listAll.stream().collect(
+                Collectors.groupingBy(DeviceIot::getSerId));
+
+        if (null == map || map.isEmpty()) {
+            log.error("瀛楀吀淇℃伅锛氭墍鏈夎澶囨寜鐓у垎鏈哄垎缁勪繚瀛樼紦瀛樺け璐ワ紝娌℃湁鍒嗙粍鎴愬姛=={}", companyId);
+            return;
+        }
+
+        for (String serId : map.keySet()) {
+            updateCacheDeviceIotBySerId(map.get(serId), companyId, serId);
+        }
+
+    }
+
+    /**
+     * 鏇存柊缂撳瓨
+     * @param listBySer
+     * @param companyId
+     * @param serId
+     */
+    public void updateCacheDeviceIotBySerId(List<DeviceIot> listBySer,
+                                            String companyId, String serId) {
+
+        String key = RedisConst.buildDeviceKey(companyId,
+                RedisConst.KEY_DEVICE_IOT_LIST, serId);
+
+        log.debug("鍒嗘満-璁惧-KEY={}", key);
+
+        redisCache.setCacheObject(key, listBySer);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨鏁版嵁
+     * @param companyId
+     * @param serId
+     * @return
+     */
+    public List<DeviceIot> getCacheDeviceIotBySerId(String companyId, String serId) {
+        String key = RedisConst.buildDeviceKey(companyId,
+                RedisConst.KEY_DEVICE_IOT_LIST, serId);
+        List<DeviceIot> list = (List<DeviceIot>) redisCache.getCacheObject(key);
+        if (null == list || list.isEmpty()) {
+            log.error("瀛楀吀淇℃伅锛氭病鏈夎幏鍙栧埌缂撳瓨淇℃伅锛孠EY={}", key);
+            return null;
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨鏁版嵁
+     * @param companyId
+     * @param depotId
+     * @return
+     */
+    public List<DeviceIot> getCacheDeviceIotByDepotId(String companyId, String depotId) {
+
+        if(org.apache.commons.lang3.StringUtils.isEmpty(depotId)){
+            log.error("浠撳簱缂栫爜涓虹┖锛岃幏鍙朓ot璁惧澶辫触锛宒epotId={}", depotId);
+            return null;
+        }
+        if(StringUtils.isEmpty(companyId)){
+            companyId = ContextUtil.getCompanyId();
+        }
+
+        String pattern = RedisConst.buildKey(companyId, RedisConst.KEY_DEVICE_IOT_LIST) + "*";
+        Collection<String> keys = redisCache.keys(pattern);
+        if (null == keys) {
+            log.error("娌℃湁鑾峰彇鍒癐ot缂撳瓨key淇℃伅");
+            return null;
+        }
+
+        List<DeviceIot> list = new ArrayList<>();
+        List<DeviceIot> result;
+
+        for (String key : keys) {
+            result = (List<DeviceIot>) redisCache.getCacheObject(key);
+            if(null == result || result.isEmpty()){
+                continue;
+            }
+            for (DeviceIot iot : result) {
+                if(depotId.equals(iot.getDepotId())){
+                    list.add(iot);
+                }
+            }
+        }
+        return list;
+    }
+
+}
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());
+    }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java
index 9662564..4f0794c 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DicService.java
@@ -306,4 +306,68 @@
         return list;
     }
 
+    /**
+     * 鐢电紗璧峰鏂逛綅
+     *
+     * @return
+     */
+    public List<SysDictData> triggerStartOrientation() {
+        List<SysDictData> list = new ArrayList<SysDictData>();
+        list.add(new SysDictData("鍙宠竟", Constant.GRAIN_START_ORIENTATION_RIGHT));
+        list.add(new SysDictData("鍙充笂", Constant.GRAIN_START_ORIENTATION_RIGHT_UP));
+        list.add(new SysDictData("宸﹁竟", Constant.GRAIN_START_ORIENTATION_LEFT));
+        list.add(new SysDictData("宸︿笂", Constant.GRAIN_START_ORIENTATION_LEFT_UP));
+        return list;
+    }
+
+    /**
+     * 鐢电紗甯冪嚎鏂瑰悜
+     *
+     * @return
+     */
+    public List<SysDictData> triggerStartDirection() {
+        List<SysDictData> list = new ArrayList<SysDictData>();
+        list.add(new SysDictData("绾靛悜", Constant.GRAIN_START_DIRECTION_PORTRAIT));
+        list.add(new SysDictData("妯悜", Constant.GRAIN_START_DIRECTION_TRANSVERSE));
+        return list;
+    }
+
+    /**
+     * 鐢电紗璧峰鐐逛綅
+     *
+     * @return
+     */
+    public List<SysDictData> triggerStartPoint() {
+        List<SysDictData> list = new ArrayList<SysDictData>();
+        list.add(new SysDictData("椤堕儴", Constant.GRAIN_START_POINT_TOP));
+        list.add(new SysDictData("搴曢儴", Constant.GRAIN_START_POINT_BELOW));
+
+        return list;
+    }
+
+    /**
+     * 灞傝杞崲
+     *
+     * @return
+     */
+    public List<SysDictData> triggerStartConvert() {
+        List<SysDictData> list = new ArrayList<SysDictData>();
+        list.add(new SysDictData("榛樿", Constant.GRAIN_CONVERT_DEFAULT));
+        list.add(new SysDictData("椤烘椂閽�", Constant.GRAIN_CONVERT_CLOCKWISE));
+        list.add(new SysDictData("閫嗘椂閽�", Constant.GRAIN_CONVERT_ANTICLOCKWISE));
+        return list;
+    }
+
+    /**
+     * 绛掍粨閿ュ舰
+     *
+     * @return
+     */
+    public List<SysDictData> triggerCableCone() {
+        List<SysDictData> list = new ArrayList<SysDictData>();
+        list.add(new SysDictData("鏃犻敟褰�", Constant.CABLE_CONE_0));
+        list.add(new SysDictData("涓婇敟褰�", Constant.CABLE_CONE_1));
+        list.add(new SysDictData("涓嬮敟褰�", Constant.CABLE_CONE_2));
+        return list;
+    }
 }
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutConfService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutConfService.java
new file mode 100644
index 0000000..164d4ac
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutConfService.java
@@ -0,0 +1,233 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.repository.InoutConfRepository;
+import com.fzzy.igds.repository.InoutSysConfRepository;
+import com.fzzy.igds.domain.InoutConf;
+import com.fzzy.igds.domain.InoutSysConf;
+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.Date;
+import java.util.List;
+
+/**
+ * @Description 鍑哄叆搴撻厤缃畇ervice灞傦紝鍖呭惈娴佺▼閰嶇疆鍜岃澶囬厤缃�
+ * @Author CZT
+ * @Date 2025/11/28 09:23
+ */
+@Slf4j
+@Service
+public class InoutConfService {
+    @Resource
+    private ISysDeptService iSysDeptService;
+    @Resource
+    private InoutSysConfRepository inoutSysConfRepository;
+    @Resource
+    private InoutConfRepository inoutConfRepository;
+    @Resource
+    private RedisCache redisCache;
+
+    /*--------------- 鍑哄叆搴撴祦绋� ---------------*/
+    /**
+     * JPA-鏌ヨ娴佺▼閰嶇疆
+     *
+     * @return
+     */
+    public List<InoutSysConf> getSysConfData() {
+
+        SysUser user = ContextUtil.getLoginUser();
+        SysDept userDept = iSysDeptService.selectDeptById(user.getDeptId());
+        if (Constant.DEPT_TYPE_20.equals(userDept.getType())) {
+            return inoutSysConfRepository.getDataById(ContextUtil.subDeptId(user));
+        }else {
+            return inoutSysConfRepository.getDataByParentId(user.getDeptId() + "%");
+        }
+    }
+
+    /**
+     *
+     *
+     * @param companyId
+     * @param deptId
+     */
+    public void initSysConfData(String companyId, String deptId) {
+        InoutSysConf inoutSysConf = new InoutSysConf();
+        inoutSysConf.setDeptId(deptId);
+        inoutSysConf.setCompanyId(companyId);
+        inoutSysConf.setProgressIn("REGISTER-WEIGHT_FULL-HANDLE-WEIGHT_EMPTY-RECORD");
+        inoutSysConf.setProgressOut("REGISTER-WEIGHT_EMPTY-HANDLE-WEIGHT_FULL-RECORD");
+        this.saveSysConfData(inoutSysConf);
+
+        this.flushInoutSysConfCache(inoutSysConf);
+    }
+
+    /**
+     *
+     * @param deptId
+     */
+    public void delSysConfData(String deptId) {
+        inoutSysConfRepository.deleteById(deptId);
+    }
+
+    /**
+     * JPA-淇濆瓨娴佺▼閰嶇疆
+     *
+     * @param data
+     * @return
+     */
+    public void saveSysConfData(InoutSysConf data) {
+        if (StringUtils.isEmpty(data.getCompanyId())) {
+            data.setCompanyId(ContextUtil.getCompanyId());
+        }
+        data.setUpdateBy(ContextUtil.getLoginUserName());
+        data.setUpdateTime(new Date());
+        inoutSysConfRepository.save(data);
+        this.flushInoutSysConfCache(data);
+    }
+
+    /**
+     * 璁剧疆缂撳瓨
+     *
+     * @param data
+     */
+    public void flushInoutSysConfCache(InoutSysConf data) {
+        String key = RedisConst.buildKey(data.getDeptId(), Constant.CACHE_INOUT_SYS_CONF);
+        redisCache.setCacheObject(key, data);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨淇℃伅
+     *
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    public InoutSysConf getCacheInoutSysConf(String companyId, String deptId) {
+        String key = RedisConst.buildKey(deptId, Constant.CACHE_INOUT_SYS_CONF);
+        return (InoutSysConf) redisCache.getCacheObject(key);
+    }
+
+    /*--------------- 鍑哄叆搴撹澶� ---------------*/
+    /**
+     * JPA-鏌ヨ璁惧閰嶇疆
+     *
+     * @return
+     */
+    public List<InoutConf> getInoutConfList(String companyId, String deptId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        if (StringUtils.isEmpty(deptId)) {
+            deptId = ContextUtil.subDeptId(null);
+        }
+        return inoutConfRepository.getInoutConfList(companyId, deptId);
+    }
+
+    /**
+     * JPA-淇濆瓨璁惧閰嶇疆
+     * @param data
+     * @return
+     */
+    public String saveData(InoutConf data) {
+        if (0 == data.getInOrder()) {
+            data.setInOrder(1);
+        }
+        if (StringUtils.isEmpty(data.getSort())) {
+            data.setSort("1");
+        }
+        if (StringUtils.isEmpty(data.getId())) {
+            data.setId(ContextUtil.generateId());
+            data.setCreateBy(ContextUtil.getLoginUserName());
+            data.setCreateTime(new Date());
+        }
+        if (StringUtils.isEmpty(data.getCompanyId())) {
+            data.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(data.getDeptId())) {
+            data.setDeptId(ContextUtil.subDeptId(null));
+        }
+        data.setUpdateBy(ContextUtil.getLoginUserName());
+        data.setUpdateTime(new Date());
+        inoutConfRepository.save(data);
+        return null;
+    }
+
+    /**
+     * JPA-鍒犻櫎璁惧閰嶇疆
+     * @param data
+     * @return
+     */
+    public String delData(InoutConf data) {
+        inoutConfRepository.delete(data);
+        return null;
+    }
+
+    /**
+     * 璁剧疆缂撳瓨
+     * @param companyId
+     * @param deptId
+     */
+    public void flushInoutConfCache(String companyId, String deptId) {
+        List<InoutConf> list = this.getInoutConfList(companyId, deptId);
+        String key = RedisConst.buildKey(companyId, Constant.CACHE_INOUT_CONF_LIST, deptId);
+        redisCache.setCacheObject(key, list);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    public List<InoutConf> getCacheInoutConf(String companyId, String deptId) {
+        String key = RedisConst.buildKey(companyId, Constant.CACHE_INOUT_CONF_LIST, deptId);
+        List<InoutConf> list = redisCache.getCacheObject(key);
+        if(null == list){
+            list = this.getInoutConfList(companyId, deptId);
+            redisCache.setCacheObject(key, list);
+        }
+        return list;
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨
+     * @param companyId
+     * @param deptId
+     * @param confId
+     * @return
+     */
+    public InoutConf getCacheInoutConf(String companyId, String deptId, String confId) {
+        if (null == companyId || null == deptId || null == confId) {
+            return null;
+        }
+
+        List<InoutConf> list = getCacheInoutConf(companyId, deptId);
+        if (null == list  || list.isEmpty()) {
+            return null;
+        }
+        for (InoutConf inoutConf : list) {
+            if (inoutConf.getId().equals(confId)) {
+                return inoutConf;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鏇存柊鍑哄叆搴撹澶囩姸鎬�
+     * @param ip
+     * @param port
+     * @param status
+     */
+    public void updateInoutConfStatus(String ip, Integer port, String status) {
+        inoutConfRepository.updateInoutConfStatus(status, ip, port);
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SecCameraService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SecCameraService.java
new file mode 100644
index 0000000..fd95374
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SecCameraService.java
@@ -0,0 +1,177 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.Camera;
+import com.fzzy.igds.repository.SecCameraRepository;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 10:48
+ */
+@Slf4j
+@Service
+public class SecCameraService {
+
+    @Resource
+    private SecCameraRepository secCameraRepository;
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * JPA鍒嗛〉鏌ヨ鏁版嵁
+     *
+     * @param specification
+     * @param pageable
+     * @return
+     */
+    public Page<Camera> findAll(Specification<Camera> specification, Pageable pageable) {
+        return secCameraRepository.findAll(specification, pageable);
+    }
+
+    /**
+     * JPA - 鏌ヨ搴撳尯涓嬫墍鏈夌洃鎺�
+     * @return
+     */
+    public List<Camera> listCamera() {
+        return secCameraRepository.listCamera(ContextUtil.getCompanyId(), ContextUtil.subDeptId(null));
+    }
+
+    /**
+     * JPA - 淇濆瓨鏁版嵁
+     * @param data
+     */
+    public void saveCamera(Camera data) {
+        if (StringUtils.isEmpty(data.getCompanyId())) {
+            data.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(data.getDeptId())) {
+            data.setDeptId(ContextUtil.subDeptId(null));
+        }
+        if (data.getChanNum() == 0) {
+            data.setChanNum(1);
+        }
+        if(StringUtils.isEmpty(data.getId())){
+            data.setId(ContextUtil.generateId());
+            data.setCreateBy(ContextUtil.getLoginUserName());
+            data.setCreateTime(new Date());
+        }
+        data.setUpdateBy(ContextUtil.getLoginUserName());
+        data.setUpdateTime(new Date());
+        secCameraRepository.save(data);
+    }
+
+    /**
+     * JPA - 鍒犻櫎鏁版嵁
+     * @param data
+     * @return
+     */
+    public String delCamera(Camera data) {
+        secCameraRepository.delete(data);
+        return null;
+    }
+
+    /**
+     * 璁剧疆缂撳瓨
+     * @param companyId
+     */
+    public void refreshCache(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        List<Camera> list = secCameraRepository.listCameraByCompanyId(companyId);
+        redisCache.setCacheObject(RedisConst.buildKey(companyId, RedisConst.KEY_CAMERA_LIST), list);
+    }
+
+    /**
+     * 鑾峰彇缂撳瓨涓洃鎺т俊鎭�
+     * @param companyId
+     * @return
+     */
+    public List<Camera> getAllCacheCamera(String companyId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        String key = RedisConst.buildKey(companyId, RedisConst.KEY_CAMERA_LIST);
+        List<Camera> list =  redisCache.getCacheObject(key);
+
+        if (null == list || list.isEmpty()) {
+            list = secCameraRepository.listCameraByCompanyId(companyId);
+            redisCache.setCacheObject(key, list);
+        }
+        return list;
+    }
+
+    /**
+     * 鏍规嵁搴撳尯缂栫爜鑾峰彇鐩戞帶淇℃伅
+     * @param companyId
+     * @param deptId
+     * @return
+     */
+    public List<Camera> getCameraByDeptId(String companyId, String deptId) {
+        if (StringUtils.isEmpty(deptId)) {
+            return null;
+        }
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        List<Camera> list = this.getAllCacheCamera(companyId);
+
+        if (null == list || list.isEmpty()){
+            return null;
+        }
+        List<Camera> result = new ArrayList<>();
+        for (Camera data : list) {
+            if (data.getDeptId().equals(deptId)){
+                result.add(data);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 鏍规嵁鐩戞帶ID鑾峰彇鐩戞帶淇℃伅
+     * @param companyId
+     * @param cameraId
+     * @return
+     */
+    public Camera getCameraById(String companyId, String cameraId) {
+        if (StringUtils.isEmpty(companyId)) {
+            companyId = ContextUtil.getCompanyId();
+        }
+        List<Camera> list = this.getAllCacheCamera(companyId);
+
+        if (null == list || list.isEmpty()){
+            return null;
+        }
+
+        for (Camera data : list) {
+            if (data.getId().equals(cameraId)){
+                return data;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鏇存柊璁剧疆浣嶇疆
+     * @param param
+     */
+    public void updatePos(Camera param) {
+        secCameraRepository.updatePosById(param.getId(), param.getPosX(), param.getPosY());
+    }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
index 7134167..f36b989 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
@@ -26,6 +26,11 @@
     public static Map<String, String> contextUserDept = new HashMap<>();
 
     /**
+     * 鍏ㄥ眬鐢ㄤ簬瀛樻斁SN涓庣粍缁囩紪鐮佺殑鍏崇郴锛屼緥濡傚垎鏈篠N鍜岀粍缁囩紪鐮佸叧绯�
+     */
+    public static Map<String, String> contextSnCompanyIdMap = new HashMap<>();
+
+    /**
      * 鐢熸垚椤哄簭ID锛氬勾鏈堟棩鏃跺垎绉掓绉�(17浣�) + 搴忓垪鍙�(4浣�) = 21浣�
      *
      * @return
@@ -122,4 +127,24 @@
         }
         return orderId;
     }
+
+    /**
+     * 瀛樻斁SN涓庢墍灞炵粍缁囩殑鍏崇郴
+     *
+     * @param sn
+     * @param companyId
+     */
+    public static void addSerCompany(String sn, String companyId) {
+        contextSnCompanyIdMap.put(sn, companyId);
+    }
+
+    /**
+     * 閫氳繃SN鑾峰彇褰撳墠SN鎵�灞炵殑缁勭粐
+     *
+     * @param sn
+     * @return
+     */
+    public static String getCompanyIdBySn(String sn) {
+        return contextSnCompanyIdMap.get(sn);
+    }
 }
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConf.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConf.view.xml
new file mode 100644
index 0000000..cdd28e6
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConf.view.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model/>
+  <View layout="padding:10">
+    <ClientEvent name="onReady">var depotList = null;&#xD;
+</ClientEvent>
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="dataProvider">depotConfPR#getConfList</Property>
+      <Property name="dataType">[dtDepotConf]</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <ToolBar>
+        <ToolBarButton>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain&quot;).insert();&#xD;
+view.get(&quot;#depotId&quot;).set(&quot;readOnly&quot;,false);&#xD;
+view.get(&quot;#dgMain&quot;).show();</ClientEvent>
+          <Property name="caption">鏂板</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-plus</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
+if(select){&#xD;
+    view.get(&quot;#dgMain&quot;).show();&#xD;
+    view.get(&quot;#depotId&quot;).set(&quot;readOnly&quot;,true);&#xD;
+}else{&#xD;
+    $notify(&quot;璇烽�夋嫨闇�瑕佷慨鏀圭殑鏁版嵁鈥︹��&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">淇敼</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-pencil-square-o</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">&#xD;
+&#xD;
+var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
+if(select){&#xD;
+    view.get(&quot;#ajaxDel2&quot;).set(&quot;parameter&quot;,select).execute(function(result){&#xD;
+        if(result){&#xD;
+            $alert(result);&#xD;
+        }else{&#xD;
+            entity.remove();&#xD;
+        }&#xD;
+    });&#xD;
+}else{&#xD;
+    $notify(&quot;璇烽�夋嫨闇�瑕佸垹闄ょ殑鏁版嵁鈥︹��&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">鍒犻櫎</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-times</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="caption">鍒锋柊缂撳瓨</Property>
+          <Property name="exClassName">btn4</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+          <Property name="width">100</Property>
+          <Property name="action">ajaxRefreshCache</Property>
+        </ToolBarButton>
+      </ToolBar>
+      <DataGrid id="dataGridMain" layoutConstraint="padding:8">
+        <ClientEvent name="onDataRowClick">view.get(&quot;#dataGridMain&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="readOnly">true</Property>
+        <Property name="selectionMode">singleRow</Property>
+        <RowSelectorColumn/>
+        <RowNumColumn/>
+        <DataColumn name="depotId">
+          <Property name="property">depotId</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="grainSer">
+          <Property name="property">grainSer</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn>
+          <Property name="property">cableRule</Property>
+          <Property name="align">center</Property>
+          <Property name="name">cableRule</Property>
+        </DataColumn>
+        <DataColumn name="cableCir">
+          <Property name="property">cableCir</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="tempMax">
+          <Property name="property">tempMax</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="grainFreq">
+          <Property name="property">grainFreq</Property>
+        </DataColumn>
+        <DataColumn name="updateBy">
+          <Property name="property">updateBy</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+        </DataColumn>
+      </DataGrid>
+    </Container>
+    <UpdateAction id="uaMain">
+      <Property name="dataResolver">depotConfPR#saveConf</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="dataPath">[#current]</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxRefreshCache">
+      <Property name="service">depotConfPR#flushConfCache</Property>
+      <Property name="successMessage">鍒锋柊鎴愬姛锛�</Property>
+      <Property name="confirmMessage">纭畾瑕佸埛鏂扮紦瀛樹箞锛�</Property>
+    </AjaxAction>
+    <Dialog id="dgMain" layout="regionPadding:8">
+      <ClientEvent name="onShow">//鏍规嵁浠撳簱绫诲瀷涓嶅悓锛屾樉绀轰笉鍚岀殑閰嶇疆淇℃伅</ClientEvent>
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Property name="caption">妫�娴嬮厤缃弬鏁�</Property>
+      <Property name="width">75%</Property>
+      <Property name="closeable">false</Property>
+      <Buttons>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#uaMain&quot;).execute(function(){&#xD;
+	view.get(&quot;#dgMain&quot;).hide();&#xD;
+});</ClientEvent>
+          <Property name="caption">淇濆瓨</Property>
+          <Property name="iconClass">fa fa-check-circle</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">120</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain.data:#&quot;).cancel();&#xD;
+view.get(&quot;#dgMain&quot;).hide();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="iconClass">fa fa-times-circle</Property>
+          <Property name="width">120</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <FieldSet layout="padding:5">
+          <Property name="caption">绮俯妫�娴嬮厤缃�</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm layoutConstraint="padding:5">
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*,*</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <Property name="labelWidth">120</Property>
+              <AutoFormElement id="depotId">
+                <Property name="name">depotId</Property>
+                <Property name="property">depotId</Property>
+                <Property name="readOnly">true</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableRule</Property>
+                <Property name="property">cableRule</Property>
+                <Property name="label">甯冪嚎瑙勫垯</Property>
+                <Editor/>
+              </AutoFormElement>
+              <Label>
+                <Property name="text">璇存槑锛氬钩鏂逛粨锛氬眰-琛�-鍒楋紝绛掍粨锛氱1鍦堟牴鏁�-绗�2鍦堟牴鏁�-绗琻鍦堟牴鏁�</Property>
+                <Property name="style">
+                  <Property name="color">blue</Property>
+                </Property>
+              </Label>
+              <AutoFormElement>
+                <Property name="name">grainSer</Property>
+                <Property name="property">grainSer</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableCir</Property>
+                <Property name="property">cableCir</Property>
+                <Property name="label">灞傝鍒�</Property>
+                <Editor/>
+              </AutoFormElement>
+              <Label>
+                <Property name="text">璇存槑锛氬彧閽堝绛掍粨锛氱1鍦堝眰鏁�-绗�2鍦堝眰鏁�-绗琻鍦堝眰鏁�</Property>
+                <Property name="style">
+                  <Property name="color">blue</Property>
+                </Property>
+              </Label>
+              <AutoFormElement>
+                <Property name="name">cableStart</Property>
+                <Property name="property">cableStart</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableEnd</Property>
+                <Property name="property">cableEnd</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">startRow</Property>
+                <Property name="name">startRow</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">thSer</Property>
+                <Property name="property">thSer</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">thConf</Property>
+                <Property name="property">thConf</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">tempMax</Property>
+                <Property name="name">tempMax</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">temperature</Property>
+                <Property name="property">temperature</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">isOnlyTH</Property>
+                <Property name="property">isOnlyTH</Property>
+                <Editor/>
+              </AutoFormElement>
+              <Label>
+                <Property name="text">璇存槑锛氶粯璁ょ伯鎯呯數缂嗭紝涓烘俯婀垮害璁惧闇�閫夋嫨锛�</Property>
+                <Property name="style">
+                  <Property name="color">blue</Property>
+                </Property>
+              </Label>
+              <AutoFormElement>
+                <Property name="property">cableCone</Property>
+                <Property name="name">cableCone</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">startOrientation</Property>
+                <Property name="name">startOrientation</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">startDirection</Property>
+                <Property name="name">startDirection</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">grainAuto</Property>
+                <Property name="name">grainAuto</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">startPoint</Property>
+                <Property name="name">startPoint</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="property">startConvert</Property>
+                <Property name="name">startConvert</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">grainFreq</Property>
+                <Property name="property">grainFreq</Property>
+                <Editor/>
+              </AutoFormElement>
+              <Button>
+                <ClientEvent name="onClick">var grainFreq = view.get(&quot;#dsMain.data:#&quot;).get(&quot;grainFreq&quot;);&#xD;
+&#xD;
+if(grainFreq){&#xD;
+	view.get(&quot;#ajaxUpdateFreq&quot;).set(&quot;parameter&quot;,grainFreq).execute(function(){&#xD;
+		view.get(&quot;#dgMain&quot;).hide();&#xD;
+		view.get(&quot;#dsMain&quot;).flushAsync();&#xD;
+	});&#xD;
+}else{&#xD;
+	$alert(&quot;璇峰厛閰嶇疆鏇存柊棰戠巼锛�&quot;)&#xD;
+}</ClientEvent>
+                <Property name="caption">棰戠巼鍚屾</Property>
+                <Property name="tip">鏇存柊鎵�鏈変粨搴撻鐜囦竴鑷�</Property>
+                <Property name="iconClass">fa fa-refresh</Property>
+                <Property name="exClassName">btn2</Property>
+              </Button>
+              <AutoFormElement>
+                <Property name="name">createBy</Property>
+                <Property name="property">createBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createTime</Property>
+                <Property name="property">createTime</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateBy</Property>
+                <Property name="property">updateBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateTime</Property>
+                <Property name="property">updateTime</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <AjaxAction id="ajaxUpdateFreq">
+      <Property name="confirmMessage">纭畾瑕佹洿鏂版墍鏈変粨搴擄紵</Property>
+      <Property name="service">depotConfPR#updateFreq</Property>
+    </AjaxAction>
+    <AjaxAction id="ajaxDel2">
+      <Property name="successMessage">鍒犻櫎鎴愬姛</Property>
+      <Property name="service">depotConfPR#delDepotConf</Property>
+      <Property name="executingMessage">姝e湪鍒犻櫎</Property>
+      <Property name="confirmMessage">纭畾瑕佸垹闄や箞锛�</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConfPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConfPR.java
new file mode 100644
index 0000000..b159c22
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotConfPR.java
@@ -0,0 +1,77 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.fzzy.igds.domain.DepotConf;
+import com.fzzy.igds.service.DepotConfService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 15:44
+ */
+@Slf4j
+@Component
+public class DepotConfPR {
+
+    @Resource
+    private DepotConfService depotConfService;
+
+    /**
+     * 鍙傛暟閰嶇疆鍒楄〃 depotConfPR#getConfList
+     *
+     * @return
+     */
+    @DataProvider
+    public List<DepotConf> getConfList() {
+        return depotConfService.getConfList(null,null);
+    }
+
+    /**
+     * depotConfPR#saveConf 鍙傛暟閰嶇疆鏇存柊锛屽寘鎷柊澧炲拰淇敼
+     *
+     * @param conf
+     */
+    @DataResolver
+    public void saveConf(DepotConf conf) {
+        DepotConf depotConf = new DepotConf();
+        BeanUtils.copyProperties(conf, depotConf);
+        depotConfService.saveConf(depotConf);
+    }
+
+    /**
+     * depotConfPR#delDepotConf 鍒犻櫎鍙傛暟閰嶇疆
+     *
+     * @param conf
+     */
+    @Expose
+    public void delDepotConf(DepotConf conf) {
+        DepotConf depotConf = new DepotConf();
+        BeanUtils.copyProperties(conf, depotConf);
+        depotConfService.deleteDepotConf(depotConf);
+    }
+
+    /**
+     * depotConfPR#flushConfCache 鍒锋柊閰嶇疆缂撳瓨
+     */
+    @Expose
+    public void flushConfCache() {
+        depotConfService.flushConfCache(null);
+    }
+
+    /**
+     * depotConfPR#updateFreq 鏇存柊鎵�鏈夌伯搴撶殑绮儏棰戠巼
+     */
+    @Expose
+    public void updateFreq(String freq) {
+        depotConfService.updateFreq(freq);
+    }
+
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeptPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeptPR.java
index 2e0b8b3..ecac0dd 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeptPR.java
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeptPR.java
@@ -24,6 +24,18 @@
 	@Resource
 	private CoreDeptService coreDeptService;
 
+	/**
+	 * 鏌ヨ璁惧,灏嗘搷浣滀俊鎭皟鏁翠负绌猴紝榛樿鍖呮嫭鍒嗗簱鍙傛暟
+	 *
+	 * deptPR#getAllData
+	 *
+	 * @return
+	 */
+	@DataProvider
+	public List<Dept> getAllData() {
+
+		return coreDeptService.getAllDeptData();
+	}
 
 	/**
 	 * 鏌ヨ璁惧,灏嗘搷浣滀俊鎭皟鏁翠负绌猴紝榛樿鍖呮嫭鍒嗗簱鍙傛暟
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIot.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIot.view.xml
new file mode 100644
index 0000000..6f53ec5
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIot.view.xml
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dataTypeC">
+      <PropertyDef name="depotId">
+        <Property></Property>
+        <Property name="label">鎵�灞炰粨搴�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="type">
+        <Property></Property>
+        <Property name="label">璁惧绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;DEVICE_IOT_TYPE&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="serId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲垎鏈�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;deviceSerPR#getAllSerCache&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:10">
+    <ClientEvent name="onReady">view.get(&quot;#dataSetC&quot;).insert();</ClientEvent>
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsDeviceIot">
+      <Property name="dataProvider">deviceIotPR#loadDeviceIotPage</Property>
+      <Property name="pageSize">20</Property>
+      <Property name="loadMode">lazy</Property>
+      <Property name="dataType">[dtDeviceIot]</Property>
+    </DataSet>
+    <DataSet id="dataSetC">
+      <Property name="dataType">dataTypeC</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <AutoForm>
+        <Property name="cols">*,*,*,90,90,*</Property>
+        <Property name="labelWidth">100</Property>
+        <Property name="labelAlign">right</Property>
+        <Property name="dataSet">dataSetC</Property>
+        <AutoFormElement>
+          <Property name="name">depotId</Property>
+          <Property name="property">depotId</Property>
+          <Property name="trigger">autoOpenMappingDropDown2</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">serId</Property>
+          <Property name="property">serId</Property>
+          <Property name="trigger">autoOpenMappingDropDown2</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">type</Property>
+          <Property name="property">type</Property>
+          <Property name="trigger">autoOpenMappingDropDown2</Property>
+          <Editor/>
+        </AutoFormElement>
+        <Button>
+          <Property name="action">actionDeviceIotQuery</Property>
+          <Property name="caption">鎼滅储</Property>
+          <Property name="iconClass">fa fa-search</Property>
+          <Property name="exClassName">btn-q1</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dataSetC&quot;).setData({});</ClientEvent>
+          <Property name="caption">閲嶇疆</Property>
+          <Property name="exClassName">btn-q2</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+        </Button>
+      </AutoForm>
+    </Container>
+    <Container>
+      <Property name="className">c-data</Property>
+      <ToolBar>
+        <ToolBarButton>
+          <Property name="caption">鏂板</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-plus</Property>
+          <Property name="action">actionDeviceIotAdd</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="action">actionDeviceIotUpdate</Property>
+          <Property name="caption">淇敼</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-pencil-square-o</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="action">actionDeviceIotDelete</Property>
+          <Property name="caption">鍒犻櫎</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-times</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="caption">鍒锋柊缂撳瓨</Property>
+          <Property name="action">ajaxRefreshCache</Property>
+          <Property name="exClassName">btn4</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+          <Property name="width">100</Property>
+        </ToolBarButton>
+      </ToolBar>
+      <DataGrid id="gridDeviceIot" layoutConstraint="padding:8">
+        <ClientEvent name="onDataRowClick">view.get(&quot;#gridDeviceIot&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
+        <Property name="dataSet">dsDeviceIot</Property>
+        <Property name="readOnly">true</Property>
+        <Property name="selectionMode">singleRow</Property>
+        <RowSelectorColumn/>
+        <RowNumColumn/>
+        <DataColumn name="depotId">
+          <Property name="property">depotId</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="name">
+          <Property name="property">name</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="serId">
+          <Property name="property">serId</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="passCode">
+          <Property name="property">passCode</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="type">
+          <Property name="property">type</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="remark">
+          <Property name="property">remark</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="updateBy">
+          <Property name="property">updateBy</Property>
+          <Property name="align">center</Property>
+          <Property name="width">120</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+      </DataGrid>
+    </Container>
+    <Container layoutConstraint="bottom">
+      <Property name="className">c-bottom</Property>
+      <DataPilot layoutConstraint="right">
+        <Property name="dataSet">dsDeviceIot</Property>
+        <Property name="itemCodes">pageSize,pages</Property>
+      </DataPilot>
+    </Container>
+    <Dialog id="dialogDeviceIot" layout="regionPadding:8">
+      <ClientEvent name="onHide">view.id(&quot;dsDeviceIot&quot;).getData().cancel();</ClientEvent>
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Property name="caption">璁惧淇℃伅</Property>
+      <Property name="width">800</Property>
+      <Buttons>
+        <Button>
+          <Property name="action">actionDeviceIotSave</Property>
+          <Property name="caption">淇濆瓨</Property>
+          <Property name="iconClass">fa fa-check-circle</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">120</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dialogDeviceIot&quot;).hide();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="iconClass">fa fa-times-circle</Property>
+          <Property name="width">120</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <AutoForm>
+          <Property name="dataSet">dsDeviceIot</Property>
+          <Property name="cols">*,*</Property>
+          <Property name="labelWidth">100</Property>
+          <AutoFormElement>
+            <Property name="name">depotId</Property>
+            <Property name="property">depotId</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">name</Property>
+            <Property name="property">name</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">passCode</Property>
+            <Property name="property">passCode</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">serId</Property>
+            <Property name="property">serId</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">type</Property>
+            <Property name="property">type</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">remark</Property>
+            <Property name="property">remark</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">createBy</Property>
+            <Property name="property">createBy</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">createTime</Property>
+            <Property name="property">createTime</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">updateBy</Property>
+            <Property name="property">updateBy</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement>
+            <Property name="name">updateTime</Property>
+            <Property name="property">updateTime</Property>
+            <Editor/>
+          </AutoFormElement>
+        </AutoForm>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <Action id="actionDeviceIotQuery">
+      <ClientEvent name="onExecute">var entity = view.get(&quot;#dataSetC.data&quot;);&#xD;
+view.get(&quot;#dsDeviceIot&quot;).set(&quot;parameter&quot;,entity).flushAsync();</ClientEvent>
+      <ClientEvent name="onFailure">dorado.MessageBox.alert(arg.error,{&#xD;
+    title: '绯荤粺鎻愮ず淇℃伅'&#xD;
+});&#xD;
+arg.processDefault = false;</ClientEvent>
+      <Property name="hotkey">alt+q</Property>
+    </Action>
+    <Action id="actionDeviceIotAdd">
+      <ClientEvent name="onExecute">var dialog=view.get(&quot;#dialogDeviceIot&quot;);&#xD;
+var visible=dialog.get(&quot;actualVisible&quot;);&#xD;
+if(!visible){&#xD;
+	view.get(&quot;#dsDeviceIot&quot;).insert();&#xD;
+	dialog.set(&quot;caption&quot;,&quot;鏂板璁惧&quot;);&#xD;
+	dialog.show();&#xD;
+}</ClientEvent>
+    </Action>
+    <Action id="actionDeviceIotUpdate">
+      <ClientEvent name="onExecute">var entity = view.id(&quot;dsDeviceIot&quot;).getData(&quot;#&quot;);&#xD;
+var dialog=view.get(&quot;#dialogDeviceIot&quot;);&#xD;
+var visible = dialog.get(&quot;actualVisible&quot;);&#xD;
+var select = view.get(&quot;#gridDeviceIot&quot;).get(&quot;selection&quot;);&#xD;
+if(!visible){&#xD;
+	dialog.set(&quot;caption&quot;,&quot;淇敼璁惧&quot;);&#xD;
+	if(select){&#xD;
+		dialog.show();&#xD;
+	}else{&#xD;
+		dorado.MessageBox.alert(&quot;璇烽�夋嫨闇�瑕佷慨鏀圭殑鏁版嵁鈥︹��&quot;);&#xD;
+	}&#xD;
+}&#xD;
+view.get(&quot;^isKey&quot;).each(function(item){&#xD;
+	item.set(&quot;readOnly&quot;,true);&#xD;
+});</ClientEvent>
+    </Action>
+    <Action id="actionDeviceIotDelete">
+      <ClientEvent name="onExecute">var dialog=view.get(&quot;#dialogDeviceIot&quot;);&#xD;
+var visible = dialog.get(&quot;actualVisible&quot;);&#xD;
+var dsDeviceIot=view.get(&quot;#dsDeviceIot&quot;);&#xD;
+var actionDeviceIotSave=view.get(&quot;#actionDeviceIotSave&quot;);&#xD;
+var select = view.get(&quot;#gridDeviceIot&quot;).get(&quot;selection&quot;);&#xD;
+if(!visible){&#xD;
+	if(!select){&#xD;
+		dorado.MessageBox.alert(&quot;璇峰厛閫夋嫨瑕佹搷浣滅殑鏁版嵁锛�&quot;);&#xD;
+		return;&#xD;
+	}else{&#xD;
+		dorado.MessageBox.confirm(&quot;纭畾瑕佸垹闄よ繖鏉¤褰曞悧锛�&quot;,{&#xD;
+	    detailCallback: function(button,text){&#xD;
+			if(&quot;yes&quot;==button){&#xD;
+				select.remove();&#xD;
+				actionDeviceIotSave.execute();&#xD;
+			}&#xD;
+	    }});&#xD;
+	}&#xD;
+}</ClientEvent>
+    </Action>
+    <UpdateAction id="actionDeviceIotSave">
+      <ClientEvent name="onFailure">if(arg.error){&#xD;
+	dorado.MessageBox.alert(arg.error,{&#xD;
+	    title: '绯荤粺鎻愮ず淇℃伅'&#xD;
+	});&#xD;
+	arg.processDefault = false;&#xD;
+}</ClientEvent>
+      <ClientEvent name="onSuccess">view.get(&quot;#dialogDeviceIot&quot;).close();</ClientEvent>
+      <Property name="dataResolver">deviceIotPR#saveAll</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsDeviceIot</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxRefreshCache">
+      <Property name="service">deviceIotPR#refreshCache</Property>
+      <Property name="successMessage">鍒锋柊鎴愬姛锛�</Property>
+      <Property name="confirmMessage">纭畾瑕佸埛鏂扮紦瀛樹箞锛�</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIotPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIotPR.java
new file mode 100644
index 0000000..59e6614
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceIotPR.java
@@ -0,0 +1,132 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.bstek.dorado.data.entity.EntityState;
+import com.bstek.dorado.data.entity.EntityUtils;
+import com.bstek.dorado.data.provider.Page;
+import com.fzzy.igds.domain.DeviceIot;
+import com.fzzy.igds.service.DeviceIotService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 14:53
+ */
+@Component
+public class DeviceIotPR {
+
+	@Resource
+	private DeviceIotService deviceIotService;
+
+	/**
+	 * 鏌ヨ璁惧,灏嗘搷浣滀俊鎭皟鏁翠负绌�
+	 * 
+	 * deviceIotPR#loadDeviceIotPage
+	 *
+	 * @param page
+	 * @param param
+	 * @return
+	 */
+	@DataProvider
+	public void loadDeviceIotPage(Page<DeviceIot> page, Map<String, Object> param) {
+		if (null == param) {
+			param = new HashMap<>();
+		}
+		Map<String, Object> finalParam = param;
+
+		//澶氬弬鏁板垎椤垫煡璇�
+		Pageable pageable = PageRequest.of(page.getPageNo() - 1, page.getPageSize(), Sort.Direction.ASC, DeviceIot.SORT_PROP);
+		Specification<DeviceIot> specification = new Specification<DeviceIot>() {
+			private static final long serialVersionUID = 1L;
+
+			public Predicate toPredicate(Root<DeviceIot> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+				List<Predicate> predicates = new ArrayList<Predicate>(); //鎵�鏈夌殑鏂█
+
+				Predicate predicate1 = cb.equal(root.get("companyId"), ContextUtil.getCompanyId());
+				predicates.add(predicate1);
+				predicate1 = cb.equal(root.get("deptId"), ContextUtil.subDeptId(null));
+				predicates.add(predicate1);
+
+				String key = (String) finalParam.get("depotId");
+				if (StringUtils.isNotEmpty(key)) {
+					predicate1 = cb.equal(root.get("depotId"), key);
+					predicates.add(predicate1);
+				}
+				key = (String) finalParam.get("type");
+				if (StringUtils.isNotEmpty(key)) {
+					predicate1 = cb.equal(root.get("type"), key);
+					predicates.add(predicate1);
+				}
+				key = (String) finalParam.get("serId");
+				if (StringUtils.isNotEmpty(key)) {
+					predicate1 = cb.equal(root.get("serId"), key);
+					predicates.add(predicate1);
+				}
+
+				return cb.and(predicates.toArray(new Predicate[0]));
+			}
+		};
+		org.springframework.data.domain.Page<DeviceIot> japPage = deviceIotService.findAll(specification, pageable);
+		page.setEntityCount((int) japPage.getTotalElements());
+		page.setEntities(japPage.getContent());
+	}
+
+	/**
+	 * 淇濆瓨 devicePR#saveAll
+	 * 
+	 * @param depotDeviceIots
+	 * @return
+	 */
+	@DataResolver
+	@Transactional
+	public String saveAll(List<DeviceIot> depotDeviceIots) {
+		String msg = "";
+		DeviceIot deviceIot;
+		for (DeviceIot depotDeviceIot : depotDeviceIots) {
+			EntityState state = EntityUtils.getState(depotDeviceIot);
+			deviceIot = new DeviceIot();
+			BeanUtils.copyProperties(depotDeviceIot, deviceIot);
+			if (state == EntityState.NEW) {
+				deviceIotService.updateDeviceIot(deviceIot);
+				msg = "娣诲姞鎴愬姛!";
+			}
+			if (state == EntityState.DELETED) {
+				deviceIotService.delDepotDeviceIot(deviceIot);
+				msg = "鍒犻櫎鎴愬姛!";
+			}
+			if (state == EntityState.MODIFIED) {
+				deviceIotService.updateDeviceIot(deviceIot);
+				msg = "淇敼鎴愬姛!";
+			}
+		}
+		return msg;
+	}
+	
+	/**
+	 * devicePR#refreshCache
+	 */
+	@Expose
+	public void refreshCache(){
+		deviceIotService.refreshCache(null);
+	}
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSer.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSer.view.xml
new file mode 100644
index 0000000..c425b0d
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSer.view.xml
@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model/>
+  <View layout="padding:10">
+    <ClientEvent name="onReady">&#xD;
+addData = function(){&#xD;
+	view.get(&quot;#dsDeviceSer&quot;).insert();&#xD;
+	view.get(&quot;#dialog1&quot;).set(&quot;caption&quot;,&quot;娣诲姞鍒嗘満&quot;);&#xD;
+&#xD;
+	view.get(&quot;#dialog1&quot;).show();&#xD;
+};&#xD;
+&#xD;
+delData = function(){&#xD;
+	var cur = view.get(&quot;#dsDeviceSer.data:#&quot;);&#xD;
+	if(!cur) return;&#xD;
+	cur.setState(dorado.Entity.STATE_DELETED);&#xD;
+	$confirm(&quot;纭畾瑕佸垹闄よ鏁版嵁涔堬紵&quot;,function(){&#xD;
+		view.get(&quot;#uaSave&quot;).execute(function(){&#xD;
+			cur.remove();&#xD;
+		});&#xD;
+	});&#xD;
+};&#xD;
+&#xD;
+btnCancel = function(){&#xD;
+	view.get(&quot;#dialog1&quot;).hide();&#xD;
+};&#xD;
+&#xD;
+onDialogHide = function(){&#xD;
+	var cur = view.get(&quot;#dsDeviceSer.data:#&quot;);&#xD;
+	cur.cancel();&#xD;
+};</ClientEvent>
+    <Property name="packages">font-awesome,css-common</Property>
+    <Property name="cache">
+      <Property name="mode">clientSide</Property>
+    </Property>
+    <DataSet id="dsDeviceSer">
+      <Property name="parameter"></Property>
+      <Property name="dataProvider">deviceSerPR#getAllSer</Property>
+      <Property name="dataType">[dtDeviceSer]</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <ToolBar>
+        <ToolBarButton>
+          <ClientEvent name="onClick">addData();</ClientEvent>
+            <Property name="caption">鏂板</Property>
+            <Property name="exClassName">btn1</Property>
+            <Property name="width">100</Property>
+            <Property name="iconClass">fa fa-plus</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">&#xD;
+var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
+if(select){&#xD;
+    view.get(&quot;#dialog1&quot;).show();&#xD;
+}else{&#xD;
+    $notify(&quot;璇烽�夋嫨闇�瑕佷慨鏀圭殑鏁版嵁鈥︹��&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">淇敼</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-pencil-square-o</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">
+var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
+if(select){&#xD;
+    view.get(&quot;#ajaxActionDel&quot;).set(&quot;parameter&quot;,{&#xD;id: select.get(&quot;id&quot;)&#xD;
+        }).execute(function(){&#xD;
+        select.remove();&#xD;
+    });&#xD;
+}else{&#xD;
+    $notify(&quot;璇烽�夋嫨闇�瑕佸垹闄ょ殑鏁版嵁鈥︹��&quot;);&#xD;
+}&#xD;</ClientEvent>
+          <Property name="caption">鍒犻櫎</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-times</Property>
+          <Property name="action">ajaxActionDel</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">view.get(&quot;#dsDeviceSer&quot;).flushAsync();&#xD;
+          </ClientEvent>
+          <Property name="caption">鍒锋柊鏁版嵁</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="caption">鍒锋柊缂撳瓨</Property>
+          <Property name="exClassName">btn4</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+          <Property name="width">100</Property>
+          <Property name="action">ajaxRefreshCache</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="caption">杩滅▼鎿嶄綔</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="iconClass">fa fa-flag-checkered</Property>
+          <Property name="width">120</Property>
+          <Property name="menu">menuPull</Property>
+        </ToolBarButton>
+      </ToolBar>
+      <DataGrid id="dataGridMain" layoutConstraint="padding:8">
+        <ClientEvent name="onDataRowClick">view.get(&quot;#dataGridMain&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
+        <Property name="dataSet">dsDeviceSer</Property>
+        <Property name="readOnly">true</Property>
+        <Property name="selectionMode">singleRow</Property>
+        <RowSelectorColumn/>
+        <RowNumColumn/>
+        <DataColumn name="id">
+          <Property name="property">id</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="name">
+          <Property name="property">name</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="deptId">
+          <Property name="property">deptId</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="ip">
+          <Property name="property">ip</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="port">
+          <Property name="property">port</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="status">
+          <ClientEvent name="onRenderCell">arg.dom.style.background = arg.data.get(&quot;status&quot;)== 'Y' ?&quot;&quot;:&quot;#FF5722&quot;;&#xD;
+arg.processDefault = true;</ClientEvent>
+          <Property name="property">status</Property>
+          <Property name="align">center</Property>
+          <Property name="width">120</Property>
+        </DataColumn>
+        <DataColumn name="protocol">
+          <Property name="property">protocol</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="updateBy">
+          <Property name="property">updateBy</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+          <Property name="width">180</Property>
+        </DataColumn>
+      </DataGrid>
+    </Container>
+    <Dialog id="dialog1" layout="regionPadding:8">
+      <ClientEvent name="onHide">onDialogHide();</ClientEvent>
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Property name="width">1200</Property>
+      <Property name="caption">鍒嗘満淇℃伅</Property>
+      <Property name="closeable">false</Property>
+      <Buttons>
+        <Button>
+          <ClientEvent name="onClick">var cur = view.get(&quot;#dsDeviceSer.data:#&quot;);&#xD;
+if(cur.validate() == 'ok'){&#xD;
+	view.get(&quot;#updateAction&quot;).execute(function(){&#xD;
+		view.get(&quot;#dialog1&quot;).close();&#xD;
+	});&#xD;
+}else{&#xD;
+	$alert(&quot;鏁版嵁鏍¢獙澶辫触锛�&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">淇濆瓨</Property>
+          <Property name="iconClass">fa fa-check-circle</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">120</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">btnCancel();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="iconClass">fa fa-times-circle</Property>
+          <Property name="width">120</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <FieldSet layout="padding:5">
+          <Property name="caption">鍩烘湰淇℃伅</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsDeviceSer</Property>
+              <Property name="cols">*,*,*</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelWidth">100</Property>
+              <AutoFormElement>
+                <Property name="name">id</Property>
+                <Property name="property">id</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">name</Property>
+                <Property name="property">name</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">deptId</Property>
+                <Property name="property">deptId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">sn</Property>
+                <Property name="property">sn</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">ip</Property>
+                <Property name="property">ip</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">port</Property>
+                <Property name="property">port</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">type</Property>
+                <Property name="property">type</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">protocol</Property>
+                <Property name="property">protocol</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">controlModel</Property>
+                <Property name="property">controlModel</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">powerModel</Property>
+                <Property name="property">powerModel</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">networkType</Property>
+                <Property name="property">networkType</Property>
+                <Property name="label">缁堢鑱旂綉</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">status</Property>
+                <Property name="property">status</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">isMoreDepot</Property>
+                <Property name="property">isMoreDepot</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">orderNum</Property>
+                <Property name="property">orderNum</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+        <FieldSet layout="padding:5">
+          <Property name="caption">閰嶇疆淇℃伅</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsDeviceSer</Property>
+              <Property name="cols">*,*,*,*</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelWidth">100</Property>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">producer</Property>
+                <Property name="property">producer</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">contactPhone</Property>
+                <Property name="property">contactPhone</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableFormat</Property>
+                <Property name="property">cableFormat</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableZ</Property>
+                <Property name="property">cableZ</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableY</Property>
+                <Property name="property">cableY</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableX</Property>
+                <Property name="property">cableX</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableStart</Property>
+                <Property name="property">cableStart</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">remark</Property>
+                <Property name="property">remark</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">cableType</Property>
+                <Property name="property">cableType</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">orgId</Property>
+                <Property name="property">orgId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createBy</Property>
+                <Property name="property">createBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createTime</Property>
+                <Property name="property">createTime</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateBy</Property>
+                <Property name="property">updateBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateTime</Property>
+                <Property name="property">updateTime</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <UpdateAction id="updateAction">
+      <Property name="dataResolver">deviceSerPR#updateSer</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsDeviceSer</Property>
+        <Property name="dataPath">[#current]</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxActionDel">
+      <Property name="service">deviceSerPR#delSerById</Property>
+      <Property name="confirmMessage">纭畾瑕佸垹闄や箞锛�</Property>
+      <Property name="executingMessage">姝e湪鍒犻櫎</Property>
+      <Property name="successMessage">鍒犻櫎鎴愬姛</Property>
+    </AjaxAction>
+    <AjaxAction id="ajaxRefreshCache">
+      <Property name="service">deviceSerPR#refreshCache</Property>
+      <Property name="successMessage">鍒锋柊鎴愬姛锛�</Property>
+      <Property name="confirmMessage">纭畾瑕佸埛鏂扮紦瀛樹箞锛�</Property>
+    </AjaxAction>
+    <Menu id="menuPull">
+      <MenuItem>
+        <ClientEvent name="onClick">var cur = view.get(&quot;#dsDeviceSer.data:#&quot;);&#xD;
+view.get(&quot;#ajaxUpdateDepot&quot;).set(&quot;parameter&quot;,cur.get(&quot;id&quot;)).execute(function(result){&#xD;
+	if(result){&#xD;
+		$alert(result);&#xD;
+	}else{&#xD;
+		$alert(&quot;鍛戒护鍙戦�佹垚鍔燂紝璇风瓑寰呯粓绔繑鍥烇紒锛�&quot;);&#xD;
+	}&#xD;
+});</ClientEvent>
+        <Property name="caption">杩滅▼鍚屾浠撳簱</Property>
+        <Property name="iconClass">fa fa-thumbs-o-up</Property>
+      </MenuItem>
+      <MenuItem>
+        <ClientEvent name="onClick">var cur = view.get(&quot;#dsDeviceSer.data:#&quot;);&#xD;
+view.get(&quot;#ajaxUpdateDevice&quot;).set(&quot;parameter&quot;,cur.get(&quot;id&quot;)).execute(function(result){&#xD;
+	if(result){&#xD;
+		$alert(result);&#xD;
+	}else{&#xD;
+		$alert(&quot;鍛戒护鍙戦�佹垚鍔燂紝璇风瓑寰呯粓绔繑鍥烇紒锛�&quot;);&#xD;
+	}&#xD;
+});</ClientEvent>
+        <Property name="caption">杩滅▼鍚屾璁惧</Property>
+        <Property name="iconClass">fa fa-thumbs-o-up</Property>
+      </MenuItem>
+      <MenuItem>
+        <ClientEvent name="onClick">var cur = view.get(&quot;#dsDeviceSer.data:#&quot;);&#xD;
+dorado.MessageBox.prompt(&quot;璇疯緭鍏ユ巿鏉冪爜锛�&quot;,function(txt){&#xD;
+	view.get(&quot;#ajaxAccess&quot;).set(&quot;parameter&quot;,{serId:cur.get(&quot;id&quot;),accessCode:txt}).execute(function(result){&#xD;
+		if(result){&#xD;
+			$alert(result);&#xD;
+		}else{&#xD;
+			$alert(&quot;鍛戒护鍙戦�佹垚鍔燂紝璇风瓑寰呯粓绔繑鍥烇紒锛�&quot;);&#xD;
+		}&#xD;
+	});&#xD;
+});</ClientEvent>
+        <Property name="caption">杩滅▼鎺堟潈</Property>
+        <Property name="iconClass">fa fa-thumbs-o-up</Property>
+      </MenuItem>
+    </Menu>
+    <AjaxAction id="ajaxUpdateDevice">
+      <Property name="service">pullPR#pullDeviceBySer</Property>
+      <Property name="confirmMessage">纭畾瑕佸悓姝ヨ繙绋嬫帶鍒舵煖涓殑璁惧閰嶇疆鍒板钩鍙颁箞锛�</Property>
+      <Property name="executingMessage">鎸囦护鍙戦�佷腑鈥︹��</Property>
+    </AjaxAction>
+    <AjaxAction id="ajaxUpdateDepot">
+      <Property name="service">pullPR#pullDepotBySer</Property>
+      <Property name="confirmMessage">纭畾瑕佸悓姝ヨ繙绋嬫帶鍒舵煖涓殑浠撳簱閰嶇疆鍒板钩鍙颁箞锛�</Property>
+      <Property name="executingMessage">鎸囦护鍙戦�佷腑鈥︹��</Property>
+    </AjaxAction>
+    <AjaxAction id="ajaxAccess">
+      <Property name="service">pullPR#pullAccess</Property>
+      <Property name="executingMessage">鎸囦护鍙戦�佷腑鈥︹��</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSerPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSerPR.java
new file mode 100644
index 0000000..b2983b0
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DeviceSerPR.java
@@ -0,0 +1,105 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.fzzy.igds.domain.DeviceSer;
+import com.fzzy.igds.service.DeviceSerService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 13:50
+ */
+@Component
+public class DeviceSerPR {
+
+    @Resource
+    private DeviceSerService deviceSerService;
+
+    /**
+     * deviceSerPR#getAllSer
+     *
+     * @return
+     */
+    @DataProvider
+    public List<DeviceSer> getAllSer() {
+        return deviceSerService.getAllSer();
+    }
+
+    /**
+     * deviceSerPR#getDataById
+     *
+     * @param id
+     * @return
+     */
+    @Expose
+    public DeviceSer getDataById(String id) {
+        return deviceSerService.getDataById(null, id);
+    }
+
+    /**
+     * deviceSerPR#updateSer
+     *
+     * @param data
+     */
+    @DataResolver
+    public void updateSer(DeviceSer data) {
+        DeviceSer deviceSer = new DeviceSer();
+        BeanUtils.copyProperties(data, deviceSer);
+        if(null == data.getOrderNum()){
+            data.setOrderNum(1);
+        }
+        deviceSerService.saveSer(deviceSer);
+    }
+
+    /**
+     * 鏍规嵁鍒嗘満id鍜屽悕绉板垹闄ゅ垎鏈�
+     */
+    @Expose
+    @Transactional
+    public void delSerById(String id) {
+
+        DeviceSer ser = deviceSerService.getDataById(null, id);
+        deviceSerService.delSer(ser);
+    }
+
+    /**
+     * deviceSerPR#refreshCache
+     *
+     * @throws
+     * @Title: refreshCache
+     * @Description: 鍒锋柊缂撳瓨 void
+     */
+    @Expose
+    public void refreshCache() {
+        deviceSerService.refreshCache(null);
+    }
+
+    /**
+     * ${dorado.getDataProvider("deviceSerPR#getAllSerCache").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<DeviceSer> getAllSerCache() {
+        return deviceSerService.getCacheSerList(null);
+    }
+
+    /**
+     * ${dorado.getDataProvider("deviceSerPR#getSerCacheByType").getResult("01")}
+     *
+     * @param type
+     * @return
+     */
+    @DataProvider
+    public List<DeviceSer> getSerCacheByType(String type) {
+        return deviceSerService.getSerCacheByType(null, type);
+    }
+
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicArea.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicArea.view.xml
index 2ee1fdb..b419740 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicArea.view.xml
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicArea.view.xml
@@ -135,7 +135,7 @@
             $notify(&quot;鏁版嵁鎵ц瀹屾垚锛侊紒&quot;);&#xD;
             self.get(&quot;parent&quot;).hide();&#xD;
             });</ClientEvent>
-          <Property name="caption">纭畾</Property>
+          <Property name="caption">淇濆瓨</Property>
           <Property name="iconClass">fa fa-check-circle</Property>
           <Property name="exClassName">btn1</Property>
           <Property name="width">120</Property>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java
index 42daa21..1d693b4 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DicPR.java
@@ -222,4 +222,59 @@
         return dicService.triggerNoticeType();
     }
 
+    /**
+     * 鐢电紗璧峰鏂逛綅
+     * ${dorado.getDataProvider("dicPR#triggerStartOrientation").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<SysDictData> triggerStartOrientation() {
+        return dicService.triggerStartOrientation();
+    }
+
+    /**
+     * 鐢电紗甯冪嚎鏂瑰悜
+     * ${dorado.getDataProvider("dicPR#triggerStartDirection").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<SysDictData> triggerStartDirection() {
+        return dicService.triggerStartDirection();
+    }
+
+    /**
+     * 鐢电紗璧峰鐐逛綅
+     * ${dorado.getDataProvider("dicPR#triggerStartPoint").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<SysDictData> triggerStartPoint() {
+        return dicService.triggerStartPoint();
+    }
+
+    /**
+     * 灞傝杞崲
+     * ${dorado.getDataProvider("dicPR#triggerStartConvert").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<SysDictData> triggerStartConvert() {
+        return dicService.triggerStartConvert();
+    }
+
+    /**
+     * 绛掍粨閿ュ舰
+     * ${dorado.getDataProvider("dicPR#triggerCableCone").getResult()}
+     *
+     * @return
+     */
+    @DataProvider
+    public List<SysDictData> triggerCableCone() {
+        return dicService.triggerCableCone();
+    }
+
 }
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConf.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConf.view.xml
new file mode 100644
index 0000000..034b457
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConf.view.xml
@@ -0,0 +1,804 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtMain">
+      <Property name="creationType">com.fzzy.igds.domain.InoutConf</Property>
+      <PropertyDef name="id">
+        <Property></Property>
+        <Property name="label">涓婚敭</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="deptId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲簱鍖�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">kqmc</Property>
+        </Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="sort">
+        <Property name="label">鎵�灞為厤濂楀彿</Property>
+        <Property name="required">true</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">1</Property>
+                <Property name="name">娴佺▼閰嶇疆#1</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">2</Property>
+                <Property name="name">娴佺▼閰嶇疆#2</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="inOrder">
+        <Property name="dataType">int</Property>
+        <Property name="label">璁惧椤哄簭</Property>
+      </PropertyDef>
+      <PropertyDef name="inoutProgress">
+        <Property></Property>
+        <Property name="label">鎵�灞炴祦绋�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;PROCESS_STATUS_&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="name">
+        <Property></Property>
+        <Property name="label">璁惧鍚嶇О</Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="sn">
+        <Property></Property>
+        <Property name="label">璁惧搴忓垪鍙�</Property>
+      </PropertyDef>
+      <PropertyDef name="ip">
+        <Property></Property>
+        <Property name="label">IP鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="port">
+        <Property name="dataType">Integer</Property>
+        <Property name="label">璁惧绔彛</Property>
+      </PropertyDef>
+      <PropertyDef name="loginId">
+        <Property></Property>
+        <Property name="label">鐧诲綍甯愬彿</Property>
+      </PropertyDef>
+      <PropertyDef name="pwd">
+        <Property></Property>
+        <Property name="label">鐧诲綍瀵嗙爜</Property>
+      </PropertyDef>
+      <PropertyDef name="chanNum">
+        <Property name="dataType">int</Property>
+        <Property name="label">閫氶亾鍙�</Property>
+      </PropertyDef>
+      <PropertyDef name="portCtrl">
+        <Property name="dataType">Integer</Property>
+        <Property name="label">鎺у埗绔彛</Property>
+      </PropertyDef>
+      <PropertyDef name="type">
+        <Property></Property>
+        <Property name="label">璁惧绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">10</Property>
+                <Property name="name">杞︾墝璇嗗埆璁惧</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">20</Property>
+                <Property name="name">鎵︽牱鏈鸿澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">30</Property>
+                <Property name="name">鍦扮璁惧</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">21</Property>
+                <Property name="name">鍖栭獙鏈�</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">40</Property>
+                <Property name="name">LED鏄剧ず灞�</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">60</Property>
+                <Property name="name">杩囩▼鎽勫儚澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">70</Property>
+                <Property name="name">绉伴噸鎺у埗鍣�</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">80</Property>
+                <Property name="name">鏅烘収鍗�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="status">
+        <Property></Property>
+        <Property name="label">璁惧鐘舵��</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">NONE</Property>
+                <Property name="name">鏈煡</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">NORMAL</Property>
+                <Property name="name">姝e父鍦ㄧ嚎</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">NO_SIGNAL</Property>
+                <Property name="name">鏈繛鎺�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="protocol">
+        <Property></Property>
+        <Property name="label">鎵�灞炲崗璁�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;PROTOCOL&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="playType">
+        <Property></Property>
+        <Property name="label">鎾斁鏂瑰紡</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerPlayType&quot;).getResult()}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="snapType">
+        <Property></Property>
+        <Property name="label">鎶撴媿鏂瑰紡</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerSnapType&quot;).getResult()}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="plateSnapType">
+        <Property></Property>
+        <Property name="label">鎶撳浘璇嗗埆</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">Y</Property>
+                <Property name="name">鏄�</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">N</Property>
+                <Property name="name">鍚�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="urlIn">
+        <Property></Property>
+        <Property name="label">鍐呯綉鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="urlOut">
+        <Property></Property>
+        <Property name="label">澶栫綉鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="mediaAddr">
+        <Property></Property>
+        <Property name="label">RTSP鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="remark">
+        <Property></Property>
+        <Property name="label">澶囨敞淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="errorMsg">
+        <Property></Property>
+        <Property name="label">寮傚父璇存槑</Property>
+      </PropertyDef>
+      <PropertyDef name="createTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鍒涘缓鏃堕棿</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="createBy">
+        <Property></Property>
+        <Property name="label">鍒涘缓浜�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="updateTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鏇存柊鏃堕棿</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="updateBy">
+        <Property></Property>
+        <Property name="label">鏇存柊浜�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:10">
+    <ClientEvent name="onReady">var deptId = &quot;${request.getParameter('deptId')}&quot;;&#xD;
+//鏌ヨ&#xD;
+query = function(){&#xD;
+	var data = {deptId:deptId};&#xD;
+	view.get(&quot;#dsMain&quot;).set(&quot;parameter&quot;,data).flushAsync();&#xD;
+};&#xD;
+query();&#xD;
+&#xD;
+&#xD;
+add = function(){&#xD;
+	view.get(&quot;#dsMain&quot;).insert({&#xD;
+		deptId:deptId,&#xD;
+		inOrder:1,&#xD;
+		chanNum:1&#xD;
+	});&#xD;
+	view.get(&quot;#dialogMain&quot;).show();&#xD;
+}</ClientEvent>
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="dataProvider">inoutConfPR#getData</Property>
+      <Property name="dataType">[dtMain]</Property>
+      <Property name="loadMode">manual</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <ToolBar>
+        <ToolBarButton>
+          <ClientEvent name="onClick">add();</ClientEvent>
+          <Property name="caption">鏂板</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-plus</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">&#xD;
+            var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
+            if(select){&#xD;
+            view.get(&quot;#dialogMain&quot;).show();;&#xD;
+            }else{&#xD;
+            $notify(&quot;璇烽�夋嫨闇�瑕佷慨鏀圭殑鏁版嵁鈥︹��&quot;);&#xD;
+            }	</ClientEvent>
+          <Property name="caption">淇敼</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-pencil-square-o</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">					  &#xD;
+            var select = view.get(&quot;#dataGridMain&quot;).get(&quot;selection&quot;);&#xD;
+            if(select){&#xD;
+            view.get(&quot;#ajaxDel&quot;).set(&quot;parameter&quot;,select).execute(function(){&#xD;
+            select.remove();&#xD;
+            });&#xD;
+            }else{&#xD;
+            $notify(&quot;璇烽�夋嫨闇�瑕佸垹闄ょ殑鏁版嵁鈥︹��&quot;);&#xD;
+            }&#xD;</ClientEvent>
+          <Property name="caption">鍒犻櫎</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-times</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">var data = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+            if(!data){&#xD;
+            return;&#xD;
+            }&#xD;
+            view.get(&quot;#ajaxFlushCache&quot;).set(&quot;parameter&quot;,data).execute();</ClientEvent>
+          <Property name="caption">鍒锋柊缂撳瓨</Property>
+          <Property name="exClassName">btn4</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+          <Property name="width">100</Property>
+          <Property name="action">ajaxRefreshCache</Property>
+        </ToolBarButton>
+      </ToolBar>
+      <DataGrid id="dataGridMain" layoutConstraint="padding:8">
+        <ClientEvent name="onDataRowClick">view.get(&quot;#dataGridMain&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="selectionMode">singleRow</Property>
+        <Property name="readOnly">true</Property>
+        <Property name="groupProperty">sort</Property>
+        <RowSelectorColumn/>
+        <RowNumColumn/>
+        <DataColumn name="sort">
+          <Property name="property">sort</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="name">
+          <Property name="property">name</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="inoutProgress">
+          <Property name="property">inoutProgress</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="type">
+          <Property name="property">type</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="status">
+          <Property name="property">status</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="sn">
+          <Property name="property">sn</Property>
+        </DataColumn>
+        <DataColumn name="protocol">
+          <Property name="property">protocol</Property>
+        </DataColumn>
+        <DataColumn name="updateBy">
+          <Property name="property">updateBy</Property>
+          <Property name="align">center</Property>
+          <Property name="width">100</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+      </DataGrid>
+    </Container>
+    <Dialog id="dialogMain" layout="regionPadding:8">
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Property name="caption">鍑哄叆搴撻厤濂楄澶�</Property>
+      <Property name="width">70%</Property>
+      <Property name="closeable">false</Property>
+      <Buttons>
+        <Button>
+          <ClientEvent name="onClick">var data = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+                        &#xD;
+                        if(data.validate() != 'ok'){&#xD;
+                        $notify(&quot;鏁版嵁鏍¢獙澶辫触锛侊紒&quot;);&#xD;
+                        return;&#xD;
+                        }&#xD;
+                        &#xD;
+                        view.get(&quot;#ajaxSave&quot;).set(&quot;parameter&quot;,data).execute(function(result){&#xD;
+                        if(result){&#xD;
+                        $alert(result);&#xD;
+                        return;&#xD;
+                        }&#xD;
+                        $notify(&quot;鏁版嵁鎵ц瀹屾垚锛侊紒&quot;);&#xD;
+                        self.get(&quot;parent&quot;).hide();&#xD;
+                        });</ClientEvent>
+          <Property name="caption">纭畾</Property>
+          <Property name="iconClass">fa fa-check</Property>
+          <Property name="exClassName">btn1</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain.data:#&quot;).cancel();&#xD;
+                        self.get(&quot;parent&quot;).hide();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="iconClass">fa fa-times</Property>
+          <Property name="exClassName">btn3</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <FieldSet layout="padding:5">
+          <Property name="caption">璁惧淇℃伅</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*,*</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <Property name="labelWidth">100</Property>
+              <AutoFormElement>
+                <Property name="name">name</Property>
+                <Property name="property">name</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">type</Property>
+                <Property name="property">type</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">sort</Property>
+                <Property name="property">sort</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">inoutProgress</Property>
+                <Property name="property">inoutProgress</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">protocol</Property>
+                <Property name="property">protocol</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">status</Property>
+                <Property name="property">status</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">ip</Property>
+                <Property name="property">ip</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createBy</Property>
+                <Property name="property">createBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createTime</Property>
+                <Property name="property">createTime</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">port</Property>
+                <Property name="property">port</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateBy</Property>
+                <Property name="property">updateBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateTime</Property>
+                <Property name="property">updateTime</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+        <FieldSet layoutConstraint="padding:5">
+          <Property name="caption">鐩戞帶淇℃伅</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*,*</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <Property name="labelWidth">100</Property>
+              <AutoFormElement>
+                <Property name="name">loginId</Property>
+                <Property name="property">loginId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">pwd</Property>
+                <Property name="property">pwd</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">portCtrl</Property>
+                <Property name="property">portCtrl</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">playType</Property>
+                <Property name="property">playType</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">chanNum</Property>
+                <Property name="property">chanNum</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">inOrder</Property>
+                <Property name="property">inOrder</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">snapType</Property>
+                <Property name="property">snapType</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">sn</Property>
+                <Property name="property">sn</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">plateSnapType</Property>
+                <Property name="property">plateSnapType</Property>
+                <Editor/>
+              </AutoFormElement>
+              <Label layoutConstraint="colSpan:2">
+                <Property name="style">
+                  <Property name="color">blue</Property>
+                </Property>
+                <Property name="text">娉細姝ら厤缃�傜敤浜庨姝h嚧杩淎PI-HTTP鍗忚</Property>
+              </Label>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+        <FieldSet layoutConstraint="padding:5">
+          <Property name="caption">鎾斁閰嶇疆</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <Property name="labelWidth">100</Property>
+              <AutoFormElement>
+                <Property name="name">urlIn</Property>
+                <Property name="property">urlIn</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">urlOut</Property>
+                <Property name="property">urlOut</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">mediaAddr</Property>
+                <Property name="property">mediaAddr</Property>
+                <Property name="trigger">triggerMedia</Property>
+                <Editor>
+                  <TextEditor id="mediaAddr"/>
+                </Editor>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">remark</Property>
+                <Property name="property">remark</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <AjaxAction id="ajaxSave">
+      <Property name="service">inoutConfPR#saveData</Property>
+    </AjaxAction>
+    <AjaxAction id="ajaxDel">
+      <Property name="service">inoutConfPR#delData</Property>
+      <Property name="confirmMessage">纭畾瑕佸垹闄や箞锛�</Property>
+    </AjaxAction>
+    <AjaxAction id="ajaxFlushCache">
+      <Property name="service">inoutConfPR#flushCache</Property>
+    </AjaxAction>
+    <Trigger id="triggerMedia">
+      <ClientEvent name="onExecute">view.get(&quot;#dialogMeidaSelect&quot;).show();</ClientEvent>
+    </Trigger>
+    <Dialog id="dialogMeidaSelect" layout="vbox padding:10">
+      <Property name="width">650</Property>
+      <Property name="caption">娴佸獟浣撳湴鍧�閫夋嫨</Property>
+      <Property name="height">500</Property>
+      <Buttons/>
+      <Children>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟棫鐗�-涓荤爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text1">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/h264/ch{4}/main/av_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text1.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟棫鐗�-瀛愮爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text2">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/mpeg4/ch{4}/sub/av_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text2.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟柊鐗�-涓荤爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text3">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/Streaming/Channels/{4}01</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text3.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟柊鐗�-瀛愮爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text4">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/Streaming/Channels/{4}02</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text4.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">澶у崕RTSP锛堜富鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text5">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/cam/realmonitor?channel={4}&amp;subtype=0</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text5.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">澶у崕RTSP锛堣緟鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text6">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/cam/realmonitor?channel={4}&amp;subtype=1</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text6.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">闆勮繄RTSP锛堜富鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text7">
+            <Property name="text">rtsp://{2}:{3}/user={0}&amp;password={1}&amp;channel={4}&amp;stream=0.sdp?real_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text7.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">闆勮繄RTSP锛堟鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text8">
+            <Property name="text">rtsp://{2}:{3}/user={0}&amp;password={1}&amp;channel={4}&amp;stream=1.sdp?real_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text8.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">涓夋槦RTSP锛堥珮鐮佺巼锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text9">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/onvif/profile2/media.smp</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text9.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">涓夋槦RTSP锛堜綆鐮佺巼锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text10">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/onvif/profile3/media.smp</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text10.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">瀹囪RTSP</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text11">
+            <Property name="text">rtsp://{0}:{1}@{2}/media/video1/multicast</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text11.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+      </Children>
+      <Tools/>
+    </Dialog>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConfPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConfPR.java
new file mode 100644
index 0000000..137223f
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConfPR.java
@@ -0,0 +1,71 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.Expose;
+import com.fzzy.igds.service.InoutConfService;
+import com.fzzy.igds.domain.InoutConf;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 09:23
+ */
+@Component
+public class InoutConfPR {
+
+    @Resource
+    private InoutConfService inoutConfService;
+
+    /**
+     * inoutConfPR#getData 鑾峰彇褰撳墠浜烘墍鍦ㄧ殑鍒嗗簱涓嬬殑閰嶇疆淇℃伅
+     *
+     * @return
+     */
+    @DataProvider
+    public List<InoutConf> getData() {
+
+        return inoutConfService.getInoutConfList(null,null);
+    }
+
+    /**
+     * inoutConfPR#saveData 淇濆瓨閰嶇疆
+     *
+     * @return
+     */
+    @Expose
+    public String saveData(InoutConf data) {
+
+        InoutConf inoutConf = new InoutConf();
+        BeanUtils.copyProperties(data, inoutConf);
+        return inoutConfService.saveData(inoutConf);
+    }
+
+    /**
+     * inoutConfPR#delData 鍒犻櫎閰嶇疆
+     *
+     * @param data
+     * @return
+     */
+    @Expose
+    public String delData(InoutConf data) {
+        InoutConf inoutConf = new InoutConf();
+        BeanUtils.copyProperties(data, inoutConf);
+        return inoutConfService.delData(inoutConf);
+    }
+
+
+    /**
+     * inoutConfPR#flushCache
+     *
+     * @return
+     */
+    @Expose
+    public void flushCache(InoutConf data) {
+        inoutConfService.flushInoutConfCache(data.getCompanyId(), data.getDeptId());
+    }
+
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConf.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConf.view.xml
new file mode 100644
index 0000000..eb958d0
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConf.view.xml
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtMain">
+      <Property name="creationType">com.fzzy.igds.domain.InoutSysConf</Property>
+      <PropertyDef name="deptId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲簱鍖�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">kqmc</Property>
+        </Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">绯荤粺缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="progressIn">
+        <Property></Property>
+        <Property name="label">鍏ュ簱娴佺▼</Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="progressOut">
+        <Property></Property>
+        <Property name="label">鍑哄簱娴佺▼</Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="noticeWx">
+        <Property></Property>
+        <Property name="label">寰俊閫氱煡</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;sys_yes_no&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="weightEditTag">
+        <Property></Property>
+        <Property name="label">鍦扮缂栬緫</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;sys_yes_no&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="remark">
+        <Property></Property>
+        <Property name="label">澶囨敞璇存槑</Property>
+      </PropertyDef>
+      <PropertyDef name="createTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鍒涘缓鏃堕棿</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="createBy">
+        <Property></Property>
+        <Property name="label">鍒涘缓浜�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="updateTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鏇存柊鏃堕棿</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="updateBy">
+        <Property></Property>
+        <Property name="label">鏇存柊浜�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:10">
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="dataProvider">inoutSysConfPR#getSysConfData</Property>
+      <Property name="dataType">[dtMain]</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <ToolBar>
+        <ToolBarButton>
+          <ClientEvent name="onClick">var select = view.get(&quot;#dgMain&quot;).get(&quot;selection&quot;);&#xD;
+if(select){&#xD;
+    view.get(&quot;#dialogMain&quot;).show();;&#xD;
+}else{&#xD;
+     $notify(&quot;璇烽�夋嫨闇�瑕佺紪杈戠殑鏁版嵁鈥︹��&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">淇敼</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-pencil-square-o</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain&quot;).flushAsync();&#xD;
+          </ClientEvent>
+          <Property name="caption">鍒锋柊缂撳瓨</Property>
+          <Property name="exClassName">btn4</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+          <Property name="width">100</Property>
+          <Property name="action">ajaxRefreshCache</Property>
+        </ToolBarButton>
+      </ToolBar>
+      <DataGrid id="dgMain" layoutConstraint="padding:8">
+        <ClientEvent name="onDataRowClick">view.get(&quot;#dgMain&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="readOnly">true</Property>
+        <Property name="selectionMode">singleRow</Property>
+        <RowSelectorColumn/>
+        <RowNumColumn/>
+        <DataColumn name="deptId">
+          <Property name="property">deptId</Property>
+        </DataColumn>
+        <DataColumn name="progressIn">
+          <Property name="property">progressIn</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="progressOut">
+          <Property name="property">progressOut</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn name="noticeWx">
+          <Property name="property">noticeWx</Property>
+          <Property name="align">center</Property>
+          <Property name="width">120</Property>
+        </DataColumn>
+        <DataColumn name="weightEditTag">
+          <Property name="property">weightEditTag</Property>
+          <Property name="align">center</Property>
+          <Property name="width">120</Property>
+        </DataColumn>
+        <DataColumn name="updateBy">
+          <Property name="property">updateBy</Property>
+          <Property name="align">center</Property>
+          <Property name="width">100</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+      </DataGrid>
+    </Container>
+    <Dialog id="dialogMain">
+      <Property name="width">1200</Property>
+      <Property name="caption">娴佺▼閰嶇疆</Property>
+      <Property name="closeable">false</Property>
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Buttons>
+        <Button id="btnOk">
+          <ClientEvent name="onClick">view.get(&quot;#uaSave&quot;).execute(function(result){&#xD;
+            if(result){&#xD;
+            $alert(result);&#xD;
+            }else{&#xD;
+            $notify(&quot;淇濆瓨鎴愬姛锛侊紒&quot;);&#xD;
+            view.get(&quot;#dialogMain&quot;).hide();&#xD;
+            }&#xD;
+            });</ClientEvent>
+          <Property name="caption">淇濆瓨</Property>
+          <Property name="iconClass">fa fa-check-circle</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">120</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain.data:#&quot;).cancel();&#xD;
+            self.get(&quot;parent&quot;).hide();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="iconClass">fa fa-times-circle</Property>
+          <Property name="width">120</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <AutoForm>
+          <Property name="dataSet">dsMain</Property>
+          <Property name="cols">*,*,*,*</Property>
+          <Property name="labelAlign">right</Property>
+          <Property name="labelSeparator"> : </Property>
+          <Property name="labelWidth">120</Property>
+          <AutoFormElement layoutConstraint="colSpan:4">
+            <Property name="name">deptId</Property>
+            <Property name="property">deptId</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:4">
+            <Property name="name">progressIn</Property>
+            <Property name="property">progressIn</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:4">
+            <Property name="name">progressOut</Property>
+            <Property name="property">progressOut</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">noticeWx</Property>
+            <Property name="property">noticeWx</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">weightEditTag</Property>
+            <Property name="property">weightEditTag</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:4">
+            <Property name="name">remark</Property>
+            <Property name="property">remark</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">createBy</Property>
+            <Property name="property">createBy</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">createTime</Property>
+            <Property name="property">createTime</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">updateBy</Property>
+            <Property name="property">updateBy</Property>
+            <Editor/>
+          </AutoFormElement>
+          <AutoFormElement layoutConstraint="colSpan:2">
+            <Property name="name">updateTime</Property>
+            <Property name="property">updateTime</Property>
+            <Editor/>
+          </AutoFormElement>
+        </AutoForm>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <UpdateAction id="uaSave">
+      <Property name="dataResolver">inoutSysConfPR#saveSysConfData</Property>
+      <Property name="successMessage">鏁版嵁淇濆瓨瀹屾垚锛�</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="dataPath">[#current]</Property>
+        <Property name="validateData">false</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxRefreshCache">
+      <Property name="service">inoutSysConfPR#flushCache</Property>
+      <Property name="successMessage">鍒锋柊鎴愬姛锛�</Property>
+      <Property name="confirmMessage">纭畾瑕佸埛鏂扮紦瀛樹箞锛�</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConfPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConfPR.java
new file mode 100644
index 0000000..25ef418
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutSysConfPR.java
@@ -0,0 +1,65 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.fzzy.igds.service.InoutConfService;
+import com.fzzy.igds.domain.InoutSysConf;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description 鍑哄叆搴撴祦绋嬮厤缃�
+ * @Author CZT
+ * @Date 2024/12/12 15:32
+ */
+@Component
+public class InoutSysConfPR {
+
+    @Resource
+    private InoutConfService inoutConfService;
+
+    /**
+     * inoutSysConfPR#getSysConfData 鑾峰彇褰撳墠鍑哄叆搴撴祦绋嬮厤缃�
+     *
+     * @return
+     * @throws Exception
+     */
+    @DataProvider
+    public List<InoutSysConf> getSysConfData() {
+    	return  inoutConfService.getSysConfData();
+    }
+
+    /**
+     * inoutSysConfPR#saveSysConfData
+     *
+     * @throws Exception
+     * @returns
+     */
+    @DataResolver
+    public String saveSysConfData(InoutSysConf data) {
+
+        InoutSysConf inoutSysConf = new InoutSysConf();
+        BeanUtils.copyProperties(data,inoutSysConf);
+		
+        inoutConfService.saveSysConfData(inoutSysConf);
+        return null;
+    }
+
+    /**
+     * inoutSysConfPR#flushCache
+     */
+    @Expose
+    public void flushCache() {
+
+        List<InoutSysConf> list = getSysConfData();
+        if(null != list && list.size() > 0){
+            for (InoutSysConf inoutSysConf : list) {
+                inoutConfService.flushInoutSysConfCache(inoutSysConf);
+            }
+        }
+    }
+
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml
new file mode 100644
index 0000000..ad29ee1
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCamera.view.xml
@@ -0,0 +1,1207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtSecCameraParam">
+      <Property name="creationType">com.fzzy.igds.domain.Camera</Property>
+      <PropertyDef name="name">
+        <Property></Property>
+        <Property name="label">鐩戞帶鍚嶇О</Property>
+      </PropertyDef>
+      <PropertyDef name="brand">
+        <Property></Property>
+        <Property name="label">鐩戞帶鍝佺墝</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;CAMERA_BRAND&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="spjklx">
+        <Property></Property>
+        <Property name="label">涓氬姟绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">1</Property>
+                <Property name="value">1-浠撳唴</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">2</Property>
+                <Property name="value">2-涓氬姟绫�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">3</Property>
+                <Property name="value">3-瀹夐槻绫�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="spdwlx">
+        <Property></Property>
+        <Property name="label">鐐逛綅绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">1</Property>
+                <Property name="value">1-鍑哄叆鍙�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">2</Property>
+                <Property name="value">2-鎵︽牱鏈�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">3</Property>
+                <Property name="value">3-鍖栭獙瀹�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">4</Property>
+                <Property name="value">4-缁撶畻瀹�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">5</Property>
+                <Property name="value">5-鍦扮瀹�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">6</Property>
+                <Property name="value">6-搴撳尯涓诲共閬�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">7</Property>
+                <Property name="value">7-浠撻棿鐩戞帶</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">8</Property>
+                <Property name="value">8-浠撳唴</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">9</Property>
+                <Property name="value">9-鑽搧鎴垮唴澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">10</Property>
+                <Property name="value">10-鍣ㄦ潗瀹ゅ唴澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">11</Property>
+                <Property name="value">11-鍒堕珮鐐�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">12</Property>
+                <Property name="value">12-娌瑰簱缃愬尯</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">13</Property>
+                <Property name="value">13-鏀跺彂娌硅澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">14</Property>
+                <Property name="value">14-娉垫埧</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">15</Property>
+                <Property name="value">15-娌瑰簱涓昏杈撻�佺閬�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">16</Property>
+                <Property name="value">16-鍛ㄧ晫</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+      </PropertyDef>
+    </DataType>
+    <DataType name="dtSecCamera">
+      <Property name="creationType">com.fzzy.igds.domain.Camera</Property>
+      <PropertyDef name="id">
+        <Property></Property>
+        <Property name="label">鐩戞帶缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="companyId">
+        <Property></Property>
+        <Property name="label">缁勭粐缂栫爜</Property>
+      </PropertyDef>
+      <PropertyDef name="deptId">
+        <Property></Property>
+        <Property name="label">鎵�灞炲簱鍖�</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+          <Property name="keyProperty">id</Property>
+          <Property name="valueProperty">kqmc</Property>
+        </Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="name">
+        <Property></Property>
+        <Property name="label">鐩戞帶鍚嶇О</Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="type">
+        <Property></Property>
+        <Property name="label">璁惧绫诲瀷</Property>
+        <Property name="required">true</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">01</Property>
+                <Property name="name">01-鏋満</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">02</Property>
+                <Property name="name">02-鐞冩満</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">03</Property>
+                <Property name="name">03-鍗婄悆</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">09</Property>
+                <Property name="name">09-鍏朵粬</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="brand">
+        <Property></Property>
+        <Property name="label">璁惧鍝佺墝</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;CAMERA_BRAND&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="sn">
+        <Property></Property>
+        <Property name="label">搴忓垪鍙�</Property>
+      </PropertyDef>
+      <PropertyDef name="sort">
+        <Property name="label">閰嶅搴忓彿</Property>
+        <Property name="required">true</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">1</Property>
+                <Property name="name">閰嶅搴忓彿#1</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">2</Property>
+                <Property name="name">閰嶅搴忓彿#2</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="playType">
+        <Property></Property>
+        <Property name="label">鎾斁鏂瑰紡</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerPlayType&quot;).getResult()}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="loginId">
+        <Property></Property>
+        <Property name="label">甯愬彿</Property>
+      </PropertyDef>
+      <PropertyDef name="pwd">
+        <Property></Property>
+        <Property name="label">瀵嗙爜</Property>
+      </PropertyDef>
+      <PropertyDef name="ip">
+        <Property></Property>
+        <Property name="label">IP鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="controlPort">
+        <Property name="dataType">Integer</Property>
+        <Property name="label">鎺у埗绔彛</Property>
+        <Property name="defaultValue">554</Property>
+      </PropertyDef>
+      <PropertyDef name="webPort">
+        <Property name="dataType">Integer</Property>
+        <Property name="label">WEB绔彛</Property>
+        <Property name="defaultValue">80</Property>
+      </PropertyDef>
+      <PropertyDef name="chanNum">
+        <Property name="dataType">Integer</Property>
+        <Property name="label">閫氶亾鍙�</Property>
+        <Property name="defaultValue">1</Property>
+      </PropertyDef>
+      <PropertyDef name="urlIn">
+        <Property></Property>
+        <Property name="label">鍐呯綉鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="urlOut">
+        <Property></Property>
+        <Property name="label">澶栫綉鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="mediaAddr">
+        <Property></Property>
+        <Property name="label">RTSP鍦板潃</Property>
+      </PropertyDef>
+      <PropertyDef name="snapType">
+        <Property></Property>
+        <Property name="label">鎶撴媿鏂瑰紡</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerSnapType&quot;).getResult()}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="spjklx">
+        <Property></Property>
+        <Property name="label">涓氬姟绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">1</Property>
+                <Property name="value">1-浠撳唴</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">2</Property>
+                <Property name="value">2-涓氬姟绫�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">3</Property>
+                <Property name="value">3-瀹夐槻绫�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="spdwlx">
+        <Property></Property>
+        <Property name="label">鐐逛綅绫诲瀷</Property>
+        <Property name="mapping">
+          <Property name="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">1</Property>
+                <Property name="value">1-鍑哄叆鍙�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">2</Property>
+                <Property name="value">2-鎵︽牱鏈�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">3</Property>
+                <Property name="value">3-鍖栭獙瀹�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">4</Property>
+                <Property name="value">4-缁撶畻瀹�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">5</Property>
+                <Property name="value">5-鍦扮瀹�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">6</Property>
+                <Property name="value">6-搴撳尯涓诲共閬�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">7</Property>
+                <Property name="value">7-浠撻棿鐩戞帶</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">8</Property>
+                <Property name="value">8-浠撳唴</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">9</Property>
+                <Property name="value">9-鑽搧鎴垮唴澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">10</Property>
+                <Property name="value">10-鍣ㄦ潗瀹ゅ唴澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">11</Property>
+                <Property name="value">11-鍒堕珮鐐�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">12</Property>
+                <Property name="value">12-娌瑰簱缃愬尯</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">13</Property>
+                <Property name="value">13-鏀跺彂娌硅澶�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">14</Property>
+                <Property name="value">14-娉垫埧</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">15</Property>
+                <Property name="value">15-娌瑰簱涓昏杈撻�佺閬�</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">16</Property>
+                <Property name="value">16-鍛ㄧ晫</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+        <Property name="required">true</Property>
+      </PropertyDef>
+      <PropertyDef name="posX">
+        <Property></Property>
+        <Property name="label">鍧愭爣X</Property>
+        <Property name="dataType">Double</Property>
+      </PropertyDef>
+      <PropertyDef name="posY">
+        <Property></Property>
+        <Property name="label">鍧愭爣Y</Property>
+        <Property name="dataType">Double</Property>
+      </PropertyDef>
+      <PropertyDef name="screenShow">
+        <Property></Property>
+        <Property name="label">澶у睆鏄剧ず</Property>
+        <Property name="required">false</Property>
+        <Property name="defaultValue">N</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">Y</Property>
+                <Property name="name">灞曠ず</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">N</Property>
+                <Property name="name">涓嶅睍绀�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="phoneShowTag">
+        <Property></Property>
+        <Property name="label">APP鏄剧ず</Property>
+        <Property name="defaultValue">N</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">Y</Property>
+                <Property name="name">灞曠ず</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">N</Property>
+                <Property name="name">涓嶅睍绀�</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="orderNum">
+        <Property></Property>
+        <Property name="label">鏄剧ず椤哄簭</Property>
+        <Property name="dataType">Integer</Property>
+      </PropertyDef>
+      <PropertyDef name="vld">
+        <Property></Property>
+        <Property name="label">鏄惁浣跨敤</Property>
+        <Property name="defaultValue">Y</Property>
+        <Property name="mapping">
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="code">Y</Property>
+                <Property name="name">鍚敤</Property>
+              </Entity>
+              <Entity>
+                <Property name="code">N</Property>
+                <Property name="name">绂佺敤</Property>
+              </Entity>
+            </Collection>
+          </Property>
+          <Property name="keyProperty">code</Property>
+          <Property name="valueProperty">name</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="remark">
+        <Property></Property>
+        <Property name="label">澶囨敞璇存槑</Property>
+      </PropertyDef>
+      <PropertyDef name="createTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鍒涘缓鏃堕棿</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="createBy">
+        <Property></Property>
+        <Property name="label">鍒涘缓浜�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="updateTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鏇存柊鏃堕棿</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+      <PropertyDef name="updateBy">
+        <Property></Property>
+        <Property name="label">鏇存柊浜�</Property>
+        <Property name="readOnly">true</Property>
+      </PropertyDef>
+    </DataType>
+  </Model>
+  <View layout="padding:10">
+    <ClientEvent name="onClick">&#xD;
+/**&#xD;
+ * 鏌ヨ&#xD;
+ */&#xD;
+query = function(){&#xD;
+    view.get(&quot;#dsMain&quot;).flushAsync();&#xD;
+}&#xD;
+/**&#xD;
+ * 璁块棶&#xD;
+ */&#xD;
+showWeb = function(){&#xD;
+	var cur = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+	if(!cur.get(&quot;ip&quot;)){&#xD;
+		$alert(&quot;娌℃湁閰嶇疆璁块棶IP锛屾棤娉曡闂��&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	if(!cur.get(&quot;webPort&quot;)){&#xD;
+		$alert(&quot;娌℃湁閰嶇疆璁块棶绔彛锛屾棤娉曡闂��&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	var url = &quot;http://&quot;+cur.get(&quot;ip&quot;)+&quot;:&quot;+cur.get(&quot;webPort&quot;);&#xD;
+	window.open(url);&#xD;
+};&#xD;
+&#xD;
+/**&#xD;
+ * 棰勮&#xD;
+ */&#xD;
+showVideo = function(){&#xD;
+	var cur = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+	var playType = cur.get(&quot;playType&quot;);&#xD;
+	&#xD;
+	if(!playType){&#xD;
+		$alert(&quot;娌℃湁閰嶇疆鎾斁鏂瑰紡锛屾棤娉曢瑙堛��&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	if(!cur.get(&quot;ip&quot;)){&#xD;
+		$alert(&quot;娌℃湁閰嶇疆鍐呴儴璁块棶IP锛屾棤娉曡闂��&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	if(!cur.get(&quot;controlPort&quot;)){&#xD;
+		$alert(&quot;娌℃湁閰嶇疆鍐呴儴鎺у埗绔彛锛屾棤娉曡闂��&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	if(!cur.get(&quot;loginId&quot;)){&#xD;
+		$alert(&quot;娌℃湁閰嶇疆鐢ㄦ埛鍚嶏紝鏃犳硶璁块棶銆�&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	if (!cur.get(&quot;pwd&quot;)) {&#xD;
+		$alert(&quot;娌℃湁閰嶇疆瀵嗙爜锛屾棤娉曡闂��&quot;);&#xD;
+		return;&#xD;
+	}&#xD;
+	&#xD;
+	var url = &quot;./basic/security/video-play?cameraId=&quot;+cur.get(&quot;id&quot;)+&quot;&amp;playType=&quot;+playType+&quot;&amp;time=&quot;+ new Date().getTime();&#xD;
+	&#xD;
+	view.get(&quot;#iFrameVideo&quot;).set(&quot;path&quot;,url);&#xD;
+	view.get(&quot;#dialogVideo&quot;).show();&#xD;
+};&#xD;
+</ClientEvent>
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="loadMode">lazy</Property>
+      <Property name="dataProvider">secCameraPR#listPageCamera</Property>
+      <Property name="pageSize">20</Property>
+      <Property name="dataType">[dtSecCamera]</Property>
+    </DataSet>
+    <DataSet id="dsParam">
+      <ClientEvent name="onReady">self.insert({});</ClientEvent>
+      <Property name="dataType">dtSecCameraParam</Property>
+    </DataSet>
+    <Container>
+      <Property name="className">c-param</Property>
+      <AutoForm>
+        <Property name="cols">*,*,*,*,90,90</Property>
+        <Property name="dataSet">dsParam</Property>
+        <Property name="labelAlign">right</Property>
+        <Property name="labelWidth">100</Property>
+        <AutoFormElement>
+          <Property name="name">name</Property>
+          <Property name="property">name</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">brand</Property>
+          <Property name="property">brand</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">spjklx</Property>
+          <Property name="property">spjklx</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">spdwlx</Property>
+          <Property name="property">spdwlx</Property>
+          <Editor/>
+        </AutoFormElement>
+        <Button>
+          <ClientEvent name="onClick">var param = view.get(&quot;#dsParam.data&quot;);&#xD;
+view.get(&quot;#dsMain&quot;).set(&quot;parameter&quot;,param.toJSON()).flushAsync();</ClientEvent>
+          <Property name="caption">鎼滅储</Property>
+          <Property name="iconClass">fa fa-search</Property>
+          <Property name="exClassName">btn-q1</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">view.get(&quot;#dsParam&quot;).setData({});</ClientEvent>
+          <Property name="caption">閲嶇疆</Property>
+          <Property name="exClassName">btn-q2</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+        </Button>
+      </AutoForm>
+    </Container>
+    <Container>
+      <Property name="className">c-data</Property>
+      <ToolBar>
+        <ToolBarButton>
+          <ClientEvent name="onClick">view.get(&quot;#dsMain&quot;).insert();&#xD;
+            view.get(&quot;#dialogMain&quot;).show();</ClientEvent>
+          <Property name="caption">鏂板</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-plus</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">var data = view.get(&quot;#dataGridCamera&quot;).get(&quot;selection&quot;);&#xD;
+if(data){&#xD;
+    view.get(&quot;#dialogMain&quot;).show();&#xD;
+}else{&#xD;
+    $notify(&quot;璇烽�夋嫨闇�瑕佷慨鏀圭殑鐩戞帶淇℃伅鈥︹��&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">淇敼</Property>
+          <Property name="exClassName">btn2</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-pencil-square-o</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <ClientEvent name="onClick">var select = view.get(&quot;#dataGridCamera&quot;).get(&quot;selection&quot;);&#xD;
+if(select){&#xD;
+    view.get(&quot;#ajaxDel&quot;).set(&quot;parameter&quot;,select).execute(function(result){&#xD;
+        if(result){&#xD;
+            $alert(result);&#xD;
+        }else{&#xD;
+            query();&#xD;
+        }&#xD;
+    });
+ }else{&#xD;
+    $notify(&quot;璇烽�夋嫨闇�瑕佸垹闄ょ殑鐩戞帶淇℃伅鈥︹��&quot;);&#xD;
+}</ClientEvent>
+          <Property name="caption">鍒犻櫎</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="width">100</Property>
+          <Property name="iconClass">fa fa-times</Property>
+        </ToolBarButton>
+        <ToolBarButton>
+          <Property name="caption">鍒锋柊缂撳瓨</Property>
+          <Property name="exClassName">btn4</Property>
+          <Property name="iconClass">fa fa-refresh</Property>
+          <Property name="width">100</Property>
+          <Property name="action">refreshCache</Property>
+        </ToolBarButton>
+      </ToolBar>
+      <DataGrid id="dataGridCamera" layoutConstraint="padding:8">
+        <ClientEvent name="onDataRowClick">view.get(&quot;#dataGridCamera&quot;).set(&quot;selection&quot;,arg.data);</ClientEvent>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="selectionMode">singleRow</Property>
+        <Property name="readOnly">true</Property>
+        <RowSelectorColumn/>
+        <RowNumColumn>
+          <Property name="width">50</Property>
+        </RowNumColumn>
+        <DataColumn name="name">
+          <Property name="property">name</Property>
+        </DataColumn>
+        <DataColumn name="type">
+          <Property name="property">type</Property>
+          <Property name="align">center</Property>
+          <Property name="width">90</Property>
+        </DataColumn>
+        <DataColumn name="spjklx">
+          <Property name="property">spjklx</Property>
+          <Property name="align">center</Property>
+          <Property name="width">90</Property>
+        </DataColumn>
+        <DataColumn name="spdwlx">
+          <Property name="property">spdwlx</Property>
+          <Property name="align">center</Property>
+          <Property name="width">100</Property>
+        </DataColumn>
+        <DataColumn>
+          <Property name="property">playType</Property>
+          <Property name="align">center</Property>
+          <Property name="name">playType</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+        <DataColumn>
+          <Property name="property">snapType</Property>
+          <Property name="align">center</Property>
+          <Property name="name">snapType</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+        <DataColumn name="ip">
+          <Property name="property">ip</Property>
+          <Property name="align">center</Property>
+          <Property name="width">120</Property>
+        </DataColumn>
+        <DataColumn name="controlPort">
+          <Property name="property">controlPort</Property>
+          <Property name="align">center</Property>
+          <Property name="width">100</Property>
+        </DataColumn>
+        <DataColumn name="chanNum">
+          <Property name="property">chanNum</Property>
+          <Property name="align">center</Property>
+          <Property name="width">80</Property>
+        </DataColumn>
+        <DataColumn name="brand">
+          <Property name="property">brand</Property>
+          <Property name="align">center</Property>
+          <Property name="width">100</Property>
+        </DataColumn>
+        <DataColumn name="updateTime">
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+        <DataColumn>
+          <ClientEvent name="onRenderCell">arg.dom.innerHTML = &quot;&lt;a href='javascript:;' onClick='showVideo()' class='a-btn1'>棰勮&lt;/a>&amp;nbsp;|&amp;nbsp;&lt;a href='javascript:;' onClick='showWeb()' class='a-btn3'>璁块棶&lt;/a>&quot;;</ClientEvent>
+          <Property name="width">160</Property>
+          <Property name="caption">鎿嶄綔</Property>
+          <Property name="align">center</Property>
+          <Editor/>
+        </DataColumn>
+      </DataGrid>
+    </Container>
+    <Container layoutConstraint="bottom">
+      <Property name="className">c-bottom</Property>
+      <DataPilot layoutConstraint="right">
+        <Property name="dataSet">dsMain</Property>
+        <Property name="itemCodes">pageSize,pages</Property>
+      </DataPilot>
+    </Container>
+    <Dialog id="dialogMain" layout="regionPadding:8">
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Property name="width">1200</Property>
+      <Property name="caption">鐩戞帶淇℃伅</Property>
+      <Property name="closeable">false</Property>
+      <Buttons>
+        <Button>
+          <ClientEvent name="onClick">var data = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+if(data.validate() != 'ok'){&#xD;
+	$notify(&quot;鏁版嵁鏍¢獙澶辫触锛侊紒&quot;);&#xD;
+	return;&#xD;
+}&#xD;
+view.get(&quot;#uaAction&quot;).set(&quot;parameter&quot;,data).execute(function(){&#xD;
+	self.get(&quot;parent&quot;).hide();&#xD;
+    query();&#xD;
+});</ClientEvent>
+          <Property name="caption">淇濆瓨</Property>
+          <Property name="iconClass">fa fa-check-circle</Property>
+          <Property name="exClassName">btn1</Property>
+          <Property name="width">120</Property>
+        </Button>
+        <Button>
+          <ClientEvent name="onClick">var cur = view.get(&quot;#dsMain.data:#&quot;);&#xD;
+            if(cur) cur.cancel();&#xD;
+            self.get(&quot;parent&quot;).hide();</ClientEvent>
+          <Property name="caption">鍙栨秷</Property>
+          <Property name="exClassName">btn3</Property>
+          <Property name="iconClass">fa fa-times-circle</Property>
+          <Property name="width">120</Property>
+        </Button>
+      </Buttons>
+      <Children>
+        <FieldSet layout="padding:5">
+          <Property name="caption">鍩烘湰淇℃伅</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*,*,*</Property>
+              <Property name="labelWidth">100</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <AutoFormElement>
+                <Property name="name">name</Property>
+                <Property name="property">name</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">type</Property>
+                <Property name="property">type</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">brand</Property>
+                <Property name="property">brand</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">deptId</Property>
+                <Property name="property">deptId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">loginId</Property>
+                <Property name="property">loginId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">pwd</Property>
+                <Property name="property">pwd</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">chanNum</Property>
+                <Property name="property">chanNum</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">spjklx</Property>
+                <Property name="property">spjklx</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">ip</Property>
+                <Property name="property">ip</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">controlPort</Property>
+                <Property name="property">controlPort</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">webPort</Property>
+                <Property name="property">webPort</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">spdwlx</Property>
+                <Property name="property">spdwlx</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">sort</Property>
+                <Property name="property">sort</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">screenShow</Property>
+                <Property name="property">screenShow</Property>
+                <Editor>
+                  <RadioGroup>
+                    <RadioButton>
+                      <Property name="text">灞曠ず</Property>
+                      <Property name="value">Y</Property>
+                    </RadioButton>
+                    <RadioButton>
+                      <Property name="text">涓嶅睍绀�</Property>
+                      <Property name="value">N</Property>
+                    </RadioButton>
+                  </RadioGroup>
+                </Editor>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">phoneShowTag</Property>
+                <Property name="property">phoneShowTag</Property>
+                <Editor>
+                  <RadioGroup>
+                    <RadioButton>
+                      <Property name="text">灞曠ず</Property>
+                      <Property name="value">Y</Property>
+                    </RadioButton>
+                    <RadioButton>
+                      <Property name="text">涓嶅睍绀�</Property>
+                      <Property name="value">N</Property>
+                    </RadioButton>
+                  </RadioGroup>
+                </Editor>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+        <FieldSet layout="padding:5">
+          <Property name="caption">鎾斁閰嶇疆</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*,*,*,*</Property>
+              <Property name="labelWidth">100</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">playType</Property>
+                <Property name="property">playType</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:3">
+                <Property name="name">urlIn</Property>
+                <Property name="property">urlIn</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">snapType</Property>
+                <Property name="property">snapType</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:3">
+                <Property name="name">urlOut</Property>
+                <Property name="property">urlOut</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">sn</Property>
+                <Property name="property">sn</Property>
+                <Editor>
+                  <TextEditor id="sn">
+                    <Property name="blankText"> -- 娴佸獟浣撳钩鍙颁腑璁惧SN --</Property>
+                  </TextEditor>
+                </Editor>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:3">
+                <Property name="name">mediaAddr</Property>
+                <Property name="property">mediaAddr</Property>
+                <Property name="trigger">triggerMedia</Property>
+                <Editor>
+                  <TextEditor id="mediaAddr">
+                    <Property name="blankText"> -- 鐐瑰嚮鍙充晶閫夋嫨锛屾垨鑰呮墜鍔ㄥ~鍐� --</Property>
+                  </TextEditor>
+                </Editor>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+        <FieldSet layout="padding:5">
+          <Property name="caption">鍏朵粬淇℃伅</Property>
+          <Buttons/>
+          <Children>
+            <AutoForm>
+              <Property name="dataSet">dsMain</Property>
+              <Property name="cols">*,*,*</Property>
+              <Property name="labelWidth">100</Property>
+              <Property name="labelAlign">right</Property>
+              <Property name="labelSeparator">锛�</Property>
+              <AutoFormElement>
+                <Property name="name">vld</Property>
+                <Property name="property">vld</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">orderNum</Property>
+                <Property name="property">orderNum</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateTime</Property>
+                <Property name="property">updateTime</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">remark</Property>
+                <Property name="property">remark</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createBy</Property>
+                <Property name="property">createBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">createTime</Property>
+                <Property name="property">createTime</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateBy</Property>
+                <Property name="property">updateBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateTime</Property>
+                <Property name="property">updateTime</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <UpdateAction id="uaAction">
+      <Property name="dataResolver">secCameraPR#saveCamera</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="dataPath">[#current]</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxDel">
+      <Property name="confirmMessage">纭畾瑕佸垹闄ゅ悧锛�</Property>
+      <Property name="service">secCameraPR#delCamera</Property>
+    </AjaxAction>
+    <Dialog id="dialogVideo">
+      <Property name="width">1320</Property>
+      <Property name="caption">瑙嗛棰勮</Property>
+      <Property name="contentOverflow">hidden</Property>
+      <Property name="height">620</Property>
+      <Buttons/>
+      <Children>
+        <IFrame id="iFrameVideo" layoutConstraint="center"/>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <AjaxAction id="refreshCache">
+      <Property name="service">secCameraPR#refreshCache</Property>
+      <Property name="successMessage">缂撳瓨鏇存柊鎴愬姛锛�</Property>
+    </AjaxAction>
+    <Trigger id="triggerMedia">
+      <ClientEvent name="onExecute">view.get(&quot;#dialogMeidaSelect&quot;).show();&#xD;
+</ClientEvent>
+    </Trigger>
+    <Dialog id="dialogMeidaSelect" layout="vbox padding:10">
+      <Property name="width">650</Property>
+      <Property name="caption">娴佸獟浣撳湴鍧�閫夋嫨</Property>
+      <Buttons/>
+      <Children>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟棫鐗�-涓荤爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text1">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/h264/ch{4}/main/av_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text1.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟棫鐗�-瀛愮爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text2">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/mpeg4/ch{4}/sub/av_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text2.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟柊鐗�-涓荤爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text3">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/Streaming/Channels/{4}01</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text3.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">娴峰悍RTSP锛堟柊鐗�-瀛愮爜娴侊級</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text4">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/Streaming/Channels/{4}02</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text4.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">澶у崕RTSP锛堜富鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text5">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/cam/realmonitor?channel={4}&amp;subtype=0</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text5.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">澶у崕RTSP锛堣緟鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text6">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/cam/realmonitor?channel={4}&amp;subtype=1</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text6.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">闆勮繄RTSP锛堜富鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text7">
+            <Property name="text">rtsp://{2}:{3}/user={0}&amp;password={1}&amp;channel={4}&amp;stream=0.sdp?real_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text7.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">闆勮繄RTSP锛堟鐮佹祦锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text8">
+            <Property name="text">rtsp://{2}:{3}/user={0}&amp;password={1}&amp;channel={4}&amp;stream=1.sdp?real_stream</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text8.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">涓夋槦RTSP锛堥珮鐮佺巼锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text9">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/onvif/profile2/media.smp</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text9.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">涓夋槦RTSP锛堜綆鐮佺巼锛�</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text10">
+            <Property name="text">rtsp://{0}:{1}@{2}:{3}/onvif/profile3/media.smp</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text10.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+        <Container>
+          <Label>
+            <Property name="text">瀹囪RTSP</Property>
+            <Property name="style">
+              <Property name="font-weight">bold</Property>
+            </Property>
+          </Label>
+          <Label id="text11">
+            <Property name="text">rtsp://{0}:{1}@{2}/media/video1/multicast</Property>
+          </Label>
+          <Button layoutConstraint="right">
+            <ClientEvent name="onClick">view.get(&quot;#mediaAddr&quot;).set(&quot;text&quot;,view.get(&quot;#text11.text&quot;));&#xD;
+view.get(&quot;#dialogMeidaSelect&quot;).hide();&#xD;
+</ClientEvent>
+            <Property name="caption">閫夋嫨</Property>
+            <Property name="iconClass">fa fa-check</Property>
+          </Button>
+        </Container>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <AjaxAction id="ajaxRemoteMedia">
+      <Property name="confirmMessage">纭畾瑕佸悓姝ヤ箞锛�</Property>
+      <Property name="service">secCameraPR#flushByMedia</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCameraPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCameraPR.java
new file mode 100644
index 0000000..5190e2f
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SecCameraPR.java
@@ -0,0 +1,183 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.bstek.dorado.data.provider.Page;
+import com.fzzy.igds.domain.Camera;
+import com.fzzy.igds.service.SecCameraService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Component;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/28 10:48
+ */
+@Slf4j
+@Component
+public class SecCameraPR {
+
+	@Autowired
+	private SecCameraService secCameraService;
+
+	/**
+	 * secCameraPR#listPageCamera 鏍规嵁鏉′欢鑾峰彇鎵�鏈夌殑鎽勫儚鏈洪厤缃俊鎭�
+	 * 
+	 * @param param
+	 */
+	@DataProvider
+	public void listPageCamera(Page<Camera> page, Map<String, Object> param) {
+		org.springframework.data.domain.Page<Camera> japPage = pageCamera(page, param);
+		page.setEntityCount((int) japPage.getTotalElements());
+		page.setEntities(japPage.getContent());
+	}
+
+	public org.springframework.data.domain.Page<Camera> pageCamera(Page<Camera> page, Map<String, Object> param) {
+		if (null == param) {
+			param = new HashMap<>();
+		}
+		Map<String, Object> finalParam = param;
+
+		//澶氬弬鏁板垎椤垫煡璇�
+		Pageable pageable = PageRequest.of(page.getPageNo() - 1, page.getPageSize(), Sort.Direction.ASC, Camera.SORT_PROP);
+		Specification<Camera> specification = new Specification<Camera>() {
+			private static final long serialVersionUID = 1L;
+
+			public Predicate toPredicate(Root<Camera> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+				List<Predicate> predicates = new ArrayList<Predicate>(); //鎵�鏈夌殑鏂█
+
+				Predicate predicate1 = cb.equal(root.get("companyId"), ContextUtil.getCompanyId());
+				predicates.add(predicate1);
+				Predicate predicate2 = cb.equal(root.get("deptId"), ContextUtil.subDeptId(null));
+				predicates.add(predicate2);
+
+				String key = (String) finalParam.get("bizType");
+				if (StringUtils.isNotEmpty(key)) {
+					Predicate predicate3 = cb.equal(root.get("bizType"), key);
+					predicates.add(predicate3);
+				}
+				key = (String) finalParam.get("name");
+				if (StringUtils.isNotEmpty(key)) {
+					Predicate predicate4 = cb.like(root.get("name"), "%" + key + "%");
+					predicates.add(predicate4);
+				}
+				key = (String) finalParam.get("brand");
+				if (StringUtils.isNotEmpty(key)) {
+					Predicate predicate5 = cb.equal(root.get("brand"), key);
+					predicates.add(predicate5);
+				}
+				key = (String) finalParam.get("spjklx");
+				if (StringUtils.isNotEmpty(key)) {
+					Predicate predicate5 = cb.equal(root.get("spjklx"), key);
+					predicates.add(predicate5);
+				}
+				key = (String) finalParam.get("spdwlx");
+				if (StringUtils.isNotEmpty(key)) {
+					Predicate predicate5 = cb.equal(root.get("spdwlx"), key);
+					predicates.add(predicate5);
+				}
+				return cb.and(predicates.toArray(new Predicate[0]));
+			}
+		};
+		org.springframework.data.domain.Page<Camera> japPage = secCameraService.findAll(specification, pageable);
+		return japPage;
+	}
+
+	/**
+	 * secCameraPR#listCamera 鑾峰彇鎵�鏈夌殑鎽勫儚鏈洪厤缃俊鎭�
+	 * ${dorado.getDataProvider("secCameraPR#listCamera").getResult()}
+	 * @return
+	 */
+	@DataProvider
+	public List<Camera> listCamera() {
+		return secCameraService.listCamera();
+	}
+
+	/**
+	 * secCameraPR#saveCamera
+	 * 
+	 * @param data
+	 */
+	@DataResolver
+	public void saveCamera(Camera data) {
+		Camera secCamera = new Camera();
+		BeanUtils.copyProperties(data, secCamera);
+		secCameraService.saveCamera(secCamera);
+	}
+
+	/**
+	 * secCameraPR#delCamera
+	 * 
+	 * @param data
+	 * @return
+	 */
+	@Expose
+	public String delCamera(Camera data) {
+		Camera secCamera = new Camera();
+		BeanUtils.copyProperties(data, secCamera);
+		return secCameraService.delCamera(secCamera);
+	}
+	
+	/***
+	 * secCameraPR#refreshCache
+	 * @return
+	 */
+	@Expose
+	public String refreshCache() {
+		secCameraService.refreshCache(ContextUtil.getCompanyId());
+		return null;
+	}
+
+	/***
+	 * securityPR#flushByMedia
+	 *
+	 * 鑾峰彇鎽勫儚澶村垪琛ㄤ俊鎭�
+	 * @return
+	 */
+	@Expose
+	public String flushByMedia(String playType) {
+
+		if (null == playType){
+			return "娌℃湁閫夋嫨鎾斁鏂瑰紡锛屾墽琛屽け璐�";
+		}
+
+//		try {
+//			if (CameraUtil.PLAY_TYPE_MEDIA_HIK.equals(playType)) {
+//				ApiCameraData apiCameraData = new ApiCameraData();
+//				apiCameraData.setCompanyId(ContextUtil.getCompanyId());
+//				apiCameraData.setDeptId(ContextUtil.subDeptId(null));
+//				apiCameraData.setPlayType(playType);
+//				List<SecCameraDto> list = apiCameraManager.getApiCameraService(playType).searchCamera(apiCameraData);
+//				if(list == null){
+//					return "鍚屾澶辫触锛�";
+//				}else {
+//					return "鍚屾鎴愬姛锛�";
+//				}
+//			}
+			return "褰撳墠鎾斁鏂瑰紡娌℃湁姝ゅ姛鑳斤紒";
+//
+//		}catch (Exception e){
+//			log.error("-----鍚屾鎽勫儚澶村垪琛ㄥけ璐�-----鍘熷洜={}", e.toString());
+//			return "杩滅▼鎺ュ彛鏈嶅姟寮傚父锛岃鏍告煡鍚庨噸璇曪紒";
+//		}
+
+	}
+
+}
diff --git a/fzzy-igdss-view/src/main/java/models/core.model.xml b/fzzy-igdss-view/src/main/java/models/core.model.xml
index 1bfba3a..e6b326d 100644
--- a/fzzy-igdss-view/src/main/java/models/core.model.xml
+++ b/fzzy-igdss-view/src/main/java/models/core.model.xml
@@ -163,9 +163,9 @@
       <Property></Property>
       <Property name="label">鎵�灞炲垎搴�</Property>
       <Property name="mapping">
-        <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getData&quot;).getResult()}</Property>
-        <Property name="keyProperty">deptId</Property>
-        <Property name="valueProperty">deptName</Property>
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">kqmc</Property>
       </Property>
       <Property name="readOnly">true</Property>
     </PropertyDef>
@@ -433,4 +433,482 @@
       <Property name="readOnly">true</Property>
     </PropertyDef>
   </DataType>
+  <DataType name="dtDeviceSer">
+    <Property name="creationType">com.fzzy.igds.domain.DeviceSer</Property>
+    <PropertyDef name="id">
+      <Property></Property>
+      <Property name="label">鍒嗘満缂栫爜</Property>
+    </PropertyDef>
+    <PropertyDef name="deptId">
+      <Property></Property>
+      <Property name="label">鎵�灞炲簱鍖�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">kqmc</Property>
+      </Property>
+      <Property name="required">true</Property>
+    </PropertyDef>
+    <PropertyDef name="companyId">
+      <Property></Property>
+      <Property name="label">缁勭粐缂栫爜</Property>
+    </PropertyDef>
+    <PropertyDef name="sn">
+      <Property></Property>
+      <Property name="label">搴忓垪鍙�</Property>
+    </PropertyDef>
+    <PropertyDef name="name">
+      <Property></Property>
+      <Property name="label">鍒嗘満鍚嶇О</Property>
+    </PropertyDef>
+    <PropertyDef name="ip">
+      <Property></Property>
+      <Property name="label">鍒嗘満IP</Property>
+      <Property name="required">true</Property>
+    </PropertyDef>
+    <PropertyDef name="port">
+      <Property name="dataType">Integer</Property>
+      <Property name="label">鍒嗘満绔彛</Property>
+      <Property name="required">true</Property>
+    </PropertyDef>
+    <PropertyDef name="type">
+      <Property></Property>
+      <Property name="label">鍒嗘満绫诲瀷</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;SER_TYPE&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="status">
+      <Property></Property>
+      <Property name="label">鏄惁鍦ㄧ嚎</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;sys_yes_no&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="controlModel">
+      <Property></Property>
+      <Property name="label">鎿嶄綔妯″紡</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#controlModel&quot;).getResult()}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="networkType">
+      <Property></Property>
+      <Property name="label">缃戠粶妯″紡</Property>
+      <Property name="mapping">
+        <Property name="mapValues">
+          <Collection>
+            <Entity>
+              <Property name="code">01</Property>
+              <Property name="name">鏈夌嚎妯″紡</Property>
+            </Entity>
+            <Entity>
+              <Property name="code">02</Property>
+              <Property name="name">鏃犵嚎妯″紡</Property>
+            </Entity>
+          </Collection>
+        </Property>
+        <Property name="keyProperty">code</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+      <Property name="required">false</Property>
+    </PropertyDef>
+    <PropertyDef name="protocol">
+      <Property></Property>
+      <Property name="label">鍒嗘満鍗忚</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;PROTOCOL&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="isMoreDepot">
+      <Property></Property>
+      <Property name="label">澶氫粨骞跺彂</Property>
+      <Property name="mapping">
+        <Property name="mapValues">
+          <Collection>
+            <Entity>
+              <Property name="code">Y</Property>
+              <Property name="name">鏄�</Property>
+            </Entity>
+            <Entity>
+              <Property name="code">N</Property>
+              <Property name="name">鍚�</Property>
+            </Entity>
+          </Collection>
+        </Property>
+        <Property name="keyProperty">code</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="producer">
+      <Property></Property>
+      <Property name="label">鍘傚晢鍚嶇О</Property>
+    </PropertyDef>
+    <PropertyDef name="remark">
+      <Property></Property>
+      <Property name="label">澶囨敞</Property>
+    </PropertyDef>
+    <PropertyDef name="orderNum">
+      <Property name="dataType">Integer</Property>
+      <Property name="label">椤哄簭鍙�</Property>
+    </PropertyDef>
+    <PropertyDef name="contactPhone">
+      <Property></Property>
+      <Property name="label">鑱旂郴鐢佃瘽</Property>
+    </PropertyDef>
+    <PropertyDef name="powerModel">
+      <Property></Property>
+      <Property name="label">渚涚數妯″紡</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;POWER_TYPE&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="cableStart">
+      <Property name="dataType">int</Property>
+      <Property name="label">寮�濮嬪垪</Property>
+    </PropertyDef>
+    <PropertyDef name="cableZ">
+      <Property name="dataType">int</Property>
+      <Property name="label">灞傞厤缃�</Property>
+    </PropertyDef>
+    <PropertyDef name="cableY">
+      <Property name="dataType">int</Property>
+      <Property name="label">琛岄厤缃�</Property>
+    </PropertyDef>
+    <PropertyDef name="cableX">
+      <Property name="dataType">int</Property>
+      <Property name="label">鍒楅厤缃�</Property>
+    </PropertyDef>
+    <PropertyDef name="cableType">
+      <Property></Property>
+      <Property name="label">鐢电紗绫诲瀷</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;CABLE_TYPE&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="cableFormat">
+      <Property></Property>
+      <Property name="label">鐢电紗鍒跺紡</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;CABLE_FORMAT&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="orgId">
+      <Property></Property>
+      <Property name="label">缁勭粐鍙�</Property>
+    </PropertyDef>
+    <PropertyDef name="createTime">
+      <Property name="dataType">DateTime</Property>
+      <Property name="label">鍒涘缓鏃堕棿</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="createBy">
+      <Property></Property>
+      <Property name="label">鍒涘缓浜�</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="updateTime">
+      <Property name="dataType">DateTime</Property>
+      <Property name="label">鏇存柊鏃堕棿</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="updateBy">
+      <Property></Property>
+      <Property name="label">鏇存柊浜�</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+  </DataType>
+  <DataType name="dtDeviceIot">
+    <Property name="creationType">com.fzzy.igds.domain.DeviceIot</Property>
+    <PropertyDef name="id">
+      <Property></Property>
+      <Property name="label">璁惧缂栫爜</Property>
+    </PropertyDef>
+    <PropertyDef name="deptId">
+      <Property></Property>
+      <Property name="label">鎵�灞炲簱鍖�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">kqmc</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="companyId">
+      <Property></Property>
+      <Property name="label">缁勭粐缂栫爜</Property>
+    </PropertyDef>
+    <PropertyDef name="depotId">
+      <Property></Property>
+      <Property name="label">鎵�灞炰粨搴�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="name">
+      <Property></Property>
+      <Property name="label">鍚嶇О</Property>
+    </PropertyDef>
+    <PropertyDef name="passCode">
+      <Property name="dataType">int</Property>
+      <Property name="label">璁惧缂栧彿</Property>
+    </PropertyDef>
+    <PropertyDef name="serId">
+      <Property></Property>
+      <Property name="label">鎵�灞炲垎鏈�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deviceSerPR#getAllSerCache&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="type">
+      <Property></Property>
+      <Property name="label">璁惧绫诲瀷</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;DEVICE_IOT_TYPE&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="remark">
+      <Property></Property>
+      <Property name="label">澶囨敞</Property>
+    </PropertyDef>
+    <PropertyDef name="posX">
+      <Property name="dataType">Double</Property>
+      <Property name="label">X鍧愭爣</Property>
+    </PropertyDef>
+    <PropertyDef name="posY">
+      <Property name="dataType">Double</Property>
+      <Property name="label">Y鍧愭爣</Property>
+    </PropertyDef>
+    <PropertyDef name="createTime">
+      <Property name="dataType">DateTime</Property>
+      <Property name="label">鍒涘缓鏃堕棿</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="createBy">
+      <Property></Property>
+      <Property name="label">鍒涘缓浜�</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="updateTime">
+      <Property name="dataType">DateTime</Property>
+      <Property name="label">鏇存柊鏃堕棿</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="updateBy">
+      <Property></Property>
+      <Property name="label">鏇存柊浜�</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+  </DataType>
+  <DataType name="dtDepotConf">
+    <Property name="creationType">com.fzzy.igds.domain.DepotConf</Property>
+    <PropertyDef name="depotId">
+      <Property></Property>
+      <Property name="label">鎵�灞炰粨搴�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;depotPR#getAllCache&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="deptId">
+      <Property></Property>
+      <Property name="label">鎵�灞炲簱鍖�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deptPR#getAllData&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">kqmc</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="companyId">
+      <Property></Property>
+      <Property name="label">缁勭粐缂栫爜</Property>
+    </PropertyDef>
+    <PropertyDef name="grainSer">
+      <Property></Property>
+      <Property name="label">绮儏鍒嗘満</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deviceSerPR#getAllSerCache&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+      <Property name="required">true</Property>
+    </PropertyDef>
+    <PropertyDef name="thSer">
+      <Property></Property>
+      <Property name="label">娓╂箍搴﹀垎鏈�</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;deviceSerPR#getAllSerCache&quot;).getResult()}</Property>
+        <Property name="keyProperty">id</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="grainFreq">
+      <Property></Property>
+      <Property name="label">淇濆瓨棰戠巼</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;GRAIN_FREQ&quot;)}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="thConf">
+      <Property></Property>
+      <Property name="label">娓╂箍搴﹂�氶亾</Property>
+    </PropertyDef>
+    <PropertyDef name="cableRule">
+      <Property></Property>
+      <Property name="label">甯冪嚎瑙勫垯</Property>
+    </PropertyDef>
+    <PropertyDef name="cableCir">
+      <Property></Property>
+      <Property name="label">绛掍粨灞傝鍒�</Property>
+    </PropertyDef>
+    <PropertyDef name="cableCone">
+      <Property name="label">绛掍粨閿ュ舰</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerCableCone&quot;).getResult()}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="cableStart">
+      <Property name="dataType">int</Property>
+      <Property name="label">鐢电紗寮�濮嬪垪</Property>
+    </PropertyDef>
+    <PropertyDef name="cableEnd">
+      <Property name="dataType">int</Property>
+      <Property name="label">鐢电紗鎴嚦鍒�</Property>
+    </PropertyDef>
+    <PropertyDef name="startOrientation">
+      <Property></Property>
+      <Property name="label">鐢电紗璧峰鏂逛綅</Property>
+      <Property name="mapping">
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerStartOrientation&quot;).getResult()}</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="startDirection">
+      <Property name="label">鐢电紗甯冪嚎鏂瑰悜</Property>
+      <Property name="mapping">
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerStartDirection&quot;).getResult()}</Property>
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="startPoint">
+      <Property name="label">鐢电紗璧峰鐐逛綅</Property>
+      <Property name="mapping">
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerStartPoint&quot;).getResult()}</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="startConvert">
+      <Property name="label">灞傝杞崲</Property>
+      <Property name="mapping">
+        <Property name="keyProperty">dictValue</Property>
+        <Property name="valueProperty">dictLabel</Property>
+        <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#triggerStartConvert&quot;).getResult()}</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="tempMax">
+      <Property name="dataType">Double</Property>
+      <Property name="label">娓╁害涓婇檺</Property>
+    </PropertyDef>
+    <PropertyDef name="temperature">
+      <Property name="dataType">Double</Property>
+      <Property name="label">娓╁樊闃堝��</Property>
+    </PropertyDef>
+    <PropertyDef name="startRow">
+      <Property name="dataType">Integer</Property>
+      <Property name="label">璧峰鏍瑰彿</Property>
+    </PropertyDef>
+    <PropertyDef name="grainAuto">
+      <Property></Property>
+      <Property name="label">绮儏浼樺寲</Property>
+      <Property name="mapping">
+        <Property name="mapValues">
+          <Collection>
+            <Entity>
+              <Property name="code">Y</Property>
+              <Property name="name">鏄�</Property>
+            </Entity>
+            <Entity>
+              <Property name="code">N</Property>
+              <Property name="name">鍚�</Property>
+            </Entity>
+          </Collection>
+        </Property>
+        <Property name="keyProperty">code</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="depotName">
+      <Property></Property>
+    </PropertyDef>
+    <PropertyDef name="depotType">
+      <Property></Property>
+    </PropertyDef>
+    <PropertyDef name="isOnlyTH">
+      <Property></Property>
+      <Property name="label">绮儏绫诲瀷</Property>
+      <Property name="mapping">
+        <Property name="mapValues">
+          <Collection>
+            <Entity>
+              <Property name="code">Y</Property>
+              <Property name="name">娓╂箍搴﹁澶�</Property>
+            </Entity>
+            <Entity>
+              <Property name="code">N</Property>
+              <Property name="name">绮儏鐢电紗</Property>
+            </Entity>
+          </Collection>
+        </Property>
+        <Property name="keyProperty">code</Property>
+        <Property name="valueProperty">name</Property>
+      </Property>
+    </PropertyDef>
+    <PropertyDef name="createTime">
+      <Property name="dataType">DateTime</Property>
+      <Property name="label">鍒涘缓鏃堕棿</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="createBy">
+      <Property></Property>
+      <Property name="label">鍒涘缓浜�</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="updateTime">
+      <Property name="dataType">DateTime</Property>
+      <Property name="label">鏇存柊鏃堕棿</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+    <PropertyDef name="updateBy">
+      <Property></Property>
+      <Property name="label">鏇存柊浜�</Property>
+      <Property name="readOnly">true</Property>
+    </PropertyDef>
+  </DataType>
 </Model>

--
Gitblit v1.9.3