From 078a5c4ced367fdbd5a16c27c8bada6e44e632d5 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 09 十月 2025 16:00:33 +0800
Subject: [PATCH] 最新版本541200007

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                      |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java                      |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java |   68 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java                         |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java               |   60 +
 admin/src/components/business/OperaJkSketchLineListWindow.vue                                                 |   71 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java                         |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketch.java                       |   47 +
 admin/src/components/business/OperaJkSketchResultWindow.vue                                                   |   82 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchLineMapper.java                   |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchCustomerMapper.java               |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java                   |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchLineServiceImpl.java     |   21 
 admin/src/api/business/jkSketchLine.js                                                                        |    5 
 admin/src/api/business/jkSketch.js                                                                            |   25 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java              |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java                    |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java             |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchMapper.java                       |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java                       |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkOrdersServiceImpl.java         |   63 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java                    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkOrdersMapper.java                       |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java                  |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkSketchService.java                  |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java           |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkOrdersImport.java                  |   30 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRule.java                    |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java                      |    1 
 admin/src/views/business/jkSketch.vue                                                                         |  170 ++++---
 admin/src/components/business/OperaJkLineImportWindow.vue                                                     |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java           |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningEvent.java                   |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Warning.java                        |    1 
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                       |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java                   |    1 
 admin/src/components/business/OperaJkSketchImportWindow.vue                                                   |   97 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkOrders.java                       |   63 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchLine.java                   |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java       |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java         |  396 ++++++++++++++++-
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchCloudController.java                 |   32 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchLineCloudController.java             |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java                     |    1 
 46 files changed, 1,081 insertions(+), 241 deletions(-)

