From 261f60837f9224fa1afdaf819cb33b85ff9f4d77 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 29 五月 2024 11:33:14 +0800
Subject: [PATCH] 最新版本

---
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java         |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java          |    2 
 admin/src/api/business/member.js                                                                    |    8 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java         |    8 
 admin/src/utils/request.js                                                                          |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java |   24 ++
 admin/src/components/business/OperaHiddenDangerWindow.vue                                           |    8 
 admin/src/components/business/OperaCarUseBookWindow.vue                                             |  510 +++++++++++++++++++++++++++++++++++++++++++++++++++
 admin/src/views/operation/serviceCar/apprRecord.vue                                                 |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java           |    1 
 10 files changed, 562 insertions(+), 21 deletions(-)

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/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
new file mode 100644
index 0000000..6e1c896
--- /dev/null
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -0,0 +1,510 @@
+<template>
+  <GlobalWindow
+      :title="title"
+      :visible.sync="visible"
+      @confirm="confirm"
+      @close="reject"
+  >
+    <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">
+              <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 || ''}}-{{model.endTime || ''}}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="side">
+        <div class="side_title">瀹℃壒娴佺▼</div>
+        <div class="list">
+          <div class="item" v-for="(item,index) in logList" :key="item.id">
+            <div class="separate" v-if="index < logList.length-1"></div>
+            <div class="info">
+              <i class="el-icon-success icon" v-if="(model.status ==1) || index < logList.length-1"></i>
+              <i class="el-icon-question icon1" v-if="(model.status==0)  && index == logList.length-1"></i>
+              <i class="el-icon-error icon2" v-if="(model.status==2)  && index == logList.length-1"></i>
+              <img v-if="item.avatar!=null && item.avatar !=''" :src="item.avatar" class="avatar" alt="" />
+              <img v-if="item.avatar ==null ||item.avatar ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" />
+              <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">
+                      锛�<span class="status-green">{{stausInfo}}</span>
+                    </div>
+                  </div>
+                </div>
+                <div class="line">
+                  <div class="remark">
+                    {{ item.checkInfo ||'' }}
+                  </div>
+                </div>
+              </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="isShowTransfer"
+        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="transfering" @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="transfering" @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.vue',
+  components: { GlobalWindow },
+  extends: BaseOpera,
+  data () {
+    return {
+      title: '鍏姟杞︾敵璇�',
+      visible: false,
+      dataId: null,
+      model: { },
+      dealing: false,
+      isShowProblem: false,
+      isBackProblem: false,
+      memberList: [],
+      logList:[],
+      copyList:[],
+      dealForm: {
+        driveId: null,
+        checkInfo: null
+      },
+      backForm: {
+        checkInfo: null
+      }
+    }
+  },
+  computed: {
+    ...mapState(['userInfo'])
+  },
+  created () {
+    this.config({
+      api: '/business/carUserBook',
+      '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.logList = []
+        this.copyList = []
+        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
+          if(res.approveDateVO){
+            if(res.approveDateVO.approveList){
+              this.logList = res.approveDateVO.approveList
+            }
+            if(res.approveDateVO.copyList){
+              this.copyList = res.approveDateVO.copyList
+            }
+          }
+        })
+    },
+    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: 68px;
+          }
+
+          .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: 46px;
+        }
+        .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;
+          }
+          .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;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/admin/src/components/business/OperaHiddenDangerWindow.vue b/admin/src/components/business/OperaHiddenDangerWindow.vue
index a59097c..39d03c6 100644
--- a/admin/src/components/business/OperaHiddenDangerWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -266,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,
@@ -306,7 +305,8 @@
       rulesBack: {
         checkDate: [
           { required: true, message: '璇烽�夋嫨閫�鍥炴椂闂�' }
-        ]/*,
+        ]
+        /*,
         dealBeforeFileList: [
           { required: true, message: '璇蜂笂浼犳暣鏀瑰墠鎯呭喌' }
         ]*/
@@ -455,13 +455,13 @@
         this.memberList = []
         this.transForm = {
           memberId: null
-        },
+        }
         this.dealForm = {
           checkDate: null,
           checkInfo: null,
           dealBeforeFileList: [],
           dealAfterFileList: []
-        },
+        }
         this.backForm = {
           checkDate: null,
           checkInfo: null,
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/serviceCar/apprRecord.vue b/admin/src/views/operation/serviceCar/apprRecord.vue
index c4974cf..34fab76 100644
--- a/admin/src/views/operation/serviceCar/apprRecord.vue
+++ b/admin/src/views/operation/serviceCar/apprRecord.vue
@@ -71,13 +71,13 @@
           </template>
         </el-table-column>
         <el-table-column prop="planUseDate" label="鍑哄彂鏃堕棿" min-width="150px"></el-table-column>
-        <el-table-column label="鐩殑鍦扮被鍨�" min-width="100px">
+        <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 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 prop="addr" label="鐩殑鍦�" min-width="200px"></el-table-column>
         <el-table-column label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <span class="status-blue"  v-if="row.status === 0">鐢宠涓�</span>
@@ -97,7 +97,7 @@
             fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaHiddenDangerWindow.open('闅愭偅闅忔墜鎷嶈鎯�',row)" >鏌ョ湅璇︽儏</el-button>
+            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�',row)" >鏌ョ湅璇︽儏</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -108,7 +108,7 @@
       >
       </pagination>
     </template>
-    <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="handlePageChange"/>
+    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="handlePageChange"/>
   </TableLayout>
 </template>
 
@@ -116,13 +116,13 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
-import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
+import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow'
 import { timeForMat } from '@/utils/util'
 import { allList } from '@/api/business/hiddenDangerParam'
 export default {
   name: 'Empower',
   extends: BaseTable,
-  components: { TableLayout, Pagination ,OperaHiddenDangerWindow},
+  components: { TableLayout, Pagination ,OperaCarUseBookWindow},
   data () {
     return {
       // 鎼滅储
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_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..9b9b5e7 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")
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/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/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 38c780a..21b6767 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
@@ -1100,6 +1100,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) {

--
Gitblit v1.9.3