From 2edfe17a39cb5aa653318cad9474d18fbdaa204e Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 30 五月 2024 18:23:47 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                     |   21 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java                  |    8 
 admin/src/assets/icons/ic_chaosong.png                                                                       |    0 
 admin/src/assets/icons/ic_duoren.png                                                                         |    0 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java                  |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java    |   88 ++-
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java                    |   52 -
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java                        |    5 
 admin/src/assets/icons/ic_dangqian.png                                                                       |    0 
 server/system_service/src/main/java/com/doumee/api/system/SystemController.java                              |    1 
 server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java                                 |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java      |   17 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java         |  257 +++++++++
 admin/src/api/business/carUseBook.js                                                                         |   47 +
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java               |   14 
 admin/src/components/business/OperaCarUseBookWindow.vue                                                      |  522 +++++++++++++++++++
 admin/src/assets/icons/ic_tongguo.png                                                                        |    0 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java                                  |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java                  |    8 
 admin/src/api/business/member.js                                                                             |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java                       |   11 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java          |   32 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java                    |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                   |    2 
 admin/src/assets/icons/ic_grey.png                                                                           |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java |   14 
 admin/src/utils/request.js                                                                                   |    2 
 server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java                               |    3 
 admin/src/assets/icons/ic_jujue.png                                                                          |    0 
 server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java                            |   20 
 admin/src/components/business/OperaHiddenDangerWindow.vue                                                    |   76 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java          |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java                  |    2 
 admin/src/views/operation/serviceCar/apprRecord.vue                                                          |  307 +++++++----
 admin/src/views/operation/danger/record.vue                                                                  |   18 
 36 files changed, 1,286 insertions(+), 278 deletions(-)

diff --git a/admin/src/api/business/carUseBook.js b/admin/src/api/business/carUseBook.js
new file mode 100644
index 0000000..94ac03e
--- /dev/null
+++ b/admin/src/api/business/carUseBook.js
@@ -0,0 +1,47 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBook/page', data, {
+    trim: true
+  })
+}
+// 鏌ヨ
+export function findLogList (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBookLog/findList', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBook/create', data)
+}
+export function transfercarUseBook (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBook/transfercarUseBook', data)
+}
+export function dealcarUseBook (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBook/dealcarUseBook', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBook/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/carUseBook/delete/${id}`)
+}
+// 鏍规嵁ID鏌ヨ
+export function detail(id) {
+  return request.get(`/visitsAdmin/cloudService/business/carUseBook/${id}`)
+}
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/visitsAdmin/cloudService/business/carUseBook/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
index 3f40252..c1ea678 100644
--- a/admin/src/api/business/member.js
+++ b/admin/src/api/business/member.js
@@ -10,13 +10,15 @@
   })
 }
 export function allList (data) {
-  // return request.post('/business/member/page', data, {
-  //   trim: true
-  // })
   return request.post('/visitsAdmin/cloudService/business/member/list', data, {
     trim: true
   })
 }
