From bf15135228cbb9ac186cc8cc39e9da32d3f1d90f Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 19 六月 2024 15:51:19 +0800
Subject: [PATCH] 提交一把

---
 company/src/components/enterprise/importEmployees.vue                                        |   99 ++++++
 company/src/api/business/member.js                                                           |    4 
 company/src/components/enterprise/additionSubtractionApplication.vue                         |   20 
 company/src/components/business/OperaWtbApplyShopWindow.vue                                  |   20 +
 company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue                           |   56 +--
 company/src/components/business/OperaInsuranceApplyWindow.vue                                |   22 +
 company/src/components/enterprise/addEmployeeWithDu.vue                                      |  195 +++++++++++++
 company/src/views/enterprise/myPolicy.vue                                                    |   13 
 server/company/src/main/java/com/doumee/api/business/MemberController.java                   |   10 
 server/service/src/main/java/com/doumee/dao/business/dto/MemberReduceImport.java             |   52 +++
 server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java         |  267 +++++++++++++-----
 company/public/template/personnel_reduce.xlsx                                                |    0 
 server/service/src/main/java/com/doumee/dao/business/dto/MemberImport.java                   |   15 
 server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java |   14 
 company/src/assets/style/style.scss                                                          |   14 +
 company/src/views/enterprise/insuranceApply.vue                                              |   13 
 server/service/src/main/java/com/doumee/service/business/MemberService.java                  |    2 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java                  |   11 
 18 files changed, 674 insertions(+), 153 deletions(-)

diff --git a/company/public/template/personnel_reduce.xlsx b/company/public/template/personnel_reduce.xlsx
new file mode 100644
index 0000000..cce2001
--- /dev/null
+++ b/company/public/template/personnel_reduce.xlsx
Binary files differ
diff --git a/company/src/api/business/member.js b/company/src/api/business/member.js
index 1a50806..e61cad0 100644
--- a/company/src/api/business/member.js
+++ b/company/src/api/business/member.js
@@ -21,6 +21,10 @@
 export function importExcel (data) {
     return request.post('/business/member/importExcel', data)
 }
+// 瀵煎叆妯℃澘
+export function importReuduceExcel (data) {
+    return request.post('/business/member/importReuduceExcel', data)
+}
 
 // 鍒楄〃鏌ヨ
 export function findList (data) {
diff --git a/company/src/assets/style/style.scss b/company/src/assets/style/style.scss
index 9c7344c..620ff86 100644
--- a/company/src/assets/style/style.scss
+++ b/company/src/assets/style/style.scss
@@ -101,6 +101,20 @@
 .du-status2 {
   color: #F95601 !important;
 }
+
+.tip-warn {
+  margin: 4px 0 25px 0;
+  font-size: 12px;
+  color: #999;
+  line-height: 25px;
+  i {
+    color: orange;
+    margin-right: 4px;
+    font-size: 14px;
+    position: relative;
+    top: 1px;
+  }
+}
 .union-change-status2,
   .apply-status5,.apply-status27,.settle-status7,.change-status2,
   .tax-status1,.du-status1,.settle-status4 ,.union-apply-status3 {
diff --git a/company/src/components/business/OperaInsuranceApplyWindow.vue b/company/src/components/business/OperaInsuranceApplyWindow.vue
index 46c2341..543a23e 100644
--- a/company/src/components/business/OperaInsuranceApplyWindow.vue
+++ b/company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -11,7 +11,7 @@
                 <div class="desc_item_label" v-if="userInfo.type === 1 &&(model.statusCollect === 2 || model.statusCollect === 3)">
                     <div class="desc_item_label_left">
                         <span>淇濋櫓鍒版湡杩樻湁 <b style="color: #F95601;">{{model.loseEfficacyDays ? model.loseEfficacyDays : '-'}}</b> 澶�</span>
-                        <el-button type="primary" v-if="model.statusCollect === 2 || model.statusCollect === 3" @click="$refs.OperaInsuranceApplyAddWindow.open('缁繚', {id: dataId,type: 1 })">涓�閿画淇�</el-button>
+                        <el-button type="primary" v-if="model.statusCollect === 2 || model.statusCollect === 3" @click="goYjxb">涓�閿画淇�</el-button>
                         <el-button type="primary" v-if="model.statusCollect === 2" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: dataId })">鍔犲噺淇濈敵璇�</el-button>
                         <el-button type="primary" v-if="model.statusCollect === 2" @click="$refs.factoryChange.open('鏇存崲娲鹃仯鍗曚綅鐢宠', { id: dataId })">鏇存崲娲鹃仯鍗曚綅鐢宠</el-button>
                     </div>
@@ -29,7 +29,7 @@
 <!--                          $refs.operaverifyPhoneNumberWindew.open('楠岃瘉鎵嬫満鍙�')-->
                         <el-button v-if="model.status == 2" type="primary" :disabled="loading" :loading="loading" @click="goSign()">绛剧讲鎶曚繚鍗�</el-button>
                         <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
-                        <el-button v-if="model.status == 4" type="primary" @click="$refs.OperaInsuranceApplyAddWindow.open('鎶曚繚鐢宠', {id: dataId})">鍐嶆鎶曚繚</el-button>
+                        <el-button v-if="model.status == 4" type="primary" @click="$refs.operaInsuranceApplyAddWindow.open('鎶曚繚鐢宠', {id: dataId})">鍐嶆鎶曚繚</el-button>
                         <el-button v-if="[0, 2, 3, 10].includes(model.status)" type="danger" @click="$refs.applyReturn.open('鐢宠閫�鍥�', {id: dataId})">鐢宠閫�鍥�</el-button>
                         <el-button v-if="model.status == 4" type="primary" @click="closeOrder">鍏抽棴璁㈠崟</el-button>
                       </template>
@@ -455,7 +455,7 @@
         <!--    浼佷笟鐢宠閫�鍥�    -->
         <applyReturn ref="applyReturn" @success="successEvent" />
         <!--    鏂板鎶曚繚    -->
-        <OperaInsuranceApplyAddWindow ref="OperaInsuranceApplyAddWindow" @success="successEvent" />
+        <OperaInsuranceApplyAddWindow ref="operaInsuranceApplyAddWindow" @success="result" />
         <!--    鍔犲噺淇濈敵璇�    -->
         <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
         <!--    鏇存崲娲鹃仯鍗曚綅鐢宠    -->
@@ -485,13 +485,12 @@
 import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
 
 import applyReturn from '@/components/enterprise/applyReturn'
-import { getDetail, getSignLink, applyDetailPage, applyChagneDetailPage, exportExcel, applyChagneDetailExcel, applyOpt } from '@/api/business/insuranceApply'
+import { getDetail, getSignLink, applyDetailPage,  exportExcel, applyChagneDetailExcel, applyOpt } from '@/api/business/insuranceApply'
 import { findListByDTO } from '@/api/business/dispatchUnit'
 import { fetchList } from '@/api/business/applyChange'
 import { findListByDTO as worktypeFindListByDTO } from '@/api/business/worktype'
 import OperaInsuranceApplyAddWindow from '@/components/enterprise/OperaInsuranceApplyAddWindow'
 import { mapState } from 'vuex'
-
 import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
 export default {
   name: 'OperaInsuranceApplyWindow1',
@@ -502,11 +501,11 @@
     InsuranceDetails,
     OperaInsuranceApplyCheckWindow,
     applyReturn,
-    OperaInsuranceApplyAddWindow,
     additionSubtractionApplication,
     factoryChange,
     OperaApplyChangeDetailWindow,
     OperaApplyChangeUnitDetailWindow,
+    OperaInsuranceApplyAddWindow,
     operaverifyPhoneNumberWindew
   },
   data () {
@@ -587,6 +586,17 @@
       this.getDW()
       this.getGZ()
     },
