k94314517
2024-04-01 bcf40504dd6dbad43d4d54a5c099abceb8de6d71
Merge remote-tracking branch 'origin/1.0.1' into 1.0.1
已添加2个文件
已修改9个文件
1092 ■■■■ 文件已修改
company/src/api/business/unionApply.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/InsuranceDetailsWtb.vue 327 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaUnionApplyCheckWindow.vue 391 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/detailsEntrustedInsurance.vue 187 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/UnionApplyService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/unionApply.js
@@ -7,6 +7,13 @@
    })
}
export function exportDetailExcel (data) {
    return request.post('/business/unionApply/exportDetailExcel', data, {
        trim: true,
        download: true
    })
}
// åˆ›å»º
export function create (data) {
    return request.post('/business/unionApply/create', data)
@@ -14,6 +21,18 @@
export function merge (data) {
    return request.post('/business/unionApply/merge', data)
}
export function cancel (data) {
    return request.post('/business/unionApply/cancel', data)
}
export function uploadToubaodan (data) {
    return request.post('/business/unionApply/uploadToubaodan', data)
}
export function getSignLink (data) {
    return request.post('/business/unionApply/getSignLink', data)
}
export function uploadBXD (data) {
    return request.post('/business/unionApply/uploadBXD', data)
}
// ä¿®æ”¹
export function updateById (data) {
company/src/components/business/InsuranceDetailsWtb.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,327 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="box">
          <div class="top">
            {{title}}
          </div>
          <div class="box_table">
            <div class="box_table_head">
              <div class="box_table_head_item">投保人</div>
              <div class="box_table_head_item">被保险人</div>
              <div class="box_table_head_item">保险方案</div>
              <div class="box_table_head_item">保险生效起期</div>
              <div class="box_table_head_item">保险生效止期</div>
              <div class="box_table_head_item">投保人数</div>
              <div class="box_table_head_item">总费用(元)</div>
            </div>
            <div class="box_table_content "  >
              <div class="box_table_content_item box_table_content_header">{{ model.companyName }}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.companyNames }}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.solutionName }}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.startTime }}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.endTime }}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.insureNum }}</div>
              <div class="box_table_content_item box_table_content_header">{{model.fee}}</div>
            </div>
          </div>
            <div class="box_table">
                <div class="box_table_head">
                    <div class="box_table_head_item">序号</div>
                    <div class="box_table_head_item">员工姓名</div>
                  <div class="box_table_head_item">性别</div>
                  <div class="box_table_head_item">身份证号</div>
                    <div class="box_table_head_item">被保险人</div>
                    <div class="box_table_head_item">派遣单位</div>
                    <div class="box_table_head_item">所属工种</div>
                </div>
                <div class="box_table_content" v-for="(item, index) in detailList" :key="index">
                    <div class="box_table_content_item">{{index + 1}}</div>
                    <div class="box_table_content_item">{{ item.memberName }}</div>
                  <div class="box_table_content_item">{{ item.sex==0?"男":"女" }}</div>
                  <div class="box_table_content_item">{{ item.idcardNo }}</div>
                    <div class="box_table_content_item">{{ item.companyName }}</div>
                    <div class="box_table_content_item">{{ item.duName }}</div>
                    <div class="box_table_content_item">{{item.workTypeName}}</div>
                </div>
            </div>
          <div class="box_table" v-if="type==1" style="border-top: 0px solid #b4bbc5;" >
            <div class="box_table_head">
              <div class="box_table_head_item5">备注</div>
              <div class="box_table_head_item5">
                    <input v-model="form.checkInfo" style="width: 100%;height: 45px;border: 0px;outline: none;" placeholder="请输入" v-trim/>
              </div>
            </div>
          </div>
        </div>
        <template v-if="type==1" v-slot:footer>
            <el-button type="primary"  :loading="isWorking.export" @click="check(0)">提交通过</el-button>
