From 1a3a322d6f55d0f812001984d41010524cda69e0 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 06 十二月 2024 15:29:37 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java                          |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKCarOpenService.java                      |  236 +++
 server/system_timer/src/main/resources/application.yml                                                                 |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/GetTodoListResponse.java       |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java                       |   10 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java                                 |    4 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/UserRel.java                                |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java                    |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java               |    5 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java                               |   17 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsBaseResponse.java                    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java                      |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java             |   17 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/GetTodoListRequest.java        |    8 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java                          |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java                        |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsContractVO.java             |   30 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java                 |   71 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                    |  109 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java                            |    1 
 server/visits/dmvisit_admin/src/main/resources/application.yml                                                         |    2 
 server/README.md                                                                                                       |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpTool.java                                           |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java                                |    6 
 server/system_service/src/main/java/com/doumee/biz/system/SystemDictDataBiz.java                                       |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsJobAndContractVO.java       |   34 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CarsJobAndContractDTO.java                      |   19 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java              |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java         |    5 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                               |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardNewVO.java   |   93 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsGpsResponse.java           |   25 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardJobCenterDataVO.java       |   25 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceDetaisResponse.java  |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncNoticeServiceImpl.java       |  163 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java                   |   83 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsResponse.java                   |   17 
 server/system_gateway/src/main/resources/bootstrap-pro.yml                                                             |    1 
 server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java                                           |    4 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java                         |   34 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformLogMapper.java                             |    3 
 admin/src/views/business/areas.vue                                                                                     |  160 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsJob.java                          |   11 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmEventDataVO.java           |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardCarsListVO.java            |   30 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWmsJobMapper.java                          |    3 
 server/system_gateway/src/main/resources/logback-spring.xml                                                            |   61 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConstants.java                             |    6 
 server/meeting/meeting_service/src/main/java/com/doumee/core/wx/SendWxMessage.java                                     |    8 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java                         |    5 
 admin/src/api/workbench/index.js                                                                                       |    8 
 admin/src/views/task/index.vue                                                                                         |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java                    |   50 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java                                 |   22 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsGpsRequest.java             |   18 
 server/meeting/meeting_admin/src/main/resources/application.yml                                                        |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java                           |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/ErpVisitDTO.java                                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java              |   54 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardStockListVO.java           |   30 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java                |   31 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java               |  107 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsPageResponse.java               |   18 
 admin/src/api/business/areas.js                                                                                        |   43 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java                             |    5 
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java                              |   18 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java                                            |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsDetail.java                       |    8 
 server/visits/admin_timer/src/main/java/com/doumee/api/HkNoticeTimerController.java                                    |   40 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java                             |    2 
 admin/src/components/business/OperaAreasWindow.vue                                                                     |   94 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java                 |   89 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java         |    5 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/UtilService.java                              |    4 
 server/system_gateway/src/main/resources/bootstrap.yml                                                                 |    2 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                                |  100 +
 admin/src/views/index.vue                                                                                              |  195 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java               |  468 ++++++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java                            |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java        |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java                        |   18 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java                           |    2 
 server/visits/admin_timer/src/main/resources/application.yml                                                           |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceResponse.java        |   25 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsDeviceRequest.java          |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java                         |    1 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java                      |  150 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/RegionTreeVO.java               |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java                               |    4 
 server/meeting/meeting_service/src/main/java/com/doumee/core/wx/WxPlatNotice.java                                      |  166 ++
 server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java                                     |   29 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java                             |   15 
 server/visits/openapi/src/main/resources/application.yml                                                               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java                                |  643 ++++++++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java   |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsInventoryJsonResponse.java           |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceChannelResponse.java |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java                             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/request/WmsBaseRequest.java                      |    3 
 server/visits/dmvisit_screen/src/main/resources/application.yml                                                        |    2 
 server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java                                      |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java        |    5 
 server/system_gateway/src/main/resources/application.yml                                                               |    2 
 104 files changed, 3,556 insertions(+), 420 deletions(-)

