From 2ba1c199ce3199a243f7735ef992babf80737d65 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 01 四月 2024 09:05:44 +0800
Subject: [PATCH] mrshi

---
 server/service/src/main/java/com/doumee/dao/business/model/Solutions.java                       |    3 
 server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java                |    6 
 company/src/views/enterprise/myPolicy.vue                                                       |   22 
 company/src/components/business/OperaWtbApplyCheckWindow.vue                                    |  501 ++++++++
 server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java                      |   25 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java |    2 
 server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java          |    5 
 server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java         |   58 
 server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java                 |    8 
 server/company/src/main/java/com/doumee/api/business/UnionChangeController.java                 |   36 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java               |    4 
 company/src/components/business/operaverifyPhoneNumberWindew.vue                                |  150 +-
 server/company/src/main/java/com/doumee/api/business/UnionApplyController.java                  |   49 
 server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java                |    2 
 server/service/src/main/java/com/doumee/core/utils/Constants.java                               |   94 
 server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java    |  341 ++++
 server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java                    |    9 
 company/src/assets/style/style.scss                                                             |    8 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java                     |    4 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java       |   75 +
 company/src/components/business/OperaWtbApplyShopWindow.vue                                     | 1025 ++++++++++++++++
 server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java       |    3 
 company/src/api/business/insuranceApply.js                                                      |   14 
 company/src/components/common/MenuSelect.vue                                                    |    5 
 server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java              |   25 
 company/.env.developmentCom                                                                     |    2 
 server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java                 |   11 
 server/service/src/main/java/com/doumee/service/business/UnionChangeService.java                |   12 
 company/src/components/business/OperaSolutionsWindow.vue                                        |   18 
 company/src/views/business/insuranceApplyShop.vue                                               |   20 
 server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java                |   12 
 server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java        |  201 ++
 server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java                     |   54 
 server/service/src/main/java/com/doumee/dao/business/join/UnionChangeJoinMapper.java            |   13 
 server/service/src/main/java/com/doumee/dao/business/dto/SmsCheckDTO.java                       |   23 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java                     |    6 
 server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java                     |   56 
 server/service/src/main/java/com/doumee/service/business/UnionApplyService.java                 |    6 
 server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java       |  231 +++
 server/service/src/main/java/com/doumee/service/business/third/SignService.java                 |    5 
 server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java      |    3 
 server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java                  |   18 
 company/src/views/enterprise/insuranceApply.vue                                                 |   82 
 server/shop/src/main/java/com/doumee/api/business/UnionChangeController.java                    |   39 
 company/src/components/common/UploadFile.vue                                                    |   35 
 server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java             |   16 
 server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java                |  379 ++++++
 47 files changed, 3,259 insertions(+), 457 deletions(-)

diff --git a/company/.env.developmentCom b/company/.env.developmentCom
index fd0d4ea..b9e8f99 100644
--- a/company/.env.developmentCom
+++ b/company/.env.developmentCom
@@ -15,4 +15,4 @@
 # 骞冲彴绔�-钀嶅
 # VUE_APP_API = 'http://192.168.0.105:10023/'
 
-VUE_APP_API = 'http://localhost:10032/'
+VUE_APP_API = 'http://192.168.0.176:10032/'
diff --git a/company/src/api/business/insuranceApply.js b/company/src/api/business/insuranceApply.js
index d7352e2..df25333 100644
--- a/company/src/api/business/insuranceApply.js
+++ b/company/src/api/business/insuranceApply.js
@@ -62,6 +62,20 @@
 export function getSignLink (id) {
     return request.get(`business/insuranceApply/getSignLink/${id}`)
 }