diff --git a/admin/src/api/business/jkSketch.js b/admin/src/api/business/jkSketch.js
index 6410e0c..04ef2ad 100644
--- a/admin/src/api/business/jkSketch.js
+++ b/admin/src/api/business/jkSketch.js
@@ -2,14 +2,29 @@
 
 // 鏌ヨ
 export function fetchList (data) {
-  return request.post('/business/jkSketch/page', data, {
+  return request.post('/visitsAdmin/cloudService/business/jkSketch/page', data, {
     trim: true
   })
 }
 
+export function importExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkSketch/importExcel', data)
+}
 // 瀵煎嚭Excel
 export function exportExcel (data) {
-  return request.post('/business/jkSketch/exportExcel', data, {
+  return request.post('/visitsAdmin/cloudService/business/jkSketch/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+export function exportResultExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkSketchCustomer/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+export function exportOrdersExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkOrders/exportExcel', data, {
     trim: true,
     download: true
   })
@@ -17,12 +32,12 @@
 
 // 鍒涘缓
 export function create (data) {
-  return request.post('/business/jkSketch/create', data)
+  return request.post('/visitsAdmin/cloudService/business/jkSketch/create', data)
 }
 
 // 淇敼
 export function updateById (data) {
-  return request.post('/business/jkSketch/updateById', data)
+  return request.post('/visitsAdmin/cloudService/business/jkSketch/updateById', data)
 }
 
 // 鍒犻櫎
@@ -32,7 +47,7 @@
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
-  return request.get('/business/jkSketch/delete/batch', {
+  return request.get('/visitsAdmin/cloudService/business/jkSketch/delete/batch', {
     params: {
       ids
     }
diff --git a/admin/src/api/business/jkSketchLine.js b/admin/src/api/business/jkSketchLine.js
index b0f58cc..783b409 100644
--- a/admin/src/api/business/jkSketchLine.js
+++ b/admin/src/api/business/jkSketchLine.js
@@ -6,6 +6,11 @@
     trim: true
   })
 }
+export function allList (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkSketchLine/list', data, {
+    trim: true
+  })
+}
 
 // 瀵煎嚭Excel
 export function exportExcel (data) {
diff --git a/admin/src/components/business/OperaJkLineImportWindow.vue b/admin/src/components/business/OperaJkLineImportWindow.vue
index da0f52d..c8f72f8 100644
--- a/admin/src/components/business/OperaJkLineImportWindow.vue
+++ b/admin/src/components/business/OperaJkLineImportWindow.vue
@@ -12,7 +12,7 @@
       1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
     </p>
     <el-form class="demo-form-inline" >
-      <el-form-item label="鏂拌矾淇℃伅" required>
+      <el-form-item label="绾胯矾淇℃伅" required>
         <div style="width: 100%;display: flex;align-items: center;">
           <el-button type="primary"   @click="clickRef">鐐瑰嚮涓婁紶</el-button>
           <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
diff --git a/admin/src/components/business/OperaJkSketchImportWindow.vue b/admin/src/components/business/OperaJkSketchImportWindow.vue
new file mode 100644
index 0000000..1c307d5
--- /dev/null
+++ b/admin/src/components/business/OperaJkSketchImportWindow.vue
@@ -0,0 +1,97 @@
+<template>
+  <el-dialog
+      class="center-title"
+      :title="title"
+      width="500px"
+      top="30vh"
+      :visible.sync="visible"
+      :confirm-working="isWorking"
+      @confirm="confirm"
+  >
+    <p class="tip-warn"><i class="el-icon-warning"></i>瀵煎叆璇存槑锛�<br>
+      1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
+      2.姣忔瀵煎叆閿�鍞鍗曡〃绀哄嵆鍒犻櫎涔嬪墠瀵煎叆姝ゆ鐩稿簲鏃ユ湡鐨勮鍗曡褰曪紝浠ユ娆″鍏ョ殑鏁版嵁涓轰富;<br>
+    </p>
+    <el-form class="demo-form-inline"  :model="form" ref="form" :rules="rules">
+      <el-form-item label="閫佽揣鏃ユ湡" prop="dateInfo"  >
+        <el-date-picker v-model="form.dateInfo" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ棩鏈�" />
+      </el-form-item>
+      <el-form-item label="璁㈠崟淇℃伅" required>
+        <div style="width: 100%;display: flex;align-items: center;">
+          <el-button type="primary"   @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+          <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+        </div>
+        <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
+      </el-form-item>
+    </el-form>
+    <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
+    <template   v-slot:footer>
+      <el-button @click="visible=false">杩斿洖</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { importExcel } from '@/api/business/jkSketch'
+export default {
+  extends: BaseOpera,
+  // eslint-disable-next-line vue/no-unused-components
+  components: { GlobalWindow },
+  data () {
+    return {
+      importing: false,
+      fileName: '',
+      form: {
+        dateInfo: null
+      },
+      rules: {
+        dateInfo: [{ required: true, message: '璇烽�夋嫨閫佽揣鏃ユ湡' }]
+      }
+    }
+  },
+  methods: {
+    open (title) {
+      this.title = title
+      this.fileName = ''
+      this.visible = true
+    },
+    // 瀵煎嚭妯℃澘
+    exportTemplate () {
+      // 鎶曚繚鐢宠
+      window.open('/template/jkOrdersTemplate.xlsx')
+    },
+    clickRef () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.$refs.fileExcel.click()
+      })
+    },
+    result (e) {
+      const data = new FormData()
+      data.append('dateInfo', this.form.dateInfo)
+      data.append('file', e.target.files[0])
+      importExcel(data)
+        .then(res => {
+          this.$message.success('瀵煎叆鎴愬姛')
+          this.$emit('success')
+          this.visible = false
+        })
+        .catch(err => {
+          // this.$message.error(err)
+          this.fileName = ''
+        })
+        .finally(() => {
+          this.$refs.fileExcel.value = null
+        })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/components/business/OperaJkSketchLineListWindow.vue b/admin/src/components/business/OperaJkSketchLineListWindow.vue
new file mode 100644
index 0000000..3bd5622
--- /dev/null
+++ b/admin/src/components/business/OperaJkSketchLineListWindow.vue
@@ -0,0 +1,71 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    width="85%"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <div  style="display: block;margin-bottom: 30px;">
+      <div style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 20px;">涓荤嚎璺俊鎭�</div>
+      <div style="display: flex;">
+          <div style="flex: 1">閫佽揣鏃ユ湡锛歿{model.dateInfo ||''}}</div>
+          <div style="flex: 1">涓荤嚎璺細{{model.categoryName ||''}}</div>
+          <div style="flex: 1">瀹㈡埛鏁帮細{{model.orderNum ||'-'}}</div>
+          <div style="flex: 1">閫佽揣閲�(鏉�)锛歿{model.totalNum ||'-'}}</div>
+      </div>
+    </div>
+    <div style="display: block">
+      <div  style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 10px;">绾胯矾鏄庣粏</div>
+      <div>
+        <el-table  :data="dataList" stripe  >
+          <el-table-column prop="dateInfo" label="閫佽揣鏃ユ湡" min-width="130px"></el-table-column>
+          <el-table-column prop="lineName" label="閫佽揣绾胯矾" min-width="130px">  </el-table-column>
+          <el-table-column prop="orderNum" label="瀹㈡埛鏁�(鎴�)" min-width="130px"></el-table-column>
+          <el-table-column prop="totalNum" label="閫佽揣閲�(鏉�)" min-width="130px"></el-table-column>
+          <el-table-column prop="carCode" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+          <el-table-column prop="memberName" label="閫佽揣鍙告満" min-width="100px"></el-table-column>
+        </el-table>
+      </div>
+    </div>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaJkSketchLineWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      model: {
+      },
+      dataList:[],
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/jkSketchLine',
+      'field.id': 'id'
+    })
+  },
+  methods:{
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.model= target
+      this.loadList()
+    },
+    loadList () {
+      this.api.allList({
+        sketchId: this.model.id
+      }).then(res => {
+        this.dataList = res
+      })
+    },
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaJkSketchResultWindow.vue b/admin/src/components/business/OperaJkSketchResultWindow.vue
new file mode 100644
index 0000000..2bf3c7c
--- /dev/null
+++ b/admin/src/components/business/OperaJkSketchResultWindow.vue
@@ -0,0 +1,82 @@
+<template>
+  <el-dialog
+      class="center-title"
+      :title="title"
+      width="500px"
+      top="30vh"
+      :visible.sync="visible"
+      :confirm-working="isWorking"
+      @confirm="confirm"
+  >
+    <p class="tip-warn"><i class="el-icon-warning"></i>瀵煎叆璇存槑锛�<br>
+      1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
+      2.姣忔瀵煎叆閿�鍞鍗曡〃绀哄嵆鍒犻櫎涔嬪墠瀵煎叆姝ゆ鐩稿簲鏃ユ湡鐨勮鍗曡褰曪紝浠ユ娆″鍏ョ殑鏁版嵁涓轰富;<br>
+    </p>
+    <el-form class="demo-form-inline" >
+      <el-form-item label="绾胯矾淇℃伅" required>
+        <div style="width: 100%;display: flex;align-items: center;">
+          <el-button type="primary"   @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+          <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+        </div>
+        <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
+      </el-form-item>
+    </el-form>
+    <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
+    <template   v-slot:footer>
+      <el-button @click="visible=false">杩斿洖</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { importExcel } from '@/api/business/jkLine'
+export default {
+  extends: BaseOpera,
+  // eslint-disable-next-line vue/no-unused-components
+  components: { GlobalWindow },
+  data () {
+    return {
+      importing:false,
+      fileName: ''
+    }
+  },
+  methods: {
+    open (title) {
+      this.title = title
+      this.fileName = ''
+      this.visible = true
+    },
+    // 瀵煎嚭妯℃澘
+    exportTemplate () {
+      // 鎶曚繚鐢宠
+      window.open('/template/jkLineTemplate.xlsx')
+    },
+    clickRef () {
+      this.$refs.fileExcel.click()
+    },
+    result (e) {
+      const data = new FormData()
+      data.append('file', e.target.files[0])
+      importExcel(data)
+        .then(res => {
+          this.$message.success('瀵煎叆鎴愬姛')
+          this.$emit('success')
+          this.visible = false
+        })
+        .catch(err => {
+          // this.$message.error(err)
+          this.fileName = ''
+        })
+        .finally(() => {
+          this.$refs.fileExcel.value = null
+        })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/views/business/jkSketch.vue b/admin/src/views/business/jkSketch.vue
index 8dc4322..134b626 100644
--- a/admin/src/views/business/jkSketch.vue
+++ b/admin/src/views/business/jkSketch.vue
@@ -2,81 +2,57 @@
   <TableLayout :permissions="['business:jksketch:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="涓婚敭" prop="id">
-        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ヤ富閿�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="info">
-        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="涓荤嚎璺紪鐮侊紙鍏宠仈category)" prop="categoryId">
-        <el-input v-model="searchForm.categoryId" placeholder="璇疯緭鍏ヤ富绾胯矾缂栫爜锛堝叧鑱攃ategory)" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="閫佽揣閲�" prop="totalNum">
-        <el-input v-model="searchForm.totalNum" placeholder="璇疯緭鍏ラ�佽揣閲�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="瀹㈡埛鏁�" prop="orderNum">
-        <el-input v-model="searchForm.orderNum" placeholder="璇疯緭鍏ュ鎴锋暟" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵�� 0鏈紭鍖� 1浼樺寲涓� 2宸蹭紭鍖�" prop="status">
-        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈紭鍖� 1浼樺寲涓� 2宸蹭紭鍖�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
-        <el-input v-model="searchForm.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏃ユ湡" prop="dateInfo">
+      <el-form-item label="閫佽揣鏃ユ湡" prop="dateInfo">
         <el-date-picker v-model="searchForm.dateInfo" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ棩鏈�" @change="search"/>
       </el-form-item>
-      <el-form-item label="浼樺寲璁板綍缂栫爜(浣滀负key鍊煎瓨redis锛�" prop="jobId">
-        <el-input v-model="searchForm.jobId" placeholder="璇疯緭鍏ヤ紭鍖栬褰曠紪鐮�(浣滀负key鍊煎瓨redis锛�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鐘舵��" prop="status" >
+        <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" clearable @change="search">
+          <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>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:jksketch:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:jksketch:create', 'business:jksketch:delete']">
-        <li><el-button type="primary" @click="$refs.operaJkSketchWindow.open('鏂板缓浜ゆ帶-绾胯矾浼樺寲璁板綍淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:jksketch:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jksketch:delete']">鍒犻櫎</el-button></li>
+      <ul class="toolbar" v-permissions="['business:jksketch:create']">
+        <li><el-button icon="el-icon-upload"  type="primary" @click="$refs.OperaJkSketchImportWindow.open('閿�鍞鍗曞鍏�')"  v-permissions="['business:jksketch:create']">閿�鍞鍗曞鍏�</el-button></li>
+        <!--
+                <li><el-button type="primary" @click="$refs.operaJkSketchWindow.open('鏂板缓浜ゆ帶-绾胯矾浼樺寲璁板綍淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:jksketch:create']">鏂板缓</el-button></li>
+        -->
+        <li> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:jksketch:exportExcel']" @click="exportExcel">瀵煎嚭鍒楄〃鏁版嵁</el-button></li>
+        <li> <el-button type="primary" :loading="isWorking.export1" v-permissions="['business:jksketch:exportExcel']" @click="exportExcel1">瀵煎嚭浼樺寲缁撴灉</el-button></li>
+        <li> <el-button type="primary" :loading="isWorking.export2" v-permissions="['business:jksketch:exportExcel']" @click="exportExcel2">瀵煎嚭閿�鍞鍗�</el-button></li>
       </ul>
       <el-table
+          :height="tableHeightNew"
         v-loading="isWorking.search"
         :data="tableData.list"
         stripe
         @selection-change="handleSelectionChange"
       >
+<!--
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
-        <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
-        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
-        <el-table-column prop="categoryId" label="涓荤嚎璺紪鐮侊紙鍏宠仈category)" min-width="100px"></el-table-column>
-        <el-table-column prop="totalNum" label="閫佽揣閲�" min-width="100px"></el-table-column>
-        <el-table-column prop="orderNum" label="瀹㈡埛鏁�" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵�� 0鏈紭鍖� 1浼樺寲涓� 2宸蹭紭鍖�" min-width="100px"></el-table-column>
-        <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="dateInfo" label="鏃ユ湡" min-width="100px"></el-table-column>
-        <el-table-column prop="jobId" label="浼樺寲璁板綍缂栫爜(浣滀负key鍊煎瓨redis锛�" min-width="100px"></el-table-column>
+-->
+        <el-table-column prop="dateInfo" label="閫佽揣鏃ユ湡" min-width="130px"></el-table-column>
+        <el-table-column prop="categoryName" label="涓荤嚎璺�" min-width="130px">
+          <template slot-scope="{row}">
+            <span class="blue" style="cursor: pointer" @click="$refs.operaJkSketchLineListWindow.open('閰嶉�佺嚎璺槑缁�', row)">{{ row.categoryName }}锛坽{row.lineNum||0}}鏉$嚎璺級</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="orderNum" label="瀹㈡埛鏁�(鎴�)" min-width="130px"></el-table-column>
+        <el-table-column prop="totalNum" label="閫佽揣閲�(鏉�)" min-width="130px"></el-table-column>
+        <el-table-column prop="status" label="浼樺寲鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.status === 0" class="blue">鏈紭鍖�</span>
+            <span v-if="row.status === 1" class="red">浼樺寲涓�</span>
+            <span v-if="row.status === 2" class="green">宸蹭紭鍖�</span>
+          </template>
+        </el-table-column>
         <el-table-column
           v-if="containPermissions(['business:jksketch:update', 'business:jksketch:delete'])"
           label="鎿嶄綔"
@@ -84,8 +60,8 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaJkSketchWindow.open('缂栬緫浜ゆ帶-绾胯矾浼樺寲璁板綍淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:jksketch:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:jksketch:delete']">鍒犻櫎</el-button>
+            <el-button type="text" @click="$refs.operaJkSketchWindow.open('绾胯矾浼樺寲', row)" icon="el-icon-edit" v-permissions="['business:jksketch:update']">绾胯矾浼樺寲</el-button>
+            <el-button type="text" @click="$refs.OperaJkSketchResultWindow.open('绾胯矾浼樺寲缁撴灉', row)" icon="el-icon-view" v-if="row.status ==2" >浼樺寲缁撴灉</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -98,6 +74,9 @@
     </template>
     <!-- 鏂板缓/淇敼 -->
     <OperaJkSketchWindow ref="operaJkSketchWindow" @success="handlePageChange"/>
+    <OperaJkSketchResultWindow ref="OperaJkSketchResultWindow" @success="handlePageChange"/>
+    <OperaJkSketchImportWindow ref="OperaJkSketchImportWindow" @success="handlePageChange"/>
+    <OperaJkSketchLineListWindow ref="operaJkSketchLineListWindow"  />
   </TableLayout>
 </template>
 
@@ -106,28 +85,23 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaJkSketchWindow from '@/components/business/OperaJkSketchWindow'
+import OperaJkSketchLineListWindow from '@/components/business/OperaJkSketchLineListWindow'
+import OperaJkSketchResultWindow from '@/components/business/OperaJkSketchResultWindow'
+import OperaJkSketchImportWindow from '@/components/business/OperaJkSketchImportWindow'
 export default {
   name: 'JkSketch',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaJkSketchWindow },
+  components: { TableLayout, Pagination, OperaJkSketchWindow, OperaJkSketchResultWindow, OperaJkSketchImportWindow, OperaJkSketchLineListWindow },
   data () {
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        info: '',
-        categoryId: '',
-        totalNum: '',
-        orderNum: '',
         status: '',
-        sortnum: '',
-        dateInfo: '',
-        jobId: ''
+        dateInfo: ''
+      },
+      isWorking: {
+        export1: false,
+        export2: false
       }
     }
   },
