From 1360cdb47a4306039abb3bcbed77fb7093779081 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期五, 19 十二月 2025 11:06:32 +0800
Subject: [PATCH] 损益管理

---
 fzzy-igdss-web/src/main/resources/static/group/gis.js                                      |    2 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java                 |    6 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOver.view.xml                         |  397 ++++++++++++++++++++++++++++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java                         |    9 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/InoutLossOverMapper.java                |   14 +
 fzzy-igdss-web/src/main/resources/templates/group/index.html                               |    2 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/Patrol.view.xml                                |    2 
 fzzy-igdss-view/src/main/java/models/core.model.xml                                        |    6 
 fzzy-igdss-web/src/main/resources/static/group/master.css                                  |    1 
 fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOverPR.java                           |   70 +++++
 fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java            |   11 
 fzzy-igdss-web/src/main/resources/static/group/video.js                                    |    2 
 fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutLossOverService.java              |  127 +++++++++
 fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutLossOver.java                      |   67 +++++
 fzzy-igdss-web/src/main/resources/static/group/index.js                                    |    2 
 fzzy-igdss-web/src/main/resources/templates/group/video.html                               |    2 
 fzzy-igdss-web/src/main/resources/templates/security/patrol/patrolRecord/patrolRecord.html |    2 
 fzzy-igdss-web/src/main/resources/templates/group/gis.html                                 |    1 
 18 files changed, 714 insertions(+), 9 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 b06c53e..3591b8a 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