+export function driveList (data) {
+  return request.post('/visitsAdmin/cloudService/business/member/driveList', data, {
+    trim: true
+  })
+}
 // 閮ㄩ棬淇℃伅鍚屾
 export function memberSync (data) {
   return request.post('/visitsAdmin/cloudService/business/member/syncAll', data)
diff --git a/admin/src/assets/icons/ic_chaosong.png b/admin/src/assets/icons/ic_chaosong.png
new file mode 100644
index 0000000..784d308
--- /dev/null
+++ b/admin/src/assets/icons/ic_chaosong.png
Binary files differ
diff --git a/admin/src/assets/icons/ic_dangqian.png b/admin/src/assets/icons/ic_dangqian.png
new file mode 100644
index 0000000..4e0d0e4
--- /dev/null
+++ b/admin/src/assets/icons/ic_dangqian.png
Binary files differ
diff --git a/admin/src/assets/icons/ic_duoren.png b/admin/src/assets/icons/ic_duoren.png
new file mode 100644
index 0000000..a608ea0
--- /dev/null
+++ b/admin/src/assets/icons/ic_duoren.png
Binary files differ
diff --git a/admin/src/assets/icons/ic_grey.png b/admin/src/assets/icons/ic_grey.png
new file mode 100644
index 0000000..077b42d
--- /dev/null
+++ b/admin/src/assets/icons/ic_grey.png
Binary files differ
diff --git a/admin/src/assets/icons/ic_jujue.png b/admin/src/assets/icons/ic_jujue.png
new file mode 100644
index 0000000..aaa04ab
--- /dev/null
+++ b/admin/src/assets/icons/ic_jujue.png
Binary files differ
diff --git a/admin/src/assets/icons/ic_tongguo.png b/admin/src/assets/icons/ic_tongguo.png
new file mode 100644
index 0000000..80f06a6
--- /dev/null
+++ b/admin/src/assets/icons/ic_tongguo.png
Binary files differ
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
new file mode 100644
index 0000000..d4290bb
--- /dev/null
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -0,0 +1,522 @@
+<template>
+  <GlobalWindow
+      :title="title"
+      :visible.sync="visible"
+      @confirm="confirm"
+  >
+    <div class="modal_wrap">
+      <div class="modal_content">
+        <div class="header">
+          <div class="left">
+            <div class="h1">鍏姟杞︾敵璇�</div>
+            <div class="time">鎻愪氦鏃堕棿锛歿{model.createDate}}</div>
+          </div>
+          <span class="right"  v-if="model.status === 0">鐢宠涓�</span>
+          <span class="right"  v-if="model.status === 1">寰呭鎵�</span>
+          <span class="right" style="background:#53b76f " v-if="model.status === 2">瀹℃壒閫氳繃</span>
+          <span class="right" style="background:#dc362e " v-if="model.status === 3">瀹℃壒涓嶉�氳繃</span>
+          <span class="right" style="background:#dc362e " v-if="model.status === 4">宸插彇娑�</span>
+        </div>
+        <div class="info">
+          <div class="title">鍏姟杞︾敵璇蜂俊鎭�</div>
+          <div class="list">
+            <div class="item" style="width: 100%">
+              <div class="label">鐢宠浜�</div>
+              <div class="value">{{model.memberName || ''}} {{model.memberPhone || ''}} ({{model.companyName || ''}})</div>
+            </div>
+            <div class="item">
+              <div class="label">鐢宠杞﹁締</div>
+              <div class="value">{{model.carCode || ''}}</div>
+            </div>
+            <div class="item">
+              <div class="label">鍙告満淇℃伅</div>
+              <div class="value" v-if="model.driverId !=null">{{model.driverName || ''}} {{model.driverPhone || ''}}</div>
+              <div class="value" v-if="model.driverId ==null">鏈寚娲�</div>
+            </div>
+            <div class="item"  >
+            <div class="label">鐢ㄨ溅浜嬬敱</div>
+            <div class="value">{{model.content}}</div>
+          </div>
+            <div class="item">
+              <div class="label">涔樿溅浜哄憳</div>
+              <div class="value">{{model.memberNames || ''}}</div>
+            </div>
+            <div class="item">
+              <div class="label">鐩殑鍦扮被鍒�</div>
+              <div class="value status-green" v-if="model.type === 0">銆愬競鍐呯敤杞︺��</div>
+              <spdivan class="value status-red"   v-if="model.type === 1">銆愬競鍐呯敤杞︺��</spdivan>
+            </div>
+            <div class="item">
+              <div class="label">鐩殑鍦�</div>
+              <div class="value">{{model.addr || ''}}</div>
+            </div>
+            <div class="item">
+              <div class="label">棰勮鍑哄彂鏃堕棿</div>
+              <div class="value">{{model.planUseDate || ''}}</div>
+            </div>
+            <div class="item">
+              <div class="label">鐢ㄨ溅鏃舵</div>
+              <div class="value">濮�:{{model.startTime || ''}}<br>姝�:{{model.endTime || ''}}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="side">
+        <div class="side_title">瀹℃壒娴佺▼</div>
+        <div class="list"  v-if="model.approveDateVO !=null && model.approveDateVO.approveList !=null">
+          <div class="item" v-for="(item,index) in model.approveDateVO.approveList" :key="item.id">
+            <div class="separate" v-if=" (index < model.approveDateVO.approveList.length-1)"></div>
+            <div class="info">
+              <img src="@/assets/icons/ic_tongguo.png"   class="iconnew" v-if="(item.status ==2)"/>
+              <img src="@/assets/icons/ic_dangqian.png"   class="iconnew"  v-if="(item.status==1)"/>
+              <img src="@/assets/icons/ic_jujue.png"  class="iconnew"  v-if="(item.status==3)"></i>
+              <img src="@/assets/icons/ic_grep.png"  class="iconnew" v-if="(item.status==null || item.status==0 )"></i>
+              <div style="display: inline" v-if="item.approveType ===0">
+                <img v-if="item.faceImg!=null && item.faceImg !=''" :src="item.faceImg" class="avatar" alt="" />
+                <img v-if="item.faceImg ==null ||item.faceImg ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" />
+              </div>
+              <div style="display: inline" v-if="item.approveType ===1">
+                <img v-if="item.status === 1"  src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" />
+                <img  v-if="item.status != 1"  src="@/assets/icons/ic_duoren.png" class="avatar" alt="" />
+              </div>
+              <div class="content">
+                <div class="line">
+                  <div class="name">{{ item.title}}</div>
+                  <div class="time">{{ item.createDate }}</div>
+                </div>
+                <div class="line">
+                  <div class="company">
+                    {{ item.createUserName }} {{ item.companyName }}
+                    <div style="display: inline" v-if="item.statusInfo!=null && item.statusInfo!=''">
+                       <span class="status-green">{{item.statusInfo||''}}</span>锛�
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div v-if="item.approveType != 1 " class="remark">
+              {{ item.checkInfo ||'姘寸數璐瑰弽鍙嶅澶嶅弽鍙嶅澶嶆柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曟柟娉曞彂鍙戝彂' }}
+            </div>
+            <div v-if="item.approveType == 1 "  class="childList">
+              <div style="display: inline" v-for="item1 in item.approveList" :key="item1.id">
+                <img v-if="item1.faceImg!=null && item1.faceImg !=''" :src="item1.faceImg" class="avatar" alt="" />
+                <img v-if="item1.faceImg ==null ||item1.faceImg ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" />
+                <span style="display: inline-block"> {{item1.memberName}}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!--  -->
+    <template   v-slot:footer>
+      <el-button @click="isShowProblem = true"  type="primary"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  class="status-red">鍚屾剰</el-button>
+      <el-button @click="isBackProblem=true"  type="danger"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  >鎷掔粷</el-button>
+      <el-button @click="visible=false">杩斿洖</el-button>
+    </template>
+    <el-dialog
+        append-to-body
+        title="鍚屾剰鐢宠"
+        class="dialogCl"
+        :visible.sync="isShowProblem"
+        width="480px"
+    >
+      <el-form :model="dealForm" ref="dealForm" >
+        <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.drvierParam ===1">
+          <el-select v-model="transForm.driverId" style="width: 300px"  filterable clearable placeholder="璇烽�夋嫨娲鹃仯鍙告満">
+            <el-option
+                v-for="item in memberList"
+                :key="item.id"
+                :label="item.name+'-'+item.phone"
+                :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鍚屾剰璇存槑">
+          <el-input
+              type="textarea"
+              placeholder="璇峰~鍐欒鏄�"
+              :rows="4"
+              v-model="backForm.checkInfo"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowProblem = false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="dealing" @click="dealDo">纭畾</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+        append-to-body
+        title="鎷掔粷鐢宠"
+        class="dialogCl"
+        :visible.sync="isBackProblem"
+        width="600px"
+    >
+      <el-form :model="backForm"  ref="backForm" label-width="100px">
+        <el-form-item label="鎷掔粷璇存槑">
+          <el-input
+              type="textarea"
+              placeholder="璇峰~鍐欒鏄�"
+              :rows="4"
+              v-model="backForm.checkInfo"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isBackProblem= false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="dealing" @click="backDo">纭畾</el-button>
+      </span>
+    </el-dialog>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { driveList } from '@/api/business/member'
+import { mapState } from 'vuex'
+export default {
+  name: 'OperaCarUseBookWindow',
+  components: { GlobalWindow },
+  extends: BaseOpera,
+  data () {
+    return {
+      title: '鍏姟杞︾敵璇�',
+      visible: false,
+      dataId: null,
+      model: { },
+      dealing: false,
+      isShowProblem: false,
+      isBackProblem: false,
+      memberList: [],
+      dealForm: {
+        driveId: null,
+        checkInfo: null
+      },
+      backForm: {
+        checkInfo: null
+      }
+    }
+  },
+  computed: {
+    ...mapState(['userInfo'])
+  },
+  created () {
+    this.config({
+      api: '/business/carUseBook',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    dealDo () {
+      this.$refs.dealForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.$dialog.actionConfirm('鎿嶄綔纭', '鎮ㄧ‘璁ゆ彁浜よ闅愭偅澶勭悊鎯呭喌鍚楋紵')
+          .then(() => {
+            this.dealing = true
+            this.api.dealHiddenDanger({
+              id: this.dataId,
+              status: 1,
+              driverId: this.dealForm.driveId,
+              checkInfo: this.dealForm.checkInfo
+            })
+              .then(res => {
+                this.$tip.apiSuccess('澶勭悊鎴愬姛')
+                this.getDetail()
+                this.isShowProblem = false
+              })
+              .finally(() => {
+                this.dealing = false
+              })
+          })
+      })
+    },
+    backDo () {
+      this.$refs.backForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.$dialog.actionConfirm('鎿嶄綔纭', '鎮ㄧ‘璁ら��鍥炶闅愭偅澶勭悊鎯呭喌鍚楋紵')
+          .then(() => {
+            this.dealing = true
+            this.api.dealHiddenDanger({
+              id: this.dataId,
+              status: 2,
+              checkInfo: this.backForm.checkInfo
+            })
+              .then(res => {
+                this.$tip.apiSuccess('閫�鍥炴垚鍔�')
+                this.getDetail()
+                this.isBackProblem = false
+              })
+              .catch(e => {
+              })
+              .finally(() => {
+                this.dealing = false
+              })
+          })
+      })
+    },
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.model = {}
+      this.dataId = target.id
+      this.$nextTick(() => {
+        this.memberList = []
+        this.dealForm = {
+          driveId: null,
+          checkInfo: null
+        }
+        this.backForm = {
+          checkInfo: null
+        }
+        this.getDetail()
+      })
+    },
+    getDetail () {
+      this.api.detail(this.dataId)
+        .then(res => {
+          this.model = res
+          this.dealForm.driveId = res.driveId
+        })
+    },
+    handleTransfer () {
+      this.isShowTransfer = true
+      this.loadMemberList()
+    },
+    loadMemberList () {
+      driveList({}).then(res => {
+        this.memberList = res
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.side_title{
+  font-weight: 600;
+  font-size: 18px;
+  color: #111111;
+  margin-bottom: 20px;
+  margin-left: 20px;
+  margin-top: 20px;
+}
+.upload_box {
+  width: 84px;
+  height: 84px;
+  border-radius: 4px;
+  background-color: #f7f7f7;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  color: #999999;
+  border: 1px solid #e4e4e4;
+  .icon {
+    font-size: 24px;
+  }
+  .text {
+    font-size: 12px;
+  }
+}
+
+.modal_wrap {
+  display: flex;
+  height: 100%;
+  .modal_content {
+    flex: 1;
+    padding: 0px 30px;
+    border-radius: 8px;
+    overflow: hidden;
+    height: 100%;
+
+    .title {
+      font-weight: 600;
+      font-size: 18px;
+      color: #333333;
+      margin-bottom: 20px;
+      margin-top: 30px;
+    }
+    .info {
+      .list {
+        display: flex;
+        flex-wrap: wrap;
+
+        .item {
+          display: flex;
+          width: 40%;
+          margin-bottom: 20px;
+          &:nth-of-type(2n) {
+            width: 60%;
+          }
+
+          .label {
+            color: #888888;
+            width: 100px;
+          }
+
+          .value {
+            color: #111111;
+          }
+        }
+      }
+    }
+
+    .header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 20px 30px;
+      margin: 0 -30px;
+      border-radius: 8px 8px 0 0;
+      background: linear-gradient(to right, #f2f6fe, #cadffa);
+
+      .h1 {
+        font-weight: 600;
+        font-size: 22px;
+        color: #111111;
+        margin-bottom: 8px;
+      }
+
+      .time {
+        font-size: 14px;
+        color: #999999;
+      }
+
+      .right {
+        height: 40px;
+        font-size: 16px;
+        color: #ffffff;
+        line-height: 40px;
+        padding: 0 20px;
+        background: #207ff7;
+        box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+        border-radius: 16px 0px 16px 0px;
+      }
+    }
+    .table_info {
+      .name_wrap {
+        display: flex;
+        align-items: center;
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin-right: 12px;
+        }
+        .content {
+          .line {
+            display: flex;
+          }
+          .tag {
+            color: #b2cbf9;
+            border: 1px solid #b2cbf9;
+            padding: 0px 4px;
+            border-radius: 4px;
+            margin-left: 6px;
+          }
+        }
+      }
+    }
+  }
+
+  .side {
+    height: 100%;
+    width: 420px;
+    background: #ffffff;
+    border-left: 20px solid #f7f7f7;
+    .list {
+      .item {
+        padding: 8px 0;
+        position: relative;
+        .separate {
+          position: absolute;
+          border-left: 2px dashed #cccccc;
+          left: 31px;
+          height: calc(100% - 24px);
+          top: 34px;
+        }
+        .info {
+          display: flex;
+          align-items: center;
+          margin-left: 20px;
+          .icon {
+            position: relative;
+            z-index: 11;
+            color: #53b76f;
+            font-size: 24px;
+          }
+          .icon1 {
+            position: relative;
+            z-index: 11;
+            color: deepskyblue;
+            font-size: 24px;
+          }
+          .icon2 {
+            position: relative;
+            z-index: 11;
+            color: #dc362e;
+            font-size: 24px;
+          }
+          .iconnew{
+            width: 24px;
+            height: 24px;
+          }
+          .icon3 {
+            position: relative;
+            z-index: 11;
+            color:gray;
+            font-size: 24px;
+          }
+          .avatar {
+            width: 40px;
+            height: 40px;
+            border-radius: 50%;
+            margin: 0 12px 0 16px;
+            border: 1px solid;
+          }
+          .content {
+            flex: 1;
+            .line {
+              display: flex;
+              justify-content: space-between;
+              align-content: center;
+              margin-bottom: 6px;
+              .name {
+                font-weight: 600;
+                font-size: 16px;
+                color: #111111;
+              }
+              .time {
+                color: #888888;
+              }
+              .company {
+                font-size: 13px;
+                color: #888888;
+                .status {
+                  color: #00ba67;
+                }
+              }
+            }
+          }
+        }
+        .remark {
+          background: #f7f7f7;
+          border-radius: 4px;
+          padding: 13px 15px;
+          color: #666666;
+          margin-left: 120px;
+        }
+        .childList {
+          margin-left: 120px;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/admin/src/components/business/OperaHiddenDangerWindow.vue b/admin/src/components/business/OperaHiddenDangerWindow.vue
index f004feb..39d03c6 100644
--- a/admin/src/components/business/OperaHiddenDangerWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -13,8 +13,8 @@
             <div class="time">鎻愭姤鏃堕棿锛歿{model.createDate}}</div>
           </div>
           <div class="right" v-if="model.status==0">寰呭鐞�</div>
-          <div class="right" v-if="model.status==1">宸插鐞�</div>
-          <div class="right" v-if="model.status==2">宸叉挙閿�</div>
+          <div class="right"  style="background:#53b76f " v-if="model.status==1">宸插鐞�</div>
+          <div class="right" style="background:#dc362e "  v-if="model.status==2">宸查��鍥�</div>
         </div>
         <div class="info">
           <div class="title">闅愭偅鎻愭姤璇︽儏</div>
@@ -146,7 +146,7 @@
     <template   v-slot:footer>
       <el-button @click="isShowProblem = true"  type="primary"  v-if="model.status==0&& model.checkUserId == userInfo.memberId"  class="status-red">澶勭悊</el-button>
       <el-button type="primary" plain v-if="model.status==0 && model.checkUserId == userInfo.memberId" @click="handleTransfer">杞氦</el-button>
-      <el-button @click="backDo"  v-if="model.status==0&& model.checkUserId == userInfo.memberId" type="danger"  >閫�鍥�</el-button>
+      <el-button @click="isBackProblem=true"  v-if="model.status==0&& model.checkUserId == userInfo.memberId" type="danger"  >閫�鍥�</el-button>
       <el-button @click="visible=false">杩斿洖</el-button>
     </template>
 
@@ -186,8 +186,9 @@
         <el-form-item label="鏁存敼鏃堕棿" prop="checkDate">
           <el-date-picker
               class="w300"
-              type="date"
-              placeholder="閫夋嫨鏃ユ湡"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              placeholder="閫夋嫨鏁存敼鏃堕棿"
               v-model="dealForm.checkDate"
           />
         </el-form-item>
@@ -220,16 +221,18 @@
     <el-dialog
         append-to-body
         title="闅愭偅閫�鍥�"
+
         class="dialogCl"
         :visible.sync="isBackProblem"
-        width="480px"
+        width="600px"
     >
       <el-form :model="backForm" :rules="rulesBack" ref="backForm" label-width="100px">
         <el-form-item label="閫�鍥炴椂闂�" prop="checkDate">
           <el-date-picker
               class="w300"
-              type="date"
-              placeholder="閫夋嫨鏃ユ湡"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              type="datetime"
+              placeholder="閫夋嫨閫�鍥炴椂闂�"
               v-model="backForm.checkDate"
           />
         </el-form-item>
@@ -263,7 +266,6 @@
 import upload from '@/components/common/upload'
 import { memberList } from '@/api/business/hiddenDangerParam'
 import { mapState } from 'vuex'
-import { dealHiddenDanger } from '@/api/business/hiddenDanger'
 export default {
   components: { GlobalWindow, upload },
   extends: BaseOpera,
@@ -303,10 +305,11 @@
       rulesBack: {
         checkDate: [
           { required: true, message: '璇烽�夋嫨閫�鍥炴椂闂�' }
-        ],
+        ]
+        /*,
         dealBeforeFileList: [
           { required: true, message: '璇蜂笂浼犳暣鏀瑰墠鎯呭喌' }
-        ]
+        ]*/
       },
       memberList: [],
       transForm: {
@@ -345,8 +348,8 @@
           this.dealForm.dealAfterFileList.splice(index, 1)
         }
       } else if (type == 2) {
-        if (this.backForm.dealAfterFileList != null && this.backForm.dealAfterFileList.length > index) {
-          this.backForm.dealAfterFileList.splice(index, 1)
+        if (this.backForm.dealBeforeFileList != null && this.backForm.dealBeforeFileList.length > index) {
+          this.backForm.dealBeforeFileList.splice(index, 1)
         }
       }
     },
@@ -356,10 +359,9 @@
           this.dealForm.dealBeforeFileList = []
         }
         this.dealForm.dealBeforeFileList.push({
-          id: this.model.id,
+          fileurl: e.imgaddr,
           url: e.url,
-          fileUrl: e.imgaddr,
-          fileName: e.originname,
+          name: e.originname,
           fileType: e.type
         })
       } else if (objType === 1) {
@@ -367,21 +369,19 @@
           this.dealForm.dealAfterFileList = []
         }
         this.dealForm.dealAfterFileList.push({
-          id: this.model.id,
-          fileUrl: e.imgaddr,
+          fileurl: e.imgaddr,
           url: e.url,
-          fileName: e.originname,
+          name: e.originname,
           fileType: e.type
         })
       } else if (objType === 2) {
-        if (this.backForm.dealAfterFileList == null) {
-          this.backForm.dealAfterFileList = []
+        if (this.backForm.dealBeforeFileList == null) {
+          this.backForm.dealBeforeFileList = []
         }
-        this.backForm.dealAfterFileList.push({
-          id: this.model.id,
-          fileUrl: e.imgaddr,
+        this.backForm.dealBeforeFileList.push({
+          fileurl: e.imgaddr,
           url: e.url,
-          fileName: e.originname,
+          name: e.originname,
           fileType: e.type
         })
       }
@@ -394,20 +394,20 @@
         }
         this.$dialog.actionConfirm('鎿嶄綔纭', '鎮ㄧ‘璁ゆ彁浜よ闅愭偅澶勭悊鎯呭喌鍚楋紵')
           .then(() => {
-            this.transfering = true
+            this.dealing = true
             this.api.dealHiddenDanger({
               id: this.dataId,
               status: 1,
-              checkDate: this.dealForm.checkDate,
+              dealTime: this.dealForm.checkDate,
               checkInfo: this.dealForm.checkInfo,
               dealBeforeFileList: this.dealForm.dealBeforeFileList,
-              dealAfterFileList: this.dealForm.dealBeforeFileList
+              dealAfterFileList: this.dealForm.dealAfterFileList
             })
               .then(res => {
-                this.$tip.apiSuccess('杞氦鎴愬姛')
+                this.$tip.apiSuccess('澶勭悊鎴愬姛')
                 this.getDetail()
                 this.getLogList()
-                this.isShowTransfer = false
+                this.isShowProblem = false
               })
               .catch(e => {
               })
@@ -424,19 +424,19 @@
         }
         this.$dialog.actionConfirm('鎿嶄綔纭', '鎮ㄧ‘璁ら��鍥炶闅愭偅澶勭悊鎯呭喌鍚楋紵')
           .then(() => {
-            this.transfering = true
+            this.dealing = true
             this.api.dealHiddenDanger({
               id: this.dataId,
-              status: 0,
-              checkDate: this.backForm.checkDate,
+              status: 2,
+              dealTime: this.backForm.checkDate,
               checkInfo: this.backForm.checkInfo,
               dealBeforeFileList: this.backForm.dealBeforeFileList
             })
               .then(res => {
-                this.$tip.apiSuccess('杞氦鎴愬姛')
+                this.$tip.apiSuccess('閫�鍥炴垚鍔�')
                 this.getDetail()
                 this.getLogList()
-                this.isShowTransfer = false
+                this.isBackProblem = false
               })
               .catch(e => {
               })
@@ -455,13 +455,13 @@
         this.memberList = []
         this.transForm = {
           memberId: null
-        },
+        }
         this.dealForm = {
           checkDate: null,
           checkInfo: null,
           dealBeforeFileList: [],
           dealAfterFileList: []
-        },
+        }
         this.backForm = {
           checkDate: null,
           checkInfo: null,
@@ -692,7 +692,7 @@
           .icon2 {
             position: relative;
             z-index: 11;
-            color: red;
+            color: #dc362e;
             font-size: 24px;
           }
           .avatar {
diff --git a/admin/src/utils/request.js b/admin/src/utils/request.js
index 9aec747..24c674c 100644
--- a/admin/src/utils/request.js
+++ b/admin/src/utils/request.js
@@ -53,7 +53,7 @@
   if (response.data.code === 503) {
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
   }
-  if (response.data.code === 401) {
+  if (response.data.code === 401 || response.data.code === 5112) {
     if (response.config.autoLogin !== false) {
       Cookies.set('dm_user_token','')
       window.location.href = process.env.VUE_APP_ROUTER_MODE === 'hash' ? (process.env.VUE_APP_CONTEXT_PATH +'/#/login') : (process.env.VUE_APP_CONTEXT_PATH+'/login')
diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue
index 2ba20b5..f7bca4b 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -6,10 +6,10 @@
         <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鎻愭姤浜虹粍缁�" prop="companyName">
-        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
-        <el-select v-model="searchForm.areaId" placeholder="璇烽�夋嫨闅愭偅鍖哄煙" @keypress.enter.native="search">
+        <el-select v-model="searchForm.areaId" placeholder="璇烽�夋嫨闅愭偅鍖哄煙" clearable  @change="search">
           <el-option
               v-for="item in areaList"
               :key="item.id"
@@ -19,13 +19,20 @@
         </el-select>
       </el-form-item>
       <el-form-item label="闅愭偅绫诲瀷" prop="cateId">
-        <el-select v-model="searchForm.cateId" placeholder="璇烽�夋嫨闅愭偅绫诲瀷" @keypress.enter.native="search">
+        <el-select v-model="searchForm.cateId" placeholder="璇烽�夋嫨闅愭偅绫诲瀷" clearable @change="search">
           <el-option
               v-for="item in cateList"
               :key="item.id"
               :label="item.name"
               :value="item.id">
           </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="searchForm.status"  @change="search" clearable placeholder="鐘舵��">
+          <el-option label="寰呭鐞�" value="0"></el-option>
+          <el-option label="宸插鐞�" value="1"></el-option>
+          <el-option label="宸查��鍑�" value="2"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鎻愭姤鏃堕棿" prop="startTime">
@@ -72,7 +79,7 @@
           <template slot-scope="{row}">
             <span class="status-blue"  v-if="row.status === 0">寰呭鐞�</span>
             <span class="status-green"   v-if="row.status === 1">宸插鐞�</span>
-            <span class="status-red"   v-if="row.status === 2">宸叉挙閿�</span>
+            <span class="status-red"   v-if="row.status === 2">宸查��鍥�</span>
           </template>
         </el-table-column>
         <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
@@ -117,7 +124,8 @@
         queryStartTime: '',
         queryEndTime: '',
         areaId: null,
-        cateId: null
+        cateId: null,
+        status:null
       },
       cateList: [],
       areaList: [],
diff --git a/admin/src/views/operation/serviceCar/apprRecord.vue b/admin/src/views/operation/serviceCar/apprRecord.vue
index 8b72d68..34fab76 100644
--- a/admin/src/views/operation/serviceCar/apprRecord.vue
+++ b/admin/src/views/operation/serviceCar/apprRecord.vue
@@ -1,135 +1,206 @@
 <template>
-  <div class="main_app">
-    <QueryForm
-      v-model="filters"
-      :query-form-config="queryFormConfig"
-      @handleQuery="getList(1)"
-      @clear="clear"
-    />
-    <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column
-        prop="name"
-        label="鐢宠浜�"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="缁勭粐"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="杞︾墝鐓�"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鐢ㄨ溅鏃堕棿"
-        min-width="80"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鍑哄彂鏃堕棿"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鐩殑鍦扮被鍒�"
-        min-width="110"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鐩殑鍦�"
-        min-width="100"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鐢宠鐘舵��"
-        min-width="80"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        prop="name"
-        label="鎿嶄綔"
-        min-width="80"
-        show-overflow-tooltip
+  <TableLayout :permissions="['business:empower:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="鐢宠浜�" prop="memberName">
+        <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢宠浜虹粍缁�" prop="companyName">
+        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ョ敵璇蜂汉缁勭粐" clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="杞︾墝鍙�" prop="carCode">
+        <el-input v-model="searchForm.carCode" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="searchForm.status"  @change="search" clearable placeholder="鐘舵��">
+          <el-option label="鐢宠涓�" value="0"></el-option>
+          <el-option label="瀹℃牳涓�" value="1"></el-option>
+          <el-option label="瀹℃壒閫氳繃" value="2"></el-option>
+          <el-option label="瀹℃壒涓嶉�氳繃" value="3"></el-option>
+          <el-option label="宸插彇娑�" value="4"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鐩殑鍦扮被鍨�" prop="type">
+        <el-select v-model="searchForm.type"  @change="search" clearable placeholder="鐩殑鍦扮被鍨�">
+          <el-option label="甯傚唴鐢ㄨ溅" value="0"></el-option>
+          <el-option label="甯傚鐢ㄨ溅" value="1"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鍑哄彂鏃堕棿" prop="startTime">
+        <el-date-picker
+            @change="seleTime"
+            v-model="time"
+            @keypress.enter.native="search"
+            type="datetimerange"
+            format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡">
+        </el-date-picker>
+      </el-form-item>
+      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
+        <el-radio-button label="0">褰撳ぉ</el-radio-button>
+        <el-radio-button label="1">杩�7澶�</el-radio-button>
+        <el-radio-button label="2">杩�30澶�</el-radio-button>
+      </el-radio-group>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:empower:create', 'business:empower:delete']">
+        <!--<li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li> -->
+      </ul>
+      <el-table
+          v-loading="isWorking.search"
+          :data="tableData.list"
+          stripe
+          @selection-change="handleSelectionChange"
       >
-        <template>
-          <el-button type="text">鏌ョ湅璇︽儏</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination
-      @size-change="handleSizeChange"
-      @current-change="getList"
-      :pagination="pagination"
-    />
-  </div>
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column prop="memberName" label="鎻愭姤浜�" min-width="80px"></el-table-column>
+        <el-table-column prop="companyName" label="鎵�灞炵粍缁�" min-width="150px"></el-table-column>
+        <el-table-column prop="carCode" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+        <el-table-column label="鐢ㄨ溅鏃堕棿" min-width="170px">
+          <template slot-scope="{row}">
+                <span>璧�:{{row.startTime || ''}}</span><br>
+                <span>姝�:{{row.endTime  || ''}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="planUseDate" label="鍑哄彂鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column label="鐩殑鍦�" min-width="200px">
+          <template slot-scope="{row}">
+            <span class="status-green" v-if="row.type === 0">銆愬競鍐呫��</span>
+            <span class="status-red"   v-if="row.type === 1">銆愬競澶栥��</span>
+            <span >{{ row.addr }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <span class="status-blue"  v-if="row.status === 0">鐢宠涓�</span>
+            <span class="status-blue"  v-if="row.status === 1">寰呭鎵�</span>
+            <span class="status-green" v-if="row.status === 2">瀹℃壒閫氳繃</span>
+            <span class="status-red"   v-if="row.status === 3">瀹℃壒涓嶉�氳繃</span>
+            <span class="status-red"   v-if="row.status === 4">宸插彇娑�</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column prop="createDate" label="鐢宠鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column
+            label="鎿嶄綔"
+            min-width="100"
+            align="center"
+            fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�',row)" >鏌ョ湅璇︽儏</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+          @size-change="handleSizeChange"
+          @current-change="handlePageChange"
+          :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="handlePageChange"/>
+  </TableLayout>
 </template>
 
 <script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
-import QueryForm from '@/components/common/QueryForm'
+import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow'
+import { timeForMat } from '@/utils/util'
+import { allList } from '@/api/business/hiddenDangerParam'
 export default {
-  components: {
-    Pagination,
-    QueryForm
-  },
+  name: 'Empower',
+  extends: BaseTable,
+  components: { TableLayout, Pagination ,OperaCarUseBookWindow},
   data () {
     return {
-      filters: {},
-      loading: false,
-      queryFormConfig: {
-        formItems: [
-          {
-            filed: 'name',
-            type: 'input',
-            label: '鐢宠浜哄鍚�'
-          },
-          {
-            filed: 'idCard',
-            type: 'input',
-            label: '杞︾墝鐓�'
-          },
-          {
-            filed: 'name',
-            type: 'select',
-            label: '鐩殑鍦扮被鍒�',
-            options: []
-          },
-          {
-            filed: 'name',
-            type: 'datetimerange',
-            label: '鍑哄彂鏃堕棿',
-            options: []
-          }
-        ],
-        online: true
+      // 鎼滅储
+      searchForm: {
+        memberName: '',
+        companyName: '',
+        queryStartTime: '',
+        queryEndTime: '',
+        type: null,
+        status:null
       },
-      pagination: {
-        capacity: 10,
-        page: 1
-      },
-      list: [],
-      total: 0
+      cateList: [],
+      areaList: [],
+      time: []
     }
   },
+  created () {
+    this.config({
+      module: '鐢ㄨ溅鐢宠绠$悊',
+      api: '/business/carUseBook',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    // this.search()
+    this.changeRadio('0')
+    this.loadParams()
+  },
   methods: {
-    getList (page) { },
-    clear () { },
-    handleSizeChange (capacity) {
-      this.pagination.capacity = capacity
+    changeRadio (e) {
+      this.searchForm.radio = e
+      if (e === '0') {
+        this.searchForm.queryStartTime = timeForMat(0)[0]
+        this.searchForm.queryEndTime = timeForMat(0)[1]
+        this.time = timeForMat(0)
+      } else if (e === '1') {
+        this.searchForm.queryStartTime = timeForMat(6)[0]
+        this.searchForm.queryEndTime = timeForMat(6)[1]
+        this.time = timeForMat(6)
+      } else if (e === '2') {
+        this.searchForm.queryStartTime = timeForMat(29)[0]
+        this.searchForm.queryEndTime = timeForMat(29)[1]
+        this.time = timeForMat(29)
+      }
+      this.search()
+    },
+    loadParams () {
+      allList({
+      })
+          .then(res => {
+            if (res != null && res.length) {
+              res.forEach(item => {
+                if (item && item.type != null && item.type === 0) {
+                  this.areaList.push(item)
+                }
+                if (item && item.type != null && item.type === 1) {
+                  this.cateList.push(item)
+                }
+              })
+            }
+          })
+          .catch(e => {
+            // this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+          })
+    },
+    seleTime (e) {
+      this.searchForm.queryStartTime = e[0]
+      this.searchForm.queryEndTime = e[1]
+      this.searchForm.radio = null
+      this.search()
+    },
+    reset () {
+      this.$refs.searchForm.resetFields()
+      this.searchForm.radio = '0'
+      this.changeRadio('0')
+      // this.search()
     }
   }
 }
 </script>
-
-<style>
-</style>
diff --git a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
index d2e5097..73b0de7 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -72,6 +72,26 @@
     }
 
 
+    @PreventRepeat(limit = 10, lockTime = 10000)
+    @ApiOperation("H5涓氬姟鐧诲綍")
+    @PostMapping("/loginH5")
+    @LoginNoRequired
+    public ApiResponse<String> loginH5 (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) {
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            dto.setCheckCode(false);
+            LoginUserInfo user = systemLoginService.loginByPasswordNew(dto,request);
+            String token = jwtTokenUtil.generateToken(user);
+            return ApiResponse.success(token);
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
+
+
     /**
      * 鍒锋柊JWT浠ょ墝,鐢ㄦ棫鐨勪护鐗屾崲鏂扮殑浠ょ墝
      */
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
index 9c397cb..638c2a7 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
@@ -42,6 +42,7 @@
     @ApiOperation("鐧诲綍")
     @PostMapping("/login")
     public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) {
+        dto.setCheckCode(true);
         return ApiResponse.success(systemLoginService.loginByPassword(dto, request));
     }
 
diff --git a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index f3b08e5..aeb2b8b 100644
--- a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -1,5 +1,6 @@
 package com.doumee.core.model;
 
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.system.model.SystemPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemUser;
@@ -42,15 +43,17 @@
 
     private List<String> permissions;
     private List<Integer> companyIdList;
+    private Company company;
 
     //jwt鐧诲綍璁剧疆
-    public static LoginUserInfo from(SystemUser user, List<SystemRole> roles, List<SystemPermission> permissions,String sessionId) {
+    public static LoginUserInfo from(SystemUser user, List<SystemRole> roles, List<SystemPermission> permissions,Company company,String sessionId) {
         if (user == null) {
             return null;
         }
         // 鎷疯礉鐢ㄦ埛淇℃伅
         LoginUserInfo loginUserInfo = new LoginUserInfo();
         BeanUtils.copyProperties(user, loginUserInfo);
+        loginUserInfo.setCompany(company);
         // 璁剧疆瑙掕壊淇℃伅
         List<String> rs = new ArrayList<>();
         for (SystemRole role : roles) {
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 9271ca9..c4359f8 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
@@ -299,14 +299,6 @@
          int invalid =9;
     }
 
-    public interface multifileObjType{
-        //0闅愭偅鐜板満鎯呭喌 1闅愭偅澶勭悊鍓嶆儏鍐� 2闅愭偅澶勭悊鍚庢儏鍐� 3闅愭偅閫�鍥炶鏄�
-        int zero = 0;
-        int one = 1;
-        int two = 2;
-        int three = 3;
-    }
-
 
     public interface EmpowerStatus{
         //涓�鍗¢�氭巿鏉冧笅鍙戠姸鎬� 0寰呬笅鍙� 1宸蹭笅鍙� 2涓嬪彂鎴愬姛   3宸插彇娑� 4涓嬪彂澶辫触 5浠诲姟涓嬭浇宸茬粨鏉�
@@ -424,9 +416,16 @@
     int cityUseCar = 3;//甯傚唴鐢ㄨ溅
     int unCityUseCar = 4;//甯傚鐢ㄨ溅
     int logisticsCarUse = 5;//鐗╂祦杞﹂绾�
-
 }
 
+
+public interface  noticesObjectType{
+    int visit = 0;//璁垮鐢宠
+    int visitReporting = 2;//璁垮鎶ュ
+    int cityUseCar = 3;//甯傚唴鐢ㄨ溅
+    int unCityUseCar = 4;//甯傚鐢ㄨ溅
+    int logisticsCarUse = 5;//鐗╂祦杞﹂绾�
+}
 
 
 public interface  approveStatus{
@@ -434,8 +433,8 @@
     int auditIng = 1;//瀹℃壒涓�
     int pass = 2;//瀹℃壒閫氳繃
     int unPass = 3;//瀹℃壒鏈�氳繃
-    int otherDeal = 4;//浠栦汉宸插鐞�
-    int cancel = 5;//宸插彇娑�
+    int cancel = 4;//宸插彇娑�
+    int otherDeal = 5;//浠栦汉宸插鐞�
     int otherUnPass = 6;//浠栦汉鎷掔粷
 }
 
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java b/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
index c13a8fc..6b5e635 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
@@ -3,10 +3,13 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.system.model.Multifile;
 
+import java.util.List;
+
 /**
  * @author 姹熻箘韫�
  * @date 2023/05/04 18:18
  */
 public interface MultifileMapper extends BaseMapper<Multifile> {
 
+    void insertBatchSomeColumn(List<Multifile> fileList);
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
index 0533297..a617b61 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
@@ -30,4 +30,7 @@
     @NotBlank(message = "楠岃瘉鐮乁UID涓嶈兘涓虹┖")
     @ApiModelProperty(value = "楠岃瘉鐮乁UID")
     private String uuid;
+
+    @ApiModelProperty(value = "鏄惁楠岃瘉楠岃瘉鐮�" , hidden = true)
+    private Boolean checkCode;
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index e14cc65..e54e578 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -4,6 +4,8 @@
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.system.dto.LoginDTO;
 import com.doumee.dao.system.model.*;
 import com.doumee.service.common.CaptchaService;
@@ -23,6 +25,7 @@
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 @Slf4j
 @Service
@@ -53,6 +56,9 @@
     @Autowired
     private SystemLoginLogService systemLoginLogService;
 
+    @Autowired
+    private CompanyMapper companyMapper;
+
     @Override
     public String loginByPassword(LoginDTO dto, HttpServletRequest request) {
         SystemLoginLog loginLog = new SystemLoginLog();
@@ -65,7 +71,7 @@
         loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
         loginLog.setOsInfo(Utils.User_Client.getOS(request));
         loginLog.setServerIp(Utils.Server.getIP());
-        if(isDebug == null  || !isDebug){
+        if((isDebug == null  || !isDebug) && (Objects.isNull(dto.getCheckCode()) || dto.getCheckCode()) ){
             // 鏍¢獙楠岃瘉鐮�
             try {
                 captchaService.check(dto.getUuid(), dto.getCode());
@@ -135,6 +141,10 @@
         if( !StringUtils.equals(pwd, user.getPassword())){
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
         }
+        Company company = new Company();
+        if(Objects.nonNull(user.getCompanyId())){
+            company = companyMapper.selectById(user.getCompanyId());
+        }
         // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
         List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
         List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
@@ -144,7 +154,7 @@
         //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
         user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
 
-        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,null);
+        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,company,null);
         return  userInfo;
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index 31c8ac8..ceb9bf9 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -245,9 +245,15 @@
     @ApiOperation("鏌ヨ鍏ㄩ儴")
     @PostMapping("/list")
     @CloudRequiredPermission("business:member:query")
-    public ApiResponse<List<Member>> findPage (@RequestBody Member model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+    public ApiResponse<List<Member>> list (@RequestBody Member model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         return ApiResponse.success(memberService.findList(model));
     }
+    @ApiOperation("鏌ヨ鍏ㄩ儴鍙告満")
+    @PostMapping("/driveList")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<List<Member>> findDriveList (@RequestBody Member model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(memberService.findDriveList(model));
+    }
 
 
     @ApiOperation("瀵煎嚭Excel")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
index 39aa80b..1b048b2 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
@@ -127,10 +127,9 @@
     @PostMapping("/createVisit")
     public ApiResponse createVisit(@RequestBody Visits visits,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         visits.setMemberId(getLoginUser(token).getMemberId());
+        visits.setReceptMemberId(visits.getMemberId());
         return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.visitReporting(visits));
     }
-
-
 
     @LoginNoRequired
     @ApiOperation("閲嶇疆瀵嗙爜")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
index cd6c692..1739bfd 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
@@ -1,13 +1,19 @@
 package com.doumee.cloud.web;
 
+import com.doumee.api.BaseController;
 import com.doumee.cloud.web.ApiController;
 import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.system.dto.LoginDTO;
 import com.doumee.dao.web.reqeust.AccountLoginDTO;
 import com.doumee.dao.web.reqeust.AuditApproveDTO;
 import com.doumee.dao.web.reqeust.VisitMemberDTO;
@@ -16,13 +22,19 @@
 import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.VisitsService;
+import com.doumee.service.system.SystemLoginService;
 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.http.server.reactive.ServerHttpRequest;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ServerWebExchange;
+
+import javax.annotation.Resource;
 
 /**
  * Created by IntelliJ IDEA.
@@ -37,7 +49,7 @@
 @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/member")
 @Slf4j
 @LoginNoRequired
-public class InternalWebController extends ApiController {
+public class InternalWebController extends BaseController {
 
     @Autowired
     private MemberService memberService;
@@ -48,30 +60,17 @@
     @Autowired
     private ApproveService approveService;
 
-    @ApiOperation(value = "浜哄憳鐧诲綍", notes = "H5")
-    @PostMapping("/accountLogin")
-    public ApiResponse<WxAuthorizeVO> accountLogin(@RequestBody AccountLoginDTO accountLoginDTO) {
-        WxAuthorizeVO wxAuthorizeVO = memberService.accountLogin(accountLoginDTO);
-        return ApiResponse.success("鐧诲綍鎴愬姛",wxAuthorizeVO);
-    }
 
     @ApiOperation(value = "鍐呴儴浜哄憳棣栭〉", notes = "H5")
     @GetMapping("/internalHome")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse<InternalHomeVO> internalHome() {
-        return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeData(getMemberId()));
+    public ApiResponse<InternalHomeVO> internalHome(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeData(getLoginUser(token).getMemberId()));
     }
-
 
     @ApiOperation("浠诲姟涓績")
     @PostMapping("/taskCenter")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse<PageData<VisitRecordVO>> taskCenter (@RequestBody PageWrap<VisitRecordDTO> pageWrap) {
-        pageWrap.getModel().setMemberId(getMemberId());
+    public ApiResponse<PageData<VisitRecordVO>> taskCenter (@RequestBody PageWrap<VisitRecordDTO> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        pageWrap.getModel().setMemberId(getLoginUser(token).getMemberId());
         return ApiResponse.success(visitsService.taskCenter(pageWrap));
     }
 
@@ -88,29 +87,20 @@
 
     @ApiOperation(value = "浜哄憳鍒嗛〉",notes = "鍙嫓璁垮唴閮ㄤ汉鍛�")
     @PostMapping("/memberList")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse<PageData<MemberVO>> memberList (@RequestBody PageWrap<VisitMemberDTO> pageWrap) {
+    public ApiResponse<PageData<MemberVO>> memberList (@RequestBody PageWrap<VisitMemberDTO> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(memberService.getVisitedMemberList(pageWrap));
     }
 
     @ApiOperation(value = "璁垮璁板綍鎻愪氦", notes = "鍐呴儴浜哄憳鎻愪氦")
     @PostMapping("/createVisit")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse createVisit(@RequestBody Visits visits) {
-        visits.setCreateMemberId(getMemberId());
+    public ApiResponse createVisit(@RequestBody Visits visits,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        visits.setCreateMemberId(getLoginUser(token).getMemberId());
         return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false));
     }
 
     @ApiOperation(value = "瀹℃壒娴佽褰曞鎵�", notes = "鍐呴儴浜哄憳")
     @PostMapping("/auditApprove")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
-    public ApiResponse auditApprove(@RequestBody AuditApproveDTO auditApproveDTO) {
+    public ApiResponse auditApprove(@RequestBody AuditApproveDTO auditApproveDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         visitsService.auditApprove(auditApproveDTO);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
index 39429ee..0c89c3b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -84,6 +84,9 @@
     @ExcelColumn(name="瀹℃壒浜�")
     private String cheorId;
 
+    @ApiModelProperty(value = "瀹℃壒鏃堕棿")
+    private Date checkDate;
+
     @ApiModelProperty(value = "瀹℃壒浜哄鍚�")
     @ExcelColumn(name="瀹℃壒浜哄鍚�")
     private String checkorName;
@@ -101,8 +104,8 @@
     @ExcelColumn(name="瀹℃壒绛夌骇")
     private Integer level;
 
-    @ApiModelProperty(value = "澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱", example = "1")
-    @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱")
+    @ApiModelProperty(value = "澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱 2鍗曚汉瀹℃壒", example = "1")
+    @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱 2鍗曚汉瀹℃壒")
     private Integer approveType;
 
 
@@ -124,6 +127,9 @@
 
 
 
+    @ApiModelProperty(value = "浜鸿劯鍥剧墖", example = "1")
+    @TableField(exist = false)
+    private String faceImg;
 
     @ApiModelProperty(value = "濮撳悕", example = "1")
     @ExcelColumn(name="濮撳悕")
@@ -141,6 +147,7 @@
     private String companyName;
 
 
+
     @ApiModelProperty(value = "寰呭鎵硅褰�", example = "1")
     @TableField(exist = false)
     private List<Approve> approveList;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
index d4405dc..f725a46 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
@@ -46,8 +46,8 @@
     @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
-    @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
+    @ApiModelProperty(value = "鑺傜偣鍚嶇О")
+    @ExcelColumn(name="鑺傜偣鍚嶇О")
     private String remark;
 
     @ApiModelProperty(value = "绫诲瀷 0瀹℃壒 1鎶勯��", example = "1")
@@ -83,8 +83,8 @@
     @ExcelColumn(name="瀹℃壒涓荤绛夌骇 0鐩存帴涓荤 1浜岀骇涓荤 2涓夌骇涓荤 4鍥涚骇涓荤")
     private Integer objLevel;
 
-    @ApiModelProperty(value = "澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱", example = "1")
-    @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱")
+    @ApiModelProperty(value = "澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱 2鍗曚汉瀹℃壒", example = "1")
+    @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱 2鍗曚汉瀹℃壒")
     private Integer approveType;
 
     @ApiModelProperty(value = "鏃犱富绠¢�夐」 0娴佺▼缁撴潫 1鐢变笂绾т富绠′唬鏇垮鏍�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
index e27c71a..49deff2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -23,7 +23,6 @@
 @ApiModel("杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛�")
 @TableName("`car_use_book`")
 public class CarUseBook extends LoginUserModel {
-
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
index 8112d11..0f9ed9a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
@@ -84,7 +84,7 @@
 
     @ApiModelProperty(value = "澶勭悊璇存槑")
     @ExcelColumn(name="澶勭悊璇存槑")
-    private String checklInfo;
+    private String checkInfo;
 
     @ApiModelProperty(value = "澶勭悊浜虹紪鐮侊紙鍏宠仈member)", example = "1")
     @ExcelColumn(name="澶勭悊浜虹紪鐮侊紙鍏宠仈member)")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java
index 71bdad5..3c70542 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveDataVO.java
@@ -21,6 +21,9 @@
     @ApiModelProperty(value = "鏄惁鍙互瀹℃壒 0=涓嶅彲浠ワ紱1=鍙互")
     private Integer canBeApproved;
 
+    @ApiModelProperty(value = "鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾")
+    private Integer driverParam;
+
     @ApiModelProperty(value = "鎶勯�佽褰�")
     private List<Approve> copyList;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java
index c849bf6..7fd0d1c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java
@@ -26,9 +26,12 @@
     @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�(鍏宠仈company琛�)", example = "1")
     private Integer companyId;
 
-    @ApiModelProperty(value = "璁垮鍚嶇О")
+    @ApiModelProperty(value = "琚闂汉鍚嶇О")
     private String name;
 
+    @ApiModelProperty(value = "琚闂汉閮ㄩ棬")
+    private String companyName;
+
     @ApiModelProperty(value = "鎵嬫満鍙�")
     private String phone;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 796bded..03fd6bc 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -215,5 +215,5 @@
     String importBatch(MultipartFile file, Integer companyType,LoginUserInfo loginUser);
 
 
-
+    List<Member>  findDriveList(Member model);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index da0ec66..ad7ed25 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -13,6 +13,8 @@
 import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.ApproveDataVO;
+import com.doumee.dao.system.join.NoticesJoinMapper;
+import com.doumee.dao.system.model.Notices;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.response.InternalHomeVO;
 import com.doumee.service.business.ApproveService;
@@ -20,8 +22,10 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.system.NoticesService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.xpath.operations.Bool;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,6 +72,9 @@
 
     @Autowired
     private VisitsMapper visitsMapper;
+
+    @Autowired
+    private NoticesJoinMapper noticesJoinMapper;
 
     @Override
     public Integer create(Approve approve) {
@@ -294,8 +301,13 @@
         for (int i = 0; i < approveParamList.size(); i++) {
             ApproveParam approveParam = approveParamList.get(i);
             List<Integer> ids = this.getApproveUserIds(approveParam,createMember);
+            //鐢熸垚寰呭姙 notices 琛ㄦ暟鎹�
+            if(i==0){
+
+            }
             for (Integer memberId:ids) {
                 Approve approve = new Approve();
+                approve.setRemark(approveParam.getRemark());
                 approve.setCreateDate(new Date());
                 approve.setIsdeleted(Constants.ZERO);
                 approve.setTemplatId(approveTempl.getId());
@@ -313,6 +325,31 @@
                 approveList.add(approve);
             }
         }
+    }
+
+    public void createNoticesData(List<Approve> approveList){
+        for (Approve approve:approveList) {
+            Notices notices = new Notices();
+            notices.setCreateDate(new Date());
+            notices.setIsdeleted(Constants.ZERO);
+            notices.setObjId(approve.getObjId());
+            notices.setObjId(approve.getApproveType());
+            if(Constants.equalsInteger(approve.getType(),Constants.approveObjectType.unConstructionVisit)
+            || Constants.equalsInteger(approve.getType(),Constants.approveObjectType.constructionVisit)){
+                notices.setType(Constants.ZERO);
+            }else if(Constants.equalsInteger(approve.getType(),Constants.approveObjectType.visitReporting)){
+                notices.setType(Constants.ONE);
+            }
+
+            
+            
+        }
+        
+        
+
+
+
+
     }
 
 
@@ -435,6 +472,182 @@
         return auditCompany;
     }
 
+    @Override
+    public ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId){
+        ApproveDataVO approveDateVO = new ApproveDataVO();
+        approveDateVO.setApproveList(new ArrayList<>());
+        approveDateVO.setCanBeApproved(Constants.ZERO);
+        List<Approve> approveGroupList = approveJoinMapper.selectJoinList(Approve.class,
+                new MPJLambdaWrapper<Approve>().
+                        selectAll(Approve.class)
+                        .selectAs(Member::getName,Approve::getMemberName)
+                        .selectAs(Member::getPhone,Approve::getMemberPhone)
+                        .selectAs(Member::getFaceImg,Approve::getFaceImg)
+                        .selectAs(Company::getCompanyNamePath,Approve::getCompanyName)
+                        .leftJoin(Member.class,Member::getId,Approve::getChekorId)
+                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                        .eq(Approve::getIsdeleted,Constants.ZERO)
+                        .eq(Approve::getObjId,businessId)
+                        .eq(Approve::getObjType,businessType)
+                        .orderByAsc(Approve::getLevel)
+        );
+
+        //鏌ユ壘鍏ㄩ儴levelList
+        List<Approve> levelList = getLevelListFromResult(approveGroupList,approveDateVO,memberId);
+        List<Approve> copyList = getAllCopyList(approveGroupList);
+        //閬嶅巻level鏌ヨ姣忎竴绾у埆涓氬姟鏁版嵁
+        for(Approve level:levelList){
+            List<Approve> tlist = getLevelInfoFromList(level,approveGroupList);
+            approveDateVO.getApproveList().addAll(tlist);
+            if(tlist.size() ==0
+                    ||Constants.equalsInteger(Constants.approveStatus.unPass,  tlist.get(0).getStatus())
+                    ||Constants.equalsInteger(Constants.approveStatus.cancel,  tlist.get(0).getStatus())){
+                break;
+            }
+        }
+
+        //澶勭悊鎶勯�佽褰�
+        if (CollectionUtils.isNotEmpty(copyList)) {
+            Approve waitModel = new Approve();
+            waitModel.setApproveType(Constants.ONE);
+            waitModel.setStatusInfo("鎶勯��");
+            waitModel.setStatus(Constants.ONE);
+            waitModel.setType(Constants.ONE);
+            waitModel.setApproveList(copyList);
+            approveDateVO.getApproveList().add(waitModel);
+        }
+
+        return approveDateVO;
+    }
+
+    private List<Approve> getAllCopyList(List<Approve> approveGroupList) {
+        List<Approve> copyList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(approveGroupList)) {
+            copyList.addAll(approveGroupList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).collect(Collectors.toList()));
+        }
+        return copyList;
+    }
+
+    private List<Approve> getLevelInfoFromList(Approve level,List<Approve> approveGroupList) {
+        List<Approve> list = new ArrayList<>();
+        if(Constants.equalsInteger(level.getApproveType(),Constants.TWO)){
+            //濡傛灉鏄崟浜哄鎵�
+            list.add(level);
+            return list;
+        }
+        //鏌ユ壘鍏ㄩ儴宸插鐞嗙殑闆嗗悎
+        List<Approve> passList = new ArrayList<>();//宸插悓鎰忕殑璁板綍闆�
+        Approve  refuseModel = new Approve();//宸叉嫆缁濈殑璁板綍
+        List<Approve> waitList = new ArrayList<>();  //鏌ヨ鍏ㄩ儴鏈鐞嗙殑闆嗗悎
+        List<Approve> otherPassList = new ArrayList<>();//浠栦汉宸插鐞嗙殑璁板綍闆�
+        List<Approve> levelApprove = approveGroupList.stream().filter(i->Constants.equalsInteger(i.getLevel(),level.getLevel())).collect(Collectors.toList());
+        dealGroupListBiz(level,levelApprove,approveGroupList,passList,refuseModel,waitList,otherPassList);
+        if(Objects.nonNull(refuseModel) && Objects.nonNull(refuseModel.getId())){
+            //瀛樺湪鎷掔粷鐨勶紝鍙渶瑕佽繑鍥炰竴鏉″鐞嗘暟鎹紝鍚庣画涓嶉渶瑕佸洖鏄�
+            list.add(refuseModel);
+            return list;
+        }
+        list.addAll(sortByCreateTime(passList));
+        if(Constants.equalsInteger(level.getApproveType(),Constants.ONE)){
+            //濡傛灉鏄細绛�
+            if(waitList.size()>0){
+                Approve waitModel = new Approve();
+                waitModel.setApproveType(Constants.ONE);
+                waitModel.setStatusInfo(StringUtils.defaultString(level.getTitle(),"瀹℃壒浜�")+"澶勭悊涓�");
+                waitModel.setStatus(Constants.equalsInteger(waitList.get(Constants.ZERO).getStatus(),Constants.ONE)?Constants.ONE:Constants.ZERO);
+                waitModel.setApproveList(waitList);
+                list.add(waitModel);
+            }
+        }else {
+            if((waitList.size()> 0 || otherPassList.size()>0)){
+                Approve waitModel = new Approve();
+                waitModel.setApproveType(Constants.ONE);
+                waitModel.setStatusInfo(passList.size()<=0?StringUtils.defaultString(level.getTitle(),"瀹℃壒浜�"):"鎶勯�佹垨绛惧鎵逛汉");
+                waitModel.setStatus(passList.size()>0?Constants.ONE:Constants.ZERO);
+                List<Approve> approveList = new ArrayList<>();
+                approveList.addAll(waitList);
+                //濡傛灉鏄垨绛�
+                if(passList.size()>0){
+                    approveList.addAll(otherPassList);
+                }
+                waitModel.setApproveList(approveList);
+                list.add(waitModel);
+            }
+            //濡傛灉鏄垨绛�
+//            if(otherPassList.size()>0){
+//                Approve waitModel = new Approve();
+//                waitModel.setApproveType(Constants.ONE);
+//                waitModel.setStatusInfo(StringUtils.defaultString(level.getTitle(),"瀹℃壒浜�")+"锛堟妱閫佹垨绛惧鎵逛汉锛�");
+//                waitModel.setStatus(Constants.ONE);
+//                waitModel.setApproveList(otherPassList);
+//                list.add(waitModel);
+//            }
+        }
+
+
+        return  list;
+
+    }
+
+    private void dealGroupListBiz(Approve level, List<Approve> levelApprove,List<Approve> approveGroupList, List<Approve> passList, Approve refuseModel, List<Approve> waitList, List<Approve> otherPassList) {
+        //鏌ヨ鏄惁瀛樺湪鎷掔粷鏁版嵁
+        for (Approve approve:levelApprove) {
+            if(Constants.equalsInteger(Constants.approveStatus.pass,approve.getStatus())){
+                passList.add(approve);
+            }else if(Constants.equalsInteger(Constants.approveStatus.otherDeal,approve.getStatus())){
+                otherPassList.add(approve);
+            }else if(Constants.equalsInteger(Constants.approveStatus.auditIng,approve.getStatus())||Constants.equalsInteger(Constants.approveStatus.wait,approve.getStatus())){
+                waitList.add(approve);
+            }else if(Constants.equalsInteger(Constants.approveStatus.unPass,approve.getStatus())){
+                refuseModel = approve;
+            }
+        }
+    }
+
+    private List<Approve> sortByCreateTime(List<Approve> passList) {
+        Collections.sort(passList, (a, b) -> a.getCheckDate().compareTo(b.getCheckDate()));
+        return  passList;
+    }
+
+
+    private List<Approve> getLevelListFromResult(List<Approve> approveGroupList,ApproveDataVO approveDataVO,Integer memberId) {
+        approveDataVO.setCanBeApproved(Constants.ZERO);
+        approveDataVO.setDriverParam(Constants.ZERO);
+        List<Approve> approveList = new ArrayList<>();
+        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+        for (Approve approve:approveGroupList) {
+            if(StringUtils.isNotBlank(approve.getFaceImg())){
+                approve.setFaceImg(path + approve.getFaceImg());
+            }
+            if(Constants.equalsInteger(approve.getType(),Constants.ONE)){
+                continue;
+            }
+            if(Constants.equalsInteger(approve.getChekorId(),memberId)){
+                approveDataVO.setCanBeApproved(Constants.ONE);
+                approveDataVO.setDriverParam(approve.getDriverParam());
+            }
+            if(notExsits(approveList,approve.getLevel())){
+                approveList.add(approve);
+            }
+        }
+
+        if(CollectionUtils.isEmpty(approveList)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒淇℃伅锛氱骇鍒暟鎹紓甯�");
+        }
+
+        return  approveList;
+    }
+
+    private boolean notExsits(List<Approve> approveList, Integer level) {
+        for (Approve approve:approveList) {
+            if(Constants.equalsInteger(approve.getLevel(),level)){
+                return false;
+            }
+        }
+        return true;
+    }
+
 
     /**
      * 鏁寸悊 瀹℃壒鏁版嵁
@@ -442,18 +655,18 @@
      * @param businessType
      * @return
      */
-    @Override
-    public ApproveDataVO arrangeApprovedData(Integer businessId, Integer businessType, Integer memberId){
+//    @Override
+    public ApproveDataVO arrangeApprovedDataOld(Integer businessId, Integer businessType, Integer memberId){
         ApproveDataVO approveDateVO = new ApproveDataVO();
         approveDateVO.setCanBeApproved(Constants.ZERO);
         List<Approve> approveGroupList = approveJoinMapper.selectJoinList(Approve.class,
                 new MPJLambdaWrapper<Approve>().
-                        select(Approve::getLevel,Approve::getType)
+                        select(Approve::getLevel,Approve::getType,Approve::getTitle,Approve::getApproveType)
                         .eq(Approve::getIsdeleted,Constants.ZERO)
                         .eq(Approve::getObjId,businessId)
                         .isNotNull(Approve::getLevel)
                         .eq(Approve::getObjType,businessType)
-                        .groupBy(Approve::getLevel,Approve::getType)
+                        .groupBy(Approve::getLevel,Approve::getType,Approve::getTitle,Approve::getApproveType)
         );
         if(CollectionUtils.isEmpty(approveGroupList)){
             return approveDateVO;
@@ -464,6 +677,7 @@
                         .selectAll(Approve.class)
                         .selectAs(Member::getName,Approve::getMemberName)
                         .selectAs(Member::getPhone,Approve::getMemberPhone)
+                        .selectAs(Member::getFaceImg,Approve::getFaceImg)
                         .selectAs(Company::getName,Approve::getCompanyName)
                         .leftJoin(Member.class,Member::getId,Approve::getChekorId)
                         .leftJoin(Company.class,Company::getId,Member::getCompanyId)
@@ -475,14 +689,26 @@
                         .orderByAsc(Approve::getLevel)
                         .orderByAsc(Approve::getId)
         );
+
+
+        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+        for (Approve approve:approveAllList ) {
+            if(StringUtils.isNotBlank(approve.getFaceImg())){
+                approve.setFaceImg(path + approve.getFaceImg());
+            }
+        }
+
         if(CollectionUtils.isEmpty(approveAllList)){
             return approveDateVO;
         }
-        List<Approve> approveList = approveAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList());
+        List<Approve> approveList = approveAllList.stream().filter(i->Constants.equalsInteger(i.getType(),(Constants.ZERO)))
+                .collect(Collectors.toList());
         if(CollectionUtils.isEmpty(approveList)){
             return approveDateVO;
         }
         approveDateVO.setCanBeApproved(this.canBeApproved(approveList,memberId));
+        approveDateVO.setDriverParam(this.canDriverParam(approveList,memberId));
         //鏍规嵁瀹℃壒绾у埆 澶勭悊鏁版嵁
         for (Approve approve:approveGroupList) {
             approve.setApproveList(
@@ -506,6 +732,24 @@
             //涓嬩釜瀹℃壒娴佺▼鍐� 濡傛灉瀛樺湪褰撳墠 鐢ㄦ埛鐨勬姄绱� 鍒欏彲浠ヨ繘琛屽鎵�
             if(nextApprovedList.stream().filter(i->i.getChekorId().equals(memberId)).collect(Collectors.toList()).size()>0){
                 return Constants.ONE;
+            }
+        }
+        return Constants.ZERO;
+    }
+
+    public Integer canDriverParam(List<Approve> approveList,Integer memberId){
+        //鑾峰彇鎵�鏈夊緟瀹℃壒鐨勬暟鎹�
+        List<Approve> waitApprovedList = approveList.stream().filter(i->i.getType().equals(Constants.ZERO)&&i.getStatus().equals(Constants.ZERO)).collect(Collectors.toList());
+        if(CollectionUtils.isNotEmpty(waitApprovedList)){
+            //涓嬩釜瀹℃壒娴佺▼绛夌骇
+            Integer nextApprovedLevel = waitApprovedList.get(Constants.ZERO).getLevel();
+            //涓嬩釜瀹℃壒娴佺▼鐨� 鎵�鏈夋暟鎹�
+            List<Approve> nextApprovedList = waitApprovedList.stream().filter(i->i.getStatus().equals(Constants.ZERO)&&i.getLevel().equals(nextApprovedLevel)).collect(Collectors.toList());
+            //涓嬩釜瀹℃壒娴佺▼鍐� 濡傛灉瀛樺湪褰撳墠 鐢ㄦ埛鐨勬姄绱� 鍒欏彲浠ヨ繘琛屽鎵�
+            List<Approve> auditApproveList  = nextApprovedList.stream().filter(i->i.getChekorId().equals(memberId)).collect(Collectors.toList());
+            if(auditApproveList.size() >0){
+                Approve auditApprove = auditApproveList.get(Constants.ZERO);
+                return auditApprove.getDriverParam();
             }
         }
         return Constants.ZERO;
@@ -546,6 +790,7 @@
         approve.setCheckInfo(approveDTO.getCheckInfo());
         approve.setCheorId(approveDTO.getLoginUserInfo().getMemberId().toString());
         approve.setCheckorName(approve.getLoginUserInfo().getRealname());
+        approve.setCheckDate(new Date());
         approve.setStatusInfo(approveDTO.getStatus()==Constants.TWO?"瀹℃壒閫氳繃":approveDTO.getCheckInfo());
         Visits visits = new Visits();
         CarUseBook carUseBook = new CarUseBook();
@@ -635,8 +880,6 @@
                 //TODO 瀹℃壒鏈�氳繃閫氱煡
 
             }
-
-
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
             //TODO  鐗╂祦杞﹂绾�
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index f875670..a7ef81c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -165,11 +165,11 @@
         queryWrapper.select("t1.name",CarUseBook::getMemberName);
         queryWrapper.select("t1.phone",CarUseBook::getMemberPhone);
         queryWrapper.select("t2.name",CarUseBook::getDriverName);
-        queryWrapper.select("t3.phone",CarUseBook::getDriverPhone);
-        queryWrapper.select("t4.company_name_path",CarUseBook::getCompanyName);
+        queryWrapper.select("t2.phone",CarUseBook::getDriverPhone);
+//        queryWrapper.select("t4.company_name_path",CarUseBook::getCompanyName);
         queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
-                .leftJoin("company t4 on t1.company_id=t4.id")
                 .leftJoin(Member.class,Member::getId,CarUseBook::getDriverId)
+//                .leftJoin("company t4 on t1.company_id=t4.id")
                 .eq(CarUseBook::getId,id)
                 .last("limit 1"  );
         CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
@@ -203,11 +203,11 @@
         queryWrapper.select("t1.name",CarUseBook::getMemberName);
         queryWrapper.select("t1.phone",CarUseBook::getMemberPhone);
         queryWrapper.select("t2.name",CarUseBook::getDriverName);
-        queryWrapper.select("t3.phone",CarUseBook::getDriverPhone);
+        queryWrapper.select("t2.phone",CarUseBook::getDriverPhone);
         queryWrapper.select("t4.company_name_path",CarUseBook::getCompanyName);
         queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
-                    .leftJoin("company t4 on t1.company_id=t4.id")
-                    .leftJoin(Member.class,Member::getId,CarUseBook::getDriverId);
+                    .leftJoin(Member.class,Member::getId,CarUseBook::getDriverId)
+                    .leftJoin("company t4 on t1.company_id=t4.id");
         queryWrapper
                 .eq(pageWrap.getModel().getId() != null, CarUseBook::getId, pageWrap.getModel().getId())
                 .eq(pageWrap.getModel().getCreator() != null, CarUseBook::getCreator, pageWrap.getModel().getCreator())
@@ -243,6 +243,7 @@
                 .eq(pageWrap.getModel().getAddr() != null, CarUseBook::getAddr, pageWrap.getModel().getAddr())
                 .eq(pageWrap.getModel().getMemberId() != null, CarUseBook::getMemberId, pageWrap.getModel().getMemberId())
                 .eq(pageWrap.getModel().getDriverId() != null, CarUseBook::getDriverId, pageWrap.getModel().getDriverId())
+                .apply(pageWrap.getModel().getCompanyName() != null, "t4.company_name_path like '%"+pageWrap.getModel().getCompanyName()+"%'")
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getQueryDate()),
                         i->i.and(j->j.lt(CarUseBook::getStartTime,pageWrap.getModel().getQueryDate() +"00:00:00").gt(CarUseBook::getStartTime,pageWrap.getModel().getQueryDate() +"23:59:59"))
                         .or()
@@ -254,8 +255,8 @@
                 )
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                         .or().like(Member::getPhone,pageWrap.getModel().getMemberName()))
-                .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), Empower::getCreateDate,pageWrap.getModel().getQueryStartTime())
-                .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),Empower::getCreateDate,pageWrap.getModel().getQueryEndTime())
+                .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), CarUseBook::getPlanUseDate,pageWrap.getModel().getQueryStartTime())
+                .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),CarUseBook::getPlanUseDate,pageWrap.getModel().getQueryEndTime())
                 .orderByDesc(Visits::getCreateDate)
         ;
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java
index 312a77c..5d5b729 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerLogServiceImpl.java
@@ -126,14 +126,14 @@
             if(Objects.isNull(hiddenDanger)){
                 return null;
             }
-            HiddenDangerLog newBean = new HiddenDangerLog();
-            newBean.setCreateUserName("-");
-            newBean.setCompanyName("-");
-            newBean.setTitle("闅愭偅澶勭悊");
-            newBean.setAvatar("-");
-
             if(hiddenDanger.getStatus().equals(Constants.ZERO)){
                 //涓嬩竴姝ュ鐞嗕汉
+                HiddenDangerLog newBean = new HiddenDangerLog();
+                newBean.setCreateUserName("-");
+                newBean.setCompanyName("-");
+                newBean.setTitle("闅愭偅澶勭悊");
+                newBean.setAvatar("-");
+
                 SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda().eq(SystemUser::getMemberId,hiddenDanger.getCheckUserId()));
                 if(Objects.nonNull(systemUser)){
                     newBean.setCreateUserName(systemUser.getRealname());
@@ -143,8 +143,8 @@
                         newBean.setCompanyName(company.getCompanyNamePath());
                     }
                 }
+                hiddenDangerLogList.add(newBean);
             }
-            hiddenDangerLogList.add(newBean);
 
             String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
index c3c58f0..7b8bb07 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -104,7 +104,7 @@
                 multifile.setCreator(hiddenDanger.getCreator());
                 multifile.setIsdeleted(Constants.ZERO);
                 multifile.setObjId(hiddenDanger.getId());
-                multifile.setObjType(Constants.multifileObjType.zero);
+                multifile.setObjType(Constants.MultiFile.HIDDEN_DANGER_SUBMIT.getKey());
                 multifile.setSortnum(i+1);
                 multifileMapper.insert(multifile);
             }
@@ -260,7 +260,7 @@
                 .eq(pageWrap.getModel().getMemberId() != null, HiddenDanger::getMemberId, pageWrap.getModel().getMemberId())
                 .ge(pageWrap.getModel().getCheckDate() != null, HiddenDanger::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate()))
                 .le(pageWrap.getModel().getCheckDate() != null, HiddenDanger::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()))
-                .eq(pageWrap.getModel().getChecklInfo() != null, HiddenDanger::getChecklInfo, pageWrap.getModel().getChecklInfo())
+                .eq(pageWrap.getModel().getCheckInfo() != null, HiddenDanger::getCheckInfo, pageWrap.getModel().getCheckInfo())
                 .eq(pageWrap.getModel().getCheckUserId() != null, HiddenDanger::getCheckUserId, pageWrap.getModel().getCheckUserId())
                 .eq(pageWrap.getModel().getAreaName() != null, HiddenDanger::getAreaName, pageWrap.getModel().getAreaName())
 
@@ -291,12 +291,31 @@
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void dealHiddenDanger(HiddenDanger hiddenDanger){
+        isParamValid(hiddenDanger);
+        dealFileBiz(hiddenDanger);
+        hiddenDanger.setEditor(hiddenDanger.getLoginUserInfo().getId());
+        hiddenDanger.setEditDate(new Date());
+        hiddenDanger.setCheckDate(hiddenDanger.getEditDate());
+        hiddenDangerMapper.updateById(hiddenDanger);
+        //瀛樺偍 鎿嶄綔鏃ュ織
+        HiddenDangerLog hiddenDangerLog = new HiddenDangerLog();
+        hiddenDangerLog.setIsdeleted(Constants.ZERO);
+        hiddenDangerLog.setCreateDate(new Date());
+        hiddenDangerLog.setCreator(hiddenDanger.getEditor());
+        hiddenDangerLog.setHiddenDangerId(hiddenDanger.getId());
+        hiddenDangerLog.setContent(hiddenDanger.getCheckInfo());
+        hiddenDangerLog.setTitle(hiddenDanger.getStatus().equals(Constants.ONE)?"闅愭偅澶勭悊":"闅愭偅閫�鍥�");
+        hiddenDangerLog.setObjType(hiddenDanger.getStatus().equals(Constants.ONE)?Constants.FOUR:Constants.TWO);
+        hiddenDangerLogMapper.insert(hiddenDangerLog);
+    }
+
+    private void isParamValid(HiddenDanger hiddenDanger) {
         if(Objects.isNull(hiddenDanger)
-            || Objects.isNull(hiddenDanger.getId())
-            || Objects.isNull(hiddenDanger.getDealTime())
-            || Objects.isNull(hiddenDanger.getLoginUserInfo())
-            || Objects.isNull(hiddenDanger.getStatus())
-            ){
+                || Objects.isNull(hiddenDanger.getId())
+                || Objects.isNull(hiddenDanger.getDealTime())
+                || Objects.isNull(hiddenDanger.getLoginUserInfo())
+                || Objects.isNull(hiddenDanger.getStatus())
+        ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         HiddenDanger model = hiddenDangerMapper.selectById(hiddenDanger.getId());
@@ -304,55 +323,68 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌闅愭偅鏁版嵁");
         }
         if (!model.getStatus().equals(Constants.ZERO)) {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�佸凡娴佽浆!");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�佸凡娴佽浆,璇峰埛鏂版煡鐪�!");
         }
-        if (!model.getCheckUserId().equals(hiddenDanger.getEditor())) {
+        if (!model.getCheckUserId().equals(hiddenDanger.getLoginUserInfo().getMemberId())) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"澶勭悊浜洪潪褰撳墠浜哄憳锛�");
         }
         if(!(hiddenDanger.getStatus().equals(Constants.ONE)||hiddenDanger.getStatus().equals(Constants.TWO))){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�侀敊璇紒");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�侀敊璇�,璇峰埛鏂版煡鐪嬶紒");
         }
-        //鏁存敼鍓嶆枃浠�
+    }
+
+    private void dealFileBiz(HiddenDanger hiddenDanger) {//鏁存敼鍓嶆枃浠�
         List<Multifile> beforList = hiddenDanger.getDealBeforeFileList();
+        List<Multifile> fileList = new ArrayList<>();
+
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(beforList)){
+            boolean isTrue = false;
             for (int i = 0; i < beforList.size(); i++) {
                 Multifile multifile = beforList.get(i);
+                if(StringUtils.isBlank(multifile.getFileurl())){
+                    continue;
+                }
                 multifile.setCreateDate(new Date());
                 multifile.setCreator(hiddenDanger.getEditor());
                 multifile.setIsdeleted(Constants.ZERO);
                 multifile.setObjId(hiddenDanger.getId());
-                multifile.setObjType(Constants.multifileObjType.one);
+                multifile.setCreator(hiddenDanger.getLoginUserInfo().getId());
+                multifile.setObjType(Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey());
                 multifile.setSortnum(i+1);
-                multifileMapper.insert(multifile);
+                fileList.add(multifile);
+                isTrue=true;
+            }
+            if(hiddenDanger.getStatus().equals(Constants.ONE) && !isTrue){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜瑕佹眰濉啓澶勭悊鏁版嵁");
             }
         }
         if(hiddenDanger.getStatus().equals(Constants.ONE)){
+            boolean isTrue = false;
             List<Multifile> afterList = hiddenDanger.getDealAfterFileList();
             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(afterList)){
                 for (int i = 0; i < afterList.size(); i++) {
                     Multifile multifile = afterList.get(i);
+                    if(StringUtils.isBlank(multifile.getFileurl())){
+                        continue;
+                    }
                     multifile.setCreateDate(new Date());
                     multifile.setCreator(hiddenDanger.getEditor());
                     multifile.setIsdeleted(Constants.ZERO);
+                    multifile.setCreator(hiddenDanger.getLoginUserInfo().getId());
                     multifile.setObjId(hiddenDanger.getId());
-                    multifile.setObjType(Constants.multifileObjType.two);
+                    multifile.setObjType(Constants.MultiFile.HIDDEN_DANGER_DEAL_AFTER.getKey());
                     multifile.setSortnum(i+1);
-                    multifileMapper.insert(multifile);
+                    fileList.add(multifile);
+                    isTrue = true;
                 }
             }
+            if(isTrue){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜瑕佹眰濉啓澶勭悊鏁版嵁");
+            }
         }
-        hiddenDanger.setEditor(hiddenDanger.getLoginUserInfo().getId());
-        hiddenDanger.setEditDate(new Date());
-        hiddenDangerMapper.updateById(hiddenDanger);
-        //瀛樺偍 鎿嶄綔鏃ュ織
-        HiddenDangerLog hiddenDangerLog = new HiddenDangerLog();
-        hiddenDangerLog.setIsdeleted(Constants.ZERO);
-        hiddenDangerLog.setCreateDate(new Date());
-        hiddenDangerLog.setCreator(hiddenDanger.getCreator());
-        hiddenDangerLog.setHiddenDangerId(hiddenDanger.getId());
-        hiddenDangerLog.setTitle(hiddenDanger.getStatus().equals(Constants.ONE)?"闅愭偅澶勭悊":"闅愭偅閫�鍥�");
-        hiddenDangerLog.setObjType(hiddenDanger.getStatus().equals(Constants.ONE)?Constants.FOUR:Constants.TWO);
-        hiddenDangerLogMapper.insert(hiddenDangerLog);
+        if(fileList.size()>0){
+            multifileMapper.insertBatchSomeColumn(fileList);
+        }
     }
 
 
@@ -374,7 +406,7 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌闅愭偅鏁版嵁");
         }
         if (!Constants.equalsInteger(model.getStatus(),Constants.ZERO)) {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�佸凡娴佽浆!");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�佸凡娴佽浆,璇峰埛鏂版煡鐪�!");
         }
         if (!Constants.equalsInteger(model.getCheckUserId(),hiddenDanger.getLoginUserInfo().getMemberId())) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"澶勭悊浜洪潪褰撳墠浜哄憳锛�");
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 38c780a..9867701 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -52,6 +52,8 @@
 import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
 import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