@@ -139,6 +113,56 @@
       'field.main': 'id'
     })
     this.search()
+  },
+  methods: {
+    exportExcel1 () {
+      if (!this.searchForm.dateInfo) {
+        this.$message.error('璇烽�夋嫨鎸囧畾鏃ユ湡杩涜璇ュ鍑烘搷浣滐紒')
+        return
+      }
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.exLoading = true
+          this.api.exportResultExcel({
+            page: 1,
+            capacity: 1000000,
+            model: {dateInfo:this.searchForm.dateInfo}
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.exLoading = false
+            })
+        })
+    },
+    exportExcel2 () {
+      if (!this.searchForm.dateInfo) {
+        this.$message.error('璇烽�夋嫨鎸囧畾鏃ユ湡杩涜璇ュ鍑烘搷浣滐紒')
+        return
+      }
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.exLoading = true
+          this.api.exportOrdersExcel({
+            page: 1,
+            capacity: 1000000,
+            model: {dateInfo:this.searchForm.dateInfo}
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.exLoading = false
+            })
+        })
+    }
   }
 }
 </script>
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 403a564..e83550f 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
@@ -521,6 +521,7 @@
         public static final String IMPORTING_CARS ="IMPORTING_CARS";
         public static final String CHECKING_JKCUSTOMER_LOCATION ="CHECKING_JKCUSTOMER_LOCATION";
         public static final String IMPORTING_JKCUSTOMER ="IMPORTING_JKCUSTOMER";
+        public static final String IMPORTING_JKORDERS ="IMPORTING_JKORDERS";
         public static final String IMPORTING_JKLINE ="IMPORTING_JKLINE";
         public static final String IMPORTING_MEMBER ="IMPORTING_MEMBER";
         public static final String BIGSCREEN_UUID ="BIGSCREEN_UUID";
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
index 912117f..3729091 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -2501,6 +2501,16 @@
             return null;
         }
     }
+    public static Date getDateFromShortString(String strDate) {
+        if (StringUtils.isEmpty(strDate)) {
+          return  null;
+        }
+        try {
+            return sdfLong.parse(strDate);
+        } catch (Exception ex) {
+            return null;
+        }
+    }
 
 
     // -----------------------------------------------------------------------
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java
index 51ddef3..dd3f84c 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java
@@ -97,7 +97,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
     })
-    @CloudRequiredPermission("business:cars:create")
+    @CloudRequiredPermission("business:jkcustomer:create")
     public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         List<JkCustomer> list = jkCustomerService.importBatch(file,this.getLoginUser(token));
         return ApiResponse.success("瀵煎叆鎴愬姛");
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java
index fede752..043b53f 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java
@@ -104,7 +104,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
     })
-    @CloudRequiredPermission("business:cars:create")
+    @CloudRequiredPermission("business:jkline:create")
     public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         List<JkLine> list = jkLineService.importBatch(file,this.getLoginUser(token));
         return ApiResponse.success("瀵煎叆鎴愬姛");
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchCloudController.java
index 7053160..dae2c7b 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchCloudController.java
@@ -5,17 +5,19 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.JkCustomer;
 import com.doumee.dao.business.model.JkSketch;
 import com.doumee.service.business.JkSketchService;
 import com.doumee.service.business.third.model.ApiResponse;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -35,14 +37,14 @@
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
     @CloudRequiredPermission("business:jksketch:create")