+    result(flag,param){
+      console.log(flag,param)
+      if(param && param.godetail && param.id){
+        this.open('濮旀墭淇濊鎯�',{id:param.id})
+      }else{
+        this.successEvent()
+      }
+    },
+    goYjxb(){
+      this.$refs.operaInsuranceApplyAddWindow.open('缁繚', {id: this.dataId,type: 1 })
+    },
     // 鍏抽棴璁㈠崟
     closeOrder () {
       this.$confirm('纭鍏抽棴姝よ鍗曞悧?', '鎻愮ず', {
diff --git a/company/src/components/business/OperaWtbApplyShopWindow.vue b/company/src/components/business/OperaWtbApplyShopWindow.vue
index a1b815a..fac86e0 100644
--- a/company/src/components/business/OperaWtbApplyShopWindow.vue
+++ b/company/src/components/business/OperaWtbApplyShopWindow.vue
@@ -11,7 +11,7 @@
                 <div class="desc_item_label" v-if="userInfo.type === 1 && model.status ===27 ">
                     <div class="desc_item_label_left">
                         <span>淇濋櫓鍒版湡杩樻湁 <b style="color: #F95601;">{{model.loseEfficacyDays ? model.loseEfficacyDays : '-'}}</b> 澶�</span>
-                        <el-button type="primary" v-if="model.status === 27" @click="$refs.OperaInsuranceApplyAddWindow.open('缁繚', {id: dataId,type: 1 })">涓�閿画淇�</el-button>
+                        <el-button type="primary" v-if="model.status === 27" @click="goYjxb">涓�閿画淇�</el-button>
                         <el-button type="primary" v-if="model.status === 27 && ( model.loseEfficacyDays ||!model.loseEfficacyDays)" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: dataId })">鍔犲噺淇濈敵璇�</el-button>
                         <el-button type="primary" v-if="model.status === 27 &&  ( model.loseEfficacyDays ||!model.loseEfficacyDays)" @click="$refs.factoryChange.open('鏇存崲娲鹃仯鍗曚綅鐢宠', { id: dataId })">鏇存崲娲鹃仯鍗曚綅鐢宠</el-button>
                     </div>
@@ -461,7 +461,7 @@
         <!--    浼佷笟鐢宠閫�鍥�    -->
         <applyReturn ref="applyReturn" @success="successEvent" />
         <!--    鏂板鎶曚繚    -->
-        <OperaInsuranceApplyAddWindowNew ref="OperaInsuranceApplyAddWindow" @success="successEvent" />
+        <OperaInsuranceApplyAddWindowNew ref="OperaInsuranceApplyAddWindow" @success="result" />
         <!--    鍔犲噺淇濈敵璇�    -->
         <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
         <!--    鏇存崲娲鹃仯鍗曚綅鐢宠    -->
@@ -505,10 +505,9 @@
       </el-dialog>
     </GlobalWindow>
 </template>
-
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
-import OperaInsuranceApplyAddWindowNew from '@/components/enterprise/OperaInsuranceApplyAddWindowNew'
+import OperaInsuranceApplyAddWindowNew from '@/components/enterprise/OperaInsuranceApplyAddWindow'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import InsuranceDetails from '@/components/business/InsuranceDetails'
 import OperaWtbApplyCheckWindow from '@/components/business/OperaWtbApplyCheckWindow'
@@ -532,7 +531,7 @@
 import { fetchList } from '@/api/business/applyChange'
 import { findListByDTO as worktypeFindListByDTO } from '@/api/business/worktype'
 import { mapState } from 'vuex'
-import {sendSms} from "@/api/business/smsEmail";
+import {sendSms} from '@/api/business/smsEmail';
 
 export default {
   name: 'OperaWtbApplyShopWindow',
@@ -906,6 +905,9 @@
         this.$tip.apiFailed(err)
       })
     },
+    goYjxb(){
+      this.$refs.OperaInsuranceApplyAddWindow.open('缁繚', {id: this.dataId,type: 1 })
+    },
     viewToubaodan () {
       if (this.model.toubaodanSignedFile && this.model.toubaodanSignedFile.fileurlFull) {
         setTimeout(() => {
@@ -960,6 +962,14 @@
       }).catch(err => {
       })
     },
+    result(flag,param){
+      console.log(flag,param)
+      if(param && param.godetail && param.id){
+       this.open('濮旀墭淇濊鎯�',{id:param.id})
+      }else{
+        this.successEvent()
+      }
+    },
     successEvent () {
       // this.visible=false
       this.getDetail()
diff --git a/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue b/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
index 7e8a4ab..15fb687 100644
--- a/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
+++ b/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
@@ -168,10 +168,10 @@
     <confirmJobType ref="confirmJobType" @result="getUser" />
     <!--    鏌ョ湅璇﹀崟    -->
     <detailsPolicyholder ref="detailsPolicyholder" @success="successEvent" />
-    <!--    鐩翠繚鎶曚繚璇︽儏    -->
+<!--    &lt;!&ndash;    鐩翠繚鎶曚繚璇︽儏    &ndash;&gt;
     <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" />
-    <!--    濮旀墭鎶曚繚璇︽儏    -->
-    <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" />
+    &lt;!&ndash;    濮旀墭鎶曚繚璇︽儏    &ndash;&gt;
+    <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" />-->
   </GlobalWindow>
 </template>
 
@@ -179,28 +179,30 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import selectEmployees from '@/components/enterprise/selectEmployees'
-import addEmployee from '@/components/enterprise/addEmployee'
+import addEmployee from '@/components/enterprise/addEmployeeWithDu'
 import importEmployees from '@/components/enterprise/importEmployees'
 import confirmJobType from '@/components/enterprise/confirmJobType'
 import detailsPolicyholder from '@/components/business/detailsPolicyholder'
-import OperaInsuranceApplyDetails from '@/components/business/OperaInsuranceApplyWindow'
-import OperaWtbApplyShopWindow from '@/components/business/OperaWtbApplyShopWindow'
 import { all, getNewVersion } from '@/api/business/solutions'
 import { mapState } from 'vuex'
-import { create, getCountCyclePriceVO, getDetail, findList, updateData } from '@/api/business/insuranceApply'
+import { create, getCountCyclePriceVO, getDetail, findList } from '@/api/business/insuranceApply'
 import { UTable, UTableColumn } from 'umy-ui'
-// Vue.component(UTable.name, UTable);
-// Vue.component(UTableColumn.name, UTableColumn);
 export default {
   name: 'OperaInsuranceApplyAddWindowNew',
   extends: BaseOpera,
   components: {
-    GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType, detailsPolicyholder, UTable, UTableColumn
-    ,  OperaWtbApplyShopWindow, OperaInsuranceApplyDetails
+    GlobalWindow,
+    selectEmployees,
+    addEmployee,
+    importEmployees,
+    confirmJobType,
+    detailsPolicyholder,
+    UTable,
+    UTableColumn
   },
   data () {
     return {
-      sumFee:0,
+      sumFee: 0,
       form: {
         id: null,
         ID: null,
@@ -240,7 +242,7 @@
     // 鐩戝惉tableData鐨勫彉鍖�
     tableData: {
       deep: true,
-      handler(newVal, oldVal) {
+      handler (newVal, oldVal) {
         // 鏁版嵁鍙樺寲鏃剁殑澶勭悊閫昏緫
         this.getSummaries2()
         console.log(this.tableData.length)
@@ -262,15 +264,9 @@
         solutionId: this.form.solutionId
       }).then(res => {
         console.log(res)
-        this.visible = false
-        if (this.item.type == 1) {
-          this.$emit('success', 1, { id: res })
-          this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: res })
-        } else {
-          this.$emit('success', 1, { id: res })
-          this.$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: res })
-        }
+        this.$emit('success', 1, { id: res,godetail:true,type:this.item.type})
         this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+        this.visible = false
         // this.$emit('success','濮旀墭鎶曚繚璇︽儏', { id: res })
       })
         .catch(e => {
@@ -364,7 +360,7 @@
           })
           sums[index] = total.toFixed(2)
           // }
-        }else {
+        } else {
           sums[index] = ''
         }
       })
