From f3c59a17062fb0a89b5f89b7845341386952a6b1 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 24 九月 2025 16:01:06 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/views/platform/LogisticsRecord/waybill.vue                                                     |  224 ++++++++++++-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java                  |    8 
 h5/pages/waybill/waybillDetail.vue                                                                       |    2 
 server/system_service/pom.xml                                                                            |    6 
 server/system_service/src/main/java/com/doumee/core/utils/TspSolver.java                                 |  158 +++++++++
 admin/src/components/business/OperaPlatformWindow.vue                                                    |   18 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java               |   43 +-
 admin/src/api/platform/index.js                                                                          |    4 
 admin/src/views/platform/platform.vue                                                                    |   17 +
 admin/public/template/member.xlsx                                                                        |    0 
 screen/src/views/SecurityControl.vue                                                                     |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java |    5 
 server/system_service/src/main/java/com/doumee/core/utils/GraphByMatrix.java                             |  258 ++++++++++++++++
 h5/pages/waybill/list.vue                                                                                |   11 
 admin/src/views/vehicle/cars.vue                                                                         |    2 
 admin/src/views/business/dangerStatic.vue                                                                |    2 
 admin/src/views/platform/set/index.vue                                                                   |   14 
 server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java                              |  108 ++++++
 h5/pages/staff/snapshot.vue                                                                              |    8 
 server/doc/月台自动加号数据库变动脚本.md                                                                              |    9 
 admin/src/components/business/OperaCarsWindow.vue                                                        |    2 
 screen/src/views/FireFighting.vue                                                                        |   11 
 22 files changed, 840 insertions(+), 77 deletions(-)

diff --git a/admin/public/template/member.xlsx b/admin/public/template/member.xlsx
index 1e0a152..b2f83b7 100644
--- a/admin/public/template/member.xlsx
+++ b/admin/public/template/member.xlsx
Binary files differ
diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js
index c663d9c..4e07a6e 100644
--- a/admin/src/api/platform/index.js
+++ b/admin/src/api/platform/index.js
@@ -135,6 +135,10 @@
 export function dealJobFinish (data) {
   return request.post('/visitsAdmin/cloudService/business/platformJob/dealJobFinish', data)
 }
