From 8bf846c4c3870d64a33cebc1c168421235af7707 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期二, 27 八月 2024 09:18:31 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 admin/src/views/business/visits.vue                                                                                 |   22 
 admin/src/views/platform/gas.vue                                                                                    |  116 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java            |  205 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java            |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java                          |  148 ++--
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java          |   62 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java                          |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWaterGas.java                     |   85 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java                           |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java                              |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                 |    1 
 admin/src/api/business/visits.js                                                                                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/PlatformBooksApplyDTO.java                   |    2 
 server/system_service/src/main/java/com/doumee/api/BaseController.java                                              |    2 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                             |   19 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java                               |    3 
 admin/src/api/platform/platformWaterGas.js                                                                          |   48 +
 server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java                               |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java                         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java           |    2 
 admin/src/views/platform/oil.vue                                                                                    |  132 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java         |    1 
 admin/src/components/business/OperaPlatformWaterWindow.vue                                                          |   92 ++
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                            |   15 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java                             |    7 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java                         |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java                          |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/PlatformWaterGasController.java                   |   90 ++
 admin/src/components/business/OperaPlatformGasWindow.vue                                                            |   92 ++
 server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java                                        |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java                |   62 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformWaterGasService.java                |  101 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java          |   12 
 admin/src/views/vehicle/cars.vue                                                                                    |   33 
 server/db/business.platform_water_gas.permissions.sql                                                               |    6 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java                      |   39 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformBooks.java                        |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWaterGasMapper.java                     |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java       |  210 +++++
 admin/src/views/platform/water.vue                                                                                  |  117 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DriverHomeVO.java                           |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java |    2 
 admin/src/components/business/OperaPlatformOilWindow.vue                                                            |   98 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java                             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java                     |   12 
 admin/src/views/platform/platform.vue                                                                               |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java                         |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java                       |   13 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java                        |   28 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformWaterGasCloudController.java               |   93 ++
 server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java                                   |   19 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java                 |   35 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java                              |   35 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java     |   24 
 54 files changed, 1,978 insertions(+), 210 deletions(-)

diff --git a/admin/src/api/business/visits.js b/admin/src/api/business/visits.js
index c0a99fa..b2df3b8 100644
--- a/admin/src/api/business/visits.js
+++ b/admin/src/api/business/visits.js
@@ -61,3 +61,6 @@
 export const createVisit = (data) => {
   return request.post('/visitsAdmin/cloudService/business/visits/createVisit', data)
 }