@@ -114,6 +114,15 @@
     public static final String TYPE_OUT = "OUT";
 
     /**
+     * 鎹熸孩绫诲瀷-鎹熻��
+     */
+    public static final String TYPE_LOSS = "LOSS";
+    /**
+     * 鎹熸孩绫诲瀷-婧㈠嚭
+     */
+    public static final String TYPE_OVER = "OVER";
+
+    /**
      * 鍑哄叆搴撴祦绋�
      */
     // 娴佺▼-鐧昏
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutLossOver.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutLossOver.java
new file mode 100644
index 0000000..e90bbb8
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutLossOver.java
@@ -0,0 +1,67 @@
+package com.fzzy.igds.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 鎹熺泭瀹炰綋
+ * @Author CZT
+ * @Date 2025/12/18 20:53
+ */
+@Data
+@Entity
+@Table(name = "d_inout_loss_over")
+@TableName("d_inout_loss_over")
+@EqualsAndHashCode(callSuper = false)
+public class InoutLossOver extends BizBaseEntity implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name = "id", columnDefinition = "varchar(40) COMMENT '鎹熻�楀崟鍙�(yyyyMMdd + 3浣嶉『搴忓彿)'")
+	@TableField("id")
+	private String id;
+
+	@Column(name = "dept_id", columnDefinition = "varchar(40) COMMENT '鎵�灞炲簱鍖�'")
+	@TableField("dept_id")
+	private String deptId;
+
+	@Column(name = "depot_id", columnDefinition = "varchar(40) COMMENT '鍏ュ簱浠撳簱'")
+	@TableField("depot_id")
+	private String depotId;
+
+	@Column(name = "type", columnDefinition = "varchar(40) COMMENT '鎹熺泭绫诲瀷(LOSS-鎹熻�楋紝OVER-婧㈠嚭)'")
+	@TableField("type")
+	private String type;
+
+	@Column(name = "food_variety", columnDefinition = "varchar(7) COMMENT '绮鍝佺'")
+	@TableField("food_variety")
+	private String foodVariety;
+
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@Column(name = "loss_time", columnDefinition = "datetime COMMENT '鎹熺泭鏃ユ湡'")
+	@TableField("loss_time")
+	private Date lossTime;
+
+	@Column(name = "amount", columnDefinition = "decimal(20,6) COMMENT '閲嶉噺(鍗曚綅锛欿G)'")
+	@TableField("amount")
+	private Double amount;
+
+	@Column(name = "info", columnDefinition = "varchar(200) COMMENT '鎹熺泭鍘熷洜'")
+	@TableField("info")
+	private String info;
+
+	@Column(name = "remark", columnDefinition = "varchar(100) COMMENT '澶囨敞璇存槑'")
+	@TableField("remark")
+	private String remark;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/InoutLossOverMapper.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/InoutLossOverMapper.java
new file mode 100644
index 0000000..b3dbb1f
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/mapper/InoutLossOverMapper.java
@@ -0,0 +1,14 @@
+package com.fzzy.igds.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fzzy.igds.domain.InoutLossOver;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/19 09:05
+ */
+@Mapper
+public interface InoutLossOverMapper extends BaseMapper<InoutLossOver> {
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutLossOverService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutLossOverService.java
new file mode 100644
index 0000000..34192b4
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutLossOverService.java
@@ -0,0 +1,127 @@
+package com.fzzy.igds.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fzzy.igds.data.IgdsBaseParam;
+import com.fzzy.igds.domain.InoutLossOver;
+import com.fzzy.igds.mapper.InoutLossOverMapper;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/19 09:05
+ */
+@Slf4j
+@Service
+public class InoutLossOverService {
+
+    @Resource
+    private InoutLossOverMapper inoutLossOverMapper;
+
+    /**
+     * 鍒楄〃鍒嗛〉鏌ヨ
+     * @param page
+     * @param param
+     */
+    public void pageData(Page<InoutLossOver> page, IgdsBaseParam param) {
+        QueryWrapper<InoutLossOver> queryWrapper = new QueryWrapper<>();
+
+        param.setCompanyId(ContextUtil.getCompanyId());
+        param.setDeptId(ContextUtil.subDeptId(null));
+        queryWrapper.eq("company_id", param.getCompanyId());
+        queryWrapper.eq("dept_id", param.getDeptId());
+
+        if(StringUtils.isNotBlank(param.getDepotId())){
+            queryWrapper.like("depot_id", param.getDepotId());
+        }
+        if(null != param.getStart()){
+            queryWrapper.ge("loss_time", DateUtil.getCurZero(param.getStart()));
+        }
+        if(null != param.getEnd()){
+            queryWrapper.le("loss_time", DateUtil.getNextZero(param.getEnd()));
+        }
+
+        inoutLossOverMapper.selectPage(page, queryWrapper);
+    }
+
+    /**
+     * 鏌ヨ搴撳尯涓嬫墍鏈変俊鎭�
+     * @return
+     */
+    public List<InoutLossOver> listData(String companyId, String deptId) {
+
+        QueryWrapper<InoutLossOver> queryWrapper = new QueryWrapper<>();
+
+        if(StringUtils.isNotBlank(companyId)){
+            queryWrapper.eq("company_id", companyId);
+        }
+        if(StringUtils.isNotBlank(deptId)){
+            queryWrapper.eq("dept_id", deptId);
+        }
+        queryWrapper.orderByDesc("id");
+
+        return inoutLossOverMapper.selectList(queryWrapper);
+    }
+
+    /**
+     * 淇濆瓨鏁版嵁
+     * @param data
+     */
+    public void saveData(InoutLossOver data) {
+        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());
+        if(StringUtils.isEmpty(data.getId())){
+            data.setId(getStrId(data.getLossTime()));
+            data.setCreateBy(ContextUtil.getLoginUserName());
+            data.setCreateTime(new Date());
+            inoutLossOverMapper.insert(data);
+        }else {
+            inoutLossOverMapper.updateById(data);
+        }
+    }
+
+    /**
+     * 鑾峰彇涓婚敭ID
+     *
+     * @param time
+     */
+    public String getStrId(Date time) {
+
+        QueryWrapper<InoutLossOver> queryWrapper = new QueryWrapper<>();
+        queryWrapper.ge("loss_time", DateUtil.getCurZero(time));
+        queryWrapper.le("loss_time", DateUtil.getNextZero(time));
+        queryWrapper.orderByDesc("id");
+
+        List<InoutLossOver> list = inoutLossOverMapper.selectList(queryWrapper);
+        String oldOrderId = null;
+        if (null != list && list.size() > 0) {
+            oldOrderId = list.get(0).getId().substring(8);
+        }
+        return DateFormatUtils.format(time, "yyyyMMdd") + ContextUtil.getOrderId(oldOrderId, 3);
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     * @param data
+     * @return
+     */
+    public String delData(InoutLossOver data) {
+        inoutLossOverMapper.deleteById(data);
+        return null;
+    }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java
index e6ef456..0961740 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/websocket/WebSocketPacket.java
@@ -14,11 +14,11 @@
 
 	public static final String BIZ_TAG_COMMON = "common";
 
-	public static final String BIZ_TAG_SCREEN_CHECK = "check";
+	public static final String BIZ_TAG_SCREEN_INDEX = "index";
 
-	public static final String BIZ_TAG_SCREEN_INOUT = "inout";
+	public static final String BIZ_TAG_SCREEN_GIS = "gis";
 
-	public static final String BIZ_TAG_SCREEN_GROUP = "group";
+	public static final String BIZ_TAG_SCREEN_VIDEO = "video";
 
 	/**
 	 * 
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOver.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOver.view.xml
new file mode 100644
index 0000000..eaa2f8b
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOver.view.xml
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+  <Arguments/>
+  <Context/>
+  <Model>
+    <DataType name="dtMain">
+      <Property name="creationType">com.fzzy.igds.domain.InoutLossOver</Property>
+      <PropertyDef name="id">
+        <Property></Property>
+        <Property name="label">鎹熺泭鍗曞彿</Property>
+        <Property name="readOnly">true</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="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="keyProperty">key</Property>
+          <Property name="valueProperty">value</Property>
+          <Property name="mapValues">
+            <Collection>
+              <Entity>
+                <Property name="key">LOSS</Property>
+                <Property name="value">鎹熻��</Property>
+              </Entity>
+              <Entity>
+                <Property name="key">OVER</Property>
+                <Property name="value">婧㈠嚭</Property>
+              </Entity>
+            </Collection>
+          </Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="foodVariety">
+        <Property></Property>
+        <Property name="label">绮鍝佺</Property>
+        <Property name="mapping">
+          <Property name="mapValues">${dorado.getDataProvider(&quot;dicPR#sysDictData&quot;).getResult(&quot;FOOD_VARIETY_&quot;)}</Property>
+          <Property name="keyProperty">dictValue</Property>
+          <Property name="valueProperty">dictLabel</Property>
+        </Property>
+      </PropertyDef>
+      <PropertyDef name="lossTime">
+        <Property name="dataType">Date</Property>
+        <Property name="label">鎹熺泭鏃ユ湡</Property>
+      </PropertyDef>
+      <PropertyDef name="amount">
+        <Property name="dataType">Double</Property>
+        <Property name="label">鎹熺泭鏁伴噺</Property>
+        <Property name="displayFormat">0.00 KG</Property>
+      </PropertyDef>
+      <PropertyDef name="confName">
+        <Property></Property>
+        <Property name="label">鐝鍚嶇О</Property>
+      </PropertyDef>
+      <PropertyDef name="info">
+        <Property></Property>
+        <Property name="label">鎹熺泭鍘熷洜</Property>
+      </PropertyDef>
+      <PropertyDef name="remark">
+        <Property></Property>
+        <Property name="label">澶囨敞淇℃伅</Property>
+      </PropertyDef>
+      <PropertyDef name="createTime">
+        <Property name="dataType">DateTime</Property>
+        <Property name="label">鍒涘缓鏃堕棿</Property>
+      </PropertyDef>
+      <PropertyDef name="createBy">
+        <Property></Property>
+        <Property name="label">鍒涘缓浜�</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">
+/**&#xD;
+* 鏌ヨ&#xD;
+*/&#xD;
+query = function(){&#xD;
+    view.get(&quot;#dsMain&quot;).flushAsync();&#xD;
+}&#xD;
+query();&#xD;
+
+</ClientEvent>
+    <Property name="packages">font-awesome,css-common</Property>
+    <DataSet id="dsMain">
+      <Property name="dataType">[dtMain]</Property>
+      <Property name="dataProvider">inoutLossOverPR#pageData</Property>
+      <Property name="pageSize">15</Property>
+      <Property name="loadMode">lazy</Property>
+    </DataSet>
+    <DataSet id="dsParam">
+      <ClientEvent name="onReady">self.insert({});</ClientEvent>
+      <Property name="dataType">dtBaseParam</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">depotId</Property>
+          <Property name="property">depotId</Property>
+          <Property name="label">鎹熺泭浠撳簱</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">start</Property>
+          <Property name="property">start</Property>
+          <Editor/>
+        </AutoFormElement>
+        <AutoFormElement>
+          <Property name="name">end</Property>
+          <Property name="property">end</Property>
+          <Editor/>
+        </AutoFormElement>
+        <Button>
+          <ClientEvent name="onClick">var data = view.get(&quot;#dsParam.data&quot;);&#xD;
+            if(data){&#xD;
+            view.get(&quot;#dsMain&quot;).set(&quot;parameter&quot;,data).flushAsync();&#xD;
+            }else{&#xD;
+            view.get(&quot;#dsMain&quot;).flushAsync();&#xD;
+            }</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>
+      </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>
+        <RowSelectorColumn/>
+        <RowNumColumn>
+          <Property name="width">50</Property>
+          <Property name="caption">搴忓彿</Property>
+        </RowNumColumn>
+        <DataColumn name="id">
+          <Property name="property">id</Property>
+          <Property name="width">120</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn>
+          <Property name="property">deptId</Property>
+          <Property name="align">left</Property>
+          <Property name="name">deptId</Property>
+        </DataColumn>
+        <DataColumn name="depotId">
+          <Property name="property">depotId</Property>
+          <Property name="align">center</Property>
+          <Property name="width">150</Property>
+        </DataColumn>
+        <DataColumn name="foodVariety">
+          <Property name="property">foodVariety</Property>
+          <Property name="align">center</Property>
+          <Property name="width">150</Property>
+        </DataColumn>
+        <DataColumn name="type">
+          <Property name="property">type</Property>
+          <Property name="align">center</Property>
+          <Property name="width">150</Property>
+        </DataColumn>
+        <DataColumn name="lossTime">
+          <Property name="property">lossTime</Property>
+          <Property name="align">center</Property>
+          <Property name="width">150</Property>
+        </DataColumn>
+        <DataColumn name="amount">
+          <Property name="property">amount</Property>
+          <Property name="align">center</Property>
+          <Property name="width">150</Property>
+        </DataColumn>
+        <DataColumn name="remark">
+          <Property name="property">remark</Property>
+          <Property name="align">center</Property>
+        </DataColumn>
+        <DataColumn>
+          <Property name="property">updateTime</Property>
+          <Property name="align">center</Property>
+          <Property name="name">updateTime</Property>
+          <Property name="width">160</Property>
+        </DataColumn>
+      </DataGrid>
+      <ToolBar layoutConstraint="bottom">
+        <Fill/>
+        <DataPilot layoutConstraint="right">
+          <Property name="itemCodes">pageSize,pages</Property>
+          <Property name="dataSet">dsMain</Property>
+        </DataPilot>
+      </ToolBar>
+    </Container>
+    <Dialog id="dialogMain" layout="regionPadding:8">
+      <Property name="iconClass">fa fa-tasks</Property>
+      <Property name="width">60%</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">id</Property>
+                <Property name="property">id</Property>
+                <Editor>
+                  <TextEditor id="sn">
+                    <Property name="blankText"> -- 绯荤粺鑷姩鐢熸垚 --</Property>
+                  </TextEditor>
+                </Editor>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">deptId</Property>
+                <Property name="property">deptId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">depotId</Property>
+                <Property name="property">depotId</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">type</Property>
+                <Property name="property">type</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">foodVariety</Property>
+                <Property name="property">foodVariety</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">lossTime</Property>
+                <Property name="property">lossTime</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">amount</Property>
+                <Property name="property">amount</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateBy</Property>
+                <Property name="property">updateBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:2">
+                <Property name="name">info</Property>
+                <Property name="property">info</Property>
+                <Property name="editorType">TextArea</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement>
+                <Property name="name">updateBy</Property>
+                <Property name="property">updateBy</Property>
+                <Editor/>
+              </AutoFormElement>
+              <AutoFormElement layoutConstraint="colSpan:3">
+                <Property name="name">remark</Property>
+                <Property name="property">remark</Property>
+                <Property name="editorType">TextArea</Property>
+                <Editor/>
+              </AutoFormElement>
+            </AutoForm>
+          </Children>
+        </FieldSet>
+      </Children>
+      <Tools/>
+    </Dialog>
+    <UpdateAction id="uaAction">
+      <Property name="dataResolver">inoutLossOverPR#saveData</Property>
+      <UpdateItem>
+        <Property name="dataSet">dsMain</Property>
+        <Property name="dataPath">[#current]</Property>
+      </UpdateItem>
+    </UpdateAction>
+    <AjaxAction id="ajaxDel">
+      <Property name="confirmMessage">纭畾瑕佸垹闄ゅ悧锛�</Property>
+      <Property name="service">inoutLossOverPR#delData</Property>
+    </AjaxAction>
+  </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOverPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOverPR.java
new file mode 100644
index 0000000..8ab3b4f
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutLossOverPR.java
@@ -0,0 +1,70 @@
+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.data.IgdsBaseParam;
+import com.fzzy.igds.domain.InoutLossOver;
+import com.fzzy.igds.service.InoutLossOverService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+
+/**
+ * @Description 鎹熺泭绠$悊
+ * @Author CZT
+ * @Date 2025/12/19 09:05
+ */
+@Component
+public class InoutLossOverPR {
+
+    @Resource
+    private InoutLossOverService inoutLossOverService;
+
+    /**
+     * inoutLossOverPR#pageData 鑾峰彇淇℃伅
+     *
+     * @param param
+     * @return
+     */
+    @DataProvider
+    public void pageData(Page<InoutLossOver> page, IgdsBaseParam param) {
+        if(null == param) {
+            param = new IgdsBaseParam();
+        }
+        com.baomidou.mybatisplus.extension.plugins.pagination.Page<InoutLossOver> corePage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNo(), page.getPageSize());
+
+
+        inoutLossOverService.pageData(corePage, param);
+
+        // 閲嶆柊灏佽
+        page.setEntities(corePage.getRecords());
+        page.setEntityCount(Integer.parseInt(String.valueOf(corePage.getTotal())));
+    }
+
+    /**
+     * inoutLossOverPR#saveData
+     *
+     * @param data
+     */
+    @DataResolver
+    public void saveData(InoutLossOver data) {
+        InoutLossOver item = new InoutLossOver();
+        BeanUtils.copyProperties(data, item);
+        inoutLossOverService.saveData(item);
+    }
+
+    /**
+     * inoutLossOverPR#delData
+     *
+     * @param data
+     * @return
+     */
+    @Expose
+    public String delData(InoutLossOver data) {
+        InoutLossOver item = new InoutLossOver();
+        BeanUtils.copyProperties(data, item);
+        return inoutLossOverService.delData(item);
+    }
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Patrol.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Patrol.view.xml
index 5259831..c1222e0 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Patrol.view.xml
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Patrol.view.xml
@@ -132,7 +132,7 @@
           <Property name="exClassName">btn-q1</Property>
         </Button>
         <Button>
-          <ClientEvent name="onClick">view.get(&quot;#dsParam&quot;).flushAsync();</ClientEvent>
+          <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>
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 1a389aa..9b2565b 100644
--- a/fzzy-igdss-view/src/main/java/models/core.model.xml
+++ b/fzzy-igdss-view/src/main/java/models/core.model.xml
@@ -84,6 +84,12 @@
     </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>
   </DataType>
   <DataType name="dtArea">
diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java
index 5d623d0..0ec94b3 100644
--- a/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/group/GroupController.java
@@ -5,6 +5,7 @@
 import com.fzzy.igds.domain.DicArea;
 import com.fzzy.igds.domain.Slogan;
 import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.websocket.WebSocketPacket;
 import com.fzzy.sys.manager.common.CommonManager;
 import com.fzzy.sys.manager.gropu.GroupManager;
 import com.ruoyi.common.core.domain.entity.SysUser;
@@ -48,6 +49,9 @@
         Slogan dicSlogan = commonManager.getDicSlogan();
         view.put("dicSlogan", dicSlogan);
 
+        view.put("bizType", "screen");
+        view.put("bizTag", WebSocketPacket.BIZ_TAG_COMMON);
+
         //鏌ヨ搴撳尯淇℃伅
         List<Dept> deptList = groupManager.getAllDept(user.getCompanyId());
         view.put("deptList", deptList);
@@ -71,6 +75,10 @@
         Slogan dicSlogan = commonManager.getDicSlogan();
         view.put("dicSlogan", dicSlogan);
 
+
+        view.put("bizType", "screen");
+        view.put("bizTag", WebSocketPacket.BIZ_TAG_COMMON);
+
         //鏌ヨ搴撳尯淇℃伅
         List<Dept> deptList = groupManager.getAllDept(user.getCompanyId());
         view.put("deptList", deptList);
@@ -94,6 +102,9 @@
         Slogan dicSlogan = commonManager.getDicSlogan();
         view.put("dicSlogan", dicSlogan);
 
+        view.put("bizType", "screen");
+        view.put("bizTag", WebSocketPacket.BIZ_TAG_COMMON);
+
         view.put("defaultAreaCode", "650000");
 
         //鑾峰彇鏂扮枂鍖哄垝淇℃伅
diff --git a/fzzy-igdss-web/src/main/resources/static/group/gis.js b/fzzy-igdss-web/src/main/resources/static/group/gis.js
index cd450bf..01bad7f 100644
--- a/fzzy-igdss-web/src/main/resources/static/group/gis.js
+++ b/fzzy-igdss-web/src/main/resources/static/group/gis.js
@@ -65,7 +65,7 @@
     });
 
     // 鍒濆鍖朩ebSocket
-    initWS(companyId,"screen",null,null);
+    initWS(companyId,bizType, bizTag, userId);
 });
 
 // socket淇℃伅杩斿洖铏曠悊
diff --git a/fzzy-igdss-web/src/main/resources/static/group/index.js b/fzzy-igdss-web/src/main/resources/static/group/index.js
index 9d2a528..6d57481 100644
--- a/fzzy-igdss-web/src/main/resources/static/group/index.js
+++ b/fzzy-igdss-web/src/main/resources/static/group/index.js
@@ -26,7 +26,7 @@
     init();
 
     // 鍒濆鍖朩ebSocket
-    initWS(companyId,"screen",null,null);
+    initWS(companyId,bizType, bizTag, userId);
 });
 
 // 鍒濆鍖栭〉闈�
diff --git a/fzzy-igdss-web/src/main/resources/static/group/master.css b/fzzy-igdss-web/src/main/resources/static/group/master.css
index 5e8506f..eb1d96d 100644
--- a/fzzy-igdss-web/src/main/resources/static/group/master.css
+++ b/fzzy-igdss-web/src/main/resources/static/group/master.css
@@ -31,7 +31,6 @@
 
 .i-icon img,
 .i-icon32 img {
-	width: 100%;
 	height: 100%;
 	vertical-align: top;
 }
diff --git a/fzzy-igdss-web/src/main/resources/static/group/video.js b/fzzy-igdss-web/src/main/resources/static/group/video.js
index b909ec7..05862a1 100644
--- a/fzzy-igdss-web/src/main/resources/static/group/video.js
+++ b/fzzy-igdss-web/src/main/resources/static/group/video.js
@@ -79,7 +79,7 @@
     initHtml();
 
     // 鍒濆鍖朩ebSocket
-    initWS(companyId,"screen",null,null);
+    initWS(companyId,bizType, bizTag, userId);
 });
 
 // 鍒濆鍖栭〉闈�
diff --git a/fzzy-igdss-web/src/main/resources/templates/group/gis.html b/fzzy-igdss-web/src/main/resources/templates/group/gis.html
index 6db5a86..134285d 100644
--- a/fzzy-igdss-web/src/main/resources/templates/group/gis.html
+++ b/fzzy-igdss-web/src/main/resources/templates/group/gis.html
@@ -447,6 +447,7 @@
 		var allArea = [[${allArea}]];
 		var deptList = [[${deptList}]];
 		var bizType = [[${bizType}]];
+		var bizTag = [[${bizTag}]];
 		var dicSlogan = [[${dicSlogan}]];
 		var defaultAreaCode = [[${defaultAreaCode}]];
 	</script>
diff --git a/fzzy-igdss-web/src/main/resources/templates/group/index.html b/fzzy-igdss-web/src/main/resources/templates/group/index.html
index 94f3eec..bee2800 100644
--- a/fzzy-igdss-web/src/main/resources/templates/group/index.html
+++ b/fzzy-igdss-web/src/main/resources/templates/group/index.html
@@ -273,6 +273,8 @@
     var deptId = [[${deptId}]];
     var dicSlogan = [[${dicSlogan}]];
     var deptList = [[${deptList}]];
+    var bizType = [[${bizType}]];
+    var bizTag = [[${bizTag}]];
 </script>
 </body>
 </html>