@@ -372,8 +368,8 @@
       return sums
     },
     getSummaries2 () {
-      this.sumFee = 0;
-      if(this.tableData&&this.tableData.length){
+      this.sumFee = 0
+      if (this.tableData && this.tableData.length) {
         this.tableData.forEach((column, index) => {
           this.sumFee = parseFloat(this.sumFee) + parseFloat(column.fee)
         })
@@ -412,9 +408,9 @@
 
           let price = 0
           // if (this.item && this.item.type != 1) {
-            this.tableData.forEach(item => {
-              price = price + item.fee
-            })
+          this.tableData.forEach(item => {
+            price = price + item.fee
+          })
           // }
           this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
             companyName: this.userInfo.company.name,
@@ -481,7 +477,7 @@
         this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
         return
       }
-      this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.tableData, price: this.price })
+      this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.tableData, price: this.price, solutionId: this.form.solutionId })
     },
     uploadUser () {
       if (!this.form.solutionId) {
@@ -492,7 +488,7 @@
     },
     // 鍒囨崲鏂规
     changeSolution (e) {
-      this.sumFee =0;
+      this.sumFee = 0
       this.form.applyEndTime = ''
       this.form.applyStartTime = ''
       if (!this.form.id) {
@@ -536,7 +532,7 @@
         })
       this.tableData.forEach(item => {
         // if (this.item.type != 0) {
-          item.fee = this.price
+        item.fee = this.price
         // }
       })
     },