<!--            <el-button type="danger"  :loading="isWorking.export" @click="check(1)">审核不通过</el-button>-->
            <el-button @click="visible=false">取消</el-button>
        </template>
        <template v-else v-slot:footer>
            <el-button type="primary"  :loading="isWorking.export" @click="exportDetail">导出详单</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 { check, getDetailList } from '@/api/business/insuranceApply'
import { exportDetailExcel } from '@/api/business/unionApply'
import { exportComFiles } from '@/api/business/company'
// import {all as solutionAll} from "@/api/business/solutions";
export default {
  name: 'InsuranceDetails',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      model: {},
      type: 0,
      detailList: [],
      // è¡¨å•数据
      form: {
        id: null,
        dealBackApply: 0,
        checkInfo: ''
      },
      // éªŒè¯è§„则
      rules: {
      },
      reverse: false,
      tableData: []
    }
  },
  created () {
    this.config({
      api: '/business/insuranceApply',
      'field.id': 'id'
    })
  },
  methods: {
    open (title, target, type) {
      this.title = title
      this.visible = true
      this.model = target
      this.type = type
      this.form.id = target.id
      this.form.checkInfo = ''
      this.getDetailListDo()
    },
    getDetailListDo () {
      getDetailList({ unionApplyId: this.model.id }).then(res => {
        this.detailList = res
      }).catch(err => {
      })
    },
    exportDetail () {
      this.$dialog.exportConfirm('确认导出详单吗?')
        .then(() => {
          this.isWorking = true
          exportDetailExcel({ id: this.model.id })
            .then(response => {
              this.download(response)
            })
            .catch(e => {
              console.log(e)
              this.$message.error('数据下载失败!')
            })
            .finally(() => {
              this.isWorking = false
            })
        })
        .catch(() => {
        })
    },
    check (type) {
      this.form.dealBackApply = type
      this.$dialog.messageConfirm('确认进行该操作吗?')
        .then(() => {
          this.isWorking = true
          check(this.form)
            .then(response => {
              this.visible = false
              this.$emit('success')
            }).catch(err => {
              this.$tip.apiFailed(err)
            })
        })
        .catch(() => {
        })
    },
    exportComFilesDo () {
      this.$dialog.exportConfirm('确认导出企业证件吗?')
        .then(() => {
          this.isWorking = true
          exportComFiles({ id: this.model.companyId })
            .then(response => {
              this.download(response)
            })
            .catch(e => {
              console.log(e)
              this.$message.error('数据下载失败!')
            })
        })
        .catch(() => {
        })
    },
    handleSizeChange (val) {
      console.log(`每页 ${val} æ¡`)
    },
    handleCurrentChange (val) {
      console.log(`当前页: ${val}`)
    },
    handleClick (tab, event) {
      console.log(tab, event)
    },
    onSubmit () {
    }
  }
}
</script>
<style lang="scss" scoped>
    .box {
        width: 100%;
       .top{
           width: 100%;
           align-items: center;
           flex-wrap: wrap;
           border-top: 1px solid #b4bbc5;
           border-left: 1px solid #b4bbc5;
            font-size: 14px;
            font-weight: bold;
            text-align: center;
          padding: 15px;
         }
        .box_header {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            border-top: 1px solid #b4bbc5;
            border-left: 1px solid #b4bbc5;
            .box_header_item {
                width: 50%;
                height: 50px;
                display: flex;
                align-items: center;
                border-right: 1px solid #b4bbc5;
                border-bottom: 1px solid #b4bbc5;
                box-sizing: border-box;
                .box_header_item_label {
                    flex: 1;
                    height: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    background: #f2f2f2;
                    border-right: 1px solid #b4bbc5;
                }
                .box_header_item_val {
                    flex: 1;
                    height: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                }
            }
        }
        .box_table {
            width: 100%;
            border-top: 1px solid #b4bbc5;
            border-left: 1px solid #b4bbc5;
            box-sizing: border-box;
            .box_table_head {
                width: 100%;
                display: flex;
                align-items: center;
                .box_table_head_item {
                    flex: 1;
                    height: 50px;
                    background: #f2f2f2;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    border-right: 1px solid #b4bbc5;
                    border-bottom: 1px solid #b4bbc5;
                    box-sizing: border-box;
                    &:nth-child(1) {
                        //flex: 0.5;
                    }
                }
              .box_table_head_item5 {
                flex: 1;
                height: 50px;
                background: #f2f2f2;
                display: flex;
                align-items: center;
                justify-content: center;
                font-size: 14px;
                color: black;
                border-right: 1px solid #b4bbc5;
                border-bottom: 1px solid #b4bbc5;
                box-sizing: border-box;
                &:nth-child(2) {
                   flex: 5;
                }
              }
              .box_form_item {
                flex: 1;
                height: 50px;
                background: #ffffff;
                display: flex;
                align-items: center;
                justify-content: center;
                font-size: 14px;
                color: black;
                border-right: 1px solid #b4bbc5;
                border-bottom: 1px solid #b4bbc5;
                box-sizing: border-box;
                &:nth-child(1) {
                  //flex: 0.5;
                }
              }
            }
            .box_table_content {
                width: 100%;
                display: flex;
                align-items: center;
                .box_table_content_header{
                  border-bottom: 0px solid #b4bbc5 !important;
                }
              .box_table_content_item {
                    flex: 1;
                    height: 50px;
                    background: #ffffff;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    border-right: 1px solid #b4bbc5;
                    border-bottom: 1px solid #b4bbc5;
                    box-sizing: border-box;
                    &:nth-child(1) {
                       // flex: 0.5;
                    }
                }
            }
        }
    }