-    public ApiResponse create(@RequestBody JkSketch jkSketch) {
+    public ApiResponse create(@RequestBody JkSketch jkSketch, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkSketchService.create(jkSketch));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
     @CloudRequiredPermission("business:jksketch:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
+    public ApiResponse deleteById(@PathVariable Integer id, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         jkSketchService.deleteById(id);
         return ApiResponse.success(null);
     }
@@ -50,7 +52,7 @@
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
     @CloudRequiredPermission("business:jksketch:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
         for (String id : idArray) {
@@ -63,7 +65,7 @@
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:jksketch:update")
-    public ApiResponse updateById(@RequestBody JkSketch jkSketch) {
+    public ApiResponse updateById(@RequestBody JkSketch jkSketch, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         jkSketchService.updateById(jkSketch);
         return ApiResponse.success(null);
     }
@@ -71,21 +73,33 @@
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @CloudRequiredPermission("business:jksketch:query")
-    public ApiResponse<PageData<JkSketch>> findPage (@RequestBody PageWrap<JkSketch> pageWrap) {
+    public ApiResponse<PageData<JkSketch>> findPage (@RequestBody PageWrap<JkSketch> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkSketchService.findPage(pageWrap));
     }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:jksketch:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<JkSketch> pageWrap, HttpServletResponse response) {
+    public void exportExcel (@RequestBody PageWrap<JkSketch> pageWrap, HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ExcelExporter.build(JkSketch.class).export(jkSketchService.findPage(pageWrap).getRecords(), "浜ゆ帶-绾胯矾浼樺寲璁板綍淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:jksketch:query")
-    public ApiResponse findById(@PathVariable Integer id) {
+    public ApiResponse findById(@PathVariable Integer id, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkSketchService.findById(id));
     }
+
+    @ApiOperation(value = "璁㈠崟淇℃伅瀵煎叆" ,notes = "璁㈠崟淇℃伅瀵煎叆")
+    @PostMapping("/importExcel")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+            @ApiImplicitParam(name = "dateInfo", value = "dateInfo", required = true, paramType = "query", dataType = "String" ),
+    })
+    @CloudRequiredPermission("business:jksketch:create")
+    public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file,  String dateInfo, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        List<JkSketch> list = jkSketchService.importBatch(file,dateInfo,this.getLoginUser(token));
+        return ApiResponse.success("瀵煎叆鎴愬姛");
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchLineCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchLineCloudController.java
index 06d15d9..5d11d7d 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchLineCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkSketchLineCloudController.java
@@ -74,6 +74,12 @@
     public ApiResponse<PageData<JkSketchLine>> findPage (@RequestBody PageWrap<JkSketchLine> pageWrap) {
         return ApiResponse.success(jkSketchLineService.findPage(pageWrap));
     }
+    @ApiOperation("鏌ヨ鍏ㄩ儴鍒楄〃")
+    @PostMapping("/list")
+    @CloudRequiredPermission("business:jksketchline:query")
+    public ApiResponse<List<JkSketchLine>> findList (@RequestBody  JkSketchLine pageWrap) {
+        return ApiResponse.success(jkSketchLineService.findList(pageWrap));
+    }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java
index e0aa5a6..9af888e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java
@@ -5,7 +5,7 @@
 import lombok.Data;
 
 /**
- * 鍛樺伐淇℃伅瀵煎叆琛�
+ * 绾胯矾瀹㈡埛淇℃伅瀵煎叆
  * @author 姹熻箘韫�
  * @date 2024/01/16 10:03
  */
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java
index c511472..f793428 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java
@@ -5,7 +5,7 @@
 import lombok.Data;
 
 /**
- * 鍛樺伐淇℃伅瀵煎叆琛�
+ * 绾胯矾淇℃伅瀵煎叆
  * @author 姹熻箘韫�
  * @date 2024/01/16 10:03
  */
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkOrdersImport.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkOrdersImport.java
new file mode 100644
index 0000000..983c778
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkOrdersImport.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 瀹㈡埛璁㈠崟淇℃伅瀵煎叆
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+@Data
+@ApiModel("瀹㈡埛璁㈠崟淇℃伅瀵煎叆")
+public class JkOrdersImport {
+
+
+    @ExcelColumn(name="瀹㈡埛绠�鐮�",value = "code",index = 0)
+    private String code;
+    @ExcelColumn(name="瀹㈡埛鍚嶇О",value = "name",index = 1)
+    private String name;
+    @ExcelColumn(name="鏁伴噺" , value = "num",index = 2)
+    private String num;
+    @ExcelColumn(name="绾胯矾",value = "lineName",index = 3)
+    private String lineName;
+    @ExcelColumn(name="搴忓彿",value = "sortnum",index = 4)
+    private String sortnum;
+    @ExcelColumn(name="鍦板潃",value = "dateInfo",index = 5)
+    private String dateInfo;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkOrdersMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkOrdersMapper.java
index c8bf20a..b9836e8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkOrdersMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkOrdersMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.JkOrders;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
-public interface JkOrdersMapper extends BaseMapper<JkOrders> {
+public interface JkOrdersMapper extends MPJBaseMapper<JkOrders> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchCustomerMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchCustomerMapper.java
index 903630a..389955f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchCustomerMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchCustomerMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.JkSketchCustomer;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
-public interface JkSketchCustomerMapper extends BaseMapper<JkSketchCustomer> {
+public interface JkSketchCustomerMapper extends MPJBaseMapper<JkSketchCustomer> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchLineMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchLineMapper.java
index 81a3cb9..063a933 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchLineMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchLineMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.JkSketchLine;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
-public interface JkSketchLineMapper extends BaseMapper<JkSketchLine> {
+public interface JkSketchLineMapper extends MPJBaseMapper<JkSketchLine> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchMapper.java
index e95e915..4cb8669 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkSketchMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.JkSketch;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
-public interface JkSketchMapper extends BaseMapper<JkSketch> {
+public interface JkSketchMapper extends MPJBaseMapper<JkSketch> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
index 1f7584b..26f0b8c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
@@ -24,6 +24,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
index 0e9402f..35fa13a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
@@ -23,6 +23,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
index 5b6b703..63bd3e6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
@@ -23,6 +23,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
index 8403864..9a7f912 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
@@ -25,6 +25,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     //@ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java
index bb6ee97..9bc6a43 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java
@@ -23,6 +23,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java
index fe19998..2148e5c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java
@@ -23,6 +23,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java
index 3b90977..2ac8109 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java
@@ -24,6 +24,7 @@
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
     //@ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkOrders.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkOrders.java
index 8666c3e..9a369f0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkOrders.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkOrders.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -9,6 +10,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -22,62 +25,84 @@
 public class JkOrders  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
+    //@ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    //@ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    //@ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    //@ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
+    //@ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    //@ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
+    //@ExcelColumn(name="澶囨敞")
     private String info;
 
-    @ApiModelProperty(value = "鍚嶇О", example = "1")
-    @ExcelColumn(name="鍚嶇О")
-    private Integer name;
+    @ApiModelProperty(value = "瀹㈡埛缂栫爜鍏宠仈锛坖k_customer)", example = "1")
+    //@ExcelColumn(name="瀹㈡埛缂栫爜鍏宠仈")
+    private Integer customerId;
 
     @ApiModelProperty(value = "閿�閲�", example = "1")
-    @ExcelColumn(name="閿�閲�")
-    private Integer num;
+    @ExcelColumn(name="鏁伴噺",index = 3,width = 10)
+    private BigDecimal num;
 
     @ApiModelProperty(value = "閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)", example = "1")
-    @ExcelColumn(name="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)")
+    //@ExcelColumn(name="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)")
     private Integer lineId;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 绂佺敤", example = "1")
-    @ExcelColumn(name="鐘舵�� 0姝e父 绂佺敤")
+    //@ExcelColumn(name="鐘舵�� 0姝e父 绂佺敤")
     private Integer status;
 
-    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
-    private Integer sortnum;
+    @ApiModelProperty(value = "搴忓彿", example = "1")
+    @ExcelColumn(name="搴忓彿",index = 5,width = 10)
+    private String sortnum;
 
     @ApiModelProperty(value = "鏃ユ湡")
-    @ExcelColumn(name="鏃ユ湡")
+    @ExcelColumn(name="閫佽揣鏃ユ湡",index = 6,width = 10)
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date dateInfo;
 
     @ApiModelProperty(value = "鍚岀彮缁勯棿瀹㈡埛浣嶇疆璺濈鏁扮粍锛孾{a:12,b:100},{a:13,b:200},...],a锛氬鎴风紪鐮侊紝b锛氫笌瀹㈡埛a涔嬮棿鐨勮窛绂�")
-    @ExcelColumn(name="鍚岀彮缁勯棿瀹㈡埛浣嶇疆璺濈鏁扮粍锛孾{a:12,b:100},{a:13,b:200},...],a锛氬鎴风紪鐮侊紝b锛氫笌瀹㈡埛a涔嬮棿鐨勮窛绂�")
+    //@ExcelColumn(name="鍚岀彮缁勯棿瀹㈡埛浣嶇疆璺濈鏁扮粍锛孾{a:12,b:100},{a:13,b:200},...],a锛氬鎴风紪鐮侊紝b锛氫笌瀹㈡埛a涔嬮棿鐨勮窛绂�")
     private String distances;
 
+    @ApiModelProperty(value = "瀹㈡埛濮撳悕", example = "1")
+    @ExcelColumn(name="瀹㈡埛濮撳悕",index = 2,width = 10)
+    @TableField(exist = false)
+    private String name;
+    @ApiModelProperty(value = "瀹㈡埛缂栫爜", example = "1")
+    @ExcelColumn(name="瀹㈡埛缂栫爜",index = 1,width = 10)
+    @TableField(exist = false)
+    private String code;
+    @ApiModelProperty(value = "绾胯矾鍚嶇О", example = "1")
+    @ExcelColumn(name="绾胯矾",index = 4,width = 10)
+    @TableField(exist = false)
+    private String lineName;
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾", example = "1")
+    //@ExcelColumn(name="鎵�灞炰富绾胯矾",index = 2,width = 10)
+    @TableField(exist = false)
+    private String categoryName;
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾缂栫爜", example = "1")
+    //@ExcelColumn(name="鎵�灞炰富绾胯矾",index = 2,width = 10)
+    @TableField(exist = false)
+    private Integer categoryId;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketch.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketch.java
index 95a47d7..792e207 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketch.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketch.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -9,6 +10,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -22,62 +25,70 @@
 public class JkSketch  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
+    //@ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    //@ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    //@ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    //@ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
+    //@ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    //@ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
+    //@ExcelColumn(name="澶囨敞")
     private String info;
 
     @ApiModelProperty(value = "涓荤嚎璺紪鐮侊紙鍏宠仈category)", example = "1")
-    @ExcelColumn(name="涓荤嚎璺紪鐮侊紙鍏宠仈category)")
+    //@ExcelColumn(name="涓荤嚎璺紪鐮侊紙鍏宠仈category)")
     private Integer categoryId;
+    @ApiModelProperty(value = "褰撳墠绾胯矾鏁�", example = "1")
+    //@ExcelColumn(name="涓荤嚎璺紪鐮侊紙鍏宠仈category)")
+    private Integer lineNum;
 
     @ApiModelProperty(value = "閫佽揣閲�", example = "1")
-    @ExcelColumn(name="閫佽揣閲�")
-    private Integer totalNum;
+    @ExcelColumn(name="閫佽揣閲忥紙鏉★級",index = 4,width = 10)
+    private BigDecimal totalNum;
 
     @ApiModelProperty(value = "瀹㈡埛鏁�", example = "1")
-    @ExcelColumn(name="瀹㈡埛鏁�")
+    @ExcelColumn(name="瀹㈡埛鏁帮紙鎴凤級",index = 3,width = 7)
     private Integer orderNum;
 
     @ApiModelProperty(value = "鐘舵�� 0鏈紭鍖� 1浼樺寲涓� 2宸蹭紭鍖�", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鏈紭鍖� 1浼樺寲涓� 2宸蹭紭鍖�")
+    @ExcelColumn(name="鐘舵��",index = 5,width = 10,valueMapping = "0=鏈紭鍖�;1=浼樺寲涓�;2=宸蹭紭鍖�;")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
+    //@ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
-
+    @ApiModelProperty(value = "浼樺寲璁板綍缂栫爜(浣滀负key鍊煎瓨redis锛�", example = "1")
+    //@ExcelColumn(name="鐝粍缂栫爜锛堝叧鑱攃ategory锛�")
+    private String jobId;
     @ApiModelProperty(value = "鏃ユ湡")
-    @ExcelColumn(name="鏃ユ湡")
+    @ExcelColumn(name="閫佽揣鏃ユ湡",index = 1,width = 10)
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date dateInfo;
 
-    @ApiModelProperty(value = "浼樺寲璁板綍缂栫爜(浣滀负key鍊煎瓨redis锛�")
-    @ExcelColumn(name="浼樺寲璁板綍缂栫爜(浣滀负key鍊煎瓨redis锛�")
-    private String jobId;
+
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾", example = "1")
+    @ExcelColumn(name="涓荤嚎璺�",index = 2,width = 10)
+    @TableField(exist = false)
+    private String categoryName;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java
index f267cf5..b30a3f9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchCustomer.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -9,6 +10,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -22,58 +25,83 @@
 public class JkSketchCustomer  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
+    @TableId(type = IdType.AUTO)
+    //@ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    //@ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    //@ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    //@ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
+    //@ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    //@ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
+    //@ExcelColumn(name="澶囨敞")
     private String info;
 
     @ApiModelProperty(value = "绾胯矾缂栫爜锛堝叧鑱攋k_sketch_line)", example = "1")
-    @ExcelColumn(name="绾胯矾缂栫爜锛堝叧鑱攋k_sketch_line)")
+    //@ExcelColumn(name="绾胯矾缂栫爜锛堝叧鑱攋k_sketch_line)")
     private Integer sketchLineId;
 
     @ApiModelProperty(value = "绾胯矾浼樺寲缂栫爜锛堝叧鑱攋k_sketch)", example = "1")
-    @ExcelColumn(name="绾胯矾浼樺寲缂栫爜锛堝叧鑱攋k_sketch)")
+    //@ExcelColumn(name="绾胯矾浼樺寲缂栫爜锛堝叧鑱攋k_sketch)")
     private Integer sketchId;
 
     @ApiModelProperty(value = "閫佽揣閲�", example = "1")
-    @ExcelColumn(name="閫佽揣閲�")
-    private Integer totalNum;
+    @ExcelColumn(name="閫佽揣閲�(鏉�)",index =5,width = 10)
+    private BigDecimal totalNum;
 
-    @ApiModelProperty(value = "瀹㈡埛鏁�", example = "1")
-    @ExcelColumn(name="瀹㈡埛鏁�")
-    private Integer orderNum;
+    @ApiModelProperty(value = "璁㈠崟缂栫爜锛堝叧鑱攋k_orders)", example = "1")
+    //@ExcelColumn(name="璁㈠崟缂栫爜锛堝叧鑱攋k_orders)")
+    private Integer orderId;
+    @ApiModelProperty(value = "瀹㈡埛缂栫爜锛堝叧鑱攋k_customer)", example = "1")
+    //@ExcelColumn(name="瀹㈡埛缂栫爜锛堝叧鑱攋k_customer)")
+    private Integer customerId;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
+    //@ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "鏃ユ湡")
-    @ExcelColumn(name="鏃ユ湡")
+    @ExcelColumn(name="閫佽揣鏃ユ湡",index = 6,width = 10)
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date dateInfo;
 
+
+    @ApiModelProperty(value = "瀹㈡埛缂栫爜", example = "1")
+    @ExcelColumn(name="瀹㈡埛缂栫爜",index = 1,width = 10)
+    @TableField(exist = false)
+    private String code;
+    @ApiModelProperty(value = "瀹㈡埛濮撳悕", example = "1")
+    @ExcelColumn(name="瀹㈡埛濮撳悕",index = 2,width = 10)
+    @TableField(exist = false)
+    private String name;
+    @ApiModelProperty(value = "绾胯矾鍚嶇О", example = "1")
+    @ExcelColumn(name="绾胯矾",index = 4,width = 10)
+    @TableField(exist = false)
+    private String lineName;
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾", example = "1")
+    @ExcelColumn(name="鎵�灞炰富绾胯矾",index = 3,width = 10)
+    @TableField(exist = false)
+    private String categoryName;
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾缂栫爜", example = "1")
+    //@ExcelColumn(name="鎵�灞炰富绾胯矾",index = 2,width = 10)
+    @TableField(exist = false)
+    private Integer categoryId;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchLine.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchLine.java
index c700662..3361816 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchLine.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkSketchLine.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -9,6 +10,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -21,6 +24,7 @@
 @TableName("`jk_sketch_line`")
 public class JkSketchLine  extends LoginUserModel {
 
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
     private Integer id;
@@ -61,7 +65,7 @@
 
     @ApiModelProperty(value = "閫佽揣閲�", example = "1")
     @ExcelColumn(name="閫佽揣閲�")
-    private Integer totalNum;
+    private BigDecimal totalNum;
 
     @ApiModelProperty(value = "瀹㈡埛鏁�", example = "1")
     @ExcelColumn(name="瀹㈡埛鏁�")
@@ -76,4 +80,21 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date dateInfo;
 
+
+    @ApiModelProperty(value = "杞︾墝鍙�", example = "1")
+    @TableField(exist = false)
+    private String carCode;
+    @ApiModelProperty(value = "閫佽揣鍙告満", example = "1")
+    @TableField(exist = false)
+    private String memberName;
+    @ApiModelProperty(value = "绾胯矾鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String lineName;
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾", example = "1")
+    @TableField(exist = false)
+    private String categoryName;
+    @ApiModelProperty(value = "鎵�灞炰富绾胯矾缂栫爜", example = "1")
+    @TableField(exist = false)
+    private Integer categoryId;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
index 234c566..bf6fc75 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
@@ -21,6 +21,7 @@
 @TableName("`jk_version`")
 public class JkVersion  extends LoginUserModel {
 
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
     private Integer id;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Warning.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Warning.java
index 1d79ddc..785cc6f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Warning.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Warning.java
@@ -21,6 +21,7 @@
 @TableName("`warning`")
 public class Warning  extends LoginUserModel {
 
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
     @ExcelColumn(name="涓婚敭")
     private Integer id;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningEvent.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningEvent.java
index 4644525..62c7d9b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningEvent.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningEvent.java
@@ -21,6 +21,7 @@
 @TableName("`warning_event`")
 public class WarningEvent {
 
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
     //@ExcelColumn(name="涓婚敭")
     private Integer id;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java
index fa34a7c..8faea00 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java
@@ -23,6 +23,7 @@
 public class WarningPush  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
+    @TableId(type = IdType.AUTO)
     //@ExcelColumn(name="涓婚敭")
     private Integer id;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRule.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRule.java
index 15d91c5..c1e2b0e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRule.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRule.java
@@ -24,6 +24,7 @@
 public class WarningRule  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
+    @TableId(type = IdType.AUTO)
     @ExcelColumn(name="涓婚敭")
     private Integer id;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
index 91650b4..07409cf 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
@@ -22,6 +22,7 @@
 public class WarningRuleDetail  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
+    @TableId(type = IdType.AUTO)
     @ExcelColumn(name="涓婚敭")
     private Integer id;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkSketchService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkSketchService.java
index f2cc256..eb399fc 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkSketchService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkSketchService.java
@@ -1,8 +1,11 @@
 package com.doumee.service.business;
 
+import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.dao.business.model.JkSketch;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.List;
 
 /**
@@ -94,4 +97,6 @@
      * @return long
      */
     long count(JkSketch jkSketch);
+
+    List<JkSketch> importBatch(MultipartFile file, String dateInfo, LoginUserInfo loginUser);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
index 5e3ac7c..3b6469b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -38,6 +38,7 @@
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 杞﹁締淇℃伅琛⊿ervice瀹炵幇
@@ -510,7 +511,7 @@
         if(importing!=null && importing){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄨ溅杈嗗鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
         }
-        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_CARS,true);
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_CARS,true,30, TimeUnit.MINUTES);
         try {
             ExcelImporter ie = null;
             List<CarsImport> dataList =null;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java
index 2e04143..a857bb0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java
@@ -38,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 浜ゆ帶-瀹㈡埛淇℃伅琛⊿ervice瀹炵幇
@@ -299,7 +300,7 @@
         if(importing!=null && importing){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
         }
-        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKCUSTOMER,true);
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKCUSTOMER,true,30, TimeUnit.MINUTES);
         try {
             ExcelImporter ie = null;
             List<JkCustomerImport> dataList =null;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java
index c5b5fa2..21ef83c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java
@@ -34,6 +34,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 浜ゆ帶-绾胯矾淇℃伅琛⊿ervice瀹炵幇
@@ -230,7 +231,7 @@
         if(importing!=null && importing){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
         }
-        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKLINE,true);
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKLINE,true,30, TimeUnit.MINUTES);
         try {
             ExcelImporter ie = null;
             List<JkLineImport> dataList =null;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkOrdersServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkOrdersServiceImpl.java
index d88ff6a..2172fe0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkOrdersServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkOrdersServiceImpl.java
@@ -1,15 +1,17 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.JkOrdersMapper;
-import com.doumee.dao.business.model.JkOrders;
 import com.doumee.service.business.JkOrdersService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -87,61 +89,68 @@
     @Override
     public PageData<JkOrders> findPage(PageWrap<JkOrders> pageWrap) {
         IPage<JkOrders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<JkOrders> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<JkOrders> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper.selectAll(JkOrders.class )
+                .selectAs(Category::getId,JkOrders::getCategoryId)
+                .selectAs(Category::getName,JkOrders::getCategoryName)
+                .selectAs(JkCustomer::getCode,JkOrders::getCode)
+                .selectAs(JkCustomer::getName,JkOrders::getName)
+                .selectAs(JkLine::getName,JkOrders::getLineName)
+                .leftJoin(JkCustomer.class,JkCustomer::getId,JkOrders::getCustomerId )
+                .leftJoin(JkLine.class,JkLine::getId,JkOrders::getLineId )
+                .leftJoin(Category.class,Category::getId,JkLine::getCategoryId );
+        queryWrapper.eq( pageWrap.getModel().getCategoryId()!=null, JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
+        queryWrapper.eq( pageWrap.getModel().getDateInfo()!=null, JkOrders::getDateInfo, pageWrap.getModel().getDateInfo());
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(JkOrders::getId, pageWrap.getModel().getId());
+           queryWrapper.eq(JkOrders::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(JkOrders::getCreator, pageWrap.getModel().getCreator());
+           queryWrapper.eq(JkOrders::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(JkOrders::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(JkOrders::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+           queryWrapper.ge(JkOrders::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+           queryWrapper.le(JkOrders::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(JkOrders::getEditor, pageWrap.getModel().getEditor());
+           queryWrapper.eq(JkOrders::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(JkOrders::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(JkOrders::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+           queryWrapper.ge(JkOrders::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+           queryWrapper.le(JkOrders::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(JkOrders::getIsdeleted, pageWrap.getModel().getIsdeleted());
+           queryWrapper.eq(JkOrders::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getInfo() != null) {
-            queryWrapper.lambda().eq(JkOrders::getInfo, pageWrap.getModel().getInfo());
+           queryWrapper.eq(JkOrders::getInfo, pageWrap.getModel().getInfo());
         }
         if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(JkOrders::getName, pageWrap.getModel().getName());
+           queryWrapper.eq(JkOrders::getName, pageWrap.getModel().getName());
         }
         if (pageWrap.getModel().getNum() != null) {
-            queryWrapper.lambda().eq(JkOrders::getNum, pageWrap.getModel().getNum());
+           queryWrapper.eq(JkOrders::getNum, pageWrap.getModel().getNum());
         }
         if (pageWrap.getModel().getLineId() != null) {
-            queryWrapper.lambda().eq(JkOrders::getLineId, pageWrap.getModel().getLineId());
+           queryWrapper.eq(JkOrders::getLineId, pageWrap.getModel().getLineId());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(JkOrders::getStatus, pageWrap.getModel().getStatus());
+           queryWrapper.eq(JkOrders::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(JkOrders::getSortnum, pageWrap.getModel().getSortnum());
+           queryWrapper.eq(JkOrders::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getDateInfo() != null) {
-            queryWrapper.lambda().ge(JkOrders::getDateInfo, Utils.Date.getStart(pageWrap.getModel().getDateInfo()));
-            queryWrapper.lambda().le(JkOrders::getDateInfo, Utils.Date.getEnd(pageWrap.getModel().getDateInfo()));
+           queryWrapper.ge(JkOrders::getDateInfo, Utils.Date.getStart(pageWrap.getModel().getDateInfo()));
+           queryWrapper.le(JkOrders::getDateInfo, Utils.Date.getEnd(pageWrap.getModel().getDateInfo()));
         }
         if (pageWrap.getModel().getDistances() != null) {
-            queryWrapper.lambda().eq(JkOrders::getDistances, pageWrap.getModel().getDistances());
+           queryWrapper.eq(JkOrders::getDistances, pageWrap.getModel().getDistances());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(jkOrdersMapper.selectPage(page, queryWrapper));
+        queryWrapper.orderByAsc(JkOrders::getSortnum);
+        IPage<JkOrders> result = jkOrdersMapper.selectJoinPage(page, JkOrders.class,queryWrapper);
+        return PageData.from(result);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java
index c58701d..dd415bf 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchCustomerServiceImpl.java
@@ -1,19 +1,23 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.JkSketchCustomerMapper;
-import com.doumee.dao.business.model.JkSketchCustomer;
 import com.doumee.service.business.JkSketchCustomerService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.math.RoundingMode;
 import java.util.List;
 
 /**
@@ -87,58 +91,64 @@
     @Override
     public PageData<JkSketchCustomer> findPage(PageWrap<JkSketchCustomer> pageWrap) {
         IPage<JkSketchCustomer> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<JkSketchCustomer> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<JkSketchCustomer> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper.selectAll(JkSketchCustomer.class )
+                .selectAs(JkCustomer::getName,JkSketchCustomer::getName)
+                .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode)
+                .selectAs(JkLine::getName,JkSketchCustomer::getLineName)
+                .selectAs(Category::getId,JkSketchCustomer::getCategoryId)
+                .selectAs(Category::getName,JkSketchCustomer::getCategoryName)
+                .leftJoin(JkOrders.class,JkOrders::getId,JkSketchCustomer::getOrderId )
+                .leftJoin(JkCustomer.class,JkCustomer::getId,JkSketchCustomer::getCustomerId )
+                .leftJoin(JkLine.class,JkLine::getId,JkOrders::getLineId )
+                .leftJoin(Category.class,Category::getId,JkLine::getCategoryId );
+        queryWrapper.eq( pageWrap.getModel().getCategoryId()!=null,JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
+        queryWrapper.eq( pageWrap.getModel().getDateInfo()!=null,JkSketchCustomer::getDateInfo, pageWrap.getModel().getDateInfo());
+
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(JkSketchCustomer::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(JkSketchCustomer::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(JkSketchCustomer::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(JkSketchCustomer::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(JkSketchCustomer::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(JkSketchCustomer::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(JkSketchCustomer::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(JkSketchCustomer::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(JkSketchCustomer::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(JkSketchCustomer::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(JkSketchCustomer::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(JkSketchCustomer::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getInfo() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getInfo, pageWrap.getModel().getInfo());
+            queryWrapper.eq(JkSketchCustomer::getInfo, pageWrap.getModel().getInfo());
         }
         if (pageWrap.getModel().getSketchLineId() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getSketchLineId, pageWrap.getModel().getSketchLineId());
+            queryWrapper.eq(JkSketchCustomer::getSketchLineId, pageWrap.getModel().getSketchLineId());
         }
         if (pageWrap.getModel().getSketchId() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getSketchId, pageWrap.getModel().getSketchId());
+            queryWrapper.eq(JkSketchCustomer::getSketchId, pageWrap.getModel().getSketchId());
         }
         if (pageWrap.getModel().getTotalNum() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getTotalNum, pageWrap.getModel().getTotalNum());
+            queryWrapper.eq(JkSketchCustomer::getTotalNum, pageWrap.getModel().getTotalNum());
         }
-        if (pageWrap.getModel().getOrderNum() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getOrderNum, pageWrap.getModel().getOrderNum());
+        if (pageWrap.getModel().getOrderId() != null) {
+            queryWrapper.eq(JkSketchCustomer::getOrderId, pageWrap.getModel().getOrderId());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(JkSketchCustomer::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(JkSketchCustomer::getSortnum, pageWrap.getModel().getSortnum());
         }
-        if (pageWrap.getModel().getDateInfo() != null) {
-            queryWrapper.lambda().ge(JkSketchCustomer::getDateInfo, Utils.Date.getStart(pageWrap.getModel().getDateInfo()));
-            queryWrapper.lambda().le(JkSketchCustomer::getDateInfo, Utils.Date.getEnd(pageWrap.getModel().getDateInfo()));
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(jkSketchCustomerMapper.selectPage(page, queryWrapper));
+
+        queryWrapper.orderByAsc(JkSketchCustomer::getSketchLineId);
+        IPage<JkSketchCustomer> result = jkSketchCustomerMapper.selectJoinPage(page, JkSketchCustomer.class,queryWrapper);
+        return PageData.from(result);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchLineServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchLineServiceImpl.java
index becfce2..2aa3ea3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchLineServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchLineServiceImpl.java
@@ -1,15 +1,17 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.JkSketchLineMapper;
-import com.doumee.dao.business.model.JkSketchLine;
 import com.doumee.service.business.JkSketchLineService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -80,8 +82,21 @@
 
     @Override
     public List<JkSketchLine> findList(JkSketchLine jkSketchLine) {
-        QueryWrapper<JkSketchLine> wrapper = new QueryWrapper<>(jkSketchLine);
-        return jkSketchLineMapper.selectList(wrapper);
+        MPJLambdaWrapper<JkSketchLine> wrapper = new MPJLambdaWrapper<>();
+        wrapper.selectAll(JkSketchLine.class )
+                .selectAs(Member::getName,JkSketchLine::getMemberName)
+                .selectAs(Cars::getCode,JkSketchLine::getCarCode)
+                .selectAs(JkLine::getName,JkSketchLine::getLineName)
+                .selectAs(Category::getId,JkSketchLine::getCategoryId)
+                .selectAs(Category::getName,JkSketchLine::getCategoryName)
+                .leftJoin(JkLine.class,JkLine::getId,JkOrders::getLineId )
+                .leftJoin(Cars.class,Cars::getId,JkLine::getCarId )
+                .leftJoin(Member.class,Member::getId,Cars::getMemberId )
+                .leftJoin(Category.class,Category::getId,JkLine::getCategoryId );
+        wrapper.eq( jkSketchLine.getSketchId()!=null,JkSketchLine::getSketchId, jkSketchLine.getSketchId())
+                .eq(  JkSketchLine::getIsdeleted,Constants.ZERO);
+
+        return jkSketchLineMapper.selectJoinList(JkSketchLine.class,wrapper);
     }
   
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
index 3bab1bb..f957eef 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
@@ -1,20 +1,38 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.excel.ExcelImporter;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.admin.request.JkCustomerImport;
+import com.doumee.dao.admin.request.JkOrdersImport;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.JkSketchMapper;
-import com.doumee.dao.business.model.JkSketch;
 import com.doumee.service.business.JkSketchService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 浜ゆ帶-绾胯矾浼樺寲璁板綍淇℃伅琛⊿ervice瀹炵幇
@@ -26,6 +44,22 @@
 
     @Autowired
     private JkSketchMapper jkSketchMapper;
+    @Autowired
+    private JkSketchLineMapper jkSketchLineMapper;
+    @Autowired
+    private JkSketchCustomerMapper jkSketchCustomerMapper;
+    @Autowired
+    private JkCustomerMapper jkCustomerMapper;
+    @Autowired
+    private JkLineMapper jkLineMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private JkOrdersMapper jkOrdersMapper;
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
 
     @Override
     public Integer create(JkSketch jkSketch) {
@@ -87,61 +121,62 @@
     @Override
     public PageData<JkSketch> findPage(PageWrap<JkSketch> pageWrap) {
         IPage<JkSketch> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<JkSketch> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<JkSketch> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper.selectAll(JkSketch.class )
+                .selectAs(Category::getId,JkSketch::getCategoryId)
+                .selectAs(Category::getName,JkSketch::getCategoryName)
+                .leftJoin(Category.class,Category::getId,JkSketch::getCategoryId );
+        queryWrapper.eq( pageWrap.getModel().getCategoryId()!=null,JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
+
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(JkSketch::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(JkSketch::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(JkSketch::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(JkSketch::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(JkSketch::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(JkSketch::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(JkSketch::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(JkSketch::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(JkSketch::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(JkSketch::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(JkSketch::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(JkSketch::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(JkSketch::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(JkSketch::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(JkSketch::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(JkSketch::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getInfo() != null) {
-            queryWrapper.lambda().eq(JkSketch::getInfo, pageWrap.getModel().getInfo());
+            queryWrapper.eq(JkSketch::getInfo, pageWrap.getModel().getInfo());
         }
         if (pageWrap.getModel().getCategoryId() != null) {
-            queryWrapper.lambda().eq(JkSketch::getCategoryId, pageWrap.getModel().getCategoryId());
+            queryWrapper.eq(JkSketch::getCategoryId, pageWrap.getModel().getCategoryId());
         }
         if (pageWrap.getModel().getTotalNum() != null) {
-            queryWrapper.lambda().eq(JkSketch::getTotalNum, pageWrap.getModel().getTotalNum());
+            queryWrapper.eq(JkSketch::getTotalNum, pageWrap.getModel().getTotalNum());
         }
         if (pageWrap.getModel().getOrderNum() != null) {
-            queryWrapper.lambda().eq(JkSketch::getOrderNum, pageWrap.getModel().getOrderNum());
+            queryWrapper.eq(JkSketch::getOrderNum, pageWrap.getModel().getOrderNum());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(JkSketch::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(JkSketch::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(JkSketch::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(JkSketch::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getDateInfo() != null) {
-            queryWrapper.lambda().ge(JkSketch::getDateInfo, Utils.Date.getStart(pageWrap.getModel().getDateInfo()));
-            queryWrapper.lambda().le(JkSketch::getDateInfo, Utils.Date.getEnd(pageWrap.getModel().getDateInfo()));
+            queryWrapper.eq(JkSketch::getDateInfo,  pageWrap.getModel().getDateInfo());
         }
         if (pageWrap.getModel().getJobId() != null) {
-            queryWrapper.lambda().eq(JkSketch::getJobId, pageWrap.getModel().getJobId());
+            queryWrapper.eq(JkSketch::getJobId, pageWrap.getModel().getJobId());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(jkSketchMapper.selectPage(page, queryWrapper));
+        queryWrapper.orderByDesc(JkSketch::getDateInfo);
+        IPage<JkSketch> result = jkSketchMapper.selectJoinPage(page, JkSketch.class,queryWrapper);
+        return PageData.from(result);
     }
 
     @Override
@@ -149,4 +184,309 @@
         QueryWrapper<JkSketch> wrapper = new QueryWrapper<>(jkSketch);
         return jkSketchMapper.selectCount(wrapper);
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public List<JkSketch> importBatch(MultipartFile file, String dateInfoStr, LoginUserInfo loginUser){
+        if(StringUtils.isBlank(dateInfoStr)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨閫佽揣鏃ユ湡锛�");
+        }
+        Date dateInfo = DateUtil.getDateFromShortString(dateInfoStr);
+        if(dateInfo == null){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勯�佽揣鏃ユ湡锛�");
+        }
+        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_JKORDERS);
+        if(importing!=null && importing){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
+        }
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKORDERS,true,30, TimeUnit.MINUTES);
+        try {
+            ExcelImporter ie = null;
+            List<JkOrdersImport> dataList =null;
+            try {
+                ie = new ExcelImporter(file,1,0);
+                dataList = ie.getDataList(JkOrdersImport.class,null);
+            }  catch (Exception e) {
+                e.printStackTrace();
+            }
+            if(dataList == null || dataList.size() ==0){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+            }
+            List<JkCustomer> customerList =  jkCustomerMapper.selectJoinList(JkCustomer.class,new MPJLambdaWrapper<JkCustomer>()
+                    .selectAll(JkCustomer.class)
+                    .eq(JkCustomer::getIsdeleted,Constants.ZERO)
+            );
+            //褰撳墠鎵�鏈夌嚎璺�
+            List<JkLine> lineList =  jkLineMapper.selectJoinList(JkLine.class,new MPJLambdaWrapper<JkLine>()
+                    .selectAll(JkLine.class)
+                    .eq(JkLine::getIsdeleted,Constants.ZERO)
+            );
+            List<JkOrders> newOrderList = new ArrayList<>();
+            for(int i=0;i<dataList.size();i++){
+                JkOrdersImport model = dataList.get(i);
+                if(StringUtils.isBlank(model.getName())
+                        &&StringUtils.isBlank(model.getCode())
+                        &&StringUtils.isBlank(model.getNum())
+                        &&StringUtils.isBlank(model.getSortnum())
+                        &&StringUtils.isBlank(model.getDateInfo())
+                        &&StringUtils.isBlank(model.getLineName()) ){
+                    continue;
+                }
+                checkModelParam(model, newOrderList, i,dateInfo,loginUser,customerList,lineList );
+            }
+            if( newOrderList.size()==0){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏈夋晥鏁版嵁涓虹┖锛�");
+            }
+            List<JkSketch> newList = initNewSketchList(newOrderList);//鎸夌収涓荤嚎璺垎缁�
+            if(  newList.size() ==0 ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏈夋晥鏁版嵁涓虹┖锛�");
+            }
+            jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda()
+                    .set(JkSketch::getIsdeleted,Constants.ONE)
+                    .eq(JkSketch::getIsdeleted,Constants.ZERO)
+                    .eq(JkSketch::getDateInfo,dateInfo));
+            jkOrdersMapper.update(null,new UpdateWrapper<JkOrders>().lambda()
+                    .set(JkOrders::getIsdeleted,Constants.ONE)
+                    .eq(JkOrders::getIsdeleted,Constants.ZERO)
+                    .eq(JkOrders::getDateInfo,dateInfo));
+            if(newList.size()>0){
+                jkSketchMapper.insert(newList);
+            }
+            if(newOrderList.size()>0){
+                jkOrdersMapper.insert(newOrderList);
+            }
+
+            List<JkSketchLine> sketchLineList = initNewSketchLineList(newList,newOrderList);
+            jkSketchLineMapper.update(null,new UpdateWrapper<JkSketchLine>().lambda()
+                    .set(JkSketchLine::getIsdeleted,Constants.ONE)
+                    .eq(JkSketchLine::getIsdeleted,Constants.ZERO)
+                    .eq(JkSketchLine::getDateInfo,dateInfo));
+            if(sketchLineList.size()>0){
+                jkSketchLineMapper.insert(sketchLineList);
+            }
+
+            List<JkSketchCustomer> sketchCuustomerList = initNewSketchCustomerList(sketchLineList,newOrderList);//鎸夌収涓荤嚎璺垎缁�
+            jkSketchCustomerMapper.update(null,new UpdateWrapper<JkSketchCustomer>().lambda()
+                    .set(JkSketchCustomer::getIsdeleted,Constants.ONE)
+                    .eq(JkSketchCustomer::getIsdeleted,Constants.ZERO)
+                    .eq(JkSketchCustomer::getDateInfo,dateInfo));
+            if(sketchCuustomerList.size()>0){
+                jkSketchCustomerMapper.insert(sketchCuustomerList);
+            }
+            return newList;
+        }catch (BusinessException e){
+            throw e;
+        }catch (Exception e){
+            e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯");
+        }finally {
+            redisTemplate.delete(Constants.RedisKeys.IMPORTING_JKORDERS);
+        }
+
+    }
+
+    private List<JkSketchCustomer> initNewSketchCustomerList(List<JkSketchLine> sketchLineList, List<JkOrders> newOrderList) {
+        List<JkSketchCustomer> list =new ArrayList<>();
+        for(JkOrders orders : newOrderList){
+            JkSketchLine line = findModelFromListByLineId(orders.getLineId(),sketchLineList);
+            if( line!=null){
+                JkSketchCustomer tModel =  new JkSketchCustomer();
+                tModel.setCreator(orders.getCreator());
+                tModel.setOrderId(orders.getId());
+                tModel.setCreateDate(orders.getCreateDate());
+                tModel.setTotalNum(orders.getNum());
+                tModel.setDateInfo(orders.getDateInfo());
+                tModel.setSortnum(list.size()+1);
+                tModel.setEditDate(tModel.getCreateDate());
+                tModel.setEditor(tModel.getCreator());
+                tModel.setIsdeleted(Constants.ZERO);
+                tModel.setSketchId(line.getSketchId());
+                tModel.setCustomerId(orders.getCustomerId());
+                tModel.setSketchLineId(line.getId());
+                list.add(tModel);
+            }
+        }
+        return list;
+    }
+    private List<JkSketchLine> initNewSketchLineList(List<JkSketch> newList, List<JkOrders> newOrderList) {
+        List<JkSketchLine> list =new ArrayList<>();
+        for(JkOrders orders : newOrderList){
+            JkSketchLine tModel = findModelFromListByLineId(orders.getLineId(),list);
+            if(tModel!=null){
+                tModel.setTotalNum(  tModel.getTotalNum().add(orders.getNum()));//璁㈠崟閲忕疮璁�
+                tModel.setOrderNum(tModel.getOrderNum()+1);//瀹㈡埛鏁板姞1
+            }else{
+                tModel = new JkSketchLine();
+                tModel.setSketchId(getSKetchIdByyCategoryId(orders.getCategoryId(),newList));
+                tModel.setCreator(orders.getCreator());
+                tModel.setCreateDate(orders.getCreateDate());
+                tModel.setLineId(orders.getLineId());
+                tModel.setTotalNum(orders.getNum());
+                tModel.setOrderNum(1);
+                tModel.setDateInfo(orders.getDateInfo());
+                tModel.setSortnum(list.size()+1);
+                tModel.setEditDate(tModel.getCreateDate());
+                tModel.setEditor(tModel.getCreator());
+                tModel.setIsdeleted(Constants.ZERO);
+                if(tModel.getSketchId()!=null){
+                    list.add(tModel);
+                }
+            }
+        }
+        return list;
+    }
+
+    private Integer getSKetchIdByyCategoryId(Integer categoryId, List<JkSketch> newList) {
+        for(JkSketch model:newList){
+            if(Constants.equalsInteger(model.getCategoryId(),categoryId)){
+                return model.getId();
+            }
+        }
+        return null;
+    }
+
+    private JkSketchLine findModelFromListByLineId(Integer lineId, List<JkSketchLine> list) {
+        if(list !=null){
+            for(JkSketchLine model : list){
+                if(Constants.equalsInteger(lineId,model.getLineId())){
+                    return  model;
+                }
+            }
+        }
+        return null;
+    }
+
+    private   List<JkSketch>  initNewSketchList(List<JkOrders> newOrderList) {
+        List<JkSketch> list =new ArrayList<>();
+        for(JkOrders orders : newOrderList){
+            JkSketch tModel = findModelFromListByCateId(orders.getCategoryId(),list);
+            if(tModel!=null){
+                tModel.setTotalNum(  tModel.getTotalNum().add(orders.getNum()));//璁㈠崟閲忕疮璁�
+                tModel.setOrderNum(tModel.getOrderNum()+1);//瀹㈡埛鏁板姞1
+            }else{
+                tModel = new JkSketch();
+                tModel.setLineNum(getLineNumByOrders(orders.getCategoryId(),newOrderList));
+                tModel.setCreator(orders.getCreator());
+                tModel.setCreateDate(orders.getCreateDate());
+                tModel.setCategoryId(orders.getCategoryId());
+                tModel.setTotalNum(orders.getNum());
+                tModel.setOrderNum(1);
+                tModel.setDateInfo(orders.getDateInfo());
+                tModel.setSortnum(list.size()+1);
+                tModel.setEditDate(tModel.getCreateDate());
+                tModel.setEditor(tModel.getCreator());
+                tModel.setStatus(Constants.ZERO);
+                tModel.setIsdeleted(Constants.ZERO);
+                list.add(tModel);
+            }
+        }
+        return list;
+    }
+
+    private Integer getLineNumByOrders(Integer cateId, List<JkOrders> newOrderList) {
+        List<JkSketchLine> list =new ArrayList<>();
+        for(JkOrders orders : newOrderList){
+            if(!Constants.equalsInteger(orders.getCategoryId(),cateId)){
+                continue;
+            }
+            JkSketchLine tModel = findModelFromListByLineId(orders.getLineId(),list);
+            if(tModel ==null){
+                tModel = new JkSketchLine();
+                tModel.setLineId(orders.getLineId());
+                list.add(tModel);
+            }
+        }
+        return list.size();
+    }
+
+
+    private JkOrders checkModelParam(JkOrdersImport model
+            , List<JkOrders> newOrderList
+            ,int index
+            ,Date dateInfo
+            ,LoginUserInfo loginUserInfo
+            ,List<JkCustomer> allList
+            ,List<JkLine> lineList ) {
+        if(StringUtils.isBlank(model.getName())
+                ||StringUtils.isBlank(model.getCode())
+                ||StringUtils.isBlank(model.getName())
+                ||StringUtils.isBlank(model.getLineName()) ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+(index+3)+"琛屽鎴蜂俊鎭笉瀹屾暣锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+        }
+        for(JkOrders param: newOrderList){
+            if(StringUtils.isNotBlank(model.getCode())&&StringUtils.isNotBlank(param.getCode())) {
+                if (StringUtils.equals(model.getCode(), param.getCode())) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛屽鎴风畝鐮併��" + model.getName() + "銆戦噸澶嶅嚭鐜帮紝璇锋鏌ヨ〃鏍煎唴瀹癸紒");
+                }
+            }
+        }
+        JkCustomer customer = findModelFromList(model.getCode(),allList);
+        if(customer == null){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛屽鎴风紪鐮併��" + model.getCode() + "銆戜笉瀛樺湪锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+        }
+        if(!StringUtils.equals(customer.getName(),model.getName())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛屽鎴峰悕绉般��" + model.getName() + "銆戝拰缂栫爜涓嶅尮閰嶏紝璇锋鏌ヨ〃鏍煎唴瀹癸紒");
+        }
+        JkLine line = findLineFromListByName(model.getLineName(),lineList);
+        if(line == null){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛岀嚎璺��" + model.getLineName() + "銆戜笉瀛樺湪锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+        }
+
+        JkOrders tModel =   new JkOrders();
+        tModel.setCreator(loginUserInfo.getId());
+        tModel.setCreateDate(new Date());
+        tModel.setName(model.getName());
+        tModel.setCode(model.getCode());
+        tModel.setNum(getDecimalByVal(model.getNum()));
+        tModel.setCustomerId(customer.getId());
+        tModel.setDateInfo(dateInfo);
+        tModel.setSortnum(model.getSortnum());
+        tModel.setLineId(line.getId());
+        tModel.setCategoryId(line.getCategoryId());
+        tModel.setEditDate(new Date());
+        tModel.setEditor(loginUserInfo.getId());
+        tModel.setIsdeleted(Constants.ZERO);
+        newOrderList.add(tModel);
+        return tModel;
+    }
+
+    private BigDecimal getDecimalByVal(String val) {
+        try {
+            return new BigDecimal(val);
+        }catch (Exception e){
+
+        }
+        return null;
+    }
+
+    private JkCustomer findModelFromList(String code, List<JkCustomer> list) {
+        if(list !=null){
+            for(JkCustomer model : list){
+                if(StringUtils.equals(code,model.getCode())){
+                    return  model;
+                }
+            }
+        }
+        return null;
+    }
+    private JkSketch findModelFromListByCateId(Integer cateId, List<JkSketch> list) {
+        if(list !=null){
+            for(JkSketch model : list){
+                if(Constants.equalsInteger(cateId,model.getCategoryId())){
+                    return  model;
+                }
+            }
+        }
+        return null;
+    }
+    private JkLine findLineFromListByName(String name, List<JkLine> list) {
+        if(list !=null){
+            for(JkLine model : list){
+                if(StringUtils.equals(name,model.getName())){
+                    return model;
+                }
+            }
+        }
+        return null;
+    }
 }
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 18f4d81..bc1b948 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
@@ -78,6 +78,7 @@
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -2140,7 +2141,7 @@
         if(importing!=null && importing){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ憳宸ュ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
         }
-        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_MEMBER,true);
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_MEMBER,true,30, TimeUnit.MINUTES);
         try {
             ExcelImporter ie = null;
             List<MemberImport> dataList =null;

--
Gitblit v1.9.3