+// 鏇存崲鏈堝彴缁�
+export function changPlatformGroup (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformJob/changPlatformGroup', data)
+}
 // 鎭㈠浣滀笟
 export function restoreWork (data) {
   return request.post('/visitsAdmin/cloudService/business/platformJob/restoreWork', data)
diff --git a/admin/src/components/business/OperaCarsWindow.vue b/admin/src/components/business/OperaCarsWindow.vue
index 376a3da..4d74438 100644
--- a/admin/src/components/business/OperaCarsWindow.vue
+++ b/admin/src/components/business/OperaCarsWindow.vue
@@ -187,7 +187,7 @@
     },
     getCate () {
       fetchList({
-        model: {},
+        model: { type: 1 },
         capacity: 1000,
         page: 1
       }).then(res => {
diff --git a/admin/src/components/business/OperaPlatformWindow.vue b/admin/src/components/business/OperaPlatformWindow.vue
index ea0d065..617e97b 100644
--- a/admin/src/components/business/OperaPlatformWindow.vue
+++ b/admin/src/components/business/OperaPlatformWindow.vue
@@ -14,6 +14,12 @@
           </el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="鏈堝彴绫诲瀷" prop="type" >
+        <el-radio-group v-model="form.type" >
+          <el-radio :label="0">鏁存墭鐩�</el-radio>
+          <el-radio :label="1">鏁d欢</el-radio>
+        </el-radio-group>
+      </el-form-item>
       <el-form-item label="骞挎挱璁惧锛�" prop="broadcastIds">
         <el-select v-model="form.broadcastIds" multiple>
           <el-option v-for="item in broadcastList" :key="item.id" :label="item.name" :value="item.id">
@@ -29,8 +35,11 @@
       <el-form-item label="LED绌洪棽鏂囨锛�" prop="ledContent">
         <el-input type="text" v-model="form.ledContent" placeholder="璇疯緭鍏ED绌洪棽鏂囨" v-trim />
       </el-form-item>
-      <el-form-item label="鍚屾椂浣滀笟鏁伴噺锛�" prop="workingNum">
-        <el-input type="number" v-model="form.workingNum" placeholder="璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�" v-trim />
+      <el-form-item label="鍚屾椂鍙彿鏁伴噺锛�" prop="workingNum">
+        <el-input type="number" v-model="form.workingNum" placeholder="璇疯緭鍏ュ悓鏃跺彨鍙锋暟閲�" v-trim />
+      </el-form-item>
+      <el-form-item label="鍚屾椂鍑嗗鏁伴噺锛�" prop="callReadyNum">
+        <el-input type="number" v-model="form.callReadyNum" placeholder="璇疯緭鍏ュ悓鏃跺噯澶囨暟閲�" v-trim />
       </el-form-item>
       <el-form-item label="鏈堝彴浣滀笟鏁堢巼(涓囨敮/灏忔椂)锛�" prop="workRate">
         <el-input type="number" v-model="form.workRate" placeholder="璇疯緭鍏ユ湀鍙颁綔涓氭晥鐜�(涓囨敮/灏忔椂)" v-trim />
@@ -67,6 +76,7 @@
       form: {
         id: null,
         ledIds: null,
+        type:0,
         broadcastIds: null,
         name: '',
         code: '',
@@ -74,6 +84,7 @@
         startTime: '',
         endTime: '',
         workingNum: 1,
+        鍚屾椂浣滀笟鏁伴噺: 0,
         ledContent: '',
         workRate: '',
         stayTimeoutAlarmTime: '',
@@ -82,7 +93,8 @@
       },
       // 楠岃瘉瑙勫垯
       rules: {
-        workingNum: [{ required: true, validator: numRuleGtZero, message: '璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�,蹇呴』澶т簬0! ', trigger: 'blur' }],
+        workingNum: [{ required: true, validator: numRuleGtZero, message: '璇疯緭鍏ュ悓鏃跺彨鍙锋暟閲�,蹇呴』澶т簬0! ', trigger: 'blur' }],
+        type: [{ required: true, message: '鏈堝彴绫诲瀷涓嶈兘涓虹┖锛�', trigger: 'blur' }],
         sortnum: [{ required: true, message: '鎺掑簭鐮佷笉鑳戒负绌猴紒', trigger: 'blur' }]
       }
     }
diff --git a/admin/src/views/business/dangerStatic.vue b/admin/src/views/business/dangerStatic.vue
index b43d2af..26cb9dc 100644
--- a/admin/src/views/business/dangerStatic.vue
+++ b/admin/src/views/business/dangerStatic.vue
@@ -154,7 +154,7 @@
 
           this.yearList = res.yearList
 
-          this.departmentList = res.departmentList.slice(0, 10)
+          this.departmentList = res.departmentSortList.slice(0, 10)
 
           this.typeList = res.cateList || []
           this.deptList = res.departmentList || []
diff --git a/admin/src/views/platform/LogisticsRecord/waybill.vue b/admin/src/views/platform/LogisticsRecord/waybill.vue
index f40ad7f..b80fc18 100644
--- a/admin/src/views/platform/LogisticsRecord/waybill.vue
+++ b/admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -23,11 +23,16 @@
       <el-table-column prop="totalNum" label="鎬讳綔涓氶噺锛堜竾鏀級" min-width="130" show-overflow-tooltip />
       <el-table-column prop="carCodeFront" label="杞︾墝鍓嶇収鍙�" min-width="100" show-overflow-tooltip />
       <!-- <el-table-column prop="carCodeBack" label="杞︾墝鍚庣収鍙�" min-width="100" show-overflow-tooltip /> -->
-      <el-table-column prop="taskOrigin" label="浠诲姟鏉ユ簮" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="origin" label="浠诲姟鏉ユ簮" min-width="100" show-overflow-tooltip >
+        <template v-slot="scope">
+          <span v-if="scope.row.origin == 1">WMS鑾峰彇</span>
+          <span v-else>鑷缓浠诲姟</span>
+        </template>
+      </el-table-column>
       <el-table-column prop="carrierName" label="杩愯緭鍏徃" min-width="100" show-overflow-tooltip />
       <el-table-column prop="driverName" label="鍙告満" min-width="100" show-overflow-tooltip />
       <el-table-column prop="drivierPhone" label="鍙告満鐢佃瘽" min-width="100" show-overflow-tooltip />
-<!--      <el-table-column prop="wmsContractNum" label="WMS鍚堝悓鍙�" min-width="100" show-overflow-tooltip >
+<!--  <el-table-column prop="wmsContractNum" label="WMS鍚堝悓鍙�" min-width="100" show-overflow-tooltip >
       <template v-slot="scope">
         <span v-if="scope.row.platformWmsJob">{{ scope.row.platformWmsJob.contractNum }}</span>
       </template>
@@ -39,6 +44,17 @@
           <span v-if="scope.row.type == '2'">澶栧崗杞﹀嵏璐�</span>
           <span v-if="scope.row.type == '3'">澶栧崗杞﹁璐�</span>
           <span v-if="scope.row.type == '4'">甯傚叕鍙稿鍗忚溅鍗歌揣</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="platformGroupName" label="浣滀笟鏈堝彴缁�" min-width="150"  show-overflow-tooltip >
+        <template v-slot="scope">
+          <div style="display: flex;align-items: center;align-content: center;width: 100%">
+          <div  style="max-width: 100px;display: inline-block;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            word-wrap: break-word;">{{scope.row.platformGroupName||'-'}}</div>
+          <el-button  type="text" style="font-size: 10px;color: red;margin-top: 5px;margin-left: 10px " @click="changeGroup(scope.row)" v-if="[0,1,2].includes(scope.row.status)">鏇存崲</el-button>
+          </div>
         </template>
       </el-table-column>
       <el-table-column prop="ioCreatedate" label="鍒涘缓鏃堕棿" min-width="150" show-overflow-tooltip />
@@ -62,20 +78,68 @@
     <!--  -->
     <!--  -->
     <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" />
+    <el-dialog append-to-body title="鏇存崲鏈堝彴缁�" style="text-align: center" class="dialogCl" :visible.sync="showChangeGroup" width="480px" top="10%">
+      <div class="head"  v-if="showChangeGroup && curRow">
+        <div class="plate" v-if="curRow.carCodeFront">
+          <span>{{ curRow.carCodeFront.slice(0, 1) }}</span>
+          <span>{{ curRow.carCodeFront.slice(1, 2) }}</span>
+          <span>路</span>
+          <span>{{ curRow.carCodeFront.slice(2) }}</span>
+        </div>
+        <div class="list">
+          <div class="item">
+            <span>杩愯緭鍗曞彿锛�</span>
+            <span>{{ curRow.billCode }}</span>
+          </div>
+          <div class="item">
+            <span>鎬昏繍杈撻噺锛�</span>
+            <span>{{ curRow.totalNum  }}涓囨敮</span>
+          </div>
+          <div class="item">
+            <span>椹鹃┒鍛橈細</span>
+            <span>{{ curRow.driverName }} {{ curRow.drivierPhone }}</span>
+          </div>
+          <div class="item">
+            <span>褰撳墠鏈堝彴缁勶細</span>
+            <span>{{ curRow.platformGroupName }}</span>
+          </div>
+        </div>
+      </div>
+      <el-form :model="groupForm" ref="form"   >
+        <el-form-item label="閫夋嫨鏈堝彴缁�" prop="platformGroupId" required>
+          <el-select v-model="groupForm.platformGroupId" placeholder="璇烽�夋嫨鏈堝彴鍒嗙粍 ">
+            <el-option v-for="item in rowGroupList" :key="item.id" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="showChangeGroup = false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="dealing" @click="changeGroupDo">纭畾</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
-import { platformJobPage, platformJobExport, platformJobDel, dealJobFinish ,updateTotalNum} from '@/api'
+import {
+  platformJobPage,
+  platformJobExport,
+  platformJobDel,
+  dealJobFinish,
+  updateTotalNum,
+  changPlatformGroup
+} from '@/api'
 import { statusMap } from '../config'
-import WaybillDetailRef from "../components/WaybillDetail.vue"
+import WaybillDetailRef from '../components/WaybillDetail.vue'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import UploadFaceImg from '@/components/common/UploadFaceImg'
 import { Message } from 'element-ui'
 import dayjs from 'dayjs'
-import BaseComputHeight from "@/components/base/BaseComputHeight";
+import BaseComputHeight from '@/components/base/BaseComputHeight'
+import { allList } from '@/api/platform/platformGroup'
 export default {
   extends: BaseComputHeight,
   components: {
@@ -85,10 +149,15 @@
     GlobalWindow,
     UploadFaceImg
   },
-  data() {
+  data () {
     return {
+      groupList: [],
+      rowGroupList: [],
+      dealing:false,
       statusMap,
+      curRow:null,
       isShowDetail: false,
+      showChangeGroup: false,
       exLoading: false,
       updateLoading: false,
       loading: false,
@@ -104,6 +173,11 @@
         createDateEnd: ''
       },
       list: [],
+      groupForm:{
+        id:null,
+        platformGroupId:null,
+        platformGroupName:null
+      },
       queryFormConfig: {
         formItems: [
           {
@@ -143,7 +217,7 @@
               { value: 9, label: '宸叉巿鏉冪鍥�' },
               // { value: 10, label: '宸茬鍥�' },
               { value: 11, label: '宸茶繃鍙�' },
-              { value: 12, label: '宸插彇娑�' },
+              { value: 12, label: '宸插彇娑�' }
             ]
           },
           {
@@ -175,18 +249,25 @@
       ids: []
     }
   },
-  created() {
+  created () {
     this.changeRadio('0')
     this.$nextTick(() => {
       this.$refs.QueryForm.zkBtn()
     })
+    this.loadGroupList()
   },
   methods: {
-    handleSelectionChange(ids) {
+    loadGroupList () {
+      allList({})
+        .then(res => {
+          this.groupList = res || []
+        })
+    },
+    handleSelectionChange (ids) {
       this.ids = ids.map(item => item.id)
     },
-    complete(ids) {
-      var that = this;
+    complete (ids) {
+      var that = this
       if (ids.length === 0) {
         return this.$message.warning('鑷冲皯閫夋嫨涓�椤瑰唴瀹�')
       }
@@ -201,31 +282,72 @@
           })
       }).catch(() => {
 
-      });
+      })
     },
-    changeRadio(day) {
+    changeGroupDo () {
+      var that = this
+      if (!this.groupForm.id || !this.groupForm.platformGroupId) {
+        return this.$message.warning('璇烽�夋嫨鏈堝彴缁�')
+      }
+      changPlatformGroup(this.groupForm)
+        .then(res => {
+          that.showChangeGroup=false
+          that.getList()
+        })
+    },
+    changeGroup (row) {
+      this.groupForm.id = null
+      this.groupForm.platformGroupName = null
+      this.groupForm.platformGroupId = null
+      this.rowGroupList = []
+      this.curRow=null
+      var type = 0
+      if (row.type === 0 || row.type === 2) {
+        // 瀹夋嘲鐗╂祦鍗歌揣
+        type = 0
+      } else if (row.type === 1 || row.type === 3) {
+        // 瀹夋嘲鐗╂祦瑁呰揣
+        type = 1
+      } else if (row.type === 4) {
+        // 甯傚叕鍙稿鍗忚溅鍗歌揣
+        type = 2
+      } else {
+        return this.$message.warning('浣滀笟浠诲姟绫诲瀷鏈夎锛屼笉鏀寔鏈堝彴缁勫垏鎹紒')
+      }
+      this.curRow =row
+      this.groupForm.id = row.id
+      this.groupForm.platformGroupName = row.platformGroupName
+      this.groupForm.platformGroupId = row.platformGroupId
+      this.groupList.forEach(item => {
+        if (item.type === type) {
+          this.rowGroupList.push(item)
+        }
+      })
+      this.showChangeGroup = true
+    },
+    changeRadio (day) {
       const arr = [dayjs().subtract(day, 'day').format('YYYY-MM-DD') + ' 00:00:00', dayjs().format('YYYY-MM-DD') + ' 23:59:59']
       this.filters.createDateStart = arr[0]
       this.filters.createDateEnd = arr[1]
       this.getList(1)
     },
-    changeForm(str) {
-      if(this.filters.createDateStart > this.filters.createDateEnd){
+    changeForm (str) {
+      if (this.filters.createDateStart > this.filters.createDateEnd) {
         this.filters.createDateStart = this.filters.createDateEnd
         return this.$message.error('寮�濮嬫椂闂翠笉鑳藉ぇ浜庣粨鏉熸椂闂�')
       }
       this.getList()
     },
-    getList(page) {
+    getList (page) {
       const { pagination, filters } = this
       this.loading = true
       platformJobPage({
         model: {
           ...filters,
           jobType: '0'
-         },
+        },
         capacity: pagination.pageSize,
-        page: page || pagination.page,
+        page: page || pagination.page
       }).then(res => {
         this.loading = false
         this.list = res.records || []
@@ -238,7 +360,7 @@
         this.loading = false
       })
     },
-    handleDel(row) {
+    handleDel (row) {
       this.$dialog.deleteConfirm('纭鍒犻櫎鍚楋紵').then(() => {
         platformJobDel(row.id).then(res => {
           Message.success('鍒犻櫎鎴愬姛')
@@ -246,7 +368,7 @@
         })
       })
     },
-    handleEx() {
+    handleEx () {
       this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
         .then(() => {
           this.exLoading = true
@@ -271,8 +393,8 @@
             })
         })
     },
-    updateTotalNum() {
-      this.$dialog.actionConfirm('纭杩涜璇ユ搷浣滃悧锛�','鎿嶄綔鎻愮ず')
+    updateTotalNum () {
+      this.$dialog.actionConfirm('纭杩涜璇ユ搷浣滃悧锛�', '鎿嶄綔鎻愮ず')
         .then(() => {
           this.updateLoading = true
           updateTotalNum('')
@@ -284,13 +406,13 @@
             })
         })
     },
-    clear() {
+    clear () {
       this.pagination.page = 1
       this.filters = {}
       this.getList(0)
       // this.changeRadio('0')
     },
-    handleDetail(row) {
+    handleDetail (row) {
       this.isShowDetail = true
       this.$nextTick(() => {
         this.$refs.WaybillDetailRef.isShowModal = true
@@ -298,7 +420,7 @@
         this.$refs.WaybillDetailRef.getDetail()
       })
     },
-    handleSizeChange(capacity) {
+    handleSizeChange (capacity) {
       this.pagination.pageSize = capacity
       this.getList()
     }
@@ -312,4 +434,56 @@
   color: #000000;
   margin-bottom: 15px;
 }
+.head {
+  font-size: 12px;
+  color: #282828;
+  background: rgba(39, 155, 170, 0.05);
+  border-radius: 4px;
+  border: 1px solid #dfe2e8;
+  padding: 16px;
+  margin-bottom: 30px;
+  .plate {
+    display: flex;
+    font-weight: 600;
+    height: 30px;
+    line-height: 30px;
+    font-size: 15px;
+    color: #111111;
+    background-color: #fff;
+    border-radius: 4px;
+    border: 1px solid #2080f7;
+    padding-right: 4px;
+    width:120px;
+    span {
+      &:nth-of-type(1) {
+        background: #2080f7;
+        padding: 0 8px;
+        color: #fff;
+      }
+
+      &:nth-of-type(2) {
+        padding-left: 4px;
+      }
+    }
+  }
+
+  .list {
+    display: flex;
+    flex-wrap: wrap;
+    margin-top: 16px;
+
+    .item {
+      text-align: justify;
+      width: 50%;
+      margin-bottom: 8px;
+      span {
+        &:nth-child(1) {
+          color: #666666;
+        }
+      }
+    }
+  }
+}
+
+
 </style>
diff --git a/admin/src/views/platform/platform.vue b/admin/src/views/platform/platform.vue
index 9548d14..3446e39 100644
--- a/admin/src/views/platform/platform.vue
+++ b/admin/src/views/platform/platform.vue
@@ -14,6 +14,12 @@
               </el-option>
             </el-select>
           </el-form-item>
+          <el-form-item label="" prop="type">
+            <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨鏈堝彴绫诲瀷" @change="search" clearable>
+              <el-option label="鏁存墭鐩�" :value="0"></el-option>
+              <el-option label="鏁d欢" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
           <!-- <section> -->
           <el-button type="primary" @click="search">鎼滅储</el-button>
           <el-button @click="reset">閲嶇疆</el-button>
@@ -34,9 +40,17 @@
         <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column prop="name" label="鏈堝彴鍚嶇О" fixed min-width="100px"></el-table-column>
         <el-table-column prop="code" label="鏈堝彴缂栫爜" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="鏈堝彴绫诲瀷" min-width="100px">
+          <template scope="{row}">
+            <span v-if="row.type == 0" class="green">鏁存墭鐩�</span>
+            <span v-else-if="row.type == 1" class="red">鏁d欢</span>
+            <span v-else class="grey">-</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="groupName" label="鎵�灞炴湀鍙扮粍" fixed min-width="150px"></el-table-column>
         <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="90px"></el-table-column>
-        <el-table-column prop="workingNum" label="鍚屾椂鍙彿杞﹁締鏁�" min-width="120px"></el-table-column>
+        <el-table-column prop="workingNum" label="鍚屾椂鍙彿鏁伴噺" min-width="120px"></el-table-column>
+        <el-table-column prop="callReadyNum" label="鍚屾椂鍑嗗鏁伴噺" min-width="120px"></el-table-column>
         <el-table-column prop="stayTimeoutAlarmTime" label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛�" min-width="180px">
           <template scope="{row}">{{ row.stayTimeoutAlarmTime ? (row.stayTimeoutAlarmTime) : '-' }}</template>
         </el-table-column>
@@ -100,6 +114,7 @@
       working1: false,
       searchForm: {
         name: '',
+        type:null,
         groupId: null
       }
     }
diff --git a/admin/src/views/platform/set/index.vue b/admin/src/views/platform/set/index.vue
index cc42f4a..a839c01 100644
--- a/admin/src/views/platform/set/index.vue
+++ b/admin/src/views/platform/set/index.vue
@@ -25,7 +25,13 @@
       </el-table-column>
       <el-table-column
         prop="workingNum"
-        label="鍚屾椂浣滀笟杞﹁締鏁�"
+        label="鍚屾椂鍙彿鏁伴噺"
+        min-width="100"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        prop="callReadyNum"
+        label="鍚屾椂鍑嗗鏁伴噺"
         min-width="100"
         show-overflow-tooltip
       />
@@ -116,10 +122,14 @@
             format="HH:mm"
           />
         </el-form-item>
-        <el-form-item label="鍚屾椂浣滀笟杞﹁締鏁�">
+        <el-form-item label="鍚屾椂鍙彿鏁伴噺">
           <el-input v-model="param.workingNum" class="w300"></el-input>
           <span class="ml10">涓�</span>
         </el-form-item>
+        <el-form-item label="鍚屾椂鍑嗗鏁伴噺">
+          <el-input v-model="param.callReadyNum" class="w300"></el-input>
+          <span class="ml10">涓�</span>
+        </el-form-item>
         <el-form-item label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿">
           <el-input
             v-model="param.alermTime"
diff --git a/admin/src/views/vehicle/cars.vue b/admin/src/views/vehicle/cars.vue
index a4fcc63..0efe4d6 100644
--- a/admin/src/views/vehicle/cars.vue
+++ b/admin/src/views/vehicle/cars.vue
@@ -198,7 +198,7 @@
     },
     getCate() {
       fetchList({
-        model: {},
+        model: { type: 1 },
         capacity: 1000,
         page: 1,
       }).then(res => {
diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue
index 6e01c08..99c17cd 100644
--- a/h5/pages/staff/snapshot.vue
+++ b/h5/pages/staff/snapshot.vue
@@ -234,10 +234,10 @@
 					title: '璇疯緭鍏ユ儏鍐佃鏄�',
 					icon: 'none'
 				})
-				if (param.content.length < 10) return uni.showToast({
-					title: '鎯呭喌璇存槑涓嶅緱灏忎簬10涓瓧',
-					icon: 'none'
-				})
+				// if (param.content.length < 10) return uni.showToast({
+				// 	title: '鎯呭喌璇存槑涓嶅緱灏忎簬10涓瓧',
+				// 	icon: 'none'
+				// })
 
 				DangerCreate({
 					...param,
diff --git a/h5/pages/waybill/list.vue b/h5/pages/waybill/list.vue
index bde7310..26406b0 100644
--- a/h5/pages/waybill/list.vue
+++ b/h5/pages/waybill/list.vue
@@ -19,9 +19,10 @@
 		<scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
 			<view class="main_list">
 				<view class="item" v-for="item,index in list" :key="index">
-					<view class="head">
+					<view class="head"
+					:style="{ backgroundColor: item.orderStatus === 9 ? 'linear-gradient(270deg, #FEFEFF 0%, #FEE1E1 100%)' : 'linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%)' }">
 						<view class="code">{{item.contractNumber}}</view>
-						<view class="status">{{item.orderStatusDesc }}</view>
+						<view :class="item.orderStatus === 9 ? 'error' : 'status'">{{item.orderStatusDesc }}</view>
 					</view>
 					<view class="content">
 						<view class="line">
@@ -347,7 +348,7 @@
 					width: 690rpx;
 					height: 84rpx;
 					margin: 0 -30rpx;
-					background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
+					// background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
 
 					.code {
 						font-weight: 500;
@@ -358,6 +359,10 @@
 					.status {
 						color: $uni-color-primary;
 					}
+					
+					.error {
+						color: #EE3821;
+					}
 				}
 
 				.content {
diff --git a/h5/pages/waybill/waybillDetail.vue b/h5/pages/waybill/waybillDetail.vue
index 2eb8433..805453f 100644
--- a/h5/pages/waybill/waybillDetail.vue
+++ b/h5/pages/waybill/waybillDetail.vue
@@ -85,7 +85,7 @@
 							</view>
 							<view v-else class="icon_wrap"></view>
 							<view class="text" :class="{placeholder3: k==0 && i== 0}">
-								{{item.orderStatusDes}}
+								<text :style="{ color: item.orderStatus === 9 ? 'red' : '#666666'}">{{item.orderStatusDes}}</text>
 								<text v-if="item.tel">锛屽彂璐т粨搴撶數璇濓細</text>
 								<template v-if="item.tel">
 									<text v-for="phone,p in item.tel.split(',')" @click="callPhone(phone)" class="primaryColor">{{phone}}<text v-if="p < item.tel.split(',').length - 1">,</text></text>
diff --git a/screen/src/views/FireFighting.vue b/screen/src/views/FireFighting.vue
index 04190af..a92a142 100644
--- a/screen/src/views/FireFighting.vue
+++ b/screen/src/views/FireFighting.vue
@@ -400,7 +400,7 @@
     grid: {
       top: '0%',
       left: '0%',
-      right: '%',
+      right: '0%',
       bottom: '0%',
       containLabel: true
     },
@@ -561,7 +561,12 @@
   let minNum = item.min
   let conNum = maxNum
   let acNum = item.obj.value.replaceAll('M', '')
-  var data = (((acNum - minNum) / conNum) * 100).toFixed(0)
+  var data = 0
+  if (acNum > conNum) {
+    data = 100
+  } else{
+    data = ((acNum / conNum) * 100).toFixed(0)
+  }
   console.log('data', data)
 
   const option = {
@@ -1093,7 +1098,7 @@
   setInterval(() => {
     changeData8(1)
     changeData9(1)
-  }, 1000 * 5)
+  }, 1000 * 10)
   setTimeout(() => {
     loopFn1()
     loopFn2()
diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue
index b16eb42..c358cb6 100644
--- a/screen/src/views/SecurityControl.vue
+++ b/screen/src/views/SecurityControl.vue
@@ -99,7 +99,7 @@
                       <div class="safe_left_dian" :style="{ backgroundColor: item.color }"></div>
                       <div class="safe_left_name">{{item.name}}</div>
                     </div>
-                    <div class="safe_num" :style="{ color: item.color }">{{item.total}}</div>
+                    <div class="safe_num" :style="{ color: item.color }">{{item.value}}</div>
                   </div>
 <!--                  <div class="safe_chat_info_row">-->
 <!--                    <div class="safe_left">-->
@@ -312,7 +312,7 @@
               <div class="com_header">
                 <div class="title">
                   <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-                  <div>闅愭偅闅忔墜鎷�</div>
+                  <div>鏈湀闅愭偅闅忔墜鎷�</div>
                 </div>
                 <img src="@/assets/images/task/title@2x.png" class="bg" alt="" />
               </div>
@@ -816,6 +816,7 @@
   CarList.value = []
   getEnergyCenterData().then(res => {
     if (res.code == 200) {
+      totalCar.value = 0
       const result = res.data
       data.value = result
       res.data.inParkCarList.forEach(item => {
@@ -829,7 +830,7 @@
         } else if (item.name === '璐ц繍杞﹁締') {
           CarList.value.push({ name: '璐ц繍杞﹁締', value: item.total, color: '#01ABFE' })
         } else if (item.name === '鏈煡杞﹁締') {
-          CarList.value.push({ name: '鏈煡杞﹁締', value: item.total, color: '#0028ff' })
+          CarList.value.push({ name: '鏈煡杞﹁締', value: item.total, color: '#cccccc' })
         }
       })
       nextTick(() => {
diff --git "a/server/doc/\346\234\210\345\217\260\350\207\252\345\212\250\345\212\240\345\217\267\346\225\260\346\215\256\345\272\223\345\217\230\345\212\250\350\204\232\346\234\254.md" "b/server/doc/\346\234\210\345\217\260\350\207\252\345\212\250\345\212\240\345\217\267\346\225\260\346\215\256\345\272\223\345\217\230\345\212\250\350\204\232\346\234\254.md"
index acae40f..77584e9 100644
--- "a/server/doc/\346\234\210\345\217\260\350\207\252\345\212\250\345\212\240\345\217\267\346\225\260\346\215\256\345\272\223\345\217\230\345\212\250\350\204\232\346\234\254.md"
+++ "b/server/doc/\346\234\210\345\217\260\350\207\252\345\212\250\345\212\240\345\217\267\346\225\260\346\215\256\345\272\223\345\217\230\345\212\250\350\204\232\346\234\254.md"
@@ -8,13 +8,14 @@
 ADD COLUMN `AUTO_CALL_END_TIME` varchar(100) NULL COMMENT '鑷姩鍙彿鎴鏃堕棿锛圚H:mm锛�' AFTER `AUTO_CALL_START_TIME`;
 
 ALTER TABLE `antaiwuliu`.`platform`
-ADD COLUMN `TYPE` int NULL COMMENT '绫诲瀷  0鏁存墭鐩� 1鏁d欢' AFTER `LED_CONTENT`;
+ADD COLUMN `TYPE` int NULL COMMENT '绫诲瀷  0鏁存墭鐩� 1鏁d欢' AFTER `LED_CONTENT`,
+ADD COLUMN `CALL_READY_NUM` varchar(100) NULL COMMENT '鍚屾椂鍑嗗浣滀笟鏁伴噺' AFTER `TYPE`;
  
 
 ALTER TABLE `antaiwuliu`.`platform_job`
-ADD COLUMN `TAG_VIRTUAL` int NULL COMMENT '鏄惁鏍囪铏氭嫙鏈堝彴缁� 0鍚� 1鏄�' AFTER `ORIGIN`,
-ADD COLUMN `TAG_VIRTUAL_TIME` datetime NULL COMMENT '鏍囪铏氭嫙鏈堝彴缁勬椂闂�' AFTER `TAG_VIRTUAL`,
-ADD COLUMN `TAG_VIRTUAL_USER` int NULL COMMENT '鏍囪铏氭嫙鏈堝彴缁勪汉鍛樼紪鐮�' AFTER `TAG_VIRTUAL_TIME`,
+ADD COLUMN `TAG_VIRTUAL` int NULL COMMENT '鏄惁鏇存崲鏈堝彴缁� 0鍚� 1鏄�' AFTER `ORIGIN`,
+ADD COLUMN `TAG_VIRTUAL_TIME` datetime NULL COMMENT '鏇存崲鏈堝彴缁勬椂闂�' AFTER `TAG_VIRTUAL`,
+ADD COLUMN `TAG_VIRTUAL_USER` int NULL COMMENT '鏇存崲鏈堝彴缁勪汉鍛樼紪鐮�' AFTER `TAG_VIRTUAL_TIME`,
 ADD COLUMN `CALL_WAY` int NULL COMMENT '鍙彿鏂瑰紡  0鎵嬪姩鍙彿 1鑷姩鍙彿' AFTER `TAG_VIRTUAL_USER`,
 ADD COLUMN `URGE_TIME` datetime(0) NULL DEFAULT NULL COMMENT '鍔犳�ユ椂闂�' AFTER `CALL_WAY`,
 ADD COLUMN `URGE_USER` int NULL DEFAULT NULL COMMENT '鍔犳�ヤ汉鍛樼紪鐮�' AFTER `URGE_TIME`;
diff --git a/server/system_service/pom.xml b/server/system_service/pom.xml
index 22a532c..9ac1dbf 100644
--- a/server/system_service/pom.xml
+++ b/server/system_service/pom.xml
@@ -335,5 +335,11 @@
             <type>pom</type>
             <scope>import</scope>
         </dependency>-->
+         <dependency>
+            <groupId>com.google.ortools</groupId>
+            <artifactId>ortools-java</artifactId>
+            <version>9.14.6206</version>
+        </dependency>
+
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java
new file mode 100644
index 0000000..6cd9413
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java
@@ -0,0 +1,108 @@
+package com.doumee.core.utils;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Queue;
+
+public class DijkstraUtil {
+    private Queue visited;
+    int[] distance;
+
+    public DijkstraUtil(int len) {
+        // TODO Auto-generated constructor stub
+        visited = new LinkedList();
+        distance = new int[len];
+
+    }
+
+    private int getIndex(Queue q, int[] dis) {
+        int k = -1;
+        int min_num = Integer.MAX_VALUE;
+        for (int i = 0; i < dis.length; i++) {
+            if (!q.contains(i)) {
+                if (dis[i] < min_num) {
+                    min_num = dis[i];
+                    k = i;
+                }
+            }
+        }
+        return k;
+    }
+
+    public void dijkstra(int[][] weight, Object[] str, int v) {
+        HashMap path;
+        path = new HashMap();
+        for (int i = 0; i < str.length; i++)
+            path.put(i, "");
+
+        //鍒濆鍖栬矾寰勯暱搴︽暟缁刣istance
+        for (int i = 0; i < str.length; i++) {
+            path.put(i, path.get(i) + "" + str[v]);
+            if (i == v)
+                distance[i] = 0;
+            else if (weight[v][i] != -1) {
+                distance[i] = weight[v][i];
+                path.put(i, path.get(i) + "-->" + str[i]);
+            } else
+                distance[i] = Integer.MAX_VALUE;
+        }
+        visited.add(v);
+        while (visited.size() < str.length) {
+            int k = getIndex(visited, distance);//鑾峰彇鏈闂偣涓窛绂绘簮鐐规渶杩戠殑鐐�
+            visited.add(k);
+            if (k != -1) {
+
+                for (int j = 0; j < str.length; j++) {
+                    //鍒ゆ柇k鐐硅兘澶熺洿鎺ュ埌杈剧殑鐐�
+                    if (weight[k][j] != -1) {
+                        //閫氳繃閬嶅巻鍚勭偣锛屾瘮杈冩槸鍚︽湁姣斿綋鍓嶆洿鐭殑璺緞锛屾湁鐨勮瘽锛屽垯鏇存柊distance锛屽苟鏇存柊path銆�
+                        if (distance[j] > distance[k] + weight[k][j]) {
+                            distance[j] = distance[k] + weight[k][j];
+                            path.put(j, path.get(k) + "-->" + str[j]);
+                        }
+                    }
+
+                }
+            }
+        }
+        for (int h = 0; h < str.length; h++) {
+            System.out.printf(str[v] + "-->" + str[h] + ":" + distance[h] + " ");
+            if (distance[h] == Integer.MAX_VALUE)
+                System.out.print(str[v] + "-->" + str[h] + "涔嬮棿娌℃湁鍙�氳璺緞");
+            else
+                System.out.print(str[v] + "-" + str[h] + "涔嬮棿鏈夋渶鐭矾寰勶紝鍏蜂綋璺緞涓猴細" + path.get(h).toString());
+            System.out.println();
+        }
+        visited.clear();
+
+    }
+
+    public static void main(String[] args) {
+        // TODO Auto-generated method stub
+       /* int[][] weight = {
+                {0, 10, 12, -1, -1, -1},
+                {-1, 0, -1, 16, 25, -1},
+                {4, 3, 0, 12, -1, 8},
+                {-1, -1, -1, 0, 7, -1},
+                {-1, -1, -1, -1, 0, -1},
+                {-1, -1, -1, 2, -1, 0}};
+        String[] str = {"V1", "V2", "V3", "V4", "V5", "V6"};
+        int len = str.length;
+        DijkstraUtil dijkstra = new DijkstraUtil(len);
+        //渚濇璁╁悇鐐瑰綋婧愮偣锛屽苟璋冪敤dijkstra鍑芥暟
+        for (int i = 0; i < str.length; i++) {
+            dijkstra.dijkstra(weight, str, i);
+        }*/
+
+        int[][] weight = {
+                {0, 10, 5, 7, -1},
+                {-1, 0, 4, 5, 10},
+                {-1, 4, 0, 6, 5},
+                {-1, 5, 6, 0, 7},
+                {-1, -1, -1, -1, 0}};
+        String[] str = {"A", "B", "C", "D", "E"};
+        DijkstraUtil dijkstra = new DijkstraUtil(str.length);
+        dijkstra.dijkstra(weight, str, 0);
+    }
+
+}
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/GraphByMatrix.java b/server/system_service/src/main/java/com/doumee/core/utils/GraphByMatrix.java
new file mode 100644
index 0000000..77f5a8b
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/utils/GraphByMatrix.java
@@ -0,0 +1,258 @@
+package com.doumee.core.utils;
+
+import java.util.*;
+
+/**
+ * 鏈�鐭矾寰勨�擠ijkstra绠楁硶鍜孎loyd绠楁硶
+ * Dijkstra(杩澃鏂壒鎷�)绠楁硶鏄吀鍨嬬殑鍗曟簮鏈�鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓�涓妭鐐瑰埌鍏朵粬鎵�鏈夎妭鐐圭殑鏈�鐭矾寰勩�備富瑕佺壒鐐规槸浠ヨ捣濮嬬偣涓轰腑蹇冨悜澶栧眰灞傛墿灞曪紝鐩村埌鎵╁睍鍒扮粓鐐逛负姝€�侱ijkstra绠楁硶鏄緢鏈変唬琛ㄦ�х殑鏈�鐭矾寰勭畻娉曪紝鍦ㄥ緢澶氫笓涓氳绋嬩腑閮戒綔涓哄熀鏈唴瀹规湁璇︾粏鐨勪粙缁嶏紝濡傛暟鎹粨鏋勶紝鍥捐锛岃繍绛瑰绛夌瓑銆傛敞鎰忚绠楁硶瑕佹眰鍥句腑涓嶅瓨鍦ㄨ礋鏉冭竟銆�
+ *
+ * 闂鎻忚堪锛氬湪鏃犲悜鍥� G=(V,E) 涓紝鍋囪姣忔潯杈� E[i] 鐨勯暱搴︿负 w[i]锛屾壘鍒扮敱椤剁偣 V0 鍒板叾浣欏悇鐐圭殑鏈�鐭矾寰勩�傦紙鍗曟簮鏈�鐭矾寰勶級
+ */
+
+public class GraphByMatrix {
+    public static final boolean UNDIRECTED_GRAPH = false;//鏃犲悜鍥炬爣蹇�
+    public static final boolean DIRECTED_GRAPH = true;//鏈夊悜鍥炬爣蹇�
+
+    public static final boolean ADJACENCY_MATRIX = true;//閭绘帴鐭╅樀瀹炵幇
+    public static final boolean ADJACENCY_LIST = false;//閭绘帴琛ㄥ疄鐜�
+
+    public static final int MAX_VALUE = Integer.MAX_VALUE;
+    private boolean graphType;
+    private boolean method;
+    private int vertexSize;
+    private int matrixMaxVertex;
+
+    //瀛樺偍鎵�鏈夐《鐐逛俊鎭殑涓�缁存暟缁�
+    private Object[] vertexesArray;
+    //瀛樺偍鍥句腑椤剁偣涔嬮棿鍏宠仈鍏崇郴鐨勪簩缁存暟缁�,鍙婅竟鐨勫叧绯�
+    private int[][] edgesMatrix;
+
+    // 璁板綍绗琲涓妭鐐规槸鍚﹁璁块棶杩�
+    private boolean[] visited;
+
+    /**
+     * @param graphType 鍥剧殑绫诲瀷锛氭湁鍚戝浘/鏃犲悜鍥�
+     * @param method    鍥剧殑瀹炵幇鏂瑰紡锛氶偦鎺ョ煩闃�/閭绘帴琛�
+     */
+    public GraphByMatrix(boolean graphType, boolean method, int size) {
+        this.graphType = graphType;
+        this.method = method;
+        this.vertexSize = 0;
+        this.matrixMaxVertex = size;
+
+        if (this.method) {
+            visited = new boolean[matrixMaxVertex];
+            vertexesArray = new Object[matrixMaxVertex];
+            edgesMatrix = new int[matrixMaxVertex][matrixMaxVertex];
+
+            //瀵规暟缁勮繘琛屽垵濮嬪寲锛岄《鐐归棿娌℃湁杈瑰叧鑱旂殑鍊间负Integer绫诲瀷鐨勬渶澶у��
+            for (int row = 0; row < edgesMatrix.length; row++) {
+                for (int column = 0; column < edgesMatrix.length; column++) {
+                    edgesMatrix[row][column] = MAX_VALUE;
+                }
+            }
+
+        }
+    }
+
+    /********************鏈�鐭矾寰�****************************/
+    //璁$畻涓�涓《鐐瑰埌鍏跺畠涓�涓《鐐圭殑鏈�鐭窛绂�
+    public void Dijkstra(Object obj) throws Exception {
+        Dijkstra(getVertexIndex(obj));
+    }
+    public void Dijkstra(int v0) {
+        int[] dist = new int[matrixMaxVertex];
+        int[] prev = new int[matrixMaxVertex];
+
+        //鍒濆鍖杤isited銆乨ist鍜宲ath
+        for (int i = 0; i < vertexSize; i++) {
+            //涓�寮�濮嬪亣瀹氬彇鐩磋揪璺緞鏈�鐭�
+            dist[i] = edgesMatrix[v0][i];
+            visited[i] = false;
+
+            //鐩磋揪鎯呭喌涓嬬殑鏈�鍚庣粡鐢辩偣灏辨槸鍑哄彂鐐�
+            if (i != v0 && dist[i] < MAX_VALUE)
+                prev[i] = v0;
+            else
+                prev[i] = -1; //鏃犵洿杈捐矾寰�
+        }
+
+        //鍒濆鏃舵簮鐐箆0鈭坴isited闆嗭紝琛ㄧずv0 鍒皏0鐨勬渶鐭矾寰勫凡缁忔壘鍒�
+        visited[v0] = true;
+
+        // 涓嬫潵鍋囪缁忕敱涓�涓偣涓浆鍒拌揪鍏朵綑鍚勭偣,浼氳繎浜�,楠岃瘉涔�
+        // 鍐嶅亣璁剧粡鐢变袱涓偣涓浆,浼氭洿杩戜簺,楠岃瘉涔�,.....
+        // 鐩村埌绌蜂妇瀹屾墍鏈夊彲鑳界殑涓浆鐐�
+        int minDist;
+        int v = 0;
+        for (int i = 1; i < vertexSize; i++) {
+            //鎸戜竴涓窛绂绘渶杩戠粡鐢辩偣,涓嬫爣瑁呭叆 v
+            minDist = MAX_VALUE;
+
+            for (int j = 0; j < vertexSize; j++) {
+                if ((!visited[j]) && dist[j] < minDist) {
+                    v = j;                             // 缁忕敱椤剁偣j涓浆鍒欒窛绂绘洿鐭�
+                    minDist = dist[j];
+                }
+            }
+            visited[v] = true;
+
+            /*椤剁偣v骞跺叆S锛岀敱v0鍒拌揪v椤剁偣鐨勬渶鐭矾寰勪负min.
+              鍋囧畾鐢眝0鍒皏锛屽啀鐢眝鐩磋揪鍏朵綑鍚勭偣锛屾洿鏂板綋鍓嶆渶鍚庝竴涓粡鐢辩偣鍙婅窛绂�*/
+            for (int j = 0; j < vertexSize; j++) {
+                if ((!visited[j]) && edgesMatrix[v][j] < MAX_VALUE) {
+
+                    if (minDist + edgesMatrix[v][j] <= dist[j]) {
+                        //濡傛灉澶氱粡鐢变竴涓獀鐐瑰埌杈緅鐐圭殑 鏈�鐭矾寰勫弽鑰岃鐭�,灏辨洿鏂�
+                        dist[j] = minDist + edgesMatrix[v][j];
+
+                        prev[j] = v;                    //缁忕敱鐐圭殑搴忓彿
+                    }
+
+                }
+            }
+
+        }
+
+        for (int i = 1; i < matrixMaxVertex; i++) {
+            System.out.println("**" + vertexesArray[v0] + "-->" +vertexesArray[i] + " 鐨勬渶鐭矾寰勬槸锛�" + dist[i]);
+        }
+    }
+
+    //鑾峰彇椤剁偣鍊煎湪鏁扮粍閲屽搴旂殑绱㈠紩
+    private int getVertexIndex(Object obj) throws Exception {
+        int index = -1;
+        for (int i = 0; i < vertexSize; i++) {
+            if (vertexesArray[i].equals(obj)) {
+                index = i;
+                break;
+            }
+        }
+        if (index == -1) {
+            throw new Exception("娌℃湁杩欎釜鍊硷紒");
+        }
+
+        return index;
+    }
+
+    /**
+     * 鍗曟簮鏈�鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓�涓妭鐐瑰埌鍏朵粬!!鎵�鏈夎妭鐐�!!鐨勬渶鐭矾寰�
+     */
+    public void Dijkstra2(int v0) {
+        // LinkedList瀹炵幇浜哘ueue鎺ュ彛 FIFO
+        Queue<Integer> queue = new LinkedList<>();
+        for (int i = 0; i < vertexSize; i++) {
+            visited[i] = false;
+        }
+        List<Map<String,Object>> result = new ArrayList<>();
+        //杩欎釜寰幆鏄负浜嗙‘淇濇瘡涓《鐐归兘琚亶鍘嗗埌
+        int lastRow =0;
+        for (int i = 0; i < vertexSize; i++) {
+            if (!visited[i]) {
+                queue.add(i);
+                visited[i] = true;
+                while (!queue.isEmpty()) {
+                    int row = queue.remove();
+                    Map<String,Object> map = new HashMap<>();
+                    map.put("name", vertexesArray[row]);
+                    map.put("row", row);
+                    int tempDis =0;
+                    if(row>0){
+                        tempDis  = edgesMatrix[lastRow][row];
+                        lastRow =row;
+                    }
+                    map.put("dis", tempDis);
+                    result.add(map);
+                    System.out.print(vertexesArray[row] + "-->");
+                    for (int k = getMin(row); k >= 0; k = getMin(row)) {
+                        if (!visited[k]) {
+                            queue.add(k);
+                            visited[k] = true;
+                        }
+                    }
+                }
+            }
+        }
+        System.out.println("");
+        int totalDis =0;
+        for(Map<String,Object> c :result){
+            totalDis +=  (Integer) c.get("dis");
+            System.out.print( c.get("name") + "--"+c.get("dis")+"-->");
+        }
+        System.out.println("");
+        System.out.println("鏈�鐭窛绂�"+totalDis);
+    }
+
+    private int getMin( int row) {
+        int minDist = MAX_VALUE;
+        int index = 0;
+        for (int j = 0; j < vertexSize; j++) {
+            if ((!visited[j]) && edgesMatrix[row][j] < minDist) {
+                minDist = edgesMatrix[row][j];
+                index = j;
+            }
+        }
+        if (index == 0) {
+            return -1;
+        }
+        return index;
+    }
+
+    public boolean addVertex(Object val) {
+        assert (val != null);
+        vertexesArray[vertexSize] = val;
+        vertexSize++;
+        return true;
+    }
+
+    public boolean addEdge(int vnum1, int vnum2, int weight) {
+        assert (vnum1 >= 0 && vnum2 >= 0 && vnum1 != vnum2 && weight >= 0);
+
+        //鏈夊悜鍥�
+        if (graphType) {
+            edgesMatrix[vnum1][vnum2] = weight;
+
+        } else {
+            edgesMatrix[vnum1][vnum2] = weight;
+            edgesMatrix[vnum2][vnum1] = weight;
+        }
+
+        return true;
+    }
+
+    public static void main(String[] args) throws Exception {
+        GraphByMatrix graph = new GraphByMatrix(GraphByMatrix.DIRECTED_GRAPH, GraphByMatrix.ADJACENCY_MATRIX, 9);
+
+        graph.addVertex("A");//0
+        graph.addVertex("B");//1
+        graph.addVertex("C");//2
+        graph.addVertex("D");//3
+        graph.addVertex("E");//4
+
+        //A->B銆丆銆丏
+        graph.addEdge(0, 1,10);
+        graph.addEdge(0, 2,5);
+        graph.addEdge(0, 3,7);
+        //B->C銆丏銆丒
+        graph.addEdge(1, 2,4);
+        graph.addEdge(1, 3,5);
+        graph.addEdge(1, 4,10);
+        //C->B銆丏銆丒
+        graph.addEdge(2, 1,4);
+        graph.addEdge(2, 3,6);
+        graph.addEdge(2, 4,5);
+        //D->B銆丆銆丒
+        graph.addEdge(3, 1,5);
+        graph.addEdge(3, 2,6);
+        graph.addEdge(3, 4,7);
+
+
+        graph.Dijkstra(0);
+        System.out.println();
+        graph.Dijkstra("C");
+        System.out.println();
+        graph.Dijkstra2(0);
+        System.out.println();
+    }
+
+}
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/TspSolver.java b/server/system_service/src/main/java/com/doumee/core/utils/TspSolver.java
new file mode 100644
index 0000000..06e17e2
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/utils/TspSolver.java
@@ -0,0 +1,158 @@
+package com.doumee.core.utils;
+
+import com.google.ortools.Loader;
+import com.google.ortools.constraintsolver.*;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class TspSolver {
+    public static void main(String[] args) throws Exception {
+        // 鍒濆鍖栨暟鎹ā鍨�
+        Loader.loadNativeLibraries();
+        DataModel data = new DataModel();
+        data.initDataList();//鏋勯�犳暟鎹�
+
+        long start =System.currentTimeMillis();
+        System.out.println("=============start=========="+start);
+        //鍒涘缓姹傝В鍣╩anager瀵硅薄锛屽垵濮嬪寲姹傝В鍣ㄦ暟鎹�
+        RoutingIndexManager manager =  new RoutingIndexManager(data.distanceMatrix.length, data.vehicleNumber, data.depot);
+
+        // 鍒濆鍖栨眰瑙e櫒
+        RoutingModel routing = new RoutingModel(manager);
+
+//        // 娉ㄥ唽鍥炶皟鍑芥暟
+        final int transitCallbackIndex =
+                routing.registerTransitCallback((long fromIndex, long toIndex) -> {
+                    int fromNode = manager.indexToNode(fromIndex);
+                    int toNode = manager.indexToNode(toIndex);
+                    return data.distanceMatrix[fromNode][toNode];
+                });
+
+        // 瀹氫箟鍥炶皟鍑芥暟鑷虫瘡鏉¤矾绾�
+        routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
+        // 澧炲姞璺濈缁村害绾︽潫
+        routing.addDimension(transitCallbackIndex, 0, 30000,
+                true,
+                "Distance");
+        RoutingDimension distanceDimension = routing.getMutableDimension("Distance");
+        distanceDimension.setGlobalSpanCostCoefficient(100);
+//        // 娣诲姞瀹归噺闄愬埗
+        final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> {
+            int fromNode = manager.indexToNode(fromIndex);
+            return data.demands[fromNode];
+        });
+        routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, data.vehicleCapacities, true, "Capacity");
+
+        Solver solver = routing.solver();
+
+
+        //璁剧疆鎼滅储鏂规硶
+        RoutingSearchParameters searchParameters =
+                main.defaultRoutingSearchParameters()
+                        .toBuilder()
+                        .setFirstSolutionStrategy(FirstSolutionStrategy.Value.PATH_CHEAPEST_ARC)
+                        .build();
+
+        // 鎵ц绠楁硶
+        Assignment solution = routing.solveWithParameters(searchParameters);
+
+        // 鎵撳嵃璺嚎
+        printSolution(data, routing, manager, solution);
+        long end =System.currentTimeMillis();
+        System.out.println("=============end=========="+end);
+
+        System.out.println("=============鑰楁椂=========="+(end -start)+"锛坢s锛�"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
+    }
+
+    static void printSolution(
+            DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) {
+        long maxRouteDistance = 0;
+        for (int i = 0; i < data.vehicleNumber; ++i) {
+            long index = routing.start(i);
+            log.info("Route for Vehicle " + i + ":");
+            long routeDistance = 0;
+            int routeDemand = 0;
+            String route = "";
+            while (!routing.isEnd(index)) {
+                route += manager.indexToNode(index) + " -> ";
+                routeDemand += data.demands[manager.indexToNode(index)];
+                long previousIndex = index;
+                index = solution.value(routing.nextVar(index));
+                routeDistance += routing.getArcCostForVehicle(previousIndex, index, i);
+            }
+            log.info(route + manager.indexToNode(index));
+            log.info("Distance of the route: " + routeDistance + "m"+"  Capacity of the route:"+routeDemand+"/"+data.vehicleCapacities[i]);
+            maxRouteDistance = Math.max(routeDistance, maxRouteDistance);
+        }
+        log.info("Maximum of the route distances: " + maxRouteDistance + "m");
+    }
+
+    static class DataModel {
+        //璺濈鐭╅樀
+        public int lenght;
+        //鏈�澶ц溅杈嗛檺鍒�
+        public  int vehicleNumber;
+        //璧风偣
+        public static final int depot = 0;
+
+        //姣忎竴涓偣鐨勫晢鍝佺殑鏁伴噺
+        public   long[] demands;
+        //杞﹁締鏈�澶у杞�
+        public   long[] vehicleCapacities ;
+        public   long[][] distanceMatrix ;
+        public   void initDataList(){
+            lenght = 500;
+            vehicleNumber = 8;
+            demands = new long[lenght];
+            vehicleCapacities =new long[vehicleNumber];
+            distanceMatrix =  new long[lenght][lenght];
+            int total0 =0;
+            for (int i = 0; i <vehicleNumber ; i++) {
+                long tem = (long) (Math.random() * 1000 + 20000);
+                vehicleCapacities[i] = tem;
+                total0+=tem;
+                System.out.print(tem+" ,");
+            }
+            System.out.println( "\ntotal Capacity:"+total0+"=====================");
+            long total = 0;
+            for (int i = 0; i <lenght ; i++) {
+                long tem =  (int)(Math.random()*100+100);
+                demands[i] =tem;
+                total+=tem;
+                System.out.print(tem+" ,");
+                for (int j = 0; j <lenght ; j++) {
+                    if(i == j){
+                        distanceMatrix[i][j] =0;
+                    }
+                    if(i<j){
+                        distanceMatrix[i][j] =(int)(Math.random()*1000+1);
+                        distanceMatrix[j][i] =    distanceMatrix[i][j];
+                    }
+                }
+            }
+
+            System.out.println( "\ntotal Demands:"+total+"=====================");
+        }
+       /* public final long[][] distanceMatrix = {
+                {0, 548, 776, 696, 582, 274, 502, 194, 308, 194, 536, 502, 388, 354, 468, 776, 662},
+                {548, 0, 684, 308, 194, 502, 730, 354, 696, 742, 1084, 594, 480, 674, 1016, 868, 1210},
+                {776, 684, 0, 992, 878, 502, 274, 810, 468, 742, 400, 1278, 1164, 1130, 788, 1552, 754},
+                {696, 308, 992, 0, 114, 650, 878, 502, 844, 890, 1232, 514, 628, 822, 1164, 560, 1358},
+                {582, 194, 878, 114, 0, 536, 764, 388, 730, 776, 1118, 400, 514, 708, 1050, 674, 1244},
+                {274, 502, 502, 650, 536, 0, 228, 308, 194, 240, 582, 776, 662, 628, 514, 1050, 708},
+                {502, 730, 274, 878, 764, 228, 0, 536, 194, 468, 354, 1004, 890, 856, 514, 1278, 480},
+                {194, 354, 810, 502, 388, 308, 536, 0, 342, 388, 730, 468, 354, 320, 662, 742, 856},
+                {308, 696, 468, 844, 730, 194, 194, 342, 0, 274, 388, 810, 696, 662, 320, 1084, 514},
+                {194, 742, 742, 890, 776, 240, 468, 388, 274, 0, 342, 536, 422, 388, 274, 810, 468},
+                {536, 1084, 400, 1232, 1118, 582, 354, 730, 388, 342, 0, 878, 764, 730, 388, 1152, 354},
+                {502, 594, 1278, 514, 400, 776, 1004, 468, 810, 536, 878, 0, 114, 308, 650, 274, 844},
+                {388, 480, 1164, 628, 514, 662, 890, 354, 696, 422, 764, 114, 0, 194, 536, 388, 730},
+                {354, 674, 1130, 822, 708, 628, 856, 320, 662, 388, 730, 308, 194, 0, 342, 422, 536},
+                {468, 1016, 788, 1164, 1050, 514, 514, 662, 320, 274, 388, 650, 536, 342, 0, 764, 194},
+                {776, 868, 1552, 560, 674, 1050, 1278, 742, 1084, 810, 1152, 274, 388, 422, 764, 0, 798},
+                {662, 1210, 754, 1358, 1244, 708, 480, 856, 514, 468, 354, 844, 730, 536, 194, 798, 0},
+        };*/
+
+    }
+
+}
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
index ee4d51f..8bc6458 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
@@ -94,11 +94,11 @@
     @ExcelColumn(name="宸ヤ綔缁撴潫鏃堕棿")
     private String endTime;
 
-    @ApiModelProperty(value = "鍚屾椂浣滀笟鏁伴噺", example = "1")
-    @ExcelColumn(name="鍚屾椂浣滀笟鏁伴噺")
+    @ApiModelProperty(value = "鍚屾椂鍙彿鏁伴噺", example = "1")
+    @ExcelColumn(name="鍚屾椂鍙彿鏁伴噺")
     private Integer workingNum;
-    @ApiModelProperty(value = "鍚屾椂鍑嗗浣滀笟鏁伴噺", example = "1")
-    @ExcelColumn(name="鍚屾椂鍑嗗浣滀笟鏁伴噺")
+    @ApiModelProperty(value = "鍚屾椂鍑嗗鍙彿鏁伴噺", example = "1")
+    @ExcelColumn(name="鍚屾椂鍑嗗鍙彿鏁伴噺")
     private Integer callReadyNum;
 
     @ApiModelProperty(value = "浣滀笟瓒呮椂鎶ヨ鏃堕棿(绉掞級", example = "1")
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 4f1a23d..36c418c 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
@@ -32,7 +32,7 @@
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 12, dateFormat = "yyyy-MM-dd hh:mm:ss",width = 10)
+   // @ExcelColumn(name="鍒涘缓鏃堕棿",index = 13, dateFormat = "yyyy-MM-dd hh:mm:ss",width = 10)
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
@@ -44,6 +44,7 @@
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
     private Integer isdeleted;
     @ApiModelProperty(value = "浣滀笟鏉ユ簮锛�0鑷缓 1wms鎺ㄩ��", example = "1")
+     @ExcelColumn(name="鐘舵��",index =3,width = 6, valueMapping = "0=鑷缓浣滀笟;1=WMS鑾峰彇;")
     private Integer origin;
 
     @ApiModelProperty(value = "鍚嶇О")
@@ -53,7 +54,7 @@
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0寰呯‘璁� 1寰呯鍒� 2绛夊緟鍙彿 3鍏ュ洯绛夊緟 4宸插彨鍙� 5浣滀笟涓� 6浣滀笟瀹屾垚 7杞Щ涓� 8寮傚父鎸傝捣 9宸叉巿鏉冪鍥� 10宸茬鍥� 11 宸茶繃鍙�  12鍙栨秷锛圵MS锛�" , example = "1")
-    @ExcelColumn(name="鐘舵��",index =13,width = 6, valueMapping = "0=寰呯‘璁�;1=寰呯鍒�;2=绛夊緟鍙彿;3=鍏ュ洯绛夊緟;4=宸插彨鍙�;5=浣滀笟涓�;6=浣滀笟瀹屾垚;7=杞Щ涓�;8=寮傚父鎸傝捣;9=宸叉巿鏉冪鍥�;10=宸茬鍥�;11=宸茶繃鍙�;12=鍙栨秷锛圵MS锛�;")
+    @ExcelColumn(name="鐘舵��",index =10,width = 6, valueMapping = "0=寰呯‘璁�;1=寰呯鍒�;2=绛夊緟鍙彿;3=鍏ュ洯绛夊緟;4=宸插彨鍙�;5=浣滀笟涓�;6=浣滀笟瀹屾垚;7=杞Щ涓�;8=寮傚父鎸傝捣;9=宸叉巿鏉冪鍥�;10=宸茬鍥�;11=宸茶繃鍙�;12=鍙栨秷锛圵MS锛�;")
     private Integer status;
 
     @ApiModelProperty(value = "杞﹁締杩涘叆鐘舵�� 0涓嶅湪 1杩涘叆 " , example = "1")
@@ -73,18 +74,18 @@
     private Integer driverId;
 
     @ApiModelProperty(value = "鍙告満濮撳悕")
-    @ExcelColumn(name="鍙告満濮撳悕",index = 4,width = 6)
+    @ExcelColumn(name="鍙告満濮撳悕",index = 5,width = 6)
     private String driverName;
 
     @ApiModelProperty(value = "杞︾墝鍙�")
     private String plateNum;
 
     @ApiModelProperty(value = "鍙告満鎵嬫満鍙�")
-    @ExcelColumn(name="鍙告満鐢佃瘽",index = 5,width = 8)
+    @ExcelColumn(name="鍙告満鐢佃瘽",index = 6,width = 8)
     private String drivierPhone;
 
     @ApiModelProperty(value = "绛惧埌鏃堕棿")
-    @ExcelColumn(name="绛惧埌鏃堕棿",index =7,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+   // @ExcelColumn(name="绛惧埌鏃堕棿",index =7,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date signDate;
 
     @ApiModelProperty(value = "绛惧埌鏂瑰紡 0app绛惧埌 1鎵爜绛惧埌 2鍚庡彴绛惧埌", example = "1")
@@ -109,7 +110,7 @@
     private BigDecimal signDistance;
 
     @ApiModelProperty(value = "浣滀笟鏈堝彴鍚嶇О闆嗗悎锛屽涓娇鐢ㄨ嫳鏂囬�楀彿闅斿紑")
-    @ExcelColumn(name="浣滀笟鏈堝彴鍚嶇О",index =17 ,width = 8)
+   // @ExcelColumn(name="浣滀笟鏈堝彴鍚嶇О",index =17 ,width = 8)
     private String platformNames;
 
     @ApiModelProperty(value = "浣滀笟鏈堝彴缂栫爜闆嗗悎锛屽涓娇鐢ㄨ嫳鏂囬�楀彿闅斿紑")
@@ -128,7 +129,7 @@
     private Integer inwaitUserId;
 
     @ApiModelProperty(value = "鍙彿鏃堕棿")
-    @ExcelColumn(name="鍙彿鏃堕棿",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+   // @ExcelColumn(name="鍙彿鏃堕棿",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date callDate;
 
     @ApiModelProperty(value = "鍙彿浜虹紪鐮�", example = "1")
@@ -138,11 +139,11 @@
     private String callInfo;
 
     @ApiModelProperty(value = "寮�濮嬩綔涓氭椂闂�")
-    @ExcelColumn(name="寮�濮嬩綔涓氭椂闂�",index =9 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+   // @ExcelColumn(name="寮�濮嬩綔涓氭椂闂�",index =9 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date startDate;
 
     @ApiModelProperty(value = "浣滀笟瀹屾垚鏃堕棿锛堟渶缁堟椂闂达級")
-    @ExcelColumn(name="浣滀笟瀹屾垚鏃堕棿",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+   // @ExcelColumn(name="浣滀笟瀹屾垚鏃堕棿",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date doneDate;
 
     @ApiModelProperty(value = "寮傚父鎸傝捣鏃堕棿")
@@ -196,7 +197,7 @@
     private Date inHkdate;
 
     @ApiModelProperty(value = "浣滀笟绫诲瀷 0鑷湁杞﹀嵏璐� 1鑷湁杞﹁璐� 2澶栧崗杞﹀嵏璐� 3澶栧崗杞﹁璐� 4甯傚叕鍙稿鍗忚溅鍗歌揣", example = "1")
-    @ExcelColumn(name="浣滀笟绫诲瀷",index = 15,width = 6,valueMapping = "0=鑷湁杞﹀嵏璐�;1=鑷湁杞﹁璐�;2=澶栧崗杞﹀嵏璐�;3=澶栧崗杞﹁璐�;4=甯傚叕鍙稿鍗忚溅鍗歌揣")
+    @ExcelColumn(name="浣滀笟绫诲瀷",index = 7,width = 6,valueMapping = "0=鑷湁杞﹀嵏璐�;1=鑷湁杞﹁璐�;2=澶栧崗杞﹀嵏璐�;3=澶栧崗杞﹁璐�;4=甯傚叕鍙稿鍗忚溅鍗歌揣")
     private Integer type;
 
     @ApiModelProperty(value = "鍓嶈溅鐗屽彿")
@@ -204,7 +205,7 @@
     private String carCodeFront;
 
     @ApiModelProperty(value = "鍚庤溅鐗屽彿")
-    @ExcelColumn(name="鍚庤溅鐗屽彿",index =3 ,width = 5)
+   // @ExcelColumn(name="鍚庤溅鐗屽彿",index =3 ,width = 5)
     private String carCodeBack;
 
     @ApiModelProperty(value = "鍙告満鎵�灞為儴闂ㄧ紪鐮�", example = "1")
@@ -239,17 +240,17 @@
     private BigDecimal totalNum;
 
     @ApiModelProperty(value = "纭浠诲姟鏃堕棿")
-    @ExcelColumn(name="纭鏃堕棿",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+   // @ExcelColumn(name="纭鏃堕棿",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date confirmTaskDate;
 
     @ApiModelProperty(value = "绛惧埌搴忓彿", example = "1")
     private Integer signNum;
 
-    @ApiModelProperty(value = "鏄惁鏍囪铏氭嫙鏈堝彴缁� 0鍚� 1鏄�", example = "1")
+    @ApiModelProperty(value = "鏄惁鏇存崲杩囨湀鍙扮粍 0鍚� 1鏄�", example = "1")
     private Integer  tagVirtual;
-    @ApiModelProperty(value = "鏍囪铏氭嫙鏈堝彴缁勬椂闂�", example = "1")
+    @ApiModelProperty(value = "鏇存崲杩囨湀鍙扮粍鏃堕棿", example = "1")
     private Date  tagVirtualTime;
-    @ApiModelProperty(value = "鏍囪铏氭嫙鏈堝彴缁勪汉鍛樼紪鐮�", example = "1")
+    @ApiModelProperty(value = "鏇存崲杩囨湀鍙扮粍浜哄憳缂栫爜", example = "1")
     private Integer  tagVirtualUser;
     @ApiModelProperty(value = "鍙彿鏂瑰紡  0鎵嬪姩鍙彿 1鑷姩鍙彿", example = "1")
     private Integer  callWay;
@@ -313,14 +314,14 @@
 
     @ApiModelProperty(value = "WMS浠诲姟鏃堕棿")
     @TableField(exist = false)
-    @ExcelColumn(name="WMS鍒涘缓鏃堕棿",index =18,width = 10)
+    @ExcelColumn(name="WMS鍒涘缓鏃堕棿",index =9,width = 10)
     private String ioCreatedate;
     @ApiModelProperty(value = "绂诲満涓嬪彂鎿嶄綔浜哄悕绉�", example = "1")
     @TableField(exist = false)
     private String outUserName;
 
     @ApiModelProperty(value = "鏈�鍚庢搷浣滀汉鍚嶇О", example = "1")
-    @ExcelColumn(name="鏈�鍚庢搷浣滀汉鍚嶇О",index = 15,width = 12)
+    @ExcelColumn(name="鏈�鍚庢搷浣滀汉鍚嶇О",index = 11,width = 12)
     @TableField(exist = false)
     private String editUserName;
 
@@ -333,7 +334,7 @@
     private Integer groupType ;
 
     @ApiModelProperty(value = "鎵胯繍鍟�")
-    @ExcelColumn(name="杩愯緭鍏徃",index = 16,width = 10)
+    @ExcelColumn(name="杩愯緭鍏徃",index = 4,width = 10)
     @TableField(exist = false)
     private String carrierName ;
 
@@ -355,7 +356,7 @@
     private Long workTime;
     @ApiModelProperty(value = "浣滀笟鏃堕暱")
     @TableField(exist = false)
-    @ExcelColumn(name="浣滀笟鏃堕暱",index =11 ,width = 6)
+   // @ExcelColumn(name="浣滀笟鏃堕暱",index =11 ,width = 6)
     private String workTimeStr;
 
     @ApiModelProperty(value = "WMS浠诲姟淇℃伅")
@@ -413,7 +414,7 @@
 
     @ApiModelProperty(value = "鏈堝彴缁勫悕绉�")
     @TableField(exist = false)
-    @ExcelColumn(name="浣滀笟鏈堝彴缁�",index =22,width = 10)
+    @ExcelColumn(name="浣滀笟鏈堝彴缁�",index = 8,width = 10)
     private String platformGroupName ;
 
     @ApiModelProperty(value = "鏈堝彴宸ヤ綔鏃堕暱" ,hidden = true)
@@ -433,7 +434,7 @@
     private String queryStatusForPower;
 
     @ApiModelProperty(value = "浠诲姟鏉ユ簮")
-    @ExcelColumn(name="浠诲姟鏉ユ簮",index =14,valueMapping = "0=WMS鑾峰彇;1=鑷富棰勭害;")
+   // @ExcelColumn(name="浠诲姟鏉ユ簮",index =14,valueMapping = "0=WMS鑾峰彇;1=鑷富棰勭害;")
     @TableField(exist = false)
     private Integer jobForm;
 
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 c696282..cbef80e 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
@@ -2494,11 +2494,16 @@
         BeanUtils.copyProperties(model,platformJob);
         platformJob.setPlatformGroupId(param.getPlatformGroupId());
         platformJob.setEditDate(new Date());
+        platformJob.setTagVirtual(Constants.ONE);
+        platformJob.setTagVirtualUser(platformJob.getEditor());
+        platformJob.setTagVirtualTime(platformJob.getEditDate());
         platformJob.setEditor(loginUser.getId());
        int flag =  platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda()
                 .set(PlatformJob::getEditDate,platformJob.getEditDate())
+                .set(PlatformJob::getTagVirtualTime,platformJob.getTagVirtualTime())
                 .set(PlatformJob::getEditor,platformJob.getEditor())
                 .set(PlatformJob::getPlatformGroupId,param.getPlatformGroupId())
+                .set(PlatformJob::getTagVirtualUser,platformJob.getEditor())
                 .set(PlatformJob::getPlatformId,null)//缃┖鍒嗛厤鐨勬湀鍙颁俊鎭�
                 .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(),
                         Constants.PlatformJobStatus.WART_SIGN_IN.getKey(),

--
Gitblit v1.9.3