</style>
company/src/components/business/OperaUnionApplyCheckWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,391 @@
<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 @remove="dele3" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
        </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 {
  cancel,
  uploadBXD,
  uploadToubaodan,
} from "@/api/business/unionApply";
import UploadFile from "@/components/common/UploadFile";
import {remark} from "@/api/business/settleClaims";
export default {
  name: 'OperaUnionApplyCheckWindow',
  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: '请完善信息' }
        ],
      },
      form: {
         id: null,
         backCheckInfo:'',
         editCheckInfo:'',
        startTime:null,
        code:null,
        toubaodanFile:null,
        baoxianFile:null,
        tbdMultifileList:[],
        bxdMultifileList:[],
        fileList: [],
        fileList1: [],
        selectRadio:0
      },
      visible1: false,
      visible2: false,
      visible3: false
    }
  },
  created () {
      this.config({
          api: '/business/insuranceApply',
          'field.id': 'id'
      })
  },
  methods: {
    dele2() {
      this.form.toubaodanFile = ''
    },
    dele3() {
      this.form.baoxianFile = ''
    },
     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: [],
         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
       if(flag == 1){
         this.visible1 = true
       }
       if(flag == 2){
         this.visible2 = true
       }
       if(flag == 3){
         this.visible3 = 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()
        })
      }
    },
    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
    },
    backDo(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            cancel({id:this.model.id,reason: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({businessId:this.model.id,fileurl:this.form.toubaodanFile.fileurl,name:this.form.toubaodanFile.name,multifileList:this.form.tbdMultifileList})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    uploadBaoxiandan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            uploadBXD({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)
                })
          })
    },
      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>
company/src/components/business/detailsEntrustedInsurance.vue
@@ -15,30 +15,18 @@
            <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="[20,21,22].includes(model.status)" type="danger" @click="$refs.OperaWtbApplyCheckWindow.open('退回投保',model,1)">退回申请</el-button>
              <el-button v-if="model.status == 23" type="danger" @click="$refs.OperaWtbApplyCheckWindow.open('关闭申请',model,2)">关闭申请</el-button>
              <el-button type="primary" v-if="[0].includes(model.status) " @click="$refs.InsuranceDetails.open('导出详单',model,0)">导出详单</el-button>
              <el-button v-if="[0].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('上传投保单',model,2)">上传投保单</el-button>
              <el-button v-if="model.status == 1" type="primary" @click="getSignLink(0)">签署投保单</el-button>
              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">查看投保单</el-button>
              <el-button v-if="[3].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('上传投保单',model,3)">上传保险单</el-button>
              <el-button v-if="model.status == 4" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
              <el-button v-if="[0,1,2].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.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 v-if="userInfo.type ===0">
              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">查看投保单</el-button>
              <el-button v-if="[4].includes(model.status)" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
            </template>
          </div>
        </div>