diff --git a/company/src/components/enterprise/addEmployeeWithDu.vue b/company/src/components/enterprise/addEmployeeWithDu.vue
new file mode 100644
index 0000000..e181877
--- /dev/null
+++ b/company/src/components/enterprise/addEmployeeWithDu.vue
@@ -0,0 +1,195 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :inline="true" class="demo-form-inline">
+            <div v-for="(item, index) in list" :key="index">
+                <el-form-item label="濮撳悕" required>
+                    <el-input v-model="item.memberName" placeholder="璇疯緭鍏�"></el-input>
+                </el-form-item>
+                <el-form-item label="韬唤璇佸彿" required>
+                    <el-input v-model="item.idCard" maxlength="18" placeholder="璇疯緭鍏�"></el-input>
+                </el-form-item>
+              <el-form-item label="娲鹃仯鍗曚綅" >
+                <el-select v-model="item.duId" @change="selectChange(index)" placeholder="璇烽�夋嫨" clearable>
+                  <el-option
+                      v-for="item in dispatching"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鎵�灞炲伐绉�" >
+                <el-select v-model="item.worktypeId" @change="selectChangeWT(index)"  placeholder="璇烽�夋嫨" clearable>
+                  <el-option
+                      v-for="item1 in item.options"
+                      :key="item1.id"
+                      :label="item1.name"
+                      :value="item1.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" v-if="index === 0" @click="add">娣诲姞</el-button>
+                    <el-button type="danger" v-else @click="dele(index)">鍒犻櫎</el-button>
+                </el-form-item>
+            </div>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { findListByDTO } from '@/api/business/dispatchUnit'
+import { findListByDTO as worktype } from '@/api/business/worktype'
+export default {
+  name: 'addEmployee',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      tempIndex: -1,
+      dispatching: [],
+      solutionId: null,
+      list: [
+        {
+          memberName: '',
+          idCard: '',
+          workTypeName: '',
+          worktypeId: '',
+          duName: '',
+          options: [],
+          duId: '',
+          fee: ''
+        }
+      ],
+      price: 0,
+      arr: []
+    }
+  },
+  methods: {
+    open (title, obj, tempIndex) {
+      this.title = title
+      this.visible = true
+      this.tempIndex = tempIndex
+      this.solutionId = obj.solutionId
+      this.list = [
+        {
+          memberName: '',
+          idCard: '',
+          workTypeName: '',
+          worktypeId: '',
+          duName: '',
+          options: [],
+          duId: '',
+          fee: ''
+        }
+      ]
+      this.arr = obj.arr
+      this.price = obj.price
+      this.getFindListByDTO()
+    },
+    getFindListByDTO () {
+      findListByDTO({
+        solutionId: this.solutionId
+        // dataType: 0
+      }).then(res => {
+        this.dispatching = res
+      })
+    },
+    selectChange (index) {
+      this.list[index].options = []
+      let duSolutionId = ''
+      this.list[index].duName = null
+      this.dispatching.forEach(item => {
+        if (item.id === this.list[index].duId) {
+          duSolutionId = item.duSolutionId
+          this.list[index].duName = item.name
+        }
+      })
+      worktype({ id: duSolutionId, queryType: 1 })
+        .then(res => {
+          this.list[index].options = res
+        })
+    },
+    selectChangeWT (index) {
+      this.list[index].workTypeName =null
+      this.list[index].options.forEach(item => {
+        if (item.id === this.list[index].worktypeId) {
+          this.list[index].workTypeName = item.name
+        }
+      })
+    },
+    add () {
+      this.list.push({
+        memberName: '',
+        idCard: '',
+        workTypeName: '',
+        worktypeId: '',
+        duName: '',
+        duId: '',
+        options: [],
+        fee: '',
+        id: this.tempIndex - 1
+      })
+    },
+    dele (index) {
+      this.list.splice(index, 1)
+    },
+    hasDuplicates (arr) {
+      return arr.some((value, index) => arr.indexOf(value) !== index)
+    },
+    confirm () {
+      // 鍒ゆ柇鍒楄〃鍚︽槸鏈夌┖鍊�
+      // for (let i = 0; this.list.length; i++) {
+      //     if (!this.list[i].memberName || !this.list[i].idCard) {
+      //         this.$message.warning('璇峰厛瀹屽杽淇℃伅鍚庡啀鎻愪氦')
+      //         return
+      //     }
+      // }
+      // 鍒ゆ柇鏂板綍鍏ユ暟鎹韩浠借瘉鏄惁鏈夐噸澶�
+      const idcardList = this.list.map(item => item.idCard)
+      if (this.hasDuplicates(idcardList)) {
+        this.$message.warning('韬唤璇佹湁閲嶅')
+        return
+      }
+      // 鍒ゆ柇韬唤璇佹槸鍚︽湁鏁�
+      for (let i = 0; i < this.list.length; i++) {
+        const regExp = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
+        if (!regExp.test(this.list[i].idCard)) {
+          this.$message.warning(`绗�${i + 1}椤瑰憳宸ヨ韩浠借瘉涓嶅悎娉昤)
+          return
+        }
+      }
+      // 鍒ゆ柇璇︽儏鍒楄〃鏁版嵁韬唤璇佹槸鍚︽湁閲嶅
+      let next = true
+      this.list.forEach(item => {
+        this.arr.forEach(child => {
+          if (item.idCard === child.idCard) {
+            next = false
+          }
+        })
+      })
+      if (next) {
+        this.list.forEach(item => {
+          item.fee = this.price
+        })
+        this.$emit('result', this.list)
+        this.visible = false
+      } else {
+        this.$message.warning('韬唤璇佸彿涓嶈兘閲嶅锛�')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/enterprise/additionSubtractionApplication.vue b/company/src/components/enterprise/additionSubtractionApplication.vue
index 39ca24b..f382fa1 100644
--- a/company/src/components/enterprise/additionSubtractionApplication.vue
+++ b/company/src/components/enterprise/additionSubtractionApplication.vue
@@ -101,7 +101,7 @@
         <div class="btns">
             <div class="btns_item">
                 <el-button type="primary" @click="seleUser">閫夊彇鍛樺伐</el-button>
-                <el-button type="primary" @click="uploadUser" v-if="activeName !== '1'">瀵煎叆鍛樺伐</el-button>
+                <el-button type="primary" @click="uploadUser">瀵煎叆鍛樺伐</el-button>
                 <el-button type="primary" @click="addUser" v-if="activeName !== '1'">娣诲姞鍛樺伐</el-button>
                 <el-button type="danger" @click="deleItem">鍒犻櫎</el-button>
             </div>
@@ -350,14 +350,14 @@
           let total = 0
           if (this.activeName === '0') {
             this.form.addDetailList.forEach(item => {
-              total += item.fee
+              total += item.fee || 0
             })
-            sums[index] = total.toFixed(2)
+            sums[index] =  (total || 0).toFixed(2)
           } else {
             this.form.delDetailList.forEach(item => {
               total += item.reducePrice
             })
-            sums[index] =  total.toFixed(2)
+            sums[index] =  (total || 0).toFixed(2)
           }
         }
       })
@@ -485,9 +485,9 @@
         return
       }*/
       if (this.activeName === '0') {
-        this.$refs.selectEmployees.open('閫夊彇鍛樺伐', { arr: this.form.addDetailList, price: this.price, notInInsuranceApplyId: this.form.id, validTime: this.form.applyStartTime })
+        this.$refs.selectEmployees.open('閫夊彇鍔犱繚鍛樺伐', { arr: this.form.addDetailList, price: this.price, notInInsuranceApplyId: this.form.id, validTime: this.form.applyStartTime })
       } else {
-        this.$refs.selectEmployees.open('閫夊彇鍛樺伐', { arr: this.form.delDetailList, price: this.reducePrice, insuranceApplyId: this.form.id, validTime: this.form.applyStartTime })
+        this.$refs.selectEmployees.open('閫夊彇鍑忎繚鍛樺伐', { arr: this.form.delDetailList, price: this.reducePrice, insuranceApplyId: this.form.id, validTime: this.form.applyStartTime })
       }
     },
     addUser () {
@@ -496,9 +496,9 @@
         return
       }
       if (this.activeName === '0') {
-        this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.form.addDetailList, price: this.price })
+        this.$refs.addEmployee.open('娣诲姞鍔犱繚鍛樺伐', { arr: this.form.addDetailList, price: this.price })
       } else {
-        this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.form.delDetailList, price: this.reducePrice })
+        this.$refs.addEmployee.open('娣诲姞鍑忎繚鍛樺伐', { arr: this.form.delDetailList, price: this.reducePrice })
       }
     },
     uploadUser () {
@@ -507,9 +507,9 @@
         return
       }
       if (this.activeName === '0') {
-        this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.form.addDetailList, price: this.price, solutionId: this.form.solutionId })
+        this.$refs.importEmployees.open('鍔犱繚鍛樺伐鍚嶅崟', { arr: this.form.addDetailList,type:1, price: this.price, solutionId: this.form.solutionId })
       } else {
-        this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.form.delDetailList, price: this.reducePrice, solutionId: this.form.solutionId })
+        this.$refs.importEmployees.open('鍑忎繚鍛樺伐鍚嶅崟', { arr: this.form.delDetailList,type:0, price: this.reducePrice, solutionId: this.form.solutionId,insuranceApplyId: this.form.id  })
       }
     },
     // 鍒囨崲鏂规
diff --git a/company/src/components/enterprise/importEmployees.vue b/company/src/components/enterprise/importEmployees.vue
index 9aa8d16..45550ff 100644
--- a/company/src/components/enterprise/importEmployees.vue
+++ b/company/src/components/enterprise/importEmployees.vue
@@ -6,6 +6,12 @@
         :confirm-working="isWorking"
         @confirm="confirm"
     >
+      <p class="tip-warn" v-if="type ==1"><i class="el-icon-warning"></i>鎻愰啋锛�<br>
+         <span style="">鍔犱繚浜哄憳鍚嶅崟涓紝浜哄憳濮撳悕銆佽韩浠借瘉鍙枫�佹淳閬e崟浣嶅拰宸ョ淇℃伅鍧囦负蹇呭~椤癸紝澶囨敞淇℃伅鍙负绌猴紝璇峰綍鍏ュ悎娉曟暟鎹��</span>
+      </p>
+      <p class="tip-warn"  v-if="type !=1"><i class="el-icon-warning"></i>鎻愰啋锛�<br>
+        <span style="">鍑忎繚浜哄憳鍚嶅崟涓紝浜哄憳濮撳悕銆佽韩浠借瘉鍙峰潎涓哄繀濉」锛屽娉ㄤ俊鎭彲涓虹┖锛岃褰曞叆鍚堟硶鏁版嵁銆�</span>
+      </p>
         <el-form class="demo-form-inline">
             <el-form-item label="涓婁紶鍚嶅崟" required>
                 <div style="width: 100%;display: flex;align-items: center;">
@@ -26,7 +32,7 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
-import { importExcel } from '@/api/business/member'
+import { importExcel,importReuduceExcel } from '@/api/business/member'
 export default {
   name: 'importEmployees',
   extends: BaseOpera,
@@ -39,7 +45,9 @@
       price: 0,
       type: null,
       solutionId: null,
+      applyId: null,
       addList: [],
+      delList: [],
       fileName: ''
     }
   },
@@ -47,24 +55,24 @@
     open (title, obj) {
       this.title = title
       this.addList = []
+      this.delList = []
       this.fileName = ''
       this.type = obj.type
       this.visible = true
       this.solutionId = obj.solutionId
+      this.applyId = obj.insuranceApplyId
       this.list = obj.arr
       this.price = obj.price
-      this.importing=false
-      this.confirming=false
+      this.importing= false
+      this.confirming= false
     },
     // 瀵煎嚭妯℃澘
     exportTemplate () {
       // 鎶曚繚鐢宠
       if (this.type === 1) {
         window.open('/template/personnel_add.xlsx')
-        // window.open(process.env.VUE_APP_MEMBER1_URL)
       } else {
-        window.open('/template/personnel_add.xlsx')
-        // window.open(process.env.VUE_APP_MEMBER_URL)
+        window.open('/template/personnel_reduce.xlsx')
       }
     },
     clickRef () {
@@ -74,7 +82,15 @@
       this.importing=true
       this.$refs.fileExcel.click()
     },
-    result (e) {
+    result(e){
+      if (this.type === 1) {
+        this.result1(e)
+      } else {
+        this.result2(e)
+      }
+    },
+    result1 (e) {
+      this.addList = []
       const data = new FormData()
       data.append('file', e.target.files[0])
       data.append('solutionId', this.solutionId)
@@ -98,10 +114,41 @@
           this.$refs.fileExcel.value = null
         })
     },
+    result2 (e) {
+      this.delList = []
+      const data = new FormData()
+      data.append('file', e.target.files[0])
+      data.append('applyId', this.applyId)
+      importReuduceExcel(data)
+        .then(res => {
+          res.forEach(item => {
+            item.memberName = item.name
+          })
+          this.delList = res
+          this.fileName = e.target.files[0].name
+          this.importing =false
+        })
+        .catch(err => {
+          this.importing = false
+          this.$message.error(err)
+          this.fileName = ''
+        })
+        .finally(() => {
+          this.importing =false
+          this.$refs.fileExcel.value = null
+        })
+    },
     confirm () {
+      if (this.type === 1) {
+        this.confirm1()
+      } else {
+        this.confirm2()
+      }
+    },
+    confirm1 () {
       if(this.addList==null || this.addList.length ==0){
         this.$message.error('瀵煎叆浜哄憳鍚嶅崟涓虹┖锛岃鍏堜笂浼犱汉鍛樺悕鍗�')
-        return;
+        return
       }
       if(this.confirming){
         return
@@ -110,7 +157,13 @@
       for (let i = 0; i < this.addList.length; i++) {
         for (let a = 0; a < this.list.length; a++) {
           if (this.addList[i].idCard === this.list[a].idcardNo) {
-            this.$message.warning(`[${this.addList[i].name}]鍛樺伐閲嶅`)
+            this.$message.warning(`銆�${this.addList[i].name}銆戝憳宸ヨ韩浠借瘉銆�${this.addList[i].idCard}銆戦噸澶峘)
+            this.confirming = false
+            return
+          }
+          if (this.addList[i].idCard === this.list[a].idCard) {
+            this.$message.warning(`銆�${this.addList[i].name}銆戝憳宸ヨ韩浠借瘉銆�${this.addList[i].idCard}銆戦噸澶峘)
+            this.confirming = false
             return
           }
         }
@@ -118,10 +171,34 @@
       this.addList.forEach(item => {
         item.fee = this.price
       })
-
-      // this.confirming = false
       this.visible = false
       this.$emit('result', this.addList)
+    },
+    confirm2() {
+      if(this.delList==null || this.delList.length ==0){
+        this.$message.error('瀵煎叆浜哄憳鍚嶅崟涓虹┖锛岃鍏堜笂浼犱汉鍛樺悕鍗�')
+        return
+      }
+      if(this.confirming){
+        return
+      }
+      this.confirming = true
+      for (let i = 0; i < this.delList.length; i++) {
+        for (let a = 0; a < this.list.length; a++) {
+          if (this.delList[i].idCard === this.list[a].idcardNo) {
+            this.$message.warning(`銆�${this.delList[i].name}銆戝憳宸ヨ韩浠借瘉銆�${this.delList[i].idCard}銆戦噸澶峘)
+            this.confirming = false
+            return
+          }
+          if (this.delList[i].idCard === this.list[a].idCard) {
+            this.$message.warning(`銆�${this.delList[i].name}銆戝憳宸ヨ韩浠借瘉銆�${this.delList[i].idCard}銆戦噸澶峘)
+            this.confirming = false
+            return
+          }
+        }
+      }
+      this.visible = false
+      this.$emit('result', this.delList)
     }
   }
 }
diff --git a/company/src/views/enterprise/insuranceApply.vue b/company/src/views/enterprise/insuranceApply.vue
index 3db129b..b35060d 100644
--- a/company/src/views/enterprise/insuranceApply.vue
+++ b/company/src/views/enterprise/insuranceApply.vue
@@ -107,7 +107,7 @@
             </pagination>
         </template>
         <!--    鏂板鎶曚繚    -->
-        <OperaInsuranceApplyAddWindow ref="OperaInsuranceApplyAddWindow" @success="handlePageChange" />
+        <OperaInsuranceApplyAddWindow ref="OperaInsuranceApplyAddWindow" @success="result" />
         <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" @success="handlePageChange" />
         <!--    鎶曚繚璇︽儏    -->
         <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" @success="handlePageChange" />
@@ -155,6 +155,17 @@
           this.$refs.searchForm.resetFields()
           this.search()
       },
+    result(flag,param){
+      console.log(flag,param)
+      if(param && param.godetail && param.id){
+        if (param.type == 1) {
+          this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: param.id })
+        } else {
+          this.$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: param.id })
+        }
+      }
+      this.handlePageChange()
+    },
     godetail (row) {
       if (row.solutionType == 1) {
         this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: row.id })
diff --git a/company/src/views/enterprise/myPolicy.vue b/company/src/views/enterprise/myPolicy.vue
index 91636c2..c268ab0 100644
--- a/company/src/views/enterprise/myPolicy.vue
+++ b/company/src/views/enterprise/myPolicy.vue
@@ -141,7 +141,7 @@
             </pagination>
         </template>
         <!--    鏂板鎶曚繚    -->
-        <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @success="handlePageChange" />
+        <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @success="result" />
         <!--    鎶曚繚璇︽儏    -->
         <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" @success="handlePageChange" />
       <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" @success="handlePageChange" />
@@ -215,6 +215,17 @@
         this.$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: row.id })
       }
     },
+    result(flag,param){
+      console.log(flag,param)
+      if(param && param.godetail && param.id){
+        if (param.type == 1) {
+          this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: param.id })
+        } else {
+          this.$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: param.id })
+        }
+      }
+      this.handlePageChange()
+    },
     see () {
       this.searchForm.statusCollect = '7'
       this.search()
diff --git a/server/company/src/main/java/com/doumee/api/business/MemberController.java b/server/company/src/main/java/com/doumee/api/business/MemberController.java
index e617ad0..fa86c20 100644
--- a/server/company/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/company/src/main/java/com/doumee/api/business/MemberController.java
@@ -10,6 +10,7 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.dto.MemberImport;
 import com.doumee.dao.business.dto.MemberQueryDTO;
+import com.doumee.dao.business.dto.MemberReduceImport;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberInsurance;
 import com.doumee.service.business.MemberService;
@@ -124,5 +125,14 @@
     public ApiResponse<List<MemberImport>> importExcel (@ApiParam(value = "file") MultipartFile file,Integer  solutionId) {
         return ApiResponse.success(memberService.importBatch(file,solutionId));
     }
+    @ApiOperation(value = "浜哄憳鍑忎繚淇℃伅瀵煎叆" ,notes = "淇濆崟鐢宠")
+    @PostMapping("/importReuduceExcel")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    @RequiresPermissions("business:member:importExcel")
+    public ApiResponse<List<MemberReduceImport>> importReuduceExcel (@ApiParam(value = "file") MultipartFile file, Integer  applyId) {
+        return ApiResponse.success(memberService.importReduceBatch(file,applyId));
+    }
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/MemberImport.java b/server/service/src/main/java/com/doumee/dao/business/dto/MemberImport.java
index 4e56900..30cf01e 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/MemberImport.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/MemberImport.java
@@ -6,6 +6,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * 鍛樺伐淇℃伅瀵煎叆琛�
  * @author 姹熻箘韫�
@@ -15,22 +17,22 @@
 @ApiModel("鍛樺伐淇℃伅瀵煎叆")
 public class MemberImport {
 
-    @ExcelColumn(name="搴忓彿",value = "sn" )
+    @ExcelColumn(name="搴忓彿",value = "sn"  ,index = 1)
     private Integer sn;
 
-    @ExcelColumn(name="濮撳悕",value = "name" )
+    @ExcelColumn(name="濮撳悕",value = "name"  ,index = 2)
     private String name;
 
-    @ExcelColumn(name="韬唤璇佸彿",value = "idCard" )
+    @ExcelColumn(name="韬唤璇佸彿",value = "idCard"  ,index = 3)
     private String idCard;
 
-    @ExcelColumn(name="娲鹃仯鍗曚綅" , value = "duName")
+    @ExcelColumn(name="娲鹃仯鍗曚綅" , value = "duName" ,index = 4)
     private String duName;
 
-    @ExcelColumn(name="宸ョ" , value = "workTypeName")
+    @ExcelColumn(name="宸ョ" , value = "workTypeName" ,index = 5)
     private String workTypeName;
 
-    @ExcelColumn(name="澶囨敞",value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞",value = "澶囨敞" ,index = 6)
     private String remark;
 
     @ApiModelProperty(name="骞撮緞",value = "age")
@@ -45,4 +47,5 @@
     @ApiModelProperty(value = "鎵�灞炲伐绉嶄富閿�")
     private Integer worktypeId;
 
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/MemberReduceImport.java b/server/service/src/main/java/com/doumee/dao/business/dto/MemberReduceImport.java
new file mode 100644
index 0000000..f123bef
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/MemberReduceImport.java
@@ -0,0 +1,52 @@
+package com.doumee.dao.business.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鍛樺伐淇℃伅瀵煎叆琛�
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+@Data
+@ApiModel("鍛樺伐淇℃伅瀵煎叆")
+public class MemberReduceImport {
+
+    @ExcelColumn(name="搴忓彿",value = "sn" ,index = 1)
+    private Integer sn;
+
+    @ExcelColumn(name="濮撳悕",value = "name"  ,index = 2)
+    private String name;
+
+    @ExcelColumn(name="韬唤璇佸彿",value = "idCard"  ,index = 3)
+    private String idCard;
+
+    @ApiModelProperty(name="娲鹃仯鍗曚綅" , value = "workTypeName")
+    private String duName;
+    @ExcelColumn(name="澶囨敞",value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(name="宸ョ" , value = "workTypeName")
+    private String workTypeName;
+
+
+    @ApiModelProperty(name="骞撮緞",value = "age")
+    private Integer age;
+
+    @ApiModelProperty(value = "鎬у埆")
+    private Integer sex;
+
+    @ApiModelProperty(value = "娲鹃仯鍗曚綅涓婚敭")
+    private Integer duId;
+
+    @ApiModelProperty(value = "鎵�灞炲伐绉嶄富閿�")
+    private Integer worktypeId;
+
+    @ApiModelProperty(value = "璐圭敤")
+    private BigDecimal fee;
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
index 7694fc1..2fadde3 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
@@ -173,4 +173,15 @@
     @TableField(exist = false)
     private String companyName;
 
+    @ApiModelProperty(value = "淇濆崟鏄庣粏琛屾湇鍔¤垂")
+    @TableField(exist = false)
+    private BigDecimal detailServerCost;
+
+    @ApiModelProperty(value = "琛屼繚闄╃敓鏁堟鏈�")
+    @TableField(exist = false)
+    private Date parentEndTime;
+
+    @ApiModelProperty(value = "琛屼繚闄╃敓鏁堣捣鏈�")
+    @TableField(exist = false)
+    private Date parentStartTime;
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/MemberService.java b/server/service/src/main/java/com/doumee/service/business/MemberService.java
index 14012d5..d8465aa 100644
--- a/server/service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/service/src/main/java/com/doumee/service/business/MemberService.java
@@ -4,6 +4,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.dto.MemberImport;
 import com.doumee.dao.business.dto.MemberQueryDTO;
+import com.doumee.dao.business.dto.MemberReduceImport;
 import com.doumee.dao.business.model.Member;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -107,5 +108,6 @@
     List<Member> findListByDTO(MemberQueryDTO memberQueryDTO);
 
     List<MemberImport> importBatch(MultipartFile file,Integer  solutionId);
+    List<MemberReduceImport> importReduceBatch(MultipartFile file, Integer  applyId);
 
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
index 58c7774..d72bf05 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -1895,7 +1895,7 @@
                 .apply(" t1.BASE_ID in ( select du.id from dispatch_unit du where du.STATUS = 0 and du.ISDELETED = 0 ) ")
         );
         if(!CollectionUtils.isNotEmpty(duSolutionList)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌娲鹃仯鍗曚綅");
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒版淳閬e崟浣嶄俊鎭紝璇风‘淇濇淳閬e崟浣嶅拰宸ヤ綔閰嶇疆骞跺鏍搁�氳繃锛�");
         }
         //鏌ヨ鎵�鏈夋淳閬e崟浣嶄笅鐨勫伐绉�
         List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList());
@@ -1907,7 +1907,7 @@
                 .eq(checkNewData,Worktype::getDataType,Constants.TWO)
                 .in(DuWorktype::getDuSolutionId,duSolutionIdList));
         if(!CollectionUtils.isNotEmpty(duWorktypeList)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌宸ョ淇℃伅");
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒板伐绉嶄俊鎭紝璇风‘淇濇淳閬e崟浣嶅拰宸ヤ綔閰嶇疆骞跺鏍搁�氳繃锛�");
         }
 
         if(CollectionUtils.isNotEmpty(applyDetailList)){
@@ -1934,7 +1934,7 @@
                     member.setCompanyId(insuranceApply.getCompanyId());
                     member.setSex(Constants.getSexByIdCard(applyDetail.getIdcardNo()));
                     if(!IdcardUtil.isValidCard(applyDetail.getIdcardNo())){
-                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎶曚繚鍛樺伐淇℃伅韬唤璇佷俊鎭敊璇痆"+member.getName()+"]");
+                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鎶曚繚鍛樺伐銆�"+member.getName()+"銆戣韩浠借瘉淇℃伅銆�"+applyDetail.getIdcardNo()+"銆戦敊璇�");
                     }
                     member.setIdcardNo(applyDetail.getIdcardNo());
                     member.setApplyId(insuranceApply.getId());
@@ -1957,7 +1957,7 @@
                         ||Objects.isNull(applyDetail.getDuId())
                         ||Objects.isNull(applyDetail.getWorktypeId())
                 ){
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎶曚繚鍛樺伐淇℃伅鏁版嵁缂哄け");
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鎶曚繚鍛樺伐淇℃伅鏁版嵁缂哄け锛岃鎸夌収瑕佹眰濉啓鍛樺伐鐨勬湁鏁堜俊鎭紒");
                 }
                 applyDetail.setCreateDate(new Date());
                 applyDetail.setCreator(loginUserInfo.getId());
@@ -2011,18 +2011,18 @@
                 //鑾峰彇璁$畻鎬诲ぉ鏁�
                 Integer maxDays = DateUtil.calculateBetween(applyDetail.getStartTime(),applyDetail.getEndTime(),0);
                 if(Constants.equalsInteger(maxDays,0)||Objects.isNull(applyDetail.getFee())){
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎶曚繚淇℃伅寮傚父锛氭�诲ぉ鏁颁笌鎬婚噾棰濋敊璇�");
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎶曚繚淇℃伅寮傚父锛氭姇淇濇�诲ぉ鏁颁笌鎬婚噾棰濋敊璇�");
                 }
                 applyDetail.setPrice(
                         applyDetail.getFee().divide(new BigDecimal(maxDays),7,RoundingMode.HALF_UP)
                 );
                 //楠岃瘉娲鹃仯鍗曚綅淇℃伅鏄惁瀛樺湪
                 if(duSolutionList.stream().filter(d->d.getDispatchUnitId().equals(applyDetail.getDuId())).collect(Collectors.toList()).size()<=Constants.ZERO){
-                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+applyDetail.getIdcardNo()+"銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
                 }
                 if(duWorktypeList.stream().filter(d->d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
                         .collect(Collectors.toList()).size()<=Constants.ZERO){
-                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+applyDetail.getIdcardNo()+"銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
                 }
             }
             applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList);
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 2e7eb25..8963283 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -10,12 +10,15 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.InsuranceApplyMapper;
 import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.SolutionsMapper;
 import com.doumee.dao.business.WorktypeMapper;
 import com.doumee.dao.business.dto.MemberImport;
 import com.doumee.dao.business.dto.MemberQueryDTO;
+import com.doumee.dao.business.dto.MemberReduceImport;
 import com.doumee.dao.business.dto.WorktypeImport;
+import com.doumee.dao.business.join.ApplyDetailJoinMapper;
 import com.doumee.dao.business.join.DispatchUnitJoinMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
 import com.doumee.dao.business.model.*;
@@ -53,12 +56,16 @@
 
     @Autowired
     private DispatchUnitJoinMapper dispatchUnitJoinMapper;
+    @Autowired
+    private ApplyDetailJoinMapper applyDetailJoinMapper;
 
     @Autowired
     private WorktypeMapper worktypeMapper;
 
     @Autowired
     private SolutionsMapper solutionsMapper;
+    @Autowired
+    private InsuranceApplyMapper insuranceApplyMapper;
 
     @Override
     public Integer create(Member member) {
@@ -359,21 +366,114 @@
     }
 
     @Override
-    public List<MemberImport> importBatch(MultipartFile file,Integer  solutionId){
+    public List<MemberReduceImport> importReduceBatch(MultipartFile file, Integer  applyId){
+        if(applyId == null  ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨鏈夋晥鐨勬柟妗堝啀杩涜鎿嶄綔锛�");
+        }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(!loginUserInfo.getType().equals(Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炰紒涓氫汉鍛樻棤娉曡繘琛岃鎿嶄綔");
         }
-        List<Member> list =  memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
-                .selectAll(Member.class)
-                .selectAs(DispatchUnit::getName,Member::getDuName)
-                .selectAs(Worktype::getName,Member::getWorkTypeName)
-                .leftJoin(DispatchUnit.class,DispatchUnit::getId,Member::getDuId)
-                .leftJoin(Worktype.class,Worktype::getId,Member::getWorktypeId)
-                .isNotNull(Member::getIdcardNo)
-                .eq(Member::getCompanyId,loginUserInfo.getCompanyId())
-                .eq(Member::getIsdeleted,Constants.ZERO)
-        );
+        ExcelImporter ie = null;
+        List<MemberReduceImport> dataList =null;
+        try {
+            ie = new ExcelImporter(file,1,0);
+            dataList = ie.getDataList(MemberReduceImport.class,null);
+        }  catch (Exception e) {
+            e.printStackTrace();
+        }
+        if(dataList == null || dataList.size() ==0){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+        }
+
+        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyId);
+        if (Objects.isNull(insuranceApply) || !Constants.equalsInteger(insuranceApply.getCompanyId(),loginUserInfo.getCompanyId())) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝淇濆崟淇℃伅涓嶅瓨鍦紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
+        }
+        if (!(Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
+                ||Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey())
+        )) {
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "瀵逛笉璧凤紝淇濆崟褰撳墠鐘舵�佷笉鏀寔璇ユ搷浣滐紒");
+        }
+        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO ) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "淇濆崟宸茶繃淇濓紝涓嶆敮鎸佽鎿嶄綔");
+        }
+        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO ) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "淇濆崟宸茶繃淇濓紝涓嶆敮鎸佽鎿嶄綔");
+        }
+
+        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇濋櫓鏂规");
+        }
+        int index = Constants.TWO;
+        Map<String,String> idCardMap = new HashMap<>();
+        for(MemberReduceImport model : dataList){
+            //鏍¢獙鍙傛暟鏄惁鍚堟硶
+            validReduceImportParam(model,idCardMap,dataList,index);
+            index += 1;
+        }
+        index = Constants.TWO;
+        for(MemberReduceImport model : dataList){
+            ApplyDetail detail =applyDetailJoinMapper.selectJoinOne(ApplyDetail.class,new MPJLambdaWrapper<ApplyDetail>()
+                            .selectAll(ApplyDetail.class)
+                            .selectAs(Worktype::getName,ApplyDetail::getWorkTypeName)
+                            .selectAs(DispatchUnit::getName,ApplyDetail::getDuName)
+                            .selectAs(InsuranceApply::getStartTime,ApplyDetail::getStartTime)
+                            .selectAs(InsuranceApply::getFinalEndTime,ApplyDetail::getEndTime)
+                            .selectAs(InsuranceApply::getServerCost,ApplyDetail::getDetailServerCost)
+                            .leftJoin(Worktype.class,Worktype::getId,ApplyDetail::getWorktypeId)
+                            .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId)
+                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
+                            .eq(ApplyDetail::getApplyId,insuranceApply.getId())
+                            .eq(ApplyDetail::getApplyId,insuranceApply.getId())
+                            .eq(ApplyDetail::getIdcardNo,model.getIdCard())
+                            .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(new Date(),1))
+                            .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(new Date(),3)));
+            if(detail == null){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠淇濆崟涓嬶紝鍛樺伐銆�" + model.getName()+model.getIdCard() + "銆戦潪鍦ㄤ繚浜哄憳锛屽娉曡繘琛岃鎿嶄綔");
+            }
+            model.setDuId(detail.getDuId());
+            model.setDuName(detail.getDuName());
+            model.setWorktypeId(detail.getWorktypeId());
+            model.setWorkTypeName(detail.getWorkTypeName());
+            model.setFee(
+                    Constants.reduceFee(solutions,
+                            Objects.isNull(detail.getDetailServerCost())?
+                                    solutions.getPrice():solutions.getPrice().add(detail.getDetailServerCost()),detail.getParentStartTime(),detail.getParentEndTime(),detail.getStartTime(),
+                            detail.getEndTime()).subtract(detail.getFee()));
+            index += 1;
+        }
+        return dataList;
+    }
+
+    private void validReduceImportParam(MemberReduceImport model, Map<String, String> idCardMap, List<MemberReduceImport> dataList, int index) {
+        if(StringUtils.isBlank(model.getName())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹鍚嶄笉鑳戒负绌猴紒");
+        }
+        if(StringUtils.isBlank(model.getIdCard())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉鍙蜂笉鑳戒负绌猴紒");
+        }
+        if(StringUtils.isBlank(model.getIdCard())||model.getIdCard().length()!=18){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉銆�"+model.getIdCard()+"銆戞牸寮忎笉姝g‘锛�");
+        }
+        if(!IdcardUtil.isValidCard(model.getIdCard())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉銆�"+model.getIdCard()+"銆戜俊鎭笉姝g‘锛�");
+        }
+        if(Objects.nonNull(idCardMap.get(model.getIdCard()))){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏂囨。涓"+index+"琛屾暟鎹韩浠借瘉鍙枫��"+model.getIdCard()+"銆戝瓨鍦ㄧ浉鍚屾暟鎹紒");
+        }
+        idCardMap.put(model.getIdCard(), model.getIdCard());
+    }
+    @Override
+    public List<MemberImport> importBatch(MultipartFile file,Integer  solutionId){
+        if(solutionId == null  ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨鏈夋晥鐨勬柟妗堝啀杩涜鎿嶄綔锛�");
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!loginUserInfo.getType().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炰紒涓氫汉鍛樻棤娉曡繘琛岃鎿嶄綔");
+        }
         ExcelImporter ie = null;
         List<MemberImport> dataList =null;
         try {
@@ -385,14 +485,14 @@
         if(dataList == null || dataList.size() ==0){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
         }
-//        List<String> idCardList = dataList.stream().map(m->m.getIdCard()).collect(Collectors.toList());
-//        Set<String> set = new HashSet<>(idCardList);
-//        if(idCardList.size() != set.size()){
-//            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁瀛樺湪韬唤璇佸彿鐩稿悓鏁版嵁锛�");
-//        }
-        List<DispatchUnit> dispatchUnitList = new ArrayList<>();
-        if(!Objects.isNull(solutionId)){
-            dispatchUnitList  = dispatchUnitJoinMapper.selectJoinList(DispatchUnit.class,
+        int index = Constants.TWO;
+        Map<String,String> idCardMap = new HashMap<>();
+        for(MemberImport model : dataList){
+            //鏍¢獙鍙傛暟鏄惁鍚堟硶
+            validImportParam(model,idCardMap,dataList,index,solutionId);
+            index += 1;
+        }
+        List<DispatchUnit> dispatchUnitList    = dispatchUnitJoinMapper.selectJoinList(DispatchUnit.class,
                     new MPJLambdaWrapper<DispatchUnit>()
                             .selectAll(DispatchUnit.class)
                             .select("(select b.id from du_solution b where b.isdeleted=0 and b.dispatch_unit_id=t.id and b.solution_id="+solutionId+" limit 1) as du_solution_id" )
@@ -402,70 +502,85 @@
                             .eq(loginUserInfo.getType().equals(Constants.ONE),DispatchUnit::getCompanyId,loginUserInfo.getCompanyId())
                             .exists("select b.id from du_solution b where b.isdeleted=0 and b.dispatch_unit_id=t.id and b.status = 1 and  b.solution_id="+solutionId )
             );
-            if(CollectionUtils.isNotEmpty(dispatchUnitList)){
-                for (DispatchUnit dispatchUnit:dispatchUnitList) {
-                    List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
-                            .eq(Worktype::getIsdeleted,Constants.ZERO)
-                            .eq(Worktype::getDataType,Constants.TWO)
-                            .eq(Worktype::getStatus,Constants.ZERO)
-                            .apply("id in ( select  dw.work_type_id from du_worktype dw where dw.status = 1" +
-                                    " and  dw.du_solution_id = "+dispatchUnit.getDuSolutionId()+" )")
-                    );
-                    dispatchUnit.setWorktypeList(worktypeList);
-                }
+        if(CollectionUtils.isNotEmpty(dispatchUnitList)){
+            for (DispatchUnit dispatchUnit:dispatchUnitList) {
+                List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
+                        .eq(Worktype::getIsdeleted,Constants.ZERO)
+                        .eq(Worktype::getDataType,Constants.TWO)
+                        .eq(Worktype::getStatus,Constants.ZERO)
+                        .apply("id in ( select  dw.work_type_id from du_worktype dw where dw.status = 1" +
+                                " and  dw.du_solution_id = "+dispatchUnit.getDuSolutionId()+" )")
+                );
+                dispatchUnit.setWorktypeList(worktypeList);
             }
         }
-        long index = Constants.TWO;
-        Map<String,String> idCardMap = new HashMap<>();
+        index = Constants.TWO;
         for(MemberImport model : dataList){
-            if(StringUtils.isBlank(model.getIdCard())||model.getIdCard().length()!=18){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉淇℃伅寮傚父锛�");
-            }
-            if(!IdcardUtil.isValidCard(model.getIdCard())){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉淇℃伅寮傚父锛�");
-            }
-            if(StringUtils.isBlank(model.getName())){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹鍚嶄俊鎭紓甯革紒");
-            }
-            if(Objects.nonNull(idCardMap.get(model.getIdCard()))){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉鍙枫��"+model.getIdCard()+"銆戝瓨鍦ㄧ浉鍚屾暟鎹紒");
-            }
-            idCardMap.put(model.getIdCard(), model.getIdCard());
-            index = index + Constants.ONE;
-            if(CollectionUtils.isNotEmpty(list)){
-                Optional<Member>  memberOptional= list.stream().filter(m->m.getIdcardNo().equals(model.getIdCard())).findFirst();
-                if(memberOptional.isPresent()){
-                    Member member =  memberOptional.get();
-                    model.setIdCard(member.getIdcardNo());
-                    model.setSex(member.getSex());
-                }else{
-                    model.setSex(Constants.getSexByIdCard(model.getIdCard()));
-                }
-            }else{
-                model.setSex(Constants.getSexByIdCard(model.getIdCard()));
-            }
-            if(StringUtils.isNotBlank(model.getDuName())&&CollectionUtils.isNotEmpty(dispatchUnitList)){
-                Optional<DispatchUnit>  dispatchUnitOptional= dispatchUnitList.stream().filter(m->m.getName().equals(model.getDuName())).findFirst();
-                if(dispatchUnitOptional.isPresent()){
-                    DispatchUnit dispatchUnit =  dispatchUnitOptional.get();
-                    model.setDuId(dispatchUnit.getId());
-                    if(StringUtils.isNotBlank(model.getWorkTypeName())&&CollectionUtils.isNotEmpty(dispatchUnit.getWorktypeList())){
-                        Optional<Worktype>  worktypeOptional= dispatchUnit.getWorktypeList().stream().filter(m->m.getName().equals(model.getWorkTypeName())).findFirst();
-                        if(worktypeOptional.isPresent()){
-                            Worktype worktype = worktypeOptional.get();
-                            model.setWorktypeId(worktype.getId());
-                        }
+            //鏍¢獙浜哄憳鏄惁宸茬粡鍦ㄥ弬淇濅腑
+            isMemberValidForSolution(model,index,solutionId);
+            //妫�鏌ユ淳閬e崟浣嶅拰宸ョ鏈夋晥鎬�
+            dealDuAndWorktype(model,index,dispatchUnitList);
+            index += 1;
+        }
+        return dataList;
+    }
+
+    private void isMemberValidForSolution(MemberImport model, int index, Integer solutionId) {
+       /* ApplyDetail detail = applyDetailJoinMapper.selectJoinOne(ApplyDetail.class,new MPJLambdaWrapper<ApplyDetail>()
+                .last("limit 1"));
+        if(detail!=null){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛岃韩浠借瘉涓恒��"+model.getIdCard()+"銆戜汉鍛樺凡缁忓湪璇ユ柟妗堜笅瀛樺湪鎶曚繚璁板綍锛�");
+        }*/
+    }
+
+    private void dealDuAndWorktype(MemberImport model, int index, List<DispatchUnit> dispatchUnitList  ) {
+
+        if(CollectionUtils.isNotEmpty(dispatchUnitList)){
+            Optional<DispatchUnit>  dispatchUnitOptional= dispatchUnitList.stream().filter(m->m.getName().equals(model.getDuName())).findFirst();
+            if(dispatchUnitOptional.isPresent()){
+                DispatchUnit dispatchUnit =  dispatchUnitOptional.get();
+                model.setDuId(dispatchUnit.getId());
+                if(StringUtils.isNotBlank(model.getWorkTypeName())&&CollectionUtils.isNotEmpty(dispatchUnit.getWorktypeList())){
+                    Optional<Worktype>  worktypeOptional= dispatchUnit.getWorktypeList().stream().filter(m->m.getName().equals(model.getWorkTypeName())).findFirst();
+                    if(worktypeOptional.isPresent()){
+                        Worktype worktype = worktypeOptional.get();
+                        model.setWorktypeId(worktype.getId());
                     }
                 }
             }
-            if(Objects.isNull(model.getDuId())){
-                model.setWorkTypeName(null);
-                model.setDuName(null);
-            }else if(Objects.isNull(model.getWorktypeId())){
-                model.setWorkTypeName(null);
-            }
         }
-        return dataList;
+        if(Objects.isNull(model.getDuId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹淳閬e崟浣嶃��"+model.getDuName()+"銆戜笉姝g‘锛�");
+        }
+        if(Objects.isNull(model.getWorktypeId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹伐绉嶃��"+model.getWorkTypeName()+"銆戜笉姝g‘锛�");
+        }
+    }
+
+    private void validImportParam(MemberImport model, Map<String, String> idCardMap, List<MemberImport> dataList,int index,Integer solutionId) {
+        if(StringUtils.isBlank(model.getName())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹鍚嶄笉鑳戒负绌猴紒");
+        }
+        if(StringUtils.isBlank(model.getIdCard())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉鍙蜂笉鑳戒负绌猴紒");
+        }
+        if(StringUtils.isBlank(model.getDuName())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹淳閬e崟浣嶄笉鑳戒负绌猴紒");
+        }
+        if(StringUtils.isBlank(model.getWorkTypeName())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹伐绉嶄笉鑳戒负绌猴紒");
+        }
+        if(StringUtils.isBlank(model.getIdCard())||model.getIdCard().length()!=18){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉銆�"+model.getIdCard()+"銆戞牸寮忎笉姝g‘锛�");
+        }
+        if(!IdcardUtil.isValidCard(model.getIdCard())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉銆�"+model.getIdCard()+"銆戜俊鎭笉姝g‘锛�");
+        }
+        if(Objects.nonNull(idCardMap.get(model.getIdCard()))){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏂囨。涓"+index+"琛屾暟鎹韩浠借瘉鍙枫��"+model.getIdCard()+"銆戝瓨鍦ㄧ浉鍚屾暟鎹紒");
+        }
+        idCardMap.put(model.getIdCard(), model.getIdCard());
+
     }
 
 

--
Gitblit v1.9.3