jiangping
2024-01-24 f84dcb86fc4c833202d9495a259d07082b7b72ae
开发业务接口
已添加3个文件
已修改19个文件
已重命名1个文件
400 ■■■■ 文件已修改
server/company/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dianziqian/src/main/java/com/jzq/JzqHttpApiTest.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyDataReq.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyReq.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/WorktypeController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/common/PublicController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/annotation/excel/ExcelToPdfTool.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Solutions.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/WorktypeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/third/SignService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java
@@ -71,14 +71,14 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:applychagnedetail:query")
    public ApiResponse<PageData<ApplyChagneDetail>> findPage (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap) {
    public ApiResponse<PageData<ApplyChagneDetail>> findPage (@RequestBody PageWrap<ApplyChagneDetail> pageWrap) {
        return ApiResponse.success(applyChagneDetailService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:applychagnedetail:exportExcel")
    public void exportExcel (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap, HttpServletResponse response) {
    public void exportExcel (@RequestBody PageWrap<ApplyChagneDetail> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(ApplyChagneDetail.class).export(applyChagneDetailService.findPage(pageWrap).getRecords(), "加减保换厂申请明细信息表", response);
    }
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -82,6 +82,18 @@
    public void exportExcel (@RequestBody PageWrap<ApplyChange> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).export(applyChangeService.findPage(pageWrap).getRecords(), "加减保换厂申请信息表", response);
    }
    @ApiOperation("导出加减保详情单")
    @PostMapping("/exportJiajianBaoExcel")
    @RequiresPermissions("business:insuranceapply:exportExcel")
    public void exportJiajianBaoExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcel(applyChangeService.exportJiajianBaoExcel(model),   response);
    }
    @ApiOperation("导出换厂申请详情单")
    @PostMapping("/exportChangeUnitExcel")
    @RequiresPermissions("business:insuranceapply:exportExcel")
    public void exportChangeUnitExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).exportChangeUnitExcel(applyChangeService.exportChangeUnitExcel(model),   response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -89,13 +89,24 @@
    public void exportExcel (@RequestBody PageWrap<InsuranceApplyQueryDTO> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(InsuranceApply.class).export(insuranceApplyService.findPage(pageWrap).getRecords(), "投保申请信息表", response);
    }
    @ApiOperation("导出投保详情单")
    @PostMapping("/exportDetailExcel")
    @RequiresPermissions("business:insuranceapply:exportExcel")
    public void exportDetailExcel (@RequestBody  InsuranceApply model, HttpServletResponse response) {
        ExcelExporter.build(InsuranceApply.class).exportApplyDetail(insuranceApplyService.findDetailForExport(model),  response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:insuranceapply:query")
    public ApiResponse findById(@PathVariable Integer id) {
    public ApiResponse<InsuranceApply> findById(@PathVariable Integer id) {
        return ApiResponse.success(insuranceApplyService.findDetail(id));
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/getSignLink/{id}")
    @RequiresPermissions("business:insuranceapply:query")
    public ApiResponse<String> getSignLink(@PathVariable Integer id) {
        return ApiResponse.success(insuranceApplyService.getSignLink(id));
    }
    @ApiOperation("申请记录状态处理")
server/dianziqian/src/main/java/com/jzq/JzqHttpApiTest.java
ÎļþÃû´Ó server/dianziqian/src/test/java/com/jzq/common/test/JzqHttpApiTest.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.jzq.common.test;
package com.jzq;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -219,9 +219,9 @@
    public static void main(String[] args) {
//        new JzqHttpApiTest().testOrganizationCreate();
//        new JzqHttpApiTest().testOrganizationAuditStatus();
        new JzqHttpApiTest().uploadEntSign("豆米科技公章新",new File("D://sing.png"),"jp@doumee.com");
//        new JzqHttpApiTest().uploadEntSign("豆米科技公章新",new File("D://sing.png"),"jp@doumee.com");
        new JzqHttpApiTest().testlink( new JzqHttpApiTest().testApplySign());
//        new JzqHttpApiTest().testlink( new JzqHttpApiTest().testApplySign());
//        new JzqHttpApiTest().testlinkFile();
    }
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyDataReq.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.jzq.common.bean.sign;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel("签约方信息")
public class NotifyDataReq {
    private String applyNo;//签约编号    *    post    string
    private String 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
}
server/dianziqian/src/main/java/com/jzq/common/bean/sign/NotifyReq.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.jzq.common.bean.sign;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("签约方信息")
public class NotifyReq {
    private String method    ;//业务类型    *    post
    private String  version    ;//版本    *    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/ApplyChangeController.java
@@ -116,7 +116,7 @@
    public void exportJiajianBaoExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcel(applyChangeService.exportJiajianBaoExcel(model),   response);
    }
    @ApiOperation("导出加减保详情单")
    @ApiOperation("导出换厂申请详情单")
    @PostMapping("/exportChangeUnitExcel")
    @RequiresPermissions("business:insuranceapply:exportExcel")
    public void exportChangeUnitExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
server/platform/src/main/java/com/doumee/api/business/WorktypeController.java
@@ -90,13 +90,13 @@
    }
    @ApiOperation("导入模板")
    @PostMapping("/importExcel/{id}")
    @PostMapping("/importExcel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
    })
    @RequiresPermissions("business:worktype:create")
    public ApiResponse<List<String>> importExcel (@ApiParam(value = "file") MultipartFile file,@PathVariable Integer id) {
        return ApiResponse.success(worktypeService .importBatch(file,id));
    public ApiResponse<List<String>> importExcel (@ApiParam(value = "file") MultipartFile file ) {
        return ApiResponse.success(worktypeService .importBatch(file));
    }
server/platform/src/main/java/com/doumee/api/common/PublicController.java
@@ -4,17 +4,30 @@
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.aliyun.ALiYunUtil;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.model.InterfaceLog;
import com.doumee.dao.business.model.Solutions;
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.NotifyReq;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
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.multipart.MultipartFile;
@@ -26,10 +39,7 @@
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import java.util.*;
/**
 * @author Eva.Caesar Liu
@@ -43,6 +53,46 @@
public class PublicController extends BaseController {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private InsuranceApplyService insuranceApplyService;
    @Autowired
    public InterfaceLogService interfaceLogService = null;
    @ApiOperation("君子签签约回调通知")
    @PostMapping("/signNotify")
    public ApiResponse updateStatus(@RequestBody NotifyReq request) {
        InterfaceLog log=new InterfaceLog();
        log.setType(1);
        log.setCreateDate(new Date());
        log.setIsdeleted(0);
        log.setRequest(JSONObject.toJSONString(request));
        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())){
                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()
                    +"appKey"+appKey+"appSecret"+appSecret);
            if(!StringUtils.equals(sign,request.getSign())){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"验签不通过");
            }
            insuranceApplyService.dealSignResult(request.getData());
        }catch (Exception e){
            log.setRepose("处理异常;"+e.getMessage());
            throw  e;
        }finally {
            interfaceLogService.create(log);
        }
        return ApiResponse.success(null);
    }
    @ApiOperation(value = "上传", notes = "上传", httpMethod = "POST", position = 6)
    @ApiImplicitParams({
        @ApiImplicitParam(name = "folder", value = "文件夹", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
server/pom.xml
@@ -155,6 +155,16 @@
    </dependency>
    <!-- èŽ·å–ç³»ç»Ÿä¿¡æ¯ä¾èµ–åŒ… -->
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.5.13.3</version>
    </dependency>
    <dependency>
      <groupId>e-iceblue</groupId>
      <artifactId>spire.xls.free</artifactId>
      <version>3.9.1</version>
    </dependency>
    <dependency>
      <groupId>com.github.oshi</groupId>
      <artifactId>oshi-core</artifactId>
      <version>${oshi.version}</version>
@@ -204,6 +214,13 @@
      <version>2.6.12</version>
    </dependency>
  </dependencies>
  <repositories>
    <repository>
      <id>com.e-iceblue</id>
      <name>e-iceblue</name>
      <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
  </repositories>
  <build>
    <plugins>
      <plugin>
server/service/src/main/java/com/doumee/core/annotation/excel/ExcelToPdfTool.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.doumee.core.annotation.excel;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
/**
 * Excel导出实现
 * @author Eva.Caesar Liu
 * @date 2023/02/14 11:14
 */
public class ExcelToPdfTool  {
        public static void main(String[] args)  {
            String inputExcelPath = "D:\\1.xlsx";
            String outputPdfPath = "D:\\555.pdf";
/*            Workbook workbook = new Workbook();
            workbook.loadFromFile(inputExcelPath);
            //转换时设置工作表适应宽度
            workbook.getConverterSetting().setSheetFitToWidth(true);
            //获取第一个工作表
            Worksheet worksheet = workbook.getWorksheets().get(0);
//            File f = new File(outputPdfPath);
//            if(!f.exists()){
//                f.createNewFile();
//            }
            //保存为PDF文档格式
            worksheet.saveToPdf(outputPdfPath);*/
            //创建Workbook å®žä¾‹å¹¶åŠ è½½ç¤ºä¾‹æ–‡æ¡£
            Workbook workbook = new Workbook();
            workbook.loadFromFile(inputExcelPath);
            //转换时设置工作表适应宽度
            workbook.getConverterSetting().setSheetFitToWidth(true);
            //获取第一个工作表
            Worksheet worksheet = workbook.getWorksheets().get(0);
            //保存为PDF文档格式
            worksheet.saveToPdf(outputPdfPath);
        }
}
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -76,6 +76,7 @@
    public static final String TAXES_FILE = "TAXES_FILE";
    public static final String APPLY_FILE ="APPLY_FILE" ;
    public static final String SETTLE_FILE ="SETTLE_FILE" ;
    public static final String SIGN_DONE_NOTIFY_URL = "SIGN_DONE_NOTIFY_URL";
    /**
     * ä¼ä¸šæ•°æ®æ¥æº 0平台注册 1后台导入
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -86,7 +86,8 @@
    @ApiModelProperty(value = "状态 0待签署 1已签章 2已上传批单 3退回申请 4平台同意 5平台驳回")
    @ExcelColumn(name="状态 0待签署 1已签章 2已上传批单 3退回申请 4平台同意 5平台驳回")
    private Integer status;
    @ApiModelProperty(value = "在线签章合同号")
    private String signApplyNo;
    @ApiModelProperty(value = "期望保险生效起期")
    @ExcelColumn(name="期望保险生效起期")
    private Date validTime;
server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
@@ -105,6 +105,9 @@
    @ApiModelProperty(value = "单号")
    @ExcelColumn(name="单号")
    private String code;
    @ApiModelProperty(value = "在线签章合同号")
    @ExcelColumn(name="在线签章合同号")
    private String signApplyNo;
    @ApiModelProperty(value = "状态 0待审核 1平台退回保单(已退回) 2已上传代签申请表待企业签章(待签署)  3已签章待上传保险单(待出单) 4保单出具失败退回(已退回) 5已上传保单(保障中)6企业申请退回中 7平台同意退回(已退回) 8企业关闭  ï¼ˆå·²å…³é—­ï¼‰", example = "1")
    @ExcelColumn(name="状态 0待审核 1平台退回保单(已退回) 2已上传代签申请表待企业签章(待签署)  3已签章待上传保险单(待出单) 4保单出具失败退回(已退回) 5已上传保单(保障中)6企业申请退回中 7平台同意退回(已退回) 8企业关闭  ï¼ˆå·²å…³é—­ï¼‰")
@@ -164,4 +167,8 @@
    @ApiModelProperty(value = "处理企业申请状态  0同意 1驳回")
    @TableField(exist = false)
    private int dealBackApply;
    @ApiModelProperty(value = "在线签章地址")
    @TableField(exist = false)
    private String signLink;
}
server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
@@ -151,6 +151,9 @@
    @ApiModelProperty(value = "员工", example = "1")
    @TableField(exist = false)
    private Integer memberId;
    @ApiModelProperty(value = "保险公司名称", example = "1")
    @TableField(exist = false)
    private String insuranceName;
    @ApiModelProperty(value = "保单主键", example = "1")
server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
@@ -5,6 +5,8 @@
import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
import com.doumee.dao.business.model.InsuranceApply;
import com.jzq.common.bean.sign.NotifyDataReq;
import java.util.List;
/**
@@ -116,4 +118,8 @@
    List<InsuranceApply> findListByDTO(InsuranceApplyQueryDTO model);
    Integer editBaoxiandan(InsuranceApply param);
    String getSignLink(Integer id);
    void dealSignResult(NotifyDataReq data);
}
server/service/src/main/java/com/doumee/service/business/WorktypeService.java
@@ -107,5 +107,5 @@
     */
    long count(Worktype worktype);
    List<String> importBatch(MultipartFile file,Integer id);
    List<String> importBatch(MultipartFile file);
}
server/service/src/main/java/com/doumee/service/business/impl/DispatchUnitServiceImpl.java
@@ -92,7 +92,7 @@
        dispatchUnitMapper.updateById(update);
        if(Constants.equalsInteger(param.getWorktypeStatus(),Constants.ONE)){
            //审核通过,修改状态,产生历史版本
            newVersionData(model,update);
            newVersionData(dispatchUnitMapper.selectById(param.getId()),update);
        }else{
            //更新明细数据为审核失败
            duSolutionMapper.update(null,new UpdateWrapper<DuSolution>().lambda()
@@ -190,7 +190,7 @@
        dispatchUnitMapper.updateById(update);
        if(Constants.equalsInteger(model.getStatus(),Constants.ONE)){
            //审核通过,修改状态,产生历史版本
            newVersionData(model,update);
            newVersionData(dispatchUnitMapper.selectById(param.getId()),update);
        }else{
            //更新明细数据为审核失败
            duSolutionMapper.update(null,new UpdateWrapper<DuSolution>().lambda()
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -23,8 +23,10 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.third.SignService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.jzq.common.bean.sign.NotifyDataReq;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
@@ -46,6 +48,8 @@
    @Autowired
    private InsuranceApplyMapper insuranceApplyMapper;
    @Autowired
    private ApplyChangeMapper applyChangeMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -59,6 +63,8 @@
    @Autowired
    private ApplyLogMapper applyLogMapper;
    @Autowired
    private SignService signService;
    @Autowired
    private MultifileMapper multifileMapper;
@@ -278,6 +284,73 @@
    }
    @Override
    public  String getSignLink(Integer id) {
        if(id == null ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        InsuranceApply model = insuranceApplyMapper.selectById(id);
        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Constants.ApplyLogType applyLogType = null;
        String info = "";
            //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作
        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_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)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业尚未具备在线签章条件,请联系平台管理员确认~");
        }
        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,model.getId())
                .eq(Multifile::getObjType,Constants.MultiFile.BD_APPLY_PDF.getKey())
                .eq(Multifile::getIsdeleted,Constants.ZERO).last("limit 1"));
        if(f == null || StringUtils.isBlank(f.getFileurl())){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取待签章文件失败,请联系平台管理员确认投保单是否正确!");
        }
        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);
        if(StringUtils.isBlank(applyNo) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
        String link = signService.signLink(applyNo,company.getEmail(),company.getCode());
        if(StringUtils.isBlank(link) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
        InsuranceApply update= new InsuranceApply();
        update.setId(model.getId());
        update.setEditor(user.getId());
        update.setEditDate(new Date());
        update.setSignApplyNo(applyNo);
        insuranceApplyMapper.updateById(update);
        return  link;
    }
    @Override
    public   void dealSignResult(NotifyDataReq data){
        if(data.getApplyNo() == null ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        InsuranceApply model = insuranceApplyMapper.selectOne(new QueryWrapper<InsuranceApply>().lambda().eq(InsuranceApply::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
        if(model != null ){
            //-----------------TUDO--------完善签约完成业务------
        }else{
            ApplyChange applyChange = applyChangeMapper.selectOne(new QueryWrapper<ApplyChange>().lambda().eq(ApplyChange::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
            if(applyChange == null){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"系统未找到匹配合同号!");
            }
            //-----------------TUDO-------完善签约完成-------
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer uploadToubaodan(InsuranceApply insuranceApply) {
        if(insuranceApply.getId() == null
server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java
@@ -89,7 +89,7 @@
            BeanUtils.copyProperties(w, newType);
            newType.setInsuranceId(newModel.getId());
            newType.setBaseId(w.getId());
            newType.setDataType(Constants.ONE);
            newType.setDataType(Constants.TWO);
            newType.setVersion(newModel.getVersion());
            w.setSortnum(num++);
            worktypeMapper.insert(newType);
@@ -186,6 +186,7 @@
        newModel.setId(null);
        newModel.setVersion(updateModel.getVersion());
        newModel.setCreateDate(new Date());
        newModel.setName(updateModel.getName());
        newModel.setBaseId(insurance.getId());
        newModel.setDataType(Constants.TWO);
        insuranceMapper.insert(newModel);
@@ -199,8 +200,16 @@
                .lambda()
                .eq(Insurance::getBaseId,insurance.getId())
                .eq(Insurance::getDataType,Constants.TWO)
                .ne(Insurance::getId,newModel.getId())
                .set(Insurance::getDataType,Constants.ONE)
        );
        worktypeMapper.update(null,new UpdateWrapper<Worktype>()
                .lambda()
                .eq(Worktype::getBaseId,insurance.getId())
                .eq(Worktype::getDataType,Constants.TWO)
                .set(Worktype::getDataType,Constants.ONE)
        );
        //处理工作信息,新增最新的,同时产生历史版本
        dealWorkTypeData(updateModel,newModel,insurance.getWorktypeList(),false);
    }
server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
@@ -122,7 +122,7 @@
                ||solutions.getWorktypeIdList().size()==0
                ||Constants.formatIntegerNum(solutions.getMaxAge()) < 0
                ||Constants.formatIntegerNum(solutions.getMinAge()) < 0
                ||Constants.formatIntegerNum(solutions.getPriceCycleUnit()) < 0
//                ||Constants.formatIntegerNum(solutions.getPriceCycleUnit()) < 0
                ||Constants.formatIntegerNum(solutions.getInsureCycle()) < 0
                ||Constants.formatIntegerNum(solutions.getInsureCycleUnit()) < 0
                || solutions.getMinAge() >solutions.getMaxAge()
@@ -170,7 +170,7 @@
        //如果修改,则产生一个新的历史版本 ~
        Solutions newModel = new Solutions();
        BeanUtils.copyProperties(model,newModel);
        BeanUtils.copyProperties( findById(solutions.getId()),newModel);
        newModel.setId(null);
        newModel.setVersion(solutions.getVersion());
        newModel.setCreateDate(new Date());
@@ -262,98 +262,103 @@
    @Override
    public PageData<Solutions> findPage(PageWrap<Solutions> pageWrap) {
        IPage<Solutions> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Solutions> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setDataType(Constants.ZERO);//只选择基表数据
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        MPJLambdaWrapper<Solutions> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(Solutions.class);
        queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
        queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Solutions::getId, pageWrap.getModel().getId());
            queryWrapper.eq(Solutions::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Solutions::getCreator, pageWrap.getModel().getCreator());
            queryWrapper.eq(Solutions::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Solutions::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Solutions::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
            queryWrapper.ge(Solutions::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(Solutions::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Solutions::getEditor, pageWrap.getModel().getEditor());
            queryWrapper.eq(Solutions::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Solutions::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Solutions::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
            queryWrapper.ge(Solutions::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(Solutions::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Solutions::getIsdeleted, pageWrap.getModel().getIsdeleted());
            queryWrapper.eq(Solutions::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().like(Solutions::getName, pageWrap.getModel().getName());
            queryWrapper.like(Solutions::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(Solutions::getRemark, pageWrap.getModel().getRemark());
            queryWrapper.eq(Solutions::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Solutions::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(Solutions::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(Solutions::getSortnum, pageWrap.getModel().getSortnum());
            queryWrapper.eq(Solutions::getSortnum, pageWrap.getModel().getSortnum());
        }
        if (pageWrap.getModel().getInsuranceId() != null) {
            queryWrapper.lambda().eq(Solutions::getInsuranceId, pageWrap.getModel().getInsuranceId());
            queryWrapper.eq(Solutions::getInsuranceId, pageWrap.getModel().getInsuranceId());
        }
        if (pageWrap.getModel().getValidType() != null) {
            queryWrapper.lambda().eq(Solutions::getValidType, pageWrap.getModel().getValidType());
            queryWrapper.eq(Solutions::getValidType, pageWrap.getModel().getValidType());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Solutions::getType, pageWrap.getModel().getType());
            queryWrapper.eq(Solutions::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getMinAge() != null) {
            queryWrapper.lambda().eq(Solutions::getMinAge, pageWrap.getModel().getMinAge());
            queryWrapper.eq(Solutions::getMinAge, pageWrap.getModel().getMinAge());
        }
        if (pageWrap.getModel().getMaxAge() != null) {
            queryWrapper.lambda().eq(Solutions::getMaxAge, pageWrap.getModel().getMaxAge());
            queryWrapper.eq(Solutions::getMaxAge, pageWrap.getModel().getMaxAge());
        }
        if (pageWrap.getModel().getPrice() != null) {
            queryWrapper.lambda().eq(Solutions::getPrice, pageWrap.getModel().getPrice());
            queryWrapper.eq(Solutions::getPrice, pageWrap.getModel().getPrice());
        }
        if (pageWrap.getModel().getTimeUnit() != null) {
            queryWrapper.lambda().eq(Solutions::getTimeUnit, pageWrap.getModel().getTimeUnit());
            queryWrapper.eq(Solutions::getTimeUnit, pageWrap.getModel().getTimeUnit());
        }
        if (pageWrap.getModel().getInsureCycle() != null) {
            queryWrapper.lambda().eq(Solutions::getInsureCycle, pageWrap.getModel().getInsureCycle());
            queryWrapper.eq(Solutions::getInsureCycle, pageWrap.getModel().getInsureCycle());
        }
        if (pageWrap.getModel().getInsureCycleUnit() != null) {
            queryWrapper.lambda().eq(Solutions::getInsureCycleUnit, pageWrap.getModel().getInsureCycleUnit());
            queryWrapper.eq(Solutions::getInsureCycleUnit, pageWrap.getModel().getInsureCycleUnit());
        }
        if (pageWrap.getModel().getPriceCycleUnit() != null) {
            queryWrapper.lambda().eq(Solutions::getPriceCycleUnit, pageWrap.getModel().getPriceCycleUnit());
            queryWrapper.eq(Solutions::getPriceCycleUnit, pageWrap.getModel().getPriceCycleUnit());
        }
        if (pageWrap.getModel().getSingleWorktype() != null) {
            queryWrapper.lambda().eq(Solutions::getSingleWorktype, pageWrap.getModel().getSingleWorktype());
            queryWrapper.eq(Solutions::getSingleWorktype, pageWrap.getModel().getSingleWorktype());
        }
        if (pageWrap.getModel().getEmail() != null) {
            queryWrapper.lambda().eq(Solutions::getEmail, pageWrap.getModel().getEmail());
            queryWrapper.eq(Solutions::getEmail, pageWrap.getModel().getEmail());
        }
        if (pageWrap.getModel().getSpecialAgreement() != null) {
            queryWrapper.lambda().eq(Solutions::getSpecialAgreement, pageWrap.getModel().getSpecialAgreement());
            queryWrapper.eq(Solutions::getSpecialAgreement, pageWrap.getModel().getSpecialAgreement());
        }
        if (pageWrap.getModel().getSpecialInfo() != null) {
            queryWrapper.lambda().eq(Solutions::getSpecialInfo, pageWrap.getModel().getSpecialInfo());
            queryWrapper.eq(Solutions::getSpecialInfo, pageWrap.getModel().getSpecialInfo());
        }
        if (pageWrap.getModel().getOrtherInfo() != null) {
            queryWrapper.lambda().eq(Solutions::getOrtherInfo, pageWrap.getModel().getOrtherInfo());
            queryWrapper.eq(Solutions::getOrtherInfo, pageWrap.getModel().getOrtherInfo());
        }
        if (pageWrap.getModel().getSolutionBaseId() != null) {
            queryWrapper.lambda().eq(Solutions::getSolutionBaseId, pageWrap.getModel().getSolutionBaseId());
            queryWrapper.eq(Solutions::getSolutionBaseId, pageWrap.getModel().getSolutionBaseId());
        }
        if (pageWrap.getModel().getVersion() != null) {
            queryWrapper.lambda().eq(Solutions::getVersion, pageWrap.getModel().getVersion());
            queryWrapper.eq(Solutions::getVersion, pageWrap.getModel().getVersion());
        }
        if (pageWrap.getModel().getDataType() != null) {
            queryWrapper.lambda().eq(Solutions::getDataType, pageWrap.getModel().getDataType());
            queryWrapper.eq(Solutions::getDataType, pageWrap.getModel().getDataType());
        }
        if (pageWrap.getModel().getBaseId() != null) {
            queryWrapper.lambda().eq(Solutions::getBaseId, pageWrap.getModel().getBaseId());
            queryWrapper.eq(Solutions::getBaseId, pageWrap.getModel().getBaseId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -362,7 +367,8 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(solutionsMapper.selectPage(page, queryWrapper));
        PageData<Solutions> pageData = PageData.from(solutionsJoinMapper.selectJoinPage(page,Solutions.class, queryWrapper));
        return pageData;
    }
    @Override
    public PageData<Solutions> findPageCom(PageWrap<Solutions> pageWrap) {
server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java
@@ -175,15 +175,15 @@
        return worktypeMapper.selectCount(wrapper);
    }
    @Override
    public List<String> importBatch(MultipartFile file,Integer id){
        List<Worktype> list = new ArrayList<>();
    public List<String> importBatch(MultipartFile file ){
        /*  List<Worktype> list = new ArrayList<>();
        if(id!=null){
            Worktype param = new Worktype();
            param.setIsdeleted(Constants.ZERO);
            param.setDataType(Constants.ZERO);
            param.setInsuranceId(id);
            list = findList(param);
        }
        }*/
        ExcelImporter ie = null;
        List<WorktypeImport> dataList =null;
        try {
@@ -197,9 +197,9 @@
        }
         List<String> result = new ArrayList<>();
        for(WorktypeImport model : dataList){
            if(StringUtils.isNotBlank(model.getName()) && !isNewWorkTypeByName(model.getName(),list)){
//            if(StringUtils.isNotBlank(model.getName()) && !isNewWorkTypeByName(model.getName(),list)){
                result.add(model.getName());
            }
//            }
        }
        return result;
    }
server/service/src/main/java/com/doumee/service/business/third/SignService.java
@@ -255,7 +255,7 @@
     * @param email
     * @param postionJson
     */
    public String applySign(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId){
    public String applySign(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId,String notifyUrl){
      try {
          String url=SERVICE_URL+"/v2/sign/applySign";
          Map<String, Object>  params=bodyParams;
@@ -267,6 +267,7 @@
          params.put("positionType",1); //指定通过表单域方式设置签字位置
          params.put("fileType",1);
          params.put("needQifengSign",1);
          params.put("notifyUrl",notifyUrl);
          JSONArray signatories=new JSONArray();
          SignatoryReq sReq=new SignatoryReq();
          sReq.setFullName(fullname); //企业姓名