diff --git a/fzzy-igdss-web/src/main/resources/templates/group/video.html b/fzzy-igdss-web/src/main/resources/templates/group/video.html
index f85edf6..12fb614 100644
--- a/fzzy-igdss-web/src/main/resources/templates/group/video.html
+++ b/fzzy-igdss-web/src/main/resources/templates/group/video.html
@@ -402,6 +402,8 @@
 <script th:src="@{/group/video.js}"></script>
 <script th:inline="javascript">
 
+    var bizType = [[${bizType}]];
+    var bizTag = [[${bizTag}]];
     var deptCur = [[${deptInfo}]]
     var deptId = [[${deptId}]];
     var dicSlogan = [[${dicSlogan}]];
diff --git a/fzzy-igdss-web/src/main/resources/templates/security/patrol/patrolRecord/patrolRecord.html b/fzzy-igdss-web/src/main/resources/templates/security/patrol/patrolRecord/patrolRecord.html
index 3022876..465f376 100644
--- a/fzzy-igdss-web/src/main/resources/templates/security/patrol/patrolRecord/patrolRecord.html
+++ b/fzzy-igdss-web/src/main/resources/templates/security/patrol/patrolRecord/patrolRecord.html
@@ -23,7 +23,7 @@
             <!-- 杞ㄨ抗鍗$墖鍒楄〃锛圱hymeleaf寰幆娓叉煋锛� -->
             <div th:each="record,stat : ${patrolRecordList}" class="track-card" data-index="${stat.index}">
                 <div style="margin-bottom: 10px">
-                    <img style="width: 100%" th:src="${record.imgName ?: '/logo-sm.png'}" th:data-id="${record.id}">
+                    <img style="width: 100%;max-height: 200px;" th:src="${record.imgName ?: '/logo-sm.png'}" th:data-id="${record.id}">
                 </div>
                 <div class="card-row">
                     <span class="label">宸�&nbsp;&nbsp;妫�&nbsp;&nbsp;浜猴細</span>

--
Gitblit v1.9.3