From a2e8793e2c53c7e80b67c1fe407b78fde59b2296 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 29 十一月 2024 10:01:27 +0800
Subject: [PATCH] 最新版本541200007

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                               |   11 
 server/visits/admin_timer/src/main/resources/application.yml                                                           |    2 
 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/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/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/dao/web/response/platformReport/BoardJobCenterDataVO.java       |   28 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceDetaisResponse.java  |   23 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java                      |  157 ++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsPageResponse.java               |   18 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/BaseCarsResponse.java                   |   17 
 admin/src/api/business/areas.js                                                                                        |   43 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformLogMapper.java                             |    3 
 server/visits/openapi/src/main/resources/application.yml                                                               |    2 
 admin/src/views/business/areas.vue                                                                                     |  160 ++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsContractVO.java             |   30 +
 admin/.env.development                                                                                                 |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsDetail.java                       |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformWmsJob.java                          |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmEventDataVO.java           |    2 
 admin/src/components/business/OperaAreasWindow.vue                                                                     |   94 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java                 |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardCarsListVO.java            |   31 +
 server/visits/dmvisit_admin/src/main/resources/application.yml                                                         |    2 
 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/dao/business/PlatformWmsJobMapper.java                          |    3 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                                |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/cars/response/CarsDeviceChannelResponse.java |   16 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java                         |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsJobAndContractVO.java       |   36 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/CarsJobAndContractDTO.java                      |   19 
 server/visits/dmvisit_screen/src/main/resources/application.yml                                                        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java               |  381 ++++++++++++++
 server/system_gateway/src/main/resources/application.yml                                                               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/BoardService.java                        |    9 
 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 
 39 files changed, 1,512 insertions(+), 30 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 3dfdc65..2fd4c21 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -1,8 +1,8 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
 
-#VUE_APP_API_URL  = 'http://localhost:10010'
+VUE_APP_API_URL  = 'http://localhost:10010'
 # VUE_APP_API_URL  = 'http://192.168.0.113:10010'
 # VUE_APP_API_URL  = 'http://192.168.0.173/gateway_interface'
- VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
+ #VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
 
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/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/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/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_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..5a66940 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" ;
@@ -470,6 +473,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);
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..138be2b 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
@@ -442,7 +442,7 @@
      * @return String
      * @throws Exception
      */
-    public static String getNowPlusTime() throws Exception {
+    public static String getNowPlusTime()   {
         String nowDate = "";
         try {
             java.sql.Date date = null;
@@ -3042,6 +3042,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_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/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/board/PlatformJobRunActController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java
new file mode 100644
index 0000000..d990173
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunActController.java
@@ -0,0 +1,157 @@
+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<List<GeneralVO>> stockList() {
+        List<GeneralVO> list = new ArrayList<>();
+        for (int i = 1; i < 10; 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);
+    }
+
+
+}
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..68ad75d 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
@@ -98,9 +98,6 @@
     }
 
 
-
-
-
     @LoginNoRequired
     @ApiOperation("褰撴棩杩愯緭浠诲姟")
     @GetMapping("/platformJobList")
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/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/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/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/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..af71293 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
@@ -75,7 +75,9 @@
     @ApiModelProperty(value = "鍙告満濮撳悕")
     @ExcelColumn(name="鍙告満濮撳悕")
     private String driverName;
-
+    @ApiModelProperty(value = "鏀惰揣鍦�")
+    @ExcelColumn(name="鏀惰揣鍦�")
+    private String repertotyAddress;
     @ApiModelProperty(value = "鎵胯繍鍟�")
     @ExcelColumn(name="鎵胯繍鍟�")
     private String carrierName;
@@ -104,10 +106,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/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..a523f02
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardCarsListVO.java
@@ -0,0 +1,31 @@
+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.math.BigDecimal;
+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..5535006
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/BoardJobCenterDataVO.java
@@ -0,0 +1,28 @@
+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 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/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..72183e1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarsJobAndContractVO.java
@@ -0,0 +1,36 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.core.haikang.model.cars.response.CarsDeviceDetaisResponse;
+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 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/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/thrid/BoardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
index 8886314..554c9fe 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
@@ -6,11 +6,13 @@
 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.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;
@@ -22,6 +24,7 @@
 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.CarsJobAndContractDTO;
 import com.doumee.dao.web.reqeust.SavePlatformWarnEventDTO;
 import com.doumee.dao.web.response.platformReport.*;
 import com.doumee.service.business.impl.PlatformJobServiceImpl;
@@ -62,6 +65,8 @@
     private PlatformJobMapper platformJobMapper;
     @Autowired
     private PlatformWmsDetailMapper platformWmsDetailMapper;
+    @Autowired
+    private PlatformWmsJobMapper platformWmsJobMapper;
     @Autowired
     private PlatformMapper platformMapper;
     @Autowired
@@ -451,6 +456,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 +471,7 @@
                 data.add(t);
             }
         }
-            return data;
+        return data;
 
     }
     /**
@@ -477,7 +484,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 +521,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 +530,138 @@
         }
         return alarmHandleDataVOList;
     }
+    /**
+     * 銆愬洯鍖虹墿鏂欎腑蹇冭皟搴︺�戠湅鏉�-杩愯緭浠诲姟鍒嗘瀽
+     *
+     * @return
+     *
+     */
+    @Override
+    public  List<TransportMeasureVO> transportMeasure(Integer queryType){
+        List<TransportMeasureVO> list = new ArrayList<>();
+        Random random = new Random();
+        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
+        if(Constants.equalsInteger(queryType,Constants.ONE)){
+            dayList = DateUtil.getBeforDays(new Date(),30);
+        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
+            dayList = DateUtil.getBeforMonth(new Date(),12);
+        }
+
+
+        for (String str:dayList) {
+            TransportMeasureVO data = new TransportMeasureVO();
+            data.setPlanDate(str);
+            data.setPlanTimes(random.nextInt(200));
+            data.setPlanTaskNum(new BigDecimal(random.nextInt(1000)));
+            data.setFinishTaskNum(new BigDecimal(data.getPlanTaskNum().intValue()));
+            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 +673,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",PlatformJob::getIoQty)
+                        .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",PlatformJob::getIoQty)
+                        .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",PlatformJob::getIoQty)
+                        .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",PlatformJob::getIoQty)
+                        .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",PlatformJob::getIoQty)
+                        .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",PlatformJob::getIoQty)
+                        .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 +984,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;
     }
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..9ed7e62 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
@@ -462,6 +462,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());
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..0e07eb7 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
@@ -12,6 +12,7 @@
 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 +82,12 @@
     List<AlarmDataVO> fightingAlarmHandleData();
 
     List<MonitorDataVO> monitorDataList();
+
+    BoardCarsListVO platformJobCarsList();
+
+    PlatformJobRunBoardNewVO platformJobCenterData();
+
+    CarsJobAndContractVO getCarsJobDetails(CarsJobAndContractDTO param);
+
+    List<TransportMeasureVO> transportMeasure(Integer queryType);
 }
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