+import com.doumee.service.system.SystemLoginService;
+import com.doumee.service.system.SystemUserService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.RandomStringUtils;
@@ -1100,6 +1102,30 @@
         }
         return  list;
     }
+    @Override
+    public List<Member> findDriveList(Member member) {
+        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+        queryWrapper.selectAll(Member.class)
+                .selectAs(Company::getName,Member::getCompanyName)
+                .eq(Member::getType,Constants.TWO)
+                .exists("select d.id from car_driver b where b.isdeleted=0 and b.member_id=t.id");
+
+        if(null != member.getType()) {
+            queryWrapper.eq(Member::getType,member.getType());
+        }
+        if(null != member.getCompanyId()) {
+            queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
+        }
+        queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
+        List<Member> list =  memberJoinMapper.selectJoinList(Member.class,queryWrapper);
+        if(list!=null){
+            for(Member m : list){
+                m.setName(StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),""));
+            }
+        }
+        return  list;
+    }
 
     @Override
     public PageData<Member> findPage(PageWrap<Member> pageWrap) {
@@ -1631,7 +1657,10 @@
 
     @Override
     public List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO){
-        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
+                .selectAll(Member.class)
+                        .selectAs(Company::getName,Member::getCompanyName)
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                 .eq(StringUtils.isNotBlank(checkVisitedDTO.getMobile()),Member::getPhone,checkVisitedDTO.getMobile())
                 .eq(StringUtils.isNotBlank(checkVisitedDTO.getName()),Member::getName,checkVisitedDTO.getName())
                 .eq(Member::getIsdeleted,Constants.ZERO)
@@ -1691,6 +1720,7 @@
 
     @Override
     public WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO){
+        System.out.println(DESUtil.decrypt(Constants.EDS_PWD,"eIaPD5AR5DBuTBE9MW14QRG07IDKXCdh"));
         if(accountLoginDTO.getAccount().length()!=18
             //&&!IdcardUtil.isValidCard(accountLoginDTO.getAccount())
         ){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 7c124a7..63bf0b8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -258,6 +258,7 @@
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer visitReporting(Visits visits) {
+        visits.setSourceType(Constants.ZERO);
         isValidBaseParam(visits);
         //妫�楠岃鎷滆浜烘槸鍚﹀悎娉�
         Member visitMember = isValideVisitedUser(visits.getMemberId());
@@ -271,7 +272,7 @@
         visits.setVisitType(Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_VISIT_REQUIRED).getCode()));
         visits.setIdcardNo(DESUtil.decrypt(Constants.EDS_PWD, visitMember.getIdcardNo()));
         //鍒濆鍖栬瀹俊鎭�
-        initVisitInfo(visits,date);
+//        initVisitInfo(visits,date);
         visitsMapper.insert(visits);
         return visits.getId();
     }
