k94314517
2024-03-21 c2cdc5a3def0fb52583cbb28788310afe679e4ee
git ch
已添加4个文件
已修改12个文件
544 ■■■■■ 文件已修改
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/system/SystemController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/UnionApplyBXDDDetailTO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/UnionApplyBXDDTO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/join/UnionApplyJoinMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/UnionApplyService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | 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/InsuranceApplyServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java 338 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -116,7 +116,7 @@
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:applychange:query")
    public ApiResponse findById(@PathVariable Integer id) {
    public ApiResponse<ApplyChange> findById(@PathVariable Integer id) {
        return ApiResponse.success(applyChangeService.findDetail(id));
    }
server/company/src/main/java/com/doumee/api/system/SystemController.java
@@ -68,6 +68,7 @@
        subject.logout();
        return ApiResponse.success(null);
    }
    @Trace(withRequestParameters = false)
    @ApiOperation("修改当前用户密码")
    @PostMapping("/updatePwd")
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -439,6 +439,14 @@
        CA_APPLY_JIAJIAN_SIGN(13, "加减保申请签章文件", "加减保申请签章文件"),
        CA_APPLY_CHANGEUNIT_SIGN(14, "换厂申请签章文件", "换厂申请签章文件"),
        HBD_BD_APPLY_PDF(15, "合并单-保单申请表PDF ", "合并单-保单申请表PDF "),
        HBD_BD_SIGNED_PDF(16, "合并单-签署后保单申请表PDF", "合并单-签署后保单申请表PDF"),
        ;
        // æˆå‘˜å˜é‡
@@ -847,7 +855,11 @@
    }
    public  enum UnionApplyStatus {
        UPLOAD(1, "待上传投保单","",0),
        MERGE(1, "待上传保单","",0),
        WAIT_SIGNATURE(2, "待签署","",0),
        UPLOAD_INSURANCE_POLICY(3, "待上传保单","",0),
        FINISH(4, "保障中","",0),
        CLOSE(5, "关闭","",0),
        ;
        // æˆå‘˜å˜é‡
        private String name;
server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java
@@ -76,4 +76,8 @@
    @ApiModelProperty(value = "状态 0待审核 1待出单 2保障中  3已过期 4已撤回 5退回申请中 6已关闭", example = "1")
    private Integer statusCollect;
    @ApiModelProperty(value = "生效中 0=是")
    private Integer isEffective;
}
server/service/src/main/java/com/doumee/dao/business/dto/UnionApplyBXDDDetailTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.doumee.dao.business.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/3/20 16:52
 */
@Data
public class UnionApplyBXDDDetailTO {
    @ApiModelProperty(value = "投保单主键 insurance_apply")
    private Integer applyId;
    @ApiModelProperty(value = "服务费 æ¯äºº")
    private BigDecimal serverMoney;
    @ApiModelProperty(value = "保单文件地址")
    private String fileUrl;
    @ApiModelProperty(value = "文件名称")
    private String fileName;
}
server/service/src/main/java/com/doumee/dao/business/dto/UnionApplyBXDDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.doumee.dao.business.dto;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/3/20 16:52
 */
