jiangping
2024-01-29 831cafdd72242d89fcc1f5e447c919a31e129f51
开发业务接口
已添加1个文件
已修改17个文件
598 ■■■■ 文件已修改
company/.env.development 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/insuranceApply.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/InsuranceDetails.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyCheckWindow.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyWindow.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/UploadFile.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/plugins/messagebox.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/insuranceApply.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyDataReq.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyReq.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/common/PublicController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/config/shiro/ShiroConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/third/SignService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.development
@@ -3,9 +3,6 @@
# VUE_APP_API = 'http://192.168.0.104:10023/'
<<<<<<< HEAD
VUE_APP_API = 'http://192.168.0.134:10023/'
=======
#VUE_APP_API = 'http://192.168.0.134:10023/'
VUE_APP_API = 'http://localhost:10023/'
# VUE_APP_API = 'http://192.168.0.134:10023/'
>>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
company/src/api/business/insuranceApply.js
@@ -14,6 +14,22 @@
export function check (data) {
    return request.post('/business/insuranceApply/check', data)
}
export function back (data) {
    return request.post('/business/insuranceApply/back', data)
}
export function uploadToubaodan (data) {
    return request.post('/business/insuranceApply/uploadToubaodan', data)
}
export function uploadBaoxiandan(data) {
    return request.post('/business/insuranceApply/uploadBaoxiandan', data)
}
export function editBaoxiandan(data) {
    return request.post('/business/insuranceApply/editBaoxiandan', data)
}
export function dealBackApply(data) {
    return request.post('/business/insuranceApply/dealBackApply', data)
}
export function exportDetailExcel (data) {
    return request.post('/business/insuranceApply/exportDetailExcel', data, {
@@ -24,6 +40,9 @@
export function getDetail (id) {
    return request.get(`business/insuranceApply/${id}`)
}
export function getSignLink (id) {
    return request.get(`business/insuranceApply/getSignLink/${id}`)
}
export function getDetailList (data) {
    return request.post('/business/applyDetail/list', data, {
        trim: true
company/src/components/business/InsuranceDetails.vue
@@ -83,7 +83,7 @@
        </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 type="danger"  :loading="isWorking.export" @click="check(1)">审核不通过</el-button>-->
            <el-button @click="visible=false">取消</el-button>
        </template>
        <template v-else v-slot:footer>
@@ -165,7 +165,7 @@
          },
          check(type){
            this.form.dealBackApply = type;
            this.$dialog.exportConfirm('确认进行该操作吗?')
            this.$dialog.messageConfirm('确认进行该操作吗?')
                .then(() => {
                  this.isWorking = true
                  check(this.form)
company/src/components/business/OperaInsuranceApplyCheckWindow.vue
@@ -11,7 +11,7 @@
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>填写退回说明:</div>
                    <div class="form_item_val">
                        <textarea placeholder="请输入"></textarea>
                        <textarea  v-model="form.backCheckInfo" placeholder="请输入"></textarea>
                    </div>
                </div>
            </div>
@@ -20,18 +20,7 @@
                <div class="form_item">
                    <div class="form_item_label">上传投保单:</div>
                    <div class="form_item_val">
                        <el-upload
                            class="upload-demo"
                            action="https://locahost:10023/public/upload"
                            :on-preview="handlePreview"
                            :on-remove="handleRemove"
                            :before-remove="beforeRemove"
                            :limit="1"
                            :on-exceed="handleExceed"
                            :file-list="fileList">
                            <el-button size="small" type="primary">点击上传</el-button>
                            <div slot="tip" class="el-upload__tip">只能上传pdf文件,且不超过5mb</div>
                        </el-upload>
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList" @uploadSuccess="toubaoFileUploaded" />
                    </div>
                </div>
            </div>
@@ -39,14 +28,14 @@
            <div v-if="visible3==true" class="form">
                <div class="form_item">
                    <div class="form_item_label">客户期望保险生效起期:</div>
                    <div class="form_item_val">2023-10-01 00:00:00</div>
                    <div class="form_item_val">{{ model.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">保险生效起期是否一致:</div>
                    <div class="form_item_val">
                        <el-radio-group v-model="radio">
                            <el-radio :label="0">与保单一致</el-radio>
                            <el-radio :label="1">与保单不一致</el-radio>
                        <el-radio-group v-model="form.selectRadio" @change="selectChange">
                            <el-radio :label="0"  >与保单一致</el-radio>
                            <el-radio :label="1" >与保单不一致</el-radio>
                        </el-radio-group>
                    </div>
                </div>
@@ -54,81 +43,52 @@
                    <div class="form_item_label"><span>*</span>保险生效起期:</div>
                    <div class="form_item_val">
                        <el-date-picker
                            v-model="value1"
                            v-model="form.startTime"
                            type="date"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="选择日期">
                        </el-date-picker>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">保险生效起期:</div>
                    <div class="form_item_val">2023-10-01 00:00:00</div>
                    <div class="form_item_val">{{ form.startTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>保单号:</div>
                    <div class="form_item_val">
                        <el-input placeholder="请输入"></el-input>
                    <div class="form_item_val" >
                        <el-input v-model="form.code" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">上传保险单:</div>
                    <div class="form_item_val">
                        <el-upload
                            class="upload-demo"
                            action="https://jsonplaceholder.typicode.com/posts/"
                            :on-preview="handlePreview"
                            :on-remove="handleRemove"
                            :before-remove="beforeRemove"
                            multiple
                            :limit="1"
                            :on-exceed="handleExceed"
                            :file-list="fileList">
                            <el-button size="small" type="primary">点击上传</el-button>
                            <div slot="tip" class="el-upload__tip">只能上传pdf文件,且不超过5mb</div>
                        </el-upload>
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
                    </div>
                </div>
            </div>
        <!--    ä¿®æ”¹ä¿é™©å•    -->
            <div v-if="visible4==true" class="form">
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>保险生效起期:</div>
                    <div class="form_item_val">
                        <el-date-picker
                            v-model="value1"
                            type="date"
                            placeholder="选择日期">
                        </el-date-picker>
                    </div>
                  <div class="form_item_label">保险生效起期:</div>
                  <div class="form_item_val">{{ model.startTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>保单号:</div>
                    <div class="form_item_val">
                        <el-input placeholder="请输入"></el-input>
                        <el-input v-model="form.editCode" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>上传保险单:</div>
                    <div class="form_item_val">
                        <el-upload
                            class="upload-demo"
                            action="https://jsonplaceholder.typicode.com/posts/"
                            :on-preview="handlePreview"
                            :on-remove="handleRemove"
                            :before-remove="beforeRemove"
                            multiple
                            :limit="1"
                            :on-exceed="handleExceed"
                            :file-list="fileList">
                            <el-button size="small" type="primary">点击上传</el-button>
                            <div slot="tip" class="el-upload__tip">只能上传pdf文件,且不超过5mb</div>
                        </el-upload>
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>修改原因:</div>
                    <div class="form_item_val">
                        <el-input placeholder="请输入"></el-input>
                        <el-input placeholder="请输入" v-model="form.editCheckInfo" ></el-input>
                    </div>
                </div>
            </div>
@@ -137,12 +97,21 @@
            <div class="form_item">
                <div class="form_item_label"><span>*</span>填写说明:</div>
                <div class="form_item_val">
                    <textarea placeholder="请输入"></textarea>
                    <textarea v-model="form.dealBackInfo"  placeholder="请输入"></textarea>
                </div>
            </div>
        </div>
        <!--    åŒæ„é€€å›žç”³è¯·    -->
        <div v-if="visible6==true" class="form">
            <div class="form_item">
                <div class="form_item_label"><span>*</span>同意退回说明:</div>
                <div class="form_item_val">
                    <textarea  v-model="form.dealBackInfo"  placeholder="请输入"></textarea>
                </div>
            </div>
        </div>
      <template v-slot:footer>
        <el-button type="primary" @click="visible=false">ç¡® å®š</el-button>
        <el-button type="primary" @click="doSubmit">ç¡® å®š</el-button>
        <el-button @click="visible=false">取消</el-button>
      </template>
    </GlobalWindow>
@@ -151,47 +120,46 @@
<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";
export default {
  name: 'OperaInsuranceApplyCheckWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  components: {UploadFile, GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      model: {},
      falg :0,
      form: {
          id: null,
          editDate: ''
      },
      // éªŒè¯è§„则
      rules: {
      },
      formInline: {
          user: '',
          region: ''
          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,
      reverse: true,
      radio: 0,
      fileList: [
      ],
      activities: [{
          content: '活动按期开始',
          timestamp: '2018-04-15'
      }, {
          content: '通过审核',
          timestamp: '2018-04-13'
      }, {
          content: '创建成功',
          timestamp: '2018-04-11'
      }],
      tableData: [],
      activeName: 'first',
      currentPage: 1
    }
  },
  created () {
@@ -204,12 +172,15 @@
     open(title,target,flag){
       this.visible=true
       this.model=target
       this.form.startTime=this.model.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
       }
@@ -225,11 +196,119 @@
       if(flag == 5){
         this.visible5 = true
       }
       if(flag == 6){
         this.visible6 = true
       }
     },
    getDetail(){
      getDetail(this.dataId).then(res => {
      }).catch(err => {
      })
    doSubmit(){
      if (this.flag == 1) {
        this.backDo()
      } else  if (this.flag == 2) {
        this.uploadToubaodan()
      } else if (this.flag == 3) {
        this.uploadBaoxiandan()
      } else if (this.flag == 4) {
        this.editBaoxiandan()
      } else if (this.flag == 5) {
        this.dealBackApply(1)
      } else if (this.flag == 6) {
        this.dealBackApply(0)
      }
    },
    selectChange(){
       if(this.form.selectRadio == 0){
         this.form.startTime = this.model.startTime
       }else{
       }
    },
    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,checkInfo:this.form.backCheckInfo,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.backCheckInfo,code:this.form.editCode,baoxiandanFile:this.form.editBaoxianFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    backeditBaoxiandan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            editBaoxiandan({id:this.model.id,checkInfo:this.form.backCheckInfo})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
      handleRemove(file, fileList) {
          console.log(file, fileList);
company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -11,18 +11,21 @@
                <div class="desc_item_label">
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ model.companyName }}</span>
                        <span>保单状态:{{ model.statusInfo }}{{model.statusCollect}}</span>
                        <span>保单状态:{{ model.statusInfo }}</span>
                        <span>提交时间:{{ model.createDate }}</span>
                    </div>
                    <div class="desc_item_label_right">
                        <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">导出详单</el-button>
                        <el-button v-if="model.statusCollect == 1 " type="primary"  @click="$refs.OperaInsuranceApplyCheckWindow.open('上传投保单',model,2)">上传投保单</el-button>
                        <el-button v-if="model.statusCollect == 3 "  type="primary"  @click="$refs.OperaInsuranceApplyCheckWindow.open('上传保险单',model,3)">上传保险单</el-button>
                        <el-button  v-if="model.statusCollect == 6 || model.status == 7|| model.status == 8" type="primary"  @click="$refs.OperaInsuranceApplyCheckWindow.open('处理退回申请',model,5)">处理退回申请</el-button>
                        <el-button v-if="model.statusCollect == 0 "  type="primary" @click="$refs.InsuranceDetails.open('投保审核',model,1)">投保审核</el-button>
                        <el-button v-if="model.statusCollect != 5 " type="danger"  @click="$refs.OperaInsuranceApplyCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                        <el-button v-if="model.statusCollect == 5 "  type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                    </div>
                  <div class="desc_item_label_right">
                    <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">导出详单</el-button>
                    <el-button v-if="model.status == 2 ||model.status == 3 ||model.status == 5  ||model.status == 7 ||model.status == 8  "  type="primary"  @click="viewToubaodan">查看投保单</el-button>
                    <el-button v-if="model.status == 5  "  type="primary"  @click="viewBaoxiandan">查看保险单</el-button>
                    <el-button v-if="model.status == 10 " type="primary"  @click="$refs.OperaInsuranceApplyCheckWindow.open('上传投保单',model,2)">上传投保单</el-button>
                    <el-button v-if="model.status == 3 "  type="primary"  @click="$refs.OperaInsuranceApplyCheckWindow.open('上传保险单',model,3)">上传保险单</el-button>
                    <el-button v-if="model.status == 2 "  type="primary"  @click="goSign">企业签章</el-button>
                    <el-button  v-if="model.status == 6 || model.status == 7|| model.status == 8" type="primary"  @click="$refs.OperaInsuranceApplyCheckWindow.open('驳回退回申请',model,5)">驳回退回申请</el-button>
                    <el-button v-if="model.status == 0 "  type="primary" @click="$refs.InsuranceDetails.open('投保审核',model,1)">投保审核</el-button>
                    <el-button v-if="model.status != 5 && model.status != 4 && model.status != 1" type="danger"  @click="$refs.OperaInsuranceApplyCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                    <el-button v-if="model.status == 5 "  type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                  </div>
                </div>
                <div class="desc_item_from">
                    <el-table
@@ -31,35 +34,43 @@
                        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>
@@ -199,7 +210,7 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import InsuranceDetails from '@/components/business/InsuranceDetails'
import OperaInsuranceApplyCheckWindow from '@/components/business/OperaInsuranceApplyCheckWindow'
import {getDetail} from "@/api/business/insuranceApply";
import {getDetail, getSignLink} from "@/api/business/insuranceApply";
import {all as solutionAll} from "@/api/business/solutions";
export default {
  name: 'OperaInsuranceApplyWindow',
@@ -256,20 +267,42 @@
     open(title,target){
       this.visible=true;
       this.dataId=target.id
      this.getDetail();
      this.getDetail()
     },
    goSign(){
      getSignLink(this.dataId).then(res => {
          window.open(res)
      }).catch(err => {
       this.$tip.apiFailed(err)
      })
    },
    viewToubaodan(){
       if(this.model.toubaodanSignedFile && this.model.toubaodanSignedFile.fileurlFull){
        window.open(this.model.toubaodanSignedFile.fileurlFull)
       } else if(this.model.toubaodanFile && this.model.toubaodanFile.fileurlFull){
         window.open(this.model.toubaodanFile.fileurlFull)
       }
    },
    viewBaoxiandan(){
      if(this.model.baoxiandanFile && this.model.baoxiandanFile.fileurlFull){
        window.open(this.model.baoxiandanFile.fileurlFull)
      }
    },
    handleSizeChange(){
    },
    handleCurrentChange(){
    },
    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 => {
      })
company/src/components/common/UploadFile.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
<template>
  <div>
    <el-upload
      class="upload-demo"
      :accept="uploadData.fileTyp"
      :action="uploadImgUrl"
      :limit="1"
      :on-exceed="handleExceed"
      :on-success="handleFileSuccess"
      :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-upload>
  </div>
</template>
<script>
export default {
  props: {
    file: {
      type: Object,
      default: () => {}
    },
    tipsLabel: '',
    customStyle: {
      type: String,
    default: 'width: 190px; height: 190px;'
    },
    uploadData: Object
  },
  data() {
    return {
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload?folder='+this.uploadData.folder
    }
  },
  methods: {
    // ä¸Šä¼ å›¾ç‰‡
    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 })
      } else {
        this.$tip.apiFailed('上传失败')
      }
      this.$emit('uploadEnd')
    },
    uploadError() {
      this.$tip.apiFailed('上传失败')
      this.$emit('endUpload')
    },
    // // æ‹¦æˆª
    beforeFileUpload(file) {
      this.$emit('uploadBegin')
      return true
    }
  }
}
</script>
<style lang="scss" scoped>
$image-width: 100px;
.avatar-uploader {
  width: $image-width;
  height: $image-width;
}
::v-deep .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  width: $image-width;
  height: $image-width;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409EFF;
}
.avatar-uploader-icon {
  line-height: 90px;
  font-size: 28px;
  color: #8c939d;
  width: $image-width;
  height: $image-width;
  text-align: center;
}
.avatar {
  width: $image-width;
  height: $image-width;
  display: block;
}
.tips-style {
  height: 13px;
  font-size: 13px;
  font-weight: 400;
  color: #999999;
  line-height: 13px;
}
</style>
<style lang="scss" scoped>
::v-deep .el-upload--picture-card{
  width: 90px !important;
  height: 90px !important;
}
::v-deep .el-upload-list__item {
  width: 90px !important;
  height: 90px !important;
}
.icon {
  -webkit-transform: translate(-50%,-50%);
  -ms-transform: translate(-50%,-50%);
  transform: translate(0%, -85%);
}
::v-deep .el-upload-list__item {
  width: 90px !important;
  height: 90px !important;
}
</style>
company/src/plugins/messagebox.js
@@ -49,6 +49,14 @@
      type: 'warning'
    })
  },
    // é—®å·ç¡®å®žæé†’
  messageConfirm (message, confirmText='确定', cancelText='取消') {
    return MessageBox.confirm(message, "操作确认", {
      confirmButtonText: confirmText,
      cancelButtonText: cancelText,
      type: 'warning'
    })
  },
  // ç¡®è®¤æ˜¯å¦æœåŠ¡è¯¥ä¼ä¸š
  cancelOrder (message) {
    return MessageBox.confirm(message, '取消提示', {
company/src/views/business/insuranceApply.vue
@@ -6,11 +6,12 @@
                <el-select v-model="searchForm.statusCollect" placeholder="请选择" @keypress.enter.native="search">
                    <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="4"></el-option>
                    <el-option label="退回申请中" value="5"></el-option>
                    <el-option label="已关闭" value="6"></el-option>
                  <el-option label="待签章" value="7"></el-option>
                  <el-option label="保障中" value="2"></el-option>
                  <el-option label="已过期" value="3"></el-option>
                  <el-option label="已退回" value="4"></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="companyId">
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyDataReq.java
@@ -3,15 +3,17 @@
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("签约方信息")
public class NotifyDataReq {
public class NotifyDataReq implements Serializable {
    private String applyNo;//签约编号    *    post    string
    private String identityType;//    è¯ä»¶ç±»åž‹ 1身份证, 2护照, 3台胞证, 4港澳居民来往内地通行证, 11营业执照, 12统一社会信用代码, 99其他    *    post    int
    private int identityType;//    è¯ä»¶ç±»åž‹ 1身份证, 2护照, 3台胞证, 4港澳居民来往内地通行证, 11营业执照, 12统一社会信用代码, 99其他    *    post    int
    private String fullName;//    åç§°    *    post    string
    private String identityCard    ;//证件号    *    post    string
    private Long  optTime;//操作时间(毫秒)    *    post    long
    private Integer  signStatus;//    1签约完成2拒签3已保全(1、签约完成是指用户签署文件成功;2、拒签是指用户在签约页面点了拒签按钮,需要进入到签署页面用户手动签署才会出现拒签按钮;3、已保全是指用户完成签署后,君子签会立即自动对用户签署过程的操作以及合同文件信息进行上链存证固化,已保全是合同的最终状态,如果需要下载合同请以已保全状态为准。)    *    post    int
    private long  optTime;//操作时间(毫秒)    *    post    long
    private int  signStatus;//    1签约完成2拒签3已保全(1、签约完成是指用户签署文件成功;2、拒签是指用户在签约页面点了拒签按钮,需要进入到签署页面用户手动签署才会出现拒签按钮;3、已保全是指用户完成签署后,君子签会立即自动对用户签署过程的操作以及合同文件信息进行上链存证固化,已保全是合同的最终状态,如果需要下载合同请以已保全状态为准。)    *    post    int
}
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyReq.java
@@ -3,13 +3,16 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("签约方信息")
public class NotifyReq {
public class NotifyReq implements Serializable {
    private String method    ;//业务类型    *    post
    private String  version    ;//版本    *    post
    private Long   timestamp    ;//时间戳(精确到毫秒)    *    post
    private long   timestamp    ;//时间戳(精确到毫秒)    *    post
    private NotifyDataReq   data    ;//JSONObject结果    *    post
    private String   sign;//    ç­¾åsign(sha1对前面的参数签名)    *    post
    private String appkey;//    appkey    *    post
server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -57,6 +57,15 @@
    public ApiResponse uploadToubaodan(@RequestBody InsuranceApply insuranceApply) {
        return ApiResponse.success(insuranceApplyService.uploadToubaodan(insuranceApply));
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/getSignLink/{id}")
    @RequiresPermissions("business:insuranceapply:query")
    public ApiResponse<String> getSignLink(@PathVariable Integer id) {
        return ApiResponse.success(insuranceApplyService.getSignLink(id));
    }
    @ApiOperation("平台上传保险单")
    @PostMapping("/uploadBaoxiandan")
    @RequiresPermissions("business:insuranceapply:uploadBaoxiandan")
server/platform/src/main/java/com/doumee/api/common/PublicController.java
@@ -1,6 +1,7 @@
package com.doumee.api.common;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.annotation.trace.Trace;
@@ -16,6 +17,7 @@
import com.doumee.service.business.InsuranceApplyService;
import com.doumee.service.business.InterfaceLogService;
import com.doumee.service.business.third.SignService;
import com.jzq.common.bean.sign.NotifyDataReq;
import com.jzq.common.bean.sign.NotifyReq;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -26,10 +28,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@@ -39,6 +38,7 @@
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.util.*;
/**
@@ -57,33 +57,31 @@
    private InsuranceApplyService insuranceApplyService;
    @Autowired
    public InterfaceLogService interfaceLogService = null;
    @ApiOperation("君子签签约回调通知")
    @PostMapping("/signNotify")
    public void updateStatus(@RequestBody NotifyReq request,HttpServletResponse response) {
    public void updateStatus(@RequestParam Map<String,String> req, HttpServletResponse response) {
        Map<String, Object> context = new HashMap<>();
        context.put("success",true);
        InterfaceLog log=new InterfaceLog();
        log.setType(1);
        log.setCreateDate(new Date());
        log.setIsdeleted(0);
        log.setRequest(JSONObject.toJSONString(request));
        log.setRequest(JSONObject.toJSONString(req));
        log.setName("君子签签约回调通知");
        log.setUrl(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode());
        try {
            String appKey = systemDictDataBiz.queryByCode(Constants.SIGN,Constants.SIGN_APPKEY).getCode();
            String appSecret  = systemDictDataBiz.queryByCode(Constants.SIGN,Constants.SIGN_APPSECRET).getCode();
            if(!StringUtils.equals(appKey,request.getAppkey())){
            if(!StringUtils.equals(appKey,req.get("appkey"))){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"appkey不匹配");
            }
            String sign = DigestUtils.sha1Hex("data"+JSONObject.toJSONString(request.getData())+"method"+request.getMethod()+"version"+request.getVersion()+"timestamp"+request.getTimestamp()
            String sign = DigestUtils.sha1Hex("data"+ req.get("data")+"method"+req.get("method")+"version"+req.get("version")+"timestamp"+req.get("timestamp")
                    +"appKey"+appKey+"appSecret"+appSecret);
            if(!StringUtils.equals(sign,request.getSign())){
            if(!StringUtils.equals(sign,req.get("sign"))){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"验签不通过");
            }
            insuranceApplyService.dealSignResult(request.getData());
            NotifyDataReq data   = JSONObject.parseObject(req.get("data"), NotifyDataReq.class);
            insuranceApplyService.dealSignResult(data);
        }catch (Exception e){
            log.setRepose("处理异常;"+e.getMessage());
            context.put("success",false);
@@ -92,7 +90,6 @@
        }finally {
            interfaceLogService.create(log);
        }
        writerJson(response, context);
    }
server/service/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -92,6 +92,7 @@
        map.put("/system/logout", "anon");
        map.put("/common/captcha", "anon");
        map.put("/business/smsEmail/sendSms", "anon");
        map.put("/public/signNotify", "anon");
        map.put("/business/areas/*", "anon");
        // - æ”¾è¡Œswagger
        map.put("/doc.html", "anon");
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -665,8 +665,9 @@
        BZZ(2, "保障中"),
        YGQ(3, "已过期"),
        YTH(4, "已退回"),
        THSQZ(5, "退回申请中"),
        THSQZ(5, "申请退回"),
        YGB(6, "已关闭"),
        DQYQZ(7, "待签署"),
        ;
        // æˆå‘˜å˜é‡
        private String name;
@@ -795,9 +796,9 @@
    public  enum InsuranceApplyStatus {
        UPLOAD(0, "提交投保","",0),
        PLATFORM_RETURN(1, "审核不通过","提交意见:${param}",4),
        WAIT_SIGNATURE(2, "已上传代签申请表待企业签章","",1),
        WAIT_SIGNATURE(2, "已上传代签申请表待企业签章","",7),
        SIGNATURE(3, "已签章待上传保险单","",1),
        FAIL_RETURN(4, "保单出具失败退回","",0),
        FAIL_RETURN(4, "保单出具失败退回","",4),
        UPLOAD_INSURANCE(5, "保单完成","保险生效起期:${param}变更为${param1}",2),
        COMPANY_BACK_APPLY_UPLOAD(6, "企业申请退回(提交投保)","提交意见:${param}",5),
        COMPANY_BACK_APPLY_WAIT_SIGNATURE(7, "企业申请退回(待签章)","提交意见:${param}",5),
server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
@@ -77,12 +77,10 @@
    @ApiModelProperty(value = "期望保险生效起期")
    @ExcelColumn(name="期望保险生效起期")
    private Date applyStartTime;
    @ApiModelProperty(value = "实际保险生效止期")
    @ExcelColumn(name="实际保险生效止期")
    private Date endTime;
    @ApiModelProperty(value = "实际保险生效起期")
@@ -128,6 +126,9 @@
    @ApiModelProperty(value = "方案名称")
    @TableField(exist = false)
    private String solutionsName;
    @ApiModelProperty(value = "签章关键字")
    @TableField(exist = false)
    private String signKeyword;
    @ApiModelProperty(value = "人员信息")
    @TableField(exist = false)
@@ -188,7 +189,6 @@
        taxesInvoicingVO.setType(Constants.ZERO);
        return taxesInvoicingVO;
    }
    @ApiModelProperty(value = "在线签章地址")
    @TableField(exist = false)
    private String signLink;
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -994,7 +994,7 @@
        if(StringUtils.isBlank(applyNo) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
        String link = signService.signLink(applyNo,company.getEmail(),company.getCode());
        String link = signService.signLink(applyNo,company.getName(),company.getCode());
        if(StringUtils.isBlank(link) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -32,6 +32,7 @@
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;
@@ -46,6 +47,8 @@
 */
@Service
public class InsuranceApplyServiceImpl implements InsuranceApplyService {
    @Value("${debug_model}")
    private boolean debugModel;
    @Autowired
    private InsuranceApplyMapper insuranceApplyMapper;
@@ -56,6 +59,8 @@
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private InsuranceApplyJoinMapper insuranceApplyJoinMapper;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private ApplyDetailMapper applyDetailMapper;
@@ -135,11 +140,11 @@
        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.SIGNATURE.getKey())){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请状态已流转,当前不支持该操作~");
        }
        if(model.getApplyEndTime()== null || insuranceApply.getStartTime().getTime()>insuranceApply.getApplyEndTime().getTime() ){
        if(model.getApplyEndTime()== null || model.getStartTime().getTime()>model.getApplyEndTime().getTime() ){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请生效周期时间不符合要求,请确认后修改重试~");
        }
        //计算实际截止时间
        Date actEndTime = new Date(insuranceApply.getApplyEndTime().getTime() + (insuranceApply.getStartTime().getTime() - model.getApplyStartTime().getTime()));
        Date actEndTime = new Date(model.getApplyEndTime().getTime() + (insuranceApply.getStartTime().getTime() - model.getApplyStartTime().getTime()));
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        InsuranceApply update = new InsuranceApply();
        update.setEditDate(new Date());
@@ -156,7 +161,7 @@
        insuranceApply.getBaoxiandanFile().setIsdeleted(Constants.ZERO);
        insuranceApply.getBaoxiandanFile().setCreator(user.getId());
        insuranceApply.getToubaodanFile().setObjId(update.getId());
        insuranceApply.getBaoxiandanFile().setObjId(update.getId());
        insuranceApply.getBaoxiandanFile().setCreateDate(update.getEditDate());
        insuranceApply.getBaoxiandanFile().setObjType(Constants.MultiFile.BD_DONE_PDF.getKey());
        insuranceApply.getBaoxiandanFile().setType(Constants.TWO);
@@ -219,7 +224,7 @@
        param.getBaoxiandanFile().setObjType(Constants.MultiFile.BD_DONE_PDF.getKey());
        param.getBaoxiandanFile().setType(Constants.TWO);
        multifileMapper.insert(param.getBaoxiandanFile());
        update.setStatus(model.getStatus());
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.PALTFORM_EDIT_BD;
        String info =  applyLogType.getInfo();
        info = info.replace("${param}",param.getCheckInfo());
@@ -289,7 +294,14 @@
        if(id == null ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        InsuranceApply model = insuranceApplyMapper.selectById(id);
        MPJLambdaWrapper wrapper=  new MPJLambdaWrapper<InsuranceApply>()
                .selectAll(InsuranceApply.class)
                .selectAs(Solutions::getSignKeyword,InsuranceApply::getSignKeyword)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .eq(InsuranceApply::getId,id)
                .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);
        }
@@ -298,11 +310,14 @@
        Constants.ApplyLogType applyLogType = null;
        String info = "";
            //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作
        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_WAIT_SIGNATURE.getKey())){
        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请状态已流转,当前不支持该操作~");
        }
        Company company = user.getCompany();
        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.ONE)){
        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(),"对不起,企业尚未具备在线签章条件,请联系平台管理员确认~");
        }
@@ -316,11 +331,11 @@
        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(),null,company.getSignId(),notifyUrl);
        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.getEmail(),company.getCode());
        String link = signService.signLink(applyNo,company.getName(),company.getCode());
        if(StringUtils.isBlank(link) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
@@ -358,7 +373,7 @@
        InsuranceApply update = new InsuranceApply();
        update.setEditDate(new Date());
        update.setEditor(model.getCreator());
        update.setStatus(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
        update.setStatus(Constants.InsuranceApplyStatus.SIGNATURE.getKey());
        update.setCheckDate(update.getEditDate());
        update.setCheckInfo("企业完成签署");
        update.setCheckUserId(model.getCreator());
@@ -449,7 +464,7 @@
        if(Constants.equalsInteger(data.getSignStatus(), Constants.THREE )){
            //如果已保全,可下载签约附件
            InsuranceApply model = insuranceApplyMapper.selectOne(new QueryWrapper<InsuranceApply>().lambda().eq(InsuranceApply::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
            if(model != null && Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_WAIT_SIGNATURE.getKey())){
            if(model != null && Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())){
                //完成签署已完成操作
                String link = signService.linkFile(data.getApplyNo());
                String fileUrl = uploadSignFile(link);
@@ -522,7 +537,7 @@
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.WAIT_SIGNATURE;
        String info =applyLogType.getInfo();
        info = info.replace("${param}", update.getCheckInfo());
//        info = info.replace("${param}", update.getCheckInfo());
        ApplyLog log = new ApplyLog(update,applyLogType.getName(),StringUtils.isNotBlank(update.getCheckInfo())?info:"",update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        applyLogMapper.insert(log);
        return  1;
@@ -981,7 +996,7 @@
                f.setFileurlFull(path+f.getFileurl());
                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_APPLY_PDF.getKey())){
                    //签署前的投保单
                    model.setBaoxiandanFile(f);
                    model.setToubaodanFile(f);
                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_SIGNED_PDF.getKey())){
                    //签署后的投保单
                    model.setToubaodanSignedFile(f);
server/service/src/main/java/com/doumee/service/business/third/SignService.java
@@ -269,7 +269,7 @@
//          params.put("file",file);
          params.put("url",fileUrl);
          params.put("dealType",5); //指定合同文件签署方式 5 ä¸ºéƒ¨åˆ†è‡ªåŠ¨ç­¾
          params.put("positionType",1); //指定通过表单域方式设置签字位置
          params.put("positionType",2); //指定通过表单域方式设置签字位置
          params.put("fileType",1);
          params.put("needQifengSign",1);
          params.put("notifyUrl",notifyUrl);
@@ -286,7 +286,7 @@
          sReq.setNoNeedVerify(1);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());
          System.out.println(signatories.toJSONString());
          System.out.println("================"+JSONObject.toJSONString(params));
          String str= HttpClientUtils.init().getPost(url,null,params,true);
          System.out.println(str);
          saveInterfaceLog(url,"【电子签】发起签约",JSONObject.toJSONString(params),str);
@@ -331,6 +331,7 @@
//          sReq.setChapteJson(postionJson);
          sReq.setSearchKey(postionJson);
          sReq.setSignId(singId);
          sReq.setSearchConvertExtend("{\"fixX\":10,\"fixY\":-50}");
          sReq.setNoNeedVerify(1);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());