@@ -607,12 +608,17 @@
                 ||  StringUtils.isBlank( visits.getName())
                 ||  StringUtils.isBlank( visits.getPhone())
                 ||  StringUtils.isBlank( visits.getCompanyName())
-                ||  visits.getIdcardType() == null
                 ||  Objects.isNull(visits.getType())
 //                ||  StringUtils.isBlank( visits.getFaceImg() )
-                ||  StringUtils.isBlank( visits.getIdcardNo() )
                 || visits.getReceptMemberId() == null){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝淇℃伅濉啓涓嶆纭紒");
+        }
+        if(Constants.equalsInteger(visits.getType(),Constants.ZERO)
+             ||  Constants.equalsInteger(visits.getType(),Constants.ONE)){
+            if(  visits.getIdcardType() == null
+                    ||  StringUtils.isBlank( visits.getIdcardNo() ) ){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝淇℃伅濉啓涓嶆纭紒");
+            }
         }
         //璁垮鎶ュ
         if(visits.getType().equals(Constants.TWO)
@@ -620,10 +626,10 @@
                 ||  StringUtils.isBlank( visits.getPhone())
                 ||  StringUtils.isBlank( visits.getCompanyName()))
                 ||  StringUtils.isBlank( visits.getCarNos())
+                ||  Objects.isNull(visits.getReceptMemberId())
         ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝淇℃伅濉啓涓嶆纭紒");
         }else if(visits.getType().equals(Constants.ONE) && StringUtils.isBlank(visits.getConstructionReason())){
-
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈~鍐欐柦宸ヤ簨鐢憋紒");
         }
         if(visits.getEndtime().getTime() < System.currentTimeMillis()){

--
Gitblit v1.9.3