@Data
public class UnionApplyBXDDTO {
    @ApiModelProperty(value = "合并单主键")
    private Integer id;
    @ApiModelProperty(value = "保单号")
    private String code;
    @ApiModelProperty(value = "保险生效止期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endTime;
    @ApiModelProperty(value = "保险生效起期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date startTime;
    @ApiModelProperty(value = "保单文件地址")
    private String fileUrl;
    @ApiModelProperty(value = "保单文件名称")
    private String fileName;
    @ApiModelProperty(value = "合并单明细保单信息")
    private List<UnionApplyBXDDDetailTO> unionApplyBXDDDetailTOList;
}
server/service/src/main/java/com/doumee/dao/business/dto/UploadMultifileDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.doumee.dao.business.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/3/19 16:52
 */
@Data
public class UploadMultifileDTO {
    @ApiModelProperty(value = "业务主键")
    private Integer businessId;
    @ApiModelProperty(value = "文件路径")
    private String filePath;
    @ApiModelProperty(value = "文件名称")
    private String fileName;
}
server/service/src/main/java/com/doumee/dao/business/join/UnionApplyJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business.join;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.UnionApply;
import com.github.yulichang.base.mapper.MPJJoinMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2024/03/12 11:34
 */
public interface UnionApplyJoinMapper extends MPJJoinMapper<UnionApply> {
}
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -151,6 +151,12 @@
    @TableField(exist = false)
    private String createDateE;
    @ApiModelProperty(value = "批单生效起期时间")
    private String applyStartS;
    @ApiModelProperty(value = "批单止效时间")
    private String applyStartE;
    @ApiModelProperty(value = "保险方案主键")
    @TableField(exist = false)
    private Integer solutionsId;
server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
@@ -72,8 +72,10 @@
    @ApiModelProperty(value = "实际保险生效起期")
    @ExcelColumn(name="保险生效起期",index =8,width = 12,dateFormat="yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    @ApiModelProperty(value = "合并单编码(关联union_apply)", example = "1")
    private Integer unionApplyId;
    @ApiModelProperty(value = "身份证号码")
    @ExcelColumn(name="身份证号码",index = 5,width = 12)
    private String idcardNo;
@@ -89,6 +91,10 @@
    @ApiModelProperty(value = "费用", example = "1")
    @ExcelColumn(name="费用",index = 10,width = 5)
    private BigDecimal fee;
    @ApiModelProperty(value = "单价", example = "1")
    private BigDecimal price;
    @ApiModelProperty(value = "性别 0=男;1=女", example = "1")
    @ExcelColumn(name="性别",index =4,valueMapping = "0=男;1=女;",width = 3)
@@ -119,6 +125,10 @@
    @TableField(exist = false)
    private String validCode;
    @ApiModelProperty(value = "保障状态:0=保障中;1=不在保")
    @TableField(exist = false)
    private Integer applyStatus;
    @ApiModelProperty(value = "派遣单位名称")
    @TableField(exist = false)
    @ExcelColumn(name="派遣单位",index = 6,width = 10)
server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
@@ -103,4 +103,8 @@
    @ExcelColumn(name="在线签章合同号")
    private String signApplyNo;
    @ApiModelProperty(value = "方案编码(关联solutions)", example = "1")
    @ExcelColumn(name="方案编码(关联solutions)")
    private Integer solutionId;
}
server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
@@ -3,6 +3,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.SaveUnionApplyDTO;
import com.doumee.dao.business.dto.UnionApplyBXDDTO;
import com.doumee.dao.business.dto.UploadMultifileDTO;
import com.doumee.dao.business.model.UnionApply;
import java.util.List;
@@ -101,4 +103,30 @@
     * @param saveUnionApplyDTO
     */
    void merge(SaveUnionApplyDTO saveUnionApplyDTO);
    /**
     * å–消合并单
     * @param id
     */
    void cancelMerge(Integer id);
    /**
     * ä¸Šä¼ æŠ•保单
     * @param uploadMultifileDTO
     */
    void uploadToubaodan(UploadMultifileDTO uploadMultifileDTO);
    /**
     * åˆå¹¶å• ä¿å•签署
     * @param id
     * @return
     */
    String getSignLink(Integer id);
    /**
     * ä¸Šä¼ ä¿é™©å•
     * @param unionApplyBXDDTO
     */
    void uploadBXD(UnionApplyBXDDTO unionApplyBXDDTO);
}
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -1472,7 +1472,9 @@
                .eq(!Objects.isNull(model.getApplyId()),ApplyChange::getApplyId,model.getApplyId())
                .eq(!Objects.isNull(model.getBaseSolutionsId()),Solutions::getBaseId,model.getBaseSolutionsId())
                .ge(StringUtils.isNotBlank(model.getCreateDateS()),ApplyChange::getCreateDate, model.getCreateDateS()+" 00:00:00" )
                .le(StringUtils.isNotBlank(model.getCreateDateE()),ApplyChange::getCreateDate, model.getCreateDateE()+" 23:59:59" );
                .le(StringUtils.isNotBlank(model.getCreateDateE()),ApplyChange::getCreateDate, model.getCreateDateE()+" 23:59:59" )
                .ge(StringUtils.isNotBlank(model.getApplyStartS()),ApplyChange::getApplyStartTime, model.getApplyStartS()+" 00:00:00" )
                .le(StringUtils.isNotBlank(model.getApplyStartE()),ApplyChange::getApplyStartTime, model.getApplyStartE()+" 23:59:59" );
        LoginUserInfo loginUserInfo =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        //企业人员查看本企业数据
        if(loginUserInfo.getType().equals(Constants.ONE)){
server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
@@ -201,6 +201,7 @@
        queryWrapper.selectAs(Member::getIdcardNo,ApplyDetail::getIdcardNo);
        queryWrapper.selectAs(Member::getName,ApplyDetail::getMemberName);
        queryWrapper.selectAs(Solutions::getName,ApplyDetail::getSolutionName);
        queryWrapper.selectAs(InsuranceApply::getStatus,ApplyDetail::getSolutionName);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyDetail::getWorktypeId);
        queryWrapper.leftJoin(Member.class,Member::getId,ApplyDetail::getMemberId);
@@ -242,6 +243,12 @@
            int num = 1;
            for (ApplyDetail d : pageData.getRecords()){
                d.setSortnum(num++);
                if(d.getEndTime().compareTo(new Date())<0){
                    d.setApplyStatus(Constants.ONE);
                }else{
                    d.setApplyStatus(Constants.ZERO);
                }
            }
        }
        return pageData;
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -251,8 +251,8 @@
        }
        return  1;
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public     Integer editBaoxiandan(InsuranceApply param) {
@@ -1290,8 +1290,9 @@
        queryWrapper.selectAs(Company::getName,InsuranceApply::getCompanyName);
        queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
        queryWrapper.selectAs(Solutions::getType,InsuranceApply::getSolutionType);
        queryWrapper.select(" ( select sum(td.fee) from taxes ts inner join tax_detial td on ts.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id ) as taxesMoney ");
        queryWrapper.select(" ( select td.CREATE_DATE from taxes ts inner join tax_detial td on ts.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id order by td.CREATE_DATE desc limit 1 ) as taxesLast ");
        queryWrapper.select(" ( select max(ac.APPLY_START_TIME) from apply_change ac  where ac.apply_id = t.id and ac.status = 2 ) as lastChangeDate");
        queryWrapper.select(" ( select sum(td.fee) from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id ) as taxesMoney ");
        queryWrapper.select(" ( select td.CREATE_DATE from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id order by td.CREATE_DATE desc limit 1 ) as taxesLast ");
        queryWrapper.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
        queryWrapper.leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId);
        queryWrapper.eq(InsuranceApply::getIsdeleted,Constants.ZERO);