@@ -107,52 +95,11 @@
                  <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 label="被保险人" prop="applyCompanyName">
                <el-input v-model="formInline.applyCompanyName" placeholder="请输入" @keypress.enter.native="search"></el-input>
              </el-form-item>
            </template>
            <template v-else>
@@ -160,11 +107,9 @@
                <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-option label="待出单" value="1"></el-option>
                  <el-option label="保障中" value="2"></el-option>
                  <el-option label="已退回" value="3"></el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="批单生效起期" prop="end">
@@ -269,11 +214,9 @@
                             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>
                <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">已退回</span>
              </template>
            </el-table-column>
            <el-table-column
@@ -311,7 +254,9 @@
                :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>
@@ -331,11 +276,9 @@
                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>
                <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">已退回</span>
              </template>
            </el-table-column>
            <el-table-column
@@ -403,22 +346,13 @@
        </div>
      </div>
    </div>
    <InsuranceDetails ref="InsuranceDetails" @success="successEvent" />
    <OperaWtbApplyCheckWindow ref="OperaWtbApplyCheckWindow" @success="successEvent" />
    <!--    ä¼ä¸šç”³è¯·é€€å›ž    -->
    <applyReturn ref="applyReturn" @success="successEvent" />
    <!--    æ–°å¢žæŠ•保    -->
    <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
    <!--    åŠ å‡ä¿ç”³è¯·    -->
    <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
    <!--    æ›´æ¢æ´¾é£å•位申请    -->
    <factoryChange ref="factoryChange" @success="successEvent" />
    <InsuranceDetailsWtb ref="InsuranceDetails" @success="successEvent" />
    <OperaUnionApplyCheckWindow ref="OperaUnionApplyCheckWindow" @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>