diff --git a/admin/src/api/business/areas.js b/admin/src/api/business/areas.js
new file mode 100644
index 0000000..803018f
--- /dev/null
+++ b/admin/src/api/business/areas.js
@@ -0,0 +1,43 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  // return request.post('/visitsAdmin/cloudService/business/areas/treeList', data, {
+  //   trim: true
+  // })
+  return request.post('/visitsAdmin/cloudService/business/areas/page', data, {
+    trim: true
+  })
+}
+export function listByParentId (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/listByParentId', data)
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/updateById', data)
+}
+
+// 鏍戝舰
+export function treeList (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/listByParentId', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/areas/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/visitsAdmin/cloudService/business/areas/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/admin/src/api/workbench/index.js b/admin/src/api/workbench/index.js
index e6dcdcb..2340d64 100644
--- a/admin/src/api/workbench/index.js
+++ b/admin/src/api/workbench/index.js
@@ -2,7 +2,7 @@
 
 // 椤堕儴瀵艰埅
 export function getAppHeaderNav (data) {
-  return request.get('/visitsAdmin/cloudService/business/hksync/getHkMenuLink?type='+ data)
+  return request.post('/visitsAdmin/cloudService/business/hksync/getHkMenuLink/'+data+'?time='+Math.random())
 }
 // 涓讳綋鏁版嵁
 export function getWorkbenchBody (data) {
@@ -24,9 +24,13 @@
 export function getWorkbenchTaskHead (data) {
   return request.post('/visitsAdmin/cloudService/business/staging/taskCenterHeadPC', data)
 }
+// 鍚屾娴峰悍浠e姙鏁版嵁
+export function syncHkNotice (data) {
+  return request.post('/visitsAdmin/cloudService/business/hksync/notice/getList', data)
+}
 // pc宸ヤ綔鍙�
 export function getWorkbenchData (data) {
   return request.get('/visitsAdmin/cloudService/business/staging/pCWorkPlatformData', {
     params: {...data  }
   })
-}
\ No newline at end of file
+}
diff --git a/admin/src/components/business/OperaAreasWindow.vue b/admin/src/components/business/OperaAreasWindow.vue
new file mode 100644
index 0000000..fea3c84
--- /dev/null
+++ b/admin/src/components/business/OperaAreasWindow.vue
@@ -0,0 +1,94 @@
+<template>
+  <GlobalAlertWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" label-width="100px" label-suffix="锛�" :rules="rules">
+      <el-form-item :label="form.type==0?'甯傚悕绉�':'鍘垮尯鍚嶇О'" prop="name">
+        <el-input v-model="form.name" :placeholder="form.type==0?'杈撳叆甯傚悕绉�':'杈撳叆鍘垮尯鍚嶇О'" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalAlertWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+export default {
+  name: 'OperaAreasWindow',
+  extends: BaseOpera,
+  components: { GlobalAlertWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        parentId: null,
+        name: null,
+        sortnum: '0',
+        type: '',
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/areas',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    // 纭鏂板缓
+    __confirmCreate () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.create(this.form)
+          .then(() => {
+            this.visible = false
+            this.$message.success('鏂板缓鎴愬姛')
+            this.$emit('success', this.form.parentId)
+          })
+          .catch(e => {
+            this.$message.error(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
+    // 纭淇敼
+    __confirmEdit () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.updateById(this.form)
+          .then(() => {
+            this.visible = false
+            this.$message.success('淇敼鎴愬姛')
+            this.$emit('success', this.form.parentId)
+          })
+          .catch(e => {
+            this.$message.error(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    }
+  },
+}
+</script>
diff --git a/admin/src/views/business/areas.vue b/admin/src/views/business/areas.vue
new file mode 100644
index 0000000..3d05d52
--- /dev/null
+++ b/admin/src/views/business/areas.vue
@@ -0,0 +1,160 @@
+<template>
+  <TableLayout :permissions="['business:areas:query']">
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <el-table
+        ref="table"
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        lazy
+        :load="load"
+        :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }"
+        row-key="id"
+        stripe
+        border
+        :header-row-class-name="'table-header'"
+        class="doumee-element-table"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column prop="name" label="鍦板尯鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�" align="center" min-width="140px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:areas:update', 'business:areas:create', 'business:areas:delete'])"
+          label="鎿嶄綔"
+          align="center"
+          min-width="220"
+          fixed="right"
+        >
+          <template slot-scope="{ row }">
+            <el-button type="text" @click="edit(row)" v-permissions="['business:areas:update']">缂栬緫</el-button>
+            <el-button v-if="row.type!=2" type="text" @click="createChild(row)" v-permissions="['business:areas:create']">鏂板缓{{ row.type==0 ? '甯�' : '鍖哄幙' }}</el-button>
+            <el-button type="text" @click="deleteById(row)" v-permissions="['business:areas:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaAreasWindow ref="operaAreasWindow" @success="update"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaAreasWindow from '@/components/business/OperaAreasWindow'
+import { listByParentId } from '@/api/business/areas'
+export default {
+  name: 'Areas',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaAreasWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        type: 0,
+        parentId: ''
+      },
+      treeMaps: new Map(),
+      parentId: null
+    }
+  },
+  created () {
+    this.config({
+      module: '鐪佸競鍖轰俊鎭〃',
+      api: '/business/areas',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+
+    // 椤电爜鍙樻洿澶勭悊
+    handlePageChange (pageIndex) {
+
+      this.isWorking.search = true
+      listByParentId(this.searchForm)
+        .then(data => {
+          this.tableData.list = this.dataAddBool(data)
+        })
+        .catch(e => {
+          this.$message.error(e)
+        })
+        .finally(() => {
+          this.isWorking.search = false
+        })
+    },
+    dataAddBool(array) {
+      array.forEach(item => {
+        item.hasChildren = item.type != 2
+        // item.childList = item.childList && this.dataAddBool(item.childList)
+      })
+      return array
+    },
+    load(tree, treeNode, resolve) {
+      this.treeMaps.set(tree.id, { tree, treeNode, resolve })
+      listByParentId({ parentId: tree.id, type: tree.type + 1 })
+        .then(data => {
+          resolve(this.dataAddBool(data||[]))
+        })
+        .catch(e => {
+          this.$message.error(e)
+        })
+        .finally(() => {
+          this.isWorking.search = false
+        })
+    },
+    refreshLoadTree(parentId) {
+      if (this.treeMaps.get(parentId)) {
+        const { tree, treeNode, resolve } = this.treeMaps.get(parentId)
+        this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, [])
+        if (tree) { // 閲嶆柊鎵ц鐖惰妭鐐瑰姞杞藉瓙绾ф搷浣�
+          this.load(tree, treeNode, resolve)
+          if (tree.parentId) { // 鑻ュ瓨鍦ㄧ埛鐖风粨鐐癸紝鍒欐墽琛岀埛鐖疯妭鐐瑰姞杞藉瓙绾ф搷浣滐紝闃叉鏈�鍚庝竴涓瓙鑺傜偣琚垹闄ゅ悗鐖惰妭鐐逛笉鏄剧ず鍒犻櫎鎸夐挳
+            const a = this.treeMaps.get(tree.parentId)
+            this.load(a.tree, a.treeNode, a.resolve)
+          }
+        }
+      } else {
+        this.handlePageChange()
+      }
+    },
+    deleteById (row, childConfirm = true) {
+      // let message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝悧?`
+      let message = `纭鍒犻櫎璇ヨ褰曞悧?`
+      if (childConfirm && row.childList != null && row.childList.length > 0) {
+        // message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝強鍏跺瓙${this.module}鍚�?`
+        message = `纭鍒犻櫎璇ヨ褰曞強鍏跺瓙鏁版嵁鍚�?`
+      }
+      this.$dialog.deleteConfirm(message)
+        .then(() => {
+          this.isWorking.delete = true
+          this.api.deleteById(row[this.configData['field.id']])
+            .then(() => {
+              this.$message.success('鍒犻櫎鎴愬姛')
+              this.refreshLoadTree(row.parentId)
+            })
+            .catch(e => {
+              this.$message.error(e)
+            })
+            .finally(() => {
+              this.isWorking.delete = false
+            })
+        })
+        .catch(() => {})
+    },
+    edit(row) {
+      // this.parentId = row.type==0 ? null : row.type==1 ? '缂栬緫甯�' : '缂栬緫鍖哄幙'
+      this.$refs.operaAreasWindow.open(row.type==0 ? '缂栬緫鐪�' : row.type==1 ? '缂栬緫甯�' : '缂栬緫鍖哄幙', row)
+    },
+    createChild(row) {
+      this.$refs.operaAreasWindow.open(row.type == 0 ? '鏂板缓甯�' : '鏂板缓鍘垮尯', { parentId: row.id, name: '', type: row.type + 1 })
+    },
+    update(parentId) {
+      this.refreshLoadTree(parentId)
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 1aca030..0de3d22 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -133,7 +133,7 @@
         <div class="task">
           <div class="header df_sb">
             <div class="home_title df">
-              <span @click="handleTest">寰呭姙浜嬮」</span>
+              <span >寰呭姙浜嬮」</span>
               <span class="num" v-if="taskTotal">{{ taskTotal }}</span>
             </div>
             <div class="df_ac more" @click="jumpPage('/task/index')">
@@ -202,7 +202,7 @@
 import { weeks } from '@/utils/config'
 import {
   getWorkbenchData,
-  getAppHeaderNav
+  getAppHeaderNav, syncHkNotice
 } from '@/api'
 import { level } from '@/api/business/visits'
 import TaskDetail from '@/views/task/visSubDetail.vue'
@@ -223,7 +223,7 @@
     OperaHiddenDangerWindow,
     OperaVisitsDesWindow
   },
-  data() {
+  data () {
     return {
       colors,
       nowDate: '',
@@ -244,122 +244,131 @@
       isShowDetail: false,
       isShowReport: false,
       isShowDanger: false,
-      isShowDriver: false,
+      isShowDriver: false
     }
   },
   computed: {
-    userInfo() {
+    userInfo () {
       return this.$store.state.userInfo
     }
   },
-  created() {
+  created () {
     this.updateDate()
     setInterval(() => {
       this.updateDate()
     }, 1000 * 60 * 60)
-
   },
-  mounted() {
+  mounted () {
     this.initData()
   },
   methods: {
-    handleTest() {
-      const myWindow = window.open('https://10.50.250.253/portal/ui/index?componentId=dfe&componentMenuId=process_apply')
-      setTimeout(() => {
-        const params = {
-          componentId: 'dfe',
-          componentMenuId: 'process_apply',
-          callback: {
-            method: 'dealTlncMsg', argument: {
-              "msgId": "98c256b9-aaff-11ef-8347-fa163ee2c57c",
-              "moduleId": "dfeFlowTodoModuleId",
-              "msgTitle": "璇峰強鏃跺鐞�13856591439鍙戣捣鐨勮鍋囩敵璇�",
-              "msgStatus": "0",
-              "msgCreateTime": "浠婂ぉ 15:33",
-              "msgCreateTimeIso": "2024-11-25T15:33:42.000+08:00",
-              "serverTime": 1732531014591,
-              "menuCode": "process_apply",
-              "msgStatusStr": "寰呭鐞�",
-              "comId": "dfe",
-              "userId": "13856591439",
-              "extendNoShow": "{\"processInstanceId\":\"98a57fe0-aaff-11ef-8347-fa163ee2c57c\",\"processId\":\"process_dabcfdd39f1b6f46d36a9f4ff6ce1080\",\"param\":{\"sourceType\":\"todo\",\"modelCode\":\"tb_leave_dfe_for_dfe_runtime\",\"processNodeId\":\"UserTask_dde7d83377343a2d5fa1f60c23b023ef\",\"taskId\":\"98c256b9-aaff-11ef-8347-fa163ee2c57c\"},\"process.param.appId\":\"32ca8770-6f85-11ec-b5a3-991864da52a6\",\"appId\":\"32ca8770-6f85-11ec-b5a3-991864da52a6\",\"name\":\"璇峰亣鐢宠\",\"taskId\":\"98c256b9-aaff-11ef-8347-fa163ee2c57c\",\"taskNodeId\":\"UserTask_dde7d83377343a2d5fa1f60c23b023ef\",\"url\":\"/dfe-form/process/tlnc/apply\"}",
-              "targetComId": "dfe",
-              "moduleName": "娴佺▼寰呭姙",
-              "tid": "99cad778-aaff-11ef-9dbf-ff08ba71965c",
-              "msgEndTime": null,
-              "msgEndTimeIso": "",
-              "picUrl": "",
-              "extendJson": "{\"key1\":\"璇峰強鏃跺鐞嗛檲楦块鍙戣捣鐨勮鍋囩敵璇穃"}",
-              "extendParam": null,
-              "extendCascade": null,
-              "createUser": "13856591439",
-              "webCascadeUrl": null,
-              "h5CascadeUrl": null,
-              "cascadeTodoOpenType": null,
-              "cascadeSourceConfigId": null,
-              "h5Url": "/h5/pages/form-page/form-page?returnPath=-1&appId=32ca8770-6f85-11ec-b5a3-991864da52a6&taskId=98c256b9-aaff-11ef-8347-fa163ee2c57c&processNodeId=UserTask_dde7d83377343a2d5fa1f60c23b023ef&modelCode=tb_leave_dfe_for_dfe_runtime&type=flowHandle&component=form-apply&_sn=true",
-              "segmentId": "dfe-form",
-              "lastUsers": "闄堥缚椋�",
-              "currentUsers": "闄堥缚椋�",
-              "todoTypeCode": "dfe@@tlnc_placeholder_tlnc@@dfeFlowTodoModuleId",
-              "currentUserIds": "13856591439",
-              "lastUserIds": "13856591439",
-              "msgDesc": null,
-              "widgetUrl": null,
-              "detailType": null,
-              "widgetWidth": null,
-              "widgetHeight": null,
-              "userIdList": null,
-              "statusName": null,
-              "arriveTime": null,
-              "stayTime": null,
-              "todoType": null,
-              "cascadePort": null,
-              "openMode": null
-            }
-          },
-          msgType: 'tlnc'
-        }
-        let argus = JSON.stringify(params)
-        myWindow.postMessage('{"method":"goToApp","argument":' + argus + '}', '*')
-      }, 3000)
+    getNoticeList(){
+      syncHkNotice().then(res => {
+
+      })
     },
-    SubSuccess(str) {
+    handleTest (row) {
+      getAppHeaderNav(5).then(res => {
+        if (res == undefined || res == null) {
+          return
+        }
+        const myWindow = window.open(res)
+        setTimeout(() => {
+          const params = {
+            componentId: 'dfe',
+            componentMenuId: 'process_apply',
+            callback: {
+              method: 'dealTlncMsg',
+              argument: {
+                msgId: '98c256b9-aaff-11ef-8347-fa163ee2c57c',
+                moduleId: 'dfeFlowTodoModuleId',
+                msgTitle: '璇峰強鏃跺鐞�13856591439鍙戣捣鐨勮鍋囩敵璇�',
+                msgStatus: '0',
+                msgCreateTime: '浠婂ぉ 15:33',
+                msgCreateTimeIso: '2024-11-25T15:33:42.000+08:00',
+                serverTime: 1732531014591,
+                menuCode: 'process_apply',
+                msgStatusStr: '寰呭鐞�',
+                comId: 'dfe',
+                userId: '13856591439',
+                extendNoShow: '{"processInstanceId":"98a57fe0-aaff-11ef-8347-fa163ee2c57c","processId":"process_dabcfdd39f1b6f46d36a9f4ff6ce1080","param":{"sourceType":"todo","modelCode":"tb_leave_dfe_for_dfe_runtime","processNodeId":"UserTask_dde7d83377343a2d5fa1f60c23b023ef","taskId":"98c256b9-aaff-11ef-8347-fa163ee2c57c"},"process.param.appId":"32ca8770-6f85-11ec-b5a3-991864da52a6","appId":"32ca8770-6f85-11ec-b5a3-991864da52a6","name":"璇峰亣鐢宠","taskId":"98c256b9-aaff-11ef-8347-fa163ee2c57c","taskNodeId":"UserTask_dde7d83377343a2d5fa1f60c23b023ef","url":"/dfe-form/process/tlnc/apply"}',
+                targetComId: 'dfe',
+                moduleName: '娴佺▼寰呭姙',
+                tid: '99cad778-aaff-11ef-9dbf-ff08ba71965c',
+                msgEndTime: null,
+                msgEndTimeIso: '',
+                picUrl: '',
+                extendJson: '{"key1":"璇峰強鏃跺鐞嗛檲楦块鍙戣捣鐨勮鍋囩敵璇�"}',
+                extendParam: null,
+                extendCascade: null,
+                createUser: '13856591439',
+                webCascadeUrl: null,
+                h5CascadeUrl: null,
+                cascadeTodoOpenType: null,
+                cascadeSourceConfigId: null,
+                h5Url: '/h5/pages/form-page/form-page?returnPath=-1&appId=32ca8770-6f85-11ec-b5a3-991864da52a6&taskId=98c256b9-aaff-11ef-8347-fa163ee2c57c&processNodeId=UserTask_dde7d83377343a2d5fa1f60c23b023ef&modelCode=tb_leave_dfe_for_dfe_runtime&type=flowHandle&component=form-apply&_sn=true',
+                segmentId: 'dfe-form',
+                lastUsers: '闄堥缚椋�',
+                currentUsers: '闄堥缚椋�',
+                todoTypeCode: 'dfe@@tlnc_placeholder_tlnc@@dfeFlowTodoModuleId',
+                currentUserIds: '13856591439',
+                lastUserIds: '13856591439',
+                msgDesc: null,
+                widgetUrl: null,
+                detailType: null,
+                widgetWidth: null,
+                widgetHeight: null,
+                userIdList: null,
+                statusName: null,
+                arriveTime: null,
+                stayTime: null,
+                todoType: null,
+                cascadePort: null,
+                openMode: null
+              }
+            },
+            msgType: 'tlnc'
+          }
+          // const argus = JSON.stringify(params)
+          myWindow.postMessage('{"method":"goToApp","argument":' + row.param5 + '}', '*')
+        }, 3000)
+      })
+    },
+    SubSuccess (str) {
       this[str] = false
       this.getTaskList()
     },
-    funcClick(item) {
+    funcClick (item) {
       if (item.name == '鑰冨嫟宸ヤ綔鍙�') {
         getAppHeaderNav(4).then(res => {
-          window.open(res, "_blank")
-          return
+          window.open(res, '_blank')
         })
       }
       this.$router.push(item.path)
     },
-    updateDate() {
+    updateDate () {
       this.nowDate = dayjs().format('YYYY骞碝鏈圖鏃�')
       this.nowWeek = weeks[new Date().getDay()]
     },
-    initData() {
+    initData () {
       this.getWorkHead()
       this.getWorkBody()
       this.getTaskList()
       this.getWarningList()
     },
-    getWarningList() {
+    getWarningList () {
       getWorkbenchData({ queryType: 4 }).then(res => {
         this.warningList = res.timeOutVisitList || []
         this.warningTotal = res.timeOutVisitNum || 0
       })
     },
-    getTaskList() {
+    getTaskList () {
       getWorkbenchData({ queryType: 3 }).then(res => {
         this.taskList = res.noticesList || []
         this.taskTotal = res.noticesNum || 0
       })
     },
-    getWorkBody() {
+    getWorkBody () {
       getWorkbenchData({ queryType: 2 }).then(res => {
         this.staticData = res || {}
         this.initEchart2()
@@ -367,10 +376,10 @@
         this.initEchart4()
       })
     },
-    getWorkHead() {
+    getWorkHead () {
       getWorkbenchData({ queryType: 1 }).then(res => {
         this.headerData = res || {}
-        let arr = []
+        const arr = []
         arr.push({ name: '璁垮', value: this.headerData.inParkVisitUserNum })
         arr.push({ name: '鍐呴儴鍛樺伐', value: this.headerData.todayInParkUserNum - this.headerData.inParkLwUserNum - this.headerData.inParkVisitUserNum })
         arr.push({ name: '闀挎湡鐩稿叧鏂�', value: this.headerData.inParkLwUserNum })
@@ -379,10 +388,10 @@
         this.initEchart1()
       })
     },
-    jumpPage(page) {
+    jumpPage (page) {
       this.$router.push(page)
     },
-    departure(id) {
+    departure (id) {
       this.$confirm('纭畾绂诲巶鍚�, 鏄惁缁х画?', '鎻愮ず', {
         confirmButtonText: '纭畾',
         cancelButtonText: '鍙栨秷',
@@ -396,7 +405,11 @@
 
       })
     },
-    handleDetail(row) {
+    handleDetail (row) {
+      if (row.type === 7) {
+       this.handleTest(row);
+        return
+      }
       if (row.objType === 2) {
         this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', { ...row, id: row.objId })
         return
@@ -437,9 +450,9 @@
         })
       }
     },
-    initEchart1() {
+    initEchart1 () {
       const myChart = echarts.init(document.getElementById('echart1'))
-      let that = this
+      const that = this
 
       const option = {
         tooltip: {
@@ -471,9 +484,9 @@
         myChart.resize()
       })
     },
-    initEchart2() {
+    initEchart2 () {
       const myChart = echarts.init(document.getElementById('echart2'))
-      let that = this
+      const that = this
       myChart.setOption({
         grid: {
           top: '4%',
@@ -516,7 +529,7 @@
                     { offset: 0, color: '#56abf8' },
                     { offset: 1, color: '#407ff0' }
                   ]
-                ),
+                )
                 // barBorderRadius: [0, 10, 10, 0]
               }
             }
@@ -527,9 +540,9 @@
         myChart.resize()
       })
     },
-    initEchart3() {
+    initEchart3 () {
       const myChart = echarts.init(document.getElementById('echart3'))
-      let that = this
+      const that = this
       myChart.setOption({
         tooltip: {
           trigger: 'axis',
@@ -627,9 +640,9 @@
         myChart.resize()
       })
     },
-    initEchart4() {
+    initEchart4 () {
       const myChart = echarts.init(document.getElementById('echart4'))
-      let that = this
+      const that = this
       myChart.setOption({
         tooltip: {
           trigger: 'axis',
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index ac5d8d1..97d8c7f 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -109,6 +109,7 @@
 import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
 import dayjs from 'dayjs'
 import {
+  getAppHeaderNav,
   taskCenterHeadPC,
   taskCenterPage,
   taskSignRead
@@ -196,7 +197,22 @@
       this[str] = false
       this.getTaskList()
     },
+    handleTest (row) {
+      getAppHeaderNav(5).then(res => {
+        if (res === undefined || res == null) {
+          return
+        }
+        const myWindow = window.open(res)
+        setTimeout(() => {
+          myWindow.postMessage('{"method":"goToApp","argument":' + row.param5 + '}', '*')
+        }, 3000)
+      })
+    },
     handleDetail (row) {
+      if (row.type === 7) {
+        this.handleTest(row);
+        return
+      }
       if (this.filters.queryType == 3) {
         taskSignRead({
           noticesId: row.id,
diff --git a/server/README.md b/server/README.md
index 7616c54..41035ac 100644
--- a/server/README.md
+++ b/server/README.md
@@ -11,3 +11,10 @@
 
 
 nohup java -Xms512m -Xmx512m -Xmn512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=10018 -jar /usr/local/jars/dmvisit/openapi.jar >/usr/local/jars/dmvisit/web.log 2>/usr/local/jars/dmvisit/err.log &
+
+
+
+閲嶈锛�
+1銆佸叧浜庡缃戣闂檺鍒� 锛屽鏋滄湇鍔″櫒閲嶅惎浜嗘垨鑰呯綉鍗¢噸鍚紝杩涜涓�涓嬫搷浣滐細
+vim /etc/resolv.conf
+nameserver 鏀规垚  nameserver 202.102.192.68
diff --git a/server/meeting/meeting_admin/src/main/resources/application.yml b/server/meeting/meeting_admin/src/main/resources/application.yml
index 518acab..7d88e9d 100644
--- a/server/meeting/meeting_admin/src/main/resources/application.yml
+++ b/server/meeting/meeting_admin/src/main/resources/application.yml
@@ -34,7 +34,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/SendWxMessage.java b/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/SendWxMessage.java
index afe036d..a0064d6 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/SendWxMessage.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/SendWxMessage.java
@@ -41,7 +41,8 @@
      */
     public  void  bookingsStart(SystemUser systemUser, Bookings bookings, Rooms rooms){
         RestTemplate restTemplate = new RestTemplate();
-        String accessToken = systemDictDataBiz.queryCodeById(106);
+        String accessToken = systemDictDataBiz.getWxAccessToken();
+
         log.info("寰俊灏忕▼搴� 浼氳寮�濮嬭闃呮秷鎭彂閫佹棩蹇� -> accessToken锛歿}",accessToken);
         //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
         String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
@@ -67,6 +68,7 @@
         log.info("寰俊灏忕▼搴�-> 鍙栨秷閫氱煡璁㈤槄娑堟伅鍙戦�佹棩蹇楋細{}",JSONObject.toJSONString(responseEntity));
     }
 
+
     /**
      * 浼氳鍙栨秷閫氱煡
      * @param systemUser 鐢ㄦ埛
@@ -75,7 +77,7 @@
      */
     public  void  bookingsCancel(SystemUser systemUser, Bookings bookings, Rooms rooms){
         RestTemplate restTemplate = new RestTemplate();
-        String accessToken = systemDictDataBiz.queryCodeById(106);
+        String accessToken =systemDictDataBiz.getWxAccessToken() ;
         log.info("寰俊灏忕▼搴� 浼氳寮�濮嬭闃呮秷鎭彂閫佹棩蹇� -> accessToken锛歿}",accessToken);
         //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
         String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
@@ -114,7 +116,7 @@
      */
     public void  bookingsReservation(SystemUser systemUser, Bookings bookings, Rooms rooms){
         RestTemplate restTemplate = new RestTemplate();
-        String accessToken = systemDictDataBiz.queryCodeById(106);
+        String accessToken = systemDictDataBiz.getWxAccessToken() ;
         log.info("寰俊灏忕▼搴� 浼氳寮�濮嬭闃呮秷鎭彂閫佹棩蹇� -> accessToken锛歿}",accessToken);
 
         //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/WxPlatNotice.java b/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/WxPlatNotice.java
new file mode 100644
index 0000000..1228ce3
--- /dev/null
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/core/wx/WxPlatNotice.java
@@ -0,0 +1,166 @@
+package com.doumee.core.wx;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.dao.business.model.Bookings;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * 寰俊鍏紬鍙烽�氱煡
+ *
+ * @Author : Rk
+ * @create 2023/12/27 9:19
+ */
+@Slf4j
+@Component
+public class WxPlatNotice {
+
+    public void  testSendNotice(List<String> openIds,String token){
+        if(CollectionUtils.isNotEmpty(openIds)){
+            String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+            //鏁翠綋鍙傛暟map
+            Map<String, Object> paramMap = new HashMap<String, Object>();
+            //娑堟伅涓婚鏄剧ず鐩稿叧map
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            Map<String, Object> const9 = new HashMap<String,Object>();
+            const9.put("value","鐢宠寰呮偍瀹℃壒");
+            Map<String, Object> thing1 = new HashMap<String,Object>();
+            thing1.put("value", "娴嬭瘯鍚嶇О");
+            Map<String, Object> car_number7 = new HashMap<String,Object>();
+            car_number7.put("value","鐨朅P12345");
+            Map<String, Object> character_string6 = new HashMap<String,Object>();
+            character_string6.put("value","1");
+            Map<String, Object> thing4 = new HashMap<String,Object>();
+            thing4.put("value","鐞嗙敱");
+            dataMap.put("const9",const9);
+            dataMap.put("thing1",thing1);
+            dataMap.put("car_number7",car_number7);
+            dataMap.put("character_string6",character_string6);
+            dataMap.put("thing4",thing4);
+            paramMap.put("data", dataMap);
+            for (String openId:openIds) {
+                paramMap.clear();
+                paramMap.put("template_id", "SPwvgtASkm1aMDBsYhX2wHKdL2JBEGPknDkgniSza2Y");
+                paramMap.put("touser", openId);
+                paramMap.put("data", dataMap);
+                String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                if(StringUtils.isBlank(response)){
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                }else{
+                    JSONObject json = JSONObject.parseObject(response);
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                }
+            }
+//            log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
+        }
+    }
+
+    /**
+     * 浼氳瀹ら绾﹂�氱煡
+     * @param bookings
+     * @param tempId CuoDoxOl6SFwi4NhNgOQgKSJVjDD4VCIaPYlnbv_zdY
+     * @param token
+     * @param openIds
+     */
+    public void  sendMeetingBookTemplateNotice(Bookings bookings,String tempId, String token, Set<String> openIds){
+        if(CollectionUtils.isNotEmpty(openIds)){
+            String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+            //鏁翠綋鍙傛暟map
+            Map<String, Object> paramMap = new HashMap<String, Object>();
+            //娑堟伅涓婚鏄剧ず鐩稿叧map
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            //浼氳鍚嶇О
+            Map<String, Object> thing1 = new HashMap<String,Object>();
+            thing1.put("value",bookings.getName());
+            //浼氳鏃堕棿
+            Map<String, Object> time2 = new HashMap<String,Object>();
+            time2.put("value", DateUtil.getDate(bookings.getStartTime(),"yyyy-MM-dd HH:mm:ss") );
+            //浼氳鍦扮偣
+            Map<String, Object> thing3 = new HashMap<String,Object>();
+            thing3.put("value",bookings.getRoomName());
+            //鍙戣捣浜�
+            Map<String, Object> thing6 = new HashMap<String,Object>();
+            thing6.put("value",bookings.getManagerInfo());
+
+            dataMap.put("thing1",thing1);
+            dataMap.put("time2",time2);
+            dataMap.put("thing3",thing3);
+            dataMap.put("thing6",thing6);
+            paramMap.put("data", dataMap);
+            for (String openId:openIds) {
+                paramMap.clear();
+                paramMap.put("template_id", tempId);
+                paramMap.put("touser", openId);
+                paramMap.put("data", dataMap);
+                String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                if(StringUtils.isBlank(response)){
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                }else{
+                    JSONObject json = JSONObject.parseObject(response);
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 浼氳瀹ゅ彇娑堥�氱煡
+     * @param bookings
+     * @param tempId  CiB6vCT2InovAoQfudY-lvzLSV0-3lfz3a5GsSFCzd8
+     * @param token
+     * @param openIds
+     */
+    public void  sendMeetingBookCancelTemplateNotice(Bookings bookings,String tempId, String token, Set<String> openIds){
+        if(CollectionUtils.isNotEmpty(openIds)){
+            String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+            //鏁翠綋鍙傛暟map
+            Map<String, Object> paramMap = new HashMap<String, Object>();
+            //娑堟伅涓婚鏄剧ず鐩稿叧map
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            //浼氳鍚嶇О
+            Map<String, Object> thing1 = new HashMap<String,Object>();
+            thing1.put("value",bookings.getName());
+            //浼氳鏃堕棿
+            Map<String, Object> time6 = new HashMap<String,Object>();
+            time6.put("value", DateUtil.getDate(bookings.getStartTime(),"yyyy-MM-dd HH:mm:ss") );
+            //浼氳鍦扮偣
+            Map<String, Object> thing2 = new HashMap<String,Object>();
+            thing2.put("value",bookings.getRoomName());
+            //棰勭害浜哄憳
+            Map<String, Object> thing4 = new HashMap<String,Object>();
+            thing4.put("value",bookings.getManagerInfo());
+
+            dataMap.put("thing1",thing1);
+            dataMap.put("time6",time6);
+            dataMap.put("thing2",thing2);
+            dataMap.put("thing4",thing4);
+            paramMap.put("data", dataMap);
+            for (String openId:openIds) {
+                paramMap.clear();
+                paramMap.put("template_id", tempId);
+                paramMap.put("touser", openId);
+                paramMap.put("data", dataMap);
+                String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                if(StringUtils.isBlank(response)){
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                }else{
+                    JSONObject json = JSONObject.parseObject(response);
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                }
+            }
+        }
+    }
+
+
+
+
+}
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/UserRel.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/UserRel.java
index 45e30e7..53570c3 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/UserRel.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/UserRel.java
@@ -70,6 +70,9 @@
     @ApiModelProperty(value = "鍙備細浜哄憳鎵嬫満鍙�")
     @TableField(exist = false)
     private String userPhone;
+    @ApiModelProperty(value = "openid")
+    @TableField(exist = false)
+    private String openid;
 
 
 
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/UtilService.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/UtilService.java
index 33c632a..bafe3ee 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/UtilService.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/UtilService.java
@@ -35,7 +35,7 @@
 
 
     public String generate(@RequestParam Integer bookingsId, @RequestParam Integer userId) {
-        String accessToken =  systemDictDataBiz.queryCodeById(106);
+        String accessToken = systemDictDataBiz.getWxAccessToken() ;
         //鐢熸垚鍥剧墖涓婁紶OSS
         Map<String,Object> body = new HashMap<>();
         // 鍦烘櫙鐮侊紝涓庡墠绔害瀹氾紝鏈�缁堟槸闇�瑕佸墠绔В鏋�
@@ -88,7 +88,7 @@
     }
 
     public InputStream generateImgStream(Integer bookingsId, Integer userId) {
-        String accessToken =  systemDictDataBiz.queryCodeById(106);
+        String accessToken = systemDictDataBiz.getWxAccessToken() ;
         log.info("寰俊灏忕▼搴�-> accessToken锛歿}",accessToken);
         //鐢熸垚鍥剧墖涓婁紶OSS
         Map<String,Object> body = new HashMap<>();
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
index f9994fd..6bc33be 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -13,6 +13,7 @@
 import com.doumee.core.utils.*;
 import com.doumee.core.wx.MeetConstants;
 import com.doumee.core.wx.SendWxMessage;
+import com.doumee.core.wx.WxPlatNotice;
 import com.doumee.dao.admin.request.BusinessOverDTO;
 import com.doumee.dao.admin.request.QrOpenDoorDto;
 import com.doumee.dao.admin.response.DevWgResponseParam;
@@ -152,8 +153,8 @@
         if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
             this.sendNotice(bookings, MeetConstants.TWO);
         }
-        //鍙戦�佸井淇¤闃呴�氱煡
-//        sendWxMessage.bookingsReservation(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
+        SystemUser systemUser = systemUserMapper.selectById(bookings.getUserId());
+        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ZERO);
 
         return bookings.getId();
     }
@@ -382,7 +383,11 @@
         updateProjectRel(bookings, user);
         handleFile(bookings, user);
         //鍙戦�佷細璁�氱煡
-        this.sendNotice(bookings, MeetConstants.TWO);
+        if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
+            this.sendNotice(bookings, MeetConstants.TWO);
+        }
+        SystemUser systemUser = systemUserMapper.selectById(bookings.getUserId());
+        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ZERO);
     }
 
     @Override
@@ -447,9 +452,11 @@
         bookings.setEditor(user.getId());
         bookingsMapper.updateById(bookings);
         //鍙栨秷浼氳 鍙戦�佸彇娑堥�氱煡
-        this.sendNotice(bookings, 3);
-        //鍙戦�佸井淇¤闃呴�氱煡
-        sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
+        if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
+            this.sendNotice(bookings, 3);
+        }
+        SystemUser systemUser = systemUserMapper.selectById(bookings.getUserId());
+        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ONE);
 
     }
 
@@ -927,8 +934,10 @@
         String avatarPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                 +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
         userResponseList.forEach(i -> {
-            if(StringUtils.isNotBlank(i.getAvatar())){
+            if(StringUtils.isNotBlank(i.getAvatar()) && !i.getAvatar().startsWith("HKIMG") ){
                 i.setAvatar(avatarPath+i.getAvatar());
+            }else{
+                i.setAvatar(null);
             }
         });
         meetingDetailResponse.setUserResponseList(userResponseList);
@@ -1039,9 +1048,12 @@
         bookings.setEditor(businessOverDTO.getUserId());
         bookingsMapper.updateById(bookings);
         //鍙栨秷浼氳 鍙戦�佸彇娑堥�氱煡
-        this.sendNotice(bookings, 3);
-        //鍙戦�佸井淇¤闃呴�氱煡
-//        sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
+        if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
+            this.sendNotice(bookings, 3);
+        }
+        SystemUser systemUser = systemUserMapper.selectById(bookings.getUserId());
+        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ONE);
+
     }
 
 
@@ -1289,6 +1301,7 @@
             bookings.setEditDate(new Date());
             bookingsMapper.updateById(bookings);
             this.sendNotice(bookings, MeetConstants.ONE);
+
             //鍙戦�佸井淇¢�氱煡
 //            sendWxMessage.bookingsStart(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
         }
@@ -1365,6 +1378,44 @@
     }
 
 
+    @Async
+    public void sendWxNotice(Bookings bookings,String openid, Integer sendType) {
+        try{
+            List<UserRel> userRelList = userRelMapper.selectJoinList(UserRel.class,new MPJLambdaWrapper<UserRel>()
+                    .selectAll(UserRel.class)
+                    .selectAs(SystemUser::getRealname,UserRel::getRealName)
+                    .selectAs(SystemUser::getMobile,UserRel::getUserPhone)
+                    .selectAs(SystemUser::getOpenid,UserRel::getOpenid)
+                    .leftJoin(SystemUser.class,SystemUser::getId,UserRel::getUserId)
+                    .eq(UserRel::getObjType, MeetConstants.ONE)
+                    .eq(UserRel::getObjId, bookings.getId())
+                    .eq(UserRel::getIsdeleted, MeetConstants.ZERO)
+                    .isNotNull(SystemUser::getOpenid)
+            );
+            List<String> openIdList = userRelList.stream().map(i->i.getOpenid()).collect(Collectors.toList());
+            if(StringUtils.isNotBlank(openid)){
+                openIdList.add(openid);
+            }
+            Set<String> openIds = new HashSet<String>(openIdList);
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(openIds)){
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                if(Constants.equalsInteger(sendType,Constants.ZERO)){
+                    wxPlatNotice.sendMeetingBookTemplateNotice(bookings,"CuoDoxOl6SFwi4NhNgOQgKSJVjDD4VCIaPYlnbv_zdY",
+                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),openIds);
+                }else{
+
+                    wxPlatNotice.sendMeetingBookCancelTemplateNotice(bookings,"CiB6vCT2InovAoQfudY-lvzLSV0-3lfz3a5GsSFCzd8",
+                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),openIds);
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+
+    }
+
+
     @Override
     public List<Bookings> getMyJoinBookingMeet(Integer userId, Integer roomId, LocalDateTime startTime, LocalDateTime endTime) {
         DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
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 83fcdca..274dc49 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
@@ -147,7 +147,6 @@
         }catch (Exception e){
             return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
         }
-
     }
     /**
      * 鍒锋柊JWT浠ょ墝,鐢ㄦ棫鐨勪护鐗屾崲鏂扮殑浠ょ墝
diff --git a/server/system_gateway/src/main/resources/application.yml b/server/system_gateway/src/main/resources/application.yml
index 6503fa3..4ac439b 100644
--- a/server/system_gateway/src/main/resources/application.yml
+++ b/server/system_gateway/src/main/resources/application.yml
@@ -37,7 +37,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300
diff --git a/server/system_gateway/src/main/resources/bootstrap-pro.yml b/server/system_gateway/src/main/resources/bootstrap-pro.yml
index 34383f4..2254fe4 100644
--- a/server/system_gateway/src/main/resources/bootstrap-pro.yml
+++ b/server/system_gateway/src/main/resources/bootstrap-pro.yml
@@ -90,5 +90,6 @@
       url: 1
       email: 1
     license:
+
       name: Apache 2.0
       url: https://www.apache.org/licenses/LICENSE-2.0.html
diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index 8ecd0a5..06a6eb6 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active:
   application:
     name: system_gateway
   # 瀹夊叏閰嶇疆
diff --git a/server/system_gateway/src/main/resources/logback-spring.xml b/server/system_gateway/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..8cf921f
--- /dev/null
+++ b/server/system_gateway/src/main/resources/logback-spring.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
+        </layout>
+    </appender>
+    <property name="log.path" value="logs/system_gateway"></property>
+    <property name="log.fileSize" value="100MB"></property>
+    <property name="log.historyDays" value="7"></property>
+
+    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <!--鍖归厤灏辫垗鍘�-->
+            <onMatch>DENY</onMatch>
+            <onMismatch>ACCEPT</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <!--婊氬姩绛栫暐-->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+    <!-- 寮傛鍐欏叆鏃ュ織 -->
+    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
+        <!-- 涓嶄涪澶辨棩蹇�.榛樿鐨�,濡傛灉闃熷垪鐨�80%宸叉弧,鍒欎細涓㈠純TRACT銆丏EBUG銆両NFO绾у埆鐨勬棩蹇� -->
+        <discardingThreshold >0</discardingThreshold>
+        <!-- 鏇存敼榛樿鐨勯槦鍒楃殑娣卞害,璇ュ�间細褰卞搷鎬ц兘.榛樿鍊间负256 -->
+        <queueSize>512</queueSize>
+        <!-- 娣诲姞闄勫姞鐨刟ppender,鏈�澶氬彧鑳芥坊鍔犱竴涓� -->
+        <appender-ref ref ="fileInfoLog"/>
+    </appender>
+    <root level="info">
+        <appender-ref ref="consoleLog"/>
+        <appender-ref ref="fileInfoLog"/>
+        <appender-ref ref="fileErrorLog"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
index 38ce34c..5911a59 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
@@ -79,6 +79,7 @@
         systemDictData.setLoginUserInfo(this.getLoginUser(token));
         systemDictData.setUpdateUser(systemDictData.getLoginUserInfo().getId());
         systemDictDataBiz.updateById(systemDictData);
+        systemDictDataBiz.refreshCache();
         return ApiResponse.success(null);
     }
 
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/SystemDictDataBiz.java b/server/system_service/src/main/java/com/doumee/biz/system/SystemDictDataBiz.java
index 46844ea..9ef7f39 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/SystemDictDataBiz.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/SystemDictDataBiz.java
@@ -36,4 +36,7 @@
   String getPreFixPath(String resourceCode, String targetCode);
 
 
+    void refreshCache();
+
+    String getWxAccessToken();
 }
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
index a9d3ae1..88b83ce 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
@@ -11,14 +11,12 @@
 import com.doumee.service.system.SystemDictService;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
-import java.util.Optional;
 
 @Service
 public class SystemDictDataBizImpl implements SystemDictDataBiz {
@@ -139,6 +137,22 @@
     }
 
     @Override
+    public void refreshCache() {
+       /* HKCarOpenService.ACCESS_KEY= queryByCode(Constants.HK_PARAM, Constants.HK_CARS_OPENAPI_ACCESS_KEY).getCode();
+        HKCarOpenService.BASE_URL= queryByCode(Constants.HK_PARAM, Constants.HK_CARS_OPENAPI_URL).getCode();
+        HKCarOpenService.ACCESS_SECRET= queryByCode(Constants.HK_PARAM, Constants.HK_CARS_OPENAPI_ACCESS_SECRET).getCode();
+        ArtemisConfig.host = queryByCode(Constants.HK_PARAM, Constants.HK_HOST).getCode();
+        ArtemisConfig.appKey = queryByCode(Constants.HK_PARAM, Constants.HK_APPKEY).getCode();
+        ArtemisConfig.appSecret = queryByCode(Constants.HK_PARAM, Constants.HK_APPSECRET).getCode();
+        HKConstants.https = queryByCode(Constants.HK_PARAM, Constants.HK_HTTPS).getCode();*/
+    }
+    @Override
+    public    String getWxAccessToken(){
+
+        return  queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode();
+    }
+
+    @Override
     public String getPreFixPath(String resourceCode, String targetCode) {
 
         if (StringUtils.isBlank(resourceCode) || StringUtils.isBlank(targetCode)){
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 6bedf52..83f3437 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
@@ -43,6 +43,9 @@
     public static final String HK_APPSECRET ="HK_APPSECRET" ;
     public static final String HK_HTTPS ="HK_HTTPS" ;
     public static final String HK_PUSH_URL = "HK_PUSH_URL";
+    public static final String HK_CARS_OPENAPI_ACCESS_KEY = "HK_CARS_OPENAPI_ACCESS_KEY";
+    public static final String HK_CARS_OPENAPI_ACCESS_SECRET = "HK_CARS_OPENAPI_ACCESS_SECRET";
+    public static final String HK_CARS_OPENAPI_URL = "HK_CARS_OPENAPI_URL";
     public static final String HK_ROOTORG_CODE ="HK_ROOTORG_CODE" ;
     public static final String HK_ROOTORG_NAME ="HK_ROOTORG_NAME" ;
     public static final String PLATFORM ="PLATFORM" ;
@@ -141,6 +144,9 @@
     public static final String MYSQL_BACKUP_DIR ="MYSQL_BACKUP_DIR" ;
     public static final String EVENT_FILES_PRIVATE_DOMAIN ="EVENT_FILES_PRIVATE_DOMAIN" ;
     public static final String EVENT_FILES_PUBLIC_DOMAIN ="EVENT_FILES_PUBLIC_DOMAIN" ;
+    public static final String HK_WXTOKEN_CONFIGID ="HK_WXTOKEN_CONFIGID" ;
+    public static final String HK_WXTOKEN_TAGID ="HK_WXTOKEN_TAGID" ;
+    public static final String WMS_TOTAL_STOCK_NUM ="WMS_TOTAL_STOCK_NUM" ;
     public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
     public static  boolean DEALING_HK_SYNCDEVICE = false;
     public static  boolean DEALING_HK_SYNCPLATFORM = false;
@@ -153,6 +159,7 @@
     public static  boolean DEALING_HK_DEL_USER = false;
     public static  boolean DEALING_HK_VISIT = false;
     public static  boolean DEALING_HK_VISIT_EXPIRE = false;
+    public static  boolean DEALING_HK_NOTICE_LIST = false;
     public static  boolean DEALING_FROM_HK_VISIT = false;
     public static  boolean DEALING_HK_EMPOWER = false;
     public static  boolean DEALING_HK_EMPOWER_DETAIL = false;
@@ -470,6 +477,14 @@
         d = d.setScale(4, BigDecimal.ROUND_HALF_UP);
         return  d;
     }
+    public static BigDecimal formatBigdecimal0Float(BigDecimal d) {
+        if (d == null) {
+            d = new BigDecimal(0.0);
+        }
+        //淇濈暀涓や綅灏忔暟涓斿洓鑸嶄簲鍏�
+        d = d.setScale(0, BigDecimal.ROUND_HALF_UP);
+        return  d;
+    }
     public static BigDecimal formatBigdecimal2Float(BigDecimal d) {
         if (d == null) {
             d = new BigDecimal(0.0);
@@ -551,6 +566,7 @@
     int logisticsCarUse = 4;//鐗╂祦杞﹀鎵�
     int system = 5;//绯荤粺娑堟伅
     int reason = 6;//鍏ュ洯鍘熷洜
+    int hknotice = 7;//娴峰悍鑰冨嫟浠e姙
 }
 
 
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 f36958d..e27187a 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
@@ -317,7 +317,6 @@
         }
     }
 
-
     /**
      * 鑾峰彇X鏈堜唤涔嬪墠鐨勬湀浠芥暟
      * @param currentDate
@@ -343,9 +342,31 @@
         }
         return list;
     }
+    /**
+     * 鑾峰彇X鏈堜唤涔嬪墠鐨勬湀浠芥暟
+     * @param currentDate
+     * @param month
+     * @return
+     */
+    public static List<String> getDateListBeforMonth(Date currentDate , Integer month) {
+        SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
+        SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");
+        int currentYear = Integer.parseInt(sdfYear.format(currentDate));
+        int currentMonth = Integer.parseInt(sdfMonth.format(currentDate));
+        List<String> list = new ArrayList<>();
 
+        for (int i = 0; i < month; i++) {
+            int tempYear = currentYear;
+            int tempMonth = currentMonth - i;
 
-
+            if (tempMonth <= 0) {
+                tempYear--;
+                tempMonth += 12;
+            }
+            list.add(tempYear +"-" + StringUtils.leftPad(Integer.toString(tempMonth),2,"0"));
+        }
+        return list;
+    }
 
     public static List<String> getBeforDays(Date currentDate,Integer days){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -360,6 +381,21 @@
             startDate = calendar.getTime();
             list.add(DateUtil.dateToString(startDate,"yyyy-MM-dd"));
             System.out.println(DateUtil.dateToString(startDate,"yyyy-MM-dd"));
+        }
+        return list;
+    }
+    public static List<Date> getDateListBeforDays(Date currentDate,Integer days){
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+        Date endDate = currentDate; // 鑾峰彇褰撳墠鏃ユ湡
+        calendar.add(Calendar.DAY_OF_YEAR, -days); // 寰�鍓嶆帹7澶�
+        Date startDate = calendar.getTime(); // 鑾峰彇鎺ㄧ畻鍚庣殑鏃ユ湡
+        List<Date> list = new ArrayList<>();
+        while (startDate.before(endDate)) {
+            calendar.add(Calendar.DAY_OF_YEAR, 1); // 鑾峰彇涓嬩竴澶╂棩鏈�
+            startDate = calendar.getTime();
+            list.add(startDate);
         }
         return list;
     }
@@ -442,7 +478,7 @@
      * @return String
      * @throws Exception
      */
-    public static String getNowPlusTime() throws Exception {
+    public static String getNowPlusTime()   {
         String nowDate = "";
         try {
             java.sql.Date date = null;
@@ -1636,6 +1672,49 @@
             return getNowShortDate().substring(0, 6) + "01";
         } catch (Exception e) {
             return "";
+        }
+    }
+    public static  List<Date> getThisMonthDateList() {
+        List<Date> dateList = new ArrayList<>();
+        try {
+            Calendar calendar = Calendar.getInstance();
+            int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+            calendar.set(Calendar.HOUR,0);
+            calendar.set(Calendar.MINUTE,0);
+            calendar.set(Calendar.SECOND,0);
+            calendar.set(Calendar.MILLISECOND,0);
+            for (int i = 0; i < daysInMonth; i++) {
+                calendar.set(Calendar.DAY_OF_MONTH,i+1);
+                dateList.add(calendar.getTime());
+            }
+        } catch (Exception e) {
+            return null;
+        }
+        return dateList;
+    }
+    public static  List<Date> getThisYearMonthList() {
+        List<Date> dateList = new ArrayList<>();
+        try {
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.DAY_OF_MONTH,1);
+            calendar.set(Calendar.HOUR,0);
+            calendar.set(Calendar.MINUTE,0);
+            calendar.set(Calendar.SECOND,0);
+            calendar.set(Calendar.MILLISECOND,0);
+            for (int i = 0; i < 12; i++) {
+                calendar.set(Calendar.MONTH,i);
+                dateList.add(calendar.getTime());
+            }
+        } catch (Exception e) {
+            return null;
+        }
+        return dateList;
+    }
+    public static Date getFirstThisYearDate() {
+        try {
+            return sdfShort.parse( getNowShortDate().substring(0, 4) + "0101");
+        } catch (Exception e) {
+            return null;
         }
     }
     public static String getFirstDayCurrentMonth() {
@@ -2832,7 +2911,14 @@
 //            System.out.println(DateUtil.afterMinutesDate(-5));
 
 
-            DateUtil.getBeforDays(new Date(),7);
+            List<Date> list =getThisMonthDateList();
+            for(Date d :list){
+                System.out.println(getPlusTime2(d));
+            }
+            List<Date> list1 =getThisYearMonthList();
+            for(Date d :list1){
+                System.out.println(getPlusTime2(d));
+            }
 
 //            Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss");
 //            Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss");
@@ -3042,6 +3128,12 @@
         calendar.add(Calendar.MONTH, month);//
         return calendar.getTime();
     }
+    public static Date addYearToDate(Date date, int year) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.YEAR, year);//
+        return calendar.getTime();
+    }
 
     public static String afterDateToStr(Integer days){
         Date date = new Date();
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
index a617b61..4e53960 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
@@ -19,6 +19,9 @@
     @ApiModelProperty(value = "鐢ㄦ埛鍚�")
     private String username;
 
+    @ApiModelProperty(value = "寰俊openId")
+    private String openid;
+
     @NotBlank(message = "瀵嗙爜涓嶈兘涓虹┖")
     @ApiModelProperty(value = "瀵嗙爜")
     private String password;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java b/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
index 1feeb42..1e9dfa6 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
@@ -79,8 +79,8 @@
     @ExcelColumn(name="鍏宠仈瀵硅薄鍚嶇О")
     private String objName;
 
-    @ApiModelProperty(value = "绫诲瀷 0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺")
-    @ExcelColumn(name="绫诲瀷 0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺")
+    @ApiModelProperty(value = "绫诲瀷 0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺 6鍏ュ洯鍘熷洜  7娴峰悍鑰冨嫟浠e姙")
+    @ExcelColumn(name="绫诲瀷 0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺  6鍏ュ洯鍘熷洜 7娴峰悍鑰冨嫟浠e姙")
     private Integer type;
 
     @ApiModelProperty(value = "绫诲瀷鎻忚堪")
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 b9b8bf2..f698a75 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
@@ -1,6 +1,7 @@
 package com.doumee.service.system.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -11,6 +12,7 @@
 import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.SmsEmail;
+import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.dto.LoginByOpenidDTO;
 import com.doumee.dao.system.dto.LoginDTO;
 import com.doumee.dao.system.dto.LoginPhoneDTO;
@@ -47,6 +49,8 @@
     @Lazy
     @Autowired
     private SystemUserService systemUserService;
+    @Autowired
+    private SystemUserMapper systemUserMapper;
 
     @Autowired
     private SmsEmailMapper smsEmailMapper;
@@ -83,7 +87,7 @@
         loginLog.setLoginTime(new Date());
         loginLog.setSystemVersion(systemVersion);
         loginLog.setIp(Utils.User_Client.getIP(request));
-        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+//        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
         loginLog.setPlatform(Utils.User_Client.getPlatform(request));
         loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
         loginLog.setOsInfo(Utils.User_Client.getOS(request));
@@ -124,7 +128,7 @@
         loginLog.setLoginUsername(dto.getUsername());
         loginLog.setLoginTime(new Date());
         loginLog.setSystemVersion(systemVersion);
-        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+//        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));
@@ -132,7 +136,7 @@
             loginLog.setOsInfo(Utils.User_Client.getOS(request));
         }
         loginLog.setServerIp(Utils.Server.getIP());
-        if(isDebug == null  || !isDebug  && dto.getCheckCode()){
+//        if(isDebug == null  || !isDebug  && dto.getCheckCode()){
             // 鏍¢獙楠岃瘉鐮�
             try {
                 captchaService.check(dto.getUuid(), dto.getCode());
@@ -143,7 +147,7 @@
                 systemLoginLogService.create(loginLog);
                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(),"瀵逛笉璧凤紝楠岃瘉鐮佷笉姝g‘锛�");
             }
-        }
+//        }
         // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
         SystemUser queryDto = new SystemUser();
         queryDto.setUsername(dto.getUsername());
@@ -160,6 +164,7 @@
         if( !StringUtils.equals(pwd, user.getPassword())){
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
         }
+        dealOpenIdBiz(user,dto.getOpenid());
         Company company = new Company();
         if(Objects.nonNull(user.getCompanyId())){
             company = companyMapper.selectById(user.getCompanyId());
@@ -177,8 +182,17 @@
         return  userInfo;
     }
 
-
-
+    private void dealOpenIdBiz(SystemUser user, String openid) {
+        if(StringUtils.isNotBlank(openid)){
+            //濡傛灉openId涓嶄负绌�,缁戝畾璇ョ敤鎴穙penid
+            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+                    .set(SystemUser::getOpenid,null)
+                    .eq(SystemUser::getType,user.getType()));
+            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+                    .set(SystemUser::getOpenid,openid)
+                    .eq(SystemUser::getId,user.getId()));
+        }
+    }
 
 
     @Override
@@ -187,7 +201,7 @@
         loginLog.setLoginUsername(dto.getPhone());
         loginLog.setLoginTime(new Date());
         loginLog.setSystemVersion(systemVersion);
-        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+//        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));
@@ -258,8 +272,9 @@
         SystemLoginLog loginLog = new SystemLoginLog();
         loginLog.setLoginUsername(dto.getUsername());
         loginLog.setLoginTime(new Date());
+        loginLog.setReason("銆愬叕浼楀彿銆戝徃鏈虹鐧婚檰锛歰penid="+dto.getOpenid());
         loginLog.setSystemVersion(systemVersion);
-        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+//        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));
@@ -280,6 +295,7 @@
         if( !StringUtils.equals(pwd, user.getPassword())){
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
         }
+        dealOpenIdBiz(user,dto.getOpenid());
         Company company = new Company();
         if(Objects.nonNull(user.getCompanyId())){
             company = companyMapper.selectById(user.getCompanyId());
@@ -298,7 +314,7 @@
         SystemLoginLog loginLog = new SystemLoginLog();
         loginLog.setLoginTime(new Date());
         loginLog.setSystemVersion(systemVersion);
-        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+//        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
         loginLog.setServerIp(Utils.Server.getIP());
 
         // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
diff --git a/server/system_timer/src/main/resources/application.yml b/server/system_timer/src/main/resources/application.yml
index aac855a..8910d6c 100644
--- a/server/system_timer/src/main/resources/application.yml
+++ b/server/system_timer/src/main/resources/application.yml
@@ -35,7 +35,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/HkNoticeTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/HkNoticeTimerController.java
new file mode 100644
index 0000000..5059704
--- /dev/null
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/HkNoticeTimerController.java
@@ -0,0 +1,40 @@
+package com.doumee.api;
+
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.service.business.VisitsService;
+import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "娴峰悍浠e姙瀹氭椂鎶撳彇鎺ュ彛")
+@RestController
+@RequestMapping("/timer/hkNotice")
+public class HkNoticeTimerController extends BaseController {
+    @Autowired
+    private HkSyncVisitServiceImpl hkSyncVisitService;
+    @Autowired
+    private HkSyncVisitFromHKServiceImpl hkSyncVisitFromHKService;
+    @Autowired
+    private VisitsService visitsService;
+
+    @ApiOperation("寮�鍚畾鏃舵煡璇㈡渶鏂颁汉鍛樹唬鍔炴暟鎹姸鎬�")
+    @GetMapping("/getNoticeList")
+    public ApiResponse getNoticeList() {
+        hkSyncVisitService.syncVisitData();
+        return ApiResponse.success("寮�鍚畾鏃朵笅鍙戣瀹㈤绾︾敵璇锋垚鍔�");
+    }
+
+
+}
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java
index 19131de..d40d16b 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java
@@ -2,21 +2,22 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.service.HKService;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.HttpsUtil;
 import com.doumee.core.wx.WXConstant;
 import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
-import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
 import com.doumee.service.system.SystemDictDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.mgt.DefaultSecurityManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -45,7 +46,27 @@
     @ApiOperation("寮�鍚畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken")
     @GetMapping("/updateWxAccessToken")
     public ApiResponse updateWxAccessToken() {
-        DefaultSecurityManager securityManager = new DefaultSecurityManager();
+       DefaultSecurityManager securityManager = new DefaultSecurityManager();
+        SecurityUtils.setSecurityManager(securityManager);
+        String token =null;
+        BaseResponse<String> result = HKService.wxAccessToken(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_WXTOKEN_CONFIGID).getCode(),systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_WXTOKEN_TAGID).getCode());
+        if(StringUtils.equals(result.getCode(), HKConstants.RESPONSE_SUCCEE) ){
+            token= result.getData();
+            SystemDictData systemDictData =  systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN);
+            if(!Objects.isNull(systemDictData)){
+                systemDictData.setCode(token);
+                systemDictData.setUpdateTime(new Date());
+                systemDictDataService.updateById(systemDictData);
+            }
+        }else{
+            return ApiResponse.success("寮�鍚畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken澶辫触");
+        }
+        return ApiResponse.success("寮�鍚畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken鎴愬姛");
+    }
+    @ApiOperation("寮�鍚畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken")
+    @GetMapping("/updateWxAccessTokenOrigin")
+    public ApiResponse updateWxAccessTokenOrigin() {
+       DefaultSecurityManager securityManager = new DefaultSecurityManager();
         SecurityUtils.setSecurityManager(securityManager);
 
         String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode();
diff --git a/server/visits/admin_timer/src/main/resources/application.yml b/server/visits/admin_timer/src/main/resources/application.yml
index 528dfe4..d1672e0 100644
--- a/server/visits/admin_timer/src/main/resources/application.yml
+++ b/server/visits/admin_timer/src/main/resources/application.yml
@@ -31,7 +31,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
index fb6eeb0..04f82da 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -33,6 +33,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.Cacheable;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -60,6 +61,8 @@
     private HkSyncPrivilegeServiceImpl hkSyncPrivilegeService;
     @Autowired
     private HkSyncPushServiceImpl hkSyncPushService;
+    @Autowired
+    private HkSyncNoticeServiceImpl hkSyncNoticeService;
     @Autowired
     private HkSyncLoginAuthServiceImpl hkSyncLoginAuthService;
 
@@ -231,11 +234,11 @@
      * @return
      */
     @ApiOperation(value = "鑾峰彇瀹夐槻骞冲彴绯荤粺鍏嶅瘑鑿滃崟璋冩暣鍦板潃" )
-    @GetMapping("/getHkMenuLink")
+    @PostMapping("/getHkMenuLink/{type}")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type",example = "0",value = "鑿滃崟绫诲瀷", required = true),
     })
-    public ApiResponse<String> getHkMenuLink(Integer type,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+    public ApiResponse<String> getHkMenuLink(@PathVariable Integer type,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         LoginUserInfo loginUserInfo = this.getLoginUser(token);
         String hkToken = DESUtil.generateTokenToHk(loginUserInfo.getUsername(),Integer.valueOf(
           systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_TOKEN_VALIDITY).getCode()
@@ -267,7 +270,12 @@
     }
 
 
-
+    @ApiOperation("銆愭捣搴枫�戜唬鍔炴秷鎭暟鎹泦鍚堝鎺ュ鐞嗘帴鍙�")
+    @PostMapping("/notice/getList")
+    public ApiResponse getNoticeList( HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token ){
+        String result = hkSyncNoticeService.syncHkNotices(this.getLoginUser(token).getUsername());
+        return ApiResponse.success(result);
+    }
 
 
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java
index 2678112..a88c653 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformJobCloudController.java
@@ -12,6 +12,7 @@
 import com.doumee.dao.web.reqeust.JobDetailDTO;
 import com.doumee.dao.web.reqeust.SignInDTO;
 import com.doumee.service.business.PlatformJobService;
+import com.doumee.service.business.third.WmsService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -32,6 +33,8 @@
 
     @Autowired
     private PlatformJobService platformJobService;
+    @Autowired
+    private WmsService wmsService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -56,6 +59,13 @@
         platformJobService.deleteByIdInBatch(this.getIdList(ids));
         return ApiResponse.success(null);
     }
+    @ApiOperation("鎵归噺鏇存柊wms鍚堝悓鎬昏繍杈撻噺")
+    @GetMapping("/updateTotalNum")
+    @CloudRequiredPermission("business:platformjob:update")
+    public ApiResponse updateTotalNum(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        wmsService.computjobTotalNum(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
 
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java
index 751d022..e1ade6d 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java
@@ -17,6 +17,7 @@
 import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.VisitsService;
+import com.doumee.service.business.impl.hksync.HkSyncNoticeServiceImpl;
 import com.doumee.service.system.NoticesService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -46,6 +47,8 @@
     @Autowired
     private VisitsService visitsService;
 
+    @Autowired
+    private HkSyncNoticeServiceImpl hkSyncNoticeService;
     @Autowired
     private NoticesService noticesService;
 
@@ -90,6 +93,8 @@
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "isDetail", value = " 鏄惁鏌ヨ璇︾粏 1鏄紱0鍚�", required = true),
     })
     public ApiResponse<InternalHomeVO> taskCenterHead(@RequestParam Integer isDetail,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        hkSyncNoticeService.syncHkNotices(loginUserInfo.getUsername());
         return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeDataH5(getLoginUser(token).getMemberId(),isDetail));
     }
 
@@ -98,6 +103,7 @@
     @PostMapping("/taskCenterHeadPC")
     public ApiResponse<InternalHomeVO> taskCenterHeadPC(@RequestBody NoticesDTO  noticesDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         LoginUserInfo loginUserInfo = getLoginUser(token);
+        hkSyncNoticeService.syncHkNotices(loginUserInfo.getUsername());
         noticesDTO.setMemberId(loginUserInfo.getMemberId());
         noticesDTO.setUserId(loginUserInfo.getId());
         return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeDataPC(noticesDTO));
@@ -138,6 +144,10 @@
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "鏌ヨ绫诲瀷锛�1=鍦ㄥ洯浜烘暟锛�2=鎶ヨ〃鏁版嵁锛�3=寰呭姙浜嬮」锛�4=瓒呮椂棰勮", required = true),
     })
     public ApiResponse<PCWorkPlatformDataVO> pCWorkPlatformData (@RequestParam Integer queryType, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        if(queryType==Constants.THREE){
+            //鍚屾娴峰悍浠e姙鏁版嵁
+            hkSyncNoticeService.syncHkNotices(this.getLoginUser(token).getUsername());
+        }
         PCWorkPlatformDataVO pcWorkPlatformDataVO = visitsService.getPcWorkPlatformData(queryType,getLoginUser(token));
         return ApiResponse.success("鏌ヨ鎴愬姛",pcWorkPlatformDataVO);
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java
index ffe7792..99f287c 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/WmsPushCloudController.java
@@ -42,6 +42,7 @@
         WmsBaseResponse result =null;
         try {
             result = wmsService.inboundNotice(param);
+            wmsService.computjobTotalNum(param.getJobIdList());
         }catch (BusinessException e){
             log.error("銆怶MS銆戞帹閫佸叆搴撳崟閫氱煡浠诲姟===澶辫触锛�"+e.getMessage());
             success = Constants.ONE;
@@ -64,6 +65,7 @@
         WmsBaseResponse result =null;
         try {
             result = wmsService.outboundNotice(param);
+            wmsService.computjobTotalNum(param.getJobIdList());
         }catch (BusinessException e){
             log.error("銆怶MS銆戞帹閫佸嚭搴撳崟閫氱煡浠诲姟===澶辫触锛�"+e.getMessage());
             success = Constants.ONE;
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java
index 04171cd..4fae75e 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java
@@ -9,17 +9,13 @@
 import com.doumee.service.business.third.BoardService;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Random;
 
 /**
  * Created by IntelliJ IDEA.
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
index 29baf7c..e727bd7 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
@@ -1,32 +1,19 @@
 package com.doumee.cloud.board;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.LoginNoRequired;
-import com.doumee.core.haikang.model.HKConstants;
-import com.doumee.core.haikang.model.param.BaseResponse;
-import com.doumee.core.haikang.model.param.request.FireDevStatusTotalRequest;
-import com.doumee.core.haikang.model.param.respose.FireDevStatusListResponse;
-import com.doumee.core.haikang.model.param.respose.MonthDataByMeterTypeResponse;
-import com.doumee.core.haikang.service.HKService;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.utils.Constants;
-import com.doumee.dao.business.PlatformLogMapper;
-import com.doumee.dao.business.model.PlatformLog;
 import com.doumee.dao.web.response.platformReport.*;
 import com.doumee.service.business.third.BoardService;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Random;
 
 /**
  * Created by IntelliJ IDEA.
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java
new file mode 100644
index 0000000..7db4ebd
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java
@@ -0,0 +1,150 @@
+package com.doumee.cloud.board;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.join.PlatformJobJoinMapper;
+import com.doumee.dao.business.model.Platform;
+import com.doumee.dao.business.model.PlatformBooks;
+import com.doumee.dao.business.model.PlatformJob;
+import com.doumee.dao.business.model.PlatformWmsJob;
+import com.doumee.dao.web.reqeust.CarsJobAndContractDTO;
+import com.doumee.dao.web.response.platformReport.*;
+import com.doumee.service.business.third.BoardService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "銆愮湅鏉垮ぇ灞忋�戝洯鍖虹墿娴佽繍琛岃皟搴︾湅鏉跨湡瀹�")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/platformJobRunAct")
+public class PlatformJobRunActController extends BaseController {
+
+    @Autowired
+    private PlatformJobJoinMapper platformJobJoinMapper;
+    @Autowired
+    private BoardService boardService;
+
+    @LoginNoRequired
+    @ApiOperation("鏌ヨ鏈湀銆佹湰骞寸殑绱鍑哄簱閲�,鍑哄叆搴撲换鍔¢噺銆佸嚭鍏ュ簱浣滀笟鏁堢巼缁熻鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<PlatformJobRunBoardNewVO> centerData() {
+        PlatformJobRunBoardNewVO data = boardService.platformJobCenterData();
+        return ApiResponse.success(data);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("杩愯緭浠诲姟鍒嗘瀽")
+    @GetMapping("/transportMeasure")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "鏌ヨ绫诲瀷锛�0=鍛紱1=鏈堬紱2=骞达紱", required = true),
+    })
+    public ApiResponse<List<TransportMeasureVO>> transportMeasure(@RequestParam Integer queryType) {
+        List<TransportMeasureVO> list = boardService.transportMeasure(queryType);
+        return ApiResponse.success(list);
+    }
+    @LoginNoRequired
+    @ApiOperation("姹借溅鐘舵�併�佺粡绾害闆嗗悎鏁版嵁")
+    @GetMapping("/carsList")
+    public ApiResponse<BoardCarsListVO> carsList() {
+        BoardCarsListVO data = boardService.platformJobCarsList();
+        return ApiResponse.success(data);
+    }
+    @LoginNoRequired
+    @ApiOperation("鏍规嵁杞︾墝鍙锋煡璇綔涓氫俊鎭拰鍚堝悓淇℃伅闆嗗悎")
+    @PostMapping("/getCarsJobDetails")
+    public ApiResponse<CarsJobAndContractVO> getCarsJobDetails(@RequestBody CarsJobAndContractDTO param) {
+        CarsJobAndContractVO data = boardService.getCarsJobDetails(param);
+        return ApiResponse.success(data);
+    }
+    @LoginNoRequired
+    @ApiOperation("褰撴棩杩愯緭浠诲姟")
+    @GetMapping("/platformJobList")
+    public ApiResponse<List<PlatformJob>> platformJobList() {
+        List<PlatformJob> list =  platformJobJoinMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAll(PlatformJob.class)
+                        .selectAs(PlatformBooks::getId,PlatformJob::getBookId)
+                        .selectAs(Platform::getName,PlatformJob::getPlatformName)
+                        .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
+                        .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName)
+                        .selectAs(PlatformWmsJob::getRepertotyAddress,PlatformJob::getRepertotyAddress)
+                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
+                        .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode)
+                        .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .in(PlatformJob::getStatus
+                                ,Constants.PlatformJobStatus.WAIT_CALL.getKey()
+                                ,Constants.PlatformJobStatus.CALLED.getKey()
+                                ,Constants.PlatformJobStatus.IN_WAIT.getKey()
+                                ,Constants.PlatformJobStatus.WORKING.getKey()
+                                ,Constants.PlatformJobStatus.TRANSFERING.getKey()
+                                ,Constants.PlatformJobStatus.EXCEPTION.getKey()
+                                ,Constants.PlatformJobStatus.DONE.getKey()
+                        )
+                        .orderByDesc(PlatformJob::getSignNum)
+                        .last(" limit 20 ")
+        );
+        return ApiResponse.success(list);
+    }
+    @LoginNoRequired
+    @ApiOperation("鍑哄叆搴撲换鍔¢噺")
+    @GetMapping("/jobData")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "鏌ヨ绫诲瀷锛�0=鍑哄簱锛�1=鍏ュ簱锛�", required = true),
+    })
+    public ApiResponse<JobDataVO> jobData(@RequestParam Integer queryType) {
+        Random random = new Random();
+        JobDataVO jobDataVO = new JobDataVO();
+        jobDataVO.setPlanTaskNum(BigDecimal.valueOf(random.nextInt(1000)));
+        jobDataVO.setFinishTaskNum(BigDecimal.valueOf(jobDataVO.getPlanTaskNum().intValue()));
+        return ApiResponse.success(jobDataVO);
+    }
+    @LoginNoRequired
+    @ApiOperation("浠婃棩鍏ュ簱閲忕粺璁�")
+    @GetMapping("/totalInList")
+    public ApiResponse<List<GeneralVO>> totalInList() {
+        List<GeneralVO> list = new ArrayList<>();
+        for (int i = 1; i < 4; i++) {
+            Random random = new Random();
+            GeneralVO data = new GeneralVO();
+            data.setName("鍘傚尯鍚嶇О_"+i);
+            data.setNum(BigDecimal.valueOf(random.nextInt(1000)));
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("搴撳瓨鎯呭喌")
+    @GetMapping("/stockList")
+    public ApiResponse< BoardStockListVO > stockList() {
+         BoardStockListVO list =  boardService.stockList();
+        return ApiResponse.success(list);
+    }
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java
index 131ee88..a1533a7 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java
@@ -88,7 +88,7 @@
         }
         for (String str:dayList) {
             TransportMeasureVO data = new TransportMeasureVO();
-            data.setPlanDate(str);
+            data.setPlanDateStr(str);
             data.setPlanTimes(random.nextInt(200));
             data.setPlanTaskNum(new BigDecimal(random.nextInt(1000)));
             data.setFinishTaskNum(new BigDecimal(data.getPlanTaskNum().intValue()));
@@ -96,9 +96,6 @@
         }
         return ApiResponse.success(list);
     }
-
-
-
 
 
     @LoginNoRequired
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java
index 0ecd418..adb8c82 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java
@@ -1,15 +1,12 @@
 package com.doumee.cloud.board;
 
 import com.doumee.api.BaseController;
-import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.core.haikang.model.param.respose.PageRegionInfoResponse;
-import com.doumee.core.haikang.model.param.respose.RuleEventSearchResponse;
 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.admin.response.PCWorkPlatformDataVO;
 import com.doumee.dao.business.model.Visits;
 import com.doumee.dao.web.response.platformReport.*;
 import com.doumee.service.business.VisitsService;
@@ -19,7 +16,6 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
index 2ac7672..9bedaec 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
@@ -10,6 +10,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.model.VisitReason;
 import com.doumee.dao.business.model.Visits;
 import com.doumee.dao.web.reqeust.CheckVisitedDTO;
@@ -32,6 +33,7 @@
 import org.springframework.web.server.ServerWebExchange;
 
 import javax.validation.Valid;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -71,6 +73,21 @@
     }
 
 
+    @LoginNoRequired
+    @ApiOperation(value = "testSendNotice", notes = "testSendNotice")
+    @GetMapping("/testSendNotice")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "openid", value = "openid", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "token", value = "token", required = true),
+    })
+    public ApiResponse wxAuthorize(@RequestParam String openid,String token) {
+        WxPlatNotice wxPlatNotice = new WxPlatNotice();
+        List<String> idList = Arrays.asList(openid.split(","));
+        wxPlatNotice.testSendNotice(idList,token);
+        return ApiResponse.success("鏌ヨ鎴愬姛");
+    }
+
+
     @ApiOperation(value = "鏌ヨ琚闂汉淇℃伅", notes = "鏌ヨ琚闂汉淇℃伅")
     @PostMapping("/getVisitedMember")
     public ApiResponse<List<MemberVO>> getVisitedMember(@Valid @RequestBody CheckVisitedDTO checkVisitedDTO) {
diff --git a/server/visits/dmvisit_admin/src/main/resources/application.yml b/server/visits/dmvisit_admin/src/main/resources/application.yml
index a375639..b3bbf53 100644
--- a/server/visits/dmvisit_admin/src/main/resources/application.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/application.yml
@@ -34,7 +34,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300
diff --git a/server/visits/dmvisit_screen/src/main/resources/application.yml b/server/visits/dmvisit_screen/src/main/resources/application.yml
index 520ec84..a768f65 100644
--- a/server/visits/dmvisit_screen/src/main/resources/application.yml
+++ b/server/visits/dmvisit_screen/src/main/resources/application.yml
@@ -37,7 +37,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpTool.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpTool.java
index 17067e0..2e9c374 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpTool.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpTool.java
@@ -19,9 +19,7 @@
 import com.doumee.core.utils.HttpsUtil;
 import com.doumee.dao.business.InterfaceLogMapper;
 import com.doumee.dao.business.model.InterfaceLog;
-import com.doumee.dao.business.model.Member;
 import com.doumee.service.business.InterfaceLogService;
-import com.github.pagehelper.PageInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java
index d40397e..9a3107b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java
@@ -6,7 +6,6 @@
 import lombok.Data;
 
 import java.util.Date;
-import java.util.List;
 
 /**
  * 鍒嗙被淇℃伅琛�
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 da546e4..8f197ab 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
@@ -39,11 +39,13 @@
      * 3銆佽兘绠′腑蹇冿細ngzx
      */
     public interface MenuPageId{
+        String[] componentIds = new String[]{"Infovision iPark Platform","dfe"};
         String afzx = "afzx";//瀹夐槻涓績
         String xkzx = "xkzx";//娑堟帶涓績
         String ngzx = "ngzx";//鑳界涓績
         String jsc = "jsc";//鐗╀笟鍚庡嫟
         String kqgzt = "attendance_workstand";//鑰冨嫟绠$悊
+        String kqdbcl = "process_apply";//鑰冨嫟浠e姙澶勭悊
     }
 
     /**
@@ -126,7 +128,8 @@
         String[] iccmAppointmentRecords= new String[]{"/api/iccm/v2/appointment/records","iccm鏌ヨ宸查绾︾櫥璁�"};//iccm鏌ヨ宸查绾︾櫥璁�
         String[] wxAccessToken= new String[]{"/api/wx/v1/oa/get/accessToken","鏍规嵁寰俊鍏紬鍙蜂俊鎭幏鍙朅ccessToken"};//1.9.1鏍规嵁寰俊鍏紬鍙蜂俊鎭幏鍙朅ccessToken
         String[] getWxConfig= new String[]{"/api/wx/v1/oa/get/config","鏍规嵁閰嶇疆寰俊鍏紬鍙风紪鍙锋煡璇㈠井淇″叕浼楀彿淇℃伅"};//鏍规嵁閰嶇疆寰俊鍏紬鍙风紪鍙锋煡璇㈠井淇″叕浼楀彿淇℃伅
-        String[] goMenuUrl= new String[]{"/xauthplus-plugin/thirdLogin?type=third&componentId=Infovision iPark Platform&componentMenuId=${menuId}&token=${token}","宸ヤ綔鍙拌彍鍗曡烦杞湴鍧�"};
+        String[] goMenuUrl= new String[]{"/xauthplus-plugin/thirdLogin?type=third&componentId=${componentId}&componentMenuId=${menuId}&token=${token}","宸ヤ綔鍙拌彍鍗曡烦杞湴鍧�"};
+//        String[] goNoticeMenuUrl= new String[]{"/xauthplus-plugin/thirdLogin?type=third&componentId=dfe&componentMenuId={menuId}&token=${token}","宸ヤ綔鍙拌�冨嫟浠e姙澶勭悊璺宠浆鍦板潃"};
         String[] nhEventPageList= new String[]{"/api/ecm/warning/event/v1/pageList","鍒嗛〉鑾峰彇鍛婅浜嬩欢"};//鍒嗛〉鑾峰彇鍛婅浜嬩欢
         String[] nhRegionDataRanking= new String[]{"/api/ecm/v1/energy/regionDataRanking","鏍规嵁鏃堕棿缁村害鑾峰彇鍖哄煙鐢ㄩ噺鎺掑悕"};//1.8.5鏍规嵁鏃堕棿缁村害鑾峰彇鍖哄煙鐢ㄩ噺鎺掑悕
         String[] nhEnergyDistribution= new String[]{"/api/ecm/v1/energy/energyDistribution","鏍规嵁鏃堕棿缁村害鑾峰彇鑳借�楀垎甯�"};// 鏍规嵁鏃堕棿缁村害鑾峰彇鑳借�楀垎甯�
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 e033aac..dc5e088 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
@@ -395,6 +395,13 @@
 		saveInterfaceLog(JSONObject.toJSONString(body),result,path,pathStr[1]);
 		return result;
 	}
+	public static String startDoGetStringArtemisJson(String[] pathStr,Map<String,String> body ){
+		Map<String, String> path = getPath(pathStr[0]);
+		Map<String, String> header = new HashMap<>();
+		String result = ArtemisHttpUtil.doGetArtemis(path, body, null, "application/json",  header);
+		saveInterfaceLog(JSONObject.toJSONString(body),result,path,pathStr[1]);
+		return result;
+	}
 	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<>();
@@ -574,10 +581,13 @@
 	 *	鏍规嵁寰俊鍏紬鍙蜂俊鎭幏鍙朅ccessToken
 	 * @return
 	 */
-	public static String wxAccessToken(String configId,String tagId) {
-		String[] wxAccessToken= HKConstants.InterfacePath.wxAccessToken;
-		wxAccessToken[0] = HKConstants.InterfacePath.wxAccessToken+"?tagId="+tagId+"&configId"+configId;
-		return startDoPostStringArtemis(wxAccessToken,"");
+	public static String wxAccessToken(HashMap<String,String> params ) {
+//		String[] wxAccessToken= new String[2];
+//		String url = HKConstants.InterfacePath.wxAccessToken[0]+"?tagId="+tagId+"&configId="+configId;
+//		String t = HKConstants.InterfacePath.wxAccessToken[1];
+//		wxAccessToken[0] = url;
+//		wxAccessToken[1] = t;
+		return startDoGetStringArtemisJson(HKConstants.InterfacePath.wxAccessToken,params);
 	}
 	/**
 	 *	鏍规嵁閰嶇疆寰俊鍏紬鍙风紪鍙锋煡璇㈠井淇″叕浼楀彿淇℃伅
@@ -994,9 +1004,9 @@
 		return startDoPostStringArtemis(HKConstants.InterfacePath.applyST,body);
 	}
 
-	public static String getMenuUrl(String menuId, String token) {
+	public static String getMenuUrl(String componentId,String menuId, String token) {
 		String url = HKConstants.InterfacePath.goMenuUrl[0];
-		url = url.replace("${menuId}", menuId).replace("${token}",token);
+		url = url.replace("${componentId}",componentId).replace("${menuId}", menuId).replace("${token}",token);
 		return  url;
 	}
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsPageResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsPageResponse.java
new file mode 100644
index 0000000..c7755a5
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsPageResponse.java
@@ -0,0 +1,18 @@
+package com.doumee.core.haikang.model.cars;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BaseCarsPageResponse<T> {
+
+  private int total;//	number	False	鏌ヨ鏁版嵁璁板綍鎬绘暟
+  private int totalPages;//	鎬婚〉鏁�	Integer
+  private int  currentPage	;//褰撳墠椤�	Integer
+  private int  totalRecords;//	鎬昏褰曟潯鏁�	Long
+  private int  startIndex	;//璁板綍寮�濮嬪簭鍙�	Long
+  @JSONField(name="results",alternateNames = {"rows","list"})
+  private List<T> results	;// object[]	False	鏉冮檺缁勫璞″垪琛�
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsResponse.java
new file mode 100644
index 0000000..a515ba2
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsResponse.java
@@ -0,0 +1,17 @@
+package com.doumee.core.haikang.model.cars;
+
+import lombok.Data;
+
+@Data
+public class BaseCarsResponse<T> {
+
+    private T data;
+    /**
+     *閿欒淇℃伅鎻忚堪锛屼粎status涓嶄负0鏃舵湁鍊�
+     */
+    private String msg;
+    /**
+     * 璇锋眰缁撴灉鐘舵�佸�硷紝 鎴愬姛涓�0锛屽叾浠栧�艰鏌ョ湅闄勫綍杩斿洖鐮佺姸鎬佽〃銆�
+     */
+    private Integer status;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsDeviceRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsDeviceRequest.java
new file mode 100644
index 0000000..ea45f77
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsDeviceRequest.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.cars.request;
+
+import lombok.Data;
+
+/**
+ * 璁惧鍒楄〃璇锋眰淇℃伅
+ */
+@Data
+public class CarsDeviceRequest  {
+
+    private String   productKey	;//璁惧鍨嬪彿绉橀挜	String	鏃�	鍚�
+    private Integer   pageSize;//	椤甸潰澶у皬	Integer	1000	鍚�
+    private Integer   pageNo	;//褰撳墠椤�	Integer	1
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsGpsRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsGpsRequest.java
new file mode 100644
index 0000000..cdd615c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/request/CarsGpsRequest.java
@@ -0,0 +1,18 @@
+package com.doumee.core.haikang.model.cars.request;
+
+import lombok.Data;
+
+/**
+ * GPS鍒楄〃璇锋眰淇℃伅
+ */
+@Data
+public class CarsGpsRequest  {
+
+    private String  deviceCode	;//璁惧缁堢鎵嬫満鍙�	String	鏃�	鏄�
+    private String   startTime	;//寮�濮嬫椂闂磞yyy-MM-dd HH:mm:ss	String	鏃�	鏄�
+    private String    endTime	;//缁撴潫鏃堕棿yyyy-MM-dd HH:mm:ss	String	鏃�	鏄�
+    private Boolean   filterInvalidGps	;//鏄惁杩囨护鏃犳晥鐨凣PS	boolean	true	鍚�
+    private Boolean  filterSupplementGps	;//鏄惁杩囨护琛ユ姤鐨凣PS	boolean	true	鍚�
+    private Integer   pageSize;//	椤甸潰澶у皬	Integer	1000	鍚�
+    private Integer   pageNo	;//褰撳墠椤�	Integer	1
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceChannelResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceChannelResponse.java
new file mode 100644
index 0000000..10b096c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceChannelResponse.java
@@ -0,0 +1,16 @@
+package com.doumee.core.haikang.model.cars.response;
+
+import lombok.Data;
+
+
+/**
+ * 璁惧閫氶亾淇℃伅
+ * @param <T>
+ */
+@Data
+public class CarsDeviceChannelResponse<T> {
+    private String  terminalID;//	缁堢鎵嬫満鍙�	String
+    private String   channelName;//	閫氶亾鍙峰悕绉�	String
+    private Integer    channelNum;//	閫氶亾缂栧彿
+    private Integer    channelType;//	閫氶亾鍙风被鍨嬶紝0 瑙嗛閫氶亾锛�1 闊抽閫氶亾
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceDetaisResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceDetaisResponse.java
new file mode 100644
index 0000000..2eb08b9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceDetaisResponse.java
@@ -0,0 +1,23 @@
+package com.doumee.core.haikang.model.cars.response;
+
+import lombok.Data;
+
+/**
+ * GPS鍒楄〃鍗曞厓淇℃伅
+ */
+@Data
+public class CarsDeviceDetaisResponse {
+    private Integer gpsValid	;//瀹氫綅鐘舵�侊紝0 鏃犳晥锛� 1 鏈夋晥
+    private Double  longitude	;//缁忓害	Double
+    private Double  latitude;//	绾害
+    private Double  altitude	;//娴锋嫈楂樺害
+    private Float   speed;//	閫熷害
+    private Integer direction;//	鏂瑰悜瑙�	Integer
+    private String  collectTime	;//GPS涓婃姤鏃堕棿yyyy-MM-dd HH:mm:ss	String
+    private String  accStatus;//	acc鐘舵�� 0锛氬叧闂� 1锛氬紑鍚�	String
+    private Integer supplementSign;//	琛ユ姤鏍囪瘑锛�1锛氳ˉ鎶ワ紱0锛氭甯镐笂鎶ワ級	Integer
+    private String  createTime;//	绯荤粺鏀跺埌GPS鏃堕棿yyyy-MM-dd HH:mm:ss	String
+    private Integer status;//璁惧鐘舵�� 0锛氱绾匡紱1锛氬湪绾匡紱2锛氫紤鐪�
+    private String plateNum;//杞︾墝鍙�
+    private String  terminalID;//	缁堢鎵嬫満鍙�	String
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceResponse.java
new file mode 100644
index 0000000..5fbcdb0
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceResponse.java
@@ -0,0 +1,25 @@
+package com.doumee.core.haikang.model.cars.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 璁惧鍒楄〃鍗曞厓淇℃伅
+ * @param <T>
+ */
+@Data
+public class CarsDeviceResponse<T> {
+
+    private String  terminalID;//	缁堢鎵嬫満鍙�	String
+    private String  productKey	;//璁惧鎵�灞炲瀷鍙风殑浜у搧瀵嗛挜	String
+    private String  createTime;//	娣诲姞鏃堕棿	String
+    private String   deviceStatus;//	璁惧鐘舵�� 0锛氱绾匡紱1锛氬湪绾匡紱2锛氫紤鐪�	Integer
+    private String  language	;//鍥轰欢璇█锛欳N/EN	String
+    private String  organizeName;//	缁勭粐鍚嶇О	Sring
+    private String  organizeId	;//缁勭粐id	Integer
+    private String version	;//杞欢鐗堟湰	String
+    private String plateNum	;//杞︾墝鍙�	String
+    private List<CarsDeviceChannelResponse> deviceChannelList;//	璁惧閫氶亾鍒楄〃锛岃缁嗗弬鏁拌*琛�2
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsGpsResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsGpsResponse.java
new file mode 100644
index 0000000..2f5642f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsGpsResponse.java
@@ -0,0 +1,25 @@
+package com.doumee.core.haikang.model.cars.response;
+
+import lombok.Data;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+/**
+ * GPS鍒楄〃鍗曞厓淇℃伅
+ * @param <T>
+ */
+@Data
+public class CarsGpsResponse<T> {
+
+    private Integer    gpsValid	;//瀹氫綅鐘舵�侊紝0 鏃犳晥锛� 1 鏈夋晥
+    private Double    longitude	;//缁忓害	Double
+    private Double    latitude;//	绾害
+    private Double   altitude	;//娴锋嫈楂樺害
+    private Float    speed;//	閫熷害
+    private Integer    direction;//	鏂瑰悜瑙�	Integer
+    private String   collectTime	;//GPS涓婃姤鏃堕棿yyyy-MM-dd HH:mm:ss	String
+    private String    accStatus;//	acc鐘舵�� 0锛氬叧闂� 1锛氬紑鍚�	String
+    private Integer    supplementSign;//	琛ユ姤鏍囪瘑锛�1锛氳ˉ鎶ワ紱0锛氭甯镐笂鎶ワ級	Integer
+    private String    createTime;//	绯荤粺鏀跺埌GPS鏃堕棿yyyy-MM-dd HH:mm:ss	String
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/GetTodoListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/GetTodoListRequest.java
index 5c94e1a..e1b81b7 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/GetTodoListRequest.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/GetTodoListRequest.java
@@ -6,12 +6,12 @@
 public class GetTodoListRequest {
 
     private String  comId;//		Query	String	false	缁勪欢id
-    private int  pageSize	;//	Query	Number	false	鍒嗛〉澶у皬锛�1~999锛�
-    private int cascade	;//	Query	Number	false	绾ц仈鏁版嵁鏉ユ簮0:涓嬬骇骞冲彴鏉ユ簮锛�1:闈炰笅绾у钩鍙版潵婧愶紝涓虹┖榛樿鏌ヨ鎵�鏈夋暟鎹潵婧�
+    private Integer  pageSize	;//	Query	Number	false	鍒嗛〉澶у皬锛�1~999锛�
+    private Integer cascade	;//	Query	Number	false	绾ц仈鏁版嵁鏉ユ簮0:涓嬬骇骞冲彴鏉ユ簮锛�1:闈炰笅绾у钩鍙版潵婧愶紝涓虹┖榛樿鏌ヨ鎵�鏈夋暟鎹潵婧�
     private String  messageId;//		Query	String	false	messageId
-    private int  pageNo;//		Query	Number	false	褰撳墠椤电爜(1~100000)
+    private Integer  pageNo;//		Query	Number	false	褰撳墠椤电爜(1~100000)
     private String  localeType;//		Query	String	false	璇█绫诲瀷zh_CN:涓枃en_US:鑻辨枃
-    private int status;//		Query	Number	false	涓氬姟鐘舵�佺被鍨�,1-寰呭鐞嗭紝2-瀹℃壒涓紝3-宸插畬鎴愶紝4-鎶勯�佹垜锛�5-鎴戝鎵�,榛樿寰呭鐞�
+    private Integer status;//		Query	Number	false	涓氬姟鐘舵�佺被鍨�,1-寰呭鐞嗭紝2-瀹℃壒涓紝3-宸插畬鎴愶紝4-鎶勯�佹垜锛�5-鎴戝鎵�,榛樿寰呭鐞�
     private String userId;//		Query	String	false	鐢ㄦ埛id
     private String clientType;//		Query	String	false	璋冪敤鏂圭被鍨�0:鍏朵粬锛�1锛欰PP锛屼负绌烘椂榛樿涓�1锛�2锛氶棬鎴�
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/GetTodoListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/GetTodoListResponse.java
index bf7f72f..e5b710b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/GetTodoListResponse.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/GetTodoListResponse.java
@@ -10,7 +10,7 @@
       private String comId;//	String	false	缁勪欢鏍囪瘑
       private String moduleId;//	String	false	妯″潡鏍囪瘑
       private String msgTitle;//	String	false	淇℃伅鏍囬
-      private String msgStatus	;//String	false	淇℃伅鐘舵��
+      private String msgStatus	;//String	false	淇℃伅鐘舵�� 涓氬姟鐘舵�佺被鍨�,1-寰呭鐞嗭紝2-瀹℃壒涓紝3-宸插畬鎴愶紝4-鎶勯�佹垜锛�5-鎴戝鎵�,榛樿寰呭鐞�
       private String msgStatusStr;//	String	false	淇℃伅鐘舵�佸悕绉�
       private String msgCreateTime;//	String	false	娑堟伅鍒涘缓鏃堕棿,浼樺厛浣跨敤msgCreateTimeIso
       private String msgCreateTimeIso;//	String	false	娑堟伅鍒涘缓鏃堕棿,ISO鏃堕棿
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKCarOpenService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKCarOpenService.java
new file mode 100644
index 0000000..648f197
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKCarOpenService.java
@@ -0,0 +1,236 @@
+package com.doumee.core.haikang.service;
+
+	import com.alibaba.fastjson.JSONObject;
+	import com.alibaba.fastjson.TypeReference;
+	import com.doumee.core.haikang.model.cars.BaseCarsPageResponse;
+	import com.doumee.core.haikang.model.cars.BaseCarsResponse;
+	import com.doumee.core.haikang.model.cars.request.CarsDeviceRequest;
+	import com.doumee.core.haikang.model.cars.request.CarsGpsRequest;
+	import com.doumee.core.haikang.model.cars.response.CarsDeviceDetaisResponse;
+	import com.doumee.core.haikang.model.cars.response.CarsDeviceResponse;
+	import com.doumee.core.haikang.model.cars.response.CarsGpsResponse;
+	import com.doumee.core.haikang.model.param.BaseListPageResponse;
+	import com.doumee.core.haikang.model.param.BaseResponse;
+	import com.doumee.core.haikang.model.param.respose.FindHomeAlarmInfoPageResponse;
+	import com.doumee.core.utils.Constants;
+	import com.doumee.core.utils.DateUtil;
+	import com.google.common.collect.Maps;
+	import org.apache.commons.lang3.StringUtils;
+	import org.apache.http.client.methods.CloseableHttpResponse;
+	import org.apache.http.client.methods.HttpGet;
+	import org.apache.http.impl.client.CloseableHttpClient;
+	import org.apache.http.impl.client.HttpClientBuilder;
+	import org.apache.http.util.EntityUtils;
+	import org.springframework.http.HttpMethod;
+
+	import java.io.UnsupportedEncodingException;
+	import java.util.*;
+
+public class HKCarOpenService {
+
+	public static   String ACCESS_KEY = "D_SUB_gfJkiUxt_1723101405213";
+	public static   String ACCESS_SECRET = "0vB3VLU21SC6eG8T";
+	private static final String SIGNATURE_METHOD = "HMAC-SHA1";
+	private static final String DEFAULT_CHARSET  = "UTF-8";
+	private static final String REGION_ID = "cn-hangzhou";
+	private static final String VERSION = "2.1.0";
+	public static   String BASE_URL = "https://open.hikvisionauto.com:14021/v2/";
+	private static TreeMap<String, String> getBaseParams()   {
+		Map<String, String> params = Maps.newHashMap();
+		params.put("SignatureMethod", SIGNATURE_METHOD);
+		params.put("SignatureNonce", UUID.randomUUID().toString());
+		params.put("AccessKey", ACCESS_KEY);
+		params.put("Timestamp", String.valueOf(System.currentTimeMillis()));
+		params.put("Version", VERSION);
+		params.put("RegionId", REGION_ID);
+		TreeMap<String, String> sortParas = Maps.newTreeMap();
+		sortParas.putAll(params);
+		return sortParas;
+	}
+
+	public static String sign(String accessSecret, TreeMap<String, String> params, HttpMethod method) throws Exception {
+		String stringToSign = getStringToSign(params, method);
+		System.out.println("StringToSign = [" + stringToSign + "]");
+		javax.crypto.Mac mac = javax.crypto.Mac.getInstance("HmacSHA1");
+		mac.init(new javax.crypto.spec.SecretKeySpec(accessSecret.getBytes(DEFAULT_CHARSET), "HmacSHA1"));
+		byte[] signData = mac.doFinal(stringToSign.getBytes(DEFAULT_CHARSET));
+		return new sun.misc.BASE64Encoder().encode(signData);
+	}
+
+	private static String getStringToSign(TreeMap<String, String> params, HttpMethod method) throws Exception {
+		StringBuilder sortQueryStringTmp = new StringBuilder();
+		for(Map.Entry<String, String> entry : params.entrySet()){
+			sortQueryStringTmp.append("&").append(specialUrlEncode(entry.getKey())).append("=").append(specialUrlEncode(entry.getValue()));
+		}
+		StringBuilder stringToSign = new StringBuilder();
+		stringToSign.append(method.toString()).append("&").append(specialUrlEncode("/")).append("&").append(specialUrlEncode(sortQueryStringTmp.substring(1)));
+		return stringToSign.toString();
+	}
+
+	public static String specialUrlEncode(String value) throws Exception {
+		return java.net.URLEncoder.encode(value, "UTF-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
+	}
+
+	public static void main(String[] args) {
+		getAllCarsDetais();
+	}
+
+	public static List<CarsDeviceDetaisResponse> getAllCarsDetais() {
+		List<CarsDeviceDetaisResponse> list = new ArrayList<>();
+		BaseCarsPageResponse<CarsDeviceResponse>  data = getDeviceList(new CarsDeviceRequest());
+		if(data!=null &&data.getResults()!=null){
+			List<String> cars = new ArrayList<>();
+			List<String> codes = new ArrayList<>();
+			for(CarsDeviceResponse model :data.getResults()){
+//				System.out.println("=================杞︾墝鍙凤細"+model.getPlateNum());
+				cars.add(model.getPlateNum());
+				codes.add(model.getTerminalID());
+				CarsDeviceDetaisResponse t = new CarsDeviceDetaisResponse();
+				t.setPlateNum(model.getPlateNum());
+				t.setTerminalID(model.getTerminalID());
+				/*CarsGpsRequest gp = new CarsGpsRequest();
+				gp.setDeviceCode(t.getTerminalID());
+				gp.setFilterSupplementGps(false);
+				gp.setFilterSupplementGps(false);
+				gp.setStartTime(DateUtil.getYesterday()+" 00:00:00");
+				gp.setEndTime(DateUtil.getNowPlusTime());
+				gp.setPageNo(1);
+				gp.setPageSize(10);*/
+				 CarsGpsResponse tg = getLatestGpsInfo(t.getTerminalID());
+				if(tg!=null ){
+					t.setSpeed(tg.getSpeed());
+					t.setLatitude(tg.getLatitude());
+					t.setLongitude(tg.getLongitude());
+					t.setCollectTime(tg.getCollectTime());
+					t.setAccStatus(tg.getAccStatus());
+					t.setGpsValid(tg.getGpsValid());
+				}
+				list.add(t);
+			}
+			System.out.println("=================杞︾墝鎬绘暟锛�"+codes.size());
+			Map<String,Integer>   statusList = getDeviceStatusList(codes);
+			if(statusList!=null &&statusList.size()>0){
+				for(Map.Entry<String, Integer> entry : statusList.entrySet()){
+					CarsDeviceDetaisResponse t = getFromListById(entry.getKey(),list);
+					if(t!=null) {
+						t.setStatus(entry.getValue());
+					}
+				}
+			}
+		}
+		for(CarsDeviceDetaisResponse m  : list){
+
+			System.out.println("=================杞︾墝鍙凤細"+m.getPlateNum()+" 鐘舵�侊細銆�"+m.getStatus()+"銆�"+" 浣嶇疆锛氥��"+m.getLongitude()+","+m.getLatitude()+"銆�");
+		}
+		return list;
+	}
+
+	private static CarsDeviceDetaisResponse getFromListById(String key, List<CarsDeviceDetaisResponse> list) {
+		for(CarsDeviceDetaisResponse dd  :list){
+			if(dd.getTerminalID()!=null && key !=null && dd.getTerminalID().equals(key)){
+				return  dd;
+			}
+		}
+		return null;
+	}
+
+	public static String sendRequest(String url,TreeMap<String, String> map){
+		try {
+			StringBuilder sortQueryStringTmp = new StringBuilder();
+			for(Map.Entry<String, String> entry : map.entrySet()){
+				sortQueryStringTmp
+						.append("&")
+						.append(specialUrlEncode(entry.getKey()))
+						.append("=")
+						.append(specialUrlEncode(entry.getValue()));
+			}
+			//涓庝笅鏂圭殑HttpGet瀵瑰簲锛岄噰鐢ㄧ殑鏄疕ttpMethod.GET
+			String sign = sign(ACCESS_SECRET + "&", map, HttpMethod.GET);
+			url += "?Signature=" + specialUrlEncode(sign) + sortQueryStringTmp.toString();
+			CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+			//涓庝笂鏂圭殑HttpMethod.GET瀵瑰簲锛屼娇鐢℉ttpGet
+			HttpGet httpDelete = new HttpGet(url);
+			CloseableHttpResponse response = httpClient.execute(httpDelete);
+			return  EntityUtils.toString(response.getEntity());
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+
+		return null;
+}
+	public static  BaseCarsPageResponse<CarsGpsResponse>  getGpsList(CarsGpsRequest param)   {
+		String url = BASE_URL + "gps/list/";
+		TreeMap<String, String> BASE_PARAMS = getBaseParams();
+		if(StringUtils.isNotBlank(param.getEndTime())) {
+			BASE_PARAMS.put("endTime", param.getEndTime());
+		}
+		if(StringUtils.isNotBlank(param.getStartTime())){
+ 			BASE_PARAMS.put("startTime",param.getStartTime());
+		}
+		if( param.getFilterInvalidGps() !=null && !param.getFilterInvalidGps()){
+ 			BASE_PARAMS.put("filterInvalidGps", "false");
+		}
+		if( param.getFilterSupplementGps() !=null && !param.getFilterSupplementGps()){
+ 			BASE_PARAMS.put("filterSupplementGps", "false");
+		}
+		if(StringUtils.isNotBlank(param.getDeviceCode())){
+			BASE_PARAMS.put("deviceCode", param.getDeviceCode().toString());//璁惧鍨嬪彿绉橀挜
+		}
+		BASE_PARAMS.put("pageSize",Constants.equalsInteger(param.getPageSize(),0)? "100":param.getPageSize().toString());//椤甸潰澶у皬
+		BASE_PARAMS.put("pageNo", Constants.equalsInteger(param.getPageNo(),0)? "1":param.getPageNo().toString());//褰撳墠椤�
+		String str = sendRequest(url,BASE_PARAMS);
+		TypeReference typeReference =
+				new TypeReference<BaseCarsResponse<BaseCarsPageResponse<CarsGpsResponse>>>(){};
+		BaseCarsResponse<BaseCarsPageResponse<CarsGpsResponse>>   result = JSONObject.parseObject(str, typeReference.getType());
+		if(result!=null && Constants.equalsInteger(result.getStatus(),0)){
+			return  result.getData();
+		}
+		return  null;
+	}
+	public static  CarsGpsResponse   getLatestGpsInfo(String deviceCode)   {
+		String url = BASE_URL + "gps/latest/";
+		TreeMap<String, String> BASE_PARAMS = getBaseParams();
+		BASE_PARAMS.put("deviceCode", deviceCode);//璁惧鍨嬪彿绉橀挜
+		String str = sendRequest(url,BASE_PARAMS);
+		TypeReference typeReference =
+				new TypeReference<BaseCarsResponse<CarsGpsResponse>>(){};
+		BaseCarsResponse<CarsGpsResponse>   result = JSONObject.parseObject(str, typeReference.getType());
+		if(result!=null && Constants.equalsInteger(result.getStatus(),0)){
+			return  result.getData();
+		}
+		return  null;
+	}
+	public static   Map<String,Integer>   getDeviceStatusList(List<String> code)   {
+		String url = BASE_URL + "device/status/";
+		TreeMap<String, String> BASE_PARAMS = getBaseParams();
+		if(code ==null || code.size() ==0){
+			return  new HashMap<>();
+		}
+		BASE_PARAMS.put("deviceCodeList", JSONObject.toJSONString(code));//缁堢鎵嬫満鍙峰垪琛�
+		String str = sendRequest(url,BASE_PARAMS);
+		TypeReference typeReference =
+				new TypeReference<BaseCarsResponse<Map<String,Integer>>>(){};
+		BaseCarsResponse<Map<String,Integer>>   result = JSONObject.parseObject(str, typeReference.getType());
+		if(result!=null && Constants.equalsInteger(result.getStatus(),0)){
+			return  result.getData();
+		}
+		return  null;
+	}
+	public static BaseCarsPageResponse<CarsDeviceResponse> getDeviceList(CarsDeviceRequest param)  {
+		String url = BASE_URL + "device/list/";
+		TreeMap<String, String> BASE_PARAMS = getBaseParams();
+		if(StringUtils.isNotBlank(param.getProductKey())){
+			BASE_PARAMS.put("productKey", "");//璁惧鍨嬪彿绉橀挜
+		}
+		BASE_PARAMS.put("pageSize",Constants.equalsInteger(param.getPageSize(),0)? "100":param.getPageSize().toString());//椤甸潰澶у皬
+		BASE_PARAMS.put("pageNo", Constants.equalsInteger(param.getPageNo(),0)? "1":param.getPageNo().toString());//褰撳墠椤�
+		String str = sendRequest(url,BASE_PARAMS);
+		TypeReference typeReference =
+				new TypeReference<BaseCarsResponse<BaseCarsPageResponse<CarsDeviceResponse>>>(){};
+		BaseCarsResponse<BaseCarsPageResponse<CarsDeviceResponse>>   result = JSONObject.parseObject(str, typeReference.getType());
+		if(result!=null && Constants.equalsInteger(result.getStatus(),0)){
+			return  result.getData();
+		}
+		return  null;
+	}
+}
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
index fe7905c..1cb80a8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -888,7 +888,10 @@
     public  static  BaseResponse<String>   wxAccessToken(String configId,String tagId){
         log.info("銆愭捣搴锋牴鎹井淇″叕浼楀彿淇℃伅鑾峰彇AccessToken銆�================寮�濮�====configId:"+configId+" && tagId:"+tagId);
         try {
-            String res = HKTools.wxAccessToken(configId,tagId);
+            HashMap<String,String> params = new HashMap<>();
+            params.put("tagId",tagId);
+            params.put("configId",configId);
+            String res = HKTools.wxAccessToken(params);
             TypeReference typeReference =
                     new TypeReference<BaseResponse<String>>(){};
             BaseResponse<String>   result = JSONObject.parseObject(res, typeReference.getType());
@@ -1086,6 +1089,7 @@
      * @return
      */
     public  static  String   getMenuUrl(Integer type,String token){
+        String componentId = HKConstants.MenuPageId.componentIds[0];
         String menuId = HKConstants.MenuPageId.afzx;
         if(Constants.equalsInteger(type,Constants.ONE)){
             menuId = HKConstants.MenuPageId.xkzx;
@@ -1095,10 +1099,13 @@
             menuId = HKConstants.MenuPageId.jsc;
         }else  if(Constants.equalsInteger(type,Constants.FOUR)){
             menuId = HKConstants.MenuPageId.kqgzt;
+        }else  if(Constants.equalsInteger(type,Constants.FIVE)){
+            componentId = HKConstants.MenuPageId.componentIds[1];
+            menuId = HKConstants.MenuPageId.kqdbcl;
         }
         log.info("銆愭捣搴疯幏鍙栧伐浣滃彴鑿滃崟鍏嶅瘑鐧婚檰璋冩暣鍦板潃銆�================寮�濮�====menuId:"+menuId+"==token:"+token);
         try {
-            String res = HKTools.getMenuUrl(menuId,token);
+            String res = HKTools.getMenuUrl(componentId,menuId,token);
             return  res;
         }catch (Exception e){
             log.error("銆愭捣搴疯幏鍙栧伐浣滃彴鑿滃崟鍏嶅瘑鐧婚檰璋冩暣鍦板潃銆�================澶辫触====锛歕n"+ e.getMessage());
@@ -1404,7 +1411,9 @@
         Class<?> clazz = obj.getClass();
         for (Field field : clazz.getDeclaredFields()) {
             field.setAccessible(true); // 浣垮緱绉佹湁瀛楁涔熷彲浠ヨ闂�
-            map.put(field.getName(), (String) field.get(obj));
+            if(field.get(obj)!=null){
+                map.put(field.getName(), String.valueOf( field.get(obj)));
+            }
         }
         return map;
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/request/WmsBaseRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/request/WmsBaseRequest.java
index 498350c..823ac23 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/request/WmsBaseRequest.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/request/WmsBaseRequest.java
@@ -1,5 +1,6 @@
 package com.doumee.core.wms.model.request;
 
+import com.doumee.dao.business.model.PlatformJob;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -16,5 +17,5 @@
 
     @ApiModelProperty(value = "data"  )
     private List<T> data;
-
+    private List<Integer> jobIdList;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsBaseResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsBaseResponse.java
index 908cf5c..cf3064a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsBaseResponse.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsBaseResponse.java
@@ -1,11 +1,9 @@
 package com.doumee.core.wms.model.response;
 
-import com.doumee.core.haikang.model.param.BaseRequst;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsInventoryJsonResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsInventoryJsonResponse.java
index 2d72b76..b286b9a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsInventoryJsonResponse.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wms/model/response/WmsInventoryJsonResponse.java
@@ -19,9 +19,9 @@
     private String item_code;
     @ApiModelProperty(value = "娑堟伅鎻忚堪" ,example = "1")
     private String item_name;
-    @ApiModelProperty(value = "鍐呭璇︽儏闆嗗悎" ,example = "1")
+    @ApiModelProperty(value = "qty" ,example = "1")
     private BigDecimal qty;
-    @ApiModelProperty(value = "鍐呭璇︽儏闆嗗悎" ,example = "1")
+    @ApiModelProperty(value = "supplier_code" ,example = "1")
     private String  supplier_code;
     @ApiModelProperty(value = "g" ,example = "1")
     private String  supplier_name;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
index 14cbdca..6cc72c9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
@@ -17,13 +17,13 @@
  * @Author : Rk
  * @create 2023/12/27 9:30
  */
-@Configuration
+//@Configuration
 public class WxPlatConfig {
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
-    @Bean
+//    @Bean
     public WxMpConfigStorage wxMpConfigStorage() {
         WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
         // 鍏紬鍙穉ppId
@@ -43,7 +43,7 @@
      *
      * @return
      */
-    @Bean
+//    @Bean
     public WxMpService wxMpService() {
         WxMpService wxMpService = new WxMpServiceImpl();
         wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConstants.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConstants.java
index 800b992..23e60ae 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConstants.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConstants.java
@@ -46,7 +46,7 @@
         //  瀹℃壒椹冲洖缁欑敵璇蜂汉锛氱敵璇峰凡琚┏鍥�
         String visitReportAuditFail = "visitReportAuditFail";
         // 缁欏鎵逛汉锛氱敵璇峰緟鎮ㄥ鎵�
-        String visitReportWaitAudit = "visitReportAuditSuccess";
+        String visitReportWaitAudit = "visitReportWaitAudit";
     }
 
 
@@ -103,7 +103,7 @@
         // 瀹℃壒閫氳繃缁欑敵璇蜂汉锛氱敵璇峰凡瀹℃牳閫氳繃
         String platformBookAuditSuccess = "platformBookAuditSuccess";
         //  瀹℃壒椹冲洖缁欑敵璇蜂汉锛氱敵璇峰凡琚┏鍥�
-        String platformBookAuditFail = "platformBookWaitAudit";
+        String platformBookAuditFail = "platformBookAuditFail";
         // 缁欏鎵逛汉锛氱敵璇峰緟鎮ㄥ鎵�
         String platformBookWaitAudit = "platformBookWaitAudit";
     }
@@ -136,6 +136,8 @@
         String platformJobStopErr = "platformJobStopErr";
         // 杩愯緭浠诲姟涓嬭揪 锛堢粰鍙告満锛�
         String platformJobNewJob = "platformJobNewJob";
+        // 杩愯緭浠诲姟鍙栨秷 锛堢粰鍙告満锛�
+        String platformJobCancel = "platformJobCancel";
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
index 90a9baf..7fd38e9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -1,10 +1,16 @@
 package com.doumee.core.wx.wxPlat;
 
+import cn.emay.sdk.util.json.gson.JsonObject;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.Http;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.dao.business.VisitsMapper;
 import com.doumee.dao.business.WxNoticeConfigMapper;
-import com.doumee.dao.business.model.Visits;
-import com.doumee.dao.business.model.WxNoticeConfig;
+import com.doumee.dao.business.model.*;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -12,10 +18,11 @@
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 寰俊鍏紬鍙烽�氱煡
@@ -27,94 +34,160 @@
 @Component
 public class WxPlatNotice {
 
-    /**
-     * 寰俊鍏紬鍙稟PI鐨凷ervice
-     */
-    private final WxMpService wxMpService;
-
-    public WxPlatNotice(WxMpService wxMpService) {
-        this.wxMpService = wxMpService;
-    }
-
-
-    /**
-     * 璁垮涓氬姟閫氱煡鎺ュ彛
-     */
-    public Boolean  sendVisitAuditTemplateNotice(Visits visits,String prefix,String tempId){
-        if(StringUtils.isBlank(visits.getOpenid())){
-            return false;
-        }
-        WxMpTemplateMessage templateMessage =  WxMpTemplateMessage.builder()
-                .toUser(visits.getOpenid())
-                .templateId(tempId)
-                .url(prefix + visits.getId())
-                .build();
-
-
-        String thing1 = "寰呭鎵�";
-        if(visits.getStatus()==2){
-            thing1 = "瀹℃牳閫氳繃";
-        }else if(visits.getStatus()==3){
-            thing1 = "瀹℃牳涓嶉�氳繃";
-        }else if(visits.getStatus()==5){
-            thing1 = "璁惧鎺堟潈鎴愬姛";
-        }else if(visits.getStatus()==6){
-            thing1 = "璁惧鎺堟潈鏈垚鍔�";
-        }
-        // 娣诲姞妯℃澘鏁版嵁
-        templateMessage.addData(new WxMpTemplateData("thing1", thing1))
-                .addData(new WxMpTemplateData("thing2", visits.getName()))
-                .addData(new WxMpTemplateData("phone_number6", visits.getPhone()));
-        String msgId = null;
-        try {
-            // 鍙戦�佹ā鏉挎秷鎭�
-            msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
-        } catch (WxErrorException e) {
-            e.printStackTrace();
-        }
-        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
-        return msgId != null;
-    }
-
-
-
-    /**
-     * 璁垮涓氬姟閫氱煡
-     */
-    public void  sendVisitTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper,Visits visits,String objCode, String prefix, String tempId, List<String> openIds){
+    public void  testSendNotice(List<String> openIds,String token){
         if(CollectionUtils.isNotEmpty(openIds)){
-           WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
-                    .eq(WxNoticeConfig::getObjCode,objCode)
-                           .eq(WxNoticeConfig::getStatus, Constants.ZERO)
-                    .last(" limit 1")
-            );
-           if(Objects.isNull(wxNoticeConfig)){
-               return;
-           }
-            WxMpTemplateMessage templateMessage =  WxMpTemplateMessage.builder()
-                    .toUser(visits.getOpenid())
-                    .templateId(tempId)
-                    .url(prefix + visits.getId())
-                    .build();
-
-            templateMessage.addData(new WxMpTemplateData("thing1", visits.getName()))
-                    .addData(new WxMpTemplateData("car_number7", StringUtils.isBlank(visits.getCarNos())?visits.getCarNos():"-"))
-                    .addData(new WxMpTemplateData("character_string6", Constants.equalsInteger(visits.getMemberNum(),Constants.ZERO)?Constants.ONE+"":visits.getMemberNum().toString()))
-                    .addData(new WxMpTemplateData("const9", wxNoticeConfig.getTitile()))
-                    .addData(new WxMpTemplateData("thing4", visits.getReason()))
-                    ;
-            String msgId = null;
-            try {
-                for (String openId:openIds) {
-                    templateMessage.setToUser(openId);
+            String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+            //鏁翠綋鍙傛暟map
+            Map<String, Object> paramMap = new HashMap<String, Object>();
+            //娑堟伅涓婚鏄剧ず鐩稿叧map
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            Map<String, Object> const9 = new HashMap<String,Object>();
+            const9.put("value","鐢宠寰呮偍瀹℃壒");
+            Map<String, Object> thing1 = new HashMap<String,Object>();
+            thing1.put("value", "娴嬭瘯鍚嶇О");
+            Map<String, Object> car_number7 = new HashMap<String,Object>();
+            car_number7.put("value","鐨朅P12345");
+            Map<String, Object> character_string6 = new HashMap<String,Object>();
+            character_string6.put("value","1");
+            Map<String, Object> thing4 = new HashMap<String,Object>();
+            thing4.put("value","鐞嗙敱");
+            dataMap.put("const9",const9);
+            dataMap.put("thing1",thing1);
+            dataMap.put("car_number7",car_number7);
+            dataMap.put("character_string6",character_string6);
+            dataMap.put("thing4",thing4);
+            paramMap.put("data", dataMap);
+            for (String openId:openIds) {
+                paramMap.clear();
+                paramMap.put("template_id", "SPwvgtASkm1aMDBsYhX2wHKdL2JBEGPknDkgniSza2Y");
+                paramMap.put("touser", openId);
+                paramMap.put("data", dataMap);
+                String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                if(StringUtils.isBlank(response)){
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                }else{
+                    JSONObject json = JSONObject.parseObject(response);
+                    log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
                 }
-                // 鍙戦�佹ā鏉挎秷鎭�
-                msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
-            } catch (WxErrorException e) {
-                e.printStackTrace();
             }
-            log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
+//            log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
+        }
+    }
 
+    /**
+     * 璁垮鐢宠/鎶ュ涓氬姟閫氱煡
+     * @param wxNoticeConfigMapper
+     * @param visits
+     * @param objCode  visitUpload,visitAuditSuccess,visitWaitAudit锛寁isitWaitAudit,visitReportUpload锛寁isitReportAuditSuccess锛寁isitReportAuditFail, visitReportAuditSuccess
+     * @param openIds
+     */
+    public void  sendVisitTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, Visits visits, String objCode, String token, List<String> openIds){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                Map<String, Object> const9 = new HashMap<String,Object>();
+                const9.put("value",wxNoticeConfig.getTitile());
+                Map<String, Object> thing1 = new HashMap<String,Object>();
+                thing1.put("value", visits.getName());
+                Map<String, Object> car_number7 = new HashMap<String,Object>();
+                car_number7.put("value",StringUtils.isNotBlank(visits.getCarNos())?visits.getCarNos():"-");
+                Map<String, Object> character_string6 = new HashMap<String,Object>();
+                character_string6.put("value","1");
+                Map<String, Object> thing4 = new HashMap<String,Object>();
+                thing4.put("value",visits.getReason());
+                dataMap.put("const9",const9);
+                dataMap.put("thing1",thing1);
+                dataMap.put("car_number7",car_number7);
+                dataMap.put("character_string6",character_string6);
+                dataMap.put("thing4",thing4);
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("template_id", wxNoticeConfig.getTempId());
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+//            log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
+            }
+        }catch (Exception e){
+
+        }
+    }
+
+    /**
+     * 闅愭偅涓婃姤
+     * @param wxNoticeConfigMapper
+     * @param hiddenDanger
+     * @param objCode hiddenDangerUpload
+     * @param openIds
+     */
+    public void  sendHiddenDangerUploadTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, HiddenDanger hiddenDanger, String objCode,String token, List<String> openIds){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //闅愭偅鍖哄煙
+                Map<String, Object> thing9 = new HashMap<String,Object>();
+                thing9.put("value",hiddenDanger.getAreaName());
+                //闅愭偅鍚嶇О
+                Map<String, Object> thing1 = new HashMap<String,Object>();
+                thing1.put("value", hiddenDanger.getCategoryName());
+                //鎻愭姤浜�
+                Map<String, Object> thing12 = new HashMap<String,Object>();
+                thing12.put("value",hiddenDanger.getMemberName());
+                //鎻愭姤鏃堕棿
+                Map<String, Object> time11 = new HashMap<String,Object>();
+                time11.put("value", DateUtil.getDate(hiddenDanger.getCreateDate(),"yyyy骞碝M鏈坉d鏃� HH:mm:ss") );
+                dataMap.put("thing9",thing9);
+                dataMap.put("thing1",thing1);
+                dataMap.put("thing12",thing12);
+                dataMap.put("time11",time11);
+                paramMap.put("template_id", wxNoticeConfig.getTempId());
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
 
         }
 
@@ -122,5 +195,399 @@
 
 
 
+    /**
+     * 闅愭偅鏁存敼
+     * @param wxNoticeConfigMapper
+     * @param hiddenDanger
+     * @param objCode hiddenDangerDeal
+     * @param openIds
+     */
+    public void  sendHiddenDangerDealTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, HiddenDanger hiddenDanger, String objCode,String token, List<String> openIds){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //闅愭偅鍖哄煙
+                Map<String, Object> thing17 = new HashMap<String,Object>();
+                thing17.put("value",hiddenDanger.getAreaName());
+                //闅愭偅鍚嶇О
+                Map<String, Object> thing3 = new HashMap<String,Object>();
+                thing3.put("value", hiddenDanger.getCategoryName());
+                //鏁存敼鏂瑰紡
+                Map<String, Object> thing13 = new HashMap<String,Object>();
+                thing13.put("value",Constants.equalsInteger(hiddenDanger.getStatus(),Constants.ONE)?"闅愭偅宸叉暣鏀�":"闅愭偅宸查��鍥�");
+                //鎻愪氦浜�
+                Map<String, Object> thing10 = new HashMap<String,Object>();
+                thing10.put("value",hiddenDanger.getCheckorName());
+                //閫氱煡鏃堕棿
+                Map<String, Object> time16 = new HashMap<String,Object>();
+                time16.put("value", DateUtil.getDate(hiddenDanger.getDealTime(),"yyyy骞碝M鏈坉d鏃� HH:mm:ss") );
+                dataMap.put("thing17",thing17);
+                dataMap.put("thing3",thing3);
+                dataMap.put("thing13",thing13);
+                dataMap.put("thing10",thing10);
+                dataMap.put("time16",time16);
+                paramMap.put("template_id", wxNoticeConfig.getTempId());
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+    }
+
+    /**
+     * 鐢ㄨ溅鐢宠 瀹℃壒鎯呭喌
+     * @param wxNoticeConfigMapper
+     * @param carUseBook
+     * @param objCode  reservationSuccess锛宮eetingCancel,meetingBeginA锛宮eetingEndA
+     * @param openIds
+     * @param sendType 0=鐢宠浜猴紱1=瀹℃壒浜�
+     */
+    public void  sendCarUseBookTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, CarUseBook carUseBook, String objCode,String token,
+                                              List<String> openIds,Integer sendType){
+        try {
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //瀹℃壒杩涘害
+                Map<String, Object> thing3 = new HashMap<String,Object>();
+                if(Constants.equalsInteger(sendType,Constants.ONE)){
+                    thing3.put("value","鐢宠寰呮偍瀹℃壒");
+                }else{
+                    if(Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO)){
+                        thing3.put("value","鐢宠鎻愪氦鎴愬姛寰呭鏍�");
+                    }else if(Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO)){
+                        thing3.put("value","鐢宠宸插鏍搁�氳繃");
+                    }else{
+                        thing3.put("value","鐢宠宸茶椹冲洖");
+                    }
+                }
+                //鐢宠浜�
+                Map<String, Object> thing1 = new HashMap<String,Object>();
+                thing1.put("value", carUseBook.getMemberName());
+                //杞︾墝鍙�
+                Map<String, Object> car_number2 = new HashMap<String,Object>();
+                car_number2.put("value",carUseBook.getCarCode());
+                //鐩殑鍦�
+                Map<String, Object> thing11 = new HashMap<String,Object>();
+                thing11.put("value",carUseBook.getAddr());
+                //鐢ㄨ溅鏃堕棿
+                Map<String, Object> time14 = new HashMap<String,Object>();
+                time14.put("value", carUseBook.getPlanUseDate());
+                dataMap.put("thing3",thing3);
+                dataMap.put("car_number2",car_number2);
+                dataMap.put("thing1",thing1);
+                dataMap.put("thing11",thing11);
+                dataMap.put("time14",time14);
+                paramMap.put("template_id", wxNoticeConfig.getTempId());
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+    }
+
+
+    /**
+     * 杞﹁締鍏ュ洯鐢宠  鐗╂祦杞�
+     * @param wxNoticeConfigMapper
+     * @param platformBooks
+     * @param objCode platformBookUpload锛宲latformBookAuditSuccess,platformBookAuditFail锛宲latformBookWaitAudit
+     * @param token
+     * @param openIds
+     * @param sendType 0=鐢宠浜猴紱1=瀹℃壒浜�
+     */
+    public void  sendPlatformBookTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, PlatformBooks platformBooks, String objCode,String token,
+                                       List<String> openIds,Integer sendType){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //瀹℃牳鐘舵��
+                Map<String, Object> const9 = new HashMap<String,Object>();
+                if(Constants.equalsInteger(sendType,Constants.ONE)){
+                    const9.put("value","鐢宠寰呮偍瀹℃壒");
+                }else{
+                    if(Constants.equalsInteger(platformBooks.getStatus(),Constants.ZERO)){
+                        const9.put("value","鐢宠鎻愪氦鎴愬姛寰呭鏍�");
+                    }else if(Constants.equalsInteger(platformBooks.getStatus(),Constants.TWO)){
+                        const9.put("value","鐢宠宸插鏍搁�氳繃");
+                    }else{
+                        const9.put("value","鐢宠宸茶椹冲洖");
+                    }
+                }
+                //杞︾墝鍙�
+                Map<String, Object> car_number3 = new HashMap<String,Object>();
+                car_number3.put("value", platformBooks.getCarCodeFront());
+                //涓氬姟绫诲瀷
+                Map<String, Object> phrase4 = new HashMap<String,Object>();
+                phrase4.put("value", platformBooks.getInReason());
+                //鐢宠浜�
+                Map<String, Object> thing8 = new HashMap<String,Object>();
+                thing8.put("value", platformBooks.getDriverName());
+                //鏃堕棿
+                Map<String, Object> time4 = new HashMap<String,Object>();
+                time4.put("value", DateUtil.getDate(platformBooks.getArriveDate(),"yyyy骞碝M鏈坉d鏃� HH:mm:ss") );
+                dataMap.put("const9",const9);
+                dataMap.put("car_number3",car_number3);
+                dataMap.put("phrase4",phrase4);
+                dataMap.put("thing8",thing8);
+                dataMap.put("time4",time4);
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("template_id", wxNoticeConfig.getTempId());
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+    }
+
+
+
+    /**
+     * Wms 浠诲姟涓嬭揪閫氱煡
+     * @param wxNoticeConfigMapper
+     * @param platformJob
+     * @param objCode   platformJobNewJob
+     * @param openIds
+     */
+    public void  sendWmsTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, PlatformJob platformJob, String objCode,String token,
+                                               List<String> openIds){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //杩愬崟缂栧彿
+                Map<String, Object> character_string1 = new HashMap<String,Object>();
+                character_string1.put("value",platformJob.getBillCode());
+                //鍙告満
+                Map<String, Object> thing3 = new HashMap<String,Object>();
+                thing3.put("value", platformJob.getDriverName());
+                //涓嬭揪鏃堕棿
+                Map<String, Object> time4 = new HashMap<String,Object>();
+                time4.put("value", DateUtil.getDate(platformJob.getCreateDate(),"yyyy骞碝M鏈坉d鏃� HH:mm:ss") );
+                dataMap.put("character_string1",character_string1);
+                dataMap.put("thing3",thing3);
+                dataMap.put("time4",time4);
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("template_id", wxNoticeConfig.getTempId());
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+    }
+
+    /**
+     * Wms 浠诲姟鍙栨秷閫氱煡
+     * @param wxNoticeConfigMapper
+     * @param platformJob
+     * @param objCode   platformJobNewJob
+     * @param openIds
+     */
+    public void  sendWmsCancelTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, PlatformJob platformJob, String objCode,String token,
+                                       List<String> openIds){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //浠诲姟鍗曞彿
+                Map<String, Object> character_string1 = new HashMap<String,Object>();
+                character_string1.put("value",platformJob.getBillCode());
+                //鍙栨秷鏃堕棿
+                Map<String, Object> time6 = new HashMap<String,Object>();
+                time6.put("value", DateUtil.getDate(new Date(),"yyyy骞碝M鏈坉d鏃� HH:mm:ss") );
+                dataMap.put("character_string1",character_string1);
+                dataMap.put("time6",time6);
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("template_id", wxNoticeConfig.getTempId());
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+    }
+
+
+    /**
+     * 鏈堝彴浣滀笟
+     * @param wxNoticeConfigMapper
+     * @param platformJob
+     * @param objCode platformJobCallIn锛宲latformJobSingIn,platformJobOverNum锛宲latformJobWorking,platformJobFinish锛宲latformJobLevelPower,platformJobMove锛宲latformJobError锛宲latformJobTimeOut,platformJobStopErr
+     * @param token
+     * @param openIds
+     */
+    public void  sendPlatformJobTemplateNotice(WxNoticeConfigMapper wxNoticeConfigMapper, PlatformJob platformJob, String objCode,String token,
+                                       List<String> openIds){
+        try{
+            if(CollectionUtils.isNotEmpty(openIds)){
+                WxNoticeConfig wxNoticeConfig =  wxNoticeConfigMapper.selectOne(new QueryWrapper<WxNoticeConfig>().lambda().eq(WxNoticeConfig::getObjType,WxPlatConstants.visit)
+                        .eq(WxNoticeConfig::getObjCode,objCode)
+                        .eq(WxNoticeConfig::getStatus, Constants.ZERO)
+                        .last(" limit 1")
+                );
+                if(Objects.isNull(wxNoticeConfig)){
+                    return;
+                }
+                String postUrL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
+                //鏁翠綋鍙傛暟map
+                Map<String, Object> paramMap = new HashMap<String, Object>();
+                //娑堟伅涓婚鏄剧ず鐩稿叧map
+                Map<String, Object> dataMap = new HashMap<String, Object>();
+                //鏈堝彴閫氱煡
+                Map<String, Object> const6 = new HashMap<String,Object>();
+                const6.put("value",wxNoticeConfig.getTitile());
+                //杞︾墝鍙�
+                Map<String, Object> character_string1 = new HashMap<String,Object>();
+                character_string1.put("value",platformJob.getCarCodeFront());
+                //鏈堝彴鍙�
+                Map<String, Object> thing3 = new HashMap<String,Object>();
+                thing3.put("value", platformJob.getPlatformName());
+                //鏃堕棿
+                Map<String, Object> time4 = new HashMap<String,Object>();
+                time4.put("value", DateUtil.getDate(new Date(),"yyyy骞碝M鏈坉d鏃� HH:mm:ss") );
+                dataMap.put("const6",const6);
+                dataMap.put("character_string1",character_string1);
+                dataMap.put("thing3",thing3);
+                dataMap.put("time4",time4);
+                paramMap.put("data", dataMap);
+                for (String openId:openIds) {
+                    paramMap.clear();
+                    paramMap.put("template_id", wxNoticeConfig.getTempId());
+                    paramMap.put("touser", openId);
+                    paramMap.put("data", dataMap);
+                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
+                    if(StringUtils.isBlank(response)){
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", "澶辫触");
+                    }else{
+                        JSONObject json = JSONObject.parseObject(response);
+                        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"鎴愬姛":"澶辫触"+json.getString("errmsg"));
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+    }
+
+
+
+
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformLogMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformLogMapper.java
index 9f9a195..bcde56a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformLogMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformLogMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.PlatformLog;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/06/28 10:03
  */
-public interface PlatformLogMapper extends BaseMapper<PlatformLog> {
+public interface PlatformLogMapper extends MPJBaseMapper<PlatformLog> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWmsJobMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWmsJobMapper.java
index e809183..4987b99 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWmsJobMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformWmsJobMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.PlatformWmsJob;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/06/28 10:03
  */
-public interface PlatformWmsJobMapper extends BaseMapper<PlatformWmsJob> {
+public interface PlatformWmsJobMapper extends MPJBaseMapper<PlatformWmsJob> {
 
 }
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 a4809fe..99e6b30 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
@@ -43,6 +43,8 @@
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
     private Integer isdeleted;
+    @ApiModelProperty(value = "浣滀笟鏉ユ簮锛�0鑷缓 1wms鎺ㄩ��", example = "1")
+    private Integer origin;
 
     @ApiModelProperty(value = "鍚嶇О")
     private String name;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsDetail.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsDetail.java
index 2aad579..e671c0d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsDetail.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsDetail.java
@@ -77,7 +77,9 @@
     @ApiModelProperty(value = "渚涘簲鍟�")
     @ExcelColumn(name="渚涘簲鍟�")
     private String inRepertotyCode;
-
+    @ApiModelProperty(value = "鏀惰揣鍦�")
+    @ExcelColumn(name="鏀惰揣鍦�")
+    private String repertotyAddress;
     @ApiModelProperty(value = "璁″垝鏀惰揣鏁伴噺", example = "1")
     @ExcelColumn(name="璁″垝鏀惰揣鏁伴噺")
     private BigDecimal ioQty;
@@ -98,7 +100,7 @@
     @ApiModelProperty(value = "浣滀笟瀹屾垚鏃堕棿锛堟渶缁堟椂闂达級")
     @TableField(exist = false)
     private Date doneDate;
-    @ApiModelProperty(value = "璁″垝鏀惰揣鏁伴噺(闈瀢ms)", example = "1")
+    @ApiModelProperty(value = "鎵胯繍鍗曞彿", example = "1")
     @TableField(exist = false)
-    private BigDecimal ortherIoQty;
+    private String carryBillCode;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsJob.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsJob.java
index d85176d..e4ebc9b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsJob.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsJob.java
@@ -51,6 +51,9 @@
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
     @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
+//    @ApiModelProperty(value = "浣滀笟鏉ユ簮锛�0鑷缓 1wms鎺ㄩ��", example = "1")
+//    @ExcelColumn(name="浣滀笟鏉ユ簮锛�0鑷缓 1wms鎺ㄩ��")
+//    private Integer origin;
 
     @ApiModelProperty(value = "澶囨敞")
     @ExcelColumn(name="澶囨敞")
@@ -75,7 +78,9 @@
     @ApiModelProperty(value = "鍙告満濮撳悕")
     @ExcelColumn(name="鍙告満濮撳悕")
     private String driverName;
-
+    @ApiModelProperty(value = "鏀惰揣鍦�")
+    @ExcelColumn(name="鏀惰揣鍦�")
+    private String repertotyAddress;
     @ApiModelProperty(value = "鎵胯繍鍟�")
     @ExcelColumn(name="鎵胯繍鍟�")
     private String carrierName;
@@ -104,10 +109,6 @@
     @ApiModelProperty(value = "杞︾墝鍙�")
     @ExcelColumn(name="杞︾墝鍙�")
     private String plateNumber;
-
-    @ApiModelProperty(value = "鏀惰揣鍦�")
-    @ExcelColumn(name="鏀惰揣鍦�")
-    private String repertotyAddress;
 
     @ApiModelProperty(value = "鍚堝悓鍙穈")
     @ExcelColumn(name="鍚堝悓鍙穈")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CarsJobAndContractDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CarsJobAndContractDTO.java
new file mode 100644
index 0000000..4a3a403
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CarsJobAndContractDTO.java
@@ -0,0 +1,19 @@
+package com.doumee.dao.web.reqeust;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/1/4 16:17
+ */
+@Data
+public class CarsJobAndContractDTO {
+
+    @ApiModelProperty(value = "杞︾墝鍙�")
+    private String carCode;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/ErpVisitDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/ErpVisitDTO.java
index c7f204b..aea6a3a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/ErpVisitDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/ErpVisitDTO.java
@@ -1,6 +1,5 @@
 package com.doumee.dao.web.reqeust;
 
-import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.haikang.model.param.BaseRequst;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -8,7 +7,6 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmEventDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmEventDataVO.java
index 7a14036..3c70b1e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmEventDataVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmEventDataVO.java
@@ -26,7 +26,7 @@
     @ApiModelProperty(value = "鎶ヨ婧愯祫婧愬悕绉�")
     private String resourceName;
     @ApiModelProperty(value = "鎶ヨ鐘舵��")
-    private String handleStatus;
+    private Integer handleStatus;
     @ApiModelProperty(value = "鎶ヨ绫诲瀷鍚嶇О")
     private String alarmTypeName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardCarsListVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardCarsListVO.java
new file mode 100644
index 0000000..8b9b44f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardCarsListVO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.core.haikang.model.cars.response.CarsDeviceDetaisResponse;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 杩愯緭閲�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class BoardCarsListVO {
+
+    @ApiModelProperty(value = "杞﹁締鍙婄粡绾害淇℃伅")
+    private List<CarsDeviceDetaisResponse> carsList;
+
+    @ApiModelProperty(value = "鍦ㄩ�旀暟閲�")
+    private int busyNum;
+    @ApiModelProperty(value = "绌洪棽鏁伴噺")
+    private int idleNum;
+
+    @ApiModelProperty(value = "绂荤嚎鏁伴噺")
+    private int offlineNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardJobCenterDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardJobCenterDataVO.java
new file mode 100644
index 0000000..2043610
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardJobCenterDataVO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 杩愯緭閲�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class BoardJobCenterDataVO {
+
+
+    @ApiModelProperty(value = "鍦ㄩ�旀暟閲�")
+    private int busyNum;
+    @ApiModelProperty(value = "绌洪棽鏁伴噺")
+    private int idleNum;
+
+    @ApiModelProperty(value = "绂荤嚎鏁伴噺")
+    private int offlineNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardStockListVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardStockListVO.java
new file mode 100644
index 0000000..69a3ac4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardStockListVO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 閫氱敤
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class BoardStockListVO {
+
+    @ApiModelProperty(value = "搴撳瓨鏄庣粏闆嗗悎")
+    private List<GeneralVO> stockList;
+    @ApiModelProperty(value = "鍖哄煙搴撳瓨姹囨�婚泦鍚�")
+    private List<GeneralVO> areaTotalList;
+
+    @ApiModelProperty(value = "搴撳瓨宸插埄鐢�")
+    private BigDecimal num;
+    @ApiModelProperty(value = "搴撳瓨鍒╃敤鐜�")
+    private BigDecimal useRate;
+    @ApiModelProperty(value = "搴撳瓨鎬婚噺")
+    private BigDecimal totalNum;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java
index 3161342..2546492 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarmeraListVO.java
@@ -1,13 +1,7 @@
 package com.doumee.dao.web.response.platformReport;
 
-import com.doumee.core.haikang.model.param.respose.PageRegionInfoResponse;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
 
 /**
  * 鐩戞帶鐐归泦鍚�
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsContractVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsContractVO.java
new file mode 100644
index 0000000..01be1bf
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsContractVO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.dao.business.model.PlatformWmsDetail;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 杩愯緭閲�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class CarsContractVO {
+
+    @ApiModelProperty(value = "鐗╂枡娓呭崟")
+    private List<PlatformWmsDetail> detailList;
+    @ApiModelProperty(value = "鍚堝悓鍙�")
+    private String ioCode;
+    @ApiModelProperty(value ="鏀惰揣鍦�")
+    private String address;
+    @ApiModelProperty(value = "杩愯緭鎬婚噺")
+    private BigDecimal totalNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsJobAndContractVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsJobAndContractVO.java
new file mode 100644
index 0000000..e42f4a8
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsJobAndContractVO.java
@@ -0,0 +1,34 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.business.model.PlatformLog;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 杩愯緭閲�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class CarsJobAndContractVO {
+
+    @ApiModelProperty(value = "浣滀笟璁板綍闆嗗悎")
+    private List<PlatformLog> logList;
+
+    @ApiModelProperty(value = "鍚堝悓鍒楄〃")
+    private List<CarsContractVO> contractList;
+    @ApiModelProperty(value = "鍙告満鎵嬫満鍙�")
+    private String phone;
+    @ApiModelProperty(value = "鍙告満濮撳悕")
+    private String name;
+    @ApiModelProperty(value = "杩愯緭鍗曞彿")
+    private String billCode;
+    @ApiModelProperty(value = "杩愯緭鎬婚噺")
+    private BigDecimal totalNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardNewVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardNewVO.java
new file mode 100644
index 0000000..5a6985c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardNewVO.java
@@ -0,0 +1,93 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.business.model.PlatformJob;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鍥尯鐗╂祦杩愯璋冨害鐪嬫澘
+ *
+ * @Author : Rk
+ * @create 2024/10/25 9:54
+ */
+@Data
+public class PlatformJobRunBoardNewVO {
+
+    @ApiModelProperty(value = "绱鍑哄簱閲� - 鏈湀")
+    private BigDecimal monthOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲忔湀搴� - 涓婃湀")
+    private BigDecimal monthLastOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲� - 鏈勾")
+    private BigDecimal yearOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲忓勾搴� - 鍘诲勾")
+    private BigDecimal yearLastOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱杞︽ - 鏈湀")
+    private Integer monthOutTimes;
+
+    @ApiModelProperty(value = "绱鍑哄簱杞︽ - 鏈勾")
+    private Integer yearOutTimes;
+
+
+    @ApiModelProperty(value = "鍑哄簱浠诲姟 - 褰撳墠浠诲姟閲�")
+    private BigDecimal currentOutNum;
+    @ApiModelProperty(value = "鍑哄簱浠诲姟 - 褰撳墠瀹屾垚浠诲姟閲�")
+    private BigDecimal currentOutDoneNum;
+    @ApiModelProperty(value = "鍏ュ簱浠诲姟 - 褰撳墠浠诲姟閲�")
+    private BigDecimal currentInNum;
+    @ApiModelProperty(value = "鍏ュ簱浠诲姟 - 褰撳墠瀹屾垚浠诲姟閲�")
+    private BigDecimal currentInDoneNum;
+
+    @ApiModelProperty(value = "浠婃棩鍑哄簱鏁堢巼")
+    private BigDecimal todayOutRate;
+
+    @ApiModelProperty(value = "鏈湀鍑哄簱鏁堢巼")
+    private BigDecimal monthOutRate;
+
+    @ApiModelProperty(value = "浠婃棩鍏ュ簱鏁堢巼")
+    private BigDecimal todayInRate;
+
+    @ApiModelProperty(value = "鏈湀鍏ュ簱鏁堢巼")
+    private BigDecimal monthInRate;
+
+    @ApiModelProperty(value = "搴撳瓨鏈�澶у��")
+    private BigDecimal stockMax;
+
+    @ApiModelProperty(value = "褰撳墠搴撳瓨")
+    private BigDecimal stockTotal;
+
+
+
+    @ApiModelProperty(value = "杩愯緭浠诲姟鍒嗘瀽 - 7鏃�" , hidden = true)
+    private List<TransportMeasureVO> transportMeasureWeekList;
+
+    @ApiModelProperty(value = "杩愯緭浠诲姟鍒嗘瀽 - 鏈堝害", hidden = true)
+    private List<TransportMeasureVO> transportMeasureMonthList;
+
+    @ApiModelProperty(value = "杩愯緭浠诲姟鍒嗘瀽 - 骞村害", hidden = true)
+    private List<TransportMeasureVO> transportMeasureYearList;
+
+    @ApiModelProperty(value = "褰撴棩杩愯緭浠诲姟")
+    private List<PlatformJob> platformJobList;
+
+    @ApiModelProperty(value = "鍑哄簱浠诲姟")
+    private JobDataVO outJob;
+
+    @ApiModelProperty(value = "鍏ュ簱浠诲姟")
+    private JobDataVO inJob;
+
+    @ApiModelProperty(value = "浠婃棩鍏ュ簱閲忕粺璁�")
+    private List<GeneralVO> totalInList;
+
+    @ApiModelProperty(value = "搴撳瓨鎯呭喌")
+    private List<GeneralVO> stockList;
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/RegionTreeVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/RegionTreeVO.java
index 9436d99..e0b5807 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/RegionTreeVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/RegionTreeVO.java
@@ -1,13 +1,9 @@
 package com.doumee.dao.web.response.platformReport;
 
-import com.doumee.config.DataSyncConfig;
 import com.doumee.core.haikang.model.param.respose.PageRegionInfoResponse;
-import com.doumee.dao.business.model.Company;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java
index baa6cdc..d802b6f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java
@@ -4,6 +4,7 @@
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 杩愯緭閲�
@@ -24,6 +25,8 @@
     private Integer planTimes;
 
     @ApiModelProperty(value = "鏃ユ湡")
-    private String planDate;
+    private Date planDate;
+    @ApiModelProperty(value = "鏃ユ湡Str")
+    private String planDateStr;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
index f752fd9..5ba9b71 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
@@ -1,7 +1,5 @@
 package com.doumee.service.business;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
 import com.doumee.core.haikang.model.param.request.TransparentChannelSingleRequest;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java
index 72c55b6..aaea1d2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java
@@ -1,9 +1,6 @@
 package com.doumee.service.business.ext;
 
 import com.doumee.core.erp.model.openapi.request.erp.*;
-import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse;
-import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
-import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.erp.model.openapi.request.*;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
index b091b73..dff2631 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -26,6 +26,7 @@
      * @return
      */
     String syncHkDevices(Device param);
+    String syncHkNotices(String username);
 
     /**
      * 鍚屾娴峰悍鍋滆溅搴�
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 bbd683d..3502b26 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
@@ -15,6 +15,8 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.SmsConstants;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.CompanyMapper;
 import com.doumee.dao.business.dao.SmsConfigMapper;
@@ -65,6 +67,8 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
 
     @Autowired
     private ApproveTemplMapper approveTemplMapper;
@@ -484,7 +488,7 @@
         approveList.add(createUserApprove);
 
         //鏌ヨ鎵�鏈夊緟澶勭悊浜�
-
+        String token = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode();
         //瀹℃壒涓氬姟鏁版嵁
         for (int i = 0; i < approveParamList.size(); i++) {
             ApproveParam approveParam = approveParamList.get(i);
@@ -567,6 +571,7 @@
                 approve.setType(Constants.ZERO);
                 approveList.add(approve);
 
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
                 if(Constants.equalsInteger(approve.getStatus(),Constants.ONE) && StringUtils.isNotBlank(member.getPhone())){
                     //鍙戦�佺煭淇¢�氱煡
                     if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.reason)){
@@ -576,13 +581,32 @@
                                 SmsConstants.platformBookContent.platformBookWaitAudit,
                                 null,Arrays.asList(member.getPhone().split(","))
                         );
+                        //鍏紬鍙烽�氱煡
+                        if(StringUtils.isNotBlank(member.getOpenid())){
+                            wxPlatNotice.sendPlatformBookTemplateNotice(
+                                    wxNoticeConfigMapper,
+                                    platformBooksMapper.selectById(businessId),
+                                    WxPlatConstants.platformBookContent.platformBookWaitAudit,
+                                    token,
+                                    Arrays.asList(member.getOpenid().split(",")),
+                                    Constants.ONE);
+                        }
                     }else if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.visit)){
                         //璁垮鐢宠
+                        //鐭俊閫氱煡
                         SmsEmailServiceImpl.sendVisitSms(systemDictDataBiz,
                                 emayService,smsEmailMapper,smsConfigMapper,visitsMapper,businessId,
                                 SmsConstants.visitContent.visitNotice,
                                 null,Arrays.asList(member.getPhone().split(","))
                         );
+                        //鍏紬鍙烽�氱煡
+                        if(StringUtils.isNotBlank(member.getOpenid())){
+                            wxPlatNotice.sendVisitTemplateNotice(
+                                    wxNoticeConfigMapper,visitsMapper.selectById(businessId), WxPlatConstants.visitContent.visitWaitAudit,
+                                    token,
+                                    Arrays.asList(member.getOpenid().split(","))
+                            );
+                        }
                     }else if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.visitReporting)){
                         //璁垮鎶ュ
                         SmsEmailServiceImpl.sendVisitReportSms(systemDictDataBiz,
@@ -590,6 +614,14 @@
                                 SmsConstants.visitReportingContent.visitReportingNotice,
                                 null,Arrays.asList(member.getPhone().split(","))
                         );
+                        //鍏紬鍙烽�氱煡
+                        if(StringUtils.isNotBlank(member.getOpenid())){
+                            wxPlatNotice.sendVisitTemplateNotice(
+                                    wxNoticeConfigMapper,visitsMapper.selectById(businessId), WxPlatConstants.visitReportContent.visitReportWaitAudit,
+                                    token,
+                                    Arrays.asList(member.getOpenid().split(","))
+                            );
+                        }
                     }else if(Constants.equalsInteger(noticeType,Constants.noticesObjectType.useCar)){
                         //鐢ㄨ溅鐢宠
                         SmsEmailServiceImpl.sendCarUseSms(systemDictDataBiz,
@@ -597,6 +629,16 @@
                                 SmsConstants.carUseBookContent.carUseBookWaitAudit,
                                 null,Arrays.asList(member.getPhone().split(","))
                         );
+                        //鍏紬鍙烽�氱煡
+                        if(StringUtils.isNotBlank(member.getOpenid())){
+                            wxPlatNotice.sendCarUseBookTemplateNotice(
+                                    wxNoticeConfigMapper,
+                                    carUseBookMapper.selectById(businessId),
+                                    WxPlatConstants.carUseBookContent.carUseBookWaitAudit,
+                                    token,
+                                    Arrays.asList(member.getOpenid().split(",")),
+                                    Constants.ONE);
+                        }
                     }
                 }
 
@@ -1502,6 +1544,7 @@
 
 
     public void dealBusinessData(ApproveDTO approveDTO,Approve approve){
+        WxPlatNotice wxPlatNotice = new WxPlatNotice();
         if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit)
                 ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit)
                 ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){
@@ -1571,6 +1614,7 @@
                 }
             }
             //璁垮鎶ュ
+            String objCode = "";
             if(approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){
                 //鍙戦�佺煭淇¢�氱煡
                 SmsEmailServiceImpl.sendVisitReportSms(systemDictDataBiz,
@@ -1579,6 +1623,9 @@
                                 SmsConstants.visitReportingContent.visitReportingAuditFail,
                         approveDTO.getCheckInfo(),null
                 );
+                objCode =  Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)? WxPlatConstants.visitReportContent.visitReportAuditSuccess:WxPlatConstants.visitReportContent.visitReportAuditFail;
+
+
             }else{ //璁垮鐢宠
                 //鍙戦�佺煭淇¢�氱煡
                 SmsEmailServiceImpl.sendVisitSms(systemDictDataBiz,
@@ -1587,15 +1634,28 @@
                                 SmsConstants.visitContent.visitAuditFail,
                         approveDTO.getCheckInfo(),null
                 );
+                objCode =  Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)? WxPlatConstants.visitContent.visitAuditSuccess:WxPlatConstants.visitContent.visitAuditFail;
+            }
+            visitsMapper.updateById(visits);
+            //鍙戦�佸井淇″叕浼楀彿
+            if(StringUtils.isNotBlank(objCode)){
+                Member member = memberMapper.selectById(visits.getCreateMemberId());
+                if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                    wxPlatNotice.sendVisitTemplateNotice(
+                            wxNoticeConfigMapper,visits, objCode,
+                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                            Arrays.asList(member.getOpenid().split(","))
+                    );
+                }
             }
 
-            visitsMapper.updateById(visits);
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                 Constants.approveObjectType.unCityUseCar)){
             this.updDriver(approveDTO,approve,true);
             CarUseBook carUseBook = carUseBookJoinMapper.selectById(approveDTO.getObjId());
             if(Objects.nonNull(carUseBook)){
                 Member member = memberMapper.selectById(carUseBook.getMemberId());
+                //鍙戦�侀�氱煡鐭伅
                 if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getPhone())){
                     SmsEmailServiceImpl.sendCarUseSms(systemDictDataBiz,
                             emayService,smsEmailMapper,smsConfigMapper,carUseBookMapper,approveDTO.getObjId(),
@@ -1603,6 +1663,14 @@
                                     SmsConstants.carUseBookContent.carUseBookAuditFail,
                             approveDTO.getCheckInfo(),Arrays.asList(member.getPhone().split(","))
                     );
+                }
+                if(StringUtils.isNotBlank(member.getOpenid())){
+                    //鍙戦�佸井淇″叕浼楀彿閫氱煡
+                    wxPlatNotice.sendCarUseBookTemplateNotice(
+                            wxNoticeConfigMapper,carUseBook,
+                            Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)?WxPlatConstants.carUseBookContent.carUseBookAuditSuccess: WxPlatConstants.carUseBookContent.carUseBookAuditFail,
+                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                            Arrays.asList(member.getOpenid().split(",")),0);
                 }
             }
 
@@ -1661,7 +1729,16 @@
                     approveDTO.getCheckInfo(),null
             );
 
-            //TODO 鍙戦�佸井淇″叕浼楀彿娑堟伅
+            //鍙戦�佸井淇″叕浼楀彿娑堟伅
+            Member member = memberMapper.selectById(platformBooks.getDriverId() );
+            if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                //鍙戦�佸井淇″叕浼楀彿閫氱煡
+                wxPlatNotice.sendPlatformBookTemplateNotice(
+                        wxNoticeConfigMapper,platformBooks,
+                        Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)?WxPlatConstants.platformBookContent.platformBookAuditSuccess: WxPlatConstants.platformBookContent.platformBookAuditFail,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(",")),0);
+            }
 
         }else{
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index 5ac6b06..b881fa4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -7,6 +7,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.*;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.SmsConfigMapper;
 import com.doumee.dao.business.dao.SmsEmailMapper;
@@ -16,6 +18,8 @@
 import com.doumee.dao.business.vo.ApproveDataVO;
 import com.doumee.dao.business.vo.DateIntervalVO;
 
+import com.doumee.dao.system.join.NoticesJoinMapper;
+import com.doumee.dao.system.model.Notices;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.CarUseBookService;
@@ -61,6 +65,9 @@
     private ApproveJoinMapper approveJoinMapper;
 
     @Autowired
+    private NoticesJoinMapper noticesJoinMapper;
+
+    @Autowired
     private ApproveService approveService;
 
     @Autowired
@@ -78,6 +85,9 @@
 
     @Autowired
     private EmayService emayService;
+
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
 
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
@@ -132,6 +142,18 @@
         carUseBookMapper.insert(carUseBook);
         //鐢ㄨ溅鐢宠 瀹℃壒璁板綍鍒涘缓
         approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId());
+        //鍙戦�佸井淇″叕浼楀彿閫氱煡
+        //鍙戦�佸井淇″叕浼楀彿閫氱煡
+        WxPlatNotice wxPlatNotice = new WxPlatNotice();
+        Member member = memberMapper.selectById(carUseBook.getMemberId());
+        if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+            wxPlatNotice.sendCarUseBookTemplateNotice(
+                    wxNoticeConfigMapper,carUseBook,
+                    WxPlatConstants.carUseBookContent.carUseBookUpload,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(member.getOpenid().split(",")),0);
+        }
+
         return carUseBook.getId();
     }
 
@@ -474,6 +496,15 @@
                .in(Approve::getObjType,Constants.approveObjectType.cityUseCar,Constants.approveObjectType.unCityUseCar)
                 .eq(Approve::getObjId,id)
         );
+
+        //澶勭悊寰呭姙淇℃伅
+        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                .set(Notices::getStatus,Constants.ONE)
+                .eq(Notices::getType,Constants.TWO)
+                .eq(Notices::getObjId,carUseBook.getId())
+        );
+
+
         Member member = memberMapper.selectById(carUseBook.getMemberId());
         if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getPhone())){
             //鐢ㄨ溅鐢宠鍙栨秷
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
index 57eeaa2..dcd27b0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -1,13 +1,10 @@
 package com.doumee.service.business.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
-import com.doumee.core.haikang.model.HKConstants;
-import com.doumee.core.haikang.model.param.BaseResponse;
-import com.doumee.core.haikang.model.param.request.*;
+import com.doumee.core.haikang.model.param.request.TransparentChannelSingleRequest;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
@@ -22,7 +19,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
index 31d94d1..55fbde4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -15,6 +15,8 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.SmsConstants;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.SmsConfigMapper;
 import com.doumee.dao.business.dao.SmsEmailMapper;
@@ -76,6 +78,9 @@
     @Autowired
     private EmayService emayService;
 
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
+
 
     @Override
     public Integer create(HiddenDanger hiddenDanger) {
@@ -91,6 +96,10 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         hiddenDanger.setMemberId(hiddenDanger.getLoginUserInfo().getMemberId());
+        Member createMember = memberMapper.selectById(hiddenDanger.getMemberId());
+        if(Objects.isNull(createMember)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍒涘缓浜轰俊鎭�");
+        }
         hiddenDanger.setIsdeleted(Constants.ZERO);
         hiddenDanger.setCreateDate(new Date());
         hiddenDanger.setEditDate(new Date());
@@ -181,6 +190,7 @@
         noticesJoinMapper.insert(notices);
 
 
+        WxPlatNotice wxPlatNotice = new WxPlatNotice();
         if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getPhone())){
             //鍙戦�佺煭淇¢�氱煡
             SmsEmailServiceImpl.sendHiddenDangerSms(systemDictDataBiz,
@@ -190,7 +200,22 @@
             );
         }
 
-
+        //鎻愪氦浜虹殑寰俊鍏紬鍙烽�氱煡
+        if(Objects.nonNull(createMember)&&StringUtils.isNotBlank(createMember.getOpenid())){
+            wxPlatNotice.sendHiddenDangerUploadTemplateNotice(
+                    wxNoticeConfigMapper,hiddenDanger,
+                    WxPlatConstants.hiddenDangerContent.hiddenDangerUpload,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(createMember.getOpenid().split(",")));
+        }
+        //澶勭悊浜虹殑寰俊鍏紬鍙烽�氱煡
+        if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenid())){
+            wxPlatNotice.sendHiddenDangerUploadTemplateNotice(
+                    wxNoticeConfigMapper,hiddenDanger,
+                    WxPlatConstants.hiddenDangerContent.hiddenDangerUpload,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(member.getOpenid().split(",")));
+        }
 
         return hiddenDanger.getId();
     }
@@ -244,7 +269,7 @@
                 .leftJoin(Member.class,Member::getId,HiddenDanger::getCheckUserId)
                 .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getCateId)
                 .leftJoin("company t4 on t1.company_id=t4.id")
-                .leftJoin("company t5 on t3.company_id=t5.id");
+                .leftJoin("company t5 on t2.company_id=t5.id");
         queryWrapper
                 .eq(HiddenDanger::getId, id).last("limit 1");
 
@@ -326,7 +351,7 @@
                 .leftJoin(Member.class,Member::getId,HiddenDanger::getCheckUserId)
                 .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getCateId)
                 .leftJoin("company t4 on t1.company_id=t4.id")
-                .leftJoin("company t5 on t3.company_id=t5.id");
+                .leftJoin("company t5 on t2.company_id=t5.id");
 
         //鏁版嵁鏉冮檺寮�濮�--------------------start----------------
         LoginUserInfo userInfo =pageWrap.getModel().getLoginUserInfo();
@@ -429,10 +454,17 @@
                         Arrays.asList(member.getPhone().split(","))
                 );
             }
-
         }
-
-
+        Member createMember = memberMapper.selectById(hiddenDanger.getMemberId());
+        //澶勭悊浜虹殑寰俊鍏紬鍙烽�氱煡
+        if(Objects.nonNull(createMember)&&StringUtils.isNotBlank(createMember.getOpenid())){
+            WxPlatNotice wxPlatNotice = new WxPlatNotice();
+            wxPlatNotice.sendHiddenDangerDealTemplateNotice(
+                    wxNoticeConfigMapper,hiddenDanger,
+                    WxPlatConstants.hiddenDangerContent.hiddenDangerDeal,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(createMember.getOpenid().split(",")));
+        }
 
     }
 
@@ -592,6 +624,16 @@
                     Arrays.asList(member.getPhone().split(","))
             );
         }
+
+        //澶勭悊浜虹殑寰俊鍏紬鍙烽�氱煡
+        if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenid())){
+            WxPlatNotice wxPlatNotice = new WxPlatNotice();
+            wxPlatNotice.sendHiddenDangerUploadTemplateNotice(
+                    wxNoticeConfigMapper,hiddenDanger,
+                    WxPlatConstants.hiddenDangerContent.hiddenDangerUpload,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(member.getOpenid().split(",")));
+        }
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java
index 918b813..77f4730 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java
@@ -7,7 +7,6 @@
 import com.doumee.service.business.InterfaceLogService;
 import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
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 a2446bb..e6e736f 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
@@ -1697,6 +1697,7 @@
     /**
      * 寰俊鎺堟潈鎺ュ彛
      * @param code
+     * 鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐
      * @return
      */
     @Override
@@ -1708,50 +1709,80 @@
         String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode();
         String getTokenUrl = WXConstant.GET_USER_INFO_URL.replace("CODE", code)
                 .replace("APPID", appId).replace("SECRET", appSecret);
-//        JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
-        String openId = code;
-//        if(!Objects.isNull(tokenJson.get("access_token"))){
-//            openId = tokenJson.getString("openid");
-//        }
-//        String openId = "12345";
+        JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
+        String openId = "";
+        if(!Objects.isNull(tokenJson.get("access_token"))){
+            openId = tokenJson.getString("openid");
+        }
         WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
         wxAuthorizeVO.setOpenid(openId);
-        //鏍规嵁openId 鏌ヨ鐢ㄦ埛淇℃伅
-        Member member = memberJoinMapper.selectJoinOne(Member.class,new MPJLambdaWrapper<Member>()
-                .selectAll(Member.class)
-                .selectAs(Company::getName,Member::getCompanyName)
-                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
-                .eq(Member::getOpenid,openId)
-                .eq(Member::getType,source)
-                .eq(Member::getIsdeleted,Constants.ZERO)
-                .orderByDesc(Member::getCreateDate)
-                .last(" limit 1 ")
-        );
-        //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
-        if(!Objects.isNull(member)){
-            if(member.getIsdeleted() == Constants.ONE){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
-            }
-            if(member.getStatus() != Constants.ZERO){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
-            }
-            if(StringUtils.isNotBlank(member.getIdcardNo())){
-               member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
-            }
-            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
-                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
-            member.setPrefixUrl(prefixUrl);
-            wxAuthorizeVO.setMember(member);
-            //鍙告満 涓� 鍐呴儴浜哄憳 鎻愪緵token
-            if(Constants.equalsInteger(source,Constants.ZERO)||Constants.equalsInteger(source,Constants.TWO)){
-                SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda().eq(SystemUser::getMemberId,member.getId())
-                        .eq(SystemUser::getStatus,Constants.ZERO).last(" limit 1 "));
-                if(Objects.nonNull(systemUser)){
-                    String token = systemLoginService.loginByUserId(systemUser.getId());
-                    wxAuthorizeVO.setToken(token);
+        if(source==1){
+            //鏍规嵁openId 鏌ヨ鐢ㄦ埛淇℃伅
+            Member member = memberJoinMapper.selectJoinOne(Member.class,new MPJLambdaWrapper<Member>()
+                    .selectAll(Member.class)
+                    .selectAs(Company::getName,Member::getCompanyName)
+                    .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                    .eq(Member::getOpenid,openId)
+                    .eq(Member::getType,source)
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .orderByDesc(Member::getCreateDate)
+                    .last(" limit 1 ")
+            );
+            //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
+            if(!Objects.isNull(member)){
+                if(member.getIsdeleted() == Constants.ONE){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+                }
+                if(member.getStatus() != Constants.ZERO){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+                }
+                if(StringUtils.isNotBlank(member.getIdcardNo())){
+                    member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
+                }
+                String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+                member.setPrefixUrl(prefixUrl);
+                wxAuthorizeVO.setMember(member);
+                //鍙告満 涓� 鍐呴儴浜哄憳 鎻愪緵token
+                if(Constants.equalsInteger(source,Constants.ZERO)||Constants.equalsInteger(source,Constants.TWO)){
+                    SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda().eq(SystemUser::getMemberId,member.getId())
+                            .eq(SystemUser::getStatus,Constants.ZERO).last(" limit 1 "));
+                    if(Objects.nonNull(systemUser)){
+                        String token = systemLoginService.loginByUserId(systemUser.getId());
+                        wxAuthorizeVO.setToken(token);
+                    }
                 }
             }
+        }else{
+            //濡傛灉鏄徃鏈烘垨鑰呭唴閮ㄤ汉鍛橈紝鍒欎粠system_user鏌ヨ
+            SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
+                    .eq(SystemUser::getOpenid,openId)
+                    .eq(SystemUser::getType,source)
+                    .eq(SystemUser::getDeleted,Boolean.FALSE)
+                    .last(" limit 1 "));
+            //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
+            if(!Objects.isNull(user)){
+                Member member = memberMapper.selectById(user.getId());
+                if(member.getIsdeleted() == Constants.ONE){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+                }
+                if(member.getStatus() != Constants.ZERO){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+                }
+                if(StringUtils.isNotBlank(member.getIdcardNo())){
+                    member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
+                }
+                String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+                member.setPrefixUrl(prefixUrl);
+                wxAuthorizeVO.setMember(member);
+                //鍙告満 涓� 鍐呴儴浜哄憳 鎻愪緵token
+                String token = systemLoginService.loginByUserId(user.getId());
+                wxAuthorizeVO.setToken(token);
+            }
         }
+
+
         return wxAuthorizeVO;
     }
 
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 c45522e..5d0371f 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
@@ -10,6 +10,8 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.SmsConstants;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.SmsConfigMapper;
 import com.doumee.dao.business.dao.SmsEmailMapper;
@@ -36,6 +38,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -86,6 +89,9 @@
 
     @Autowired
     private EmayService emayService;
+
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
 
     @Override
     public Integer create(PlatformBooks platformBooks) {
@@ -285,6 +291,17 @@
 
         //鍒涘缓瀹℃壒娴佷俊鎭�
         approveService.createApproveForPlatfrom(approveTempl.getId(),platformBooks.getId(),platformBooks.getDriverId());
+        //鍙戦�佸叕浼楀彿閫氱煡 缁欐彁浜や汉
+        Member member = memberMapper.selectById(platformBooks.getDriverId());
+        if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenid())){
+            WxPlatNotice wxPlatNotice = new WxPlatNotice();
+            wxPlatNotice.sendPlatformBookTemplateNotice(
+                    wxNoticeConfigMapper,platformBooks,
+                    WxPlatConstants.platformBookContent.platformBookUpload,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(member.getOpenid().split(",")),0);
+        }
+
         return platformBooks.getId();
     }
 
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 6c229ad..2000a83 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
@@ -17,6 +17,8 @@
 import com.doumee.core.tms.model.response.TmsBaseResponse;
 import com.doumee.core.tms.model.response.TmsLockStatusQueryResponse;
 import com.doumee.core.utils.*;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.SmsConfigMapper;
 import com.doumee.dao.business.dao.SmsEmailMapper;
@@ -118,6 +120,10 @@
     private PlatformBroadcastLogMapper platformBroadcastLogMapper;
     @Autowired
     private PlatformWarnEventServiceImpl platformWarnEventService;
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
 
     @Override
     public Integer create(PlatformJob platformJob) {
@@ -860,6 +866,20 @@
                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(),
                 SmsConstants.platformJobContent.platformJobCallIn,null,null
         );
+        
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())) {
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if (Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())) {
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper, platformJob,
+                        WxPlatConstants.platformJobContent.platformJobCallIn,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
 
         return platformJob;
     }
@@ -1058,6 +1078,21 @@
                 SmsConstants.platformJobContent.platformJobSingIn,platform.getName(),null
         );
 
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())){
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper,platformJob,
+                        WxPlatConstants.platformJobContent.platformJobSingIn,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
+
+
         //骞挎挱 led閫氱煡
         platformJob.setPlatformName(platform.getName());
         this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.CALLING.getInfo(),
@@ -1188,6 +1223,20 @@
                 SmsConstants.platformJobContent.platformJobMove,oldPlatform.getName(),platform.getName()
         );
 
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())) {
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if (Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())) {
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper, platformJob,
+                        WxPlatConstants.platformJobContent.platformJobMove,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
+
         platformJob.setPlatformName(oldPlatform.getName());
         platformJob.setPlatformId(oldPlatform.getId());
         this.broadcastAndLEed(platformJob, StringUtils.isBlank(oldPlatform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getLedContent(),
@@ -1235,6 +1284,21 @@
                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(),
                 SmsConstants.platformJobContent.platformJobOverNum,null,null
         );
+
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())){
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper,platformJob,
+                        WxPlatConstants.platformJobContent.platformJobOverNum,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
+
         platformJob.setPlatformName(platform.getName());
         this.broadcastAndLEed(platformJob, StringUtils.isBlank(platform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():platform.getLedContent(),
                 null
@@ -1281,6 +1345,20 @@
                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(),
                 SmsConstants.platformJobContent.platformJobError,platform.getName(),null
         );
+
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())) {
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if (Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())) {
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper, platformJob,
+                        WxPlatConstants.platformJobContent.platformJobError,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
 
         platformJob.setPlatformName(platform.getName());
         this.broadcastAndLEed(platformJob, StringUtils.isBlank(platform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():platform.getLedContent(),
@@ -1331,7 +1409,19 @@
                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(),
                 SmsConstants.platformJobContent.platformJobWorking,platform.getName(),null
         );
-
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())) {
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if (Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())) {
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper, platformJob,
+                        WxPlatConstants.platformJobContent.platformJobWorking,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
         //骞挎挱 led閫氱煡
         platformJob.setPlatformName(platform.getName());
         this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.WORKING.getInfo(),
@@ -1416,6 +1506,21 @@
                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,platformJob.getId(),
                 SmsConstants.platformJobContent.platformJobFinish,platform.getName(),null
         );
+
+        //鍏紬鍙锋ā鏉挎秷鎭�
+        if(Objects.nonNull(platformJob.getDriverId())) {
+            Member member = memberMapper.selectById(platformJob.getDriverId());
+            if (Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())) {
+                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                wxPlatNotice.sendPlatformJobTemplateNotice(
+                        wxNoticeConfigMapper, platformJob,
+                        WxPlatConstants.platformJobContent.platformJobFinish,
+                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                        Arrays.asList(member.getOpenid().split(","))
+                );
+            }
+        }
+
         //骞挎挱 led閫氱煡
         platformJob.setPlatformName(platform.getName());
         this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.DONE.getInfo(),
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 f423fd2..85180ac 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
@@ -23,6 +23,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.*;
+import com.doumee.core.wx.WXConstant;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
 import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.admin.response.InterestedListVO;
 import com.doumee.dao.admin.response.PCWorkPlatformDataVO;
@@ -129,6 +131,9 @@
 
     @Autowired
     private SmsEmailMapper smsEmailMapper;
+
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
 
     @Autowired
     private EmayService emayService;
@@ -279,10 +284,6 @@
             }else{
                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鍙戣捣鎷滆瀹℃壒鐢宠澶辫触锛�");
             }
-            //鍙戦�佸井淇″叕浼楀彿閫氱煡
-            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 if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
             visits.setStatus(Constants.VisitStatus.waitCheck);
             visitsMapper.updateById(visits);
@@ -292,6 +293,17 @@
         }
         initWithVisitInfo(visits);
         updateProblemLog(visits,problemLog,member);
+
+        //鍙戦�佸井淇″叕浼楀彿閫氱煡 - 鐢宠鎻愪氦鎴愬姛寰呭鏍�
+        if(StringUtils.isNotBlank(visits.getOpenid())){
+            WxPlatNotice wxPlatNotice = new WxPlatNotice();
+            wxPlatNotice.sendVisitTemplateNotice(
+                    wxNoticeConfigMapper,visits,
+                    Constants.equalsInteger(visits.getType(),Constants.TWO)?WxPlatConstants.visitReportContent.visitReportUpload:WxPlatConstants.visitContent.visitUpload,
+                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                    Arrays.asList(visits.getOpenid().split(","))
+            );
+        }
         //鍒涘缓瀹℃壒璁板綍
         createApprove(visits,visitMember);
 
@@ -1486,11 +1498,6 @@
       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(),"閲嶆柊涓嬪彂浼氬け璐ワ紒");
       }
@@ -1661,25 +1668,28 @@
 
             pcWorkPlatformDataVO.setLwList(lwList   );
         }else if(Constants.equalsInteger(queryType,Constants.THREE)) {
-            MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
-            queryWrapper.selectAll(Notices.class);
             if (Objects.isNull(loginUserInfo.getMemberId())) {
-                queryWrapper.eq("1", "2");
+                pcWorkPlatformDataVO.setNoticesList(new ArrayList<>());
+                pcWorkPlatformDataVO.setNoticesNum(0);
+//                queryWrapper.eq("1", "2");
             } else {
+                MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
+                queryWrapper.selectAll(Notices.class);
                 queryWrapper.eq(Notices::getStatus, Constants.ZERO);
                 queryWrapper.eq(Notices::getSendacopy, Constants.ZERO);
                 queryWrapper.eq(Notices::getParam2, Constants.ZERO);
                 queryWrapper.eq(Notices::getUserId, loginUserInfo.getMemberId());
-            }
-            queryWrapper.orderByDesc(Notices::getCreateDate);
-            List<Notices> noticesList = noticesJoinMapper.selectList(queryWrapper);
-            pcWorkPlatformDataVO.setNoticesList(noticesList);
-            pcWorkPlatformDataVO.setNoticesNum(noticesList.size());
-            if(noticesList.size() > 5 ){
-                pcWorkPlatformDataVO.setNoticesList(noticesList.subList(0,5));
-            }else{
+                queryWrapper.orderByDesc(Notices::getCreateDate);
+                List<Notices> noticesList = noticesJoinMapper.selectList(queryWrapper);
                 pcWorkPlatformDataVO.setNoticesList(noticesList);
+                pcWorkPlatformDataVO.setNoticesNum(noticesList.size());
+                if(noticesList.size() > 5 ){
+                    pcWorkPlatformDataVO.setNoticesList(noticesList.subList(0,5));
+                }else{
+                    pcWorkPlatformDataVO.setNoticesList(noticesList);
+                }
             }
+
         }else{
             String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_WARNING).getCode();
             MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
index 549fa40..4f1f3ba 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -1053,11 +1053,6 @@
                     i.setEndtime(param.getEndTime());
                     i.setDoors(param.getDoors());
                     visitsMapper.updateById(i);
-                    if(Objects.isNull(i.getParentId())){
-                        wxPlatNotice.sendVisitAuditTemplateNotice(i,
-                                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
-                                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
-                    }
                 });
             }
         }catch (BusinessException e){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
index ed0f1fc..c7307aa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -67,6 +67,11 @@
         return null;
     }
     @Override
+    public    String syncHkNotices(String username){
+
+        return null;
+    }
+    @Override
     public String syncHkLed(Device param){
 
         return null;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java
index 4aa1d11..2cd7505 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java
@@ -48,10 +48,10 @@
             List<Device> deleteList = new ArrayList<>();
             List<Device> addList = new ArrayList<>();
             List<Device> editList = new ArrayList<>();
-            List<DoorsInfoResponse> allHkList = new ArrayList<>();
             Date date = new Date();
             //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁
             List<Device> allList = deviceMapper.selectList(null);
+            List<DoorsInfoResponse> allHkList = new ArrayList<>();
             boolean hasNext = true;
             int curTotal = 0;
             int curPage = 1;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java
index fbd9683..06db1ef 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java
@@ -3,6 +3,7 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.haikang.model.HKTools;
+import com.doumee.core.haikang.service.HKCarOpenService;
 import com.doumee.core.utils.Constants;
 import com.doumee.service.business.InterfaceLogService;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
@@ -28,6 +29,9 @@
 
     @PostConstruct
     public  int  initHkConfig(){
+        HKCarOpenService.ACCESS_KEY= systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_CARS_OPENAPI_ACCESS_KEY).getCode();
+        HKCarOpenService.BASE_URL= systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_CARS_OPENAPI_URL).getCode();
+        HKCarOpenService.ACCESS_SECRET= systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_CARS_OPENAPI_ACCESS_SECRET).getCode();
         ArtemisConfig.host = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_HOST).getCode();
         ArtemisConfig.appKey = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_APPKEY).getCode();
         ArtemisConfig.appSecret = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_APPSECRET).getCode();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncNoticeServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncNoticeServiceImpl.java
new file mode 100644
index 0000000..34f2c0d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncNoticeServiceImpl.java
@@ -0,0 +1,163 @@
+package com.doumee.service.business.impl.hksync;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseListPageResponse;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.*;
+import com.doumee.core.haikang.model.param.respose.*;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DESUtil;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.ImageBase64Util;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
+import com.doumee.dao.business.DeviceRoleMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.RetentionMapper;
+import com.doumee.dao.business.join.VisitsJoinMapper;
+import com.doumee.dao.business.model.DeviceRole;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Retention;
+import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.join.NoticesJoinMapper;
+import com.doumee.dao.system.model.Notices;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.system.NoticesService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 娴峰悍璁垮涓氬姟Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+@Slf4j
+public class HkSyncNoticeServiceImpl extends HkSyncBaseServiceImpl {
+    @Autowired
+    private NoticesJoinMapper noticesJoinMapper;
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Override
+    public String syncHkNotices(String username){
+        if(Constants.DEALING_HK_NOTICE_LIST){
+            return   null;
+        }
+        Constants.DEALING_HK_NOTICE_LIST =true;
+        try {
+            Date date = new Date();
+            List<GetTodoListResponse> allHkList = new ArrayList<>();
+            boolean hasNext = true;
+            int curTotal = 0;
+            int curPage = 1;
+            while (hasNext){
+                //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+                GetTodoListRequest param = new GetTodoListRequest();
+                param.setComId("dfe");
+                param.setUserId(username);
+                param.setStatus(1);//鍙煡寰呭鐞嗙殑鏁版嵁
+                param.setPageNo(curPage);
+                param.setLocaleType("zh_CN");
+                param.setPageSize(100);
+                BaseResponse<BaseListPageResponse<GetTodoListResponse>>   response = HKService.getTodoListPage(param);
+                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+                }
+                BaseListPageResponse<GetTodoListResponse> r = response.getData();
+                curTotal += 100;
+                if(curTotal >= r.getTotal()){
+                    hasNext = false;
+                }
+                if(r.getList() == null || r.getList().size()==0){
+                    hasNext =false;
+                }else{
+                    allHkList.addAll(r.getList());
+                }
+                curPage++;
+            }
+             if(allHkList!=null && allHkList.size()>0){
+                List<Notices> list = new ArrayList<>();
+                List<String> users = new ArrayList<>();
+                for(GetTodoListResponse data :allHkList){
+                    users.add(data.getUserId());
+                }
+                List<Integer> userIds = new ArrayList<>();
+                List<Member > userList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                        .in(Member::getPhone,users)
+                        .eq(Member::getIsdeleted,Constants.ZERO));
+                for(GetTodoListResponse data :allHkList){
+                   Member u = getFromUserList(data.getUserId(),userList);
+                   if(u==null){
+                       continue;
+                   }
+                    userIds.add(u.getId());
+                    JSONObject param = new JSONObject();
+
+                    param.put("componentId","dfe");
+                    param.put("msgType","tlnc");
+                    param.put("componentMenuId", data.getMenuCode());
+                    JSONObject c = new JSONObject();
+                    c.put("method","dealTlncMsg");
+                    c.put("argument",JSONObject.toJSONString(data));
+                    param.put("callback",c);
+                    Notices notices = new Notices();
+                    notices.setCreateDate(DateUtil.getISO8601DateByStr(data.getMsgCreateTimeIso()));
+                    notices.setUserId(u.getId());
+                    notices.setStatus(Constants.ZERO);
+                    notices.setSendacopy(Constants.ZERO);
+                    //涓氬姟鐘舵�佷俊鎭� 0 =寰呭鐞�;1=宸插悓鎰�/宸插鐞�;2=宸叉嫆缁�/宸查��鍥�;3=宸茶浆浜�;4=宸叉挙閿�
+                    notices.setParam1(JSONObject.toJSONString(data));
+                    notices.setParam2(Constants.ZERO+"");
+                    notices.setTitle(data.getMsgTitle());
+                    if(notices.getCreateDate() == null){
+                        notices.setCreateDate(date);
+                    }
+                    notices.setIsdeleted(Constants.ZERO);
+                    notices.setParam4(data.getMsgCreateTimeIso());
+                    notices.setParam3(data.getMsgCreateTime());
+                    notices.setParam5(JSONObject.toJSONString(param));
+                    notices.setType(Constants.noticesObjectType.hknotice);
+                    list.add(notices);
+                }
+                if(list.size()>0){
+                    //娓呯┖娴峰悍鍏ㄩ儴鐨勪唬鍔炴暟鎹�
+                    noticesJoinMapper.delete(new UpdateWrapper<Notices>().lambda()
+                            .eq(Notices::getType, Constants.noticesObjectType.hknotice)
+                            .in(Notices::getUserId, userIds));
+                    noticesJoinMapper.insert(list);//鎵归噺鎻掑叆璁板綍
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            Constants.DEALING_HK_NOTICE_LIST =false;
+        }
+        return  null;
+    }
+
+    private Member getFromUserList(String userId, List<Member> userList) {
+        if(userList!=null ){
+            for(Member u :userList){
+                if(StringUtils.equals(u.getPhone(),userId)){
+                    return  u;
+                }
+            }
+        }
+        return null;
+    }
+
+
+}
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 0665993..aacfa71 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
@@ -311,11 +311,6 @@
 //                getUpdateModelByResponse(c,date,roleList,path);
                 getUpdateModelByResponseIccm(c,date,roleList,path);
                 visitsMapper.updateById(c);
-                if(Objects.isNull(c.getParentId())){
-                    wxPlatNotice.sendVisitAuditTemplateNotice(c,
-                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
-                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
-                }
             }
         }catch (Exception e){
             e.printStackTrace();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
index 8886314..2574a90 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1,37 +1,38 @@
 package com.doumee.service.business.impl.thrid;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.cars.response.CarsDeviceDetaisResponse;
+import com.doumee.core.haikang.model.param.BaseListPageRequest;
 import com.doumee.core.haikang.model.param.BaseListPageResponse;
 import com.doumee.core.haikang.model.param.BaseResponse;
-import com.doumee.core.haikang.model.param.BaseListPageRequest;
 import com.doumee.core.haikang.model.param.request.*;
 import com.doumee.core.haikang.model.param.respose.*;
+import com.doumee.core.haikang.service.HKCarOpenService;
 import com.doumee.core.haikang.service.HKService;
-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.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wms.model.response.WmsBaseResponse;
+import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
+import com.doumee.core.wms.model.response.WmsInventoryJsonResponse;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.VisitsJoinMapper;
 import com.doumee.dao.business.model.*;
-import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.dao.web.reqeust.SavePlatformWarnEventDTO;
+import com.doumee.dao.web.reqeust.CarsJobAndContractDTO;
 import com.doumee.dao.web.response.platformReport.*;
 import com.doumee.service.business.impl.PlatformJobServiceImpl;
 import com.doumee.service.business.impl.VisitsServiceImpl;
 import com.doumee.service.business.third.BoardService;
+import com.doumee.service.business.third.WmsService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -51,6 +52,8 @@
     @Autowired
     private PlatformLogMapper platformLogMapper;
     @Autowired
+    private WmsService wmsService;
+    @Autowired
     private HiddenDangerMapper hiddenDangerMapper;
     @Autowired
     private PlatformWaterGasMapper platformWaterGasMapper;
@@ -63,6 +66,8 @@
     @Autowired
     private PlatformWmsDetailMapper platformWmsDetailMapper;
     @Autowired
+    private PlatformWmsJobMapper platformWmsJobMapper;
+    @Autowired
     private PlatformMapper platformMapper;
     @Autowired
     private VisitsJoinMapper visitsJoinMapper;
@@ -70,6 +75,44 @@
     private RetentionMapper retentionMapper;
     @Autowired
     private PlatformGroupMapper platformGroupMapper;
+    /**
+     * 鑾峰彇鍖哄煙鏍戝舰缁撴瀯鏁版嵁
+     * @return
+     */
+    @Override
+    public BoardStockListVO stockList( ){
+        BoardStockListVO data = new BoardStockListVO();
+        double toatalNum = 1d;
+        BigDecimal num = new BigDecimal(0);
+        List<GeneralVO> list = new ArrayList<>();
+        try {
+            toatalNum =Double.parseDouble(systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_TOTAL_STOCK_NUM).getCode()) ;
+        }catch (Exception e){
+
+        }
+        WmsBaseResponse<WmsInventoryDataResponse> response =  wmsService.getInventoryList();
+        if(response!=null && response.getData()!=null && response.getData().size()>=0){
+            List<WmsInventoryJsonResponse> t= response.getData().get(0).getJson();
+            if(t!=null &&t.size()>0){
+                for(WmsInventoryJsonResponse j :t){
+                    num = num.add (Constants.formatBigdecimal( j.getQty()));
+                    GeneralVO d = new GeneralVO();
+                    d.setNum(Constants.formatBigdecimal(j.getQty()));
+                    d.setName(j.getItem_name());
+                    list.add(d);
+                }
+            }
+        }
+        data.setStockList(list);
+        data.setNum(num);
+        if(toatalNum<=0){
+            toatalNum =1;
+        }
+        data.setTotalNum(new BigDecimal(toatalNum));
+        data.setUseRate(data.getTotalNum().divide(data.getNum(),2,BigDecimal.ROUND_UP));
+        return data;
+
+    }
     /**
      * 鑾峰彇鍖哄煙鏍戝舰缁撴瀯鏁版嵁
      * @return
@@ -451,6 +494,8 @@
         FindHomeAlarmInfoPageRequest param = new FindHomeAlarmInfoPageRequest();
         param.setHour(24);
         param.setPage(1);
+        param.setUserId("admin");
+//        param.setRegionIndexCodes("root000000");
         param.setAlarmStartTime(DateUtil.getPlusTime2(DateUtil.addDaysToDate(new Date(),-1)));
         param.setAlarmEndTime(DateUtil.getPlusTime2(new Date()));
         param.setPageSize(20);
@@ -464,7 +509,7 @@
                 data.add(t);
             }
         }
-            return data;
+        return data;
 
     }
     /**
@@ -477,7 +522,7 @@
         List<MonitorDataVO> list = new ArrayList<>();
         MinitorDataSearchRequest param = new MinitorDataSearchRequest();
         param.setResourceTypeCodes(new String[]{});
-        param.setRegionIndexCode("root0001");
+        param.setRegionIndexCode("root000000");
         param.setIncludeDown("1");
         param.setUserId("admin");
         BaseResponse<BaseListPageResponse<MonitorDataSearchResponse>> response = HKService.minitorDataSearch(param);
@@ -514,8 +559,8 @@
     @Override
     public   List<AlarmDataVO> fightingAlarmHandleData(){
         List<AlarmDataVO> alarmHandleDataVOList = new ArrayList<>();
-        Date now = DateUtil.getStartOfDay(new Date());
-        for (int i = 1; i < 12; i++) {
+        Date now =DateUtil.StringToDate(DateUtil.getFirstDayCurrentMonth(),"yyyy-MM") ;
+        for (int i = 1; i <= 12; i++) {
             Date start  =  DateUtil.addMonthToDate(now,-12+i);
             Date end  =  DateUtil.addMonthToDate(now,-11+i);
             AlarmDataVO t = getAlertDataByStartEndTime(DateUtil.getPlusTime2(start),DateUtil.getPlusTime2(end));
@@ -523,6 +568,171 @@
         }
         return alarmHandleDataVOList;
     }
+    /**
+     * 銆愬洯鍖虹墿鏂欎腑蹇冭皟搴︺�戠湅鏉�-杩愯緭浠诲姟鍒嗘瀽
+     *
+     * @return
+     *
+     */
+    @Override
+    public  List<TransportMeasureVO> transportMeasure(Integer queryType){
+        List<TransportMeasureVO> list = new ArrayList<>();
+        Random random = new Random();
+        List<Date> dayList = DateUtil.getDateListBeforDays(new Date(),7);//杩�7澶�
+        if(Constants.equalsInteger(queryType,Constants.ONE)){
+            dayList = DateUtil.getThisMonthDateList();//鏈湀澶╂暟
+        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
+            dayList = DateUtil.getThisYearMonthList();//鏈勾鏈堜唤
+        }
+        List<PlatformJob>  dataList = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAs(PlatformJob::getId,PlatformJob::getId)
+                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
+//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .apply(queryType==0,"to_days(create_date) >= to_days(now()) -7")
+                        .apply(queryType==1,"year(create_date) = year(now()) and month(create_date) = month(now())")
+                        .apply(queryType==2,"year(create_date) = year(now())"));
+        for (Date date : dayList) {
+            TransportMeasureVO data = new TransportMeasureVO();
+            data.setPlanDate(date);
+            data.setPlanTimes(0);
+            data.setPlanTaskNum(new BigDecimal(random.nextInt(0)));
+            data.setFinishTaskNum(new BigDecimal(0));
+            for(PlatformJob job :dataList){
+                if(queryType == 2){
+                    if(DateUtil.formatDate(date,"yyyy-MM").equals(DateUtil.formatDate(job.getCreateDate(),"yyyy-MM"))){
+                        data.setPlanTimes( data.getPlanTimes() +1);
+                        data.setPlanTaskNum( data.getPlanTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
+                        if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())
+                                ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())
+                                ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){
+                            //瀹屾垚鏁�
+                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
+                        }
+                    }
+                }else{
+                    if(DateUtil.formatDate(date,"yyyy-MM-dd").equals(DateUtil.formatDate(job.getCreateDate(),"yyyy-MM-dd"))){
+                        data.setPlanTimes( data.getPlanTimes() +1);
+                        data.setPlanTaskNum( data.getPlanTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
+                        if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())
+                                ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())
+                                ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){
+                            //瀹屾垚鏁�
+                            data.setFinishTaskNum( data.getFinishTaskNum().add(Constants.formatBigdecimal(job.getTotalNum())));
+                        }
+                    }
+                }
+            }
+
+            list.add(data);
+        }
+        return list;
+    }
+    /**
+     * 銆愬洯鍖虹墿鏂欎腑蹇冭皟搴︺�戠湅鏉�-鏍规嵁杞︾墝鍙锋煡璇綔涓氫俊鎭拰鍚堝悓淇℃伅闆嗗悎
+     *
+     * @return
+     *
+     */
+    @Override
+    public    CarsJobAndContractVO getCarsJobDetails(CarsJobAndContractDTO param){
+        CarsJobAndContractVO data = new CarsJobAndContractVO();
+        if(StringUtils.isBlank(param.getCarCode())){
+            return  data;
+        }
+        PlatformJob job = platformJobMapper.selectJoinOne(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAll(PlatformJob.class)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .eq(PlatformJob::getCarCodeFront,param.getCarCode())
+                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),Constants.PlatformJobStatus.CALLED.getKey())
+                        .last("limit 1"));
+        if(job!=null){
+            List<PlatformLog>  logList = platformLogMapper.selectJoinList(PlatformLog.class,
+                    new MPJLambdaWrapper<PlatformLog>()
+                            .selectAll(PlatformLog.class)
+                            .eq(PlatformLog::getIsdeleted,Constants.ZERO)
+                            .eq(PlatformLog::getJobId,job.getId())
+                            .orderByDesc(PlatformLog::getCreateDate));
+            data.setLogList(logList);
+            data.setName(job.getDriverName());
+            data.setPhone(job.getDrivierPhone());
+            data.setBillCode(job.getBillCode());
+            data.setTotalNum(Constants.formatBigdecimal(job.getTotalNum()));
+            data.setContractList(new ArrayList<>());
+            CarsContractVO tt = new CarsContractVO();
+            tt.setIoCode(job.getContractNum());
+            tt.setDetailList(new ArrayList<>());
+            data.getContractList().add(tt);
+
+            PlatformWmsJob wmsJob = platformWmsJobMapper.selectJoinOne(PlatformWmsJob.class,
+                    new MPJLambdaWrapper<PlatformWmsJob>()
+                            .selectAll(PlatformWmsJob.class)
+                            .eq(PlatformWmsJob::getIsdeleted,Constants.ZERO)
+                            .eq(PlatformWmsJob::getJobId,job.getId())
+                            .last("limit 1"));
+            if(wmsJob!=null){
+                data.setName(wmsJob.getDriverName());
+                data.setPhone(wmsJob.getDriverPhone());
+                data.setBillCode(wmsJob.getCarryBillCode());
+                data.setContractList(new ArrayList<>());
+
+                List<PlatformWmsDetail>  detailList = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class,
+                        new MPJLambdaWrapper<PlatformWmsDetail>()
+                                .selectAll(PlatformWmsDetail.class)
+                                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO)
+                                .eq(PlatformWmsDetail::getWmsJobId,wmsJob.getId())
+                                .orderByDesc(PlatformLog::getCreateDate));
+                if(detailList!=null){
+                    for(PlatformWmsDetail d : detailList){
+                        if(!isNotExistIocode(d.getIocode(),data.getContractList())){
+                                continue;
+                        }
+                        tt = new CarsContractVO();
+                        tt.setIoCode(d.getIocode());
+                        tt.setAddress(d.getRepertotyAddress());
+                        tt.setDetailList(getDetailListByCode(d.getIocode(),detailList,tt));
+                        data.getContractList().add(tt);
+                        data.getTotalNum().add(Constants.formatBigdecimal(tt.getTotalNum()));//鎬昏繍杈撻噺
+                    }
+                }
+            }
+
+        }
+
+
+        return data;
+
+    }
+
+    private List<PlatformWmsDetail> getDetailListByCode(String iocode, List<PlatformWmsDetail> detailList,CarsContractVO tt) {
+        List<PlatformWmsDetail> list = new ArrayList<>();
+        BigDecimal total = new BigDecimal(0);
+        if(detailList!=null){
+            for(PlatformWmsDetail d :detailList){
+                if(StringUtils.equals(d.getIocode(),iocode)){
+                    list.add(d);
+                    total.add(Constants.formatBigdecimal(d.getIoQty()));
+                }
+            }
+        }
+        tt.setTotalNum(total);
+        return list;
+    }
+
+    private boolean isNotExistIocode(String iocode, List<CarsContractVO> detailList) {
+        if(detailList!=null){
+            for(CarsContractVO d :detailList){
+                if(StringUtils.equals(d.getIoCode(),iocode)){
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
     /**
      * 銆愭秷闃茬鎺с�戠湅鏉�-鍛婅淇℃伅闆嗗悎
      *
@@ -534,6 +744,236 @@
         AlarmDataVO alarmDataVO = getAlertDataByStartEndTime(DateUtil.getPlusTime2(DateUtil.addDaysToDate(new Date(),-1))
                 ,(DateUtil.getPlusTime2(new Date())));
         return  alarmDataVO;
+    }
+
+    /**
+     * 鏌ヨ鏈湀 鏈勾鐨勭疮璁″嚭搴撻噺缁熻鏁版嵁,鍑哄簱浠诲姟銆佸叆搴撲换鍔¢噺
+     * @return
+     */
+    @Override
+    public  PlatformJobRunBoardNewVO platformJobCenterData(){
+        PlatformJobRunBoardNewVO data = new PlatformJobRunBoardNewVO();
+        Random random = new Random();
+
+        data.setMonthOutTimes(random.nextInt(1000));
+        data.setYearOutTimes(random.nextInt(1000) * 11);
+
+        Date month  = Utils.Date.getStart(new Date());//鏈湀
+        Date lastMonth =  DateUtil.addMonthToDate(month,-1);//涓婃湀
+        Date year = Utils.Date.getStart(new Date());//浠婂勾
+        Date lastYear = DateUtil.addYearToDate(year,-1);//鍘诲勾
+
+        List<PlatformJob>  monthNum = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                .selectAs(PlatformJob::getId,PlatformJob::getId)
+                .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
+//                .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+//                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
+                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
+                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(month)+") and month(create_date) = month("+DateUtil.getPlusTime2(month)+") and to_days(create_date)<= "+DateUtil.getPlusTime2(month)));
+        List<PlatformJob>  monthLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAs(PlatformJob::getId,PlatformJob::getId)
+//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
+                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
+                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(lastMonth)+") and month(create_date) = month("+DateUtil.getPlusTime2(lastMonth)+") and to_days(create_date)<= "+DateUtil.getPlusTime2(lastMonth)));
+        List<PlatformJob>  yearNum = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAs(PlatformJob::getId,PlatformJob::getId)
+                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
+                        .selectCount(PlatformJob::getPlatformId,PlatformJob::getCountum)
+//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
+                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
+                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(year)+")   and to_days(create_date)<= "+DateUtil.getPlusTime2(year)));
+        List<PlatformJob> yearLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAs(PlatformJob::getId,PlatformJob::getId)
+                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
+//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
+                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
+                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(lastYear)+")  and to_days(create_date)<= "+DateUtil.getPlusTime2(lastYear)));
+
+        data.setMonthOutTotal(getSumTotalByList(monthNum,0,null));//鏈湀鍑哄簱閲�
+        data.setMonthLastOutTotal(getSumTotalByList(monthLastNum,null,null) );//涓婃湁鍑哄簱閲�
+        data.setYearOutTotal(getSumTotalByList(yearNum,null,null)  );//鏈勾鍑哄簱閲�
+        data.setYearLastOutTotal(getSumTotalByList(yearLastNum,null,null) );//鍘诲勾鍑哄簱閲�
+        data.setMonthOutTimes(monthNum!=null?monthNum.size():0);
+        data.setYearOutTimes(yearNum!=null?yearNum.size():0);
+
+        //==========浠婂ぉ涔嬪墠鏈畬鎴愬嚭鍏ュ簱浠诲姟
+        List<PlatformJob> beforeJobNum = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAs(PlatformJob::getId,PlatformJob::getId)
+                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
+                        .selectAs(PlatformJob::getType,PlatformJob::getType)
+                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
+//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),Constants.PlatformJobStatus.CALLED.getKey())
+                        .apply(" and to_days(create_date) <to_days(now())"));
+
+        //==========浠婂ぉ鍑哄叆搴撲换鍔�
+        List<PlatformJob> currentNum = platformJobMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAs(PlatformJob::getId,PlatformJob::getId)
+                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
+                        .selectAs(PlatformJob::getType,PlatformJob::getType)
+                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
+//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
+                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(lastYear)+")  and to_days(create_date)<= "+DateUtil.getPlusTime2(lastYear)));
+
+        BigDecimal beforeOutNum = (getSumTotalByList(beforeJobNum,0,null));//浠婂ぉ涔嬪墠鏈畬鎴愬嚭搴撲换鍔�
+        BigDecimal currentOutNum = (getSumTotalByList(currentNum,0,null));//浠婂ぉ涓嬪彂鍑哄簱浠诲姟
+        BigDecimal beforeInNum = (getSumTotalByList(beforeJobNum,1,null));//浠婂ぉ涔嬪墠鏈畬鎴愬叆搴撲换鍔�
+        BigDecimal currentInNum = (getSumTotalByList(currentNum,1,null));//浠婂ぉ涓嬪彂鍏ュ簱浠诲姟
+        data.setCurrentInNum(beforeInNum.add(currentInNum));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
+        data.setCurrentOutNum(beforeOutNum.add(currentOutNum));//褰撳墠鍑哄簱鎬讳换鍔℃垚閲�
+        data.setCurrentInDoneNum(getSumTotalByList(currentNum,0,1));//浠婃棩瀹屾垚閲�
+        data.setCurrentOutDoneNum(getSumTotalByList(currentNum,1,1));//浠婃棩瀹屾垚閲�
+
+        //------------浠婃棩鍑哄叆搴撴晥鐜�----------------
+        BigDecimal outHours = getTotalDoneTimes(currentNum,0);//
+        BigDecimal inHours = getTotalDoneTimes(currentNum,1);//
+        if(outHours.compareTo(new BigDecimal(0))>0){
+            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
+        }
+        if(inHours.compareTo(new BigDecimal(0))>0){
+            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//褰撳墠鍏ュ簱鎬讳换鍔℃垚閲�
+        }
+        //------------鏈湀鍑哄叆搴撴晥鐜�----------------
+        BigDecimal outMonthNum = getSumTotalByList(monthNum,0,null).add(data.getCurrentOutDoneNum());
+        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
+        BigDecimal outYearHours = getTotalDoneTimes(yearNum,0).add(outHours);//
+        BigDecimal inYearHours = getTotalDoneTimes(yearNum,1).add(inHours);//
+        if(outYearHours.compareTo(new BigDecimal(0))>0){
+            data.setMonthOutRate(outMonthNum.divide(outYearHours,2));//鏈湀鍏ュ簱鏁堢巼
+        }
+        if(inYearHours.compareTo(new BigDecimal(0))>0){
+            data.setMonthInRate(inMonthNum.divide(inYearHours,2));//鏈湀鍏ュ簱鏁堢巼
+        }
+        return data;
+    }
+
+
+    private BigDecimal getDoneHoursByData(String start ,String end) {
+        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
+                .apply("create_date >= '"+start+"' and create_date <= '"+end+"'")
+                .isNotNull(PlatformLog::getParam3)
+                .ne(PlatformLog::getParam3,Constants.ZERO+""));
+        if(platformLogList!=null && platformLogList.size()>0){
+            return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)60);
+        }
+
+        return new BigDecimal(0);
+
+    }
+    private BigDecimal getTotalDoneTimes(List<PlatformJob> list, Integer type) {
+        BigDecimal r = new BigDecimal(0);
+        if(list==null || list.size() == 0){
+            return r;
+        }
+        List<Integer> jobIds= new ArrayList<>();
+        for(PlatformJob job : list){
+            if( !(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())
+                    ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())
+                    ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()))){
+                //鍙煡璇㈠畬鎴愭暟鎹�
+                continue;
+            }
+            if(type !=null &&type ==0 &&  (Constants.equalsInteger(job.getType(),Constants.ONE) ||Constants.equalsInteger(job.getType(),Constants.THREE))){
+               //鍑哄簱
+               jobIds.add(job.getId());
+            }
+            if(type !=null &&type ==1 &&  (Constants.equalsInteger(job.getType(),Constants.ZERO) ||Constants.equalsInteger(job.getType(),Constants.TWO)||Constants.equalsInteger(job.getType(),Constants.FOUR))){
+                //鍏ュ簱
+                jobIds.add(job.getId());
+            }
+        }
+        if(jobIds.size()>0){
+            //澶勭悊浣滀笟鏃堕暱
+            List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
+                    .in(PlatformLog::getJobId,jobIds)
+                    .isNotNull(PlatformLog::getParam3)
+                    .ne(PlatformLog::getParam3,Constants.ZERO+""));
+            if(platformLogList!=null && platformLogList.size()>0){
+                return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)60);
+            }
+        }
+        return r;
+    }
+
+    private BigDecimal getSumTotalByList(List<PlatformJob> list,Integer type,Integer status) {
+        BigDecimal r = new BigDecimal(0);
+        if(list==null || list.size() == 0){
+            return r;
+        }
+        for(PlatformJob job : list){
+
+            if(type !=null &&type ==0 && !(Constants.equalsInteger(job.getType(),Constants.ONE) ||Constants.equalsInteger(job.getType(),Constants.THREE))){
+                continue;
+            }
+            if(type !=null &&type ==1 && !(Constants.equalsInteger(job.getType(),Constants.ZERO) ||Constants.equalsInteger(job.getType(),Constants.TWO)||Constants.equalsInteger(job.getType(),Constants.FOUR))){
+                continue;
+            }
+            if(status !=null &&status ==1 && !(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())
+                    ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())
+                    ||Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()))){
+                continue;
+            }
+//            if(Constants.formatBigdecimal(job.getIoQty()).compareTo(new BigDecimal(0)) >0){
+//                r.add( job.getIoQty());
+//            }else{
+                r.add(Constants.formatBigdecimal(job.getTotalNum()));
+//            }
+        }
+        return Constants.formatBigdecimal0Float(r);
+    }
+
+    @Override
+    public     BoardCarsListVO platformJobCarsList(){
+        BoardCarsListVO data = new BoardCarsListVO();
+        List<CarsDeviceDetaisResponse> detaisResponses = HKCarOpenService.getAllCarsDetais();
+        data.setCarsList(detaisResponses);
+        if(data.getCarsList()!=null && data.getCarsList().size()>0){
+            List<String> codes = new ArrayList<>();
+            //璁惧鐘舵�� 0锛氱绾匡紱1锛氬湪绾匡紱2锛氫紤鐪�
+            int online = 0;
+            for(CarsDeviceDetaisResponse model:detaisResponses){
+                if(Constants.equalsInteger(model.getStatus(),Constants.ONE) ||Constants.equalsInteger(model.getStatus(),Constants.TWO)){
+                   //濡傛灉鏄湪绾挎垨鑰呬紤鐪狅紝鏌ヨ鍦ㄩ�旇繕鏄┖闂�
+                    codes.add(model.getPlateNum());
+                }else
+                    data.setOfflineNum(data.getOfflineNum()+1);
+                }
+            if(codes.size()>0){
+                //鐘舵�� 0寰呯‘璁� 1寰呯鍒� 2绛夊緟鍙彿 3鍏ュ洯绛夊緟 4宸插彨鍙� 5浣滀笟涓� 6浣滀笟瀹屾垚 7杞Щ涓� 8寮傚父鎸傝捣 9宸叉巿鏉冪鍥� 10宸茬鍥� 11 宸茶繃鍙�  12鍙栨秷锛圵MS锛�
+                long busyNum = platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .in(PlatformJob::getCarCodeFront,codes)
+                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()
+                                ,Constants.PlatformJobStatus.WAIT_CALL.getKey()
+                                ,Constants.PlatformJobStatus.CALLED.getKey()
+                                ,Constants.PlatformJobStatus.IN_WAIT.getKey()
+                                ,Constants.PlatformJobStatus.TRANSFERING.getKey()
+                                ,Constants.PlatformJobStatus.WART_SIGN_IN.getKey()
+                                ,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey()
+                                ,Constants.PlatformJobStatus.EXCEPTION.getKey())
+                        .groupBy(PlatformJob::getCarCodeFront));
+                data.setBusyNum((int)busyNum);//鍦ㄩ�旀湁浠诲姟鏁伴噺
+                data.setIdleNum(codes.size() -data.getBusyNum());//鏃犱换鍔$┖闂叉暟閲�
+            }
+        }
+
+        return  data;
     }
 
     public static AlarmDataVO getAlertDataByStartEndTime(String start,String end){
@@ -615,12 +1055,12 @@
         data.setDeviceTypeList(list);
         Long totalNum =hiddenDangerMapper.selectCount(new QueryWrapper<HiddenDanger>().lambda()
                 .eq(HiddenDanger::getIsdeleted,Constants.ZERO )
-                .apply("to_day(create_data) = to_days(now())" ) );
+                .apply("to_days(create_date) = to_days(now())" ) );
         data.setDangerTotalNum(totalNum !=null?totalNum.intValue():0);//浠婃棩闅愭偅鏁伴噺
         totalNum =hiddenDangerMapper.selectCount(new QueryWrapper<HiddenDanger>().lambda()
                 .eq(HiddenDanger::getIsdeleted,Constants.ZERO )
                 .in(HiddenDanger::getStatus,Constants.ONE,Constants.TWO )
-                .apply("to_day(check_date) = to_days(now())" ) );
+                .apply("to_days(check_date) = to_days(now())" ) );
         data.setDangerDealedNum(totalNum !=null?totalNum.intValue():0);//浠婃棩澶勭悊闅愭偅鏁伴噺
         return  data;
     }