@@ -1341,6 +1342,12 @@
        if (CollectionUtils.isNotEmpty(model.getIds())) {
            queryWrapper.in(InsuranceApply::getId, model.getIds());
        }
        if (CollectionUtils.isNotEmpty(model.getIds())) {
            queryWrapper.in(InsuranceApply::getId, model.getIds());
        }
        if (model.getIsEffective() != null && model.getIsEffective().equals(Constants.ZERO)) {
            queryWrapper.ge(InsuranceApply::getEndTime,DateUtil.DateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
        }
        List<InsuranceApply> list = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class, queryWrapper);
        return list;
    }
server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
@@ -1,35 +1,48 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.SolutionsMapper;
import com.doumee.dao.business.UnionApplyMapper;
import com.doumee.dao.business.dto.SaveUnionApplyDTO;
import com.doumee.dao.business.dto.UnionApplyBXDDDetailTO;
import com.doumee.dao.business.dto.UnionApplyBXDDTO;
import com.doumee.dao.business.dto.UploadMultifileDTO;
import com.doumee.dao.business.join.ApplyDetailJoinMapper;
import com.doumee.dao.business.join.InsuranceApplyJoinMapper;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.model.Solutions;
import com.doumee.dao.business.model.UnionApply;
import com.doumee.dao.business.join.UnionApplyJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.UnionApplyService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * åˆå¹¶æŠ•保单信息表Service实现
@@ -43,7 +56,28 @@
    private UnionApplyMapper unionApplyMapper;
    @Autowired
    private UnionApplyJoinMapper unionApplyJoinMapper;
    @Autowired
    private SolutionsMapper solutionsMapper;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private InsuranceApplyJoinMapper insuranceApplyJoinMapper;
    @Autowired
    private ApplyDetailJoinMapper applyDetailJoinMapper;
    @Autowired
    private MultifileMapper multifileMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private SignService signService;
    @Override
    public Integer create(UnionApply unionApply) {
@@ -222,10 +256,15 @@
        unionApply.setStartTime(saveUnionApplyDTO.getStartDate());
        unionApply.setEndTime(saveUnionApplyDTO.getEndDate());
        unionApply.setCheckDate(new Date());
        unionApply.setStatus(Constants.UnionApplyStatus.UPLOAD.getKey());
        unionApply.setStatus(Constants.UnionApplyStatus.MERGE.getKey());
        unionApply.setCheckUserId(user.getId());
        unionApply.setFee(insuranceApplyList.stream().map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        unionApply.setCurrentFee(BigDecimal.ZERO);
        Integer maxDays = DateUtil.calculateBetween(saveUnionApplyDTO.getStartDate(),saveUnionApplyDTO.getEndDate(),0);
        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda().select(ApplyDetail::getPrice)
                .in(ApplyDetail::getApplyId,saveUnionApplyDTO.getApplyIds()));
        //unionApply.setFee(insuranceApplyList.stream().map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        unionApply.setFee(applyDetailList.stream().map(i->i.getPrice().multiply(new BigDecimal(maxDays))).reduce(BigDecimal.ZERO,BigDecimal::add));
        unionApplyMapper.insert(unionApply);
        insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
@@ -234,16 +273,303 @@
                .set(InsuranceApply::getCheckUserId,user.getId())
                .in(InsuranceApply::getId,saveUnionApplyDTO.getApplyIds()));
        applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
                .set(ApplyDetail::getUnionApplyId,unionApply.getId())
                .in(ApplyDetail::getApplyId,saveUnionApplyDTO.getApplyIds()));
    }
    /**
     * å–消保单合并
     * @param id
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void cancelMerge(Integer id){
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user.getType().equals(Constants.TWO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非商户用户,无法进行该操作");
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非商户用户,无法进行该操作!");
        }
        UnionApply unionApply = unionApplyMapper.selectById(id);
        if(Objects.isNull(unionApply)||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!unionApply.getCompanyId().equals(user.getCompanyId())){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起非您的合并单,您无法进行操作!");
        }
        if(unionApply.getStatus().equals(Constants.UnionApplyStatus.FINISH.getKey())){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起,合并单业务已完结,您无法进行该操作!");
        }
        //合并单状态处于待投保
        if(unionApply.getStatus().equals(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey())
        || unionApply.getStatus().equals(Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey())){
            //TODO åˆ é™¤ä¼ä¸šæŠ•保单的 ç­¾ç½²æ•°æ®
    }
        insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
                .set(InsuranceApply::getUnionApplyId,null)
                .set(InsuranceApply::getCheckDate,new Date())
                .set(InsuranceApply::getCheckUserId,user.getId())
                .eq(InsuranceApply::getUnionApplyId,unionApply.getId()));
        applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
                .set(ApplyDetail::getUnionApplyId,null)
                .eq(ApplyDetail::getUnionApplyId,unionApply.getId()));
        unionApplyMapper.update(null,new UpdateWrapper<UnionApply>().lambda()
                .set(UnionApply::getCheckDate,new Date())
                .set(UnionApply::getCheckUserId,user.getId())
                .set(UnionApply::getStatus,Constants.UnionApplyStatus.CLOSE.getKey())
                .eq(UnionApply::getId,unionApply.getId())
        );
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void uploadToubaodan(UploadMultifileDTO uploadMultifileDTO){
        if(uploadMultifileDTO.getBusinessId() == null
                ||StringUtils.isBlank( uploadMultifileDTO.getFilePath())
                ||StringUtils.isBlank( uploadMultifileDTO.getFileName())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        UnionApply unionApply = unionApplyMapper.selectById(uploadMultifileDTO.getBusinessId());
        if(Objects.isNull(unionApply)||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!unionApply.getCompanyId().equals(user.getCompanyId())){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起非您的合并单,您无法进行操作!");
        }
        if(unionApply.getStatus().equals(Constants.UnionApplyStatus.FINISH.getKey())){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起,合并单业务已完结,您无法进行该操作!");
        }
        if(unionApply.getStatus().equals(Constants.UnionApplyStatus.MERGE.getKey())){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"对不起,合并单业务已流转,您无法进行该操作!");
        }
        unionApply.setCheckDate(new Date());
        unionApply.setCheckUserId(user.getId());
        unionApply.setStatus(Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey());
        unionApply.setEditor(user.getId());
        unionApply.setEditDate(new Date());
        unionApplyMapper.updateById(unionApply);
        Multifile multifile = new Multifile();
        multifile.setIsdeleted(Constants.ZERO);
        multifile.setCreator(user.getId());
        multifile.setCreateDate(new Date());
        multifile.setObjId(uploadMultifileDTO.getBusinessId());
        multifile.setCreateDate(new Date());
        multifile.setObjType(Constants.MultiFile.HBD_BD_SIGNED_PDF.getKey());
        multifile.setType(Constants.TWO);
        multifile.setFileurl(uploadMultifileDTO.getFilePath());
        multifile.setName(uploadMultifileDTO.getFileName());
        multifileMapper.insert(multifile);
    }
    /**
     * åˆå¹¶å• - æŠ•保申请签署
     * @param id
     * @return
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public  String getSignLink(Integer id) {
        if(id == null ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        UnionApply unionApply = unionApplyJoinMapper.selectById(id);
        if(unionApply == null ||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Solutions solutions = solutionsMapper.selectById(unionApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        if(!Constants.equalsInteger(unionApply.getStatus(),Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey())){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该合并单状态已流转,当前不支持该操作~");
        }
        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,unionApply.getId())
                .eq(Multifile::getObjType,Constants.MultiFile.HBD_BD_SIGNED_PDF.getKey())
                .eq(Multifile::getIsdeleted,Constants.ZERO)
                .last("limit 1"));
        if(f == null || StringUtils.isBlank(f.getFileurl())){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取待签章文件失败,请联系确认合并保单是否正确!");
        }
        Company company =  companyMapper.selectById(unionApply.getCompanyId());
        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.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}", unionApply.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.getName(),company.getCode());
        if(StringUtils.isBlank(link) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
        UnionApply update= new UnionApply();
        update.setId(unionApply.getId());
        update.setEditor(user.getId());
        update.setEditDate(new Date());
        update.setSignApplyNo(applyNo);
        unionApplyJoinMapper.updateById(update);
        return  link;
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void uploadBXD(UnionApplyBXDDTO unionApplyBXDDTO){
        if(Objects.isNull(unionApplyBXDDTO)
            || Objects.isNull(unionApplyBXDDTO.getId())
            || Objects.isNull(unionApplyBXDDTO.getStartTime())
            || Objects.isNull(unionApplyBXDDTO.getEndTime())
            || StringUtils.isBlank(unionApplyBXDDTO.getCode())
            || Objects.isNull(unionApplyBXDDTO.getUnionApplyBXDDDetailTOList())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        UnionApply unionApply = unionApplyJoinMapper.selectById(unionApplyBXDDTO.getId());
        if(unionApply == null ||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(unionApply.getStatus().equals(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey())){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该合并单状态已流转,当前不支持该操作~");
        }
        //加价参数
        List<UnionApplyBXDDDetailTO> unionApplyBXDDDetailTOList = unionApplyBXDDTO.getUnionApplyBXDDDetailTOList();
        //所有投保申请保单明细行
        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda().select(ApplyDetail::getPrice)
                .in(ApplyDetail::getUnionApplyId,unionApply.getId()));
        //总天数
        Integer maxDays = DateUtil.calculateBetween(unionApplyBXDDTO.getStartTime(),unionApplyBXDDTO.getEndTime(),0);
        //实际已经产生费用的天数
        Integer useDays = 0 ;
        if(unionApplyBXDDTO.getStartTime().compareTo(new Date()) <= 0 && unionApplyBXDDTO.getEndTime().compareTo(new Date()) >= 0 ){
            //当前日期在开始结束日期之内
            useDays =  DateUtil.calculateBetween(unionApplyBXDDTO.getStartTime(),new Date(),0);
        }else if(unionApplyBXDDTO.getStartTime().compareTo(new Date()) <= 0&&unionApplyBXDDTO.getEndTime().compareTo(new Date()) <= 0){
            //当前日期在结束日期之后
            useDays =  -1;
        }
        BigDecimal sumFee = BigDecimal.ZERO;
        BigDecimal sumCurrFee = BigDecimal.ZERO;
        for (UnionApplyBXDDDetailTO unionApplyBXDDDetailTO:unionApplyBXDDDetailTOList) {
            InsuranceApply insuranceApply = insuranceApplyJoinMapper.selectById(unionApplyBXDDDetailTO.getApplyId());
            if(Objects.isNull(insuranceApply)||!Constants.equalsInteger(insuranceApply.getIsdeleted(),Constants.ZERO)){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            if(!insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey())){
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该投保单状态已流转,当前不支持该操作~");
            }
            List<ApplyDetail> applyDetails = applyDetailList.stream().filter(m->m.getApplyId().equals(unionApplyBXDDDetailTO.getApplyId())).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(applyDetails)){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            //提交后的新价格 åŠ ä¸ŠæœåŠ¡è´¹
            BigDecimal price = applyDetails.get(Constants.ZERO).getPrice().add(unionApplyBXDDDetailTO.getServerMoney());
            //实际已产生费用
            BigDecimal currentFee = BigDecimal.ZERO;
            if(useDays==-1){
                currentFee =  new BigDecimal(maxDays).multiply(price);
            }else if(useDays>0){
                currentFee =  new BigDecimal(useDays).multiply(price);
            }
            //更新投保申请单
            insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
                    .set(InsuranceApply::getFee,
                            new BigDecimal(applyDetails.size())
                            .multiply(price)
                    )
                    .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                    .set(InsuranceApply::getFee,price.multiply(new BigDecimal(applyDetails.size())).multiply(new BigDecimal(maxDays)))
                    .set(InsuranceApply::getCurrentFee,currentFee.multiply(new BigDecimal(applyDetails.size())))
                    .set(InsuranceApply::getStartTime,unionApplyBXDDTO.getStartTime())
                    .set(InsuranceApply::getEndTime,unionApplyBXDDTO.getEndTime())
                    .set(InsuranceApply::getEditDate,new Date())
                    .set(InsuranceApply::getEditor,user.getId())
                    .eq(InsuranceApply::getId,insuranceApply.getId()));
            //更新投保单明细金额
            applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
                    .set(ApplyDetail::getPrice,price)
                    .set(ApplyDetail::getFee, price.multiply(new BigDecimal(maxDays)))
                    .set(ApplyDetail::getCurrentFee,currentFee)
                    .set(ApplyDetail::getEditDate,new Date())
                    .set(ApplyDetail::getEditor,user.getId())
                    .set(ApplyDetail::getStartTime,unionApplyBXDDTO.getStartTime())
                    .set(ApplyDetail::getEndTime,unionApplyBXDDTO.getEndTime())
                    .in(ApplyDetail::getId,applyDetails.stream().map(m->m.getId()).collect(Collectors.toList()))
            );
            //上传保单信息
            if(StringUtils.isNotBlank(unionApplyBXDDDetailTO.getFileUrl())){
                Multifile multifile = new Multifile();
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setCreator(user.getId());
                multifile.setCreateDate(new Date());
                multifile.setObjId(insuranceApply.getId());
                multifile.setObjType(Constants.MultiFile.BD_APPLY_PDF.getKey());
                multifile.setType(Constants.TWO);
                multifile.setFileurl(unionApplyBXDDDetailTO.getFileUrl());
                multifile.setName(unionApplyBXDDDetailTO.getFileName());
                multifileMapper.insert(multifile);
            }
            sumFee = sumFee.add(price.multiply(new BigDecimal(applyDetails.size())).multiply(new BigDecimal(maxDays)));
            sumCurrFee = sumCurrFee.add(currentFee.multiply(new BigDecimal(applyDetails.size())));
        }
        unionApplyMapper.update(null,new UpdateWrapper<UnionApply>()
                .lambda()
                .set(UnionApply::getStatus,Constants.UnionApplyStatus.FINISH)
                .set(UnionApply::getEditDate,new Date())
                .set(UnionApply::getEditor,user.getId())
                .set(UnionApply::getStartTime,unionApplyBXDDTO.getStartTime())
                .set(UnionApply::getEndTime,unionApplyBXDDTO.getEndTime())
                .set(UnionApply::getFee,sumFee)
                .set(UnionApply::getCurrentFee,sumCurrFee)
                .eq(UnionApply::getId,unionApply.getId())
        );
        //合并单 æ€»ä¿å•
        if(StringUtils.isNotBlank(unionApplyBXDDTO.getFileUrl())){
            Multifile multifile = new Multifile();
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setCreator(user.getId());
            multifile.setCreateDate(new Date());
            multifile.setObjId(unionApply.getId());
            multifile.setObjType(Constants.MultiFile.HBD_BD_APPLY_PDF.getKey());
            multifile.setType(Constants.TWO);
            multifile.setFileurl(unionApplyBXDDTO.getFileUrl());
            multifile.setName(unionApplyBXDDTO.getFileName());
            multifileMapper.insert(multifile);
        }
    }
}