@@ -455,46 +389,35 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import InsuranceDetails from '@/components/business/InsuranceDetails'
import OperaWtbApplyCheckWindow from '@/components/business/OperaWtbApplyCheckWindow'
import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
import factoryChange from '@/components/enterprise/factoryChange'
import operaverifyPhoneNumberWindew from '@/components/business/operaverifyPhoneNumberWindew'
import InsuranceDetailsWtb from '@/components/business/InsuranceDetailsWtb'
import OperaApplyChangeDetailWindow from '@/components/business/OperaApplyChangeDetailWindow'
import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
import { getById } from '@/api/business/unionApply'
import applyReturn from '@/components/enterprise/applyReturn'
import OperaUnionApplyCheckWindow from '@/components/business/OperaUnionApplyCheckWindow'
import { getById,getSignLink } from '@/api/business/unionApply'
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";
import {sendSms} from "@/api/business/smsEmail";
export default {
  name: 'OperaWtbApplyShopWindow',
  extends: BaseOpera,
  components: {
    GlobalWindow,
    InsuranceDetails,
    OperaWtbApplyCheckWindow,
    applyReturn,
    OperaInsuranceApply,
    additionSubtractionApplication,
    factoryChange,
    OperaApplyChangeDetailWindow,
    OperaApplyChangeUnitDetailWindow,
    operaverifyPhoneNumberWindew
    OperaApplyChangeDetailWindow,
    InsuranceDetailsWtb,
    OperaUnionApplyCheckWindow,
  },
  data () {
    return {
@@ -517,22 +440,12 @@
      timer: null,
      formInline: {
        applyStatus: '',
        duId: '',
        workTypeId: '',
        memberName: '',
        end: [],
        start: [],
        endTimeE: '',
        endTimeS: '',
        startTimeE: '',
        startTimeS: '',
        type: ''
        end:[],
        startTimeS:null,
        startTimeE:null,
        applyCompanyName: ''
      },
      visible1: false,
      visible2: false,
      visible3: false,
      visible4: false,
      visible5: false,
      visiblePhone: false,
      reverse: false,
      radio: 0,
@@ -584,10 +497,6 @@
    },
    getSignLink (flag) {
      if (flag === 0) {
        this.signTitle = '签署方案确认书'
      } else if (flag === 1) {
        this.signTitle = '签署申请单'
      } else if (flag === 2) {
        this.signTitle = '签署投保单'
      }
      this.form.type = flag
@@ -604,24 +513,6 @@
        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)
server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -1267,6 +1267,103 @@
            return null;
    }
    public void exportUnionApplyDetail(UnionApply model, HttpServletResponse response) {
        try {
            String encodeFileName = URLEncoder.encode("投保详情单_"+model.getCompanyName()+"_"+model.getSolutionName(), Charset.forName("UTF-8").toString()) + ".xlsx";
            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
            response.setContentType("application/octet-stream");
            response.setHeader("eva-opera-type", "download");
            response.setHeader("eva-download-filename", encodeFileName);
            this.exportUnionApplyDetailDo(model,"投保申请表", response.getOutputStream());
        } catch (IOException e) {
            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        }
    }
    public void exportUnionApplyDetailDo (UnionApply data, String sheetName, OutputStream os) {
        SXSSFWorkbook sxssfWorkbook;
        try {
            sxssfWorkbook = new SXSSFWorkbook();
            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
            for (int i = 0; i <7; i++) {
                sheet.setColumnWidth(i, (i==5?20:15) * 2 * 256);
            }
            sheet.createFreezePane(0, 1);
            Row title = sheet.createRow(0);
            title.setHeight((short) 800);
            for (int i = 0; i < 7; i++) {
                title.createCell(i).setCellValue(i==0?sheetName:"");
                configTitleCell(sxssfWorkbook,title.getCell(i));
            }
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,6));
            Row header1 = sheet.createRow(1);
            header1.setHeight((short) 500);
            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("总费用(元)");
            for (int i = 0; i < 7; i++) {
                configFirstCell(sxssfWorkbook,header1.getCell(i));
            }
            Row header2 = sheet.createRow(2);
            header2.createCell(0).setCellValue(data.getCompanyName());
            header2.createCell(1).setCellValue(data.getCompanyNames());
            header2.createCell(2).setCellValue(data.getSolutionName());
            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.getInsureNum());
            header2.createCell(6).setCellValue(Constants.formatBigdecimal2Float(data.getFee()).toString());
            for (int i = 0; i < 7; i++) {
                configDataCell(sxssfWorkbook,   header2.getCell(i));
            }
            Row header4 = sheet.createRow(3);
            header4.createCell(0).setCellValue("序号");
            header4.createCell(1).setCellValue("员工姓名");
            header4.createCell(2).setCellValue("性别");
            header4.createCell(3).setCellValue("身份证号");
            header4.createCell(4).setCellValue("被保险人");
            header4.createCell(5).setCellValue("派遣单位");
            header4.createCell(6).setCellValue("所属工种");
            header4.setHeight((short) 500);
            for (int i = 0; i < 7; i++) {
                configFirstCell(sxssfWorkbook,header4.getCell(i));
            }
            if(data.getApplyDetailList()!=null){
                // åˆ›å»ºæ•°æ®è®°å½•
                for (int rowIndex = 0; rowIndex < data.getApplyDetailList().size(); rowIndex++) {
                    ApplyDetail d = data.getApplyDetailList().get(rowIndex);
                    Row header5 = sheet.createRow(rowIndex + 4);
//                    header5.setHeight((short) 300);
                    header5.createCell(0).setCellValue(rowIndex+1);
                    header5.createCell(1).setCellValue(StringUtils.defaultString(d.getMemberName(),""));
                    header5.createCell(2).setCellValue(Constants.equalsInteger(d.getSex(),0)?"男":(Constants.equalsInteger(d.getSex(),1)?"女":"-"));
                    header5.createCell(3).setCellValue(StringUtils.defaultString(d.getIdcardNo(),""));
                    header5.createCell(4).setCellValue(StringUtils.defaultString(d.getCompanyName(),""));
                    header5.createCell(5).setCellValue(StringUtils.defaultString(d.getDuName(),""));
                    header5.createCell(6).setCellValue(StringUtils.defaultString(d.getWorkTypeName(),""));
                    // è®¾ç½®æ•°æ®å•元格
                    for (int i = 0; i < 7; i++) {
                        configDataCell(sxssfWorkbook,   header5.getCell(i));
                    }
                }
            }
            sxssfWorkbook.write(os);
            os.close();
        } catch (Exception e) {
            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    @Data
    @AllArgsConstructor
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -995,10 +995,10 @@
    public  enum UnionChangeStatus {
        MERGE(0, "待签署申请单",""),
        UPLOAD_INSURANCE_POLICY(1, "待上传保单",""),
        MERGE(0, "待签署",""),
        UPLOAD_INSURANCE_POLICY(1, "待出单",""),
        FINISH(2, "保障中",""),
        CLOSE(3, "关闭",""),
        CLOSE(3, "已退回",""),
        ;
        // æˆå‘˜å˜é‡
        private String name;
server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
@@ -107,6 +107,9 @@
    @ApiModelProperty(value = "商户名称", example = "1")
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "被保险人企业名称 ,分割")
    @TableField(exist = false)
    private String companyNames;
    @ApiModelProperty(value = "方案名称", example = "1")
    @TableField(exist = false)
@@ -137,4 +140,8 @@
    @ApiModelProperty(value = "日志记录")
    @TableField(exist = false)
    private List<ApplyLog> applyLogList;
    @ApiModelProperty(value = "人员信息")
    @TableField(exist = false)
    private List<ApplyDetail> applyDetailList;
}
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.*;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.model.UnionApply;
import java.util.List;
@@ -128,4 +129,6 @@
    void uploadBXD(UnionApplyBXDDTO unionApplyBXDDTO);
    UnionApply detail(Integer applyId);
    UnionApply findDetailForExport(UnionApply model);
}
server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
@@ -94,20 +94,23 @@
    @Override
    public List<ApplyDetail> findList(ApplyDetail applyDetailPageDTO) {
        if(applyDetailPageDTO.getApplyId() == null){
        if(applyDetailPageDTO.getApplyId()==null && applyDetailPageDTO.getUnionApplyId() ==null){
            return  new ArrayList<>();
        }
        MPJLambdaWrapper<ApplyDetail> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(applyDetailPageDTO);
        queryWrapper.selectAll(ApplyDetail.class);
        queryWrapper.selectAs(DispatchUnit::getName,ApplyDetail::getDuName);
        queryWrapper.selectAs(Company::getName,ApplyDetail::getCompanyName);
        queryWrapper.selectAs(Worktype::getName,ApplyDetail::getWorkTypeName);
        queryWrapper.selectAs(Member::getIdcardNo,ApplyDetail::getIdcardNo);
        queryWrapper.selectAs(Member::getName,ApplyDetail::getMemberName);
        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.eq( ApplyDetail::getApplyId,applyDetailPageDTO.getApplyId());
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.eq( applyDetailPageDTO.getApplyId()!=null,ApplyDetail::getApplyId,applyDetailPageDTO.getApplyId());
        queryWrapper.eq( applyDetailPageDTO.getUnionApplyId()!=null,ApplyDetail::getUnionApplyId,applyDetailPageDTO.getUnionApplyId());
        List<ApplyDetail> pageData=  applyDetailJoinMapper.selectJoinList( ApplyDetail.class, queryWrapper);
        if(pageData!=null){
            int num = 1;
server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
@@ -258,6 +258,35 @@
        return unionApplyMapper.selectCount(wrapper);
    }
    @Override
    public      UnionApply findDetailForExport(UnionApply model){
        UnionApply insuranceApply = detail(model.getId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        MPJLambdaWrapper<ApplyDetail> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(ApplyDetail.class);
        queryWrapper.selectAs(DispatchUnit::getName,ApplyDetail::getDuName);
        queryWrapper.selectAs(Company::getName,ApplyDetail::getCompanyName);
        queryWrapper.selectAs(Worktype::getName,ApplyDetail::getWorkTypeName);
        queryWrapper.selectAs(Member::getIdcardNo,ApplyDetail::getIdcardNo);
        queryWrapper.selectAs(Member::getName,ApplyDetail::getMemberName);
        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(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.eq(  ApplyDetail::getUnionApplyId,model.getId());
        List<ApplyDetail> detailList=  applyDetailJoinMapper.selectJoinList( ApplyDetail.class, queryWrapper);
        //查询明细
        if(detailList!=null){
            insuranceApply.setInsureNum(detailList.size());
            insuranceApply.setApplyDetailList(detailList);
        }
        insuranceApply.setRemark(model.getRemark());
        return insuranceApply;
    }
    @Override
@@ -268,6 +297,7 @@
                        .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")
                        .select(" ( select group_concat(DISTINCT(cd.name)) from insurance_apply ad left join company cd on ad.company_id = cd.id where ad.UNION_APPLY_ID = t.id ) as companyNames")
                        .leftJoin(Solutions.class,Solutions::getId,UnionApply::getSolutionId)
                        .leftJoin(Company.class,Company::getId,UnionApply::getCompanyId)
                        .eq(UnionApply::getId,applyId)
server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
@@ -7,6 +7,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.*;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.model.UnionApply;
import com.doumee.service.business.UnionApplyService;
import io.swagger.annotations.Api;
@@ -81,7 +82,12 @@
    public void exportExcel (@RequestBody PageWrap<UnionApply> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(UnionApply.class).export(unionApplyService.findPage(pageWrap).getRecords(), "合并投保单信息表", response);
    }
    @ApiOperation("导出投保详情单")
    @PostMapping("/exportDetailExcel")
    @RequiresPermissions("business:unionapply:exportExcel")
    public void exportDetailExcel (@RequestBody UnionApply model, HttpServletResponse response) {
        ExcelExporter.build(UnionApply.class).exportUnionApplyDetail(unionApplyService.findDetailForExport(model),  response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
@@ -99,9 +105,9 @@
        return ApiResponse.success(unionApplyService.merge(saveUnionApplyDTO));
    }
    @ApiOperation("关闭合并单")
    @PostMapping("/close")
    @RequiresPermissions("business:unionapply:close")
    @ApiOperation("退回合并单")
    @PostMapping("/cancel")
    @RequiresPermissions("business:unionapply:cancel")
    public ApiResponse close(@RequestBody CloseDTO closeDTO) {
        unionApplyService.cancelMerge(closeDTO);
        return ApiResponse.success(null);
@@ -110,7 +116,7 @@
    @PreventRepeat
    @ApiOperation("上传投保单")
    @PostMapping("/uploadToubaodan")
    @RequiresPermissions("business:unionapply:create")
    @RequiresPermissions("business:unionapply:uploadToubaodan")
    public ApiResponse uploadToubaodan(@RequestBody UploadMultifileDTO uploadMultifileDTO) {
        unionApplyService.uploadToubaodan(uploadMultifileDTO);
        return ApiResponse.success(null);
@@ -127,7 +133,7 @@
    @ApiOperation("上传保险单")
    @PostMapping("/uploadBXD")
    @RequiresPermissions("business:unionchange:query")
    @RequiresPermissions("business:unionchange:uploadBXD")
    public ApiResponse uploadBXD(@RequestBody UnionApplyBXDDTO unionApplyBXDDTO) {
        unionApplyService.uploadBXD(unionApplyBXDDTO);
        return ApiResponse.success(null);