@@ -1065,7 +1505,7 @@
         List<WorkEfficiencyVO> workEfficiencyVOList = new ArrayList<>();
         List<PlatformJob> jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>()
                 .selectAll( PlatformJob.class)
-                .select("(select sum(ifnull(a.io_qty,0)) from platform_wms_detail a where a.isdeleted=0 and a.job_id =t.id )", PlatformJob::getIoQty)
+//                .select("(select sum(ifnull(a.io_qty,0)) from platform_wms_detail a where a.isdeleted=0 and a.job_id =t.id )", create_date)
                 .apply("to_days(t.create_date) = to_days(now())")
                 .eq(Platform::getIsdeleted, Constants.ZERO)
                 .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey()
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
index d6ce594..cc451b8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
@@ -12,6 +12,8 @@
 import com.doumee.core.wms.model.response.WmsBaseDataResponse;
 import com.doumee.core.wms.model.response.WmsBaseResponse;
 import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
+import com.doumee.core.wx.wxPlat.WxPlatConstants;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.SmsConfigMapper;
 import com.doumee.dao.business.dao.SmsEmailMapper;
@@ -28,6 +30,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -63,6 +66,8 @@
     private EmayService emayService;
     @Autowired
     private RetentionMapper retentionMapper;
+    @Autowired
+    private WxNoticeConfigMapper wxNoticeConfigMapper;
     /**
      * 鍏ュ簱閫氱煡浠诲姟涓氬姟澶勭悊
      * @param job 鍙傛暟
@@ -261,6 +266,7 @@
                     job.setPlateNumber(param.getPlateNumber());
                     job.setType(Constants.ZERO);
                     job.setIoCreatedate(param.getCreateDate());
+//                    job.setOrigin(Constants.ONE);
                     job.setJobId(model.getId());
                     job.setDriverPhone(param.getDriverPhone());
                     platformWmsJobMapper.insert(job);
@@ -316,7 +322,22 @@
                         emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,job.getId(),
                         SmsConstants.platformJobContent.platformJobNewJob,null,null
                 );
+                //鏌ヨ鍙告満淇℃伅 鍙戦�佸叕浼楀彿閫氱煡
+                if(Objects.nonNull(job.getDriverId())){
+                    Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getPhone,job.getDriverId()));
+                    if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                        WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                        wxPlatNotice.sendWmsTemplateNotice(
+                                wxNoticeConfigMapper,job,
+                                WxPlatConstants.platformJobContent.platformJobNewJob,
+                                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                                Arrays.asList(member.getOpenid().split(","))
+                        );
+                    }
+                }
             }
+
+
         }
     }
 
@@ -331,6 +352,7 @@
         job.setCarCodeFront(param.getPlateNumber());
         job.setDrivierPhone(param.getDriverPhone());
         job.setDriverName(param.getDriverName());
+        job.setOrigin(Constants.ONE);
         //澶勭悊浣滀笟鐨勮溅杈嗐�佸徃鏈恒�佹湀鍙扮粍鍏宠仈鍏崇郴锛屽嵏璐�
         dealCarPlatformAndDriverInfo(job,0);
 //        platformJobMapper.insert(job);
@@ -399,6 +421,7 @@
         job.setCarCodeFront(param.getPlateNumber());
         job.setDrivierPhone(param.getDriverPhone());
         job.setDriverName(param.getDriverName());
+        job.setOrigin(Constants.ONE);
         //澶勭悊浣滀笟鐨勮溅杈嗐�佸徃鏈恒�佹湀鍙扮粍鍏宠仈鍏崇郴锛岃璐�
         dealCarPlatformAndDriverInfo(job,1);
         return job;
@@ -416,6 +439,7 @@
                 return returnFailReuslt("璇锋眰鍙傛暟涓嶆纭紝鍙傛暟涓嶈兘涓虹┖");
             }
             List<PlatformJob> jobList = new ArrayList<>();
+            List<Integer> jobIdList = new ArrayList<>();
             List<PlatformWmsDetail> details = new ArrayList<>();
             List<String> iocodeList = new ArrayList<>();
             for(WmsOutboundNoticeRequest param : list.getData()){
@@ -450,9 +474,10 @@
                     job.setContractNum(param.getContractNum());
                     job.setDriverPhone(param.getDriverPhone());
                     job.setDriverName(param.getDriverName());
+//                    job.setOrigin(Constants.ONE);
                     platformWmsJobMapper.insert(job);
-                    jobList.add(model);
                 }
+                jobIdList.add(job.getId());
                 if(param.getDetails()!=null && param.getDetails().size()>0){
                     for(WmsOutboundDetailRequest d :param.getDetails()){
                         PlatformWmsDetail entity = new PlatformWmsDetail();
@@ -462,6 +487,7 @@
                         entity.setJobId(job.getJobId());
                         entity.setWmsJobId(job.getId());
                         entity.setIoQty(d.getIoQty());
+                        entity.setRepertotyAddress(job.getRepertotyAddress());
                         entity.setWmsJobId(job.getId());
                         entity.setStatus(Constants.ZERO);
                         entity.setRate(d.getRate());
@@ -478,12 +504,14 @@
                                 .in(PlatformWmsDetail::getIocode,iocodeList)
                         );
                     }
+                    jobIdList.add(job.getId());
                 }
             }
             if(details.size()>0){
                 platformWmsDetailMapper.insert(details);
             }
             if(jobList.size()>0){
+                list.setJobIdList(jobIdList);
                 startEndNoticeToDriver(jobList);
             }
         }catch (Exception e){
@@ -537,12 +565,29 @@
                             .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                             .in(PlatformJob::getId,setJobIds)
                     );
+
                     for (Integer jobId:setJobIds
                     ) {
+                        //鐭俊閫氱煡
                         SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz,
                                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId,
                                 SmsConstants.platformJobContent.platformJobStopJob,null,null
                         );
+                        //鍏紬鍙烽�氱煡鍙告満 浠诲姟鍙栨秷
+                        PlatformJob job = platformJobMapper.selectById(jobId);
+                        if(Objects.nonNull(job)){
+                             Member member = memberMapper.selectById(job.getDriverId());
+                            if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                                wxPlatNotice.sendWmsCancelTemplateNotice(
+                                        wxNoticeConfigMapper,job,
+                                        WxPlatConstants.platformJobContent.platformJobCancel,
+                                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                                        Arrays.asList(member.getOpenid().split(","))
+                                );
+                            }
+                        }
+
                     }
                 }
             }
@@ -603,6 +648,21 @@
                                 emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId,
                                 SmsConstants.platformJobContent.platformJobStopJob,null,null
                         );
+
+                        //鍏紬鍙烽�氱煡鍙告満 浠诲姟鍙栨秷
+                        PlatformJob job = platformJobMapper.selectById(jobId);
+                        if(Objects.nonNull(job)){
+                             Member member = memberMapper.selectById(job.getDriverId());
+                            if(Objects.nonNull(member) && StringUtils.isNotBlank(member.getOpenid())){
+                                WxPlatNotice wxPlatNotice = new WxPlatNotice();
+                                wxPlatNotice.sendWmsCancelTemplateNotice(
+                                        wxNoticeConfigMapper,job,
+                                        WxPlatConstants.platformJobContent.platformJobCancel,
+                                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
+                                        Arrays.asList(member.getOpenid().split(","))
+                                );
+                            }
+                        }
                     }
                 }
             }
@@ -615,6 +675,33 @@
         return returnSuccessReuslt(null);
     }
     /**
+     * 澶勭悊浣滀笟琛屾暟鎹殑杩愯緭鎬婚噺淇℃伅
+     * @param jobList 鍙傛暟
+     * @return
+     */
+    @Override
+    public void computjobTotalNum(List<Integer> jobList) {
+        if(jobList==null || jobList.size()==0){
+            return;
+        }
+        for(Integer jobId : jobList){
+            BigDecimal num = new BigDecimal(0);
+            List<PlatformWmsDetail> details =   platformWmsDetailMapper.selectList( new QueryWrapper<PlatformWmsDetail>().lambda()
+                    .eq(PlatformWmsDetail::getJobId,jobId)
+                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO));
+            if(details!=null && details.size()>0){
+                for(PlatformWmsDetail d :details){
+                   num.add(Constants.formatBigdecimal(d.getIoQty()));
+                }
+                platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda()
+                        .set(PlatformJob::getTotalNum,num)
+                        .eq(PlatformJob::getOrigin, Constants.ZERO)
+                        .eq(PlatformJob::getId, jobId));
+            }
+
+        }
+    }
+    /**
      * 浣滀笟瀹屾垚閫氱煡浠诲姟涓氬姟澶勭悊
      * @param list 鍙傛暟
      * @return
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java
index fe0d750..9d9bde7 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java
@@ -4,14 +4,8 @@
 import com.doumee.core.haikang.model.param.respose.PageRegionInfoResponse;
 import com.doumee.core.haikang.model.param.respose.PageSensorStatusResponse;
 import com.doumee.core.haikang.model.param.respose.RegionEnergyListResponse;
-import com.doumee.core.tms.model.request.TmsLockStatusQueryRequest;
-import com.doumee.core.tms.model.request.TmsOrderInfoRequest;
-import com.doumee.core.tms.model.request.TmsOrderListRequest;
-import com.doumee.core.tms.model.response.TmsBaseResponse;
-import com.doumee.core.tms.model.response.TmsLockStatusQueryResponse;
-import com.doumee.core.tms.model.response.TmsOrderInfoResponse;
-import com.doumee.core.tms.model.response.TmsOrderListResponse;
 import com.doumee.dao.business.model.PlatformWarnEvent;
+import com.doumee.dao.web.reqeust.CarsJobAndContractDTO;
 import com.doumee.dao.web.response.platformReport.*;
 
 import java.util.List;
@@ -81,4 +75,14 @@
     List<AlarmDataVO> fightingAlarmHandleData();
 
     List<MonitorDataVO> monitorDataList();
+
+    BoardCarsListVO platformJobCarsList();
+
+    PlatformJobRunBoardNewVO platformJobCenterData();
+
+    CarsJobAndContractVO getCarsJobDetails(CarsJobAndContractDTO param);
+
+    List<TransportMeasureVO> transportMeasure(Integer queryType);
+
+    BoardStockListVO stockList();
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java
index ff305ea..ee20ede 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/WmsService.java
@@ -5,6 +5,7 @@
 import com.doumee.core.wms.model.request.WmsInboundNoticeRequest;
 import com.doumee.core.wms.model.request.WmsOutboundNoticeRequest;
 import com.doumee.core.wms.model.response.WmsBaseResponse;
+import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
 import com.doumee.dao.business.model.PlatformJob;
 
 import java.util.List;
@@ -21,7 +22,7 @@
      * @return WmsBaseResponse
      */
     WmsBaseResponse orderPlatformBind(PlatformJob job);
-    WmsBaseResponse getInventoryList();
+    WmsBaseResponse<WmsInventoryDataResponse> getInventoryList();
     void  saveInterfaceLog(String url,String name,String  param,Integer success,String respone,int type);
     /**
      * 鍏ュ簱鍗曟壒閲忛�氱煡
@@ -57,4 +58,5 @@
     WmsBaseResponse doneTask(WmsBaseRequest<WmsActionNoticeRequest> list);
 
 
+    void computjobTotalNum(List<Integer> jobList);
 }
diff --git a/server/visits/openapi/src/main/resources/application.yml b/server/visits/openapi/src/main/resources/application.yml
index 96b89ae..a69bc7c 100644
--- a/server/visits/openapi/src/main/resources/application.yml
+++ b/server/visits/openapi/src/main/resources/application.yml
@@ -36,7 +36,7 @@
 cache:
   session:
     # 浼氳瘽杩囨湡鏃堕暱(s)
-    expire: 18000
+    expire: 1800
   captcha:
     # 楠岃瘉鐮佽繃鏈熸椂闀�(s)
     expire: 300

--
Gitblit v1.9.3