+export function getSignTBQRSLink (data) {
+    // return request.get('/business/insuranceApply/signTBQRSLink')
+    return request.post('/business/insuranceApply/signTBQRSLink', data)
+}
+export function getMemberListOnlineSignLink (data) {
+    return request.post('/business/insuranceApply/getMemberListOnlineSignLink', data, {
+        trim: true
+    })
+}
+export function getSignWTBTBDLinkk (data) {
+    return request.post('/business/insuranceApply/getSignWTBTBDLinkk', data, {
+        trim: true
+    })
+}
 export function getJiajianBaoSignLink (data) {
     return request.post('/business/applyChange/getJiajianBaoSignLink', data, {
         trim: true
diff --git a/company/src/assets/style/style.scss b/company/src/assets/style/style.scss
index 44a053b..1e51656 100644
--- a/company/src/assets/style/style.scss
+++ b/company/src/assets/style/style.scss
@@ -77,20 +77,22 @@
 ::v-deep .el-table__cell {
   height: 100% !important;
 }
-.apply-status0, .apply-status2 , .apply-status3, .apply-status10,
+.apply-status0, .apply-status28,.apply-status20,.apply-status21,.apply-status22,
+.apply-status25,.apply-status2 , .apply-status3, .apply-status10,
 .change-status0,.change-status1,.change-status2,
 .settle-status0,.settle-status2,.settle-status3,
 .tax-status0,
 .du-status0 {
   color: #216EEE  !important;
 }
-  .apply-status1 , .apply-status4, .apply-status6, .apply-status7, .apply-status8, .apply-status11,
+.apply-status1 ,.apply-status24,.apply-status23, .apply-status4, .apply-status6,
+.apply-status7, .apply-status8, .apply-status11,
 .change-status3,.change-status4,.change-status5,.change-status8,
 .settle-status1,
 .tax-status2,
 .du-status2 {
   color: #F95601 !important;
 }
-  .apply-status5,.change-status7,.settle-status7,.tax-status1,.du-status1,.settle-status4  {
+  .apply-status5,.apply-status26,.change-status7,.settle-status7,.tax-status1,.du-status1,.settle-status4  {
   color: #00BA92  !important;
 }
diff --git a/company/src/components/business/OperaSolutionsWindow.vue b/company/src/components/business/OperaSolutionsWindow.vue
index b123011..c48dbfe 100644
--- a/company/src/components/business/OperaSolutionsWindow.vue
+++ b/company/src/components/business/OperaSolutionsWindow.vue
@@ -95,6 +95,9 @@
               </el-option>
             </el-select>
           </el-form-item>
+          <el-form-item label="涓婁紶鏂规纭涔︼細" prop="fanganFile" v-if="form.type =='1'">
+            <UploadFile   :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="editFanganFile" />
+          </el-form-item>
             <el-form-item label="鎺ユ敹鏂囦欢閭" prop="email">
                 <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
@@ -157,10 +160,11 @@
 import { all as allWorktype } from '@/api/business/worktype'
 import { solutionsId } from '@/api/business/solutions'
 import { pageAll as shopList } from '@/api/business/company'
+import UploadFile from "@/components/common/UploadFile";
 export default {
   name: 'OperaSolutionsWindow',
   extends: BaseOpera,
-  components: { GlobalWindow },
+  components: { GlobalWindow ,UploadFile},
   data () {
     var validType = (rule, value, callback) => {
       if (this.form.validType === 0 && !value) {
@@ -192,6 +196,8 @@
         ortherInfo: '',
         signKeyword: '',
         validTypeNum: '',
+        fileList1:[],
+        fanganFile:null,
         worktypeIdList: [{ worktypeId: '' }]
       },
       // 楠岃瘉瑙勫垯
@@ -236,6 +242,9 @@
     })
   },
   methods: {
+    editFanganFile(data){
+      this.form.fanganFile=data
+    },
     // 鍒囨崲鍏徃
     getAllWorktype1 () {
       this.form.worktypeIdList = [{ worktypeId: '' }]
@@ -287,7 +296,10 @@
       this.form.insureCycleUnit = ''
       this.form.validTypeNum = ''
       this.visible = true
+      this.form.fanganFile=null
+      this.form.fileList1= new Array();
       this.form.worktypeIdList = [{ worktypeId: '' }]
+      // this.$refs['$upload'].clearFiles()//鍒濆鍖栧鍏ョ粍浠�
       this.allCompany()
       this.allShops()
       // 鏂板缓
@@ -305,6 +317,10 @@
             for (const key in this.form) {
               this.form[key] = res[key]
             }
+            if(this.form.fanganFile && this.form.fanganFile.fileurl){
+              this.form.fileList1= [{url: this.form.fanganFile.fileurlFull, name:this.form.fanganFile.name}];
+            }
+            console.log(this.form.fileList1)
             this.form.worktypeIdList = res.worktypeList.map(item => {
               return {
                 worktypeId: item.worktypeId
diff --git a/company/src/components/business/OperaWtbApplyCheckWindow.vue b/company/src/components/business/OperaWtbApplyCheckWindow.vue
new file mode 100644
index 0000000..973f19b
--- /dev/null
+++ b/company/src/components/business/OperaWtbApplyCheckWindow.vue
@@ -0,0 +1,501 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="50%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <!--    閫�鍥炴姇淇�    -->
+        <el-form v-if="visible1==true" :model="form" ref="form1" :rules="rules1" style="width: 100%;">
+          <el-form-item label="濉啓閫�鍥炶鏄庯細" prop="backCheckInfo">
+            <el-input type="textarea" v-model="form.backCheckInfo" placeholder="璇疯緭鍏�" v-trim/>
+          </el-form-item>
+        </el-form>
+        <el-form v-if="visible2==true" :model="form" ref="form2" :rules="rules2" style="width: 100%;">
+          <el-form-item label="涓婁紶鎶曚繚鍗曪細" prop="toubaodanFile">
+            <UploadFile @remove="dele2" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList" @uploadSuccess="toubaoFileUploaded" />
+          </el-form-item>
+        </el-form>
+        <!--    涓婁紶淇濋櫓鍗�    -->
+      <el-form v-if="visible3==true" :model="form" ref="form3" :rules="rules3" style="width: 100%;">
+        <el-form-item label="瀹㈡埛鏈熸湜淇濋櫓鐢熸晥璧锋湡锛�">
+          {{ model.applyStartTime }}
+        </el-form-item>
+        <el-form-item label="" >
+          <el-radio-group v-model="form.selectRadio" @change="selectChange">
+            <el-radio :label="0" >涓庝繚鍗曚竴鑷�</el-radio>
+            <el-radio :label="1" >涓庝繚鍗曚笉涓�鑷�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="淇濋櫓鐢熸晥璧锋湡锛�" prop="startTime" v-if="form.selectRadio === 1">
+          <el-date-picker
+              v-model="form.startTime"
+              type="date"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              placeholder="閫夋嫨鏃ユ湡">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="淇濋櫓鐢熸晥璧锋湡锛�">
+          {{ form.startTime }}
+        </el-form-item>
+        <el-form-item label="淇濆崟鍙凤細" prop="code">
+          <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
+        </el-form-item>
+        <el-form-item label="涓婁紶淇濋櫓鍗曪細" prop="baoxianFile">
+          <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
+        </el-form-item>
+      </el-form>
+        <!--    淇敼淇濋櫓鍗�    -->
+      <el-form v-if="visible4==true" :model="form" ref="form4" :rules="rules4" style="width: 100%;">
+        <el-form-item label="淇濋櫓鐢熸晥璧锋湡锛�">
+          {{ model.startTime }}
+        </el-form-item>
+        <el-form-item label="淇濆崟鍙凤細" prop="editCode">
+          <el-input v-model="form.editCode" placeholder="璇疯緭鍏�" v-trim/>
+        </el-form-item>
+        <el-form-item label="涓婁紶淇濋櫓鍗曪細" prop="editBaoxianFile">
+          <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="editBaoxianFileUploaded" />
+        </el-form-item>
+        <el-form-item label="淇敼鍘熷洜锛�" prop="editCheckInfo">
+          <el-input type="textarea" v-model="form.editCheckInfo" placeholder="璇疯緭鍏�" v-trim/>
+        </el-form-item>
+      </el-form>
+        <el-form v-if="visible5==true || visible6==true" :model="form" ref="form5" :rules="rules5" style="width: 100%;">
+          <el-form-item label="濉啓璇存槑锛�" prop="dealBackInfo">
+            <el-input type="textarea" v-model="form.dealBackInfo" placeholder="璇疯緭鍏�" v-trim/>
+          </el-form-item>
+        </el-form>
+      <template v-slot:footer>
+        <el-button type="primary" @click="doSubmit">纭� 瀹�</el-button>
+        <el-button @click="visible=false">鍙栨秷</el-button>
+      </template>
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import {
+  dealBackApply,
+  back,
+  uploadBaoxiandan,
+  editBaoxiandan,
+  uploadToubaodan,
+  check
+} from "@/api/business/insuranceApply";
+import UploadFile from "@/components/common/UploadFile";
+import {remark} from "@/api/business/settleClaims";
+export default {
+  name: 'OperaWtbApplyCheckWindow',
+  extends: BaseOpera,
+  components: {UploadFile, GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      model: {},
+      falg :0,
+      rules1: {
+        backCheckInfo: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ]
+      },
+      rules2: {
+        toubaodanFile: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ]
+      },
+      rules3: {
+        code: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ],
+        startTime: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ],
+        baoxianFile: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ],
+      },
+      rules5: {
+        dealBackInfo: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ]
+      },
+      rules4: {
+        editCode: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ],
+        editBaoxianFile: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ],
+        editCheckInfo: [
+          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+        ]
+      },
+      form: {
+          id: null,
+          backCheckInfo:'',
+          dealBackInfo:'',
+         editCheckInfo:'',
+          editDate: '',
+        editCode: '',
+          startTime:null,
+         code:null,
+          toubaodanFile:null,
+        baoxianFile:null,
+         editBaoxianFile:null,
+          fileList: [],
+          fileList1: [],
+          fileList2: [],
+          selectRadio:0
+      },
+      visible1: false,
+      visible2: false,
+      visible3: false,
+      visible4: false,
+      visible5: false,
+      visible6: false,
+    }
+  },
+  created () {
+      this.config({
+          api: '/business/insuranceApply',
+          'field.id': 'id'
+      })
+  },
+  methods: {
+    dele2() {
+      this.form.toubaodanFile = ''
+    },
+     open(title,target,flag){
+       this.visible=true
+       this.model={}
+       this.form= {
+         id: null,
+         backCheckInfo:'',
+         dealBackInfo:'',
+         editCheckInfo:'',
+         editDate: '',
+         editCode: '',
+         startTime:null,
+         code:null,
+         toubaodanFile:null,
+         baoxianFile:null,
+         editBaoxianFile:null,
+         fileList: [],
+         fileList1: [],
+         fileList2: [],
+         selectRadio:0
+       },
+       this.model = target
+       this.form.startTime = target.startTime
+       this.title = title
+       this.flag = flag
+       this.visible1 = false
+       this.visible2 = false
+       this.visible3 = false
+       this.visible4 = false
+       this.visible5 = false
+       this.visible6 = false
+       if(flag == 1){
+         this.visible1 = true
+       }
+       if(flag == 2){
+         this.visible2 = true
+       }
+       if(flag == 3){
+         this.visible3 = true
+       }
+       if(flag == 4){
+         this.visible4 = true
+         this.$nextTick(() => {
+           this.$refs.form4.resetFields()
+         })
+       }
+       if(flag == 5){
+         this.visible5 = true
+       }
+       if(flag == 6){
+         this.visible6 = true
+       }
+     },
+    doSubmit(){
+      if (this.flag == 1) {
+        this.$refs.form1.validate((valid) => {
+          // debugger
+          if (!valid) {
+            return
+          }
+          this.backDo()
+        })
+      } else if (this.flag == 2) {
+        this.$refs.form2.validate((valid) => {
+          // debugger
+          if (!valid) {
+            return
+          }
+          this.uploadToubaodan()
+        })
+      } else if (this.flag == 3) {
+        this.$refs.form3.validate((valid) => {
+          // debugger
+          if (!valid) {
+            return
+          }
+          this.uploadBaoxiandan()
+        })
+      } else if (this.flag == 4) {
+        this.$refs.form4.validate((valid) => {
+          // debugger
+          if (!valid) {
+            return
+          }
+          this.editBaoxiandan()
+        })
+      } else if (this.flag == 5) {
+        this.$refs.form5.validate((valid) => {
+          // debugger
+          if (!valid) {
+            return
+          }
+          this.dealBackApply(1)
+        })
+      } else if (this.flag == 6) {
+        this.$refs.form5.validate((valid) => {
+          // debugger
+          if (!valid) {
+            return
+          }
+          this.dealBackApply(0)
+        })
+      }
+    },
+    selectChange(){
+       if(this.form.selectRadio == 0){
+         this.form.startTime = this.model.startTime
+       }else{
+         this.form.startTime = ''
+       }
+    },
+    toubaoFileUploaded(data){
+      this.form.toubaodanFile=data
+    },
+    baoxianFileUploaded(data){
+      this.form.baoxianFile=data
+    },
+    editBaoxianFileUploaded(data){
+      this.form.editBaoxianFile=data
+    },
+    backDo(){
+      this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
+          .then(() => {
+            this.isWorking = true
+            back({id:this.model.id,checkInfo:this.form.backCheckInfo})
+                .then(response => {
+                  this.visible = false
+                  this.$emit('success')
+                  }).catch(err => {
+                this.$tip.apiFailed(err)
+                 })
+          })
+    },
+    uploadToubaodan(){
+      this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
+          .then(() => {
+            this.isWorking = true
+            uploadToubaodan({id:this.model.id,toubaodanFile:this.form.toubaodanFile})
+                .then(response => {
+                  this.visible = false
+                  this.$emit('success')
+                }).catch(err => {
+                  this.$tip.apiFailed(err)
+                })
+          })
+    },
+    dealBackApply(type){
+      this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
+          .then(() => {
+            this.isWorking = true
+            dealBackApply({ id: this.model.id, checkInfo: this.form.dealBackInfo, dealBackApply: type })
+                .then(response => {
+                  this.visible = false
+                  this.$emit('success')
+                }).catch(err => {
+                  this.$tip.apiFailed(err)
+                })
+          })
+    },
+    uploadBaoxiandan(){
+      this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
+          .then(() => {
+            this.isWorking = true
+            uploadBaoxiandan({id:this.model.id,startTime:this.form.startTime,code:this.form.code,baoxiandanFile:this.form.baoxianFile})
+                .then(response => {
+                  this.visible = false
+                  this.$emit('success')
+                }).catch(err => {
+                  this.$tip.apiFailed(err)
+                })
+          })
+
+    },
+    editBaoxiandan(){
+      this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
+          .then(() => {
+            this.isWorking = true
+            editBaoxiandan({id:this.model.id, checkInfo:this.form.editCheckInfo,code:this.form.editCode,baoxiandanFile:this.form.editBaoxianFile})
+                .then(response => {
+                  this.visible = false
+                  this.$emit('success')
+                }).catch(err => {
+                  this.$tip.apiFailed(err)
+                })
+          })
+    },
+      handleRemove(file, fileList) {
+          console.log(file, fileList);
+      },
+      handlePreview(file) {
+          console.log(file);
+      },
+      handleExceed(files, fileList) {
+          this.$message.warning(`褰撳墠闄愬埗閫夋嫨 3 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
+      },
+      beforeRemove(file, fileList) {
+          return this.$confirm(`纭畾绉婚櫎 ${ file.name }锛焋);
+      },
+      successEvent() {
+
+      },
+      handleSizeChange(val) {
+          console.log(`姣忛〉 ${val} 鏉);
+      },
+      handleCurrentChange(val) {
+          console.log(`褰撳墠椤�: ${val}`);
+      },
+      handleClick(tab, event) {
+          console.log(tab, event);
+      },
+      onSubmit() {
+
+      }
+  }
+}
+</script>
+<style>
+
+</style>
+<style lang="scss" scoped>
+    .form {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        flex-direction: column;
+        .form_span {
+            width: 100%;
+            display: flex;
+            align-items: start;
+            flex-direction: column;
+            margin-bottom: 20px;
+            span {
+                font-size: 14px;
+                &:nth-child(1) {
+                    color: black;
+                    margin-bottom: 5px;
+                }
+                &:nth-child(2) {
+                    color: #8c939d;
+                }
+            }
+        }
+        .form_item {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            margin-bottom: 20px;
+            &:last-child {
+                margin: 0 !important;
+            }
+            .form_item_label {
+                flex-shrink: 0;
+                /*width: 170px;*/
+                color: black;
+                font-size: 14px;
+                span {
+                    color: red;
+                    font-size: 14px;
+                }
+            }
+            .form_item_val {
+                flex: 1;
+                /*height: 40px;*/
+                margin-left: 20px;
+                textarea {
+                    width: 100%;
+                    height: 70px;
+                    border: 1px solid #cbcbcb;
+                    padding: 10px;
+                    outline: none;
+                    box-sizing: border-box;
+                }
+                input {
+                    width: 100%;
+                    height: 40px;
+                    outline: none;
+                    border-radius: 5px;
+                    border: 1px solid #cbcbcb;
+                    padding: 0 20px;
+                    box-sizing: border-box;
+                }
+            }
+        }
+    }
+    .desc {
+        width: 100%;
+        .desc_item {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            .desc_item_label {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 10px;
+                span {
+                    font-size: 14px;
+                    color: black;
+                    margin-right: 30px;
+                }
+            }
+            .desc_item_from {
+                width: 100%;
+                margin-bottom: 10px;
+                .desc_item_from_page {
+                    width: 100%;
+                    display: flex;
+                    align-items: center;
+                    justify-content: end;
+                    margin-top: 10px;
+                }
+            }
+            .desc_item_cate {
+                width: 100%;
+                margin-bottom: 10px;
+            }
+            .desc_item_search {
+                width: 100%;
+                margin-bottom: 20px;
+            }
+            .desc_item_review {
+                width: 100%;
+                .desc_item_review_label {
+                    font-size: 20px;
+                    color: black;
+                    font-weight: bold;
+                    margin-bottom: 15px;
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/OperaWtbApplyShopWindow.vue b/company/src/components/business/OperaWtbApplyShopWindow.vue
new file mode 100644
index 0000000..ff5a3a5
--- /dev/null
+++ b/company/src/components/business/OperaWtbApplyShopWindow.vue
@@ -0,0 +1,1025 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="desc">
+            <div class="desc_item">
+                <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.OperaInsuranceApply.open('缁繚', { id: dataId, type: 1 })">涓�閿画淇�</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>
+                </div>
+                <div class="desc_item_label">
+                    <div class="desc_item_label_left">
+                        <span>鎶曚繚浼佷笟锛歿{ model.companyName }}</span>
+                      <span>淇濆崟鐘舵�侊細<span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span></span>
+                        <span>鎻愪氦鏃堕棿锛歿{ model.createDate }}</span>
+                    </div>
+                  <div class="desc_item_label_right">
+                      <template v-if="userInfo.type === 1">
+                          <el-button v-if="model.status == 24" type="primary" @click="$refs.OperaInsuranceApply.open('鎶曚繚鐢宠', {id: dataId})">鍐嶆鎶曚繚</el-button>
+                          <el-button v-if="model.status == 24" type="primary" @click="closeOrder">鍏抽棴璁㈠崟</el-button>
+                          <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>
+                          <el-button v-if="[22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewShenqingdan">鏌ョ湅鐢宠鍗�</el-button>
+                          <el-button v-if="[1,2,3].includes(model.unionApplyTbdStatus)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
+                          <el-button v-if="[3].includes(model.unionApplyTbdStatus) " type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
+<!--                          goSign-->
+                          <el-button v-if="model.status == 20" type="primary" @click="getSignLink(0)">绛剧讲鏂规纭涔�</el-button>
+                          <el-button v-if="model.status == 21" type="primary" @click="getSignLink(1)">绛剧讲鐢宠鍗�</el-button>
+                          <el-button v-if="model.unionApplyTbdStatus == 1" type="primary" @click="getSignLink(2)">绛剧讲鎶曚繚鍗�</el-button>
+                      </template>
+                    <template v-if="userInfo.type === 2">
+                      <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>
+                      <el-button v-if="[22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewShenqingdan">鏌ョ湅鐢宠鍗�</el-button>
+                      <el-button v-if="model.status == 22" type="primary" @click="$refs.InsuranceDetails.open('鎶曚繚瀹℃牳',model,1)">鎶曚繚瀹℃牳</el-button>
+                      <el-button v-if="model.status == 22" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('閫�鍥炴姇淇�',model,1)">閫�鍥炵敵璇�</el-button>
+                      <el-button v-if="model.status == 23" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('閫�鍥炴姇淇�',model,1)">鍏抽棴鐢宠</el-button>
+                    </template>
+                    <template v-if="userInfo.type === 0">
+                      <el-button v-if="[27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>
+                      <el-button v-if="[27].includes(model.status)" type="primary" @click="viewShenqingdan">鏌ョ湅鐢宠鍗�</el-button>
+                      <el-button v-if="[27].includes(model.status)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
+                      <el-button v-if="[27].includes(model.status)" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
+                    </template>
+                  </div>
+                </div>
+                <div class="desc_item_from">
+                    <el-table
+                        :data="tableData"
+                        border
+                        style="width: 100%">
+                        <el-table-column
+                            prop="code"
+                            align="center"
+                            label="淇濆崟鍙�">
+                        </el-table-column>
+                        <el-table-column
+                            prop="solutionsName"
+                            label="淇濋櫓鏂规"
+                            align="center"
+                            width="180">
+                        </el-table-column>
+                        <el-table-column
+                            prop="startTime"
+                            align="center"
+                            label="淇濋櫓鐢熸晥璧锋湡">
+                        </el-table-column>
+                        <el-table-column
+                            prop="endTime"
+                            align="center"
+                            label="淇濋櫓鐢熸晥姝㈡湡">
+                        </el-table-column>
+                        <el-table-column
+                            prop="insureNum"
+                            align="center"
+                            label="鎶曚繚浜烘暟">
+                        </el-table-column>
+                        <el-table-column
+                            prop="serviceDays"
+                            align="center"
+                            label="鍦ㄤ繚鏃堕暱锛堝ぉ锛�">
+                        </el-table-column>
+                        <el-table-column
+                            prop="currentFee"
+                            align="center"
+                            label="宸蹭骇鐢熻垂鐢�(鍏�)">
+                        </el-table-column>
+                        <el-table-column
+                            prop="fee"
+                            align="center"
+                            label="鎬昏垂鐢�(鍏�)">
+                        </el-table-column>
+                    </el-table>
+                </div>
+                <div class="desc_item_cate">
+                    <el-tabs v-model="activeName" @tab-click="handleClick">
+                        <el-tab-pane label="鍦ㄤ繚浜哄憳" name="0" ></el-tab-pane>
+                        <el-tab-pane label="鍔�/鍑忎繚璁板綍"  name="1"></el-tab-pane>
+                        <el-tab-pane label="鏇存崲娲鹃仯鍗曚綅璁板綍" name="2"></el-tab-pane>
+                    </el-tabs>
+                </div>
+                <div class="desc_item_search">
+                    <el-form :inline="true" :model="formInline" ref="sou" class="demo-form-inline">
+                        <template v-if="activeName === '0'">
+                            <el-form-item label="鍦ㄤ繚鐘舵��" prop="applyStatus">
+                                <el-select v-model="formInline.applyStatus" @change="search" placeholder="璇烽�夋嫨">
+                                    <el-option label="鍏ㄩ儴" value="0"></el-option>
+                                    <el-option label="淇濋殰涓�" value="1"></el-option>
+                                    <el-option label="涓嶅湪淇�" value="2"></el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="娲鹃仯鍗曚綅" prop="duId">
+                                <el-select v-model="formInline.duId" placeholder="璇烽�夋嫨" @change="search">
+                                    <el-option
+                                        v-for="item in dwList"
+                                        :key="item.id"
+                                        :label="item.name"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="鎵�灞炲伐绉�" prop="workTypeId">
+                                <el-select v-model="formInline.workTypeId" placeholder="璇烽�夋嫨" @change="search">
+                                    <el-option
+                                        v-for="item in gzList"
+                                        :key="item.id"
+                                        :label="item.name"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="鍛樺伐濮撳悕" prop="memberName">
+                                <el-input v-model="formInline.memberName" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+                            </el-form-item>
+                            <el-form-item label="淇濋櫓鐢熸晥璧锋湡" prop="end">
+                                <el-date-picker
+                                    @change="changeStart"
+                                    v-model="formInline.end"
+                                    type="daterange"
+                                    format="yyyy 骞� MM 鏈� dd 鏃�"
+                                    value-format="yyyy-MM-dd"
+                                    range-separator="鑷�"
+                                    start-placeholder="寮�濮嬫棩鏈�"
+                                    end-placeholder="缁撴潫鏃ユ湡">
+                                </el-date-picker>
+                            </el-form-item>
+                            <el-form-item label="淇濋櫓鐢熸晥姝㈡湡" prop="start">
+                                <el-date-picker
+                                    @change="changeEnd"
+                                    v-model="formInline.start"
+                                    type="daterange"
+                                    format="yyyy 骞� MM 鏈� dd 鏃�"
+                                    value-format="yyyy-MM-dd"
+                                    range-separator="鑷�"
+                                    start-placeholder="寮�濮嬫棩鏈�"
+                                    end-placeholder="缁撴潫鏃ユ湡">
+                                </el-date-picker>
+                            </el-form-item>
+                        </template>
+                        <template v-else>
+                            <el-form-item label="鐘舵��" prop="applyStatus">
+                                <el-select v-model="formInline.applyStatus" @change="search" placeholder="璇烽�夋嫨">
+                                    <el-option label="鍏ㄩ儴" value=""></el-option>
+                                    <el-option label="寰呯缃�" value="0"></el-option>
+                                    <el-option label="寰呭鏍�" value="1"></el-option>
+                                    <el-option label="宸茬敓鏁�" value="2"></el-option>
+                                    <el-option label="鐢宠閫�鍥�" value="3"></el-option>
+                                    <el-option label="宸查��鍥�" value="5"></el-option>
+                                    <el-option label="宸插叧闂�" value="6"></el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="鎵瑰崟鐢熸晥璧锋湡" prop="end">
+                                <el-date-picker
+                                    @change="changeStart"
+                                    v-model="formInline.end"
+                                    type="daterange"
+                                    format="yyyy 骞� MM 鏈� dd 鏃�"
+                                    value-format="yyyy-MM-dd"
+                                    range-separator="鑷�"
+                                    start-placeholder="寮�濮嬫棩鏈�"
+                                    end-placeholder="缁撴潫鏃ユ湡">
+                                </el-date-picker>
+                            </el-form-item>
+                        </template>
+                        <el-form-item>
+                            <el-button type="primary" style="width: 80px;" @click="search">鏌ヨ</el-button>
+                            <el-button @click="resetting" style="width: 80px;">閲嶇疆</el-button>
+                            <el-button type="primary" style="width: 80px;" @click="exportExcel" v-if="activeName === '0'">瀵煎嚭鍚嶅崟</el-button>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <div class="desc_item_from">
+                    <el-table
+                        :data="list"
+                        border
+                        ref="table"
+                        v-if="activeName === '0'"
+                        style="width: 100%">
+                        <el-table-column label="搴忓彿"
+                                         align="center">
+                            <template slot-scope="scope">
+                                <span>{{scope.$index + 1}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="memberName"
+                            align="center"
+                            label="鍛樺伐濮撳悕">
+                        </el-table-column>
+                        <el-table-column
+                            align="center"
+                            :key="Math.random()"
+                            label="鎬у埆">
+                            <template slot-scope="{row}">
+                                <span v-if="row.sex === 0">鐢�</span>
+                                <span v-else>濂�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="idcardNo"
+                            align="center"
+                            label="韬唤璇佸彿">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="duName"
+                            align="center"
+                            label="娲鹃仯鍗曚綅">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="workTypeName"
+                            align="center"
+                            label="鎵�灞炲伐绉�">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="startTime"
+                            align="center"
+                            label="淇濋櫓鐢熸晥璧锋湡">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="endTime"
+                            align="center"
+                            label="淇濋櫓鐢熸晥姝㈡湡">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            align="center"
+                            prop="fee"
+                            label="浜х敓璐圭敤">
+                        </el-table-column>
+                    </el-table>
+                    <el-table
+                        :data="list1"
+                        border
+                        ref="table"
+                        v-if="activeName === '1'"
+                        style="width: 100%">
+                        <el-table-column
+                            label="搴忓彿"
+                            align="center">
+                            <template slot-scope="scope">
+                                <span>{{scope.$index + 1}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="淇濆崟鐘舵��" :key="Math.random()"
+                             align="center">
+                            <template slot-scope="{row}">
+                                <span :class="'change-status'+row.status" v-if="row.status === 0">寰呯缃�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 1">寰呭鏍�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 2">宸茬敓鏁�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 3 || row.status === 4">鐢宠閫�鍥�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 5 || row.status === 8">宸查��鍥�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 6">宸插叧闂�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="applyCode"
+                            align="center"
+                            label="鎵瑰崟鍙�">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="addNum"
+                            align="center"
+                            label="澧炲姞浜烘暟锛堜汉锛�">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="delNum"
+                            align="center"
+                            label="鍑忓皯浜烘暟锛堜汉锛�">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="createDate"
+                            align="center"
+                            label="鎻愪氦鏃堕棿">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="applyStartTime"
+                            align="center"
+                            label="鎵瑰崟鐢熸晥璧锋湡">
+                        </el-table-column>
+                        <el-table-column
+                            align="center"
+                            :key="Math.random()"
+                            label="鎿嶄綔">
+                            <template slot-scope="{row}">
+                                <el-button type="text" @click="$refs.OperaApplyChangeDetailWindow.open('鍔犲噺淇濊鎯�', row)">鏌ョ湅璇︽儏</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <el-table
+                        :data="list2"
+                        border
+                        ref="table"
+                        v-if="activeName === '2'"
+                        style="width: 100%">
+                        <el-table-column label="搴忓彿"
+                                         align="center">
+                            <template slot-scope="scope">
+                                <span>{{scope.$index + 1}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            align="center" label="淇濆崟鐘舵��" :key="Math.random()">
+                            <template slot-scope="{row}">
+                                <span :class="'change-status'+row.status" v-if="row.status === 0">寰呯缃�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 1">寰呭鏍�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 2">宸茬敓鏁�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 3 || row.status === 4">鐢宠閫�鍥�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 5 || row.status === 8">宸查��鍥�</span>
+                                <span :class="'change-status'+row.status" v-if="row.status === 6">宸插叧闂�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            align="center"
+                            prop="applyCode"
+                            label="鎵瑰崟鍙�">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="changeNum"
+                            align="center"
+                            label="鏇存崲娲鹃仯鍗曚綅浜烘暟">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="createDate"
+                            align="center"
+                            label="鎻愪氦鏃堕棿">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            prop="applyStartTime"
+                            align="center"
+                            label="鎵瑰崟鐢熸晥璧锋湡">
+                        </el-table-column>
+                        <el-table-column
+                            :key="Math.random()"
+                            align="center"
+                            label="鎿嶄綔">
+                            <template slot-scope="{row}">
+                                <el-button type="text" @click="$refs.OperaApplyChangeUnitDetailWindow.open('鏇存崲娲鹃仯鍗曚綅璇︽儏', row)">鏌ョ湅璇︽儏</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="desc_item_from_page">
+                        <el-pagination
+                            @current-change="handleCurrentChange"
+                            :current-page="currentPage"
+                            :page-size="10"
+                            layout="total, prev, pager, next, jumper"
+                            :total="total">
+                        </el-pagination>
+                    </div>
+                </div>
+                <div class="desc_item_review">
+                    <div class="desc_item_review_label">瀹℃牳娴佺▼</div>
+                  <el-timeline :reverse="reverse">
+                    <el-timeline-item
+                        v-for="(activity, index) in activities"
+                        :key="index">
+                      <div style="display: flex; flex-direction: column;">
+                        <span style="font-size: 16px; font-weight: 400; color: black;">
+                            {{activity.title}}
+                            <span style="font-size: 16px; font-weight: 400; color: black; margin-left: 10px;" v-if="[1, 2, 5, 6, 9, 11, 22].includes(activity.objType)">
+                              {{activity.content}}
+                            </span>
+                        </span>
+                        <span style="margin-top: 5px; font-size: 12px; font-weight: 400; color: #999999;">
+                            鎿嶄綔鍛�-{{activity.creatorName}}锛坽{activity.creatorType == 1 ? activity.companyName: "骞冲彴绔�"}}锛墈{activity.createDate}}
+                        </span>
+                      </div>
+                    </el-timeline-item>
+                  </el-timeline>
+                </div>
+            </div>
+        </div>
+        <InsuranceDetails ref="InsuranceDetails" @success="successEvent" />
+        <OperaInsuranceApplyCheckWindow ref="OperaInsuranceApplyCheckWindow" @success="successEvent" />
+        <!--    浼佷笟鐢宠閫�鍥�    -->
+        <applyReturn ref="applyReturn" @success="successEvent" />
+        <!--    鏂板鎶曚繚    -->
+        <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
+        <!--    鍔犲噺淇濈敵璇�    -->
+        <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
+        <!--    鏇存崲娲鹃仯鍗曚綅鐢宠    -->
+        <factoryChange ref="factoryChange" @success="successEvent" />
+        <!-- 鍔犲噺淇濊鎯� -->
+        <OperaApplyChangeDetailWindow ref="OperaApplyChangeDetailWindow" @success="successEvent"/>
+        <!-- 鏇存崲娲鹃仯鍗曚綅璇︽儏 -->
+        <OperaApplyChangeUnitDetailWindow ref="OperaApplyChangeUnitDetailWindow" @success="successEvent"/>
+        <!--    楠岃瘉鎵嬫満鍙�    -->
+        <operaverifyPhoneNumberWindew ref="operaverifyPhoneNumberWindew" @success="goSign" />
+        <template v-slot:footer>
+            <el-button @click="visible=false">杩斿洖</el-button>
+        </template>
+
+      <!-- 淇敼鎵嬫満鍙� -->
+      <el-dialog
+          :title="signTitle"
+          :visible.sync="visiblePhone"
+          width="500px"
+          :modal="false"
+          :show-close="false"
+          :close-on-click-modal="false"
+          center>
+        <el-form :model="form" ref="form" :rules="rules">
+          <el-form-item label="鎵嬫満鍙�" prop="phone">
+            <el-input v-model="form.phone" placeholder="璇疯緭鍏�" disabled v-trim/>
+          </el-form-item>
+          <el-form-item label="楠岃瘉鐮�" prop="code">
+            <div style="width: 100%; display: flex; align-items: center;">
+              <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
+              <el-button type="primary" style="margin-left: 15px;" @click="send" v-if="num === 0">鍙戦�侀獙璇佺爜</el-button>
+              <el-button type="primary" style="margin-left: 15px;" v-else>{{num}}s</el-button>
+            </div>
+          </el-form-item>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="goSignDo()">纭�  瀹�</el-button>
+                <el-button @click="visiblePhone=false">鍙� 娑�</el-button>
+            </span>
+      </el-dialog>
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import InsuranceDetails from '@/components/business/InsuranceDetails'
+import OperaInsuranceApplyCheckWindow from '@/components/business/OperaInsuranceApplyCheckWindow'
+import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
+import factoryChange from '@/components/enterprise/factoryChange'
+import operaverifyPhoneNumberWindew from '@/components/business/operaverifyPhoneNumberWindew'
+import OperaApplyChangeDetailWindow from '@/components/business/OperaApplyChangeDetailWindow'
+import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
+
+import applyReturn from '@/components/enterprise/applyReturn'
+import {
+  getDetail,
+  getSignLink,
+  applyDetailPage,
+  exportExcel,
+  applyChagneDetailExcel,
+  applyOpt,
+  getMemberListOnlineSignLink, getSignTBQRSLink
+} 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 OperaInsuranceApply from '@/components/enterprise/OperaInsuranceApplyWindow'
+import { mapState } from 'vuex'
+import {sendSms, validateCode} from "@/api/business/smsEmail";
+
+export default {
+  name: 'OperaWtbApplyShopWindow',
+  extends: BaseOpera,
+  components: {
+    GlobalWindow,
+    InsuranceDetails,
+    OperaInsuranceApplyCheckWindow,
+    applyReturn,
+    OperaInsuranceApply,
+    additionSubtractionApplication,
+    factoryChange,
+    OperaApplyChangeDetailWindow,
+    OperaApplyChangeUnitDetailWindow,
+    operaverifyPhoneNumberWindew
+  },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      dataId: null,
+      signTitle: '鎵嬫満鍙烽獙璇�',
+      model: {},
+      form: {
+        businessId: null,
+        phone: this.$store.state.userInfo.company.phone,
+        code: '',
+        type:0
+      },
+      rules: {
+        code: [
+          { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }
+        ]
+      },
+      num: 0,
+      timer: null,
+      formInline: {
+        applyStatus: '',
+        duId: '',
+        workTypeId: '',
+        memberName: '',
+        end: [],
+        start: [],
+        endTimeE: '',
+        endTimeS: '',
+        startTimeE: '',
+        startTimeS: '',
+        type: ''
+      },
+      visible1: false,
+      visible2: false,
+      visible3: false,
+      visible4: false,
+      visible5: false,
+      visiblePhone: false,
+      reverse: false,
+      radio: 0,
+      activities: [],
+      tableData: [],
+      list: [],
+      list1: [],
+      list2: [],
+      dwList: [],
+      gzList: [],
+      activeName: '0',
+      total: 0,
+      currentPage: 1
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/insuranceApply',
+      'field.id': 'id'
+    })
+  },
+  computed: {
+    ...mapState(['userInfo'])
+  },
+  methods: {
+    open (title, target) {
+      this.visible = true
+      this.title = title
+      this.model = {}
+      this.dataId = null
+      this.dataId = target.id
+      this.form.businessId = target.id
+      this.formInline.applyStatus = ''
+      this.formInline.duId = ''
+      this.formInline.workTypeId = ''
+      this.formInline.memberName = ''
+      this.formInline.end = ''
+      this.formInline.start = ''
+      this.formInline.endTimeE = ''
+      this.formInline.endTimeS = ''
+      this.formInline.startTimeE = ''
+      this.formInline.startTimeS = ''
+      this.formInline.type = ''
+      this.activeName = '0'
+      this.getDetail()
+      this.getList()
+      this.getDW()
+      this.getGZ()
+    },
+    getSignLink (flag) {
+      if (flag === 0) {
+        this.signTitle = '绛剧讲鏂规纭涔�'
+      } else if (flag === 1) {
+        this.signTitle = '绛剧讲鐢宠鍗�'
+      } else if (flag === 2) {
+        this.signTitle = '绛剧讲鎶曚繚鍗�'
+      }
+      this.form.type = flag
+      this.visiblePhone = true
+      this.$nextTick(() => {
+        this.$refs.form.resetFields()
+      });
+    },
+    goSignDo(){
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.isWorking = true
+        if(this.form.type===0){
+          getSignTBQRSLink(this.form).then(res => {
+            setTimeout(() => {
+              this.visiblePhone=false
+              window.open(res)
+            }, 500)
+          }).catch(err => {
+            this.$tip.apiFailed(err)
+          })
+        } else if (this.form.type === 1) {
+          getMemberListOnlineSignLink(this.form).then(res => {
+            setTimeout(() => {
+              this.visiblePhone=false
+              window.open(res)
+            }, 500)
+          }).catch(err => {
+            this.$tip.apiFailed(err)
+          })
+        } else if (this.form.type === 2) {
+          getSignLink(this.dataId).then(res => {
+            setTimeout(() => {
+              this.visiblePhone=false
+              window.open(res)
+            }, 500)
+          }).catch(err => {
+            this.$tip.apiFailed(err)
+          })
+        }
+      })
+    },
+    send () {
+      sendSms({
+        phone: this.form.phone
+      }).then(res => {
+        this.num = 60
+        this.setTime()
+      })
+    },
+    setTime () {
+      this.timer = setInterval(() => {
+        if (this.num === 0) {
+          clearInterval(this.timer)
+          this.timer = null
+          return
+        }
+        this.num = this.num - 1
+      }, 1000)
+    },
+    // 鍏抽棴璁㈠崟
+    closeOrder () {
+      this.$confirm('纭鍏抽棴姝よ鍗曞悧?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        applyOpt({
+          applyId: this.dataId,
+          optType: 2
+        }).then(res => {
+          this.getDetail()
+        })
+      }).catch(() => {
+
+      })
+    },
+    // 娲鹃仯鍗曚綅
+    getDW () {
+      findListByDTO({ applyId: this.dataId })
+        .then(res => {
+          this.dwList = res
+        })
+    },
+    // 宸ョ
+    getGZ () {
+      worktypeFindListByDTO({
+        id: this.dataId,
+        queryType: 2
+      }).then(res => {
+        this.gzList = res
+      })
+    },
+    resetting () {
+      if (this.activeName === '0') {
+        this.formInline.applyStatus = '0'
+      } else {
+        this.formInline.applyStatus = ''
+      }
+      this.formInline.start = ''
+      this.formInline.startTimeE = ''
+      this.formInline.endTimeE = ''
+      this.list = []
+      this.list1 = []
+      this.list2 = []
+      this.formInline.duId = ''
+      this.formInline.workTypeId = ''
+      this.formInline.memberName = ''
+      this.formInline.end = []
+      this.formInline.end = []
+      this.formInline.endTimeE = ''
+      this.formInline.endTimeS = ''
+      this.formInline.startTimeE = ''
+      this.formInline.startTimeS = ''
+      this.search()
+    },
+    search () {
+      this.currentPage = 1
+      this.getList()
+    },
+    changeStart (e) {
+      if (e.length > 0) {
+        this.formInline.startTimeS = e[0]
+        this.formInline.startTimeE = e[1]
+      } else {
+        this.formInline.startTimeS = ''
+        this.formInline.startTimeE = ''
+      }
+      this.search()
+    },
+    changeEnd (e) {
+      if (e.length > 0) {
+        this.formInline.endTimeS = e[0]
+        this.formInline.endTimeE = e[1]
+      } else {
+        this.formInline.endTimeS = ''
+        this.formInline.endTimeE = ''
+      }
+      this.search()
+    },
+    exportExcel () {
+      if (this.activeName === '0') {
+        exportExcel({
+          capacity: 10,
+          page: this.currentPage,
+          model: {
+            solutionName: this.tableData[0].solutionsName,
+            applyId: this.dataId,
+            applyStatus: this.formInline.applyStatus,
+            duId: this.formInline.duId,
+            workTypeId: this.formInline.workTypeId,
+            memberName: this.formInline.memberName,
+            endTimeE: this.formInline.endTimeE,
+            endTimeS: this.formInline.endTimeS,
+            startTimeE: this.formInline.startTimeE,
+            startTimeS: this.formInline.startTimeS
+          }
+        }).then(response => {
+          this.download(response)
+        })
+      } else {
+        applyChagneDetailExcel({
+          capacity: 10,
+          page: this.currentPage,
+          model: {
+            applyId: this.dataId,
+            applyStatus: this.formInline.applyStatus,
+            duId: this.formInline.duId,
+            workTypeId: this.formInline.workTypeId,
+            memberName: this.formInline.memberName,
+            endTimeE: this.formInline.endTimeE,
+            endTimeS: this.formInline.endTimeS,
+            startTimeE: this.formInline.startTimeE,
+            startTimeS: this.formInline.startTimeS,
+            type: this.formInline.type
+          }
+        }).then(response => {
+          this.download(response)
+        })
+      }
+    },
+    getList () {
+      if (this.activeName === '0') {
+        applyDetailPage({
+          capacity: 10,
+          page: this.currentPage,
+          model: {
+            applyId: this.dataId,
+            applyStatus: this.formInline.applyStatus,
+            duId: this.formInline.duId,
+            workTypeId: this.formInline.workTypeId,
+            memberName: this.formInline.memberName,
+            endTimeE: this.formInline.endTimeE,
+            endTimeS: this.formInline.endTimeS,
+            startTimeE: this.formInline.startTimeE,
+            startTimeS: this.formInline.startTimeS
+          }
+        }).then(res => {
+          this.list = res.records
+          this.total = res.total
+          this.$nextTick(() => {
+            console.log(this.$refs.table)
+            if (this.$refs.table && this.$refs.table.doLayout) {
+              this.$refs.table.doLayout()
+            }
+          })
+        })
+      } else {
+        fetchList({
+          capacity: 10,
+          page: this.currentPage,
+          model: {
+            applyId: this.dataId,
+            status: this.formInline.applyStatus,
+            endTimeE: this.formInline.endTimeS,
+            endTimeS: this.formInline.startTimeS,
+            type: this.formInline.type
+          }
+        }).then(res => {
+          if (this.activeName === '1') {
+            this.list1 = res.records
+          } else if (this.activeName === '2') {
+            this.list2 = res.records
+          }
+          this.total = res.total
+          this.$nextTick(() => {
+            console.log(this.$refs.table)
+            if (this.$refs.table && this.$refs.table.doLayout) {
+              this.$refs.table.doLayout()
+            }
+          })
+        })
+      }
+    },
+    handleClick (e) {
+      this.activeName = e.index
+      if (e.index === '1') {
+        this.formInline.type = 0
+      } else if (e.index === '2') {
+        this.formInline.type = 1
+      }
+      this.resetting()
+    },
+    goSign () {
+      getSignLink(this.dataId).then(res => {
+        setTimeout(() => {
+          window.open(res)
+        }, 500)
+      }).catch(err => {
+        this.$tip.apiFailed(err)
+      })
+    },
+    viewToubaodan () {
+      if (this.model.toubaodanSignedFile && this.model.toubaodanSignedFile.fileurlFull) {
+        setTimeout(() => {
+          window.open(this.model.toubaodanSignedFile.fileurlFull)
+        }, 500)
+      } else if (this.model.toubaodanFile && this.model.toubaodanFile.fileurlFull) {
+        setTimeout(() => {
+          window.open(this.model.toubaodanFile.fileurlFull)
+        }, 500)
+      }
+    },
+    viewBaoxiandan () {
+      if (this.model.baoxiandanFile && this.model.baoxiandanFile.fileurlFull) {
+        window.open(this.model.baoxiandanFile.fileurlFull)
+      }
+    },
+    viewFanganshu () {
+      if (this.model.fanganFile && this.model.fanganFile.fileurlFull) {
+        window.open(this.model.fanganFile.fileurlFull)
+      }
+    },
+    viewShenqingdan () {
+      if (this.model.shenqingdanFile && this.model.shenqingdanFile.fileurlFull) {
+        window.open(this.model.shenqingdanFile.fileurlFull)
+      }
+    },
+    handleSizeChange (val) {
+      console.log(val)
+    },
+    handleCurrentChange (val) {
+      console.log(val)
+      this.currentPage = val
+      this.getList()
+    },
+    onSubmit () {
+
+    },
+    getDetail () {
+      getDetail(this.dataId).then(res => {
+        this.model = res
+        this.tableData = new Array()
+        this.tableData.push(res)
+        console.log(this.tableData)
+        this.activities = res.applyLogList
+      }).catch(err => {
+      })
+    },
+    successEvent () {
+      // this.visible=false
+      this.getDetail()
+      this.$emit('success')
+    }
+  }
+}
+</script>
+<style scoped>
+ ::v-deep .el-tabs__item{
+    font-weight: 600;
+ }
+</style>
+<style lang="scss" scoped>
+    .form {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        flex-direction: column;
+        .form_span {
+            width: 100%;
+            display: flex;
+            align-items: start;
+            flex-direction: column;
+            margin-bottom: 20px;
+            span {
+                font-size: 14px;
+                &:nth-child(1) {
+                    color: black;
+                    margin-bottom: 5px;
+                }
+                &:nth-child(2) {
+                    color: #8c939d;
+                }
+            }
+        }
+        .form_item {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            margin-bottom: 20px;
+            &:last-child {
+                margin: 0 !important;
+            }
+            .form_item_label {
+                flex-shrink: 0;
+                width: 170px;
+                color: black;
+                font-size: 14px;
+                span {
+                    color: red;
+                    font-size: 14px;
+                }
+            }
+            .form_item_val {
+                flex: 1;
+                /*height: 40px;*/
+                margin-left: 20px;
+                textarea {
+                    width: 100%;
+                    height: 70px;
+                    border: 1px solid #cbcbcb;
+                    padding: 10px;
+                    outline: none;
+                    box-sizing: border-box;
+                }
+                input {
+                    width: 100%;
+                    height: 40px;
+                    outline: none;
+                    border-radius: 5px;
+                    border: 1px solid #cbcbcb;
+                    padding: 0 20px;
+                    box-sizing: border-box;
+                }
+            }
+        }
+    }
+    .desc {
+        width: 100%;
+        .desc_item {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            .desc_item_label {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-bottom: 10px;
+                span {
+                    font-size: 14px;
+                    color: black;
+                    margin-right: 30px;
+                }
+            }
+            .desc_item_from {
+                width: 100%;
+                margin-bottom: 10px;
+                .desc_item_from_page {
+                    width: 100%;
+                    display: flex;
+                    align-items: center;
+                    justify-content: end;
+                    margin-top: 10px;
+                }
+            }
+            .desc_item_cate {
+                width: 100%;
+                margin-bottom: 10px;
+            }
+            .desc_item_search {
+                width: 100%;
+                margin-bottom: 20px;
+            }
+            .desc_item_review {
+                width: 100%;
+                .desc_item_review_label {
+                    font-size: 20px;
+                    color: black;
+                    font-weight: bold;
+                    margin-bottom: 15px;
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/operaverifyPhoneNumberWindew.vue b/company/src/components/business/operaverifyPhoneNumberWindew.vue
index 85cd927..f218701 100644
--- a/company/src/components/business/operaverifyPhoneNumberWindew.vue
+++ b/company/src/components/business/operaverifyPhoneNumberWindew.vue
@@ -22,80 +22,80 @@
 </template>
 
 <script>
-    import BaseOpera from '@/components/base/BaseOpera'
-    import GlobalWindow from '@/components/common/GlobalWindow'
-    import { sendSms, validateCode } from '@/api/business/smsEmail'
-    import { mapState } from 'vuex'
-    export default {
-        name: 'operaverifyPhoneNumberWindew',
-        extends: BaseOpera,
-        components: { GlobalWindow },
-        data () {
-            return {
-                form: {
-                    phone: this.$store.state.userInfo.company.phone,
-                    code: ''
-                },
-                rules: {
-                    code: [
-                        { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }
-                    ]
-                },
-                num: 0,
-                timer: null
-            }
-        },
-        computed: {
-            ...mapState(['userInfo'])
-        },
-        methods: {
-            open (title) {
-                this.title = title
-                this.num = 0
-                clearInterval(this.timer)
-                this.timer = null
-                this.visible = true
-                this.$nextTick(() => {
-                    this.$refs.form.resetFields()
-                })
-            },
-            send () {
-                sendSms({
-                    phone: this.form.phone
-                }).then(res => {
-                    this.num = 60
-                    this.setTime()
-                })
-            },
-            setTime () {
-                this.timer = setInterval(() => {
-                    if (this.num === 0) {
-                        clearInterval(this.timer)
-                        this.timer = null
-                        return
-                    }
-                    this.num = this.num - 1
-                }, 1000)
-            },
-            confirm () {
-                this.$refs.form.validate((valid) => {
-                    if (!valid) {
-                        return
-                    }
-                    this.isWorking = true
-                    validateCode({
-                        code: this.form.code
-                    }).then(res => {
-                        this.visible = false
-                        this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
-                        this.$emit('success')
-                    }).catch(e => {
-                        this.$tip.apiFailed(e)
-                    }).finally(() => {
-                        this.isWorking = false
-                    })
-                })
-            }
-        }
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { sendSms, validateCode } from '@/api/business/smsEmail'
+import { mapState } from 'vuex'
+export default {
+  name: 'operaverifyPhoneNumberWindew',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      form: {
+        phone: this.$store.state.userInfo.company.phone,
+        code: ''
+      },
+      rules: {
+        code: [
+          { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }
+        ]
+      },
+      num: 0,
+      timer: null
     }
+  },
+  computed: {
+    ...mapState(['userInfo'])
+  },
+  methods: {
+    open (title) {
+      this.title = title
+      this.num = 0
+      clearInterval(this.timer)
+      this.timer = null
+      this.visible = true
+      this.$nextTick(() => {
+        this.$refs.form.resetFields()
+      })
+    },
+    send () {
+      sendSms({
+        phone: this.form.phone
+      }).then(res => {
+        this.num = 60
+        this.setTime()
+      })
+    },
+    setTime () {
+      this.timer = setInterval(() => {
+        if (this.num === 0) {
+          clearInterval(this.timer)
+          this.timer = null
+          return
+        }
+        this.num = this.num - 1
+      }, 1000)
+    },
+    confirm () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.isWorking = true
+        validateCode({
+          code: this.form.code
+        }).then(res => {
+          this.visible = false
+          this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+          this.$emit('success')
+        }).catch(e => {
+          this.$tip.apiFailed(e)
+        }).finally(() => {
+          this.isWorking = false
+        })
+      })
+    }
+  }
+}
 </script>
diff --git a/company/src/components/common/MenuSelect.vue b/company/src/components/common/MenuSelect.vue
index 5cfa78e..5cdb3a9 100644
--- a/company/src/components/common/MenuSelect.vue
+++ b/company/src/components/common/MenuSelect.vue
@@ -43,6 +43,9 @@
     }
   },
   watch: {
+    type: function (newVal, oldVal) {
+      this.type = newVal
+    },
     excludeId () {
       this.fetchData()
     }
@@ -50,7 +53,7 @@
   methods: {
     // 鑾峰彇鎵�鏈夎彍鍗�
     fetchData () {
-      if (this.type == '1' || this.type == '2')  {
+      if (this.type == '1' || this.type == '2') {
         fetchTree1(this.type)
           .then(records => {
             this.data = []
diff --git a/company/src/components/common/UploadFile.vue b/company/src/components/common/UploadFile.vue
index 03d73b0..9218330 100644
--- a/company/src/components/common/UploadFile.vue
+++ b/company/src/components/common/UploadFile.vue
@@ -1,6 +1,7 @@
 <template>
   <div>
     <el-upload
+      ref="uploadFileBtn"
       class="upload-demo"
       :accept="uploadData.fileTyp"
       :action="uploadImgUrl"
@@ -11,8 +12,8 @@
       :on-error="uploadError"
       :before-upload="beforeFileUpload"
       :file-list="fileList">
-    <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
-    <div slot="tip" class="el-upload__tip">鍙兘涓婁紶{{ uploadData.fileType }}鏂囦欢锛屼笖涓嶈秴杩�5mb</div>
+    <el-button size="small" type="primary"  >鐐瑰嚮涓婁紶</el-button>
+    <div style="display: inline-block"  slot="tip" class="el-upload__tip">(鍙兘涓婁紶{{ uploadData.fileType }}鏂囦欢锛屼笖涓嶈秴杩�5mb)</div>
   </el-upload>
   </div>
 
@@ -21,6 +22,10 @@
 <script>
 export default {
   props: {
+    fileList:{
+      type: Array,
+      default: () => []
+    },
     file: {
       type: Object,
       default: () => {}
@@ -28,40 +33,50 @@
     tipsLabel: '',
     customStyle: {
       type: String,
-    default: 'width: 190px; height: 190px;'
+      default: 'width: 190px; height: 190px;'
     },
     uploadData: Object
   },
   data() {
     return {
-      fileList:null,
+      // fileList:[],
       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload?folder='+this.uploadData.folder
     }
   },
-
+  watch: {
+    fileList (nv,ov) {
+      if(this.fileList ==null){
+        this.fileList = new Array();
+      }
+     // alert(this.fileList)
+    }
+  },
   methods: {
     removes() {
       this.$emit('remove')
     },
     // 涓婁紶鍥剧墖
-    handleExceed(){},
+    handleExceed(){
+      this.$message.error('鍙厑璁镐笂浼�1涓枃浠讹紝璇峰垹闄ゅ凡浼犳枃浠讹紝閲嶈瘯锛�')
+    },
     handleFileSuccess(res, file) {
       if (res.code == 200) {
         let { data } = res
         // this.fileList = [{name: data.originname, url: data.url }]
         this.$message.success('涓婁紶鎴愬姛')
-        this.$emit('uploadSuccess', { fileurl: data.imgaddr, fileurlFull: data.url, name: data.originname })
+        this.$emit('uploadSuccess', { fileurl: data.imgaddr,  fileurlFull: data.url, name: data.originname })
       } else {
-        this.$tip.apiFailed('涓婁紶澶辫触')
+        this.$message.apiFailed('涓婁紶澶辫触')
       }
       this.$emit('uploadEnd')
     },
     uploadError() {
-      this.$tip.apiFailed('涓婁紶澶辫触')
+      this.$message.apiFailed('涓婁紶澶辫触')
       this.$emit('endUpload')
     },
     // // 鎷︽埅
     beforeFileUpload(file) {
+
       this.$emit('uploadBegin')
       return true
     }
@@ -81,7 +96,7 @@
   cursor: pointer;
   position: relative;
   width: $image-width;
-  height: $image-width;
+  height: auto;
   overflow: hidden;
 }
 .avatar-uploader .el-upload:hover {
diff --git a/company/src/views/business/insuranceApplyShop.vue b/company/src/views/business/insuranceApplyShop.vue
index 6b641ff..21de88b 100644
--- a/company/src/views/business/insuranceApplyShop.vue
+++ b/company/src/views/business/insuranceApplyShop.vue
@@ -4,6 +4,7 @@
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
             <el-form-item label="淇濆崟鐘舵��" prop="statusCollect">
                 <el-select v-model="searchForm.statusCollect" placeholder="璇烽�夋嫨" @keypress.enter.native="search">
+<<<<<<< HEAD
                     <el-option label="寰呭鏍�" value="0"></el-option>
                     <el-option label="寰呭嚭鍗�" value="1"></el-option>
                     <el-option label="寰呯缃�" value="7"></el-option>
@@ -12,6 +13,15 @@
                     <el-option label="宸查��鍥�" value="4"></el-option>
                     <el-option label="閫�鍥炵敵璇蜂腑" value="5"></el-option>
                     <el-option label="宸插叧闂�" value="6"></el-option>
+=======
+                    <el-option label="寰呯缃�" value="28"></el-option>
+                    <el-option label="寰呭鏍�" value="22"></el-option>
+                  <el-option label="寰呭嚭鍗�" value="23"></el-option>
+                  <el-option label="宸查��鍥�" value="24"></el-option>
+                  <el-option label="宸插叧闂�" value="25"></el-option>
+                  <el-option label="鎶曚繚涓�" value="26"></el-option>
+                  <el-option label="淇濋殰涓�" value="27"></el-option>
+>>>>>>> 2ce7d1d9934f97604ff00b1789dd3628d814dd60
                 </el-select>
             </el-form-item>
             <el-form-item label="鎶曚繚浼佷笟" prop="companyId">
@@ -64,7 +74,7 @@
                 </el-table-column>
                 <el-table-column prop="statusInfo" label="鎶曚繚鐘舵��" min-width="100px">
                   <template slot-scope="{row}">
-                    <span :class="'apply-status'+row.status" >{{row.statusInfo}}</span>
+                    <span :class="'apply-status'+row.statusCollect" >{{row.statusInfo}}</span>
                   </template>
                 </el-table-column>
                 <el-table-column prop="companyName" label="鎶曚繚浼佷笟" min-width="100px"></el-table-column>
@@ -79,7 +89,7 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.operaInsuranceApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', row)" icon="el-icon-edit" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="$refs.operaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', row)" icon="el-icon-edit" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -91,7 +101,7 @@
             </pagination>
         </template>
         <!-- 鏂板缓/淇敼 -->
-        <OperaInsuranceApplyShopWindow ref="operaInsuranceApplyShopWindow" @success="handlePageChange"/>
+        <OperaWtbApplyShopWindow ref="operaWtbApplyShopWindow" @success="handlePageChange"/>
     </TableLayout>
 </template>
 
@@ -101,11 +111,11 @@
 import Pagination from '@/components/common/Pagination'
 import { all as solutionAll } from '@/api/business/solutions'
 import { pageAll as companyAll } from '@/api/business/company'
-import OperaInsuranceApplyShopWindow from '@/components/business/OperaInsuranceApplyShopWindow'
+import OperaWtbApplyShopWindow from '@/components/business/OperaWtbApplyShopWindow'
 export default {
   name: 'InsuranceApply',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaInsuranceApplyShopWindow },
+  components: { TableLayout, Pagination, OperaWtbApplyShopWindow },
   data () {
     return {
       // 鎼滅储
diff --git a/company/src/views/enterprise/insuranceApply.vue b/company/src/views/enterprise/insuranceApply.vue
index 99b8b8d..f5aadd4 100644
--- a/company/src/views/enterprise/insuranceApply.vue
+++ b/company/src/views/enterprise/insuranceApply.vue
@@ -12,6 +12,7 @@
                     <el-option label="宸查��鍥�" value="4"></el-option>
                     <el-option label="閫�鍥炵敵璇蜂腑" value="5"></el-option>
                     <el-option label="宸插叧闂�" value="6"></el-option>
+                    <el-option label="鎶曚繚涓�" value="25"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="淇濋櫓鏂规" prop="baseSolutionId">
@@ -61,6 +62,12 @@
                   </template>
                 </el-table-column>
                 <el-table-column prop="solutionsName" label="淇濋櫓鏂规"></el-table-column>
+                <el-table-column label="绫诲瀷">
+                  <template slot-scope="{row}">
+                    <span style="color: #00BA92" v-if="row.solutionType == 1">濮旀墭鎶曚繚</span>
+                    <span style="color: #F95601;"  v-else>鐩存帴鎶曚繚</span>
+                  </template>
+                </el-table-column>
                 <el-table-column prop="insureNum" label="鎶曚繚浜烘暟"></el-table-column>
                 <el-table-column label="鎶曚繚鏃堕暱锛堝ぉ锛�">
                     <template slot-scope="{row}">
@@ -78,7 +85,7 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: row.id })" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="godetail(row)" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -91,6 +98,7 @@
         </template>
         <!--    鏂板鎶曚繚    -->
         <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @success="handlePageChange" />
+        <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" @success="handlePageChange" />
         <!--    鎶曚繚璇︽儏    -->
         <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" @success="handlePageChange" />
     </TableLayout>
@@ -102,40 +110,48 @@
 import Pagination from '@/components/common/Pagination'
 import OperaInsuranceApplyWindow from '@/components/enterprise/OperaInsuranceApplyWindow'
 import OperaInsuranceApplyDetails from '@/components/business/OperaInsuranceApplyWindow'
+import OperaWtbApplyShopWindow from '@/components/business/OperaWtbApplyShopWindow'
 
-import { all as solutionAll} from '@/api/business/solutions'
+import { all as solutionAll } from '@/api/business/solutions'
 export default {
-    name: 'InsuranceApply',
-    extends: BaseTable,
-    components: { TableLayout, Pagination, OperaInsuranceApplyWindow, OperaInsuranceApplyDetails },
-    data () {
-        return {
-            // 鎼滅储
-            searchForm: {
-                createTimeS: '',
-                createTimeE: '',
-                baseSolutionId: '',
-                statusCollect: ''
-            },
-            solutionList:[]
-        }
-    },
-    created () {
-        this.config({
-            module: '鎶曚繚鐢宠淇℃伅琛�',
-            api: '/business/insuranceApply',
-            'field.id': 'id',
-            'field.main': 'id'
-        })
-        this.search()
-        this.loadSelectList()
-    },
-    methods:{
-        loadSelectList() {
-          solutionAll({ dataType:2}).then(res => {
-              this.solutionList = res
-            })
-        }
+  name: 'InsuranceApply',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaInsuranceApplyWindow, OperaInsuranceApplyDetails,OperaWtbApplyShopWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        createTimeS: '',
+        createTimeE: '',
+        baseSolutionId: '',
+        statusCollect: ''
+      },
+      solutionList: []
     }
+  },
+  created () {
+    this.config({
+      module: '鎶曚繚鐢宠淇℃伅琛�',
+      api: '/business/insuranceApply',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    this.loadSelectList()
+  },
+  methods: {
+    godetail (row) {
+      if (row.solutionType == 1) {
+        this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: row.id })
+      } else {
+        this.$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: row.id })
+      }
+    },
+    loadSelectList () {
+      solutionAll({ dataType: 2 }).then(res => {
+        this.solutionList = res
+      })
+    }
+  }
 }
 </script>
diff --git a/company/src/views/enterprise/myPolicy.vue b/company/src/views/enterprise/myPolicy.vue
index 887b8c7..c1289e4 100644
--- a/company/src/views/enterprise/myPolicy.vue
+++ b/company/src/views/enterprise/myPolicy.vue
@@ -87,7 +87,13 @@
                   </template>
                 </el-table-column>
                 <el-table-column prop="solutionsName" label="淇濋櫓鏂规"></el-table-column>
-                <el-table-column label="淇濆崟鍙�">
+              <el-table-column label="绫诲瀷">
+                <template slot-scope="{row}">
+                  <span style="color: #00BA92" v-if="row.solutionType == 1">濮旀墭鎶曚繚</span>
+                  <span style="color: #F95601;"  v-else>鐩存帴鎶曚繚</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="淇濆崟鍙�">
                     <template slot-scope="{row}">
                         <span>{{row.code ? row.code : '-'}}</span>
                     </template>
@@ -110,7 +116,7 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: row.id })" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="godetail(row)" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
 <!--                        <template v-if="row.statusCollect === 2">-->
 <!--                            <el-button type="text" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: row.id })">鍔犲噺淇濈敵璇�</el-button>-->
 <!--                        </template>-->
@@ -128,6 +134,7 @@
         <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @success="handlePageChange" />
         <!--    鎶曚繚璇︽儏    -->
         <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" @success="handlePageChange" />
+      <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" @success="handlePageChange" />
         <!--    鍔犲噺淇濈敵璇�    -->
         <additionSubtractionApplication ref="additionSubtractionApplication" @success="handlePageChange" />
         <!--    缁繚寮圭獥    -->
@@ -143,6 +150,7 @@
     import OperaInsuranceApplyDetails from '@/components/business/OperaInsuranceApplyWindow'
     import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
     import renewalInsurance from '@/components/enterprise/renewalInsurance'
+    import OperaWtbApplyShopWindow from '@/components/business/OperaWtbApplyShopWindow'
 
     import { all as solutionAll} from '@/api/business/solutions'
     import { getCaptcha, closeApplyNotice } from '@/api/business/notices'
@@ -155,7 +163,8 @@
             OperaInsuranceApplyWindow,
             OperaInsuranceApplyDetails,
             renewalInsurance,
-            additionSubtractionApplication
+            additionSubtractionApplication,
+          OperaWtbApplyShopWindow
         },
         data () {
             return {
@@ -190,6 +199,13 @@
             this.getNum()
         },
         methods:{
+          godetail (row) {
+            if (row.solutionType == 1) {
+              this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: row.id })
+            } else {
+              this.$refs.OperaInsuranceApplyDetails.open('鎶曚繚璇︽儏', { id: row.id })
+            }
+          },
             see() {
                 this.searchForm.statusCollect = '7'
                 this.search()
diff --git a/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java b/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
index ac9af61..4d4e470 100644
--- a/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
+++ b/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -8,10 +8,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
-import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
-import com.doumee.dao.business.dto.ApplyChangeOptDTO;
-import com.doumee.dao.business.dto.CountCyclePriceDTO;
-import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
+import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.model.ApplyChange;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.ApplyChangeService;
@@ -134,10 +131,10 @@
     }
 
     @ApiOperation("鎶曚繚纭涔︾绔犱笟鍔�")
-    @GetMapping("/getChangeMemberListOnlineSignLink/{id}")
+    @PostMapping("/getChangeMemberListOnlineSignLink")
     @RequiresPermissions("business:applychange:query")
-    public ApiResponse<String> getChangeMemberListOnlineSignLink(@PathVariable Integer id) {
-        return ApiResponse.success(applyChangeService.getChangeMemberListOnlineSignLink(id));
+    public ApiResponse<String> getChangeMemberListOnlineSignLink(@RequestBody SmsCheckDTO smsCheckDTO) {
+        return ApiResponse.success(applyChangeService.getChangeMemberListOnlineSignLink(smsCheckDTO));
     }
 
 }
diff --git a/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java b/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
index 007be44..a8180c8 100644
--- a/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
+++ b/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -9,6 +9,7 @@
 import com.doumee.dao.business.dto.CountCyclePriceDTO;
 import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
 import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.InsuranceApplyService;
@@ -151,20 +152,24 @@
     }
 
 
-
-    @ApiOperation("鎶曚繚纭涔︾绔犱笟鍔�")
-    @GetMapping("/getSignTBQRSLink/{id}")
+    @ApiOperation("鏂规纭涔︾绔犱笟鍔�")
+    @PostMapping("/signTBQRSLink")
     @RequiresPermissions("business:insuranceapply:query")
-    public ApiResponse<String> getSignTBQRSLink(@PathVariable Integer id) {
-        return ApiResponse.success(insuranceApplyService.getSignTBQRSLink(id));
+    public ApiResponse<String> getSignTBQRSLink(@RequestBody SmsCheckDTO smsCheckDTO) {
+        return ApiResponse.success(insuranceApplyService.getSignTBQRSLink(smsCheckDTO));
+    }
+    @ApiOperation("浜哄憳鍚嶅崟绛剧珷")
+    @PostMapping("/getMemberListOnlineSignLink")
+    @RequiresPermissions("business:insuranceapply:query")
+    public ApiResponse<String> getMemberListOnlineSignLink(@RequestBody SmsCheckDTO smsCheckDTO) {
+        return ApiResponse.success(insuranceApplyService.getMemberListOnlineSignLink(smsCheckDTO));
     }
 
-
-    @ApiOperation("浜哄憳鍚嶅崟绛剧珷")
-    @GetMapping("/getMemberListOnlineSignLink/{id}")
+    @ApiOperation("鎶曚繚鐢宠鍗曠绔犱笟鍔�")
+    @PostMapping("/getSignWTBTBDLink")
     @RequiresPermissions("business:insuranceapply:query")
-    public ApiResponse<String> getMemberListOnlineSignLink(@PathVariable Integer id) {
-        return ApiResponse.success(insuranceApplyService.getMemberListOnlineSignLink(id));
+    public ApiResponse<String> getSignWTBTBDLink(@RequestBody SmsCheckDTO smsCheckDTO) {
+        return ApiResponse.success(insuranceApplyService.getSignWTBTBDLink(smsCheckDTO));
     }
 
 
diff --git a/server/company/src/main/java/com/doumee/api/business/UnionApplyController.java b/server/company/src/main/java/com/doumee/api/business/UnionApplyController.java
index 7fdc5ec..9181c55 100644
--- a/server/company/src/main/java/com/doumee/api/business/UnionApplyController.java
+++ b/server/company/src/main/java/com/doumee/api/business/UnionApplyController.java
@@ -82,55 +82,6 @@
         ExcelExporter.build(UnionApply.class).export(unionApplyService.findPage(pageWrap).getRecords(), "鍚堝苟鎶曚繚鍗曚俊鎭〃", response);
     }
 
-    @ApiOperation("鏍规嵁ID鏌ヨ")
-    @GetMapping("/{id}")
-    @RequiresPermissions("business:unionapply:query")
-    public ApiResponse findById(@PathVariable Integer id) {
-        return ApiResponse.success(unionApplyService.findById(id));
-    }
-
-
-    @PreventRepeat
-    @ApiOperation("鍒涘缓鍚堝苟鍗�")
-    @PostMapping("/merge")
-    @RequiresPermissions("business:unionapply:create")
-    public ApiResponse merge(@RequestBody SaveUnionApplyDTO saveUnionApplyDTO) {
-        return ApiResponse.success(unionApplyService.merge(saveUnionApplyDTO));
-    }
-
-    @ApiOperation("鍏抽棴鍚堝苟鍗�")
-    @GetMapping("/close")
-    @RequiresPermissions("business:unionapply:close")
-    public ApiResponse close(@RequestParam Integer id) {
-        unionApplyService.cancelMerge(id);
-        return ApiResponse.success(null);
-    }
-
-    @PreventRepeat
-    @ApiOperation("涓婁紶鎶曚繚鍗�")
-    @PostMapping("/uploadToubaodan")
-    @RequiresPermissions("business:unionapply:create")
-    public ApiResponse uploadToubaodan(@RequestBody UploadMultifileDTO uploadMultifileDTO) {
-        unionApplyService.uploadToubaodan(uploadMultifileDTO);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("绛剧讲鐢宠鍗�")
-    @GetMapping("/getSignLink")
-    @RequiresPermissions("business:unionapply:query")
-    public ApiResponse getSignLink(@RequestParam Integer id) {
-        unionApplyService.getSignLink(id);
-        return ApiResponse.success(null);
-    }
-
-
-    @ApiOperation("涓婁紶淇濋櫓鍗�")
-    @PostMapping("/uploadBXD")
-    @RequiresPermissions("business:unionchange:query")
-    public ApiResponse uploadBXD(@RequestBody UnionApplyBXDDTO unionApplyBXDDTO) {
-        unionApplyService.uploadBXD(unionApplyBXDDTO);
-        return ApiResponse.success(null);
-    }
 
 
 }
diff --git a/server/company/src/main/java/com/doumee/api/business/UnionChangeController.java b/server/company/src/main/java/com/doumee/api/business/UnionChangeController.java
index 7098f83..1f5e10a 100644
--- a/server/company/src/main/java/com/doumee/api/business/UnionChangeController.java
+++ b/server/company/src/main/java/com/doumee/api/business/UnionChangeController.java
@@ -90,40 +90,4 @@
         return ApiResponse.success(unionChangeService.findById(id));
     }
 
-    @PreventRepeat
-    @ApiOperation("鍒涘缓鍚堝苟鍗�")
-    @PostMapping("/merge")
-    @RequiresPermissions("business:unionchange:create")
-    public ApiResponse merge(@RequestBody SaveUnionChangeDTO saveUnionChangeDTO) {
-        return ApiResponse.success(unionChangeService.merge(saveUnionChangeDTO));
-    }
-
-
-    @ApiOperation("鍏抽棴鍚堝苟鍗�")
-    @GetMapping("/close")
-    @RequiresPermissions("business:unionchange:close")
-    public ApiResponse close(@RequestParam Integer id) {
-        unionChangeService.cancelMerge(id);
-        return ApiResponse.success(null);
-    }
-
-
-    @ApiOperation("绛剧讲鐢宠鍗�")
-    @GetMapping("/getSignLink")
-    @RequiresPermissions("business:unionchange:query")
-    public ApiResponse getSignLink(@RequestParam Integer id) {
-        unionChangeService.getSignLink(id);
-        return ApiResponse.success(null);
-    }
-
-
-
-    @ApiOperation("涓婁紶淇濋櫓鍗�")
-    @PostMapping("/uploadBXD")
-    @RequiresPermissions("business:unionchange:query")
-    public ApiResponse uploadBXD(@RequestBody UnionChangeBXDDTO unionChangeBXDDTO) {
-        unionChangeService.uploadBXD(unionChangeBXDDTO);
-        return ApiResponse.success(null);
-    }
-
 }
diff --git a/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java b/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
index 4b9bd83..207b8d2 100644
--- a/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
+++ b/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -3,10 +3,8 @@
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
-import com.doumee.dao.business.model.ApplyChagneDetail;
-import com.doumee.dao.business.model.ApplyChange;
-import com.doumee.dao.business.model.ApplyDetail;
-import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.dao.business.model.*;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
@@ -26,6 +24,7 @@
 import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Excel瀵煎嚭瀹炵幇
@@ -1278,4 +1277,376 @@
         private Field field;
     }
 
+
+
+    /**
+     * 瀵煎嚭 鍚堝苟鍗� 鎹㈠巶 鐢宠璇﹀崟
+     * @param data 鏁版嵁
+     * @param sheetName Sheet鍚嶇О
+     */
+    public String exportUnionChangeOtherUnitExcelToPdf (UnionChange data, String sheetName) {
+        SXSSFWorkbook sxssfWorkbook;
+        try {
+            sxssfWorkbook = new SXSSFWorkbook();
+            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
+            for (int i = 0; i < 8; i++) {
+                sheet.setColumnWidth(i, ((i==3|| i== 4|| i== 5 ||i== 6 || i==7)?16:8) * 2 * 256);
+            }
+            sheet.createFreezePane(0, 1);
+            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,7));
+            Row title = sheet.createRow(0);
+            title.setHeight((short) 2000);
+            Cell c = title.createCell(0);
+            c.setCellValue(sheetName);
+            configFirstCell(sxssfWorkbook,c);
+            for (int i = 0; i < 8; i++) {
+                if(i>0){
+                    title.createCell(i).setCellValue("");
+                }
+                configTitleCell(sxssfWorkbook,title.getCell(i));
+            }
+            Row header1 = sheet.createRow(1);
+            header1.createCell(0).setCellValue("鎶曚繚浜�");
+            header1.createCell(1).setCellValue("淇濋櫓鏂规");
+            header1.createCell(2).setCellValue("");
+            header1.createCell(3).setCellValue(""); 
+            header1.createCell(4).setCellValue("淇濆崟鍙�");
+            header1.createCell(5).setCellValue("淇濋櫓鐢熸晥璧锋湡");
+            header1.createCell(6).setCellValue("淇濋櫓鐢熸晥姝㈡湡");
+            header1.createCell(7).setCellValue("鎹㈠巶浜烘暟");
+            header1.createCell(8).setCellValue("鏈熸湜鎵瑰崟鐢熸晥鏈�");
+            for (int i = 0; i < 9; i++) {
+                configFirstCell(sxssfWorkbook,header1.getCell(i));
+            }
+            sheet.addMergedRegion(new CellRangeAddress(1  ,1,1,3));
+
+            Row header2 = sheet.createRow(2);
+            header2.createCell(0).setCellValue(data.getShopName());
+            header2.createCell(1).setCellValue(data.getSolutionsName());
+            header2.createCell(2).setCellValue("");
+            header2.createCell(3).setCellValue("");
+            header2.createCell(4).setCellValue(data.getApplyCode());
+            header2.createCell(5).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getStartTime()));
+            header2.createCell(6).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getEndTime()));
+            header2.createCell(7).setCellValue(data.getApplyChagneDetailList().stream().filter(i->i.getType().equals(Constants.TWO)).collect(Collectors.toList()).size());
+            header2.createCell(8).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getApplyStartTime()));
+            sheet.addMergedRegion(new CellRangeAddress(2  ,2,1,3));
+            for (int i = 0; i < 9; i++) {
+                configDataCell(sxssfWorkbook,header2.getCell(i));
+            }
+
+
+            Row header3 = sheet.createRow(3);
+            header3.createCell(0).setCellValue("琚繚闄╀汉");
+            header3.createCell(1).setCellValue(data.getCompanyNames());
+            header3.createCell(2).setCellValue("");
+            header3.createCell(3).setCellValue("");
+            header3.createCell(4).setCellValue("");
+            header3.createCell(5).setCellValue("");
+            header3.createCell(6).setCellValue("");
+            header3.createCell(7).setCellValue("");
+            header3.createCell(8).setCellValue("");
+            for (int i = 0; i < 9; i++) {
+                configFirstCell(sxssfWorkbook,header3.getCell(i));
+            }
+            sheet.addMergedRegion(new CellRangeAddress(3  ,3,1,8));
+
+
+            Row header4 = sheet.createRow(4);
+            header4.createCell(0).setCellValue("搴忓彿");
+            header4.createCell(1).setCellValue("鍛樺伐濮撳悕");
+            header4.createCell(2).setCellValue("鎬у埆");
+            header4.createCell(3).setCellValue("韬唤璇佸彿");
+            header4.createCell(4).setCellValue("琚繚闄╀汉");
+            header4.createCell(5).setCellValue("鍘熸淳閬e崟浣�");
+            header4.createCell(6).setCellValue("鍘熸墍鎵�灞炲伐绉�");
+            header4.createCell(7).setCellValue("鏇存敼鍚庢淳閬e崟浣�");
+            header4.createCell(8).setCellValue("鏇存敼鍚庢墍灞炲伐绉�");
+            for (int i = 0; i < 9; i++) {
+                configFirstCell(sxssfWorkbook,header4.getCell(i));
+            }
+
+            List<ApplyChagneDetail> otherChangeDetailList = data.getApplyChagneDetailList().stream().filter(i->i.getType().equals(Constants.TWO)).collect(Collectors.toList());
+
+            Integer row = 4;
+
+            if(CollectionUtils.isNotEmpty(otherChangeDetailList)){
+                row = row + 1;
+                Row header5 = sheet.createRow(row);
+                header5.createCell(0).setCellValue("搴忓彿");
+                header5.createCell(1).setCellValue("鍛樺伐濮撳悕");
+                header5.createCell(2).setCellValue("鎬у埆");
+                header5.createCell(3).setCellValue("韬唤璇佸彿");
+                header5.createCell(4).setCellValue("琚繚闄╀汉");
+                header5.createCell(5).setCellValue("鍘熸淳閬e崟浣�");
+                header5.createCell(6).setCellValue("鍘熸墍灞炲伐绉�");
+                header5.createCell(7).setCellValue("鏇存敼鍚庢淳閬e崟浣�");
+                header5.createCell(8).setCellValue("鏇存敼鍚庢墍灞炲伐绉�");
+                for (int i = 0; i < 9; i++) {
+                    configFirstCell(sxssfWorkbook,header5.getCell(i));
+                }
+                for (int rowIndex = 0; rowIndex < otherChangeDetailList.size(); rowIndex++) {
+                    row = row + 1;
+                    Row header6 = sheet.createRow(row);
+                    ApplyChagneDetail applyChagneDetail = otherChangeDetailList.get(rowIndex);
+                    header6.createCell(0).setCellValue(rowIndex + 1);
+                    header6.createCell(1).setCellValue(applyChagneDetail.getMemberName());
+                    header6.createCell(2).setCellValue(Constants.equalsInteger(applyChagneDetail.getSex(),0)?"鐢�":(Constants.equalsInteger(applyChagneDetail.getSex(),1)?"濂�":"-"));
+                    header6.createCell(3).setCellValue(applyChagneDetail.getIdcardNo());
+                    header6.createCell(4).setCellValue(applyChagneDetail.getCompanyName());
+                    header6.createCell(5).setCellValue(applyChagneDetail.getOldDuName());
+                    header6.createCell(6).setCellValue(applyChagneDetail.getOldWorkTypeName());
+                    header6.createCell(7).setCellValue(applyChagneDetail.getDuName());
+                    header6.createCell(8).setCellValue(applyChagneDetail.getWorkTypeName());
+                    for (int i = 0; i < 9; i++) {
+                        configFirstCell(sxssfWorkbook,header6.getCell(i));
+                    } 
+                }
+            } 
+            int rowIndex =  row + 1 ;
+            Row header6= sheet.createRow(rowIndex);
+            header6.createCell(0).setCellValue("鎶曚繚浼佷笟鐢虫槑:\n" +
+                    "1銆佸湪鐢宠涔︿笂濉啓鐨勪竴鍒囧唴瀹瑰睘瀹烇紝鍚﹀垯鏈紒涓氭壙鎷呬竴鍒囨硶寰嬭矗浠汇�俓n" +
+                    "2銆佺敱浜庡彉鏇村彈鐩婁汉浜х敓鐨勬硶寰嬬籂绾锋湰浼佷笟鎰挎壙鎷呬竴鍒囨硶寰嬭矗浠汇�俓n" +
+                    "3銆佹湰鐢宠琛ㄧ殑绛剧珷涓烘湰浼佷笟浜茶嚜绛剧讲锛屽鐢辨浜х敓鐨勬硶寰嬬籂绾锋湰浼佷笟鎰挎壙鎷呬竴鍒囨硶寰嬭矗浠汇�俓n");
+            for (int i = 1; i < 9; i++) {
+                header6.createCell(i).setCellValue("");
+            }
+            for (int i =0; i < 9; i++) {
+                if(i>0){
+                    header6.createCell(i).setCellValue("");
+                }
+                configInfoCell(sxssfWorkbook,header6.getCell(i),HorizontalAlignment.LEFT);
+            }
+            header6.setHeight((short) 2000);
+            sheet.addMergedRegion(new CellRangeAddress(rowIndex ,rowIndex,0,8));
+            Row header7= sheet.createRow(rowIndex+1);
+            header7.setHeight((short) 3000);
+            header7.createCell(0).setCellValue("鎶曚繚浜虹绔� 锛�                            \n \n \n" +"鏃ユ湡锛�     骞�     鏈�     鏃�    ");
+            for (int i =0; i < 9; i++) {
+                if(i>0){
+                    header7.createCell(i).setCellValue("");
+                }
+                configInfoCell(sxssfWorkbook,header7.getCell(i),HorizontalAlignment.RIGHT);
+            }
+            sheet.addMergedRegion(new CellRangeAddress(rowIndex+1 ,rowIndex+1,0,8));
+
+            //涓存椂缂撳啿鍖�
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            //鍒涘缓涓存椂鏂囦欢
+            sxssfWorkbook.write(out);
+            byte [] bookByteAry = out.toByteArray();
+            InputStream     in = new ByteArrayInputStream(bookByteAry);
+            String tempExcel = saveIsToFile(in);
+            String tempPdf =System.getProperty("java.io.tmpdir")+File.separator+UUID.randomUUID().toString()+".pdf";
+//            ExcelToPdfTool.excelToPdf(in,tempPdf);//杞琍DF
+            ExcelToPdfTool.excelToPdf(tempExcel,tempPdf);//杞琍DF
+            File f = new File(tempPdf);
+            if(f!=null && f.isFile() && f.length()>0){
+                return tempPdf;
+            }
+        } catch (Exception e) {
+            // throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+        return null;
+    }
+
+
+
+    /**
+     * 瀵煎嚭 鍚堝苟鍗曞姞鍑忎繚鐢宠璇﹀崟
+     * @param data 鏁版嵁
+     * @param sheetName Sheet鍚嶇О
+     */
+    public String exportUnionChangeExcelToPdf (UnionChange data, String sheetName) {
+        SXSSFWorkbook sxssfWorkbook;
+        try {
+            sxssfWorkbook = new SXSSFWorkbook();
+            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
+            for (int i = 0; i < 12; i++) {
+                sheet.setColumnWidth(i, ((i==3|| i==4|| i== 5 || i==9||i==10||  i==11)?16:8) * 2 * 256);
+            }
+            sheet.createFreezePane(0, 1);
+            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,11));
+            Row title = sheet.createRow(0);
+            title.setHeight((short) 2000);
+            for (int i = 0; i < 12; i++) {
+                title.createCell(i).setCellValue(i==0?sheetName:"");
+                configTitleCell(sxssfWorkbook,title.getCell(i));
+            }
+            Row header1 = sheet.createRow(1);
+            header1.createCell(0).setCellValue("鎶曚繚浜�");
+            header1.createCell(1).setCellValue("淇濋櫓鏂规");
+            header1.createCell(2).setCellValue("淇濆崟鍙�");
+            header1.createCell(3).setCellValue("淇濋櫓鐢熸晥璧锋湡");
+            header1.createCell(4).setCellValue("淇濋櫓鐢熸晥姝㈡湡");
+            header1.createCell(5).setCellValue("鍔犱繚浜烘暟");
+            header1.createCell(6).setCellValue("鍑忎繚浜烘暟");
+            header1.createCell(7).setCellValue("鏈熸湜鎵瑰崟鐢熸晥鏈�");
+            for (int i = 0; i < 8; i++) {
+                configFirstCell(sxssfWorkbook,header1.getCell(i));
+            }
+
+            Row header2 = sheet.createRow(2);
+            header2.createCell(0).setCellValue(data.getShopName());
+            header2.createCell(1).setCellValue(data.getSolutionsName());
+            header2.createCell(2).setCellValue(data.getApplyCode());
+            header2.createCell(3).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getStartTime()));
+            header2.createCell(4).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getEndTime()));
+            header2.createCell(5).setCellValue(data.getApplyChagneDetailList().stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList()).size());
+            header2.createCell(6).setCellValue(data.getApplyChagneDetailList().stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList()).size());
+            header2.createCell(7).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getValidTime()));
+            for (int i = 0; i < 8; i++) {
+                configDataCell(sxssfWorkbook,   header2.getCell(i));
+            }
+
+            Row header3 = sheet.createRow(3);
+            header3.createCell(0).setCellValue("琚繚闄╀汉");
+            header3.createCell(1).setCellValue(data.getCompanyNames());
+            header3.createCell(2).setCellValue("");
+            header3.createCell(3).setCellValue("");
+            header3.createCell(4).setCellValue("");
+            header3.createCell(5).setCellValue("");
+            header3.createCell(6).setCellValue("");
+            header3.createCell(7).setCellValue("");
+            for (int i = 0; i < 8; i++) {
+                configFirstCell(sxssfWorkbook,header3.getCell(i));
+            }
+            sheet.addMergedRegion(new CellRangeAddress(3  ,3,1,7));
+
+            Integer row = 4;
+            List<ApplyChagneDetail> addChangeDetailList = data.getApplyChagneDetailList().stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(addChangeDetailList)){
+                Row header4 = sheet.createRow(row);
+                header4.createCell(0).setCellValue("鍔犱繚浜哄憳");
+                for (int i = 0; i < 8; i++) {
+                    configFirstCell(sxssfWorkbook,   header4.getCell(i));
+                }
+                sheet.addMergedRegion(new CellRangeAddress(row  ,row,0,7));
+                row = row + 1;
+                Row header5 = sheet.createRow(row);
+                header5.createCell(0).setCellValue("搴忓彿");
+                header5.createCell(1).setCellValue("鍛樺伐濮撳悕");
+                header5.createCell(2).setCellValue("鎬у埆");
+                header5.createCell(3).setCellValue("韬唤璇佸彿");
+                header5.createCell(4).setCellValue("琚繚闄╀汉");
+                header5.createCell(5).setCellValue("娲鹃仯鍗曚綅");
+                header5.createCell(6).setCellValue("");
+                header5.createCell(7).setCellValue("鎵�灞炲伐绉�");
+                for (int i = 0; i < 8; i++) {
+                    configFirstCell(sxssfWorkbook,header5.getCell(i));
+                }
+                sheet.addMergedRegion(new CellRangeAddress(row  ,row,5,6));
+                for (int rowIndex = 0; rowIndex < addChangeDetailList.size(); rowIndex++) {
+                    row = row + 1 ;
+                    Row header6 = sheet.createRow(row);
+                    ApplyChagneDetail applyChagneDetail = addChangeDetailList.get(rowIndex);
+                    header6.createCell(0).setCellValue(rowIndex + 1);
+                    header6.createCell(1).setCellValue(applyChagneDetail.getMemberName());
+                    header6.createCell(2).setCellValue(Constants.equalsInteger(applyChagneDetail.getSex(),0)?"鐢�":(Constants.equalsInteger(applyChagneDetail.getSex(),1)?"濂�":"-"));
+                    header6.createCell(3).setCellValue(applyChagneDetail.getIdcardNo());
+                    header6.createCell(4).setCellValue(applyChagneDetail.getCompanyName());
+                    header6.createCell(5).setCellValue(applyChagneDetail.getDuName());
+                    header6.createCell(6).setCellValue("");
+                    header6.createCell(7).setCellValue(applyChagneDetail.getWorkTypeName());
+                    for (int i = 0; i < 8; i++) {
+                        configFirstCell(sxssfWorkbook,header6.getCell(i));
+                    }
+                    sheet.addMergedRegion(new CellRangeAddress(row  ,row,5,6));
+                }
+            }
+
+            List<ApplyChagneDetail> reduceChangeDetailList = data.getApplyChagneDetailList().stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList());
+            row = row + 1;
+            if(CollectionUtils.isNotEmpty(reduceChangeDetailList)){
+                Row header4 = sheet.createRow(row);
+                header4.createCell(0).setCellValue("鍑忎繚浜哄憳");
+                for (int i = 0; i < 8; i++) {
+                    configFirstCell(sxssfWorkbook,   header4.getCell(i));
+                }
+                sheet.addMergedRegion(new CellRangeAddress(row  ,row,0,7));
+
+                row = row + 1;
+                Row header5 = sheet.createRow(row);
+                header5.createCell(0).setCellValue("搴忓彿");
+                header5.createCell(1).setCellValue("鍛樺伐濮撳悕");
+                header5.createCell(2).setCellValue("鎬у埆");
+                header5.createCell(3).setCellValue("韬唤璇佸彿");
+                header5.createCell(4).setCellValue("琚繚闄╀汉");
+                header5.createCell(5).setCellValue("娲鹃仯鍗曚綅");
+                header5.createCell(6).setCellValue("");
+                header5.createCell(7).setCellValue("鎵�灞炲伐绉�");
+                for (int i = 0; i < 8; i++) {
+                    configFirstCell(sxssfWorkbook,header5.getCell(i));
+                }
+                sheet.addMergedRegion(new CellRangeAddress(row  ,row,5,6));
+
+                row = row + 1 ;
+                for (int rowIndex = 0; rowIndex < reduceChangeDetailList.size(); rowIndex++) {
+                    row = row + rowIndex;
+                    Row header6 = sheet.createRow(row);
+                    ApplyChagneDetail applyChagneDetail = reduceChangeDetailList.get(rowIndex);
+                    header6.createCell(0).setCellValue(rowIndex + 1);
+                    header6.createCell(1).setCellValue(applyChagneDetail.getMemberName());
+                    header6.createCell(2).setCellValue(Constants.equalsInteger(applyChagneDetail.getSex(),0)?"鐢�":(Constants.equalsInteger(applyChagneDetail.getSex(),1)?"濂�":"-"));
+                    header6.createCell(3).setCellValue(applyChagneDetail.getIdcardNo());
+                    header6.createCell(4).setCellValue(applyChagneDetail.getCompanyName());
+                    header6.createCell(5).setCellValue(applyChagneDetail.getDuName());
+                    header6.createCell(6).setCellValue("");
+                    header6.createCell(7).setCellValue(applyChagneDetail.getWorkTypeName());
+                    for (int i = 0; i < 8; i++) {
+                        configFirstCell(sxssfWorkbook,header6.getCell(i));
+                    }
+                    sheet.addMergedRegion(new CellRangeAddress(row  ,row,5,6));
+                }
+            }
+
+            int rowIndex = row + 1;
+            Row header6= sheet.createRow(rowIndex);
+            header6.createCell(0).setCellValue("鎶曚繚浼佷笟鐢虫槑:\n" +
+                    "1銆佸湪鐢宠涔︿笂濉啓鐨勪竴鍒囧唴瀹瑰睘瀹烇紝鍚﹀垯鏈紒涓氭壙鎷呬竴鍒囨硶寰嬭矗浠汇�俓n" +
+                    "2銆佺敱浜庡彉鏇村彈鐩婁汉浜х敓鐨勬硶寰嬬籂绾锋湰浼佷笟鎰挎壙鎷呬竴鍒囨硶寰嬭矗浠汇�俓n" +
+                    "3銆佹湰鐢宠琛ㄧ殑绛剧珷涓烘湰浼佷笟浜茶嚜绛剧讲锛屽鐢辨浜х敓鐨勬硶寰嬬籂绾锋湰浼佷笟鎰挎壙鎷呬竴鍒囨硶寰嬭矗浠汇�俓n");
+            for (int i = 1; i < 8; i++) {
+                header6.createCell(i).setCellValue("");
+            }
+            for (int i =0; i < 8; i++) {
+                if(i>0){
+                    header6.createCell(i).setCellValue("");
+                }
+                configInfoCell(sxssfWorkbook,header6.getCell(i),HorizontalAlignment.LEFT);
+            }
+            header6.setHeight((short) 2000);
+            sheet.addMergedRegion(new CellRangeAddress(rowIndex ,rowIndex,0,11));
+            Row header7= sheet.createRow(rowIndex+1);
+            header7.setHeight((short) 3000);
+            header7.createCell(0).setCellValue("鎶曚繚浜虹绔� 锛�                            \n \n \n" +"鏃ユ湡锛�     骞�     鏈�     鏃�    ");
+            for (int i =0; i < 8; i++) {
+                if(i>0){
+                    header7.createCell(i).setCellValue("");
+                }
+                configInfoCell(sxssfWorkbook,header7.getCell(i),HorizontalAlignment.RIGHT);
+            }
+            sheet.addMergedRegion(new CellRangeAddress(rowIndex+1 ,rowIndex+1,0,11));
+
+            //涓存椂缂撳啿鍖�
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            //鍒涘缓涓存椂鏂囦欢
+            sxssfWorkbook.write(out);
+            byte [] bookByteAry = out.toByteArray();
+            InputStream     in = new ByteArrayInputStream(bookByteAry);
+            String tempExcel = saveIsToFile(in);
+            String tempPdf =System.getProperty("java.io.tmpdir")+File.separator+UUID.randomUUID().toString()+".pdf";
+//            ExcelToPdfTool.excelToPdf(in,tempPdf);//杞琍DF
+            ExcelToPdfTool.excelToPdf(tempExcel,tempPdf);//杞琍DF
+            File f = new File(tempPdf);
+            if(f!=null && f.isFile() && f.length()>0){
+                return tempPdf;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            // throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+        return null;
+    }
 }
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index bc4bf5c..b609979 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -27,7 +27,8 @@
     public static final int ZERO = 0 ;
     public static final int ONE = 1 ;
     public static final int TWO = 2 ;
-    public static final int THREE = 3 ;
+    public static final int
+            THREE = 3 ;
     public static final int SEVEN = 7 ;
     public static final String ACCESS_ID="ACCESS_ID";
     public static final String BUCKETNAME = "BUCKETNAME";
@@ -441,17 +442,14 @@
 
         HBD_BD_APPLY_PDF(15, "鍚堝苟鍗�-淇濆崟鐢宠琛≒DF ", "鍚堝苟鍗�-淇濆崟鐢宠琛≒DF "),
         HBD_BD_SIGNED_PDF(16, "鍚堝苟鍗�-绛剧讲鍚庝繚鍗曠敵璇疯〃PDF", "鍚堝苟鍗�-绛剧讲鍚庝繚鍗曠敵璇疯〃PDF"),
-        COMPANY_TBD_SIGNED_PDF(17, "鍚堝苟鍗�-鎶曚繚鍗�-鍟嗘埛鎻愪氦锛堜紒涓氱缃诧級", "鍚堝苟鍗�-绛剧讲鍚庝繚鍗曠敵璇疯〃PDF"),
-        SOLUTIONS_CONFIRMATION_LATTER(18, "濮旀墭淇� - 鎶曚繚鏂规纭涔�", "濮旀墭淇� - 鏂规纭涔�"),
-        MEMBER_LIST_LATTER(19, "濮旀墭淇� - 鎶曚繚浜哄憳鍚嶅崟", "濮旀墭淇� - 鏂规纭涔�"),
-        CHANGE_MEMBER_LIST_LATTER(20, "濮旀墭淇� - 鍔犲噺淇濅汉鍛樺悕鍗�", "濮旀墭淇� - 鏂规纭涔�"),
-
-
-
-
-
-
-
+        COMPANY_TBD_SIGNED(17, "鍚堝苟鍗�-鎶曚繚鍗�-鍟嗘埛鎻愪氦", "鍚堝苟鍗�-鎶曚繚鍗�-鍟嗘埛鎻愪氦"),
+        SOLUTIONS_CONFIRMATION_LATTER(18, "鎶曚繚鏂规纭涔�", "鎶曚繚鏂规纭涔�"),
+        MEMBER_LIST_LATTER(19, "濮旀墭淇� - 鎶曚繚浜哄憳鍚嶅崟", "濮旀墭淇� - 鎶曚繚浜哄憳鍚嶅崟"),
+        CHANGE_MEMBER_LIST_LATTER(20, "濮旀墭淇� - 鍔犲噺淇濅汉鍛樺悕鍗�", "濮旀墭淇� - 鍔犲噺淇濅汉鍛樺悕鍗�"),
+        WTB_BD_DONE_PDF(21, "濮旀墭鎶曚繚鍗� - 鍚堝苟鍗曟渶缁堜繚鍗�", "濮旀墭鎶曚繚鍗� - 鍚堝苟鍗曟渶缁堜繚鍗�"),
+        COMPANY_TBD_SIGNED_PDF(22, "鍚堝苟鍗�-鎶曚繚鍗�-鍟嗘埛鎻愪氦锛堜紒涓氱缃诧級PDF", "鍚堝苟鍗�-鎶曚繚鍗�-鍟嗘埛鎻愪氦锛堜紒涓氱缃诧級PDF"),
+        WTB_CA_DONE_PDF(23, "濮旀墭鍔犲噺淇�/鎹㈠巶涓氬姟 - 鍚堝苟鍗曟渶缁堜繚鍗�", "濮旀墭鍔犲噺淇�/鎹㈠巶涓氬姟 - 鍚堝苟鍗曟渶缁堜繚鍗�"),
+        WTB_CONFIRMATION_LATTER(24, "濮旀墭淇� - 鎶曚繚鏂规纭涔�", "濮旀墭淇� - 鎶曚繚鏂规纭涔�"),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -709,6 +707,14 @@
         THSQZ(5, "鐢宠閫�鍥�"),
         YGB(6, "宸插叧闂�"),
         DQYQZ(7, "寰呯缃�"),
+
+        WTBDQS(28, "寰呯缃�"),
+        WTBDSH(22, "寰呭鏍�"),
+        WTBDCD(23, "寰呭嚭鍗�"),
+        WTBYTH(24, "宸查��鍥�"),
+        WTBYGB(25, "宸插叧闂�"),
+        WTBTBZ(26, "鎶曚繚涓�"),
+        WTBBZZ(27, "淇濋殰涓�"),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -780,6 +786,17 @@
         CA_JIAJIAN_APPLY_SIGN(23, "鍔犲噺淇濈敵璇蜂紒涓氱绔�","",1),
         CA_CHANGUNIT_APPLY_SIGN(24, "鎹㈠巶鐢宠浼佷笟绛剧珷","",1),
         CA_UPLOAD_AGAIN(25, "鍐嶆鎶曚繚","",1),
+
+
+        WTB_FINISH_FAQRS(26, "濮旀墭淇� - 浼佷笟瀹屾垚绛剧讲鏂规纭涔�","",0),
+        WTB_FINISH_MEMBER_LIST(27, "濮旀墭淇� - 浼佷笟瀹屾垚绛剧讲浜哄憳鍚嶅崟","",0),
+
+        CA_WTB_FINISH_MEMBER_LIST(28, "濮旀墭淇� - 鍔犲噺淇濈缃蹭汉鍛樺悕鍗�","",1),
+
+
+
+
+
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -954,24 +971,22 @@
 
 
     public  enum UnionChangeStatus {
-        MERGE(0, "寰呯缃茬敵璇峰崟","",0),
-        UPLOAD_INSURANCE_POLICY(1, "寰呬笂浼犱繚鍗�","",0),
-        FINISH(2, "淇濋殰涓�","",0),
-        CLOSE(3, "鍏抽棴","",0),
+        MERGE(0, "寰呯缃茬敵璇峰崟",""),
+        UPLOAD_INSURANCE_POLICY(1, "寰呬笂浼犱繚鍗�",""),
+        FINISH(2, "淇濋殰涓�",""),
+        CLOSE(3, "鍏抽棴",""),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
         private String info;
         private int key;
-        private int collectStatus;
 
 
         // 鏋勯�犳柟娉�
-        UnionChangeStatus(int key, String name,String info,int collectStatus) {
+        UnionChangeStatus(int key, String name,String info) {
             this.name = name;
             this.key = key;
             this.info = info;
-            this.collectStatus = collectStatus;
         }
 
         // 鏅�氭柟娉�
@@ -979,25 +994,6 @@
             for (UnionChangeStatus c : UnionChangeStatus.values()) {
                 if (c.getKey() == index) {
                     return c.name;
-                }
-            }
-            return null;
-        }
-        public static List<Integer> getKesByStatus(Integer collectStatus) {
-            List<Integer>  list = new ArrayList<>();
-            if(collectStatus!=null){
-                for (UnionChangeStatus c : UnionChangeStatus.values()) {
-                    if (Constants.equalsInteger(c.getCollectStatus() ,collectStatus)) {
-                        list.add(c.getKey());
-                    }
-                }
-            }
-            return list;
-        }
-        public static Integer getCollectStatus(Integer index) {
-            for (UnionChangeStatus c : UnionChangeStatus.values()) {
-                if (Constants.equalsInteger(c.getKey() , index)) {
-                    return c.collectStatus;
                 }
             }
             return null;
@@ -1035,14 +1031,6 @@
         public void setInfo(String info) {
             this.info = info;
         }
-
-        public int getCollectStatus() {
-            return collectStatus;
-        }
-
-        public void setCollectStatus(int collectStatus) {
-            this.collectStatus = collectStatus;
-        }
     }
 
     public  enum InsuranceApplyStatus {
@@ -1058,8 +1046,18 @@
         CLOSE(9, "璁㈠崟鍏抽棴","",6),
         PLATFORM_CHECK_PASS(10,"骞冲彴鎶曚繚瀹℃牳閫氳繃","鎻愪氦鎰忚锛�${param}",0),
         COMPANY_BACK_APPLY_PASS(11, "浼佷笟鐢宠閫�鍥�(骞冲彴鎶曚繚瀹℃牳閫氳繃)","鎻愪氦鎰忚锛�${param}",5),
-        COMPANY_APPLY_SIGNATURE(12, "濮旀墭淇�-浼佷笟宸茬缃叉姇淇濈‘璁や功","鎻愪氦鎰忚锛�${param}",5),
-        COMPANY_MEMBER_LIST_SIGNATURE(13, "濮旀墭淇�-浼佷笟宸茬缃蹭汉鍛樺悕鍗�","鎻愪氦鎰忚锛�${param}",5),
+
+
+
+        WTB_UPLOAD(20, "鎻愪氦鎶曚繚","",28),
+        WTB_COMPANY_APPLY_SIGNATURE(21, "濮旀墭淇�-浼佷笟宸茬缃叉姇淇濈‘璁や功","鎻愪氦鎰忚锛�${param}",28),
+        WTB_COMPANY_MEMBER_LIST_SIGNATURE(22, "濮旀墭淇�-浼佷笟宸茬缃蹭汉鍛樺悕鍗�","鎻愪氦鎰忚锛�${param}",22),
+        WTB_BUSINESS_CHECK_PASS(23,"鍟嗘埛鎶曚繚瀹℃牳閫氳繃","鎻愪氦鎰忚锛�${param}",23),
+        WTB_RETURN(24, "宸查��鍥�","鎻愪氦鎰忚锛�${param}",24),
+        WTB_CLOSED(25, "宸插叧闂�","鎻愪氦鎰忚锛�${param}",25),
+        WTB_TOUBAOING(26, "鎶曚繚涓�","鎻愪氦鎰忚锛�${param}",26),
+        WTB_DONE(27, "淇濋殰涓�","鎻愪氦鎰忚锛�${param}",27),
+
         ;
         // 鎴愬憳鍙橀噺
         private String name;
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
index 1ba8ae8..93dabf6 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
@@ -50,6 +50,8 @@
     private Integer applyId;
     @ApiModelProperty(value = "鍔犲噺淇濅富閿�")
     private Integer applyChangeId;
+    @ApiModelProperty(value = "鍚堝苟鍗曚富閿�")
+    private Integer unionApplyId;
 
     @ApiModelProperty(value = "绫诲瀷锛�0=鍔犱繚锛�1=鍑忎繚锛�2=鎹㈠巶 ")
     private List<Integer> types;
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/SmsCheckDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/SmsCheckDTO.java
new file mode 100644
index 0000000..bc8297e
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/SmsCheckDTO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.business.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author RenKang
+ */
+@Data
+public class SmsCheckDTO {
+
+    @ApiModelProperty(value = "涓氬姟涓婚敭", example = "1")
+    private Integer businessId;
+
+    @ApiModelProperty(value = "楠岃瘉鐮�")
+    private String code;
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java
index b33d8d9..98e0d03 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.dto;
 
+import com.doumee.dao.business.model.Multifile;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -27,9 +28,12 @@
     private Date applyDate;
 
     @ApiModelProperty(value = "淇濆崟鏂囦欢鍦板潃")
-    private String fileUrl;
+    private String fileurl;
 
     @ApiModelProperty(value = "淇濆崟鏂囦欢鍚嶇О")
-    private String fileName;
+    private String name;
+
+    @ApiModelProperty(value = "鍔犲噺淇� 淇濆崟鏂囦欢鏁版嵁")
+    private List<Multifile> applyChangeBXDList;
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java
index 1b472ca..628858a 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java
@@ -1,7 +1,10 @@
 package com.doumee.dao.business.dto;
 
+import com.doumee.dao.business.model.Multifile;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import java.util.List;
 
 /**
  * Created by IntelliJ IDEA.
@@ -16,10 +19,13 @@
     @ApiModelProperty(value = "涓氬姟涓婚敭")
     private Integer businessId;
 
-    @ApiModelProperty(value = "鏂囦欢璺緞")
-    private String filePath;
+    @ApiModelProperty(value = "鏂囦欢璺緞 ")
+    private String fileurl;
 
     @ApiModelProperty(value = "鏂囦欢鍚嶇О")
-    private String fileName;
+    private String name;
+
+    @ApiModelProperty(value = "浼佷笟淇濆崟 - 淇濋櫓鍗�")
+    private List<Multifile> multifileList;
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/UnionChangeJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/UnionChangeJoinMapper.java
new file mode 100644
index 0000000..b7ed9f4
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/UnionChangeJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.UnionChange;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/03/12 11:34
+ */
+public interface UnionChangeJoinMapper extends MPJJoinMapper<UnionChange> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
index 0a023a4..127994e 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
@@ -147,6 +147,10 @@
     @TableField(exist = false)
     private Integer solutionId;
 
+    @ApiModelProperty(value = "鍛樺伐浼佷笟鍚嶇О")
+    @TableField(exist = false)
+    private String companyName;
+
     @ApiModelProperty(value = "骞撮緞")
     @TableField(exist = false)
     private long age;
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
index 12970c1..4be61b8 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -220,6 +220,12 @@
     @ApiModelProperty(value = "鏂规绫诲瀷 0鐩翠繚 1濮旀墭鎶曚繚")
     @TableField(exist = false)
     private Integer solutionType;
+
+    @ApiModelProperty(value = "鍚堝苟鍗曚富閿紙淇濆崟锛�")
+    @TableField(exist = false)
+    private Integer unionApplyId;
+
+
     public TaxesInvoicingVO toTaxesInvoicingVO(){
         TaxesInvoicingVO taxesInvoicingVO = new TaxesInvoicingVO();
         taxesInvoicingVO.setId(this.getId());
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 46a235c..3647d7c 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
@@ -143,4 +143,8 @@
     @TableField(exist = false)
     private String workTypeName;
 
+    @ApiModelProperty(value = "浼佷笟鍚嶇О")
+    @TableField(exist = false)
+    private String companyName;
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java b/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
index fa689c9..3dec0e7 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
@@ -108,8 +108,12 @@
     @ExcelColumn(name="鍚堝苟鍗曠紪鐮侊紙鍏宠仈union_apply)")
     private Integer unionApplyId;
 
-    @ApiModelProperty(value = "鍚堝苟鍗�-鎶曚繚鍗曠姸鎬� 0=鏈笂浼�;1=宸蹭笂浼�;2=宸茬缃�", example = "1")
+    @ApiModelProperty(value = "鍚堝苟鍗�-鎶曚繚鍗曠姸鎬� 0=鏈笂浼�;1=宸蹭笂浼�;2=宸茬缃�;3=宸蹭笂浼犱繚闄╁崟", example = "1")
     private Integer unionApplyTbdStatus;
+
+    @ApiModelProperty(value = "濮旀墭淇�-鎶曚繚鍗曞悎鍚屽彿 锛堝晢鎴蜂笂浼狅紝浼佷笟绛剧讲锛�")
+    @ExcelColumn(name="濮旀墭淇�-鎶曚繚鍗曞悎鍚屽彿 锛堝晢鎴蜂笂浼狅紝浼佷笟绛剧讲锛�")
+    private String applyTbdNo;
 
     @ApiModelProperty(value = "鍗曞彿")
     @ExcelColumn(name="鍗曞彿")
@@ -118,7 +122,8 @@
     @ExcelColumn(name="鍦ㄧ嚎绛剧珷鍚堝悓鍙�")
     private String signApplyNo;
 
-    @ApiModelProperty(value = "鐘舵�� 0寰呭鏍� 1骞冲彴閫�鍥炰繚鍗曪紙宸查��鍥烇級 2宸蹭笂浼犱唬绛剧敵璇疯〃寰呬紒涓氱绔狅紙寰呯缃诧級  3宸茬绔犲緟涓婁紶淇濋櫓鍗曪紙寰呭嚭鍗曪級 4淇濆崟鍑哄叿澶辫触閫�鍥烇紙宸查��鍥烇級 5宸蹭笂浼犱繚鍗曪紙淇濋殰涓級6浼佷笟鐢宠閫�鍥炰腑 7骞冲彴鍚屾剰閫�鍥烇紙宸查��鍥烇級 8浼佷笟鍏抽棴  锛堝凡鍏抽棴锛�", example = "1")
+    @ApiModelProperty(value = "鐘舵�� 0寰呭鏍� 1骞冲彴閫�鍥炰繚鍗曪紙宸查��鍥烇級 2宸蹭笂浼犱唬绛剧敵璇疯〃寰呬紒涓氱绔狅紙寰呯缃诧級  3宸茬绔犲緟涓婁紶淇濋櫓鍗曪紙寰呭嚭鍗曪級 4淇濆崟鍑哄叿澶辫触閫�鍥烇紙宸查��鍥烇級 5宸蹭笂浼犱繚鍗曪紙淇濋殰涓級6浼佷笟鐢宠閫�鍥炰腑 7骞冲彴鍚屾剰閫�鍥烇紙宸查��鍥烇級 8浼佷笟鍏抽棴  锛堝凡鍏抽棴锛�;" +
+            " 銆愬鎵樻姇淇濄�� 0鎻愪氦鎶曚繚 12宸茬缃叉柟妗堢‘璁や功 13宸茬缃插悕鍗� 10瀹℃牳閫氳繃 5淇濋殰涓�", example = "1")
     @ExcelColumn(name="鐘舵�� 0寰呭鏍� 1骞冲彴閫�鍥炰繚鍗曪紙宸查��鍥烇級 2宸蹭笂浼犱唬绛剧敵璇疯〃寰呬紒涓氱绔狅紙寰呯缃诧級  3宸茬绔犲緟涓婁紶淇濋櫓鍗曪紙寰呭嚭鍗曪級 4淇濆崟鍑哄叿澶辫触閫�鍥烇紙宸查��鍥烇級 5宸蹭笂浼犱繚鍗曪紙淇濋殰涓級6浼佷笟鐢宠閫�鍥炰腑 7骞冲彴鍚屾剰閫�鍥烇紙宸查��鍥烇級 8浼佷笟鍏抽棴  锛堝凡鍏抽棴锛�")
     private Integer status;
 
@@ -190,6 +195,13 @@
     @TableField(exist = false)
     private Multifile baoxiandanFile;
 
+    @ApiModelProperty(value = "鐢宠鍗曞璞�")
+    @TableField(exist = false)
+    private Multifile shenqingdanFile;
+    @ApiModelProperty(value = "绛剧讲鍚庢柟妗堢‘璁や功瀵硅薄")
+    @TableField(exist = false)
+    private Multifile fanganFile;
+
     @ApiModelProperty(value = "鏃ュ織璁板綍")
     @TableField(exist = false)
     private List<ApplyLog> applyLogList;
@@ -207,7 +219,6 @@
     @TableField(exist = false)
     private Date lastChangeDate;
 
-
     @ApiModelProperty(value = "鏈�浣庡勾榫�", example = "1")
     @TableField(exist = false)
     private Integer minAge;
@@ -215,7 +226,6 @@
     @ApiModelProperty(value = "鏈�楂樺勾榫�", example = "1")
     @TableField(exist = false)
     private Integer maxAge;
-
 
     @ApiModelProperty(value = "淇濋櫓璐圭敤(浜�/澶╋級", example = "1")
     @TableField(exist = false)
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java b/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
index 29c91bd..ee6648f 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
@@ -177,5 +177,8 @@
     @ApiModelProperty(value = "濮旀墭鍟嗘埛鍚嶇О", example = "1")
     @TableField(exist = false)
     private String shopName;
+    @ApiModelProperty(value = "鏂规纭涔﹀璞�", example = "1")
+    @TableField(exist = false)
+    private Multifile fanganFile;
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java b/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
index b1f4ee3..3d5f275 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.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 io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -62,17 +63,14 @@
 
     @ApiModelProperty(value = "瀹為檯淇濋櫓鐢熸晥姝㈡湡")
     @ExcelColumn(name="瀹為檯淇濋櫓鐢熸晥姝㈡湡")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endTime;
 
     @ApiModelProperty(value = "瀹為檯淇濋櫓鐢熸晥璧锋湡")
     @ExcelColumn(name="瀹為檯淇濋櫓鐢熸晥璧锋湡")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date startTime;
 
     @ApiModelProperty(value = "鏈�杩戞搷浣滄椂闂�")
     @ExcelColumn(name="鏈�杩戞搷浣滄椂闂�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date checkDate;
 
     @ApiModelProperty(value = "鏈�杩戞搷浣滃娉�")
@@ -107,4 +105,25 @@
     @ExcelColumn(name="鏂规缂栫爜锛堝叧鑱攕olutions锛�")
     private Integer solutionId;
 
+    @ApiModelProperty(value = "鍟嗘埛鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "鏂规鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String solutionName;
+
+    @ApiModelProperty(value = "鏌ヨ寮�濮嬫棩鏈�", example = "1")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date queryStartTime;
+
+    @ApiModelProperty(value = "鏌ヨ缁撴潫鏃ユ湡", example = "1")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date queryEndTime;
+
+    @ApiModelProperty(value = "鏈嶅姟澶╂暟")
+    @TableField(exist = false)
+    private Integer serviceDays;
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java b/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java
index bdf08f7..d73a164 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.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 io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,7 +9,10 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鍔犲噺淇濇崲鍘傚悎骞跺崟淇℃伅琛�
@@ -93,4 +97,56 @@
     @ExcelColumn(name="鍚堝苟淇濆崟涓婚敭")
     private Integer unionApplyId;
 
+    @ApiModelProperty(value = "鍟嗘埛鍚嶇О")
+    @TableField(exist = false)
+    private String shopName;
+
+    @ApiModelProperty(value = "鏂规鍚嶇О")
+    @TableField(exist = false)
+    private String solutionsName;
+
+    @ApiModelProperty(value = "鍚堝苟鍗曠紪鍙�")
+    @TableField(exist = false)
+    private String applyCode;
+
+
+    @ApiModelProperty(value = "瀹為檯淇濋櫓鐢熸晥姝㈡湡")
+    @TableField(exist = false)
+    private Date endTime;
+
+    @ApiModelProperty(value = "瀹為檯淇濋櫓鐢熸晥璧锋湡")
+    @TableField(exist = false)
+    private Date startTime;
+
+
+    @ApiModelProperty(value = "浼佷笟鍚嶇О ,鍒嗗壊")
+    @TableField(exist = false)
+    private String companyNames;
+
+    @ApiModelProperty(value = "鏌ヨ寮�濮嬫棩鏈�", example = "1")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date queryStartTime;
+
+    @ApiModelProperty(value = "鏌ヨ缁撴潫鏃ユ湡", example = "1")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date queryEndTime;
+
+
+    @ApiModelProperty(value = "鏄庣粏琛岃褰�")
+    @TableField(exist = false)
+    private List<ApplyChagneDetail> applyChagneDetailList;
+
+    @ApiModelProperty(value = "鍔犱繚浜烘暟")
+    @TableField(exist = false)
+    private Integer addNum;
+
+    @ApiModelProperty(value = "鍑忎繚浜烘暟")
+    @TableField(exist = false)
+    private Integer delNum;
+
+    @ApiModelProperty(value = "鎹㈠巶浜烘暟")
+    @TableField(exist = false)
+    private Integer changeNum;
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java b/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
index f831e59..c9848d7 100644
--- a/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
+++ b/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
@@ -4,6 +4,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
 import com.doumee.dao.business.dto.ApplyChangeOptDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.model.ApplyChange;
 import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
@@ -28,6 +29,7 @@
     Integer back(ApplyChange param);
     Integer dealBackApply(ApplyChange param);
     Integer uploadPidan(ApplyChange insuranceApply);
+    Integer check(ApplyChange applyChange);
     /**
      * 涓婚敭鍒犻櫎
      *
@@ -124,9 +126,9 @@
 
     /**
      * 濮旀墭淇� 浜哄憳鍚嶅崟绛剧讲
-     * @param applyChangeId
+     * @param smsCheckDTO
      * @return
      */
-    String getChangeMemberListOnlineSignLink(Integer applyChangeId);
+    String getChangeMemberListOnlineSignLink(SmsCheckDTO smsCheckDTO);
 
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java b/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
index f46c055..0ee55fd 100644
--- a/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
+++ b/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
@@ -5,6 +5,7 @@
 import com.doumee.dao.business.dto.CountCyclePriceDTO;
 import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
 import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.jzq.common.bean.sign.NotifyDataReq;
@@ -143,16 +144,23 @@
 
     /**
      * 濮旀墭淇� 鎶曚繚纭涔︾绔犱笟鍔�
-     * @param applyId
+     * @param smsCheckDTO
      * @return
      */
-    String getSignTBQRSLink(Integer applyId);
+    String getSignTBQRSLink(SmsCheckDTO smsCheckDTO);
 
     /**
      * 浜哄憳鍚嶅崟绛剧珷
-     * @param applyId
+     * @param smsCheckDTO
      * @return
      */
-    String getMemberListOnlineSignLink(Integer applyId);
+    String getMemberListOnlineSignLink(SmsCheckDTO smsCheckDTO);
+
+    /**
+     * 濮旀墭淇� 鎶曚繚鐢宠绛剧讲
+     * @param smsCheckDTO
+     * @return
+     */
+    String getSignWTBTBDLink(SmsCheckDTO smsCheckDTO);
 }
 
diff --git a/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java b/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
index 6e36ad7..bc3f69e 100644
--- a/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
+++ b/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
@@ -3,6 +3,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.dto.SaveUnionApplyDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.dto.UnionApplyBXDDTO;
 import com.doumee.dao.business.dto.UploadMultifileDTO;
 import com.doumee.dao.business.model.UnionApply;
@@ -118,10 +119,10 @@
 
     /**
      * 鍚堝苟鍗� 淇濆崟绛剧讲
-     * @param id
+     * @param smsCheckDTO
      * @return
      */
-    String getSignLink(Integer id);
+    String getSignLink(SmsCheckDTO smsCheckDTO);
 
     /**
      * 涓婁紶淇濋櫓鍗�
@@ -129,4 +130,5 @@
      */
     void uploadBXD(UnionApplyBXDDTO unionApplyBXDDTO);
 
+    UnionApply detail(Integer applyId);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/UnionChangeService.java b/server/service/src/main/java/com/doumee/service/business/UnionChangeService.java
index d626d1f..ed1c9e3 100644
--- a/server/service/src/main/java/com/doumee/service/business/UnionChangeService.java
+++ b/server/service/src/main/java/com/doumee/service/business/UnionChangeService.java
@@ -3,6 +3,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.dto.SaveUnionChangeDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.dto.UnionChangeBXDDTO;
 import com.doumee.dao.business.model.UnionChange;
 import java.util.List;
@@ -113,10 +114,10 @@
 
     /**
      * 鍚堝苟鍗曪紙鍔犲噺淇�/鎹㈠巶锛� - 鎶曚繚鐢宠绛剧讲
-     * @param id
+     * @param smsCheckDTO
      * @return
      */
-    String getSignLink(Integer id);
+    String getSignLink(SmsCheckDTO smsCheckDTO);
 
 
     /**
@@ -125,5 +126,10 @@
      */
     void uploadBXD(UnionChangeBXDDTO unionChangeBXDDTO);
 
-
+    /**
+     * 鏌ヨ璇︽儏
+     * @param id
+     * @return
+     */
+    UnionChange getDetail(Integer id);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
index d51c086..7e765d2 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
@@ -189,6 +189,7 @@
         MPJLambdaWrapper<ApplyChagneDetail> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
         queryWrapper.selectAll(ApplyChagneDetail.class);
+        queryWrapper.selectAs(Company::getName,ApplyChagneDetail::getCompanyName);
         queryWrapper.select("t2.name",ApplyChagneDetail::getWorkTypeName);
         queryWrapper.select("t3.name",ApplyChagneDetail::getDuName);
         queryWrapper.select("t4.name",ApplyChagneDetail::getOldWorkTypeName);
@@ -201,6 +202,7 @@
         queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId);
         queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId);
         queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getOldDuId);
+        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         ApplyDetailPageDTO applyDetailPageDTO = pageWrap.getModel();
         queryWrapper.exists(!Objects.isNull(applyDetailPageDTO.getApplyId()),
                 " select 1 from apply_change ac where ac.isdeleted = 0 and ac.status in (1,2)  and ac.apply_id = "+applyDetailPageDTO.getApplyId()+" and ac.id = t.apply_change_id  ");
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
index 33dbed9..8dceba4 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -12,10 +12,7 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
-import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
-import com.doumee.dao.business.dto.ApplyChangeOptDTO;
-import com.doumee.dao.business.dto.CountCyclePriceDTO;
-import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
+import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.join.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
@@ -25,6 +22,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.third.SignService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -104,6 +102,8 @@
     @Autowired
     private SolutionsMapper solutionsMapper;
 
+    @Autowired
+    private SmsEmailService smsEmailService;
     @Autowired
     private NoticesMapper noticesMapper;
     /**
@@ -1465,7 +1465,7 @@
                 .in(!Objects.isNull(model.getStatus())&&model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,
                         Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey(),
                         Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())
-//                .eq(!Objects.isNull(model.getCompanyId()),InsuranceApply::getCompanyId,model.getCompanyId())
+                .eq(!Objects.isNull(model.getUnionApplyId()),InsuranceApply::getUnionApplyId,model.getUnionApplyId())
 //                .eq(!Objects.isNull(model.getSolutionsId()),ApplyChange::getSolutionsId,model.getSolutionsId())
                 .eq(!Objects.isNull(model.getSolutionType()),Solutions::getType,model.getSolutionType())
                 .eq(!Objects.isNull(model.getApplyId()),ApplyChange::getApplyId,model.getApplyId())
@@ -1967,8 +1967,18 @@
      * 浜哄憳鍚嶅崟绛剧珷
      */
     @Override
-    public String getChangeMemberListOnlineSignLink(Integer applyChangeId) {
-        ApplyChange model = this.queryApplyChangeData(applyChangeId);
+    public String getChangeMemberListOnlineSignLink(SmsCheckDTO smsCheckDTO) {
+        if(Objects.isNull(smsCheckDTO)
+                || Objects.isNull(smsCheckDTO.getBusinessId())
+                || StringUtils.isBlank(smsCheckDTO.getCode())
+        ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        //楠岃瘉 楠岃瘉鐮�
+        if(!debugModel){
+            smsEmailService.validateCode(smsCheckDTO.getCode());
+        }
+        ApplyChange model = this.queryApplyChangeData(smsCheckDTO.getBusinessId());
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠姞鍑忎繚淇℃伅");
         }
@@ -2020,6 +2030,57 @@
 
 
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer check(ApplyChange applyChange) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!user.getType().equals(Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if(applyChange.getId() == null){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        ApplyChange model = applyChangeJoinMapper.selectJoinOne(ApplyChange.class,
+                new MPJLambdaWrapper<ApplyChange>()
+                        .selectAll(ApplyChange.class)
+                        .selectAs(InsuranceApply::getSolutionId,ApplyChange::getSolutionsId)
+                        .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
+                        .eq(ApplyChange::getId,applyChange.getId())
+                        .last(" limit 1")
+        );
 
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Solutions solutions = solutionsMapper.selectById(model.getSolutionsId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
+        }
+        if(solutions.getType().equals(Constants.ZERO)){
+           throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐩翠繚鍗曟嵁鏃犳硶杩涜璇ユ搷浣�");
+        }else{
+            if(!Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.COMPANY_SIGN.getKey())){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+        }
+
+        ApplyChange update = new ApplyChange();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(applyChange.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        if(applyChange.getDealBackApply() ==1){
+            //濡傛灉鏄笉閫氳繃
+            update.setStatus(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey());
+        }else{
+            update.setStatus(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS.getKey());
+        }
+        applyChangeJoinMapper.updateById(update);
+
+        return  1;
+
+    }
 
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
index b62574e..5c1ffc7 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
@@ -201,12 +201,14 @@
         queryWrapper.selectAs(Member::getIdcardNo,ApplyDetail::getIdcardNo);
         queryWrapper.selectAs(Member::getName,ApplyDetail::getMemberName);
         queryWrapper.selectAs(Solutions::getName,ApplyDetail::getSolutionName);
+        queryWrapper.selectAs(Company::getName,ApplyDetail::getCompanyName);
         queryWrapper.selectAs(InsuranceApply::getStatus,ApplyDetail::getSolutionName);
         queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId);
         queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyDetail::getWorktypeId);
         queryWrapper.leftJoin(Member.class,Member::getId,ApplyDetail::getMemberId);
         queryWrapper.leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId);
         queryWrapper.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
+        queryWrapper.leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId);
 
         ApplyDetailPageDTO applyDetailPageDTO = pageWrap.getModel();
 
@@ -225,6 +227,7 @@
 
         queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getDuId()),ApplyDetail::getDuId,applyDetailPageDTO.getDuId());
         queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getWorkTypeId()),ApplyDetail::getWorktypeId,applyDetailPageDTO.getWorkTypeId());
+        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getUnionApplyId()),ApplyDetail::getUnionApplyId,applyDetailPageDTO.getUnionApplyId());
         queryWrapper.like(StringUtils.isNotBlank(applyDetailPageDTO.getMemberName()),Member::getName,applyDetailPageDTO.getMemberName());
         queryWrapper.ge(StringUtils.isNotBlank(applyDetailPageDTO.getStartTimeS()),ApplyDetail::getStartTime,applyDetailPageDTO.getStartTimeS()+" 00:00:00.0");
         queryWrapper.le(StringUtils.isNotBlank(applyDetailPageDTO.getStartTimeE()),ApplyDetail::getStartTime,applyDetailPageDTO.getStartTimeE()+" 23:59:59.0");
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java
index e090617..1b1b51e 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java
@@ -156,7 +156,8 @@
             newVersion = dispatchUnitMapper.selectOne(new QueryWrapper<DispatchUnit>().lambda()
                     .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
                     .eq(DispatchUnit::getDataType,Constants.TWO)
-                    .eq(DispatchUnit::getBaseId,model.getId()).last(" limit 1"));
+                    .eq(DispatchUnit::getBaseId,model.getId())
+                    .last(" limit 1"));
         }
         if(Objects.isNull(newVersion)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌娲鹃仯鍗曚綅鏈�鏂扮増鏈�");
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 03a8e69..0902a7f 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
@@ -16,6 +16,7 @@
 import com.doumee.dao.business.dto.CountCyclePriceDTO;
 import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
 import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.join.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
@@ -514,7 +515,7 @@
         InsuranceApply update = new InsuranceApply();
         update.setEditDate(new Date());
         update.setEditor(model.getCreator());
-        update.setStatus(Constants.InsuranceApplyStatus.COMPANY_APPLY_SIGNATURE.getKey());
+        update.setStatus(Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE.getKey());
         update.setCheckDate(update.getEditDate());
         update.setCheckInfo("浼佷笟瀹屾垚绛剧讲鏂规纭涔�");
         update.setCheckUserId(model.getCreator());
@@ -526,13 +527,56 @@
         f.setCreator(model.getCreator());
         f.setObjId(update.getId());
         f.setCreateDate(update.getEditDate());
-        f.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
+        f.setObjType(Constants.MultiFile.WTB_CONFIRMATION_LATTER.getKey());
         f.setType(Constants.TWO);
         f.setFileurl(fileurl);
         f.setFileurlFull(fullUrl);
         f.setInfo("浼佷笟瀹屾垚绛剧讲鏂规纭涔�");
         f.setName("鏂规纭涔�.pdf");
         multifileMapper.insert(f);
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.WTB_FINISH_FAQRS;
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null
+                ,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  f;
+    }
+
+    /**
+     * 濮旀墭淇�  浼佷笟绛剧讲鎶曚繚鐢宠涔�
+     * @param model
+     * @param fileurl
+     * @param fullUrl
+     * @return
+     */
+    public Multifile   uploadTBSQSSignedFileDo(InsuranceApply model,String fileurl,String fullUrl) {
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(model.getCreator());
+        update.setUnionApplyTbdStatus(Constants.TWO);
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo("濮旀墭淇濅紒涓氬畬鎴愮缃叉姇淇濈敵璇蜂功");
+        update.setCheckUserId(model.getCreator());
+        update.setId(model.getId());
+        insuranceApplyMapper.updateById(update);
+
+        Multifile f = new Multifile();
+        f.setIsdeleted(Constants.ZERO);
+        f.setCreator(model.getCreator());
+        f.setObjId(update.getId());
+        f.setCreateDate(update.getEditDate());
+        f.setObjType(Constants.MultiFile.COMPANY_TBD_SIGNED_PDF.getKey());
+        f.setType(Constants.TWO);
+        f.setFileurl(fileurl);
+        f.setFileurlFull(fullUrl);
+        f.setInfo("濮旀墭淇濅紒涓氬畬鎴愮缃叉姇淇濈敵璇蜂功");
+        f.setName("鎶曚繚鐢宠涔�.pdf");
+        multifileMapper.insert(f);
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.SIGNATURE;
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null
+                ,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
         return  f;
     }
 
@@ -547,7 +591,7 @@
         InsuranceApply update = new InsuranceApply();
         update.setEditDate(new Date());
         update.setEditor(model.getCreator());
-        update.setStatus(Constants.InsuranceApplyStatus.COMPANY_MEMBER_LIST_SIGNATURE.getKey());
+        update.setStatus(Constants.InsuranceApplyStatus.WTB_COMPANY_MEMBER_LIST_SIGNATURE.getKey());
         update.setCheckDate(update.getEditDate());
         update.setCheckInfo("浼佷笟瀹屾垚绛剧讲浜哄憳鍚嶅崟");
         update.setCheckUserId(model.getCreator());
@@ -566,6 +610,12 @@
         f.setInfo("浼佷笟瀹屾垚绛剧讲浜哄憳鍚嶅崟");
         f.setName("浜哄憳鍚嶅崟.pdf");
         multifileMapper.insert(f);
+
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.WTB_FINISH_MEMBER_LIST;
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null
+                ,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
         return  f;
     }
     
@@ -608,6 +658,7 @@
         f.setInfo("浼佷笟鐢宠琛ㄧ缃叉枃浠�");
         f.setName("绛剧珷鐢宠琛�.pdf");
         multifileMapper.insert(f);
+
         Constants.ApplyLogType applyLogType =Constants.equalsInteger(Constants.ZERO,model.getType())? Constants.ApplyLogType.CA_JIAJIAN_APPLY_SIGN: Constants.ApplyLogType.CA_CHANGUNIT_APPLY_SIGN;
         ApplyLog log = new ApplyLog(update,applyLogType.getName(), null,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
         applyLogMapper.insert(log);
@@ -640,6 +691,10 @@
         f.setInfo("浼佷笟瀹屾垚绛剧讲浜哄憳鍚嶅崟");
         f.setName("绛剧珷浜哄憳鍚嶅崟.pdf");
         multifileMapper.insert(f);
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_WTB_FINISH_MEMBER_LIST;
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
 
         return f;
     }
@@ -737,10 +792,10 @@
                 String fileUrl = uploadSignFile(link);
                 if(StringUtils.isBlank(fileUrl)){
                     //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
-                    return;
+                    continue;
                 }
                 uploadSignedFileDo(model,fileUrl,path+fileUrl);
-                return;
+//                return;
             }
         }
         //濮旀墭淇� 浼佷笟绛剧讲鎶曚繚纭涔�
@@ -752,7 +807,7 @@
                         .selectAs(Company::getName,InsuranceApply::getCompanyName)
                         .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                         .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
-                        .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD.getKey())
+                        .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_UPLOAD.getKey())
                         .eq(Solutions::getType,Constants.ONE)
                         .isNotNull(InsuranceApply::getSignQrsNo));
         if(applyList !=null && applyList.size()>0 ){
@@ -765,10 +820,10 @@
                 String fileUrl = uploadSignFile(link);
                 if(StringUtils.isBlank(fileUrl)){
                     //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
-                    return;
+                    continue;
                 }
                 uploadFAQRSSignedFileDo(model,fileUrl,path+fileUrl);
-                return;
+//                return;
             }
         }
 
@@ -781,7 +836,7 @@
                         .selectAs(Company::getName,InsuranceApply::getCompanyName)
                         .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                         .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
-                        .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.COMPANY_APPLY_SIGNATURE.getKey())
+                        .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE.getKey())
                         .eq(Solutions::getType,Constants.ONE)
                         .isNotNull(InsuranceApply::getSignMemberListNo));
         if(applyList !=null && applyList.size()>0 ){
@@ -794,12 +849,44 @@
                 String fileUrl = uploadSignFile(link);
                 if(StringUtils.isBlank(fileUrl)){
                     //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
-                    return;
+                    continue;
                 }
                 uploadApplyMemberListSignedFileDo(model,fileUrl,path+fileUrl);
-                return;
+//                return;
             }
         }
+        
+        //濮旀墭淇濅紒涓氱缃叉姇淇濈敵璇峰崟
+        applyList = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class,
+                new MPJLambdaWrapper<InsuranceApply>()
+                        .selectAll(InsuranceApply.class)
+                        .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
+                        .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
+                        .selectAs(Company::getName,InsuranceApply::getCompanyName)
+                        .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                        .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
+                        .eq(InsuranceApply::getUnionApplyTbdStatus,Constants.ONE)
+                        .eq(Solutions::getType,Constants.ONE)
+                        .isNotNull(InsuranceApply::getApplyTbdNo));
+
+        if(applyList !=null && applyList.size()>0 ){
+            for(InsuranceApply model : applyList){
+                String status = signService.linkFileStatus(model.getApplyTbdNo());
+                if(!StringUtils.equals(status,"3")){
+                    continue;
+                }
+                String link = signService.linkFile(model.getApplyTbdNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    continue;
+                }
+                uploadTBSQSSignedFileDo(model,fileUrl,path+fileUrl);
+//                return;
+            }
+        }
+        
+        
 
         List<ApplyChange> chagneList = applyChangeMapper.selectJoinList(ApplyChange.class,
                 new MPJLambdaWrapper<ApplyChange>()
@@ -824,10 +911,10 @@
                 String fileUrl = uploadSignFile(link);
                 if(StringUtils.isBlank(fileUrl)){
                     //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
-                    return;
+                    continue;
                 }
                 uploadChangeSignedFileDo(model,fileUrl,path+fileUrl);
-                return;
+//                return;
             }
         }
 
@@ -854,10 +941,10 @@
                 String fileUrl = uploadSignFile(link);
                 if(StringUtils.isBlank(fileUrl)){
                     //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
-                    return;
+                    continue;
                 }
                 uploadChangeMemberListSignedFileDo(model,fileUrl,path+fileUrl);
-                return;
+//                return;
             }
         }
 
@@ -881,12 +968,16 @@
                 String fileUrl = uploadSignFile(link);
                 if(StringUtils.isBlank(fileUrl)){
                     //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
-                    return;
+                    continue;
                 }
                 uploadUnionApplySignedFileDo(model,fileUrl,path+fileUrl);
-                return;
+//                return;
             }
         }
+
+
+
+
 
     }
     @Override
@@ -933,7 +1024,7 @@
                             .eq(Solutions::getType,Constants.ONE)
                             .eq(InsuranceApply::getSignQrsNo,data.getApplyNo())
                             .last("limit 1" ));
-            if(modelTBQRS != null && Constants.equalsInteger(modelTBQRS.getStatus(),Constants.InsuranceApplyStatus.UPLOAD.getKey())){
+            if(modelTBQRS != null && Constants.equalsInteger(modelTBQRS.getStatus(),Constants.InsuranceApplyStatus.WTB_UPLOAD.getKey())){
                 //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
                 String link = signService.linkFile(data.getApplyNo());
                 String fileUrl = uploadSignFile(link);
@@ -944,6 +1035,9 @@
                 uploadFAQRSSignedFileDo(modelTBQRS,fileUrl,path+fileUrl);
                 return;
             }
+
+
+
             //濮旀墭淇� 浼佷笟绛剧讲浜哄憳鍚嶅崟
             InsuranceApply modelMemberList = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,
                     new MPJLambdaWrapper<InsuranceApply>()
@@ -956,7 +1050,7 @@
                             .eq(Solutions::getType,Constants.ONE)
                             .eq(InsuranceApply::getSignMemberListNo,data.getApplyNo())
                             .last("limit 1" ));
-            if(modelMemberList != null && Constants.equalsInteger(modelMemberList.getStatus(),Constants.InsuranceApplyStatus.COMPANY_APPLY_SIGNATURE.getKey())){
+            if(modelMemberList != null && Constants.equalsInteger(modelMemberList.getStatus(),Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE.getKey())){
                 //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
                 String link = signService.linkFile(data.getApplyNo());
                 String fileUrl = uploadSignFile(link);
@@ -965,6 +1059,31 @@
                     return;
                 }
                 uploadApplyMemberListSignedFileDo(modelMemberList,fileUrl,path+fileUrl);
+                return;
+            }
+
+
+            //濮旀墭淇� 鎶曚繚鐢宠涔︾缃�
+            InsuranceApply modelTBQSQ = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,
+                    new MPJLambdaWrapper<InsuranceApply>()
+                            .selectAll(InsuranceApply.class)
+                            .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
+                            .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
+                            .selectAs(Company::getName,InsuranceApply::getCompanyName)
+                            .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
+                            .eq(Solutions::getType,Constants.ONE)
+                            .eq(InsuranceApply::getApplyTbdNo,data.getApplyNo())
+                            .last("limit 1" ));
+            if(modelTBQRS != null && Constants.equalsInteger(modelTBQSQ.getUnionApplyTbdStatus(),Constants.ONE)){
+                //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
+                String link = signService.linkFile(data.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return;
+                }
+                uploadTBSQSSignedFileDo(modelTBQSQ,fileUrl,path+fileUrl);
                 return;
             }
 
@@ -1129,6 +1248,7 @@
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public Integer check(InsuranceApply insuranceApply) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(insuranceApply.getId() == null){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
@@ -1137,31 +1257,35 @@
         if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD.getKey())){
-            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
-        }
-
         Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
         if(Objects.isNull(solutions)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
         }
+        if(solutions.getType().equals(Constants.ZERO)){
+            if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD.getKey())){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+        }else{
+            if(!user.getType().equals(Constants.TWO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风鏃犳硶杩涜璇ユ搷浣�");
+            }
+            if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_RETURN.getKey())){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+        }
 
         Constants.ApplyLogType applyLogType = null;
-        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         InsuranceApply update = new InsuranceApply();
         update.setEditDate(new Date());
         update.setEditor(user.getId());
         update.setCheckDate(update.getEditDate());
         update.setCheckInfo(insuranceApply.getCheckInfo());
         update.setCheckUserId(user.getId());
-        update.setId(model.getId());
-        Constants.NoticeType noticeType = Constants.NoticeType.ONE;
+        update.setId(model.getId()); 
         if(insuranceApply.getDealBackApply() ==1){
             //濡傛灉鏄笉閫氳繃
             applyLogType = Constants.ApplyLogType.PLATFORM_RETURN ;
             update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey());
-
-            noticeType = Constants.NoticeType.FOUR;
         }else{
             applyLogType = Constants.ApplyLogType.PLATFORM_CHECK_PASS;
             update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey());
@@ -1173,10 +1297,7 @@
         //鍒犻櫎鍏朵粬寰呭姙
         noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey())
                 .ne(Notices::getType,Constants.NoticeType.SIX.getStatus())
-                .eq(Notices::getObjId,model.getId()));
-//        Notices notices = new Notices(noticeObjectType,Constants.ONE,model.getId(),solutions.getName(),model.getCompanyId(),noticeType);
-//        noticesMapper.insert(notices);
-
+                .eq(Notices::getObjId,model.getId())); 
         String info =applyLogType.getInfo();
         if(StringUtils.isNotBlank(update.getCheckInfo())){
             info = info.replace("${param}", update.getCheckInfo());
@@ -1220,6 +1341,9 @@
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鍛樺伐淇℃伅瀛樺湪閲嶅淇℃伅");
         }
         Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
+        if(solutions.getType().equals(Constants.ONE)){
+            insuranceApplyStatus = Constants.InsuranceApplyStatus.WTB_UPLOAD;
+        }
         insuranceApply.setCreateDate(new Date());
         insuranceApply.setCreator(loginUserInfo.getId());
         insuranceApply.setEditor(loginUserInfo.getId());
@@ -1522,13 +1646,37 @@
         QueryWrapper<InsuranceApply> wrapper = new QueryWrapper<>(insuranceApply);
         return insuranceApplyMapper.selectList(wrapper);
     }
+
+    public List<Integer> getCollectStatus(Integer collectStatus){
+        if(collectStatus ==null){
+            return  new ArrayList<>();
+        }
+        List<Integer> statusList = Constants.InsuranceApplyStatus.getKesByStatus(collectStatus);
+        if(collectStatus.equals(Constants.ApplyCollectStatus.DCD)){
+            statusList.addAll(Constants.InsuranceApplyStatus.getKesByStatus(Constants.ApplyCollectStatus.WTBDCD.getKey()));
+        }else if(collectStatus.equals(Constants.ApplyCollectStatus.DSP)){
+            statusList.addAll(Constants.InsuranceApplyStatus.getKesByStatus(Constants.ApplyCollectStatus.WTBDSH.getKey()));
+        }else if(collectStatus.equals(Constants.ApplyCollectStatus.BZZ)){
+            statusList.addAll(Constants.InsuranceApplyStatus.getKesByStatus(Constants.ApplyCollectStatus.WTBBZZ.getKey()));
+        }else if(collectStatus.equals(Constants.ApplyCollectStatus.YTH)){
+            statusList.addAll(Constants.InsuranceApplyStatus.getKesByStatus(Constants.ApplyCollectStatus.WTBYTH.getKey()));
+        }else if(collectStatus.equals(Constants.ApplyCollectStatus.YGB)){
+            statusList.addAll(Constants.InsuranceApplyStatus.getKesByStatus(Constants.ApplyCollectStatus.WTBYGB.getKey()));
+        }else if(collectStatus.equals(Constants.ApplyCollectStatus.DQYQZ)){
+            statusList.addAll(Constants.InsuranceApplyStatus.getKesByStatus(Constants.ApplyCollectStatus.WTBDQS.getKey()));
+        }
+
+        return statusList;
+    }
   
     @Override
     public PageData<InsuranceApply> findPage(PageWrap<InsuranceApplyQueryDTO> pageWrap) {
         IPage<InsuranceApply> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<InsuranceApply> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        List<Integer> statusList = Constants.InsuranceApplyStatus.getKesByStatus(pageWrap.getModel().getStatusCollect());
+
+        List<Integer> statusList = this.getCollectStatus(pageWrap.getModel().getStatusCollect());
+
         queryWrapper.selectAll(InsuranceApply.class);
         queryWrapper.selectAs(Company::getName,InsuranceApply::getCompanyName);
         queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
@@ -1806,11 +1954,14 @@
 
     private void initImgData(InsuranceApply model) {
         List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
-                .eq(Multifile::getObjId,Constants.equalsInteger(model.getSolutionType(),Constants.ZERO)? model.getId():model.getUnionApplyId())
+                .eq(Multifile::getObjId, model.getId())
                 .in(Multifile::getObjType,Arrays.asList(new Integer[]{Constants.MultiFile.BD_APPLY_PDF.getKey()
                         ,Constants.MultiFile.BD_SIGNED_PDF.getKey()
+                        ,Constants.MultiFile.WTB_CONFIRMATION_LATTER.getKey()
+                        ,Constants.MultiFile.MEMBER_LIST_LATTER.getKey()
                         ,Constants.MultiFile.BD_DONE_PDF.getKey()}))
-                .eq(Multifile::getIsdeleted,Constants.ZERO));
+                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                .orderByAsc(Multifile::getId));
         if(multifiles!=null){
             String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
@@ -1828,6 +1979,12 @@
                 }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_DONE_PDF.getKey())){
                     //鏈�绲備繚闄╁崟
                     model.setBaoxiandanFile(f);
+                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.MEMBER_LIST_LATTER.getKey())){
+                    //鐢宠鍗�
+                    model.setShenqingdanFile(f);
+                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.WTB_CONFIRMATION_LATTER.getKey())){
+                    //绛剧讲鍚庣‘璁や功
+                    model.setFanganFile(f);
                 }
 
 //                if(model.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
@@ -2053,21 +2210,26 @@
 
     /**
      * 濮旀墭瀹� 鎶曚繚纭涔�
-     * @param id
+     * @param smsCheckDTO
      * @return
      */
     @Override
-    public  String getSignTBQRSLink(Integer id) {
-        if(id == null ){
+    public  String getSignTBQRSLink(SmsCheckDTO smsCheckDTO) {
+        if(Objects.isNull(smsCheckDTO)
+            || Objects.isNull(smsCheckDTO.getBusinessId())
+                || StringUtils.isBlank(smsCheckDTO.getCode())
+        ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(!debugModel){
+            smsEmailService.validateCode(smsCheckDTO.getCode());
         }
         MPJLambdaWrapper wrapper=  new MPJLambdaWrapper<InsuranceApply>()
                 .selectAll(InsuranceApply.class)
                 .selectAs(Solutions::getSignKeyword,InsuranceApply::getSignKeyword)
                 .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
-                .eq(InsuranceApply::getId,id)
+                .eq(InsuranceApply::getId,smsCheckDTO.getBusinessId())
                 .last("limit 1");
-
         InsuranceApply model = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,wrapper);
         if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -2076,14 +2238,14 @@
         if(Objects.isNull(solutions)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
         }
-        if(solutions.getType().equals(Constants.ZERO)){
+        if(Constants.equalsInteger(solutions.getType(),(Constants.ZERO))){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝闈炲鎵樹繚鏂规淇濆崟!");
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         Constants.ApplyLogType applyLogType = null;
         String info = "";
         //濡傛灉鏄┏鍥�,鍙兘鍙┏鍥炲凡绛剧珷鐘舵�佷笅鐨勯��鍥炵敵璇风姸鎬佽繘琛屾搷浣�
-        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD.getKey())){
+        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_UPLOAD.getKey())){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
         }
         Company company = user.getCompany();
@@ -2120,6 +2282,8 @@
         return  link;
     }
 
+
+
     @Override
     public  InsuranceApply  queryApplyDetail(Integer applyId){
         InsuranceApply model = findDetail(applyId);
@@ -2146,15 +2310,25 @@
      * 浜哄憳鍚嶅崟绛剧珷
      */
     @Override
-    public String getMemberListOnlineSignLink(Integer applyId) {
-        InsuranceApply model = this.queryApplyDetail(applyId);
+    public String getMemberListOnlineSignLink(SmsCheckDTO smsCheckDTO) {
+        if(Objects.isNull(smsCheckDTO)
+                || Objects.isNull(smsCheckDTO.getBusinessId())
+                || StringUtils.isBlank(smsCheckDTO.getCode())
+        ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        //楠岃瘉 楠岃瘉鐮�
+        if(!debugModel){
+            smsEmailService.validateCode(smsCheckDTO.getCode());
+        }
+        InsuranceApply model = this.queryApplyDetail(smsCheckDTO.getBusinessId());
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇繚鍗曚俊鎭�");
         }
         if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getIsdeleted())){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(Constants.ZERO,model.getStatus())){
+        if(!Constants.equalsInteger(Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE.getKey(),model.getStatus())){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔绛剧珷鎿嶄綔锛�");
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -2193,6 +2367,83 @@
     }
 
 
+    /**
+     * 濮旀墭淇� 鎶曚繚鐢宠绛剧讲
+     * @param smsCheckDTO
+     * @return
+     */
+    @Override
+    public  String getSignWTBTBDLink(SmsCheckDTO smsCheckDTO) {
+        if(Objects.isNull(smsCheckDTO)
+                || Objects.isNull(smsCheckDTO.getBusinessId())
+                || StringUtils.isBlank(smsCheckDTO.getCode())
+        ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        //楠岃瘉 楠岃瘉鐮�
+        if(!debugModel){
+            smsEmailService.validateCode(smsCheckDTO.getCode());
+        }
+        MPJLambdaWrapper wrapper=  new MPJLambdaWrapper<InsuranceApply>()
+                .selectAll(InsuranceApply.class)
+                .selectAs(Solutions::getSignKeyword,InsuranceApply::getSignKeyword)
+                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                .eq(InsuranceApply::getId,smsCheckDTO.getBusinessId())
+                .last("limit 1");
 
+        InsuranceApply model = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,wrapper);
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
+        }
+        if(solutions.getType().equals(Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝闈炲鎵樹繚鏂规淇濆崟!");
+        }
+        if(!model.getUnionApplyTbdStatus().equals(Constants.ONE)){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍟嗘埛鏈笂浼犳垨宸茬缃�");
+        }
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        Constants.ApplyLogType applyLogType = null;
+        String info = "";
+        //濡傛灉鏄┏鍥�,鍙兘鍙┏鍥炲凡绛剧珷鐘舵�佷笅鐨勯��鍥炵敵璇风姸鎬佽繘琛屾搷浣�
+        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_UPLOAD.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+        Company company = user.getCompany();
+        if(debugModel){
+            company = companyMapper.selectById(model.getCompanyId());
+        }
+        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝浼佷笟灏氭湭鍏峰鍦ㄧ嚎绛剧珷鏉′欢锛岃鑱旂郴骞冲彴绠$悊鍛樼‘璁");
+        }
+        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,model.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.COMPANY_TBD_SIGNED.getKey())
+                .eq(Multifile::getIsdeleted,Constants.ZERO).last("limit 1"));
+        if(f == null || StringUtils.isBlank(f.getFileurl())){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇纭涔︽枃浠跺け璐ワ紝璇疯仈绯诲晢鎴风‘璁ゆ姇淇濈敵璇蜂功鏄惁姝g‘锛�");
+        }
+        String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode()+f.getFileurl();
+        String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
+        notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString());
+        String applyNo = signService.applySign(company.getName(),url,company.getName(),company.getCode(),company.getEmail(),model.getSignKeyword(),company.getSignId(),notifyUrl);
+        if(StringUtils.isBlank(applyNo) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        String link = signService.signLink(applyNo,company.getName(),company.getCode());
+        if(StringUtils.isBlank(link) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        InsuranceApply update= new InsuranceApply();
+        update.setId(model.getId());
+        update.setEditor(user.getId());
+        update.setEditDate(new Date());
+        update.setApplyTbdNo(applyNo);
+        insuranceApplyMapper.updateById(update);
+        return  link;
+    }
 
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
index 32a4157..71efde3 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -46,6 +46,8 @@
     private EmayService emayService;
     @Autowired
     private EmailService emailService;
+    @Value("${debug_model}")
+    private boolean debugModel;
 
     public static void isCaptcheValide(SmsEmailMapper smsEmailMapper, String phone, String captche) {
         SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
@@ -137,6 +139,9 @@
         if(StringUtils.isBlank(code)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        if(debugModel){
+            return;
+        }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(!loginUserInfo.getType().equals(Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛绫诲埆閿欒");
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
index 7ad77ab..82c40bd 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -27,10 +28,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * 淇濋櫓鏂规淇℃伅琛⊿ervice瀹炵幇
@@ -40,6 +38,10 @@
 @Service
 public class SolutionsServiceImpl implements SolutionsService {
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private MultifileMapper multifileMapper;
     @Autowired
     private SolutionsMapper solutionsMapper;
     @Autowired
@@ -87,6 +89,22 @@
         solutionsMapper.insert(newModel);
 
         dealWorkType(solutions,newModel,solutions.getWorktypeIdList(),true);
+        if(Constants.equalsObject(solutions.getType(),Constants.ONE) ){
+           if  (solutions.getFanganFile()==null || StringUtils.isBlank(solutions.getFanganFile().getFileurl())){
+             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇蜂笂浼犳柟妗堢‘璁や功锛�");
+            }
+
+            Multifile file = solutions.getFanganFile();
+            file.setIsdeleted(Constants.ZERO);
+            file.setCreateDate(new Date());
+            file.setCreator(user.getId());
+            file.setObjId(solutions.getId());
+            file.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
+            file.setType(Constants.formatIntegerNum(file.getType()));
+            multifileMapper.insert(file);
+           file.setObjId(newModel.getId());
+            multifileMapper.insert(file);
+        }
         return solutions.getId();
     }
 
@@ -216,7 +234,27 @@
                 .lambda()
                 .eq(SolutionWorktype::getSolutionId,solutions.getId())
         );
-
+        if(Constants.equalsObject(solutions.getType(),Constants.ONE) ){
+            if  (solutions.getFanganFile()!=null && StringUtils.isNotBlank(solutions.getFanganFile().getFileurl())){
+                multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                                .set(Multifile::getIsdeleted,Constants.ONE)
+                                .set(Multifile::getEditDate,solutions.getEditDate())
+                                .set(Multifile::getEditor,solutions.getEditor())
+                                .eq(Multifile::getObjId,solutions.getId())
+                                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                                .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey()));
+                Multifile file = solutions.getFanganFile();
+                file.setIsdeleted(Constants.ZERO);
+                file.setCreateDate(solutions.getEditDate());
+                file.setCreator(solutions.getEditor());
+                file.setObjId(solutions.getId());
+                file.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
+                file.setType(Constants.formatIntegerNum(file.getType()));
+                multifileMapper.insert(file);
+                file.setObjId(newModel.getId());
+                multifileMapper.insert(file);
+            }
+        }
 
         solutionsMapper.update(null,new UpdateWrapper<Solutions>()
                 .lambda()
@@ -303,6 +341,16 @@
         wrapper.orderByAsc(SolutionWorktype::getSortnum);
         List<SolutionWorktype> worktypeList = solutionWorktypeJoinMapper.selectJoinList(SolutionWorktype.class,wrapper);
         model.setWorktypeList(worktypeList);
+        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,model.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey())
+                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                .last("limit 1"));
+        if(f!=null && StringUtils.isNotBlank(f.getFileurl())){
+            String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode()+f.getFileurl();
+            f.setFileurlFull(url);
+            model.setFanganFile(f);//鏂规纭涔�
+        }
         return model;
     }
 
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
index 8088df0..04b339c 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
@@ -14,14 +14,12 @@
 import com.doumee.dao.business.MultifileMapper;
 import com.doumee.dao.business.SolutionsMapper;
 import com.doumee.dao.business.UnionApplyMapper;
-import com.doumee.dao.business.dto.SaveUnionApplyDTO;
-import com.doumee.dao.business.dto.UnionApplyBXDDDetailTO;
-import com.doumee.dao.business.dto.UnionApplyBXDDTO;
-import com.doumee.dao.business.dto.UploadMultifileDTO;
+import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.join.ApplyDetailJoinMapper;
 import com.doumee.dao.business.join.InsuranceApplyJoinMapper;
 import com.doumee.dao.business.join.UnionApplyJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.UnionApplyService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -33,9 +31,10 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -78,6 +77,12 @@
 
     @Autowired
     private SignService signService;
+
+    @Autowired
+    private SmsEmailService smsEmailService;
+
+    @Value("${debug_model}")
+    private boolean debugModel;
 
     @Override
     public Integer create(UnionApply unionApply) {
@@ -139,69 +144,81 @@
     @Override
     public PageData<UnionApply> findPage(PageWrap<UnionApply> pageWrap) {
         IPage<UnionApply> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<UnionApply> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<UnionApply> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.selectAll(UnionApply.class);
+        queryWrapper.leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId);
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(user.getType().equals(Constants.TWO)){
+            queryWrapper.eq(UnionApply::getCompanyId, pageWrap.getModel().getCompanyId());
+        }
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(UnionApply::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(UnionApply::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(UnionApply::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(UnionApply::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getQueryStartTime() != null) {
+            queryWrapper.ge(UnionApply::getCreateDate, pageWrap.getModel().getQueryStartTime() +" 00:00:00" );
+        }
+        if (pageWrap.getModel().getQueryEndTime() != null) {
+            queryWrapper.le(UnionApply::getCreateDate, pageWrap.getModel().getQueryEndTime() +" 23:59:59");
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(UnionApply::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(UnionApply::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(UnionApply::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(UnionApply::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(UnionApply::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(UnionApply::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(UnionApply::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(UnionApply::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(UnionApply::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(UnionApply::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(UnionApply::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(UnionApply::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(UnionApply::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(UnionApply::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(UnionApply::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(UnionApply::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getCompanyId() != null) {
-            queryWrapper.lambda().eq(UnionApply::getCompanyId, pageWrap.getModel().getCompanyId());
+            queryWrapper.eq(UnionApply::getCompanyId, pageWrap.getModel().getCompanyId());
         }
         if (pageWrap.getModel().getEndTime() != null) {
-            queryWrapper.lambda().ge(UnionApply::getEndTime, Utils.Date.getStart(pageWrap.getModel().getEndTime()));
-            queryWrapper.lambda().le(UnionApply::getEndTime, Utils.Date.getEnd(pageWrap.getModel().getEndTime()));
+            queryWrapper.ge(UnionApply::getEndTime, Utils.Date.getStart(pageWrap.getModel().getEndTime()));
+            queryWrapper.le(UnionApply::getEndTime, Utils.Date.getEnd(pageWrap.getModel().getEndTime()));
         }
         if (pageWrap.getModel().getStartTime() != null) {
-            queryWrapper.lambda().ge(UnionApply::getStartTime, Utils.Date.getStart(pageWrap.getModel().getStartTime()));
-            queryWrapper.lambda().le(UnionApply::getStartTime, Utils.Date.getEnd(pageWrap.getModel().getStartTime()));
+            queryWrapper.ge(UnionApply::getStartTime, Utils.Date.getStart(pageWrap.getModel().getStartTime()));
+            queryWrapper.le(UnionApply::getStartTime, Utils.Date.getEnd(pageWrap.getModel().getStartTime()));
         }
         if (pageWrap.getModel().getCheckDate() != null) {
-            queryWrapper.lambda().ge(UnionApply::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate()));
-            queryWrapper.lambda().le(UnionApply::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()));
+            queryWrapper.ge(UnionApply::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate()));
+            queryWrapper.le(UnionApply::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()));
         }
         if (pageWrap.getModel().getCheckInfo() != null) {
-            queryWrapper.lambda().eq(UnionApply::getCheckInfo, pageWrap.getModel().getCheckInfo());
+            queryWrapper.eq(UnionApply::getCheckInfo, pageWrap.getModel().getCheckInfo());
         }
         if (pageWrap.getModel().getCheckUserId() != null) {
-            queryWrapper.lambda().eq(UnionApply::getCheckUserId, pageWrap.getModel().getCheckUserId());
+            queryWrapper.eq(UnionApply::getCheckUserId, pageWrap.getModel().getCheckUserId());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(UnionApply::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(UnionApply::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(UnionApply::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(UnionApply::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getCurrentFee() != null) {
-            queryWrapper.lambda().eq(UnionApply::getCurrentFee, pageWrap.getModel().getCurrentFee());
+            queryWrapper.eq(UnionApply::getCurrentFee, pageWrap.getModel().getCurrentFee());
         }
         if (pageWrap.getModel().getFee() != null) {
-            queryWrapper.lambda().eq(UnionApply::getFee, pageWrap.getModel().getFee());
+            queryWrapper.eq(UnionApply::getFee, pageWrap.getModel().getFee());
         }
         if (pageWrap.getModel().getSignApplyNo() != null) {
-            queryWrapper.lambda().eq(UnionApply::getSignApplyNo, pageWrap.getModel().getSignApplyNo());
+            queryWrapper.eq(UnionApply::getSignApplyNo, pageWrap.getModel().getSignApplyNo());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -210,7 +227,8 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(unionApplyMapper.selectPage(page, queryWrapper));
+        PageData<UnionApply> pageData = PageData.from(unionApplyJoinMapper.selectJoinPage(page,UnionApply.class, queryWrapper));
+        return pageData;
     }
 
     @Override
@@ -220,10 +238,44 @@
     }
 
 
+
+    @Override
+    public UnionApply detail(Integer applyId){
+        UnionApply unionApply = unionApplyJoinMapper.selectJoinOne(UnionApply.class,
+                new MPJLambdaWrapper<UnionApply>()
+                        .selectAll(UnionApply.class)
+                        .selectAs(Solutions::getName,UnionApply::getSolutionName)
+                        .selectAs(Company::getName,UnionApply::getCompanyName)
+                        .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.UNION_APPLY_ID = t.id ) as insureNum")
+                        .leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId)
+                        .leftJoin(Company.class,Company::getId,UnionApply::getCompanyId)
+                        .eq(UnionApply::getId,applyId)
+                        .last(" limit 1 ")
+        );
+        unionApply.setServiceDays(Constants.ZERO);
+        if(unionApply.getStatus().equals(Constants.UnionApplyStatus.FINISH.getKey())){
+            //濡傛灉褰撳墠鏃堕棿澶т簬缁撴潫鏃ユ湡 鍒欎娇鐢ㄧ粨鏉熸棩鏈熷姣斿紑濮嬫棩鏈�
+            if(DateUtil.compareDate(new Date(),unionApply.getEndTime())>=Constants.ZERO){
+                unionApply.setServiceDays(
+                        DateUtil.daysBetweenDates(unionApply.getEndTime(),unionApply.getStartTime())+1
+                );
+            }else if(DateUtil.compareDate(unionApply.getStartTime(),new Date())>=Constants.ZERO){
+                //鏈紑濮�
+                unionApply.setServiceDays(Constants.ZERO);
+            }else{
+                unionApply.setServiceDays(DateUtil.daysBetweenDates(new Date(),unionApply.getStartTime())+1);
+            }
+        }
+        return unionApply;
+    }
+
+
+
+
     @Override
     public Integer merge(SaveUnionApplyDTO saveUnionApplyDTO){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(user.getType().equals(Constants.TWO)){
+        if(!user.getType().equals(Constants.TWO)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣�");
         }
         if(Objects.isNull(saveUnionApplyDTO)
@@ -240,7 +292,7 @@
                         .selectAs(InsuranceApply::getSolutionBaseId,Solutions::getBaseId)
                         .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                         .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
-                        .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.COMPANY_MEMBER_LIST_SIGNATURE.getKey())
+                        .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_BUSINESS_CHECK_PASS.getKey())
                         .eq(Solutions::getBaseId,saveUnionApplyDTO.getBaseSolutionId())
                         .in(InsuranceApply::getId,saveUnionApplyDTO.getApplyIds())
                         .isNull(InsuranceApply::getUnionApplyId)
@@ -271,6 +323,7 @@
                 .set(InsuranceApply::getUnionApplyId,unionApply.getId())
                 .set(InsuranceApply::getCheckDate,new Date())
                 .set(InsuranceApply::getCheckUserId,user.getId())
+                .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_TOUBAOING.getKey())
                 .in(InsuranceApply::getId,saveUnionApplyDTO.getApplyIds()));
 
         applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
@@ -290,7 +343,7 @@
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void cancelMerge(Integer id){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(user.getType().equals(Constants.TWO)){
+        if(!user.getType().equals(Constants.TWO)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
         }
         UnionApply unionApply = unionApplyMapper.selectById(id);
@@ -316,6 +369,7 @@
                 .set(InsuranceApply::getUnionApplyId,null)
                 .set(InsuranceApply::getCheckDate,new Date())
                 .set(InsuranceApply::getCheckUserId,user.getId())
+                .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_BUSINESS_CHECK_PASS.getKey())
                 .eq(InsuranceApply::getUnionApplyId,unionApply.getId()));
 
         applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
@@ -335,11 +389,14 @@
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void uploadToubaodan(UploadMultifileDTO uploadMultifileDTO){
         if(uploadMultifileDTO.getBusinessId() == null
-                ||StringUtils.isBlank( uploadMultifileDTO.getFilePath())
-                ||StringUtils.isBlank( uploadMultifileDTO.getFileName())){
+                ||StringUtils.isBlank( uploadMultifileDTO.getFileurl())
+                ||StringUtils.isBlank( uploadMultifileDTO.getName())){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!user.getType().equals(Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
         UnionApply unionApply = unionApplyMapper.selectById(uploadMultifileDTO.getBusinessId());
         if(Objects.isNull(unionApply)||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -353,6 +410,41 @@
         if(unionApply.getStatus().equals(Constants.UnionApplyStatus.MERGE.getKey())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曚笟鍔″凡娴佽浆锛屾偍鏃犳硶杩涜璇ユ搷浣滐紒");
         }
+
+        if(CollectionUtils.isNotEmpty(uploadMultifileDTO.getMultifileList())){
+            List<Multifile> multifileList = uploadMultifileDTO.getMultifileList();
+            for (Multifile multifile:multifileList) {
+                if(Objects.isNull(multifile.getObjId())
+                    ||Objects.isNull(multifile.getName())
+                    ||Objects.isNull(multifile.getFileurl())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"浼佷笟鎶曚繚鍗曢檮浠跺弬鏁伴敊璇�");
+                }
+                InsuranceApply insuranceApply = insuranceApplyJoinMapper.selectOne(new QueryWrapper<InsuranceApply>().lambda()
+                        .eq(InsuranceApply::getId,multifile.getObjId())
+                        .eq(InsuranceApply::getUnionApplyId,uploadMultifileDTO.getBusinessId())
+                );
+                if(Objects.isNull(insuranceApply)){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"浼佷笟鎶曚繚鍗曟湭鏌ヨ鍒�");
+                }
+
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreator(user.getId());
+                multifile.setCreateDate(new Date());
+                multifile.setCreateDate(new Date());
+                multifile.setObjType(Constants.MultiFile.COMPANY_TBD_SIGNED.getKey());
+                multifile.setType(Constants.TWO);
+                multifileMapper.insert(multifile);
+
+                insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
+                        .set(InsuranceApply::getUnionApplyTbdStatus,Constants.ONE)
+                        .set(InsuranceApply::getEditDate,new Date())
+                        .set(InsuranceApply::getEditor,user.getId())
+                        .eq(InsuranceApply::getId,multifile.getObjId())
+                );
+
+            }
+        }
+
 
         unionApply.setCheckDate(new Date());
         unionApply.setCheckUserId(user.getId());
@@ -369,9 +461,12 @@
         multifile.setCreateDate(new Date());
         multifile.setObjType(Constants.MultiFile.HBD_BD_SIGNED_PDF.getKey());
         multifile.setType(Constants.TWO);
-        multifile.setFileurl(uploadMultifileDTO.getFilePath());
-        multifile.setName(uploadMultifileDTO.getFileName());
+        multifile.setFileurl(uploadMultifileDTO.getFileurl());
+        multifile.setName(uploadMultifileDTO.getName());
         multifileMapper.insert(multifile);
+
+
+
 
     }
 
@@ -383,12 +478,22 @@
      */
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public  String getSignLink(Integer id) {
-        if(id == null ){
+    public  String getSignLink(SmsCheckDTO smsCheckDTO) {
+        if(Objects.isNull(smsCheckDTO)
+                || Objects.isNull(smsCheckDTO.getBusinessId())
+                || StringUtils.isBlank(smsCheckDTO.getCode())
+        ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        //楠岃瘉 楠岃瘉鐮�
+        if(!debugModel){
+            smsEmailService.validateCode(smsCheckDTO.getCode());
+        }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        UnionApply unionApply = unionApplyJoinMapper.selectById(id);
+        if(!user.getType().equals(Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        UnionApply unionApply = unionApplyJoinMapper.selectById(smsCheckDTO.getBusinessId());
         if(unionApply == null ||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
         }
@@ -451,6 +556,9 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!user.getType().equals(Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
         UnionApply unionApply = unionApplyJoinMapper.selectById(unionApplyBXDDTO.getId());
         if(unionApply == null ||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -507,7 +615,7 @@
                 multifile.setCreator(user.getId());
                 multifile.setCreateDate(new Date());
                 multifile.setObjId(insuranceApply.getId());
-                multifile.setObjType(Constants.MultiFile.COMPANY_TBD_SIGNED_PDF.getKey());
+                multifile.setObjType(Constants.MultiFile.BD_DONE_PDF.getKey());
                 multifile.setType(Constants.TWO);
                 multifile.setFileurl(unionApplyBXDDDetailTO.getFileUrl());
                 multifile.setName(unionApplyBXDDDetailTO.getFileName());
@@ -522,7 +630,8 @@
                             new BigDecimal(applyDetails.size())
                             .multiply(price)
                     )
-                    .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
+                    .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_DONE.getKey())
+                    .set(InsuranceApply::getUnionApplyTbdStatus,3)
                     .set(InsuranceApply::getFee,price.multiply(new BigDecimal(applyDetails.size())).multiply(new BigDecimal(maxDays)))
                     .set(InsuranceApply::getCurrentFee,currentFee.multiply(new BigDecimal(applyDetails.size())))
                     .set(InsuranceApply::getStartTime,unionApplyBXDDTO.getStartTime())
@@ -564,16 +673,12 @@
             multifile.setCreator(user.getId());
             multifile.setCreateDate(new Date());
             multifile.setObjId(unionApply.getId());
-            multifile.setObjType(Constants.MultiFile.HBD_BD_APPLY_PDF.getKey());
+            multifile.setObjType(Constants.MultiFile.WTB_BD_DONE_PDF.getKey());
             multifile.setType(Constants.TWO);
             multifile.setFileurl(unionApplyBXDDTO.getFileUrl());
             multifile.setName(unionApplyBXDDTO.getFileName());
             multifileMapper.insert(multifile);
         }
-
-
-
-
     }
 
 
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
index ade3466..d113bb0 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
@@ -13,13 +13,12 @@
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dto.SaveUnionApplyDTO;
 import com.doumee.dao.business.dto.SaveUnionChangeDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
 import com.doumee.dao.business.dto.UnionChangeBXDDTO;
-import com.doumee.dao.business.join.ApplyChagneDetailJoinMapper;
-import com.doumee.dao.business.join.ApplyChangeJoinMapper;
-import com.doumee.dao.business.join.ApplyDetailJoinMapper;
-import com.doumee.dao.business.join.MemberInsuranceJoinMapper;
+import com.doumee.dao.business.join.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
+import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.UnionChangeService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -31,10 +30,12 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -50,6 +51,9 @@
 
     @Autowired
     private UnionChangeMapper unionChangeMapper;
+
+    @Autowired
+    private UnionChangeJoinMapper unionChangeJoinMapper;
 
     @Autowired
     private ApplyChangeJoinMapper applyChangeJoinMapper;
@@ -80,6 +84,13 @@
 
     @Autowired
     private InsuranceApplyMapper insuranceApplyMapper;
+
+    @Value("${debug_model}")
+    private boolean debugModel;
+    @Autowired
+    private SmsEmailService smsEmailService;
+    @Autowired
+    private MultifileMapper multifileMapper;
 
     @Override
     public Integer create(UnionChange unionChange) {
@@ -126,6 +137,31 @@
         return unionChangeMapper.selectById(id);
     }
 
+
+    @Override
+    public UnionChange getDetail(Integer id){
+        UnionChange unionChange = unionChangeJoinMapper.selectJoinOne(UnionChange.class,
+                new MPJLambdaWrapper<UnionChange>()
+                        .selectAll(UnionChange.class)
+                 .selectAs(UnionApply::getCode,UnionChange::getApplyCode)
+                .selectAs(Solutions::getName,UnionChange::getSolutionsName)
+                .selectAs(UnionApply::getStartTime,UnionChange::getStartTime)
+                .selectAs(UnionApply::getEndTime,UnionChange::getEndTime) 
+                .selectAs(Company::getName,UnionChange::getShopName)
+                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 0  )",UnionChange::getAddNum)
+                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 1  )",UnionChange::getDelNum)
+                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 2  )",UnionChange::getChangeNum)
+                .leftJoin(UnionApply.class,UnionApply::getId,UnionChange::getUnionApplyId)
+                .leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId)
+                .leftJoin(Company.class,Company::getId,UnionChange::getShopId)
+                        .eq(UnionChange::getId,id)
+                        .last(" limit 1 ")
+        );
+        return unionChange;
+    }
+
+
+
     @Override
     public UnionChange findOne(UnionChange unionChange) {
         QueryWrapper<UnionChange> wrapper = new QueryWrapper<>(unionChange);
@@ -141,59 +177,78 @@
     @Override
     public PageData<UnionChange> findPage(PageWrap<UnionChange> pageWrap) {
         IPage<UnionChange> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<UnionChange> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<UnionChange> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(UnionChange.class);
+        queryWrapper.selectAs(UnionApply::getCode,UnionChange::getApplyCode)
+        .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 0  )",UnionChange::getAddNum)
+        .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 1  )",UnionChange::getDelNum)
+        .select("( select count(1) from apply_chagne_detail ad where t.id = ad.UNION_CHANGE_ID and ad.TYPE = 2  )",UnionChange::getChangeNum);
+        queryWrapper.leftJoin(UnionApply.class,UnionApply::getId,UnionChange::getUnionApplyId);
+        queryWrapper.leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId);
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(user.getType().equals(Constants.TWO)){
+            queryWrapper.eq(UnionChange::getShopId, pageWrap.getModel().getShopId());
+        }
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(UnionChange::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(UnionChange::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(UnionChange::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(UnionChange::getCreator, pageWrap.getModel().getCreator());
         }
+
+        if (pageWrap.getModel().getQueryStartTime() != null) {
+            queryWrapper.ge(UnionChange::getCreateDate, pageWrap.getModel().getQueryStartTime() +" 00:00:00" );
+        }
+        if (pageWrap.getModel().getQueryEndTime() != null) {
+            queryWrapper.le(UnionChange::getCreateDate, pageWrap.getModel().getQueryEndTime() +" 23:59:59");
+        }
+
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(UnionChange::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(UnionChange::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(UnionChange::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(UnionChange::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(UnionChange::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(UnionChange::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(UnionChange::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(UnionChange::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(UnionChange::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(UnionChange::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(UnionChange::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(UnionChange::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(UnionChange::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(UnionChange::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(UnionChange::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(UnionChange::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getShopId() != null) {
-            queryWrapper.lambda().eq(UnionChange::getShopId, pageWrap.getModel().getShopId());
+            queryWrapper.eq(UnionChange::getShopId, pageWrap.getModel().getShopId());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(UnionChange::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(UnionChange::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getApplyStartTime() != null) {
-            queryWrapper.lambda().ge(UnionChange::getApplyStartTime, Utils.Date.getStart(pageWrap.getModel().getApplyStartTime()));
-            queryWrapper.lambda().le(UnionChange::getApplyStartTime, Utils.Date.getEnd(pageWrap.getModel().getApplyStartTime()));
+            queryWrapper.ge(UnionChange::getApplyStartTime, Utils.Date.getStart(pageWrap.getModel().getApplyStartTime()));
+            queryWrapper.le(UnionChange::getApplyStartTime, Utils.Date.getEnd(pageWrap.getModel().getApplyStartTime()));
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(UnionChange::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(UnionChange::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getValidTime() != null) {
-            queryWrapper.lambda().ge(UnionChange::getValidTime, Utils.Date.getStart(pageWrap.getModel().getValidTime()));
-            queryWrapper.lambda().le(UnionChange::getValidTime, Utils.Date.getEnd(pageWrap.getModel().getValidTime()));
+            queryWrapper.ge(UnionChange::getValidTime, Utils.Date.getStart(pageWrap.getModel().getValidTime()));
+            queryWrapper.le(UnionChange::getValidTime, Utils.Date.getEnd(pageWrap.getModel().getValidTime()));
         }
         if (pageWrap.getModel().getValidCode() != null) {
-            queryWrapper.lambda().eq(UnionChange::getValidCode, pageWrap.getModel().getValidCode());
+            queryWrapper.eq(UnionChange::getValidCode, pageWrap.getModel().getValidCode());
         }
         if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(UnionChange::getType, pageWrap.getModel().getType());
+            queryWrapper.eq(UnionChange::getType, pageWrap.getModel().getType());
         }
         if (pageWrap.getModel().getSignApplyNo() != null) {
-            queryWrapper.lambda().eq(UnionChange::getSignApplyNo, pageWrap.getModel().getSignApplyNo());
+            queryWrapper.eq(UnionChange::getSignApplyNo, pageWrap.getModel().getSignApplyNo());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -202,7 +257,8 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(unionChangeMapper.selectPage(page, queryWrapper));
+        PageData<UnionChange> pageData = PageData.from(unionChangeJoinMapper.selectJoinPage(page,UnionChange.class, queryWrapper));
+        return pageData;
     }
 
     @Override
@@ -233,7 +289,7 @@
                         .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                         .eq(ApplyChange::getIsdeleted, Constants.ZERO)
                         .eq(InsuranceApply::getUnionApplyId,saveUnionChangeDTO.getUnionApplyId())
-                        .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.COMPANY_SIGN.getKey())
+                        .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS.getKey())
                         .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                         .eq(ApplyChange::getType,saveUnionChangeDTO.getBusinessType())
                         .in(ApplyChange::getId,saveUnionChangeDTO.getApplyIds())
@@ -315,19 +371,77 @@
     }
 
 
+    public UnionChange unionChangeDetail(Integer unionChangeId){
+
+        UnionChange unionChange = unionChangeJoinMapper.selectJoinOne(UnionChange.class,
+                new MPJLambdaWrapper<UnionChange>()
+                        .selectAll(UnionChange.class)
+                        .selectAs(Company::getName,UnionChange::getShopName)
+                        .selectAs(Solutions::getName,UnionChange::getSolutionsName)
+                        .selectAs(UnionApply::getCode,UnionChange::getApplyCode)
+                        .selectAs(UnionApply::getStartTime,UnionChange::getStartTime)
+                        .selectAs(UnionApply::getEndTime,UnionChange::getEndTime)
+                        .leftJoin(UnionApply.class,UnionApply::getId,UnionChange::getUnionApplyId)
+                        .leftJoin(Company.class,Company::getId,UnionChange::getShopId)
+                        .leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId)
+                        .eq(UnionChange::getId,unionChangeId)
+                        .last(" limit 1 ")
+        );
+        //浼佷笟鍚嶇О
+        List<ApplyChange> applyChangeList = applyChangeJoinMapper.selectJoinList(ApplyChange.class,new MPJLambdaWrapper<ApplyChange>()
+                .selectAs(Company::getName,ApplyChange::getCompanyName)
+                .leftJoin(Company.class,Company::getId,ApplyChange::getCompanyId)
+                .eq(ApplyChange::getUnionChangeId,unionChangeId)
+        );
+
+        String companyNames = String.join(",",applyChangeList.stream().map(m->m.getCompanyName()).collect(Collectors.toList()));
+        
+        List<ApplyChagneDetail> applyChagneDetailList = applyChagneDetailJoinMapper.selectJoinList(ApplyChagneDetail.class,new MPJLambdaWrapper<ApplyChagneDetail>()
+                .selectAll(ApplyChagneDetail.class)
+                .selectAs(Member::getName,ApplyChagneDetail::getMemberName)
+                .selectAs(Member::getIdcardNo,ApplyChagneDetail::getIdcardNo)
+                .selectAs(Member::getSex,ApplyChagneDetail::getSex)
+                .selectAs(Company::getName,ApplyChagneDetail::getCompanyName)
+                .select("t2.name",ApplyChagneDetail::getWorkTypeName)
+                .select("t3.name",ApplyChagneDetail::getDuName)
+                .select("t4.name",ApplyChagneDetail::getOldWorkTypeName)
+                .select("t5.name",ApplyChagneDetail::getOldDuName)
+                .leftJoin(Member.class,Member::getId,ApplyChagneDetail::getMemberId)
+                .leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId)
+                 .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId)
+                 .leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId)
+                 .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getOldDuId)
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                .eq(ApplyChagneDetail::getUnionChangeId,unionChangeId)
+        );
+
+        unionChange.setCompanyNames(companyNames);
+        unionChange.setApplyChagneDetailList(applyChagneDetailList);
+        return unionChange;
+    }
+
+
+
     /**
      * 鍚堝苟鍗曪紙鍔犲噺淇�/鎹㈠巶锛� - 鎶曚繚鐢宠绛剧讲
-     * @param id
+     * @param smsCheckDTO
      * @return
      */
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public  String getSignLink(Integer id) {
-        if(id == null ){
+    public  String getSignLink(SmsCheckDTO smsCheckDTO) {
+        if(Objects.isNull(smsCheckDTO)
+                || Objects.isNull(smsCheckDTO.getBusinessId())
+                || StringUtils.isBlank(smsCheckDTO.getCode())
+        ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        //楠岃瘉 楠岃瘉鐮�
+        if(!debugModel){
+            smsEmailService.validateCode(smsCheckDTO.getCode());
+        }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        UnionChange unionChange = unionChangeMapper.selectById(id);
+        UnionChange unionChange = this.unionChangeDetail(smsCheckDTO.getBusinessId());
         if(Objects.isNull(unionChange)||!Constants.equalsInteger(unionChange.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
@@ -350,11 +464,10 @@
 
         String fileUrl = null;
         if(Constants.equalsObject(unionChange.getType(), Constants.ONE)){
-//            fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"鎹㈠巶鐢宠琛�","琚繚闄╀汉");
+            fileUrl = ExcelExporter.build(UnionChange.class).exportUnionChangeOtherUnitExcelToPdf(unionChange,"鎹㈠巶鐢宠琛�");
         }else{
-//            fileUrl = ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcelToPdf(model,"鍔犲噺淇濈敵璇疯〃","琚繚闄╀汉");
+            fileUrl = ExcelExporter.build(UnionChange.class).exportUnionChangeExcelToPdf(unionChange,"鍔犲噺淇濈敵璇疯〃");
         }
-
         String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
         notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",unionChange.getId().toString());
         String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鍚堝苟鍗曪紙鍔犲噺淇�/鎹㈠巶锛夌敵璇风缃�",company.getSignId(),notifyUrl);
@@ -383,8 +496,8 @@
         if(Objects.isNull(unionChangeBXDDTO)
             || Objects.isNull(unionChangeBXDDTO.getId())
                 || Objects.isNull(unionChangeBXDDTO.getApplyDate())
-                || StringUtils.isBlank(unionChangeBXDDTO.getFileName())
-                || StringUtils.isBlank(unionChangeBXDDTO.getFileUrl())
+                || StringUtils.isBlank(unionChangeBXDDTO.getName())
+                || StringUtils.isBlank(unionChangeBXDDTO.getFileurl())
                 || StringUtils.isBlank(unionChangeBXDDTO.getCode())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -414,14 +527,60 @@
                         .selectAs(InsuranceApply::getCode,ApplyChange::getApplyCode)
                         .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                         .eq(ApplyChange::getUnionChangeId,unionChange.getId()));
+
+        //瀛樺偍鍚堝苟鍗曚繚闄╁崟
+        Multifile multifile = new Multifile();
+        multifile.setIsdeleted(Constants.ZERO);
+        multifile.setCreator(user.getId());
+        multifile.setCreateDate(new Date());
+        multifile.setObjId(unionChangeBXDDTO.getId());
+        multifile.setCreateDate(new Date());
+        multifile.setObjType(Constants.MultiFile.WTB_CA_DONE_PDF.getKey());
+        multifile.setType(Constants.TWO);
+        multifile.setFileurl(unionChangeBXDDTO.getFileurl());
+        multifile.setName(unionChangeBXDDTO.getName());
+        multifileMapper.insert(multifile);
+
+        if(CollectionUtils.isNotEmpty(unionChangeBXDDTO.getApplyChangeBXDList())){
+            //鏌ヨ鏄惁涓嶅瓨鍦ㄥ綋鍓嶅悎骞跺崟鐨勬暟鎹�
+            if(applyChangeJoinMapper.selectCount(new QueryWrapper<ApplyChange>()
+                    .lambda().ne(ApplyChange::getUnionChangeId,unionChangeBXDDTO.getId())
+                    .in(ApplyChange::getId,
+                            unionChangeBXDDTO.getApplyChangeBXDList().stream().map(m->m.getObjId()).collect(Collectors.toList())
+                    )
+            )>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵瑰崟鏄庣粏璁板綍瀛樺湪闈炴湰鍚堝苟鍗曟暟鎹�");
+            };
+            for (Multifile m:unionChangeBXDDTO.getApplyChangeBXDList()) {
+                if(Objects.isNull(m.getObjId())
+                        ||StringUtils.isBlank(m.getFileurl())
+                        ||StringUtils.isBlank(m.getName())
+                ){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍔犲噺淇�/鎹㈠巶涓氬姟鎵瑰崟鏂囦欢淇℃伅缂哄け");
+                }
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreator(user.getId());
+                multifile.setCreateDate(new Date());
+                multifile.setCreateDate(new Date());
+                multifile.setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+                multifile.setType(Constants.TWO);
+                multifileMapper.insert(multifile);
+            }
+        }
+
+
         if(CollectionUtils.isNotEmpty(applyChangeList)){
             for (ApplyChange applyChange:applyChangeList) {
                 applyChange.setApplyStartTime(unionChangeBXDDTO.getApplyDate());
                 applyChange.setValidTime(unionChangeBXDDTO.getApplyDate());
                 applyChange.setEditDate(new Date());
                 applyChange.setEditor(user.getId());
+                applyChange.setStatus(Constants.ApplyChangeStatus.APPROVE.getKey());
                 List<ApplyChagneDetail> allList = applyChagneDetailJoinMapper.selectList(new QueryWrapper<ApplyChagneDetail>().lambda().eq(ApplyChagneDetail::getApplyChangeId,applyChange.getId()));
                 this.dealApplyChangeDetail(applyChange,allList);
+                applyChange.setCode(unionChangeBXDDTO.getCode());
+                applyChange.setCheckUserId(user.getId());
+                applyChangeJoinMapper.updateById(applyChange);
             }
         }
         unionChangeMapper.update(null,new UpdateWrapper<UnionChange>().lambda()
diff --git a/server/service/src/main/java/com/doumee/service/business/third/SignService.java b/server/service/src/main/java/com/doumee/service/business/third/SignService.java
index 73596b0..785b3be 100644
--- a/server/service/src/main/java/com/doumee/service/business/third/SignService.java
+++ b/server/service/src/main/java/com/doumee/service/business/third/SignService.java
@@ -304,7 +304,6 @@
     /**
      * 鍙戣捣绛剧害
      * @param name
-     * @param fileUrl
      * @param file
      * @param creditCoe
      * @param email
@@ -318,7 +317,7 @@
           params.put("serverCa",1); //浣跨敤浜戣瘉涔�
           params.put("file",new File(file));
           params.put("dealType",5); //鎸囧畾鍚堝悓鏂囦欢绛剧讲鏂瑰紡 5 涓洪儴鍒嗚嚜鍔ㄧ
-          params.put("positionType",2); //鎸囧畾閫氳繃琛ㄥ崟鍩熸柟寮忚缃瀛椾綅缃�
+          params.put("positionType",0); //鎸囧畾閫氳繃琛ㄥ崟鍩熸柟寮忚缃瀛椾綅缃�
           params.put("fileType",0);
           params.put("needQifengSign",1);
           params.put("notifyUrl",notifyUrl);
@@ -330,7 +329,7 @@
           sReq.setEmail(email); //鍦ㄥ悰瀛愮娉ㄥ唽璁よ瘉鐨勯偖绠�
 //        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.12,\"offsetY\":0.23}]},{\"page\":1,\"chaptes\":[{\"offsetX\":0.45,\"offsetY\":0.67}]}]");
 //          sReq.setChapteJson(postionJson);
-          sReq.setSearchKey(postionJson);
+//          sReq.setSearchKey(postionJson);
           sReq.setSignId(singId);
           sReq.setSearchConvertExtend("{\"fixX\":-80,\"fixY\":-80}");
           sReq.setNoNeedVerify(1);
diff --git a/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java b/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java
index 9bf62a2..a05160a 100644
--- a/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -7,6 +7,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.ApplyChange;
+import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.service.business.ApplyChangeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -140,4 +141,12 @@
     public ApiResponse<ApplyChange> findById(@PathVariable Integer id) {
         return ApiResponse.success(applyChangeService.findDetail(id));
     }
+
+
+    @ApiOperation("鍟嗘埛瀹℃牳 - 濮旀墭淇濅笟鍔�")
+    @PostMapping("/check")
+    @RequiresPermissions("business:applychange:check")
+    public ApiResponse check(@RequestBody ApplyChange model) {
+        return ApiResponse.success(applyChangeService.check(model));
+    }
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java b/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
index 7e39a97..10f399e 100644
--- a/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
@@ -6,6 +6,10 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.dto.SaveUnionApplyDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
+import com.doumee.dao.business.dto.UnionApplyBXDDTO;
+import com.doumee.dao.business.dto.UploadMultifileDTO;
 import com.doumee.dao.business.model.UnionApply;
 import com.doumee.service.business.UnionApplyService;
 import io.swagger.annotations.Api;
@@ -81,10 +85,56 @@
         ExcelExporter.build(UnionApply.class).export(unionApplyService.findPage(pageWrap).getRecords(), "鍚堝苟鎶曚繚鍗曚俊鎭〃", response);
     }
 
+
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @RequiresPermissions("business:unionapply:query")
-    public ApiResponse findById(@PathVariable Integer id) {
-        return ApiResponse.success(unionApplyService.findById(id));
+    public ApiResponse<UnionApply> findById(@PathVariable Integer id) {
+        return ApiResponse.success(unionApplyService.detail(id));
     }
+
+
+    @PreventRepeat
+    @ApiOperation("鍒涘缓鍚堝苟鍗�")
+    @PostMapping("/merge")
+    @RequiresPermissions("business:unionapply:create")
+    public ApiResponse merge(@RequestBody SaveUnionApplyDTO saveUnionApplyDTO) {
+        return ApiResponse.success(unionApplyService.merge(saveUnionApplyDTO));
+    }
+
+    @ApiOperation("鍏抽棴鍚堝苟鍗�")
+    @GetMapping("/close")
+    @RequiresPermissions("business:unionapply:close")
+    public ApiResponse close(@RequestParam Integer id) {
+        unionApplyService.cancelMerge(id);
+        return ApiResponse.success(null);
+    }
+
+    @PreventRepeat
+    @ApiOperation("涓婁紶鎶曚繚鍗�")
+    @PostMapping("/uploadToubaodan")
+    @RequiresPermissions("business:unionapply:create")
+    public ApiResponse uploadToubaodan(@RequestBody UploadMultifileDTO uploadMultifileDTO) {
+        unionApplyService.uploadToubaodan(uploadMultifileDTO);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("绛剧讲鐢宠鍗�")
+    @PostMapping("/getSignLink")
+    @RequiresPermissions("business:unionapply:query")
+    public ApiResponse getSignLink(@RequestBody SmsCheckDTO smsCheckDTO) {
+        unionApplyService.getSignLink(smsCheckDTO);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("涓婁紶淇濋櫓鍗�")
+    @PostMapping("/uploadBXD")
+    @RequiresPermissions("business:unionchange:query")
+    public ApiResponse uploadBXD(@RequestBody UnionApplyBXDDTO unionApplyBXDDTO) {
+        unionApplyService.uploadBXD(unionApplyBXDDTO);
+        return ApiResponse.success(null);
+    }
+
+
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/UnionChangeController.java b/server/shop/src/main/java/com/doumee/api/business/UnionChangeController.java
index 08d9a26..01480f7 100644
--- a/server/shop/src/main/java/com/doumee/api/business/UnionChangeController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/UnionChangeController.java
@@ -6,6 +6,9 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.dto.SaveUnionChangeDTO;
+import com.doumee.dao.business.dto.SmsCheckDTO;
+import com.doumee.dao.business.dto.UnionChangeBXDDTO;
 import com.doumee.dao.business.model.UnionChange;
 import com.doumee.service.business.UnionChangeService;
 import io.swagger.annotations.Api;
@@ -85,6 +88,40 @@
     @GetMapping("/{id}")
     @RequiresPermissions("business:unionchange:query")
     public ApiResponse findById(@PathVariable Integer id) {
-        return ApiResponse.success(unionChangeService.findById(id));
+        return ApiResponse.success(unionChangeService.getDetail(id));
+    }
+
+    @PreventRepeat
+    @ApiOperation("鍒涘缓鍚堝苟鍗�")
+    @PostMapping("/merge")
+    @RequiresPermissions("business:unionchange:create")
+    public ApiResponse merge(@RequestBody SaveUnionChangeDTO saveUnionChangeDTO) {
+        return ApiResponse.success(unionChangeService.merge(saveUnionChangeDTO));
+    }
+
+
+    @ApiOperation("鍏抽棴鍚堝苟鍗�")
+    @GetMapping("/close")
+    @RequiresPermissions("business:unionchange:close")
+    public ApiResponse close(@RequestParam Integer id) {
+        unionChangeService.cancelMerge(id);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("绛剧讲鐢宠鍗�")
+    @PostMapping("/getSignLink")
+    @RequiresPermissions("business:unionchange:query")
+    public ApiResponse getSignLink(@RequestBody SmsCheckDTO smsCheckDTO) {
+        unionChangeService.getSignLink(smsCheckDTO);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("涓婁紶淇濋櫓鍗�")
+    @PostMapping("/uploadBXD")
+    @RequiresPermissions("business:unionchange:query")
+    public ApiResponse uploadBXD(@RequestBody UnionChangeBXDDTO unionChangeBXDDTO) {
+        unionChangeService.uploadBXD(unionChangeBXDDTO);
+        return ApiResponse.success(null);
     }
 }

--
Gitblit v1.9.3