From 15b5c60d13655519a3a744a67e988b45656508a4 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 06 三月 2025 11:10:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                |    2 
 admin/src/api/business/visitEvent.js                                                                    |    5 +
 admin/src/views/business/dangerStatic.vue                                                               |  112 ++++++++++++++++++++++
 admin/src/views/platform/index.vue                                                                      |   11 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java |   11 +-
 admin/src/views/business/visitEvent.vue                                                                 |  115 +++++++++++++---------
 6 files changed, 202 insertions(+), 54 deletions(-)

diff --git a/admin/src/api/business/visitEvent.js b/admin/src/api/business/visitEvent.js
index 94918e5..6264012 100644
--- a/admin/src/api/business/visitEvent.js
+++ b/admin/src/api/business/visitEvent.js
@@ -14,3 +14,8 @@
     download: true
   })
 }
+export function fetchcountNum (data) {
+  return request.post('/visitsAdmin/cloudService/business/visitEvent/countNum', data, {
+    trim: true
+  })
+}
\ No newline at end of file
diff --git a/admin/src/views/business/dangerStatic.vue b/admin/src/views/business/dangerStatic.vue
new file mode 100644
index 0000000..49d5e6d
--- /dev/null
+++ b/admin/src/views/business/dangerStatic.vue
@@ -0,0 +1,112 @@
+<template>
+  <div class="main_app">
+    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getData(1)" @clear="clear"
+      @changeForm='changeForm'>
+      <template #fastdate>
+        <el-radio-group v-model="filters.fastdate" size="small" @input="changeForm">
+          <el-radio-button label="0">褰撳ぉ</el-radio-button>
+          <el-radio-button label="6">杩�7澶�</el-radio-button>
+          <el-radio-button label="29">杩�30澶�</el-radio-button>
+        </el-radio-group>
+      </template>
+    </QueryForm>
+    <div class="main_content">
+      <div class="type_wrap">
+        <div class="title">闅愭偅绫诲瀷缁熻</div>
+        <div class="type" ref="typeRef"></div>
+      </div>
+      <div class="dept_wrap">
+        <div class="title">闅愭偅褰掑睘閮ㄩ棬缁熻</div>
+        <div class="dept" ref="deptRef"></div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import QueryForm from '@/components/common/QueryForm'
+import echarts from 'echarts'
+export default {
+  components: {
+    QueryForm,
+  },
+  data() {
+    return {
+      filters: {},
+      queryFormConfig: {
+        formItems: [
+          {
+            filed: 'status',
+            type: 'select',
+            label: '鐘舵��',
+            options: [
+              { label: '璁垮鐢宠', value: '0' },
+              { label: '璁垮鎶ュ', value: '1' },
+              { label: '鐢ㄨ溅鐢宠', value: '2' },
+              { label: '闅愭偅闅忔墜鎷�', value: '3' },
+              { label: '鐗╂祦杞︾敵璇�', value: '6' }
+            ]
+          },
+          {
+            filed1: 'startDate',
+            filed2: 'endDate',
+            type: 'datetime',
+            label: '鎻愭姤鏃堕棿'
+          },
+          {
+            type: 'slot',
+            filed: 'fastdate',
+            label: ''
+          }
+        ],
+        online: true
+      },
+    }
+  },
+  methods: {
+    getData(page) {
+      console.log(this.filters)
+    },
+    changeForm(form) {
+      console.log(form)
+    },
+    clear() {
+      this.filters = {}
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.main_app {
+  height: 100%;
+}
+
+.main_content {
+  display: flex;
+  height: calc(100% - 110px);
+  .title {
+    font-weight: 600;
+    font-size: 16px;
+    color: #222222;
+    margin-bottom: 20px;
+    margin-top: 20px;
+  }
+
+  .type_wrap {
+    flex: 5;
+    flex-shrink: 0;
+    border: 1px solid #E5E5E5;
+    height: 100%;
+    border-right: 12px solid #f7f7f7;
+  }
+
+  .dept_wrap {
+    flex: 4;
+    flex-shrink: 0;
+    border: 1px solid #E5E5E5;
+    height: 100%;
+    padding-left: 20px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/views/business/visitEvent.vue b/admin/src/views/business/visitEvent.vue
index 4af12b0..a95a8b9 100644
--- a/admin/src/views/business/visitEvent.vue
+++ b/admin/src/views/business/visitEvent.vue
@@ -1,58 +1,64 @@
 <template>
   <TableLayout :permissions="['business:visitevent:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="keyWords">
-        <el-input v-model="searchForm.keyWords" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="杞︾墝鍙�" prop="carNo">
-        <el-input v-model="searchForm.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="缁勭粐鍚嶇О" prop="visitorWorkUint">
-        <el-input v-model="searchForm.visitorWorkUint" placeholder="璇疯緭鍏ョ粍缁囧悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
-        <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
-          <el-option label="璁垮鐧昏" value="541200006"></el-option>
-          <el-option label="璁垮绛剧" value="541200007"></el-option>
-          <el-option label="璁垮閫氳" value="541200060"></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="杩涘嚭绫诲瀷" prop="inOrOut">
-        <el-select v-model="searchForm.inOrOut" placeholder="璇烽�夋嫨">
-          <el-option label="杩�" value="0"></el-option>
-          <el-option label="鍑�" value="1"></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="璧峰鏃堕棿" prop="carNo">
-        <!-- <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
+    <div slot="search-form" ref="QueryFormRef">
+      <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+        <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="keyWords">
+          <el-input v-model="searchForm.keyWords" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="杞︾墝鍙�" prop="carNo">
+          <el-input v-model="searchForm.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="缁勭粐鍚嶇О" prop="visitorWorkUint">
+          <el-input v-model="searchForm.visitorWorkUint" placeholder="璇疯緭鍏ョ粍缁囧悕绉�"
+            @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
+          <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
+            <el-option label="璁垮鐧昏" value="541200006"></el-option>
+            <el-option label="璁垮绛剧" value="541200007"></el-option>
+            <el-option label="璁垮閫氳" value="541200060"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="杩涘嚭绫诲瀷" prop="inOrOut">
+          <el-select v-model="searchForm.inOrOut" placeholder="璇烽�夋嫨">
+            <el-option label="杩�" value="0"></el-option>
+            <el-option label="鍑�" value="1"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="璧峰鏃堕棿" prop="carNo">
+          <!-- <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
           value-format="yyyy-MM-dd HH:mm:ss" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡">
         </el-date-picker> -->
-        <el-date-picker type="datetime" v-model="searchForm.startTime" value-format="yyyy-MM-dd HH:mm:ss"
-          placeholder="璇烽�夋嫨寮�濮嬫椂闂�" @change="changeRadio" />
-        <el-date-picker type="datetime" v-model="searchForm.endTime" value-format="yyyy-MM-dd HH:mm:ss"
-          placeholder="璇烽�夋嫨缁撴潫鏃堕棿" @change="changeRadio" />
-      </el-form-item>
-      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
-        <el-radio-button label="0">褰撳ぉ</el-radio-button>
-        <el-radio-button label="1">杩�7澶�</el-radio-button>
-        <el-radio-button label="2">杩�30澶�</el-radio-button>
-      </el-radio-group>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
+          <el-date-picker type="datetime" v-model="searchForm.startTime" value-format="yyyy-MM-dd HH:mm:ss"
+            placeholder="璇烽�夋嫨寮�濮嬫椂闂�" @change="changeRadio" />
+          <el-date-picker type="datetime" v-model="searchForm.endTime" value-format="yyyy-MM-dd HH:mm:ss"
+            placeholder="璇烽�夋嫨缁撴潫鏃堕棿" @change="changeRadio" />
+        </el-form-item>
+        <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
+          <el-radio-button label="0">褰撳ぉ</el-radio-button>
+          <el-radio-button label="1">杩�7澶�</el-radio-button>
+          <el-radio-button label="2">杩�30澶�</el-radio-button>
+        </el-radio-group>
+        <section>
+          <el-button type="primary" @click="search">鎼滅储</el-button>
+          <el-button @click="reset">閲嶇疆</el-button>
+        </section>
+      </el-form>
+    </div>
+
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:visitevent:exportExcel']">
         <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:visitevent:exportExcel']"
             @click="exportExcel">瀵煎嚭</el-button></li>
+        <li class="ml20"> 鎷滆浜烘锛�<span class="primaryColor">{{staticObj.eventNum}}娆�</span></li>
+        <li class="ml20"> 鎷滆浜烘暟锛�<span class="primaryColor">{{staticObj.visitorNum}}浜�</span></li>
       </ul>
-      <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
-        <el-table-column prop="personName" label="濮撳悕" min-width="100px"></el-table-column>
+      <el-table :max-height="tableHeight" v-loading="isWorking.search" :data="tableData.list" stripe>
+        <el-table-column prop="personName" label="濮撳悕" min-width="90px"></el-table-column>
         <el-table-column prop="phone" label="鎵嬫満鍙风爜" min-width="100px"></el-table-column>
-        <el-table-column prop="idcardDecode" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+        <el-table-column prop="idcardDecode" label="韬唤璇佸彿鐮�" min-width="120px"></el-table-column>
         <el-table-column prop="visitorWorkUint" label="缁勭粐" min-width="100px"></el-table-column>
         <el-table-column prop="carNo" label="杞︾墝鍙�" min-width="100px"></el-table-column>
         <el-table-column prop="beVisitedPersonName" label="琚浜�" min-width="100px"></el-table-column>
@@ -72,7 +78,7 @@
             </el-image>
           </template>
         </el-table-column>
-        <el-table-column prop="createDate" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="浜嬩欢鏃堕棿" min-width="120px"></el-table-column>
       </el-table>
       <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
       </pagination>
@@ -85,6 +91,7 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import { timeForMat } from '@/utils/util'
+import { fetchcountNum } from '@/api/business/visitEvent'
 export default {
   name: 'VisitEvent',
   extends: BaseTable,
@@ -103,7 +110,9 @@
         visitorWorkUint: '',
         radio: '0'
       },
-      time: []
+      tableHeight: 400,
+      time: [],
+      staticObj: {}
     }
   },
   created() {
@@ -117,12 +126,22 @@
     this.changeRadio('0')
     this.search()
   },
+  mounted() {
+    this.$nextTick(() => {
+      this.tableHeight = document.body.scrollHeight - this.$refs.QueryFormRef.offsetHeight - 300
+    })
+  },
   methods: {
     seleTime(e) {
       this.searchForm.startTime = e[0]
       this.searchForm.endTime = e[1]
       this.searchForm.radio = null
       this.search()
+    },
+    getCountNum() {
+      fetchcountNum(this.searchForm).then(res => {
+        this.staticObj = res
+      })
     },
     changeRadio(e) {
       if (e === '0') {
@@ -149,7 +168,11 @@
       this.time = []
       this.searchForm = {}
       this.search()
-    }
+    },
+    search() {
+      this.getCountNum()
+      this.handlePageChange(1)
+    },
   }
 }
 </script>
diff --git a/admin/src/views/platform/index.vue b/admin/src/views/platform/index.vue
index e566346..82d288f 100644
--- a/admin/src/views/platform/index.vue
+++ b/admin/src/views/platform/index.vue
@@ -202,17 +202,26 @@
       detail: {},
       isShowQueuing: false,
       timer: null,
+      timer2: null,
 
       loadingOpen: false,
       loadingFinish: false,
     }
   },
   created() {
-    setInterval(() => {
+    this.timer2 = setInterval(() => {
       this.getPlatGroupList()
     }, 1000 * 20)
     this.getPlatGroupList()
   },
+  beforeDestroy() {
+    if (this.timer2) {
+      clearInterval(this.timer2)
+    }
+    if (this.timer) {
+      clearInterval(this.timer)
+    }
+  },
   methods: {
     handleWork(item) {
       this.loadingOpen = true
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 95c9d88..4b0a54c 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -726,7 +726,7 @@
                 "meeting_user_rel ur\n" +
                 "LEFT JOIN `SYSTEM_USER` su ON ur.USER_ID = su.id \n" +
                 "LEFT JOIN meeting_book b ON ur.OBJ_ID = b.id \n" +
-                "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS = 0" +
+                "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS in(0,2) and b.isdeleted=0" +
                 "<if test='userId != null'>"+
                 "and ur.USER_ID = #{userId}\n" +
                 "</if>"+
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
index df2ed78..82a6608 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
@@ -258,17 +258,18 @@
         if(count!=null){
             data.setEventNum(count);
         }
-        Long count1 = visitEventJoinMapper.selectCount(new QueryWrapper<VisitEvent>().lambda()
+        VisitEvent count1 = visitEventJoinMapper.selectOne(new QueryWrapper<VisitEvent>()
+                 .select("count(distinct(visitor_id)) as num")
+                        .lambda()
                 .ge(StringUtils.isNotBlank(model.getStartTime()),VisitEvent::getCreateDate, model.getStartTime())
                 .le(StringUtils.isNotBlank(model.getEndTime()), VisitEvent::getCreateDate,model.getEndTime())
                 .eq( VisitEvent::getIsdeleted,Constants.ZERO)
                 .eq( VisitEvent::getInOrOut,Constants.ZERO)
                 .isNotNull(VisitEvent::getVisitorId)
                 .eq(VisitEvent::getEventType,HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey())
-                .groupBy(VisitEvent::getVisitorId)
                 );
         if(count1!=null){
-            data.setVisitorNum(count);
+            data.setVisitorNum((long)Constants.formatIntegerNum(count1.getNum()));
         }
         return data;
     }
@@ -322,13 +323,11 @@
         return visitEventDTOIPage;
     }
 
-
     private List<VisitEvent> newVisitEvent(List<VisitEvent> VisitEventDTOList) {
         List<String> codes = Arrays.asList(Constants.FTP_RESOURCE_PATH,Constants.MEMBER_IMG);
         List<SystemDictData> list = systemDictDataMapper.list(codes);
         Map<String,SystemDictData> dataMap = list.stream().collect(Collectors.toMap(SystemDictData::getLabel, Function.identity()));
         VisitEventDTOList.stream().forEach(obj->{
-
             if(StringUtils.isNotBlank( obj.getCaptureUrl())
                     && !obj.getCaptureUrl().startsWith(HKConstants.IMG_INDEX)
                     && !obj.getCaptureUrl().startsWith(HKConstants.IMG_INDEX_ERROR)) {
@@ -338,7 +337,7 @@
                             +obj.getCaptureUrl());
                 }
             }
-            obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())); ;
+            obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType()));
         });
         return  VisitEventDTOList;
     }

--
Gitblit v1.9.3