+export function visitResend (visitId) {
+  return request.get(`/visitsAdmin/cloudService/business/visits/visitResend?visitId=${visitId}`)
+}
diff --git a/admin/src/api/platform/platformWaterGas.js b/admin/src/api/platform/platformWaterGas.js
new file mode 100644
index 0000000..d8026e1
--- /dev/null
+++ b/admin/src/api/platform/platformWaterGas.js
@@ -0,0 +1,48 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformWaterGas/page', data, {
+    trim: true
+  })
+}
+export function allList (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformWaterGas/list', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformWaterGas/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformWaterGas/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformWaterGas/updateById', data)
+}
+export function updateStatusById (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformWaterGas/updateStatusById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/platformWaterGas/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/visitsAdmin/cloudService/business/platformWaterGas/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/admin/src/components/business/OperaPlatformGasWindow.vue b/admin/src/components/business/OperaPlatformGasWindow.vue
new file mode 100644
index 0000000..fda7296
--- /dev/null
+++ b/admin/src/components/business/OperaPlatformGasWindow.vue
@@ -0,0 +1,92 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    width="50%"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鏈堜唤" prop="timeInfo">
+        <el-date-picker
+            v-model="form.timeInfo"
+            format="yyyy-MM"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            type="month"
+        />
+      </el-form-item>
+      <el-form-item label="鐢ㄦ皵閲忥紙绔嬫柟绫筹級锛�" prop="num" >
+        <el-input type="number" v-model="form.num" placeholder="璇疯緭鍏ョ敤姘旈噺锛堢珛鏂圭背锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璇存槑锛�" prop="content">
+        <el-input type="textarea"  v-model="form.content" placeholder="璇疯緭鍏ヨ鏄�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/platform/platformGroup'
+export default {
+  name: 'OperaPlatformReasonWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      groupList: [],
+      form: {
+        id: null,
+        content: null,
+        num: null,
+        timeInfo: '',
+        type: 1
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        timeInfo: [{ required: true, message: '璇疯緭閫夋嫨鏈堜唤 ', trigger: 'blur' }],
+        num: [{ required: true, message: '璇疯緭鍏ョ敤姘旈噺锛堝惃锛� ', trigger: 'blur' }]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/platform/platformWaterGas',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.labelTip{
+  font-size: 12px;
+  color: #666666;
+}
+</style>
diff --git a/admin/src/components/business/OperaPlatformOilWindow.vue b/admin/src/components/business/OperaPlatformOilWindow.vue
new file mode 100644
index 0000000..154560e
--- /dev/null
+++ b/admin/src/components/business/OperaPlatformOilWindow.vue
@@ -0,0 +1,98 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    width="50%"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="杞︾墝鍙凤細" prop="carCode" >
+        <el-input type="text" v-model="form.carCode" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏈堜唤" prop="timeInfo">
+        <el-date-picker
+            v-model="form.timeInfo"
+            format="yyyy-MM"
+            placeholder="璇烽�夋嫨骞存湀"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            type="month"
+        />
+      </el-form-item>
+      <el-form-item label="娌硅�楋紙鍗囷級锛�" prop="num" >
+        <el-input type="number" v-model="form.num" placeholder="璇疯緭鍏ユ补鑰楋紙鍗囷級" v-trim/>
+      </el-form-item>
+      <el-form-item label="璇存槑锛�" prop="content">
+        <el-input type="textarea"  v-model="form.content" placeholder="璇疯緭鍏ヨ鏄�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/platform/platformGroup'
+export default {
+  name: 'OperaPlatformReasonWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      groupList: [],
+      form: {
+        id: null,
+        carCode:null,
+        content: null,
+        num: null,
+        timeInfo: '',
+        type: 2
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        carCode: [{ required: true, message: '璇疯緭鍏ヨ溅鐗屽彿 ', trigger: 'blur' }],
+        timeInfo: [{ required: true, message: '璇疯緭閫夋嫨鏈堜唤 ', trigger: 'blur' }],
+        num: [{ required: true, message: '璇疯緭鍏ユ补鑰楋紙鍗囷級 ', trigger: 'blur' }]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/platform/platformWaterGas',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.labelTip{
+  font-size: 12px;
+  color: #666666;
+}
+</style>
diff --git a/admin/src/components/business/OperaPlatformWaterWindow.vue b/admin/src/components/business/OperaPlatformWaterWindow.vue
new file mode 100644
index 0000000..af58236
--- /dev/null
+++ b/admin/src/components/business/OperaPlatformWaterWindow.vue
@@ -0,0 +1,92 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    width="50%"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鏈堜唤" prop="timeInfo">
+        <el-date-picker
+            v-model="form.timeInfo"
+            format="yyyy-MM"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            type="month"
+        />
+      </el-form-item>
+      <el-form-item label="鐢ㄦ按閲忥紙鍚級锛�" prop="num" >
+        <el-input type="number" v-model="form.num" placeholder="璇疯緭鍏ョ敤姘撮噺锛堝惃锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璇存槑锛�" prop="content">
+        <el-input type="textarea"  v-model="form.content" placeholder="璇疯緭鍏ヨ鏄�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/platform/platformGroup'
+export default {
+  name: 'OperaPlatformReasonWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      groupList: [],
+      form: {
+        id: null,
+        content: null,
+        num: null,
+        timeInfo: '',
+        type:0
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        timeInfo: [{ required: true, message: '璇疯緭閫夋嫨鏈堜唤 ', trigger: 'blur' }],
+        num: [{ required: true, message: '璇疯緭鍏ョ敤鎴烽噺锛堝惃锛� ', trigger: 'blur' }]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/platform/platformWaterGas',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.labelTip{
+  font-size: 12px;
+  color: #666666;
+}
+</style>
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
index bbf8005..51ee101 100644
--- a/admin/src/views/business/visits.vue
+++ b/admin/src/views/business/visits.vue
@@ -92,12 +92,13 @@
                 <el-table-column
                     v-if="containPermissions(['business:visits:update', 'business:visits:delete'])"
                     label="鎿嶄綔"
-                    min-width="100"
+                    min-width="200"
                     fixed="right"
                 >
                     <template slot-scope="{row}">
                       <el-button type="text" @click="departure(row.id)" v-permissions="['business:visits:level']" icon="el-icon-delete" style="color: red" v-if="row.status == 7">绂诲巶</el-button>
                       <el-button type="text" @click="cancel(row.id)" v-permissions="['business:visits:cancel']" icon="el-icon-delete"   style="color: red" v-if="row.status == 5">鍙栨秷棰勭害</el-button>
+                      <el-button type="text" @click="resend(row.id)" v-permissions="['business:visits:update']" icon="el-icon-edit"   v-if="row.status == 6">閲嶆柊涓嬪彂</el-button>
                         <!-- <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" icon="el-icon-view">璇︽儏</el-button> -->
                         <el-button type="text" @click="handleDetail(row)" icon="el-icon-view">璇︽儏</el-button>
 <!--                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">鏌ヨ瀹℃壒缁撴灉</el-button>-->
@@ -177,7 +178,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        level(id)
+      level(id)
           .then(res => {
             this.page = 1
             this.getData()
@@ -192,7 +193,22 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        visitCancel(id)
+      visitCancel(id)
+          .then(res => {
+            this.page = 1
+            this.getData()
+          })
+      }).catch(() => {
+
+      })
+    },
+    resend (id) {
+      this.$confirm('纭畾灏濊瘯閲嶆柊娲楀彂棰勭害鍚�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.api.visitResend(id)
           .then(res => {
             this.page = 1
             this.getData()
diff --git a/admin/src/views/platform/gas.vue b/admin/src/views/platform/gas.vue
new file mode 100644
index 0000000..7cb6c13
--- /dev/null
+++ b/admin/src/views/platform/gas.vue
@@ -0,0 +1,116 @@
+<template>
+  <TableLayout :permissions="['business:platformwatergas:query']">
+    <SearchFormCollapse slot="search-form" :need-more="false">
+      <el-form ref="searchForm" :model="searchForm"  label-width="100px" inline >
+          <el-form-item title="璇烽�夋嫨骞存湀鏃堕棿" label="" prop="timeInfo" >
+            <el-date-picker
+                @change="search"
+                v-model="searchForm.timeInfo"
+                format="yyyy-MM"
+                placeholder="璇烽�夋嫨骞存湀鏃堕棿"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                type="month"
+            />
+          </el-form-item>
+        <section>
+          <el-button type="primary" @click="search">鎼滅储</el-button>
+          <el-button @click="reset">閲嶇疆</el-button>
+        </section>
+      </el-form>
+    </SearchFormCollapse>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:platformwatergas:create','business:platformwatergas:delete','business:notice:exportExcel']">
+        <li><el-button type="primary" @click="$refs.OperaPlatformGasWindow.open('鏂板缓鐢ㄦ皵')" icon="el-icon-plus" v-permissions="['business:platformwatergas:create']">鏂板缓</el-button></li>
+        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:platformwatergas:delete']">鍒犻櫎</el-button></li>
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:notice:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column prop="timeInfo" label="浣跨敤鏈堜唤" fixed min-width="100px">
+          <template slot-scope="{row}">
+              {{(row.timeInfo || row.timeInfo.length >7 )?row.timeInfo.substr(0,7):'-'}}
+          </template>
+        </el-table-column>
+        <el-table-column prop="num" label="鐢ㄦ皵閲忥紙绔嬫柟绫筹級" fixed min-width="150px"></el-table-column>
+        <el-table-column prop="content" label="璇存槑" min-width="120px"></el-table-column>
+        <el-table-column prop="editDate" label="鏈�杩戞搷浣滄椂闂�" min-width="140px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:platformwatergas:update', 'business:platformwatergas:delete'])"
+          label="鎿嶄綔"
+          align="center"
+          min-width="150"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.OperaPlatformGasWindow.open('缂栬緫鐢ㄦ皵', row)" icon="el-icon-edit" v-permissions="['business:platformwatergas:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:platformwatergas:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaPlatformGasWindow ref="OperaPlatformGasWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import SearchFormCollapse from '@/components/common/SearchFormCollapse'
+import Pagination from '@/components/common/Pagination'
+import OperaPlatformGasWindow from '@/components/business/OperaPlatformGasWindow'
+import { allList } from '@/api/platform/platformGroup'
+export default {
+  name: 'Platform',
+  extends: BaseTable,
+  components: { SearchFormCollapse, TableLayout, Pagination, OperaPlatformGasWindow },
+  data () {
+    return {
+      groupList: [],
+      // 鎼滅储
+      working: false,
+      working1: false,
+      searchForm: {
+        timeInfo: '',
+        type: 1
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鐢ㄦ皵淇℃伅琛�',
+      api: '/platform/platformWaterGas',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    this.loadGroupList()
+  },
+  methods: {
+    loadGroupList () {
+      allList({})
+        .then(res => {
+          this.groupList = res || []
+        })
+    },
+    changeStatus (e, row) {
+      this.api.updateStatusById({
+        id: row.id,
+        status: e
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/platform/oil.vue b/admin/src/views/platform/oil.vue
new file mode 100644
index 0000000..d69db71
--- /dev/null
+++ b/admin/src/views/platform/oil.vue
@@ -0,0 +1,132 @@
+<template>
+  <TableLayout :permissions="['business:platformwatergas:query']">
+    <SearchFormCollapse slot="search-form" :need-more="false">
+      <el-form ref="searchForm" :model="searchForm"  label-width="100px" inline >
+          <el-form-item title="璇疯緭鍏ヨ溅鐗屽彿"  >
+            <el-input v-model="searchForm.carCode" clearable placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+          </el-form-item>
+          <el-form-item  label="浣跨敤鏃堕棿锛�"  >
+            <el-date-picker
+                @change="search"
+                v-model="searchForm.startTime"
+                format="yyyy-MM"
+                style="width: 140px"
+                placeholder="寮�濮嬫椂闂�"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                type="month"
+            />~
+              <el-date-picker
+                  @change="search"
+                  v-model="searchForm.endTime"
+                  format="yyyy-MM"
+                  style="width: 140px"
+                  placeholder="缁撴潫鏃堕棿"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  type="month"
+              />
+          </el-form-item>
+        <section>
+          <el-button type="primary" @click="search">鎼滅储</el-button>
+          <el-button @click="reset">閲嶇疆</el-button>
+        </section>
+      </el-form>
+    </SearchFormCollapse>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:platformwatergas:create','business:platformwatergas:delete','business:notice:exportExcel']">
+        <li><el-button type="primary" @click="$refs.OperaPlatformOilWindow.open('鏂板缓娌硅��')" icon="el-icon-plus" v-permissions="['business:platformwatergas:create']">鏂板缓</el-button></li>
+        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:platformwatergas:delete']">鍒犻櫎</el-button></li>
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:notice:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column prop="carCode" label="杞︾墝鍙�" fixed min-width="150px"></el-table-column>
+        <el-table-column prop="timeInfo" label="浣跨敤鏈堜唤" fixed min-width="100px">
+          <template slot-scope="{row}">
+              {{(row.timeInfo || row.timeInfo.length >7 )?row.timeInfo.substr(0,7):'-'}}
+          </template>
+        </el-table-column>
+        <el-table-column prop="num" label="娌硅�楋紙鍗囷級" fixed min-width="150px"></el-table-column>
+        <el-table-column prop="content" label="璇存槑" min-width="120px"></el-table-column>
+        <el-table-column prop="editDate" label="鏈�杩戞搷浣滄椂闂�" min-width="140px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:platformwatergas:update', 'business:platformwatergas:delete'])"
+          label="鎿嶄綔"
+          align="center"
+          min-width="150"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.OperaPlatformOilWindow.open('缂栬緫娌硅��', row)" icon="el-icon-edit" v-permissions="['business:platformwatergas:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:platformwatergas:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaPlatformOilWindow ref="OperaPlatformOilWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import SearchFormCollapse from '@/components/common/SearchFormCollapse'
+import Pagination from '@/components/common/Pagination'
+import OperaPlatformOilWindow from '@/components/business/OperaPlatformOilWindow'
+import { allList } from '@/api/platform/platformGroup'
+export default {
+  name: 'Platform',
+  extends: BaseTable,
+  components: { SearchFormCollapse, TableLayout, Pagination, OperaPlatformOilWindow },
+  data () {
+    return {
+      groupList: [],
+      // 鎼滅储
+      working: false,
+      working1: false,
+      searchForm: {
+        carCode:'',
+        startTime: '',
+        endTime: '',
+        type: 2
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '娌硅�椾俊鎭〃',
+      api: '/platform/platformWaterGas',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    this.loadGroupList()
+  },
+  methods: {
+    loadGroupList () {
+      allList({})
+        .then(res => {
+          this.groupList = res || []
+        })
+    },
+    changeStatus (e, row) {
+      this.api.updateStatusById({
+        id: row.id,
+        status: e
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/platform/platform.vue b/admin/src/views/platform/platform.vue
index 1632694..a21ad90 100644
--- a/admin/src/views/platform/platform.vue
+++ b/admin/src/views/platform/platform.vue
@@ -66,7 +66,6 @@
             <span v-if="row.platformStatus == 3">閿欒鍋滈潬</span>
           </template>
         </el-table-column>
-
         <el-table-column prop="broadcastNames" label="鍏宠仈骞挎挱" min-width="100px"></el-table-column>
         <el-table-column prop="ledNames" label="鍏宠仈LED" min-width="100px"></el-table-column>
         <el-table-column prop="hkDate" label="鍚屾鏃堕棿" min-width="140px"></el-table-column>
diff --git a/admin/src/views/platform/water.vue b/admin/src/views/platform/water.vue
new file mode 100644
index 0000000..fd99d89
--- /dev/null
+++ b/admin/src/views/platform/water.vue
@@ -0,0 +1,117 @@
+<template>
+  <TableLayout :permissions="['business:platformwatergas:query']">
+    <SearchFormCollapse slot="search-form" :need-more="false">
+      <el-form ref="searchForm" :model="searchForm"  label-width="100px" inline>
+          <el-form-item title="璇烽�夋嫨骞存湀鏃堕棿" label=""   >
+            <el-date-picker
+                @change="search"
+                clearable
+                v-model="searchForm.timeInfo"
+                format="yyyy-MM"
+                placeholder="璇烽�夋嫨骞存湀鏃堕棿"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                type="month"
+            />
+          </el-form-item>
+        <section>
+          <el-button type="primary" @click="search">鎼滅储</el-button>
+          <el-button @click="reset">閲嶇疆</el-button>
+        </section>
+      </el-form>
+    </SearchFormCollapse>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:platformwatergas:create','business:platformwatergas:delete','business:notice:exportExcel']">
+        <li><el-button type="primary" @click="$refs.OperaPlatformWaterWindow.open('鏂板缓鐢ㄦ按')" icon="el-icon-plus" v-permissions="['business:platformwatergas:create']">鏂板缓</el-button></li>
+        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:platformwatergas:delete']">鍒犻櫎</el-button></li>
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:notice:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column prop="timeInfo" label="浣跨敤鏈堜唤" fixed min-width="100px">
+          <template slot-scope="{row}">
+              {{(row.timeInfo || row.timeInfo.length >7 )?row.timeInfo.substr(0,7):'-'}}
+          </template>
+        </el-table-column>
+        <el-table-column prop="num" label="鐢ㄦ按閲忥紙鍚級" fixed min-width="150px"></el-table-column>
+        <el-table-column prop="content" label="璇存槑" min-width="120px"></el-table-column>
+        <el-table-column prop="editDate" label="鏈�杩戞搷浣滄椂闂�" min-width="140px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:platformwatergas:update', 'business:platformwatergas:delete'])"
+          label="鎿嶄綔"
+          align="center"
+          min-width="150"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.OperaPlatformWaterWindow.open('缂栬緫鐢ㄦ按', row)" icon="el-icon-edit" v-permissions="['business:platformwatergas:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:platformwatergas:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaPlatformWaterWindow ref="OperaPlatformWaterWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import SearchFormCollapse from '@/components/common/SearchFormCollapse'
+import Pagination from '@/components/common/Pagination'
+import OperaPlatformWaterWindow from '@/components/business/OperaPlatformWaterWindow'
+import { allList } from '@/api/platform/platformGroup'
+export default {
+  name: 'Platform',
+  extends: BaseTable,
+  components: { SearchFormCollapse, TableLayout, Pagination, OperaPlatformWaterWindow },
+  data () {
+    return {
+      groupList: [],
+      // 鎼滅储
+      working: false,
+      working1: false,
+      searchForm: {
+        timeInfo: '',
+        type: 0
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鐢ㄦ按淇℃伅琛�',
+      api: '/platform/platformWaterGas',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    this.loadGroupList()
+  },
+  methods: {
+    loadGroupList () {
+      allList({})
+        .then(res => {
+          this.groupList = res || []
+        })
+    },
+    changeStatus (e, row) {
+      this.api.updateStatusById({
+        id: row.id,
+        status: e
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/vehicle/cars.vue b/admin/src/views/vehicle/cars.vue
index bdd6b22..55d2b4e 100644
--- a/admin/src/views/vehicle/cars.vue
+++ b/admin/src/views/vehicle/cars.vue
@@ -53,22 +53,22 @@
               <el-table-column prop="memberName" label="杞︿富濮撳悕"  min-width="100px"></el-table-column>
               <el-table-column prop="memberPhone" label="杞︿富鎵嬫満鍙�" min-width="100px"></el-table-column>
               <el-table-column prop="companyName" label="杞︿富缁勭粐" min-width="200px"></el-table-column>
-                <el-table-column label="鏄惁鎺堟潈" align="center" min-width="100px">
-                  <template slot-scope="{row}">
-                    <span v-if="row.authStatus == 1" style="color: green">鏄�</span>
-                    <span v-else style="color: red">鍚�</span>
-                  </template>
-                </el-table-column>
-                <el-table-column prop="parksName" align="center" label="宸叉巿鏉冨仠杞﹀満" min-width="200px">
-                  <template slot-scope="{row}">
-                    <div  v-if="row.parkBookList && row.parkBookList.length" >
-                      <span v-for="item in row.parkBookList"  :key="item.id" style="display: block">
-                        <span  :style="(item.hkStatus== 0?'color:#2080f7':(item.hkStatus== 1?'color:green':(item.hkStatus== 2?'color:red':'')))">銆恵{item.hkStatus== 0?'绛夊緟涓嬪彂':(item.hkStatus== 1?'涓嬪彂鎴愬姛':(item.hkStatus== 2?'涓嬪彂澶辫触':''))}}銆� </span>{{item.parksName}}
-                      </span>
-                    </div>
-                    <span  v-if="row.parkBookList ==null ||row.parkBookList.length ==0">-</span>
-                  </template>
-                </el-table-column>
+              <el-table-column label="鏄惁鎺堟潈" align="center" min-width="100px">
+                <template slot-scope="{row}">
+                  <span v-if="row.authStatus == 1" style="color: green">鏄�</span>
+                  <span v-else style="color: red">鍚�</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="parksName" align="center" label="宸叉巿鏉冨仠杞﹀満" min-width="200px">
+                <template slot-scope="{row}">
+                  <div  v-if="row.parkBookList && row.parkBookList.length" >
+                    <span v-for="item in row.parkBookList"  :key="item.id" style="display: block">
+                      <span  :style="(item.hkStatus== 0?'color:#2080f7':(item.hkStatus== 1?'color:green':(item.hkStatus== 2?'color:red':'')))">銆恵{item.hkStatus== 0?'绛夊緟涓嬪彂':(item.hkStatus== 1?'涓嬪彂鎴愬姛':(item.hkStatus== 2?'涓嬪彂澶辫触':''))}}銆� </span>{{item.parksName}}
+                    </span>
+                  </div>
+                  <span  v-if="row.parkBookList ==null ||row.parkBookList.length ==0">-</span>
+                </template>
+              </el-table-column>
               <el-table-column label="涓嬪彂鏈夋晥鏈�" align="center" min-width="170px">
                 <template slot-scope="{row}">
                   <div v-if="row.authStatus !=null && row.authStatus == 1 && row.parkBookList!=null && row.parkBookList.length>0">
@@ -116,7 +116,6 @@
 import Pagination from '@/components/common/Pagination'
 import OperaCarsWindow from '@/components/business/OperaCarsWindow'
 import OperaCarAuthWindow from '@/components/business/OperaCarAuthWindow'
-import { sync } from '@/api/business/cars'
 export default {
   name: 'Cars',
   extends: BaseTable,
diff --git a/server/db/business.platform_water_gas.permissions.sql b/server/db/business.platform_water_gas.permissions.sql
new file mode 100644
index 0000000..72aa1ed
--- /dev/null
+++ b/server/db/business.platform_water_gas.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwatergas:create', '鏂板缓鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwatergas:delete', '鍒犻櫎鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwatergas:update', '淇敼鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwatergas:query', '鏌ヨ鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwatergas:exportExcel', '瀵煎嚭鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
index 15152c8..1032835 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -59,6 +59,7 @@
     public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) {
         try {
             ServerHttpRequest request = serverWebExchange.getRequest();
+            dto.setCheckCode(true);
             LoginUserInfo user = systemLoginService.loginByPasswordNew(dto,request);
             String token = jwtTokenUtil.generateToken(user);
             return ApiResponse.success(token);
@@ -90,6 +91,24 @@
         }
     }
 
+    @PreventRepeat(limit = 10, lockTime = 10000)
+    @ApiOperation("鍙告満鐧诲綍")
+    @PostMapping("/loginDriver")
+    @LoginNoRequired
+    public ApiResponse<String> loginDriver (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) {
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            dto.setCheckCode(false);
+            LoginUserInfo user = systemLoginService.driverLogin(dto,request);
+            String token = jwtTokenUtil.generateToken(user);
+            return ApiResponse.success(token);
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
 
     /**
      * 鍒锋柊JWT浠ょ墝,鐢ㄦ棫鐨勪护鐗屾崲鏂扮殑浠ょ墝
diff --git a/server/system_service/src/main/java/com/doumee/api/BaseController.java b/server/system_service/src/main/java/com/doumee/api/BaseController.java
index e431c04..7aae08b 100644
--- a/server/system_service/src/main/java/com/doumee/api/BaseController.java
+++ b/server/system_service/src/main/java/com/doumee/api/BaseController.java
@@ -32,7 +32,7 @@
      * @author Eva.Caesar Liu
      * @date 2023/03/21 14:49
      */
-    protected LoginUserInfo getLoginUser (String token) {
+    public LoginUserInfo getLoginUser (String token) {
         if (token == null || token.isEmpty()) {
                return (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
 //            throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
diff --git a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index 6d84788..907be16 100644
--- a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -4,6 +4,7 @@
 import com.doumee.dao.system.model.SystemPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemUser;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
@@ -59,15 +60,19 @@
         loginUserInfo.setCompany(company);
         // 璁剧疆瑙掕壊淇℃伅
         List<String> rs = new ArrayList<>();
-        for (SystemRole role : roles) {
-            rs.add(role.getCode());
+        if(CollectionUtils.isNotEmpty(roles)){
+            for (SystemRole role : roles) {
+                rs.add(role.getCode());
+            }
         }
         loginUserInfo.setSessionId(sessionId);
         loginUserInfo.setRoles(rs);
         // 璁剧疆鏉冮檺淇℃伅
         List<String> pms = new ArrayList<>();
-        for (SystemPermission permission : permissions) {
-            pms.add(permission.getCode());
+        if(CollectionUtils.isNotEmpty(permissions)){
+            for (SystemPermission permission : permissions) {
+                pms.add(permission.getCode());
+            }
         }
         loginUserInfo.setPermissions(pms);
         return loginUserInfo;
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 f76dfc4..43106c6 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
@@ -1,14 +1,16 @@
 package com.doumee.core.utils;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.core.model.LoginUserInfo;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 import io.swagger.models.auth.In;
 import org.apache.batik.util.Platform;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -152,6 +154,11 @@
     // 瓒呮椂棰勮閰嶇疆
     public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
     // FTP鏂囦欢鏈嶅姟鍣ㄨ祫婧愯闂湴鍧�
+    //鏈堝彴棰勭害鎸囧崡
+    public static final String PLATFORM_BOOKING_TIPS = "PLATFORM_BOOKING_TIPS";
+    //鏈堝彴瀵艰鍥�
+    public static final String PLATFORM_GUIDEMAP = "PLATFORM_GUIDEMAP";
+
 
     public static String getRandom6Num( ) {
         Random random = new Random();
@@ -453,6 +460,7 @@
     int cityUseCar = 3;//甯傚唴鐢ㄨ溅
     int unCityUseCar = 4;//甯傚鐢ㄨ溅
     int logisticsCarUse = 5;//鐗╂祦杞﹂绾�
+    int reason = 6;//鍏ュ洯鍘熷洜
 }
 
 
@@ -466,6 +474,10 @@
     }else if(Constants.equalsInteger(approveType,Constants.approveObjectType.cityUseCar)
             ||Constants.equalsInteger(approveType,Constants.approveObjectType.unCityUseCar)){
         return Constants.noticesObjectType.useCar;
+    }else if(Constants.equalsInteger(approveType,Constants.approveObjectType.logisticsCarUse)){
+        return Constants.noticesObjectType.logisticsCarUse;
+    }else if(Constants.equalsInteger(approveType, approveObjectType.reason)){
+        return noticesObjectType.reason;
     }else {
         return Constants.noticesObjectType.system;
     }
@@ -481,6 +493,7 @@
     int dangerDeal = 3;//闅愭偅澶勭悊
     int logisticsCarUse = 4;//鐗╂祦杞﹀鎵�
     int system = 5;//绯荤粺娑堟伅
+    int reason = 6;//鍏ュ洯鍘熷洜
 }
 
 
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
index 11635cf..a4cd38c 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -1823,14 +1823,6 @@
     // StringUtil.getNotNullStr(request.getParameter(strParamName));
     // return getDateByString(strStr);
     // }
-    /**
-     * 寰楀埌褰撳墠鏃ユ湡锛屾牸寮弝yyy-MM-dd銆�
-     *
-     * @return String 鏍煎紡鍖栫殑鏃ユ湡瀛楃涓�
-     */
-    public static String getCurrDate() {
-        return getFormattedDate(getDateByString(""));
-    }
 
     /**
      * 寰楀埌褰撳墠鏃ユ湡锛屾牸寮弝yyy-MM-dd銆�
@@ -1897,6 +1889,17 @@
     }
 
     /**
+     * 寰楀埌褰撳墠鏃ユ湡鏃堕棿,鏍煎紡涓簓yyy-MM-dd.
+     *
+     * @return String
+     */
+    public static String getCurrDate() {
+        Timestamp date = new Timestamp(System.currentTimeMillis());
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        return formatter.format(date);
+    }
+
+    /**
      * 寰楀埌鎸囧畾鐨勬棩鏈燂紝濡備竴骞翠笁涓湀闆朵節澶╁悗(浠yyy/MM/dd鏍煎紡鏄剧ず)鍙傛暟涓�("yyyy/MM/dd",1,3,9)
      *
      * @param strFormat
diff --git a/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java b/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
index 15316fd..f6ebaca 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -23,6 +23,7 @@
 
     LoginUserInfo loginByPasswordNew (LoginDTO dto, ServerHttpRequest request);
 
+    LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request);
     /**
      * 鏍规嵁 openId鐧诲綍
      * @param userId
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index 452cc27..0519b92 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -125,7 +125,7 @@
             loginLog.setOsInfo(Utils.User_Client.getOS(request));
         }
         loginLog.setServerIp(Utils.Server.getIP());
-        if(isDebug == null  || !isDebug){
+        if(isDebug == null  || !isDebug  && dto.getCheckCode()){
             // 鏍¢獙楠岃瘉鐮�
             try {
                 captchaService.check(dto.getUuid(), dto.getCode());
@@ -171,6 +171,43 @@
     }
 
 
+
+    @Override
+    public LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request) {
+        SystemLoginLog loginLog = new SystemLoginLog();
+        loginLog.setLoginUsername(dto.getUsername());
+        loginLog.setLoginTime(new Date());
+        loginLog.setSystemVersion(systemVersion);
+        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+        if(request!=null&&request.getHeaders()!=null && request.getHeaders().size()>0){
+            loginLog.setIp(Utils.User_Client.getIP(request));
+            loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+            loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+            loginLog.setOsInfo(Utils.User_Client.getOS(request));
+        }
+        loginLog.setServerIp(Utils.Server.getIP());
+        // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
+        SystemUser queryDto = new SystemUser();
+        queryDto.setUsername(dto.getUsername());
+        queryDto.setDeleted(Boolean.FALSE);
+        SystemUser user = systemUserService.findOne(queryDto);
+        if (user == null) {
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        String pwd = Utils.Secure.encryptPassword(new String(dto.getPassword()), user.getSalt());
+        // 姣旇緝瀵嗙爜
+        if( !StringUtils.equals(pwd, user.getPassword())){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        Company company = new Company();
+        if(Objects.nonNull(user.getCompanyId())){
+            company = companyMapper.selectById(user.getCompanyId());
+        }
+        LoginUserInfo userInfo = LoginUserInfo.from(user, null, null,company,null);
+        return  userInfo;
+    }
+
+
     /**
      * 鍐呴儴浜哄憳 涓� 鍙告満 鏍规嵁code鏌ヨopenId鍚庤繘琛岀櫥褰曟帴鍙�
      * @return
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/PlatformWaterGasController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/PlatformWaterGasController.java
new file mode 100644
index 0000000..ff6eb05
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/PlatformWaterGasController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.PlatformWaterGas;
+import com.doumee.service.business.PlatformWaterGasService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/08/26 16:22
+ */
+@Api(tags = "鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�")
+@RestController
+@RequestMapping("/business/platformWaterGas")
+public class PlatformWaterGasController extends BaseController {
+
+    @Autowired
+    private PlatformWaterGasService platformWaterGasService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:platformwatergas:create")
+    public ApiResponse create(@RequestBody PlatformWaterGas platformWaterGas) {
+        return ApiResponse.success(platformWaterGasService.create(platformWaterGas));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:platformwatergas:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformWaterGasService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:platformwatergas:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        platformWaterGasService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:platformwatergas:update")
+    public ApiResponse updateById(@RequestBody PlatformWaterGas platformWaterGas) {
+        platformWaterGasService.updateById(platformWaterGas);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:platformwatergas:query")
+    public ApiResponse<PageData<PlatformWaterGas>> findPage (@RequestBody PageWrap<PlatformWaterGas> pageWrap) {
+        return ApiResponse.success(platformWaterGasService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:platformwatergas:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformWaterGas> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformWaterGas.class).export(platformWaterGasService.findPage(pageWrap).getRecords(), "鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:platformwatergas:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformWaterGasService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
index 41eeaf0..532e499 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
@@ -77,6 +77,13 @@
         visitsService.visitCancel(visitId);
         return ApiResponse.success(null);
     }
+    @ApiOperation("閲嶆柊涓嬪彂澶辫触鐨勯绾�")
+    @GetMapping("/visitResend")
+    @RequiresPermissions("business:visits:update")
+    public ApiResponse   visitResend(@RequestParam Integer visitId) {
+        visitsService.visitResend(visitId);
+        return ApiResponse.success(null);
+    }
 
     @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾璁垮鏁版嵁")
     @PostMapping("/syncByDate")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java
index dd7a89f..3ac0fde 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformCloudController.java
@@ -9,6 +9,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.Platform;
+import com.doumee.service.business.PlatformJobService;
 import com.doumee.service.business.PlatformService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -16,6 +17,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * @author 姹熻箘韫�
@@ -28,6 +30,9 @@
 
     @Autowired
     private PlatformService platformService;
+
+    @Autowired
+    private PlatformJobService platformJobService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -77,6 +82,14 @@
         return ApiResponse.success(platformService.findPage(pageWrap));
     }
 
+
+    @ApiOperation("鏍规嵁鏈堝彴缁勮幏鍙栨湀鍙板垪琛ㄤ俊鎭�")
+    @GetMapping("/listByGroupId")
+    @CloudRequiredPermission("business:platform:query")
+    public ApiResponse<List<Platform>> listByGroupId (@RequestParam Integer groupId, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(platformJobService.getPlatformList(groupId,this.getLoginUser(token)));
+    }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:platform:exportExcel")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformWaterGasCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformWaterGasCloudController.java
new file mode 100644
index 0000000..080fc0b
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformWaterGasCloudController.java
@@ -0,0 +1,93 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformWaterGas;
+import com.doumee.service.business.PlatformWaterGasService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/08/26 16:22
+ */
+@Api(tags = "鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformWaterGas")
+public class PlatformWaterGasCloudController extends BaseController {
+
+    @Autowired
+    private PlatformWaterGasService platformWaterGasService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platformwatergas:create")
+    public ApiResponse create(@RequestBody PlatformWaterGas platformWaterGas,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        platformWaterGas.setLoginUserInfo(getLoginUser(token));
+        return ApiResponse.success(platformWaterGasService.create(platformWaterGas));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platformwatergas:delete")
+    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        platformWaterGasService.deleteById(id,getLoginUser(token));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platformwatergas:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        platformWaterGasService.deleteByIdInBatch(idList,getLoginUser(token));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platformwatergas:update")
+    public ApiResponse updateById(@RequestBody PlatformWaterGas platformWaterGas,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        platformWaterGas.setLoginUserInfo(getLoginUser(token));
+        platformWaterGasService.updateById(platformWaterGas);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platformwatergas:query")
+    public ApiResponse<PageData<PlatformWaterGas>> findPage (@RequestBody PageWrap<PlatformWaterGas> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(platformWaterGasService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platformwatergas:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformWaterGas> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ExcelExporter.build(PlatformWaterGas.class).export(platformWaterGasService.findPage(pageWrap).getRecords(), "鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platformwatergas:query")
+    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(platformWaterGasService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
index 1b1279c..35c331f 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
@@ -19,6 +19,7 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -150,4 +151,13 @@
         visitsService.resetPassword(resetPasswordDTO);
         return ApiResponse.success("閲嶇疆鎴愬姛");
     }
+
+    @ApiOperation("閲嶆柊涓嬪彂澶辫触鐨勯绾�")
+    @GetMapping("/visitResend")
+    @CloudRequiredPermission("business:visits:update")
+    public ApiResponse   visitResend(@RequestParam Integer visitId) {
+        visitsService.visitResend(visitId);
+        return ApiResponse.success(null);
+    }
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
index 422d503..688be9f 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
@@ -1,17 +1,17 @@
 package com.doumee.cloud.web;
 
+import cn.hutool.http.useragent.Platform;
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.config.annotation.LoginRequired;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
-import com.doumee.dao.business.model.PlatformBooks;
-import com.doumee.dao.business.model.PlatformJob;
-import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.web.reqeust.*;
 import com.doumee.dao.web.response.DriverHomeVO;
 import com.doumee.dao.web.response.LineUpVO;
@@ -27,6 +27,7 @@
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * Created by IntelliJ IDEA.
@@ -52,13 +53,24 @@
     @Autowired
     private PlatformBooksService platformBooksService;
 
+    @Autowired
+    private PlatformReasonService platformReasonService;
+
+
+
+    @ApiOperation("鍏ュ洯鍘熷洜")
+    @GetMapping("/platformReasonList")
+    public ApiResponse<List<PlatformReason>> platformReasonList (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        List<PlatformReason> platformReasons = platformReasonService.findList(null);
+        return ApiResponse.success(platformReasons);
+    }
+
     @ApiOperation("鍙告満棣栭〉淇℃伅")
     @GetMapping("/driverHome")
     public ApiResponse<DriverHomeVO> driverHome (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        DriverHomeVO driverHomeVO = platformJobService.getDriverHome(getLoginUser(token).getMemberId());
+        DriverHomeVO driverHomeVO = platformJobService.getDriverHome(getLoginUser(token));
         return ApiResponse.success(driverHomeVO);
     }
-
 
     @ApiOperation("鏌ヨ鍙绾﹂噺")
     @PostMapping("/checkSurplusNum")
@@ -69,14 +81,18 @@
     @ApiOperation("鐗╂祦杞﹂绾�")
     @PostMapping("/apply")
     public ApiResponse<Integer> apply (@RequestBody PlatformBooksApplyDTO platformBooksApplyDTO , @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        platformBooksApplyDTO.setUserId(getLoginUser(token).getMemberId());
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        platformBooksApplyDTO.setUserId(loginUserInfo.getMemberId());
+        platformBooksApplyDTO.setDriverId(loginUserInfo.getMemberId());
         return ApiResponse.success(platformBooksService.apply(platformBooksApplyDTO));
     }
 
     @ApiOperation("鐗╂祦杞﹂绾﹁褰�")
     @PostMapping("/page")
     public ApiResponse<PageData<PlatformBooks>> findPage (@RequestBody PageWrap<PlatformBooks> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        LoginUserInfo loginUserInfo = this.getLoginUser(token);
         pageWrap.getModel().setQueryDate(DateUtil.getBeforDay(new Date(),30));
+        pageWrap.getModel().setDriverPhone(loginUserInfo.getMobile());
         return ApiResponse.success(platformBooksService.findPage(pageWrap));
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java
index 8e81e40..bee4a37 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/PdaPlatformController.java
@@ -8,10 +8,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
-import com.doumee.dao.business.model.PlatformBooks;
-import com.doumee.dao.business.model.PlatformGroup;
-import com.doumee.dao.business.model.PlatformJob;
-import com.doumee.dao.business.model.PlatformShowParam;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.web.reqeust.*;
 import com.doumee.dao.web.response.DriverHomeVO;
 import com.doumee.dao.web.response.LineUpVO;
@@ -54,10 +51,8 @@
     @Autowired
     private PlatformShowParamService platformShowParamService;
 
-
-
-
-
+    @Autowired
+    private PlatformService platformService;
 
     @ApiOperation("鑾峰彇鏈堝彴缁勪俊鎭�")
     @ApiImplicitParams({
@@ -69,9 +64,16 @@
     }
 
     @ApiOperation("鏇存柊鏈堝彴閰嶇疆淇℃伅")
-    @GetMapping("/updUserPlatformConfig")
+    @PostMapping("/updUserPlatformConfig")
     public ApiResponse  updUserPlatformConfig (@RequestBody List<Integer> ids, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         platformShowParamService.updUserConfig(ids,getLoginUser(token));
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @ApiOperation("淇敼绂佸惎鐢ㄧ姸鎬�")
+    @PostMapping("/updPlatformStatus")
+    public ApiResponse  updPlatformStatus (@RequestBody Platform platform, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        platformService.updateStatusById(platform);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
@@ -131,9 +133,6 @@
         platformJobService.platformInPark(jobOperateDTO);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
-
-
-
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
index 787c633..cf0970f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -30,81 +30,81 @@
      * 鎺ュ彛鍦板潃闆嗗悎
      */
     public interface InterfacePath{
-//        String doorEvents = "/api/acs/v2/door/events";//闂ㄧ浜嬩欢鏌ヨ
-//        String visitEvents = "/api/visitor/v1/event/turnover/search";//璁垮浜嬩欢鏌ヨ
-        String parkCrossRecords = "/api/pms/v1/crossRecords/page";//鍋滆溅鍦鸿繃绋嬭褰�
-        String rootOrg = "/api/resource/v1/org/rootOrg";//鑾峰彇璺熺粍缁�
-        String orgAllList = "/api/resource/v1/org/orgList";//鑾峰彇鍏ㄩ噺缁勭粐淇℃伅
-        String userAllList = "/api/resource/v2/person/personList";//鑾峰彇鍏ㄩ噺鐢ㄦ埛鍒楄〃
-        String personList = "/api/resource/v2/person/advance/personList";//鏌ヨ浜哄憳鍒楄〃v2
-        String orgTimeRangeList = "/api/resource/v1/org/timeRange";//澧為噺鑾峰彇缁勭粐淇℃伅
-        String userTimeRangeList = "/api/resource/v1/person/personList/timeRange";//澧為噺鑾峰彇鐢ㄦ埛鍒楄〃
-        String addBatchOrg = "/api/resource/v1/org/batch/add";//鎵归噺鏂板缁勭粐
-        String delBatchOrg = "/api/resource/v1/org/batch/delete";//鎵归噺鍒犻櫎缁勭粐
-        String editOrg = "/api/resource/v1/org/single/update";//淇敼缁勭粐
-        String addUser = "/api/resource/v2/person/single/add";//娣诲姞浜哄憳
-        String addBatchUser = "/api/resource/v1/person/batch/add";//鎵归噺娣诲姞浜哄憳
-        String editUser = "/api/resource/v1/person/single/update";//淇敼浜哄憳
-        String delBatchUser = "/api/resource/v1/person/batch/delete";//鎵归噺鍒犻櫎浜哄憳
-        String addFace = "/api/resource/v1/face/single/add";//娣诲姞浜鸿劯
-        String editFace = "/api/resource/v1/face/single/update";//淇敼浜鸿劯
-        String delFace = "/api/resource/v1/face/single/delete";//鍒犻櫎浜鸿劯
-        String acsDeviceList = "/api/resource/v2/acsDevice/search";//鏌ヨ闂ㄧ璁惧鍒楄〃v2
-        String acsDeviceTimeRangeList = "/api/resource/v1/acsDevice/timeRange";//澧為噺鑾峰彇闂ㄧ璁惧鏁版嵁
-        String parkAddition = "/api/pms/v2/parkingSpace/reservations/addition";//杞︿綅棰勭害v2
-        String parkDeletion= "/api/pms/v1/parkingSpace/reservations/deletion";//杞︿綅鍙栨秷棰勭害v2
-        String carChargeAddtion= "/api/pms/v1/car/charge";//鍥哄畾杞﹀厖鍊煎寘鏈�
-        String carChargeDeletion= "/api/pms/v1/car/charge/deletion";//鍥哄畾杞﹀彇娑堝寘鏈�
-        String getParkList= "/api/resource/v1/park/parkList";//鑾峰彇鍋滆溅搴撳垪琛�
-        String getEntranceList= "/api/resource/v1/entrance/entranceList";//鑾峰彇鍑哄叆鍙e垪琛�
-        String visitAppiontment= "/api/visitor/v2/appointment";//璁垮棰勭害v2
-        String visitAppiontmentMDJ= "/api/visitor/v1/appointment/registration";//璁垮棰勭害鍏嶇櫥璁皏2
-        String visitCancel= "/api/visitor/v1/appointment/cancel";//鍙栨秷璁垮棰勭害
-        String visitOut= "/api/visitor/v1/visitor/out";//绛剧璁垮棰勭害
-        String facePicture= "/api/resource/v1/person/picture";//鎻愬彇鐢ㄦ埛浜鸿劯鐓х墖
-        String privilegeGroup= "/api/visitor/v1/privilege/group";//鏌ヨ璁垮鏉冮檺缁�
-        String eventSub= "/api/eventService/v1/eventSubscriptionByEventTypes";//浜嬩欢璁㈤槄
-        String doorSearch= "/api/resource/v2/door/search";//鏌ヨ闂ㄧ鐐瑰垪琛╲2
-        String cancelEventSub= "/api/eventService/v1/eventUnSubscriptionByEventTypes";//鍙栨秷浜嬩欢璁㈤槄
-        String visitPicture= "/api/visitor/v1/record/pictures";//鑾峰彇璁垮璁板綍涓殑鍥剧墖
-        String devicePicture= "/api/acs/v1/event/pictures";//鑾峰彇闂ㄧ浜嬩欢鐨勫浘鐗�
-        String carPicture= "/api/pms/v1/image";//鏌ヨ杞﹁締鎶撴媿鍥剧墖
-        String taskAddition= "/api/acps/v1/authDownload/task/addition";//鍒涘缓涓嬭浇浠诲姟_鏍规嵁浜哄憳涓庤澶囬�氶亾鎸囧畾涓嬭浇
-        String taskDataAddition= "/api/acps/v1/authDownload/data/addition";//涓嬭浇浠诲姟涓坊鍔犳暟鎹甠鏍规嵁浜哄憳涓庤澶囬�氶亾鎸囧畾涓嬭浇
-        String taskStart= "/api/acps/v1/authDownload/task/start";//寮�濮嬩笅杞戒换鍔�
-        String taskProgressNum= "/api/acps/v1/authDownload/task/progress";//鏌ヨ涓嬭浇浠诲姟杩涘害
-        String taskProgress= "/api/acps/v2/download_record/person/detail/search";//鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟v2
-        String authItemList= "/api/acps/v1/auth_item/list/search";//鏌ヨ鏉冮檺鏉$洰鍒楄〃
-        String cardBingding= "/api/cis/v1/card/bindings";//鎵归噺寮�鍗�
-        String cardDeletion= "/api/cis/v1/card/deletion";//鍗$墖閫�鍗�
-        String cardLoss= "/api/cis/v1/card/batch/loss";//鎵归噺鎸傚け
-        String cardUnloss= "/api/cis/v1/card/batch/unLoss";//鎵归噺瑙f寕
-        String taskPersoDetail= "/api/acps/v1/download_record/person/detail/search";//鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯�
-        String appointmentRecords= "/api/visitor/v2/appointment/records";//鏌ヨ璁垮棰勭害璁板綍v2
-        String visitingRecords= "/api/visitor/v2/visiting/records";//鏌ヨ璁垮鏉ヨ璁板綍v2
-        String vehicleList= "/api/resource/v2/vehicle/advance/vehicleList";//鏌ヨ杞﹁締鍒楄〃v2
-        String vehicleTimeRangeList= "/api/resource/v1/vehicle/timeRange";//澧為噺鑾峰彇杞﹁締鏁版嵁
-        String facePictureCheck= "/api/frs/v1/face/picture/check";//浜鸿劯璇勫垎
-        String acsDeviceStatus= "/api/nms/v1/online/acs_device/get";//鑾峰彇闂ㄧ璁惧鍦ㄧ嚎鐘舵��
-        String tempCarInRecords= "/api/pms/v1/tempCarInRecords/page";//鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭�
-        String applyCTGT= "/api/lsm/ssoService/v1/applyCTGT";//鏍规嵁鐢ㄦ埛鏍囪瘑鑾峰彇瀹㈡埛绔疶GC鎺ュ彛
-        String applyST= "/api/lsm/ssoService/v1/applyST";//鏍规嵁鐧诲綍鏍囪瘑TGC鐢宠鐧诲綍鍑瘉ST鎺ュ彛
-        String tokenLoginUrl= "/lsm/ssoService/v1/tokenLogin?token=${st}&service=${service}";//缁勪欢鎺堟潈鐧诲綍鎷兼帴鍦板潃
-        String fetchAudioChannel= "/api/ibas/resource/v1/fetchAudioChannel";//1.1.4.1鍒嗛〉鑾峰彇骞挎挱鐐�
-        String fetchAudioDevice= "/api/ibas/resource/v1/fetchAudioDevice";//1.1.4.2鍒嗛〉鑾峰彇骞挎挱璁惧鍒楄〃
-        String fetchAudioChannelByDevice= "/api/ibas/resource/v1/fetchAudioChannelByDevice";//1.1.4.3鏍规嵁璁惧淇℃伅鑾峰彇骞挎挱鐐�
-        String ledRecords= "/api/v1/model/tb_led_info/records";//鑾峰彇鏈堝彴缁勪欢閰嶇疆鐨凩ED璁惧娓呭崟
-        String transparentchannel= "/api/v1/transparentchannel";//鍙戦�佹秷鎭粰LED
-        String platformsList= "/api/platformService/v1/platforms";//鑾峰彇鍏ㄩ儴鏈堝彴淇℃伅
-        String platformStatus= "/api/platformService/v1/platform/status";//鑾峰彇鏈堝彴鐘舵��
-        String customBroadcast= "/api/ibas/v1/customBroadcast";//鐢ㄤ簬璁剧疆骞挎挱鐨勮嚜瀹氭挱鏀惧拰鍋滄
-        String iccmAppointment= "/api/iccm/v2/appointment";//iccm璁垮鐧昏娣诲姞
-        String iccmUpdateAppointment= "/api/iccm/v2/appointment/update";//iccm璁垮鐧昏淇敼
-        String iccmCancelAppointment= "/api/iccm/v1/appointment/cancel";//iccm璁垮鐧昏淇敼
-        String iccmAppointmentMDJ= "/api/iccm/v1/appointment/free/registration";//iccm璁垮棰勭害鍏嶇櫥璁�
+//        String doorEvents = new String[]{"/api/acs/v2/door/events",""};//闂ㄧ浜嬩欢鏌ヨ
+//        String visitEvents = new String[]{"/api/visitor/v1/event/turnover/search",""};//璁垮浜嬩欢鏌ヨ
+        String[] parkCrossRecords =new String[]{"/api/pms/v1/crossRecords/page","鍋滆溅鍦鸿繃绋嬭褰�"};//鍋滆溅鍦鸿繃绋嬭褰�
+        String[] rootOrg = new String[]{"/api/resource/v1/org/rootOrg","鑾峰彇璺熺粍缁�"};//鑾峰彇璺熺粍缁�
+        String[] orgAllList = new String[]{"/api/resource/v1/org/orgList","鑾峰彇鍏ㄩ噺缁勭粐淇℃伅"};//鑾峰彇鍏ㄩ噺缁勭粐淇℃伅
+        String[] userAllList = new String[]{"/api/resource/v2/person/personList","鑾峰彇鍏ㄩ噺鐢ㄦ埛鍒楄〃"};//鑾峰彇鍏ㄩ噺鐢ㄦ埛鍒楄〃
+        String[] personList = new String[]{"/api/resource/v2/person/advance/personList","鏌ヨ浜哄憳鍒楄〃v2"};//鏌ヨ浜哄憳鍒楄〃v2
+        String[] orgTimeRangeList = new String[]{"/api/resource/v1/org/timeRange","澧為噺鑾峰彇缁勭粐淇℃伅"};//澧為噺鑾峰彇缁勭粐淇℃伅
+        String[] userTimeRangeList = new String[]{"/api/resource/v1/person/personList/timeRange","澧為噺鑾峰彇鐢ㄦ埛鍒楄〃"};//澧為噺鑾峰彇鐢ㄦ埛鍒楄〃
+        String[] addBatchOrg = new String[]{"/api/resource/v1/org/batch/add","鎵归噺鏂板缁勭粐"};//鎵归噺鏂板缁勭粐
+        String[] delBatchOrg = new String[]{"/api/resource/v1/org/batch/delete","鎵归噺鍒犻櫎缁勭粐"};//鎵归噺鍒犻櫎缁勭粐
+        String[] editOrg = new String[]{"/api/resource/v1/org/single/update","淇敼缁勭粐"};//淇敼缁勭粐
+        String[] addUser = new String[]{"/api/resource/v2/person/single/add","娣诲姞浜哄憳"};//娣诲姞浜哄憳
+        String[] addBatchUser = new String[]{"/api/resource/v1/person/batch/add","鎵归噺娣诲姞浜哄憳"};//鎵归噺娣诲姞浜哄憳
+        String[] editUser = new String[]{"/api/resource/v1/person/single/update","淇敼浜哄憳"};//淇敼浜哄憳
+        String[] delBatchUser = new String[]{"/api/resource/v1/person/batch/delete","鎵归噺鍒犻櫎浜哄憳"};//鎵归噺鍒犻櫎浜哄憳
+        String[] addFace = new String[]{"/api/resource/v1/face/single/add","娣诲姞浜鸿劯"};//娣诲姞浜鸿劯
+        String[] editFace = new String[]{"/api/resource/v1/face/single/update","淇敼浜鸿劯"};//淇敼浜鸿劯
+        String[] delFace = new String[]{"/api/resource/v1/face/single/delete","鍒犻櫎浜鸿劯"};//鍒犻櫎浜鸿劯
+        String[] acsDeviceList = new String[]{"/api/resource/v2/acsDevice/search","鏌ヨ闂ㄧ璁惧鍒楄〃v2"};//鏌ヨ闂ㄧ璁惧鍒楄〃v2
+        String[] acsDeviceTimeRangeList = new String[]{"/api/resource/v1/acsDevice/timeRange","澧為噺鑾峰彇闂ㄧ璁惧鏁版嵁"};//澧為噺鑾峰彇闂ㄧ璁惧鏁版嵁
+        String[] parkAddition = new String[]{"/api/pms/v2/parkingSpace/reservations/addition","杞︿綅棰勭害v2"};//杞︿綅棰勭害v2
+        String[] parkDeletion= new String[]{"/api/pms/v1/parkingSpace/reservations/deletion","杞︿綅鍙栨秷棰勭害v2"};//杞︿綅鍙栨秷棰勭害v2
+        String[] carChargeAddtion= new String[]{"/api/pms/v1/car/charge","鍥哄畾杞﹀厖鍊煎寘鏈�"};//鍥哄畾杞﹀厖鍊煎寘鏈�
+        String[] carChargeDeletion= new String[]{"/api/pms/v1/car/charge/deletion","鍥哄畾杞﹀彇娑堝寘鏈�"};//鍥哄畾杞﹀彇娑堝寘鏈�
+        String[] getParkList= new String[]{"/api/resource/v1/park/parkList","鑾峰彇鍋滆溅搴撳垪琛�"};//鑾峰彇鍋滆溅搴撳垪琛�
+        String[] getEntranceList= new String[]{"/api/resource/v1/entrance/entranceList","鑾峰彇鍑哄叆鍙e垪琛�"};//鑾峰彇鍑哄叆鍙e垪琛�
+        String[] visitAppiontment= new String[]{"/api/visitor/v2/appointment","璁垮棰勭害v2"};//璁垮棰勭害v2
+        String[] visitAppiontmentMDJ= new String[]{"/api/visitor/v1/appointment/registration","璁垮棰勭害鍏嶇櫥璁皏2"};//璁垮棰勭害鍏嶇櫥璁皏2
+        String[] visitCancel= new String[]{"/api/visitor/v1/appointment/cancel","鍙栨秷璁垮棰勭害"};//鍙栨秷璁垮棰勭害
+        String[] visitOut= new String[]{"/api/visitor/v1/visitor/out","绛剧璁垮棰勭害"};//绛剧璁垮棰勭害
+        String[] facePicture= new String[]{"/api/resource/v1/person/picture","鎻愬彇鐢ㄦ埛浜鸿劯鐓х墖"};//鎻愬彇鐢ㄦ埛浜鸿劯鐓х墖
+        String[] privilegeGroup= new String[]{"/api/visitor/v1/privilege/group","鏌ヨ璁垮鏉冮檺缁�"};//鏌ヨ璁垮鏉冮檺缁�
+        String[] eventSub= new String[]{"/api/eventService/v1/eventSubscriptionByEventTypes","浜嬩欢璁㈤槄"};//浜嬩欢璁㈤槄
+        String[] doorSearch= new String[]{"/api/resource/v2/door/search","鏌ヨ闂ㄧ鐐瑰垪琛╲2"};//鏌ヨ闂ㄧ鐐瑰垪琛╲2
+        String[] cancelEventSub= new String[]{"/api/eventService/v1/eventUnSubscriptionByEventTypes","鍙栨秷浜嬩欢璁㈤槄"};//鍙栨秷浜嬩欢璁㈤槄
+        String[] visitPicture= new String[]{"/api/visitor/v1/record/pictures","鑾峰彇璁垮璁板綍涓殑鍥剧墖"};//鑾峰彇璁垮璁板綍涓殑鍥剧墖
+        String[] devicePicture= new String[]{"/api/acs/v1/event/pictures","鑾峰彇闂ㄧ浜嬩欢鐨勫浘鐗�"};//鑾峰彇闂ㄧ浜嬩欢鐨勫浘鐗�
+        String[] carPicture= new String[]{"/api/pms/v1/image","鏌ヨ杞﹁締鎶撴媿鍥剧墖"};//鏌ヨ杞﹁締鎶撴媿鍥剧墖
+        String[] taskAddition= new String[]{"/api/acps/v1/authDownload/task/addition","鍒涘缓涓嬭浇浠诲姟_鏍规嵁浜哄憳涓庤澶囬�氶亾鎸囧畾涓嬭浇"};//鍒涘缓涓嬭浇浠诲姟_鏍规嵁浜哄憳涓庤澶囬�氶亾鎸囧畾涓嬭浇
+        String[] taskDataAddition= new String[]{"/api/acps/v1/authDownload/data/addition","涓嬭浇浠诲姟涓坊鍔犳暟鎹甠鏍规嵁浜哄憳涓庤澶囬�氶亾鎸囧畾涓嬭浇"};//涓嬭浇浠诲姟涓坊鍔犳暟鎹甠鏍规嵁浜哄憳涓庤澶囬�氶亾鎸囧畾涓嬭浇
+        String[] taskStart= new String[]{"/api/acps/v1/authDownload/task/start","寮�濮嬩笅杞戒换鍔�"};//寮�濮嬩笅杞戒换鍔�
+        String[] taskProgressNum= new String[]{"/api/acps/v1/authDownload/task/progress","鏌ヨ涓嬭浇浠诲姟杩涘害"};//鏌ヨ涓嬭浇浠诲姟杩涘害
+        String[] taskProgress= new String[]{"/api/acps/v2/download_record/person/detail/search","鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟v2"};//鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟v2
+        String[] authItemList= new String[]{"/api/acps/v1/auth_item/list/search","鏌ヨ鏉冮檺鏉$洰鍒楄〃"};//鏌ヨ鏉冮檺鏉$洰鍒楄〃
+        String[] cardBingding= new String[]{"/api/cis/v1/card/bindings","鎵归噺寮�鍗�"};//鎵归噺寮�鍗�
+        String[] cardDeletion= new String[]{"/api/cis/v1/card/deletion","鍗$墖閫�鍗�"};//鍗$墖閫�鍗�
+        String[] cardLoss= new String[]{"/api/cis/v1/card/batch/loss","鎵归噺鎸傚け"};//鎵归噺鎸傚け
+        String[] cardUnloss= new String[]{"/api/cis/v1/card/batch/unLoss","鎵归噺瑙f寕"};//鎵归噺瑙f寕
+        String[] taskPersoDetail= new String[]{"/api/acps/v1/download_record/person/detail/search","鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯�"};//鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯�
+        String[] appointmentRecords= new String[]{"/api/visitor/v2/appointment/records","鏌ヨ璁垮棰勭害璁板綍v2"};//鏌ヨ璁垮棰勭害璁板綍v2
+        String[] visitingRecords= new String[]{"/api/visitor/v2/visiting/records","鏌ヨ璁垮鏉ヨ璁板綍v2"};//鏌ヨ璁垮鏉ヨ璁板綍v2
+        String[] vehicleList= new String[]{"/api/resource/v2/vehicle/advance/vehicleList","鏌ヨ杞﹁締鍒楄〃v2"};//鏌ヨ杞﹁締鍒楄〃v2
+        String[] vehicleTimeRangeList= new String[]{"/api/resource/v1/vehicle/timeRange","澧為噺鑾峰彇杞﹁締鏁版嵁"};//澧為噺鑾峰彇杞﹁締鏁版嵁
+        String[] facePictureCheck= new String[]{"/api/frs/v1/face/picture/check","浜鸿劯璇勫垎"};//浜鸿劯璇勫垎
+        String[] acsDeviceStatus= new String[]{"/api/nms/v1/online/acs_device/get","鑾峰彇闂ㄧ璁惧鍦ㄧ嚎鐘舵��"};//鑾峰彇闂ㄧ璁惧鍦ㄧ嚎鐘舵��
+        String[] tempCarInRecords= new String[]{"/api/pms/v1/tempCarInRecords/page","鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭�"};//鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭�
+        String[] applyCTGT= new String[]{"/api/lsm/ssoService/v1/applyCTGT","鏍规嵁鐢ㄦ埛鏍囪瘑鑾峰彇瀹㈡埛绔疶GC鎺ュ彛"};//鏍规嵁鐢ㄦ埛鏍囪瘑鑾峰彇瀹㈡埛绔疶GC鎺ュ彛
+        String[] applyST= new String[]{"/api/lsm/ssoService/v1/applyST","鏍规嵁鐧诲綍鏍囪瘑TGC鐢宠鐧诲綍鍑瘉ST鎺ュ彛"};//鏍规嵁鐧诲綍鏍囪瘑TGC鐢宠鐧诲綍鍑瘉ST鎺ュ彛
+        String[] tokenLoginUrl= new String[]{"/lsm/ssoService/v1/tokenLogin?token=${st}&service=${service}","缁勪欢鎺堟潈鐧诲綍鎷兼帴鍦板潃"};//缁勪欢鎺堟潈鐧诲綍鎷兼帴鍦板潃
+        String[] fetchAudioChannel= new String[]{"/api/ibas/resource/v1/fetchAudioChannel","鍒嗛〉鑾峰彇骞挎挱鐐�"};//1.1.4.1鍒嗛〉鑾峰彇骞挎挱鐐�
+        String[] fetchAudioDevice= new String[]{"/api/ibas/resource/v1/fetchAudioDevice","2鍒嗛〉鑾峰彇骞挎挱璁惧鍒楄〃"};//1.1.4.2鍒嗛〉鑾峰彇骞挎挱璁惧鍒楄〃
+        String[] fetchAudioChannelByDevice= new String[]{"/api/ibas/resource/v1/fetchAudioChannelByDevice","3鏍规嵁璁惧淇℃伅鑾峰彇骞挎挱鐐�"};//1.1.4.3鏍规嵁璁惧淇℃伅鑾峰彇骞挎挱鐐�
+        String[] ledRecords= new String[]{"/api/v1/model/tb_led_info/records","鑾峰彇鏈堝彴缁勪欢閰嶇疆鐨凩ED璁惧娓呭崟"};//鑾峰彇鏈堝彴缁勪欢閰嶇疆鐨凩ED璁惧娓呭崟
+        String[] transparentchannel= new String[]{"/api/v1/transparentchannel","鍙戦�佹秷鎭粰LED"};//鍙戦�佹秷鎭粰LED
+        String[] platformsList= new String[]{"/api/platformService/v1/platforms","鑾峰彇鍏ㄩ儴鏈堝彴淇℃伅"};//鑾峰彇鍏ㄩ儴鏈堝彴淇℃伅
+        String[] platformStatus= new String[]{"/api/platformService/v1/platform/status","鑾峰彇鏈堝彴鐘舵��"};//鑾峰彇鏈堝彴鐘舵��
+        String[] customBroadcast= new String[]{"/api/ibas/v1/customBroadcast","鐢ㄤ簬璁剧疆骞挎挱鐨勮嚜瀹氭挱鏀惧拰鍋滄"};//鐢ㄤ簬璁剧疆骞挎挱鐨勮嚜瀹氭挱鏀惧拰鍋滄
+        String[] iccmAppointment= new String[]{"/api/iccm/v2/appointment/","iccm璁垮鐧昏娣诲姞"};//iccm璁垮鐧昏娣诲姞
+        String[] iccmUpdateAppointment= new String[]{"/api/iccm/v2/appointment/update","iccm璁垮鐧昏淇敼"};//iccm璁垮鐧昏淇敼
+        String[] iccmCancelAppointment= new String[]{"/api/iccm/v1/appointment/cancel","iccm璁垮鐧昏淇敼"};//iccm璁垮鐧昏淇敼
+        String[] iccmAppointmentMDJ= new String[]{"/api/iccm/v1/appointment/free/registration","iccm璁垮棰勭害鍏嶇櫥璁�"};//iccm璁垮棰勭害鍏嶇櫥璁�
 
-        String privilegIccmeGroup= "/api/iccm/v1/privilege/groups";//鏌ヨ璁垮鏉冮檺缁�
-        String iccmAppointmentRecords= "/api/iccm/v2/appointment/records";//iccm鏌ヨ宸查绾︾櫥璁�
+        String[] privilegIccmeGroup= new String[]{"/api/iccm/v1/privilege/groups","鏌ヨ璁垮鏉冮檺缁�"};//鏌ヨ璁垮鏉冮檺缁�
+        String[] iccmAppointmentRecords= new String[]{"/api/iccm/v2/appointment/records","iccm鏌ヨ宸查绾︾櫥璁�"};//iccm鏌ヨ宸查绾︾櫥璁�
     }
 
     /**
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
index f13409d..4a50aaf 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -61,7 +61,7 @@
 
 	}
 	public static InterfaceLogService interfaceLogService = null;
-	private static void saveInterfaceLog(String s, String result,Map<String, String> path) {
+	private static void saveInterfaceLog(String s, String result,Map<String, String> path,String name) {
 //		InterfaceLogService bean = SpringContextUtil.getBean(InterfaceLogService.class);
 		if(interfaceLogService !=null){
 			InterfaceLog hkMonitoryLogDO=new InterfaceLog();
@@ -70,7 +70,7 @@
 			hkMonitoryLogDO.setIsdeleted(0);
 			hkMonitoryLogDO.setRequest(s);
 			hkMonitoryLogDO.setRepose(result);
-			hkMonitoryLogDO.setName(path.get(HKConstants.https));
+			hkMonitoryLogDO.setName("銆愬畨闃插钩鍙般��"+name);
 			hkMonitoryLogDO.setUrl(HKConstants.https + ArtemisConfig.host+path.get(HKConstants.https));
 			interfaceLogService.create(hkMonitoryLogDO);
 		}
@@ -238,7 +238,7 @@
 	 */
 	public static InputStream getFaceInputStream(String body)  throws  Exception{
 
-		Map<String, String> path = getPath(HKConstants.InterfacePath.facePicture);
+		Map<String, String> path = getPath(HKConstants.InterfacePath.facePicture[0]);
 		//鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
 		HttpResponse resp = ArtemisHttpUtil.doPostStringImgArtemis( path, body, null, null,"application/json",null);
 		if (200==resp.getStatusLine().getStatusCode()) {
@@ -255,7 +255,7 @@
 	 * @return
 	 */
 	public static InputStream getVisitPicture(String body)  throws  Exception{
-		Map<String, String> path = getPath(HKConstants.InterfacePath.visitPicture);
+		Map<String, String> path = getPath(HKConstants.InterfacePath.visitPicture[0]);
 		//鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
 		HttpResponse resp = ArtemisHttpUtil.doPostStringImgArtemis( path, body, null, null,"application/json",null);
 		if (200==resp.getStatusLine().getStatusCode()) {
@@ -273,7 +273,7 @@
 	 */
 	public static InputStream getDevicePicture(String body)  throws  Exception{
 
-		Map<String, String> path = getPath(HKConstants.InterfacePath.devicePicture);
+		Map<String, String> path = getPath(HKConstants.InterfacePath.devicePicture[0]);
 		//鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
 		HttpResponse resp = ArtemisHttpUtil.doPostStringImgArtemis( path, body, null, null,"application/json",null);
 		if (200==resp.getStatusLine().getStatusCode()) {
@@ -292,7 +292,7 @@
 	 */
 	public static InputStream getCarPicture(String body)  throws  Exception{
 
-		Map<String, String> path = getPath(HKConstants.InterfacePath.carPicture);
+		Map<String, String> path = getPath(HKConstants.InterfacePath.carPicture[0]);
 		//鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
 		HttpResponse resp = ArtemisHttpUtil.doPostStringImgArtemis( path, body, null, null,"application/json",null);
 		if (200==resp.getStatusLine().getStatusCode()) {
@@ -369,20 +369,29 @@
 		return  startDoPostStringArtemis(HKConstants.InterfacePath.visitCancel,body);
 	}
 
-	public static String startDoPostStringArtemis(String pathStr,String body){
-		Map<String, String> path = getPath(pathStr);
+	public static String startDoPostStringArtemis(String[] pathStr,String body ){
+		Map<String, String> path = getPath(pathStr[0]);
 		Map<String, String> header = new HashMap<>();
 		header.put("tagId", UUID.randomUUID().toString().replace("-", ""));
 		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post璇锋眰application/json绫诲瀷鍙傛暟
-		saveInterfaceLog(body,result,path);
+		saveInterfaceLog(body,result,path,pathStr[1]);
 		return result;
 
 	}
-	public static String startDoPostStringArtemis(String pathStr,Map<String, String> querys,Map<String, String> header,String body){
-		Map<String, String> path = getPath(pathStr);
+	public static String startDoPostStringArtemis(String[] pathStr,String param,String body ){
+		Map<String, String> path = getPath(pathStr[0]+StringUtils.defaultString(param,""));
+		Map<String, String> header = new HashMap<>();
+		header.put("tagId", UUID.randomUUID().toString().replace("-", ""));
+		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post璇锋眰application/json绫诲瀷鍙傛暟
+		saveInterfaceLog(body,result,path,pathStr[1]);
+		return result;
+
+	}
+	public static String startDoPostStringArtemis(String[] pathStr,Map<String, String> querys,Map<String, String> header,String body){
+		Map<String, String> path = getPath(pathStr[0]);
 		header.put("tagId", UUID.randomUUID().toString().replace("-", ""));
 		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, querys, null, "application/json", header);// post璇锋眰application/json绫诲瀷鍙傛暟
-		saveInterfaceLog(body,result,path);
+		saveInterfaceLog(body,result,path,pathStr[1]);
 		return result;
 
 	}
@@ -655,7 +664,7 @@
 	 */
 	public static String platformStatus(String param) {
 		if(StringUtils.isNotBlank(param)){
-			return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus+"?platformIds="+param,null);
+			return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus,"?platformIds="+param,null);
 		}else{
 			return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus,null);
 		}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWaterGasMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWaterGasMapper.java
new file mode 100644
index 0000000..3817dc9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWaterGasMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.PlatformWaterGas;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/08/26 16:22
+ */
+public interface PlatformWaterGasMapper extends BaseMapper<PlatformWaterGas> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
index cd622be..25d4fe5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.Visits;
+import com.github.yulichang.base.MPJBaseMapper;
 
 import java.util.List;
 
@@ -9,6 +10,6 @@
  * @author 姹熻箘韫�
  * @date 2023/11/30 15:33
  */
-public interface VisitsMapper extends BaseMapper<Visits> {
+public interface VisitsMapper extends MPJBaseMapper<Visits> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java
index e73c8fb..f88a2a0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/ApproveDTO.java
@@ -18,7 +18,7 @@
     @ApiModelProperty(value = "鍏宠仈涓氬姟涓婚敭")
     private Integer objId;
 
-    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害")
+    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害 6鍏ュ洯棰勭害")
     private Integer objType;
 
     @ApiModelProperty(value = "2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
index 0c89c3b..1836078 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -117,8 +117,8 @@
     @ExcelColumn(name="鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�")
     private Integer addrParam;
 
-    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害", example = "1")
-    @ExcelColumn(name="鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害")
+    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害  6鍏ュ洯鍘熷洜", example = "1")
+    @ExcelColumn(name="鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害  6鍏ュ洯鍘熷洜")
     private Integer objType;
 
     @ApiModelProperty(value = "绫诲瀷 0瀹℃壒 1鎶勯��", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
index eef7d41..4bb6efd 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
@@ -52,8 +52,8 @@
     @ExcelColumn(name="澶囨敞")
     private String remark;
 
-    @ApiModelProperty(value = "鍚嶇О 0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1鏂藉伐浜哄憳璁垮鐢宠 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害", example = "1")
-    @ExcelColumn(name="鍚嶇О 0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1鏂藉伐浜哄憳璁垮鐢宠 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害")
+    @ApiModelProperty(value = "鍚嶇О 0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1鏂藉伐浜哄憳璁垮鐢宠 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害 6鍏ュ洯鍘熷洜", example = "1")
+    @ExcelColumn(name="鍚嶇О 0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1鏂藉伐浜哄憳璁垮鐢宠 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害 6鍏ュ洯鍘熷洜")
     private Integer type;
 
     @ApiModelProperty(value = "鍚嶇О")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformBooks.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformBooks.java
index cea4575..12e06bd 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformBooks.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformBooks.java
@@ -136,6 +136,10 @@
     @TableField(exist = false)
     private String queryDate;
 
+    @ApiModelProperty(value = "鍥剧墖鍓嶇紑")
+    @TableField(exist = false)
+    private String prefixUrl;
+
     @ApiModelProperty(value = "瀹℃壒淇℃伅鏁版嵁")
     @TableField(exist = false)
     private ApproveDataVO approveDateVO;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
index 57cfc6d..f3e24c0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -264,7 +264,15 @@
 
     @ApiModelProperty(value = "鍓嶆柟鎺掗槦鏁伴噺", example = "1")
     @TableField(exist = false)
-    private Long lineUpNum;
+    private Integer lineUpNum;
+
+    @ApiModelProperty(value = "棰勮绛夊緟鏃堕棿", example = "1")
+    @TableField(exist = false)
+    private String waitTime;
+
+    @ApiModelProperty(value = "棰勮瀹屾垚鏃堕棿", example = "1")
+    @TableField(exist = false)
+    private String finishTimeStr;
 
     @ApiModelProperty(value = "鍏宠仈鏈堝彴缁勭紪鐮侊紙鍏宠仈platform_group琛級", example = "1")
     @TableField(exist = false)
@@ -278,6 +286,9 @@
     @TableField(exist = false)
     private BigDecimal getDistance;
 
+    @ApiModelProperty(value = "鏈堝彴浣滀笟鏁堢巼锛堜竾鏀�/灏忔椂锛�", hidden = true)
+    @TableField(exist = false)
+    private BigDecimal workRate;
 
     @ApiModelProperty(value = "涓氬姟瑙﹀彂鏃堕棿  鏃堕棿")
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWaterGas.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWaterGas.java
new file mode 100644
index 0000000..a801e0d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWaterGas.java
@@ -0,0 +1,85 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�
+ * @author 姹熻箘韫�
+ * @date 2024/08/26 16:22
+ */
+@Data
+@ApiModel("鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛�")
+@TableName("`platform_water_gas`")
+public class PlatformWaterGas  extends LoginUserModel {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鏃堕棿锛堝勾鏈堬級")
+    @ExcelColumn(name="鏃堕棿锛堝勾鏈堬級")
+    private Date timeInfo;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    @ExcelColumn(name="鎺掑簭鐮�")
+    private Integer sortnum;
+
+    @ApiModelProperty(value = "绫诲瀷 0鐢ㄧ數 1鐢ㄧ數 2娌硅��", example = "1")
+    @ExcelColumn(name="绫诲瀷 0鐢ㄧ數 1鐢ㄧ數 2娌硅��")
+    private Integer type;
+
+    @ApiModelProperty(value = "鏁伴噺 (鐢ㄧ數椤匡紝鐢ㄧ數搴︼紱 娌硅�桳锛�", example = "1")
+    @ExcelColumn(name="鏁伴噺 (鐢ㄧ數椤匡紝鐢ㄧ數搴︼紱 娌硅�桳锛�")
+    private BigDecimal num;
+
+    @ApiModelProperty(value = "璇存槑")
+    @ExcelColumn(name="璇存槑")
+    private String content;
+
+    @ApiModelProperty(value = "杞︾墝鍙�")
+    @ExcelColumn(name="杞︾墝鍙�")
+    private String carCode;
+
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @TableField(exist = false)
+    private Date startTime;
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @TableField(exist = false)
+    private Date endTime;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/PlatformBooksApplyDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/PlatformBooksApplyDTO.java
index 6273b5f..0d46c53 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/PlatformBooksApplyDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/PlatformBooksApplyDTO.java
@@ -19,6 +19,8 @@
 @Api(tags = "鍏ュ洯棰勭害鐢宠淇℃伅" )
 public class PlatformBooksApplyDTO {
 
+    @ApiModelProperty(value = "涓婚敭 - 淇敼浣跨敤")
+    private Integer id;
     @ApiModelProperty(value = "鍚堝悓鍙�")
     private String contractNum;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DriverHomeVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DriverHomeVO.java
index e677f12..430b316 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DriverHomeVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DriverHomeVO.java
@@ -19,4 +19,11 @@
     @ApiModelProperty(value = "鏈堝彴浠诲姟鍒楄〃")
     private List<PlatformJob> platformJobList;
 
+    @ApiModelProperty(value = "棰勭害鎸囧崡")
+    private String bookingTips;
+
+    @ApiModelProperty(value = "鍥尯瀵艰鍥�")
+    private String reservationMap;
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
index 6b2fb66..e6e7570 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -112,6 +112,8 @@
 
     void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
 
+    void createApproveForPlatfrom(Integer tempId,Integer businessId,Integer createMemberId);
+
     ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId);
 
     void approved(ApproveDTO approveDTO);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
index ac8a7a8..a842e2d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -1,7 +1,9 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Platform;
 import com.doumee.dao.business.model.PlatformJob;
 import com.doumee.dao.web.reqeust.JobDetailDTO;
 import com.doumee.dao.web.reqeust.JobOperateDTO;
@@ -102,7 +104,7 @@
      */
     long count(PlatformJob platformJob);
 
-    DriverHomeVO getDriverHome(Integer memberId);
+    DriverHomeVO getDriverHome(LoginUserInfo loginUserInfo);
 
     /**
      * 璺濈绛惧埌
@@ -172,4 +174,12 @@
      */
     void finishWork(JobOperateDTO jobOperateDTO);
 
+    /**
+     * 鑾峰彇鏈堝彴涓嬬殑浠诲姟淇℃伅
+     * @param groupId
+     * @param loginUserInfo
+     * @return
+     */
+    List<Platform> getPlatformList(Integer groupId, LoginUserInfo loginUserInfo);
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformWaterGasService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformWaterGasService.java
new file mode 100644
index 0000000..320008c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformWaterGasService.java
@@ -0,0 +1,101 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.LoginUserModel;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.PlatformWaterGas;
+import java.util.List;
+
+/**
+ * 鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/08/26 16:22
+ */
+public interface PlatformWaterGasService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param platformWaterGas 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(PlatformWaterGas platformWaterGas);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param platformWaterGas 瀹炰綋瀵硅薄
+     */
+    void delete(PlatformWaterGas platformWaterGas);
+    void deleteById(Integer id, LoginUserInfo user);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+    void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param platformWaterGas 瀹炰綋瀵硅薄
+     */
+    void updateById(PlatformWaterGas platformWaterGas);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param platformWaterGass 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<PlatformWaterGas> platformWaterGass);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return PlatformWaterGas
+     */
+    PlatformWaterGas findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param platformWaterGas 瀹炰綋瀵硅薄
+     * @return PlatformWaterGas
+     */
+    PlatformWaterGas findOne(PlatformWaterGas platformWaterGas);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param platformWaterGas 瀹炰綋瀵硅薄
+     * @return List<PlatformWaterGas>
+     */
+    List<PlatformWaterGas> findList(PlatformWaterGas platformWaterGas);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<PlatformWaterGas>
+     */
+    PageData<PlatformWaterGas> findPage(PageWrap<PlatformWaterGas> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param platformWaterGas 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(PlatformWaterGas platformWaterGas);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
index 569c7ca..172d792 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -141,4 +141,6 @@
     void  visitCancel(Integer visitId);
 
     void resetPassword(ResetPasswordDTO resetPasswordDTO);
+
+    void visitResend(Integer visitId);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 804ee30..b698dd5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -31,6 +31,7 @@
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import io.swagger.models.auth.In;
+import javafx.application.Platform;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.xpath.operations.Bool;
@@ -388,6 +389,52 @@
     }
 
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void createApproveForPlatfrom(Integer tempId,Integer businessId,Integer createMemberId){
+        //鏌ヨ澶勭悊妯℃澘
+        ApproveTempl approveTempl = approveTemplMapper.selectById(tempId);
+        if(Objects.isNull(approveTempl)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌瀹℃壒娴侀厤缃ā鏉�");
+        }
+        //鏌ヨ閰嶇疆娴佺▼
+        List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>()
+                .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .eq(ApproveParam::getTemplId,approveTempl.getId())
+                .orderByAsc(ApproveParam::getType)
+                .orderByAsc(ApproveParam::getLevel)
+        );
+        if(Objects.isNull(approveParamAllList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈厤缃鎵规祦绋�");
+        }
+        //瀹℃壒閰嶇疆
+        List<ApproveParam> approveParamList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList());
+        if(Objects.isNull(approveParamList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈厤缃鎵规祦绋�");
+        }
+        List<ApproveParam> approveCopyList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList());
+
+        Member createMember = memberMapper.selectById(createMemberId);
+        if(Objects.isNull(createMember)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鐢宠浜虹粍缁囦俊鎭紓甯�");
+        }
+        List<Approve> approveList = new ArrayList<>();
+
+        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
+
+        if(CollectionUtils.isEmpty(approveList)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇�");
+        }
+
+        //澶勭悊鎶勯�佹暟鎹�
+        if(CollectionUtils.isNotEmpty(approveCopyList)){
+            this.organizeApproveCopyData(approveTempl,approveCopyList,businessId,approveList);
+        }
+        approveJoinMapper.insert(approveList);
+
+    }
+
+
     /**
      * 缁勭粐瀹℃壒娴佹暟鎹�
      * @param approveTempl
@@ -555,8 +602,17 @@
             jsonMap.put("eTime", "缁撴潫鏃堕棿:" + DateUtil.DateToStr(carUseBook.getEndTime() , "yyyy-MM-dd HH:mm"));
             jsonMap.put("usrNum", StringUtils.isBlank(carUseBook.getMemberIds())?"涔樿溅浜烘暟: 0浜�": "涔樿溅浜烘暟: " +carUseBook.getMemberIds().split(",").length +"浜�");
             jsonMap.put("mdd", StringUtils.isBlank(carUseBook.getAddr())?"鐩殑鍦�: - ": "鐩殑鍦�:" +carUseBook.getAddr());
-        }else {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
+        }else if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.reason)){
+            //鐗╂祦杞﹂绾�
+            PlatformBooks platformBooks = platformBooksMapper.selectById(businessId);
+            if(Objects.isNull(platformBooks)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌涓氬姟鏁版嵁淇℃伅");
+            }
+            title = "銆愮墿娴佽溅鍏ュ洯棰勭害銆戠敵璇蜂汉 - " + platformBooks.getDriverName();
+            jsonMap.put("inType", "鍏ュ簱绫诲瀷锛�"+(Constants.equalsInteger(platformBooks.getInType(),Constants.ZERO)?"鏁存墭鐩�":"浠剁儫"));
+            jsonMap.put("totalNum", "鎬昏繍杈撻噺锛�"+platformBooks.getTotalNum()+"涓囨敮");
+            jsonMap.put("arriveDate", "鍒板満鏃堕棿锛�" + DateUtil.DateToStr(platformBooks.getArriveDate() , "yyyy-MM-dd HH:mm"));
+            jsonMap.put("carNum", "杞︾墝鐓э細"+platformBooks.getCarCodeFront());
         }
         return title;
     }
@@ -1345,7 +1401,7 @@
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                 Constants.approveObjectType.unCityUseCar)){
             this.updDriver(approveDTO,approve,true);
-        }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
+        }else if(approveDTO.getObjType().equals(Constants.approveObjectType.reason)){
             //鐗╂祦杞﹂绾�
             PlatformBooks platformBooks = platformBooksMapper.selectById(approveDTO.getObjId());
             if(Objects.isNull(platformBooks)){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
index 0ac1181..6fe0fdf 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
@@ -166,6 +166,6 @@
              days = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HK_LOG_DEL_DAYS_LIMIT).getCode());
          }catch (Exception e){}
           interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda()
-                  .apply("to_days(create_date)+"+days+" < to_days(now())") );
+                  .apply("to_days(create_dat e)+"+days+" < to_days(now())") );
     }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 693f779..a7ccd11 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2002,6 +2002,7 @@
         systemUser.setUsername(registerDriverDTO.getPhone());
         systemUser.setRealname(registerDriverDTO.getName());
         systemUser.setMemberId(member.getId());
+        systemUser.setMobile(registerDriverDTO.getPhone());
         systemUser.setSalt(salt);
         systemUser.setPassword(member.getPassward());
         systemUser.setStatus(Constants.ZERO);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
index a155825..68318b2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -186,7 +186,7 @@
         }
         //鏌ヨ姣忔棩閰嶇疆鐨勬�婚绾﹂噺
         PlatformReason platformReason = platformReasonMapper.selectById(platformBooksCheckNumDTO.getReasonId());
-        if(Objects.isNull(platformReason)|| Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){
+        if(Objects.isNull(platformReason)|| !Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍏ュ洯鍘熷洜淇℃伅寮傚父,璇峰埛鏂伴噸璇�");
         }
         List<PlatformBooks> platformBooksList = platformBooksMapper.selectList(new QueryWrapper<PlatformBooks>().lambda()
@@ -225,23 +225,15 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         PlatformReason platformReason = platformReasonMapper.selectById(platformBooksApplyDTO.getReasonId());
-        if(Objects.isNull(platformReason)|| Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){
+        if(Objects.isNull(platformReason)|| !Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍏ュ洯鍘熷洜淇℃伅寮傚父,璇峰埛鏂伴噸璇�");
         }
-        ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
-                .eq(ApproveTempl::getIsdeleted,Constants.ZERO)
-                .eq(ApproveTempl::getObjId,platformReason.getId())
-                .last(" limit 1")
-        );
+        ApproveTempl approveTempl = approveTemplMapper.selectById(platformReason.getId());
         if(Objects.isNull(approveTempl)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃鎵规祦,璇疯仈绯荤鐞嗗憳");
         }
-
-        if(Constants.equalsInteger(platformBooksApplyDTO.getUserId(),platformBooksApplyDTO.getDriverId())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浜哄憳淇℃伅鍖归厤閿欒");
-        }
-        if(Objects.nonNull(platformReason.getLimitNum())&&platformReason.getLimitNum().compareTo(platformBooksApplyDTO.getTotalNum())>0){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瓒呭嚭鍏ュ洯鐢宠绾胯川閲�");
+        if(!Constants.equalsInteger(approveTempl.getIsdeleted(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴佸凡鍋滅敤,璇疯仈绯荤鐞嗗憳");
         }
         PlatformBooks platformBooks = new PlatformBooks();
         BeanUtils.copyProperties(platformBooksApplyDTO,platformBooks);
@@ -252,9 +244,45 @@
         platformBooksMapper.insert(platformBooks);
 
         //鍒涘缓瀹℃壒娴佷俊鎭�
-        approveService.createApproveFlow(5,platformBooks.getId(),platformBooks.getDriverId());
+        approveService.createApproveForPlatfrom(platformReason.getApproveTemplId(),platformBooks.getId(),platformBooks.getDriverId());
         return platformBooks.getId();
     }
+
+
+
+//    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public Integer edit(PlatformBooksApplyDTO platformBooksApplyDTO){
+        if(Objects.isNull(platformBooksApplyDTO)
+                || Objects.isNull(platformBooksApplyDTO.getId())
+                || StringUtils.isBlank(platformBooksApplyDTO.getContractNum())
+                || Objects.isNull(platformBooksApplyDTO.getArriveDate())
+                || Objects.isNull(platformBooksApplyDTO.getInType())
+                || Objects.isNull(platformBooksApplyDTO.getTotalNum())
+                || StringUtils.isBlank(platformBooksApplyDTO.getCarCodeFront())
+                || StringUtils.isBlank(platformBooksApplyDTO.getCarCodeBack())
+                || Objects.isNull(platformBooksApplyDTO.getDriverId())
+                || StringUtils.isBlank(platformBooksApplyDTO.getDriverPhone())
+                || StringUtils.isBlank(platformBooksApplyDTO.getDriverName())
+                || StringUtils.isBlank(platformBooksApplyDTO.getTransportImg())
+                || Objects.isNull(platformBooksApplyDTO.getReasonId())
+                || StringUtils.isBlank(platformBooksApplyDTO.getInReason())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        PlatformBooks platformBooks = platformBooksMapper.selectById(platformBooksApplyDTO.getId());
+        if(Objects.isNull(platformBooks)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(platformBooks.getStatus(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓氬姟鐘舵�佸凡娴佽浆");
+        }
+        BeanUtils.copyProperties(platformBooksApplyDTO,platformBooks);
+        platformBooks.setEditDate(new Date());
+        platformBooksMapper.insert(platformBooks);
+        return platformBooks.getId();
+    }
+
 
 
     @Override
@@ -263,8 +291,12 @@
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌棰勭害璁板綍");
         }
+        String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                systemDictDataBiz.queryByCode(Constants.FTP,Constants.PLATFORM).getCode();
+        model.setPrefixUrl(prefixUrl);
+
         ApproveDataVO approveDataVO = approveService.arrangeApprovedData(id,
-               5,
+               6,
                 memberId);
         model.setApproveDateVO(approveDataVO);
         List<Approve> approveList = approveDataVO.getApproveList();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
index 7dcc045..05ad10f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
@@ -6,19 +6,24 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.PlatformGroupMapper;
 import com.doumee.dao.business.PlatformShowParamMapper;
+import com.doumee.dao.business.join.PlatformJobJoinMapper;
 import com.doumee.dao.business.join.PlatformJoinMapper;
 import com.doumee.dao.business.model.Platform;
 import com.doumee.dao.business.model.PlatformGroup;
+import com.doumee.dao.business.model.PlatformJob;
 import com.doumee.dao.business.model.PlatformShowParam;
 import com.doumee.service.business.PlatformGroupService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.PlatformJobService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.java.Log;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -44,6 +49,9 @@
 
     @Autowired
     private PlatformShowParamMapper platformShowParamMapper;
+
+    @Autowired
+    private PlatformJobJoinMapper platformJobJoinMapper;
 
     @Override
     public Integer create(PlatformGroup platformGroup) {
@@ -206,7 +214,6 @@
                         .selectAll(Platform.class)
                         .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ")
                         .eq(Platform::getIsdeleted, Constants.ZERO)
-                        .eq(Platform::getStatus, Constants.ZERO)
                         .eq(Objects.nonNull(queryType)&&!Constants.equalsInteger(queryType,Constants.ZERO),Platform::getStatus,Constants.ZERO)
         );
         //澶勭悊鎴戠殑鏈堝彴淇℃伅 鏄惁閰嶇疆闅愯棌
@@ -240,4 +247,7 @@
     }
 
 
+
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
index d8e0284..2544ffb 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -4,6 +4,7 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
@@ -12,6 +13,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.PlatformJobJoinMapper;
+import com.doumee.dao.business.join.PlatformJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.web.reqeust.JobDetailDTO;
 import com.doumee.dao.web.reqeust.JobOperateDTO;
@@ -33,6 +35,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -58,8 +61,9 @@
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
+
     @Autowired
-    private PlatformMapper platformMapper;
+    private PlatformJoinMapper platformJoinMapper;
 
     @Autowired
     private PlatformLogMapper platformLogMapper;
@@ -69,6 +73,12 @@
 
     @Autowired
     private PlatformWmsDetailMapper platformWmsDetailMapper;
+
+    @Autowired
+    private PlatformGroupMapper platformGroupMapper;
+
+    @Autowired
+    private PlatformShowParamMapper platformShowParamMapper;
 
 
     @Override
@@ -131,9 +141,13 @@
     @Override
     public PageData<PlatformJob> findPage(PageWrap<PlatformJob> pageWrap) {
         IPage<PlatformJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<PlatformJob> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<PlatformJob> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        queryWrapper.lambda()
+        queryWrapper
+                .selectAll(PlatformJob.class)
+                .selectAs(Platform::getName,PlatformJob::getPlatformName)
+                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
+                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                 .eq(pageWrap.getModel().getId() != null, PlatformJob::getId, pageWrap.getModel().getId())
                 .eq(pageWrap.getModel().getCreator() != null, PlatformJob::getCreator, pageWrap.getModel().getCreator())
                 .ge(pageWrap.getModel().getCreateDate() != null, PlatformJob::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
@@ -216,13 +230,18 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-
-        PageData<PlatformJob> pageData = PageData.from(platformJobMapper.selectPage(page, queryWrapper));
-        pageData.getRecords().forEach(i->{
+       IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper);
+        platformJobIPage.getRecords().forEach(i->{
             i.dealTime();
             this.getWmsJobData(i);
         });
-        return pageData;
+        return PageData.from(platformJobIPage);
+//        PageData<PlatformJob> pageData = PageData.from(platformJobMapper.selectPage(page, queryWrapper));
+//        pageData.getRecords().forEach(i->{
+//            i.dealTime();
+//            this.getWmsJobData(i);
+//        });
+//        return pageData;
     }
 
 
@@ -250,12 +269,60 @@
                 platformWmsJob.setPlatformWmsDetailList(platformWmsDetailList);
                 platformJob.setPlatformWmsJob(platformWmsJob);
             }
-        }
-
-
+        } 
     }
 
 
+    public void queryWaitNum(PlatformJob platformJob){
+        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){
+            //鏌ヨ鍓嶆柟鎺掗槦鏁伴噺
+            List<PlatformJob> lineUpNum =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda()
+                    .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                    .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()
+                            ,Constants.PlatformJobStatus.IN_WAIT.getKey()
+                            ,Constants.PlatformJobStatus.TRANSFERING.getKey())
+                    .gt(PlatformJob::getSignDate,platformJob.getSignDate())
+                    .eq(PlatformJob::getPlatformGroupId,platformJob.getPlatformGroupId())
+                    .like(PlatformJob::getArriveDate,DateUtil.getDate(platformJob.getArriveDate(),"yyyy-MM-dd")));
+            platformJob.setLineUpNum(lineUpNum.size());
+            BigDecimal sumWorkRate = platformJob.getTotalNum();
+            for (PlatformJob linePlatformJob:lineUpNum) {
+                this.getWmsJobData(linePlatformJob);
+                sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum());
+            }
+            //璁$畻棰勮绛夊緟鏃堕棿
+            List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda().eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId()));
+            BigDecimal workRate = platformList.stream().map(m->m.getWorkRate()).reduce(BigDecimal.ZERO,BigDecimal::add);
+            if(sumWorkRate.compareTo(BigDecimal.ZERO) == Constants.ZERO|| workRate.compareTo(BigDecimal.ZERO)  == Constants.ZERO ){
+                BigDecimal sumMinute = sumWorkRate.divide(workRate,1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L));
+                Integer sumMinuteInteger = sumMinute.intValue();
+                Integer hours = sumMinuteInteger/60;
+                Integer minus = sumMinuteInteger%60;
+                String  waitTime = "棰勮绛夊緟锛�";
+                if(!Constants.equalsInteger(hours,Constants.ZERO)){
+                    waitTime = waitTime + hours + "灏忔椂";
+                }
+                if(!Constants.equalsInteger(hours,Constants.ZERO)){
+                    waitTime = waitTime + minus + "鍒嗛挓";
+                }
+                platformJob.setWaitTime(waitTime);
+            }
+        }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){
+            //鏌ヨ鏈�鍚庡紑濮嬩换鍔$殑鏈堝彴璁板綍  鏃ュ織琛�  鍥犱负瀛樺湪寮傚父鎸傝捣 杞Щ 绛夐棶棰�
+            PlatformLog platformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda()
+                    .eq(PlatformLog::getJobId,platformJob.getId())
+                    .eq(PlatformLog::getObjType,Constants.PlatformJobStatus.WORKING.getKey())
+                    .orderByDesc(PlatformLog::getCreateDate)
+                    .last(" limit 1")
+            );
+            if(Objects.nonNull(platformLog)){
+                BigDecimal sumMinute = platformJob.getTotalNum().divide(platformJob.getWorkRate(),1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L));
+                platformJob.setFinishTimeStr(DateUtil.DateToStr(DateUtil.afterMinutesDate(platformLog.getCreateDate(),sumMinute.intValue()),"HH:mm"));
+            }
+        }
+    }
+    
+    
     @Override
     public long count(PlatformJob platformJob) {
         QueryWrapper<PlatformJob> wrapper = new QueryWrapper<>(platformJob);
@@ -264,17 +331,34 @@
 
     //TODO
     @Override
-    public DriverHomeVO getDriverHome(Integer memberId){
+    public DriverHomeVO getDriverHome(LoginUserInfo loginUserInfo){
         DriverHomeVO driverHomeVO = new DriverHomeVO();
         //TODO 杞挱鍥�
 
-        List<PlatformJob> platformJobList =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>()
-                .lambda()
-                .eq(PlatformJob::getDriverId,memberId)
-//                        .like(PlatformJob::get)
-                .orderByDesc(PlatformJob::getId));
+        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
+                .selectAll(PlatformJob.class)
+                .selectAs(Platform::getName,PlatformJob::getPlatformName)
+                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
+                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
+                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile())
+                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
+                .orderByDesc(PlatformJob::getId)
+        );
+        for (PlatformJob platformJob:platformJobList) {
+            //澶勭悊WSM鏁伴噺
+            this.getWmsJobData(platformJob);
+            //鏌ヨ鍓嶆柟鎺掗槦鏁伴噺
+            this.queryWaitNum(platformJob);
+        }
+
+
         driverHomeVO.setPlatformJobList(platformJobList);
 
+        // 鍥尯瀵艰鍥�  鍥剧墖
+        driverHomeVO.setReservationMap(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_GUIDEMAP).getCode());
+        // 棰勭害鎸囧崡 鏂囨湰
+        driverHomeVO.setBookingTips(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_BOOKING_TIPS).getCode());
 
         return driverHomeVO;
     }
@@ -369,18 +453,12 @@
             }
         }else if( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())
                 || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey())
-        ){//鏌ヨ鎺掗槦鎯呭喌
-            Long lineUpNum =  platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
-                    .eq(PlatformJob::getIsdeleted,Constants.ZERO)
-                    .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()
-                            ,Constants.PlatformJobStatus.IN_WAIT.getKey()
-                            ,Constants.PlatformJobStatus.TRANSFERING.getKey())
-                    .gt(PlatformJob::getSignDate,platformJob.getSignDate())
-                    .like(PlatformJob::getArriveDate,DateUtil.getDate(platformJob.getArriveDate(),"yyyy-MM-dd")));
-            platformJob.setLineUpNum(lineUpNum);
+        ){
+            //鏌ヨ鍓嶆柟鎺掗槦鏁伴噺
+            this.queryWaitNum(platformJob);
         }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){
             //浣滀笟鏈堝彴淇℃伅
-            Platform platform = platformMapper.selectById(platformJob.getPlatformId());
+            Platform platform = platformJoinMapper.selectById(platformJob.getPlatformId());
             if(Objects.nonNull(platform)){
                 platformJob.setPlatformName(platform.getName());
             }
@@ -417,7 +495,7 @@
         );
         //鑾峰彇鎵�鏈夋湀鍙扮粍
         List<Integer> platformIdList = platformJobList.stream().map(m->m.getPlatformGroupId()).collect(Collectors.toList());
-        List<Platform> platformList = platformMapper.selectList(new QueryWrapper<Platform>().lambda()
+        List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda()
                 .eq(Platform::getIsdeleted,Constants.ZERO)
                 .in(Platform::getId,platformIdList));
 
@@ -841,8 +919,79 @@
     }
 
 
+    @Override
+    public  List<Platform> getPlatformList(Integer groupId, LoginUserInfo loginUserInfo){
+        //鏌ヨ鏈堝彴缁勪笅鎵�鏈夋湀鍙�
+        List<Platform> allPlatformList = platformJoinMapper.selectJoinList(Platform.class,
+                new MPJLambdaWrapper<Platform>()
+                        .selectAll(Platform.class)
+                        .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ")
+                        .eq(Platform::getIsdeleted, Constants.ZERO)
+                        .eq(Platform::getStatus,Constants.ZERO)
+                        .eq(Platform::getGroupId,groupId)
+        );
+        this.getPlatformShow(allPlatformList,loginUserInfo);
+        for (Platform platform:allPlatformList) {
+            this.getJobByPlatform(platform,loginUserInfo);
+        }
+        return allPlatformList;
+    }
+
+    /**
+     * 鏌ヨ鏈堝彴鐨勫紑鍚儏鍐�
+     * @param allPlatformList
+     * @param loginUserInfo
+     */
+    public void getPlatformShow(List<Platform> allPlatformList , LoginUserInfo loginUserInfo){
+        //澶勭悊鎴戠殑鏈堝彴淇℃伅 鏄惁閰嶇疆闅愯棌
+        List<PlatformShowParam> platformShowParamList = platformShowParamMapper.selectList(new QueryWrapper<PlatformShowParam>()
+                .lambda()
+                .eq(PlatformShowParam::getIsdeleted, Constants.ZERO)
+                .eq(PlatformShowParam::getMemberId,loginUserInfo.getMemberId())
+        );
+        //濡傛灉鏈厤缃鏁版嵁 鍒欏叏閮ㄦ樉绀�
+        if(CollectionUtils.isEmpty(platformShowParamList)){
+            for (Platform platform:allPlatformList) {
+                platform.setShowConfig(true);
+            }
+        }else{
+            //鏍规嵁閰嶇疆鏄剧ず鏁版嵁
+            for (PlatformShowParam platformShowParam:platformShowParamList) {
+                for (Platform platform:allPlatformList) {
+                    if(Constants.equalsInteger(platform.getId(),platformShowParam.getPlatformId())){
+                        platform.setShowConfig(true);
+                        break;
+                    }
+                }
+            }
+        }
+    }
 
 
-
+    /**
+     * 鑾峰彇鏈堝彴涓嬬殑浠诲姟鍒楄〃
+     * @param platform
+     * @param loginUserInfo
+     */
+    public void getJobByPlatform(Platform platform,LoginUserInfo loginUserInfo){
+        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
+                .selectAll(PlatformJob.class)
+                .selectAs(Platform::getName,PlatformJob::getPlatformName)
+                .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
+                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
+                .eq(PlatformJob::getPlatformId,platform.getId())
+                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile())
+                .like(PlatformJob::getArriveDate, DateUtil.getCurrDate())
+                .orderByDesc(PlatformJob::getId)
+        );
+        for (PlatformJob platformJob:platformJobList) {
+            //澶勭悊WSM鏁伴噺
+            this.getWmsJobData(platformJob);
+            //鏌ヨ鍓嶆柟鎺掗槦鏁伴噺
+            this.queryWaitNum(platformJob);
+        }
+        platform.setWorkJobList(platformJobList);
+    }
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java
index aaa5b1e..7500514 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformReasonServiceImpl.java
@@ -106,6 +106,7 @@
     @Override
     public List<PlatformReason> findList(PlatformReason platformReason) {
         QueryWrapper<PlatformReason> wrapper = new QueryWrapper<>(platformReason);
+        wrapper.eq("isdeleted",Constants.ZERO);
         return platformReasonMapper.selectList(wrapper);
     }
   
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
new file mode 100644
index 0000000..202d2b0
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
@@ -0,0 +1,210 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.LoginUserModel;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.PlatformWaterGasMapper;
+import com.doumee.dao.business.model.PlatformReason;
+import com.doumee.dao.business.model.PlatformWaterGas;
+import com.doumee.service.business.PlatformWaterGasService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.C;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鏈堝彴_鐢ㄦ按鐢ㄦ皵淇℃伅璁板綍琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/08/26 16:22
+ */
+@Service
+public class PlatformWaterGasServiceImpl implements PlatformWaterGasService {
+
+    @Autowired
+    private PlatformWaterGasMapper platformWaterGasMapper;
+
+    @Override
+    public Integer create(PlatformWaterGas platformWaterGas) {
+        if(platformWaterGas.getTimeInfo() ==null || platformWaterGas.getNum()==null
+        ||(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO) && StringUtils.isBlank(platformWaterGas.getCarCode()))){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ュ勾鏈堟暟鎹凡瀛樺湪锛岃鍕块噸鏂板綍鍏ワ紝鍙互灏濊瘯鎼滅储鍚庤繘琛屾暟鎹慨鏀癸紒");
+        }
+        if( platformWaterGasMapper.selectCount(new QueryWrapper<PlatformWaterGas>().lambda()
+                .eq(PlatformWaterGas::getIsdeleted, Constants.ZERO)
+                .apply("to_days(time_info) = to_days('"+ DateUtil.getPlusTime2(platformWaterGas.getTimeInfo()) +"')")
+                .eq(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO),PlatformWaterGas::getCarCode,platformWaterGas.getCarCode()))>0){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ュ勾鏈堟暟鎹凡瀛樺湪锛岃鍕块噸鏂板綍鍏ワ紝鍙互灏濊瘯鎼滅储鍚庤繘琛屾暟鎹慨鏀癸紒");
+        }
+        platformWaterGas.setIsdeleted(Constants.ZERO);
+        platformWaterGas.setType(Constants.formatIntegerNum(platformWaterGas.getType()));
+        platformWaterGas.setCreator(platformWaterGas.getLoginUserInfo().getId());
+        platformWaterGas.setCreateDate(new Date());
+        platformWaterGas.setEditDate(platformWaterGas.getCreateDate());
+        platformWaterGas.setEditor(platformWaterGas.getCreator());
+        platformWaterGasMapper.insert(platformWaterGas);
+        return platformWaterGas.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+
+        platformWaterGasMapper.deleteById(id);
+    }
+    @Override
+    public void deleteById(Integer id, LoginUserInfo model) {
+        PlatformWaterGas param = new PlatformWaterGas();
+        param.setId(id);
+        param.setIsdeleted(Constants.ONE);
+        param.setEditor(model.getId());
+        param.setEditDate(new Date());
+        platformWaterGasMapper.updateById(param);
+    }
+
+    @Override
+    public void delete(PlatformWaterGas platformWaterGas) {
+        UpdateWrapper<PlatformWaterGas> deleteWrapper = new UpdateWrapper<>(platformWaterGas);
+        platformWaterGasMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        platformWaterGasMapper.deleteBatchIds(ids);
+    }
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo model) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        for(Integer id : ids){
+            deleteById(id,model);
+        }
+    }
+
+    @Override
+    public void updateById(PlatformWaterGas platformWaterGas) {
+        if(platformWaterGas.getTimeInfo() ==null
+                || platformWaterGas.getId()==null
+                || platformWaterGas.getNum()==null
+                ||(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO) && StringUtils.isBlank(platformWaterGas.getCarCode()))){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ュ勾鏈堟暟鎹凡瀛樺湪锛岃鍕块噸鏂板綍鍏ワ紝鍙互灏濊瘯鎼滅储鍚庤繘琛屾暟鎹慨鏀癸紒");
+        }
+        if( platformWaterGasMapper.selectCount(new QueryWrapper<PlatformWaterGas>().lambda()
+                .eq(PlatformWaterGas::getIsdeleted, Constants.ZERO)
+                .ne(PlatformWaterGas::getId,platformWaterGas.getId())
+                .apply("to_days(time_info) = to_days('"+ DateUtil.getPlusTime2(platformWaterGas.getTimeInfo()) +"')")
+                .eq(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO),PlatformWaterGas::getCarCode,platformWaterGas.getCarCode()))>0){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ュ勾鏈堟暟鎹凡瀛樺湪锛岃鍕块噸鏂板綍鍏ワ紝鍙互灏濊瘯鎼滅储鍚庤繘琛屾暟鎹慨鏀癸紒");
+        }
+
+        platformWaterGas.setEditDate(new Date());
+        platformWaterGas.setEditor(platformWaterGas.getLoginUserInfo().getId());
+        platformWaterGasMapper.updateById(platformWaterGas);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<PlatformWaterGas> platformWaterGass) {
+        if (CollectionUtils.isEmpty(platformWaterGass)) {
+            return;
+        }
+        for (PlatformWaterGas platformWaterGas: platformWaterGass) {
+            this.updateById(platformWaterGas);
+        }
+    }
+
+    @Override
+    public PlatformWaterGas findById(Integer id) {
+        return platformWaterGasMapper.selectById(id);
+    }
+
+    @Override
+    public PlatformWaterGas findOne(PlatformWaterGas platformWaterGas) {
+        QueryWrapper<PlatformWaterGas> wrapper = new QueryWrapper<>(platformWaterGas);
+        return platformWaterGasMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<PlatformWaterGas> findList(PlatformWaterGas platformWaterGas) {
+        QueryWrapper<PlatformWaterGas> wrapper = new QueryWrapper<>(platformWaterGas);
+        return platformWaterGasMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<PlatformWaterGas> findPage(PageWrap<PlatformWaterGas> pageWrap) {
+        IPage<PlatformWaterGas> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<PlatformWaterGas> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(PlatformWaterGas::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(PlatformWaterGas::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(PlatformWaterGas::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(PlatformWaterGas::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getTimeInfo() != null) {
+            queryWrapper.lambda().ge(PlatformWaterGas::getTimeInfo, Utils.Date.getStart(pageWrap.getModel().getTimeInfo()));
+            queryWrapper.lambda().le(PlatformWaterGas::getTimeInfo, Utils.Date.getEnd(pageWrap.getModel().getTimeInfo()));
+        }
+        if (pageWrap.getModel().getSortnum() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getSortnum, pageWrap.getModel().getSortnum());
+        }
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getType, pageWrap.getModel().getType());
+        }
+        if (pageWrap.getModel().getNum() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getNum, pageWrap.getModel().getNum());
+        }
+        if (pageWrap.getModel().getContent() != null) {
+            queryWrapper.lambda().eq(PlatformWaterGas::getContent, pageWrap.getModel().getContent());
+        }
+        if (pageWrap.getModel().getCarCode() != null) {
+            queryWrapper.lambda().like(PlatformWaterGas::getCarCode, pageWrap.getModel().getCarCode());
+        }
+        if (pageWrap.getModel().getStartTime() != null) {
+            queryWrapper.lambda().ge(PlatformWaterGas::getTimeInfo, pageWrap.getModel().getStartTime());
+        }
+        if (pageWrap.getModel().getEndTime() != null) {
+            queryWrapper.lambda().le(PlatformWaterGas::getTimeInfo,  pageWrap.getModel().getEndTime());
+        }
+        queryWrapper.lambda().orderByDesc(PlatformWaterGas::getTimeInfo ,PlatformWaterGas::getCarCode);
+        return PageData.from(platformWaterGasMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(PlatformWaterGas platformWaterGas) {
+        QueryWrapper<PlatformWaterGas> wrapper = new QueryWrapper<>(platformWaterGas);
+        return platformWaterGasMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
index e34a01b..49d54a6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
@@ -139,4 +139,8 @@
         QueryWrapper<VisitReason> wrapper = new QueryWrapper<>(visitReason);
         return visitReasonMapper.selectCount(wrapper);
     }
+
+
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 6cb1dbd..dee709a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -47,6 +47,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
@@ -1386,6 +1387,40 @@
                 .eq(Retention::getType,Constants.memberType.visitor)
                 .eq(Retention::getMemberId,visits.getMemberId()));
     }
+    @Override
+    public  void visitResend(Integer visitId) {
+        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(Visits.class);
+        queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName)
+                .selectAs(Member::getHkId,Visits::getReceptMemberHkId)
+                .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId)
+                .eq(Visits::getId,visitId)//鏈悓姝ュ埌娴峰悍
+                .last("limit 1");
+        Visits visits   = visitsMapper.selectJoinOne(Visits.class,queryWrapper);
+        if(Objects.isNull(visits)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!visits.getStatus().equals(Constants.VisitStatus.xfFail)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁垮璁板綍鐘舵�侀敊璇紝璇峰埛鏂伴噸璇�");
+        }
+        List<DeviceRole> roleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+                .eq(DeviceRole::getType, Constants.ONE));
+        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+
+      HkSyncVisitServiceImpl.getUpdateModelByResponseIccm(visits,new Date(),roleList,path);
+      if(Constants.equalsInteger(visits.getStatus(),Constants.VisitStatus.xfSuccess)){
+          //濡傛灉涓嬪彂鎴愬姛锛�
+          visitsMapper.updateById(visits);
+          if(Objects.isNull(visits.getParentId())){
+              wxPlatNotice.sendVisitAuditTemplateNotice(visits,
+                      systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
+                      systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
+          }
+      }else{
+          throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"閲嶆柊涓嬪彂浼氬け璐ワ紒");
+      }
+    }
 
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java
index de74b82..db32dd4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java
@@ -79,7 +79,7 @@
                 String st = result.getData().getST();
                 try {
                     String serviceUrl =   systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_NGINX_URL).getCode()
-                            +(HKConstants.InterfacePath.tokenLoginUrl.replace("${st}", st).replace("${service}", URLEncoder.encode(url, "UTF-8")));
+                            +(HKConstants.InterfacePath.tokenLoginUrl[0].replace("${st}", st).replace("${service}", URLEncoder.encode(url, "UTF-8")));
 //                    redisTemplate.opsForValue().set(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel(),serviceUrl,1, TimeUnit.HOURS);
                     return serviceUrl;
                 }catch (Exception e){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
index 143183d..9c4fba9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -421,7 +421,7 @@
         c.setHkStatus(Constants.ONE);
         c.setHkDate(date);
     }
-    private void getUpdateModelByResponseIccm(  Visits c,Date date, List<DeviceRole> roleList,String path ) {
+    public static void getUpdateModelByResponseIccm(  Visits c,Date date, List<DeviceRole> roleList,String path ) {
         String code = null;
         String id = null;
         String qrcode = null;
@@ -511,7 +511,7 @@
         request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c));
         return  request;
     }
-    private IccmAppointmentMDJRequest getHkMDJRequestParamIccm(Visits c,List<DeviceRole> roleList,String path) {
+    public static IccmAppointmentMDJRequest getHkMDJRequestParamIccm(Visits c,List<DeviceRole> roleList,String path) {
         IccmAppointmentMDJRequest request = new IccmAppointmentMDJRequest();
         IccmAppointmentVistorRequest info =getRequestInfoByVisitIccm(c,path);
         if(info == null ){
@@ -521,7 +521,7 @@
         request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
         request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
         request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮�
-        if(StringUtils.isNotBlank(c.getReason())){
+       /* if(StringUtils.isNotBlank(c.getReason())){
             char[] charArray = c.getReason().toCharArray();
             int length = charArray.length;
             if(length>32){
@@ -529,7 +529,7 @@
             }else{
                 request.setVisitPurpose(c.getReason());
             }
-        }
+        }*/
         request.setVisitorInfo(info);
         request.setVisitorPermissionSet(getVisitPermissonRequestIccm(roleList,c));
         return  request;
@@ -555,7 +555,7 @@
         }
         return  p;
     }
-    private IccmPermissionSetRequest getVisitPermissonRequestIccm(List<DeviceRole> roleList, Visits c) {
+    public static IccmPermissionSetRequest getVisitPermissonRequestIccm(List<DeviceRole> roleList, Visits c) {
         IccmPermissionSetRequest p = new IccmPermissionSetRequest();
         //鑾峰彇鏉冮檺缁勯泦鍚�
         String[] roles = getHkRoles(c.getDoors(),roleList);
@@ -598,7 +598,7 @@
         request.setVisitorInfoList(infolist);
         return  request;
     }
-    private IccmAppointmentRequest getHkRequestParaIccm(Visits c,List<DeviceRole> roleList,String path ) {
+    public static  IccmAppointmentRequest getHkRequestParaIccm(Visits c,List<DeviceRole> roleList,String path ) {
         IccmAppointmentRequest request = new IccmAppointmentRequest();
         //鐢宠浜轰俊鎭�
         IccmAppointmentVistorRequest info =getRequestInfoByVisitIccm(c,path);
@@ -606,11 +606,11 @@
             //浜鸿劯涓虹┖锛屼笉鑳借繘琛屾帹閫�
             return  null;
         }
-        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
-        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
+        request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
+        request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
         request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮�
 
-        if(StringUtils.isNotBlank(c.getReason())){
+      /*  if(StringUtils.isNotBlank(c.getReason())){
             char[] charArray = c.getReason().toCharArray();
             int length = charArray.length;
             if(length>32){
@@ -618,7 +618,7 @@
             }else{
                 request.setVisitPurpose(c.getReason());
             }
-        }
+        }*/
         //鑾峰彇鏉冮檺缁勯泦鍚�
         request.setVisitorPermissionSet(getVisitPermissonRequestIccm(roleList,c));
         List<IccmAppointmentVistorRequest> infolist = new ArrayList<>();
@@ -673,7 +673,7 @@
 
         return info;
     }
-    private IccmAppointmentVistorRequest getRequestInfoByVisitIccm(Visits c,String path) {
+    public static IccmAppointmentVistorRequest getRequestInfoByVisitIccm(Visits c,String path) {
         IccmAppointmentVistorRequest info = new IccmAppointmentVistorRequest();
         //浜鸿劯鏁版嵁
         if(StringUtils.isBlank(c.getName())
@@ -720,7 +720,7 @@
         return info;
     }
 
-    private String[] getHkRoles(String doors, List<DeviceRole> roleList) {
+    public static String[] getHkRoles(String doors, List<DeviceRole> roleList) {
         if(StringUtils.isBlank(doors) || roleList.size()==0|| roleList.size()==0){
             return null;
         }

--
Gitblit v1.9.3