From a9ca0823ab8f33ca85abebcf6ec4a8da235adb49 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 30 一月 2024 14:36:49 +0800
Subject: [PATCH] 开发业务接口

---
 server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java | 1246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 1,185 insertions(+), 61 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
index 4f02e2b..072eaa4 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -1,37 +1,836 @@
 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.InsuranceApplyMapper;
-import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.core.utils.aliyun.ALiYunUtil;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.dto.CountCyclePriceDTO;
+import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
+import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
+import com.doumee.dao.business.join.ApplyDetailJoinMapper;
+import com.doumee.dao.business.join.ApplyLogJoinMapper;
+import com.doumee.dao.business.join.InsuranceApplyJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.business.vo.CountCyclePriceVO;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.InsuranceApplyService;
 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.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;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 鎶曚繚鐢宠淇℃伅琛⊿ervice瀹炵幇
  * @author 姹熻箘韫�
- * @date 2024/01/15 15:07
+ * @date 2024/01/16 10:03
  */
 @Service
 public class InsuranceApplyServiceImpl implements InsuranceApplyService {
+    @Value("${debug_model}")
+    private boolean debugModel;
 
     @Autowired
     private InsuranceApplyMapper insuranceApplyMapper;
+    @Autowired
+    private ApplyChangeMapper applyChangeMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private InsuranceApplyJoinMapper insuranceApplyJoinMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private ApplyDetailMapper applyDetailMapper;
+    @Autowired
+    private ApplyDetailJoinMapper applyDetailJoinMapper;
+
+    @Autowired
+    private ApplyLogMapper applyLogMapper;
+    @Autowired
+    private SignService signService;
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private ApplyLogJoinMapper applyLogJoinMapper;
+
+    @Autowired
+    private SolutionsMapper solutionsMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
+    private DuSolutionMapper duSolutionMapper;
+    @Autowired
+    private DuWorktypeMapper duWorktypeMapper;
 
     @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer back(InsuranceApply insuranceApply) {
+        if(insuranceApply.getId() == null ||StringUtils.isBlank(insuranceApply.getCheckInfo())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        InsuranceApply model = insuranceApplyMapper.selectById(insuranceApply.getId());
+
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setStatus(Constants.InsuranceApplyStatus.FAIL_RETURN.getKey());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(insuranceApply.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        insuranceApplyMapper.updateById(update);
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.PLATFORM_RETURN;
+        String info =applyLogType.getInfo();
+        info = info.replace("${param}", update.getCheckInfo());
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer uploadBaoxiandan(InsuranceApply insuranceApply) {
+        if(insuranceApply.getId() == null
+                || insuranceApply.getCode() == null
+                || insuranceApply.getStartTime() == null
+                || insuranceApply.getBaoxiandanFile() == null
+                ||StringUtils.isBlank( insuranceApply.getBaoxiandanFile() .getFileurl())
+                ||StringUtils.isBlank( insuranceApply.getBaoxiandanFile() .getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        InsuranceApply model = insuranceApplyMapper.selectById(insuranceApply.getId());
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.SIGNATURE.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+        if(model.getApplyEndTime()== null || model.getStartTime().getTime()>model.getApplyEndTime().getTime() ){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风敓鏁堝懆鏈熸椂闂翠笉绗﹀悎瑕佹眰锛岃纭鍚庝慨鏀归噸璇晘");
+        }
+        //璁$畻瀹為檯鎴鏃堕棿
+        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());
+        update.setEditor(user.getId());
+        update.setStatus(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(insuranceApply.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        update.setCode(insuranceApply.getCode());
+        update.setEndTime(actEndTime);
+        update.setStartTime(insuranceApply.getStartTime());
+        insuranceApplyMapper.updateById(update);
+
+        insuranceApply.getBaoxiandanFile().setIsdeleted(Constants.ZERO);
+        insuranceApply.getBaoxiandanFile().setCreator(user.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);
+        multifileMapper.insert(insuranceApply.getBaoxiandanFile());
+        update.setBaoxiandanFile(insuranceApply.getBaoxiandanFile());
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.UPLOAD_INSURANCE;
+        String info = "";
+        if(model.getApplyStartTime()!=null && model.getApplyStartTime().getTime()/1000!= insuranceApply.getStartTime().getTime()/1000){
+            info =applyLogType.getInfo();
+            info = info.replace("${param1}",DateUtil.getPlusTime2(model.getApplyEndTime()));
+            info = info.replace("${param2}",DateUtil.getPlusTime2(insuranceApply.getStartTime()));
+        }
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
+
+    }
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public     Integer editBaoxiandan(InsuranceApply param) {
+        if(param.getId() == null
+                || param.getCode() == null
+                || param.getBaoxiandanFile() == null
+                || param.getCheckInfo() == null
+                ||StringUtils.isBlank( param.getBaoxiandanFile().getFileurl())
+                ||StringUtils.isBlank( param.getBaoxiandanFile() .getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        InsuranceApply model = insuranceApplyMapper.selectById(param.getId());
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇峰綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(param.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        update.setCode(param.getCode());
+        insuranceApplyMapper.updateById(update);
+        //鍒犻櫎鍘熸湁鐨勪繚鍗曚俊鎭�
+        multifileMapper.delete(new UpdateWrapper<Multifile>().lambda()
+                .set(Multifile::getIsdeleted,Constants.ZERO)
+                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                .eq(Multifile::getObjId,update.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.BD_DONE_PDF.getKey())
+        );
+        param.getBaoxiandanFile().setIsdeleted(Constants.ZERO);
+        param.getBaoxiandanFile().setObjId(update.getId());
+        param.getBaoxiandanFile().setCreator(user.getId());
+        param.getBaoxiandanFile().setCreateDate(update.getEditDate());
+        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());
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+
+        return  1;
+
+    }
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer dealBackApply(InsuranceApply insuranceApply) {
+        if(insuranceApply.getId() == null ||StringUtils.isBlank(insuranceApply.getCheckInfo())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        InsuranceApply model = insuranceApplyMapper.selectById(insuranceApply.getId());
+
+        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 = "";
+        InsuranceApply update = new InsuranceApply();
+        if(insuranceApply.getDealBackApply() ==1){
+            //濡傛灉鏄┏鍥�,鍙兘鍙┏鍥炲凡绛剧珷鐘舵�佷笅鐨勯��鍥炵敵璇风姸鎬佽繘琛屾搷浣�
+            if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE.getKey())){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+            applyLogType = Constants.ApplyLogType.PLATFORM_UN_AGREE_BACK;
+            info = applyLogType.getInfo();
+            info = info.replace("${param}", insuranceApply.getCheckInfo());
+            update.setStatus(Constants.InsuranceApplyStatus.SIGNATURE.getKey());
+        }else{
+            //濡傛灉鏄悓鎰�,涓ょ鐢宠閫�鍥炵姸鎬侀兘鍙搷浣�
+            if(!(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE.getKey())
+                    ||Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_WAIT_SIGNATURE.getKey())
+                    ||Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_UPLOAD.getKey()))){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+            applyLogType = Constants.ApplyLogType.PLATFORM_AGREE_BACK;
+            if( Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE.getKey())){
+                update.setStatus(Constants.InsuranceApplyStatus.SIGNATURE.getKey());
+            }else if( Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_WAIT_SIGNATURE.getKey())){
+                update.setStatus(Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey());
+            }else if(  Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_UPLOAD.getKey())){
+                update.setStatus(Constants.InsuranceApplyStatus.UPLOAD.getKey());
+            }
+        }
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(insuranceApply.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        insuranceApplyMapper.updateById(update);
+
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
+
+
+    }
+    @Override
+    public  String getSignLink(Integer id) {
+        if(id == null ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        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);
+        }
+
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        Constants.ApplyLogType applyLogType = null;
+        String info = "";
+            //濡傛灉鏄┏鍥�,鍙兘鍙┏鍥炲凡绛剧珷鐘舵�佷笅鐨勯��鍥炵敵璇风姸鎬佽繘琛屾搷浣�
+        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+        Company company = user.getCompany();
+        if(debugModel){
+            company = companyMapper.selectById(model.getCompanyId());
+        }
+        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝浼佷笟灏氭湭鍏峰鍦ㄧ嚎绛剧珷鏉′欢锛岃鑱旂郴骞冲彴绠$悊鍛樼‘璁");
+        }
+
+        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,model.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.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(),model.getSignKeyword(),company.getSignId(),notifyUrl);
+        if(StringUtils.isBlank(applyNo) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        String link = signService.signLink(applyNo,company.getName(),company.getCode());
+        if(StringUtils.isBlank(link) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        InsuranceApply update= new InsuranceApply();
+        update.setId(model.getId());
+        update.setEditor(user.getId());
+        update.setEditDate(new Date());
+        update.setSignApplyNo(applyNo);
+        insuranceApplyMapper.updateById(update);
+        return  link;
+    }
+    public String uploadSignFile(String link){
+        try {
+            String bucketName = systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode();
+            String access_id= systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode();
+            String access_key= systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode();
+            String endpoint = systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode();
+            String folder = systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+            String tempFileName =  DateUtil.getNowShortDate() + "/" + UUID.randomUUID().toString() + ".pdf";
+            String key = folder + tempFileName;// 鏂囦欢鍚�
+            ALiYunUtil obs = new ALiYunUtil(endpoint,access_id, access_key);
+            if (obs.uploadOnlineObject(link,bucketName, key,null)) {
+                // 绉诲姩鎴愬姛,杩斿洖鏂囦欢鍚�
+                return tempFileName;
+            }
+        }catch (Exception e){
+
+        }
+        return  null;
+
+    }
+
+
+    public Integer uploadSignedFileDo(InsuranceApply model,String fileurl) {
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(model.getCreator());
+        update.setStatus(Constants.InsuranceApplyStatus.SIGNATURE.getKey());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo("浼佷笟瀹屾垚绛剧讲");
+        update.setCheckUserId(model.getCreator());
+        update.setId(model.getId());
+        insuranceApplyMapper.updateById(update);
+
+        Multifile f = new Multifile();
+        f.setIsdeleted(Constants.ZERO);
+        f.setCreator(model.getCreator());
+        f.setObjId(update.getId());
+        f.setCreateDate(update.getEditDate());
+        f.setObjType(Constants.MultiFile.BD_SIGNED_PDF.getKey());
+        f.setType(Constants.TWO);
+        f.setFileurl(fileurl);
+        f.setName("鎶曚繚鍗曠绾﹀悎鍚�.pdf");
+        multifileMapper.insert(f);
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.SIGNATURE;
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
+
+    }
+    public Integer uploadChangeSignedFileDo(ApplyChange model,String fileurl) {
+        ApplyChange update = new ApplyChange();
+        update.setEditDate(new Date());
+        update.setEditor(model.getCreator());
+        update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo("浼佷笟瀹屾垚绛剧讲");
+        update.setCheckUserId(model.getCreator());
+        update.setId(model.getId());
+        applyChangeMapper.updateById(update);
+
+        Multifile f = new Multifile();
+        f.setIsdeleted(Constants.ZERO);
+        f.setCreator(model.getCreator());
+        f.setObjId(update.getId());
+        f.setCreateDate(update.getEditDate());
+        f.setObjType(Constants.equalsInteger(Constants.ZERO,model.getType())?Constants.MultiFile.CA_APPLY_JIAJIAN_SIGN.getKey() : Constants.MultiFile.CA_APPLY_CHANGEUNIT_SIGN.getKey());
+        f.setType(Constants.TWO);
+        f.setFileurl(fileurl);
+        f.setName("绛剧珷鐢宠琛�.pdf");
+        multifileMapper.insert(f);
+        Constants.ApplyLogType applyLogType =Constants.equalsInteger(Constants.ZERO,model.getType())? Constants.ApplyLogType.CA_JIAJIAN_APPLY_SIGN: Constants.ApplyLogType.CA_CHANGUNIT_APPLY_SIGN;
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
+
+    }
+    @Override
+    public   void dealWaitSignedData(){
+        List<InsuranceApply> applyList = insuranceApplyMapper.selectList(new QueryWrapper<InsuranceApply>().lambda()
+                .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WAIT_SIGNATURE)
+                .isNotNull(InsuranceApply::getSignApplyNo));
+        if(applyList !=null && applyList.size()>0 ){
+            for(InsuranceApply model : applyList){
+                String link = signService.linkFile(model.getSignApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return;
+                }
+                uploadSignedFileDo(model,fileUrl);
+                return;
+            }
+        }
+        List<ApplyChange> chagneList = applyChangeMapper.selectList(new QueryWrapper<ApplyChange>().lambda()
+                .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.UPLOAD)
+                .isNotNull(ApplyChange::getSignApplyNo));
+        if(chagneList !=null && chagneList.size()>0 ){
+            for(ApplyChange model : chagneList){
+                String link = signService.linkFile(model.getSignApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return;
+                }
+                uploadChangeSignedFileDo(model,fileUrl);
+                return;
+            }
+        }
+    }
+    @Override
+    public   void dealSignResult(NotifyDataReq data){
+        if(data.getApplyNo() == null ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        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.WAIT_SIGNATURE.getKey())){
+                //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
+                String link = signService.linkFile(data.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return;
+                }
+                uploadSignedFileDo(model,fileUrl);
+                return;
+            }
+
+            ApplyChange applyChange = applyChangeMapper.selectOne(new QueryWrapper<ApplyChange>().lambda().eq(ApplyChange::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
+            if(applyChange != null &&Constants.equalsInteger(applyChange.getStatus(),Constants.ApplyChangeStatus.UPLOAD.getKey())){
+                String link = signService.linkFile(data.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return;
+                }
+                uploadChangeSignedFileDo(applyChange,fileUrl);
+            }
+        }else if(Constants.equalsInteger(data.getSignStatus(), Constants.TWO )){
+            //濡傛灉宸叉嫆绛撅紝娓呴櫎鍚堝悓锛屼笅娆$绔犻噸鏂扮敓鎴愭柊鍚堝悓
+            insuranceApplyMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
+                    .set(InsuranceApply::getSignApplyNo,null)
+                    .eq(InsuranceApply::getSignApplyNo,data.getApplyNo()));
+            //濡傛灉宸叉嫆绛撅紝娓呴櫎鍚堝悓锛屼笅娆$绔犻噸鏂扮敓鎴愭柊鍚堝悓
+            applyChangeMapper.update(null,new UpdateWrapper<ApplyChange>().lambda()
+                    .set(ApplyChange::getSignApplyNo,null)
+                    .eq(ApplyChange::getSignApplyNo,data.getApplyNo()));
+        }
+
+    }
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer uploadToubaodan(InsuranceApply insuranceApply) {
+        if(insuranceApply.getId() == null
+                || insuranceApply.getToubaodanFile() == null
+                ||StringUtils.isBlank( insuranceApply.getToubaodanFile() .getFileurl())
+                ||StringUtils.isBlank( insuranceApply.getToubaodanFile() .getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        InsuranceApply model = insuranceApplyMapper.selectById(insuranceApply.getId());
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD.getKey())
+                || Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey()))){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setStatus(Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(insuranceApply.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        insuranceApplyMapper.updateById(update);
+
+        insuranceApply.getToubaodanFile().setIsdeleted(Constants.ZERO);
+        insuranceApply.getToubaodanFile().setCreator(user.getId());
+        insuranceApply.getToubaodanFile().setObjId(update.getId());
+        insuranceApply.getToubaodanFile().setCreateDate(update.getEditDate());
+        insuranceApply.getToubaodanFile().setObjType(Constants.MultiFile.BD_APPLY_PDF.getKey());
+        insuranceApply.getToubaodanFile().setType(Constants.TWO);
+        multifileMapper.insert(insuranceApply.getToubaodanFile());
+        update.setToubaodanFile(insuranceApply.getToubaodanFile());
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.WAIT_SIGNATURE;
+        String info =applyLogType.getInfo();
+//        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;
+
+    }
+
+    /**
+     * 瀹℃牳閫氳繃鎴栬�呬笉閫氳繃
+     * @param insuranceApply
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer check(InsuranceApply insuranceApply) {
+        if(insuranceApply.getId() == null || StringUtils.isBlank(insuranceApply.getCheckInfo())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        InsuranceApply model = insuranceApplyMapper.selectById(insuranceApply.getId());
+
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+
+        Constants.ApplyLogType applyLogType = null;
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(insuranceApply.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        if(insuranceApply.getDealBackApply() ==1){
+            //濡傛灉鏄笉閫氳繃
+            applyLogType = Constants.ApplyLogType.PLATFORM_RETURN ;
+            update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey());
+        }else{
+            applyLogType = Constants.ApplyLogType.PLATFORM_CHECK_PASS;
+            update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey());
+        }
+        insuranceApplyMapper.updateById(update);
+        String info =applyLogType.getInfo();
+        info = info.replace("${param}", update.getCheckInfo());
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
+
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public Integer create(InsuranceApply insuranceApply) {
+        if (Objects.isNull(insuranceApply)
+            || Objects.isNull(insuranceApply.getSolutionId())
+            || Objects.isNull(insuranceApply.getApplyStartTime())
+            || Objects.isNull(insuranceApply.getApplyEndTime())
+            || !CollectionUtils.isNotEmpty(insuranceApply.getApplyDetailList())
+        ) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!loginUserInfo.getType().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+        }
+        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
+        //鍒ゆ柇鏄惁瀛樺湪閲嶅淇℃伅
+        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
+        Set<String> set = new HashSet<>(idCardList);
+        if(idCardList.size() != set.size()){
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鍛樺伐淇℃伅瀛樺湪閲嶅淇℃伅");
+        }
+        Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
+        insuranceApply.setCreateDate(new Date());
+        insuranceApply.setCreator(loginUserInfo.getId());
+        insuranceApply.setIsdeleted(Constants.ZERO);
+        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
+        insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
+        insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
+        insuranceApply.setEndTime(insuranceApply.getApplyEndTime());
+        insuranceApply.setCheckDate(new Date());
+        insuranceApply.setCurrentFee(BigDecimal.ZERO);
+        insuranceApply.setCheckUserId(loginUserInfo.getId());
+        insuranceApply.setStatus(insuranceApplyStatus.getKey());
         insuranceApplyMapper.insert(insuranceApply);
+        //澶勭悊涓嬬骇鏁版嵁
+        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo);
+        InsuranceApply updBean = new InsuranceApply();
+        updBean.setId(insuranceApply.getId());
+        updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
+        insuranceApplyMapper.updateById(updBean);
+        //瀛樺偍鏃ュ織鏁版嵁
+        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
         return insuranceApply.getId();
     }
+
+
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer updateData(InsuranceApply insuranceApply) {
+        if (Objects.isNull(insuranceApply)
+                || Objects.isNull(insuranceApply.getId())
+                || Objects.isNull(insuranceApply.getSolutionId())
+                || Objects.isNull(insuranceApply.getApplyStartTime())
+                || Objects.isNull(insuranceApply.getApplyEndTime())
+                || !CollectionUtils.isNotEmpty(insuranceApply.getApplyDetailList())
+        ) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!loginUserInfo.getType().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+        }
+        InsuranceApply dbInsuranceApply = insuranceApplyMapper.selectById(insuranceApply.getId());
+        if(Objects.isNull(dbInsuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇敼瀵硅薄淇℃伅");
+        }
+        if(!(dbInsuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey())
+                    || dbInsuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.FAIL_RETURN.getKey()))
+        ){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐘舵�侀敊璇紝褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
+        }
+        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
+        //鍒ゆ柇鏄惁瀛樺湪閲嶅淇℃伅
+        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
+        Set<String> set = new HashSet<>(idCardList);
+        if(idCardList.size() != set.size()){
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鍛樺伐淇℃伅瀛樺湪閲嶅淇℃伅");
+        }
+        Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
+        insuranceApply.setEditDate(new Date());
+        insuranceApply.setEditor(loginUserInfo.getId());
+        insuranceApply.setIsdeleted(Constants.ZERO);
+        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
+        insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
+        insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
+        insuranceApply.setEndTime(insuranceApply.getApplyEndTime());
+        insuranceApply.setCheckDate(new Date());
+        insuranceApply.setCurrentFee(BigDecimal.ZERO);
+        insuranceApply.setCheckUserId(loginUserInfo.getId());
+        insuranceApply.setStatus(insuranceApplyStatus.getKey());
+        applyDetailMapper.delete(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,insuranceApply.getId()));
+        //澶勭悊涓嬬骇鏁版嵁
+        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo);
+        insuranceApply.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
+        insuranceApplyMapper.updateById(insuranceApply);
+        //瀛樺偍鏃ュ織鏁版嵁
+        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
+        return insuranceApply.getId();
+    }
+
+
+
+    public void dealApplyDetailData(InsuranceApply insuranceApply,List<ApplyDetail> applyDetailList,LoginUserInfo loginUserInfo){
+        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
+        }
+        //鏌ヨ淇濋櫓鏂规涓嬬殑鎵�鏈夋淳閬e崟浣�
+        List<DuSolution> duSolutionList = duSolutionMapper.selectList(new QueryWrapper<DuSolution>().lambda()
+                .eq(DuSolution::getIsdeleted,Constants.ZERO)
+                .eq(DuSolution::getStatus,Constants.ONE)
+                .eq(DuSolution::getSolutionId,insuranceApply.getSolutionId()));
+        if(!CollectionUtils.isNotEmpty(duSolutionList)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌娲鹃仯鍗曚綅");
+        }
+        //鏌ヨ鎵�鏈夋淳閬e崟浣嶄笅鐨勫伐绉�
+        List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList());
+        List<DuWorktype> duWorktypeList = duWorktypeMapper.selectList(new QueryWrapper<DuWorktype>().lambda()
+                .eq(DuWorktype::getIsdeleted,Constants.ZERO)
+                .eq(DuWorktype::getStatus,Constants.ONE)
+                .in(DuWorktype::getDuSolutionId,duSolutionIdList));
+        if(!CollectionUtils.isNotEmpty(duWorktypeList)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌宸ョ淇℃伅");
+        }
+
+        if(CollectionUtils.isNotEmpty(applyDetailList)){
+            for (int i = 0; i < applyDetailList.size(); i++) {
+                ApplyDetail applyDetail = applyDetailList.get(i);
+                if(Objects.isNull(applyDetail)
+                        ||StringUtils.isBlank(applyDetail.getIdcardNo())
+                        ||StringUtils.isBlank(applyDetail.getMemberName())
+                        ||Objects.isNull(applyDetail.getDuId())
+                        ||Objects.isNull(applyDetail.getWorktypeId())
+                ){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎶曚繚鍛樺伐淇℃伅鏁版嵁缂哄け");
+                }
+                applyDetail.setCreateDate(new Date());
+                applyDetail.setCreator(loginUserInfo.getId());
+                applyDetail.setIsdeleted(Constants.ZERO);
+                applyDetail.setStartTime(insuranceApply.getApplyStartTime());
+                applyDetail.setEndTime(insuranceApply.getApplyEndTime());
+                applyDetail.setSortnum(i);
+                applyDetail.setApplyId(insuranceApply.getId());
+                Member member = new Member();
+                if(Objects.isNull(applyDetail.getMemberId())){
+                    //鏌ヨ鏄惁瀛樺湪璇ョ敤鎴�
+                    member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                            .eq(Member::getCompanyId,insuranceApply.getCompanyId())
+                            .eq(Member::getIsdeleted,Constants.ZERO)
+                            .eq(Member::getIdcardNo,applyDetail.getIdcardNo())
+                            .last(" limit 1")
+                    );
+                    if(Objects.isNull(member)){
+                        member = new Member();
+                        member.setCreateDate(new Date());
+                        member.setCreator(loginUserInfo.getId());
+                        member.setIsdeleted(Constants.ZERO);
+                        member.setName(applyDetail.getMemberName());
+                        member.setCompanyId(insuranceApply.getCompanyId());
+                        member.setSex(Constants.getSexByIdCard(applyDetail.getIdcardNo()));
+                        member.setIdcardNo(applyDetail.getIdcardNo());
+                        member.setApplyId(insuranceApply.getId());
+                        member.setDuId(applyDetail.getDuId());
+                        member.setWorktypeId(applyDetail.getWorktypeId());
+                        memberMapper.insert(member);
+                    }else{
+                        member.setApplyId(insuranceApply.getId());
+                        member.setDuId(applyDetail.getDuId());
+                        member.setWorktypeId(applyDetail.getWorktypeId());
+                        memberMapper.updateById(member);
+                    }
+                }else{
+                    member = memberMapper.selectById(applyDetail.getMemberId());
+                    if(Objects.isNull(member)){
+                        throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ヤ俊鎭瓨鍦ㄥ紓甯告暟鎹紒");
+                    }
+                    member.setApplyId(insuranceApply.getId());
+                    member.setDuId(applyDetail.getDuId());
+                    member.setWorktypeId(applyDetail.getWorktypeId());
+                    memberMapper.updateById(member);
+                }
+                applyDetail.setMemberId(member.getId());
+                applyDetail.setIdcardNo(member.getIdcardNo());
+                applyDetail.setSex(member.getSex());
+                applyDetail.setFee(Constants.countDetailFee(solutions,insuranceApply.getApplyEndTime(),insuranceApply.getApplyStartTime()));
+                //楠岃瘉娲鹃仯鍗曚綅淇℃伅鏄惁瀛樺湪
+                if(duSolutionList.stream().filter(d->d.getDispatchUnitId().equals(applyDetail.getDuId())).collect(Collectors.toList()).size()<=Constants.ZERO){
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                }
+                if(duWorktypeList.stream().filter(d->d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
+                        .collect(Collectors.toList()).size()<=Constants.ZERO){
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+"銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
+                }
+            }
+            applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList);
+        }
+    }
+
+
+    public void saveApplyLog(InsuranceApply insuranceApply,Constants.InsuranceApplyStatus insuranceApplyStatus,String content){
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        ApplyLog applyLog = new ApplyLog();
+        applyLog.setCreateDate(new Date());
+        applyLog.setCreator(loginUserInfo.getId());
+        applyLog.setIsdeleted(Constants.ZERO);
+        applyLog.setApplyId(insuranceApply.getId());
+        applyLog.setTitle(insuranceApplyStatus.getName());
+        applyLog.setContent(content);
+        applyLog.setObjType(insuranceApplyStatus.getKey());
+        applyLog.setObjId( insuranceApply.getId());
+        applyLog.setStatus(insuranceApply.getStatus());
+        applyLogMapper.insert(applyLog);
+    }
+
+
+
+//    public BigDecimal countDetailFee(Solutions solutions ,Date startDate,Date endDate){
+//        //鏌ヨ淇濋櫓瀹為檯鍛ㄦ湡
+//        Integer cycle = DateUtil.calculateBetween(endDate,startDate,solutions.getDataType());
+//        if(cycle==-1){
+//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏃ユ湡淇℃伅閿欒!");
+//        }
+//        return solutions.getPrice().multiply(new BigDecimal(cycle));
+//    }
+
+//    public static void main(String[] args) {
+//        Date date1 = DateUtil.StringToDate("2023-03-01 00:00:00");
+//        Date date2 = DateUtil.StringToDate("2023-04-01 00:00:00");
+//        System.out.println(DateUtil.calculateBetween(date1,date2,0));
+//        System.out.println(DateUtil.calculateBetween(date1,date2,1));
+//        System.out.println(DateUtil.calculateBetween(date1,date2,2));
+//        System.out.println(DateUtil.calculateBetween(date1,date2,3));
+//
+//    }
+
 
     @Override
     public void deleteById(Integer id) {
@@ -85,87 +884,412 @@
     }
   
     @Override
-    public PageData<InsuranceApply> findPage(PageWrap<InsuranceApply> pageWrap) {
+    public PageData<InsuranceApply> findPage(PageWrap<InsuranceApplyQueryDTO> pageWrap) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         IPage<InsuranceApply> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<InsuranceApply> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<InsuranceApply> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getId, pageWrap.getModel().getId());
+        List<Integer> statusList = Constants.InsuranceApplyStatus.getKesByStatus(pageWrap.getModel().getStatusCollect());
+        queryWrapper.selectAll(InsuranceApply.class);
+        queryWrapper.selectAs(Company::getName,InsuranceApply::getCompanyName);
+        queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
+        queryWrapper.select(" DATEDIFF( t.END_TIME ,now()  ) AS loseEfficacyDays ");
+        queryWrapper.select(" ( select count(1) from apply_detail ad  where ad.apply_id = t.id ) as insureNum");
+        if(!Objects.isNull(pageWrap.getModel())&&!Objects.isNull(pageWrap.getModel().getType())){
+            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 ");
         }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getCreator, pageWrap.getModel().getCreator());
+        queryWrapper.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
+        queryWrapper.leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId);
+        queryWrapper.eq(InsuranceApply::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(pageWrap.getModel().getBaseSolutionId()!=null,Solutions::getBaseId,pageWrap.getModel().getBaseSolutionId());
+        queryWrapper.in(statusList.size()>0,InsuranceApply::getStatus,statusList);
+        if(Constants.equalsInteger(pageWrap.getModel().getStatusCollect(),Constants.THREE) ){
+            queryWrapper.eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
+            queryWrapper.lt(InsuranceApply::getEndTime, Utils.Date.getStart(new Date()));
         }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(InsuranceApply::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(InsuranceApply::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getSortnum, pageWrap.getModel().getSortnum());
+        //浼佷笟浜哄憳鏌ョ湅鏈紒涓氭暟鎹�
+        if(loginUserInfo.getType().equals(Constants.ONE)){
+            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
         }
         if (pageWrap.getModel().getSolutionId() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getSolutionId, pageWrap.getModel().getSolutionId());
+            queryWrapper.eq(InsuranceApply::getSolutionId, pageWrap.getModel().getSolutionId());
         }
-        if (pageWrap.getModel().getCompanyId() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getCompanyId, pageWrap.getModel().getCompanyId());
+        if (pageWrap.getModel().getEndTimeS() != null) {
+            queryWrapper.ge(InsuranceApply::getEndTime, Utils.Date.getStart(pageWrap.getModel().getEndTimeS()));
         }
-        if (pageWrap.getModel().getApplyEndTime() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getApplyEndTime, Utils.Date.getStart(pageWrap.getModel().getApplyEndTime()));
-            queryWrapper.lambda().le(InsuranceApply::getApplyEndTime, Utils.Date.getEnd(pageWrap.getModel().getApplyEndTime()));
+        if (pageWrap.getModel().getEndTimeE() != null) {
+            queryWrapper.le(InsuranceApply::getEndTime, Utils.Date.getEnd(pageWrap.getModel().getEndTimeE()));
         }
-        if (pageWrap.getModel().getApplyStartTime() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getApplyStartTime, Utils.Date.getStart(pageWrap.getModel().getApplyStartTime()));
-            queryWrapper.lambda().le(InsuranceApply::getApplyStartTime, Utils.Date.getEnd(pageWrap.getModel().getApplyStartTime()));
+        if (pageWrap.getModel().getStartTimeS() != null) {
+            queryWrapper.ge(InsuranceApply::getStartTime, Utils.Date.getStart(pageWrap.getModel().getStartTimeS()));
         }
-        if (pageWrap.getModel().getEndTime() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getEndTime, Utils.Date.getStart(pageWrap.getModel().getEndTime()));
-            queryWrapper.lambda().le(InsuranceApply::getEndTime, Utils.Date.getEnd(pageWrap.getModel().getEndTime()));
+        if (pageWrap.getModel().getStartTimeE() != null) {
+            queryWrapper.le(InsuranceApply::getStartTime, Utils.Date.getEnd(pageWrap.getModel().getStartTimeE()));
         }
-        if (pageWrap.getModel().getStartTime() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getStartTime, Utils.Date.getStart(pageWrap.getModel().getStartTime()));
-            queryWrapper.lambda().le(InsuranceApply::getStartTime, Utils.Date.getEnd(pageWrap.getModel().getStartTime()));
+        if (pageWrap.getModel().getCreateTimeS() != null) {
+            queryWrapper.ge(InsuranceApply::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateTimeS()));
         }
-        if (pageWrap.getModel().getCheckDate() != null) {
-            queryWrapper.lambda().ge(InsuranceApply::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate()));
-            queryWrapper.lambda().le(InsuranceApply::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()));
+        if (pageWrap.getModel().getCreateTimeE() != null) {
+            queryWrapper.le(InsuranceApply::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateTimeE()));
         }
-        if (pageWrap.getModel().getCheckInfo() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getCheckInfo, pageWrap.getModel().getCheckInfo());
-        }
-        if (pageWrap.getModel().getCheckUserId() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getCheckUserId, pageWrap.getModel().getCheckUserId());
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.eq(Solutions::getType, pageWrap.getModel().getType());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(InsuranceApply::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(InsuranceApply::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(InsuranceApply::getStatus, pageWrap.getModel().getStatus());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if(CollectionUtils.isNotEmpty(pageWrap.getSorts())){
+            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                    queryWrapper.orderByDesc(sortData.getProperty());
+                } else {
+                    queryWrapper.orderByAsc(sortData.getProperty());
+                }
+            }
+        }else{
+            queryWrapper.orderByDesc(InsuranceApply::getCreateDate);
+        }
+
+        PageData<InsuranceApply> pageData = PageData.from(insuranceApplyJoinMapper.selectJoinPage(page,InsuranceApply.class, queryWrapper));
+        if(pageData.getRecords()!=null){
+            for (InsuranceApply apply : pageData.getRecords()){
+                initApplyStatus(apply) ;
+             }
+        }
+        return pageData;
+    }
+
+    public void    initApplyStatus(InsuranceApply apply){
+        apply.setStatusCollect(Constants.InsuranceApplyStatus.getCollectStatus(apply.getStatus()));
+        if(Constants.equalsInteger(apply.getStatusCollect(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
+            //濡傛灉宸插畬鎴�
+            if(apply.getEndTime()==null || System.currentTimeMillis()>apply.getEndTime().getTime()){
+                apply.setStatusCollect(Constants.THREE);//宸茶繃鏈�
             }
         }
-        return PageData.from(insuranceApplyMapper.selectPage(page, queryWrapper));
+        setServiceDays(apply);
+        apply.setStatusInfo(Constants.ApplyCollectStatus.getName(apply.getStatusCollect()));
+
     }
+
+    @Override
+    public List<InsuranceApply> findListByDTO(InsuranceApplyQueryDTO model) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        MPJLambdaWrapper<InsuranceApply> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(InsuranceApply.class);
+        queryWrapper.selectAs(Company::getName,InsuranceApply::getCompanyName);
+        queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
+        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.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
+        queryWrapper.leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId);
+        queryWrapper.eq(InsuranceApply::getIsdeleted,Constants.ZERO);
+        //浼佷笟浜哄憳鏌ョ湅鏈紒涓氭暟鎹�
+        if(loginUserInfo.getType().equals(Constants.ONE)){
+            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
+        }
+        if (model.getSolutionId() != null) {
+            queryWrapper.eq(InsuranceApply::getSolutionId, model.getSolutionId());
+        }
+        if (model.getEndTimeS() != null) {
+            queryWrapper.ge(InsuranceApply::getEndTime, Utils.Date.getStart(model.getEndTimeS()));
+        }
+        if (model.getEndTimeE() != null) {
+            queryWrapper.le(InsuranceApply::getEndTime, Utils.Date.getEnd(model.getEndTimeE()));
+        }
+        if (model.getStartTimeS() != null) {
+            queryWrapper.ge(InsuranceApply::getStartTime, Utils.Date.getStart(model.getStartTimeS()));
+        }
+        if (model.getStartTimeE() != null) {
+            queryWrapper.le(InsuranceApply::getStartTime, Utils.Date.getEnd(model.getStartTimeE()));
+        }
+        if (model.getCreateTimeS() != null) {
+            queryWrapper.ge(InsuranceApply::getCreateDate, Utils.Date.getStart(model.getCreateTimeS()));
+        }
+        if (model.getCreateTimeE() != null) {
+            queryWrapper.le(InsuranceApply::getCreateDate, Utils.Date.getEnd(model.getCreateTimeE()));
+        }
+        if (model.getType() != null) {
+            queryWrapper.eq(Solutions::getType, model.getType());
+        }
+        if (model.getCode() != null) {
+            queryWrapper.eq(InsuranceApply::getCode, model.getCode());
+        }
+        if (model.getStatus() != null) {
+            queryWrapper.eq(InsuranceApply::getStatus, model.getStatus());
+        }
+        if (CollectionUtils.isNotEmpty(model.getIds())) {
+            queryWrapper.in(InsuranceApply::getId, model.getIds());
+        }
+        List<InsuranceApply> list = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class, queryWrapper);
+        return list;
+    }
+
 
     @Override
     public long count(InsuranceApply insuranceApply) {
         QueryWrapper<InsuranceApply> wrapper = new QueryWrapper<>(insuranceApply);
         return insuranceApplyMapper.selectCount(wrapper);
     }
+
+
+
+    @Override
+    public InsuranceApply findDetail(Integer id) {
+
+        MPJLambdaWrapper wrapper=  new MPJLambdaWrapper<InsuranceApply>()
+                .selectAll(InsuranceApply.class)
+                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
+                .selectAs(Company::getName,ApplyLog::getCompanyName)
+                .select(" ( select count(1) from apply_detail ad  where ad.apply_id = t.id ) as insureNum")
+                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
+                .eq(InsuranceApply::getId,id)
+                .last("limit 1");
+
+        InsuranceApply insuranceApply = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,wrapper);
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+
+        initApplyStatus(insuranceApply);
+
+        //鏌ヨ闄勪欢鏁版嵁
+        initImgData(insuranceApply);
+
+        //鏌ヨ鎿嶄綔璁板綍
+        List<ApplyLog> applyLogList = applyLogJoinMapper.selectJoinList(ApplyLog.class,
+                new MPJLambdaWrapper<ApplyLog>()
+                        .selectAll(ApplyLog.class)
+                        .selectAs(SystemUser::getRealname,ApplyLog::getCreatorName)
+                        .selectAs(Company::getName,ApplyLog::getCompanyName)
+                        .leftJoin(SystemUser.class,SystemUser::getId,ApplyLog::getCreator)
+                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
+                        .eq(ApplyLog::getApplyId,insuranceApply.getId())
+                        .orderByAsc(ApplyLog::getCreateDate)
+        );
+        insuranceApply.setApplyLogList(applyLogList);
+        return insuranceApply;
+    }
+
+    private void setServiceDays(InsuranceApply insuranceApply) {
+        //璁剧疆鍦ㄤ繚鏃堕暱锛堝ぉ鏁帮級
+        insuranceApply.setServiceDays(Constants.ZERO);
+        if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
+            //濡傛灉褰撳墠鏃堕棿澶т簬缁撴潫鏃ユ湡 鍒欎娇鐢ㄧ粨鏉熸棩鏈熷姣斿紑濮嬫棩鏈�
+            if(DateUtil.compareDate(new Date(),insuranceApply.getEndTime())>=Constants.ZERO){
+                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(insuranceApply.getEndTime(),insuranceApply.getStartTime()));
+            }else if(DateUtil.compareDate(insuranceApply.getStartTime(),new Date())>=Constants.ZERO){
+                //鏈紑濮�
+                insuranceApply.setServiceDays(Constants.ZERO);
+            }else{
+                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(new Date(),insuranceApply.getStartTime()));
+            }
+        }
+    }
+
+    private void initImgData(InsuranceApply model) {
+        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,model.getId())
+                .in(Multifile::getObjType,Arrays.asList(new Integer[]{Constants.MultiFile.BD_APPLY_PDF.getKey()
+                        ,Constants.MultiFile.BD_SIGNED_PDF.getKey()
+                        ,Constants.MultiFile.BD_DONE_PDF.getKey()}))
+                .eq(Multifile::getIsdeleted,Constants.ZERO));
+        if(multifiles!=null){
+            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+            for(Multifile f : multifiles){
+                if(StringUtils.isBlank(f.getFileurl())){
+                    continue;
+                }
+                f.setFileurlFull(path+f.getFileurl());
+                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_APPLY_PDF.getKey())){
+                    //绛剧讲鍓嶇殑鎶曚繚鍗�
+                    model.setToubaodanFile(f);
+                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_SIGNED_PDF.getKey())){
+                    //绛剧讲鍚庣殑鎶曚繚鍗�
+                    model.setToubaodanSignedFile(f);
+                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_DONE_PDF.getKey())){
+                    //鏈�绲備繚闄╁崟
+                    model.setBaoxiandanFile(f);
+                }
+
+                if(model.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
+                    //濡傛灉褰撳墠鏃堕棿澶т簬缁撴潫鏃ユ湡 鍒欎娇鐢ㄧ粨鏉熸棩鏈熷姣斿紑濮嬫棩鏈�
+                    if(DateUtil.compareDate(new Date(),model.getEndTime())>=Constants.ZERO){
+                        model.setServiceDays(DateUtil.daysBetweenDates(model.getEndTime(),model.getStartTime()));
+                    }else if(DateUtil.compareDate(model.getStartTime(),new Date())>=Constants.ZERO){
+                        //鏈紑濮�
+                        model.setServiceDays(Constants.ZERO);
+                    }else{
+                        model.setServiceDays(DateUtil.daysBetweenDates(new Date(),model.getStartTime()));
+                    }
+                }
+            }
+        }
+    }
+    @Override
+    public  InsuranceApply  findDetailForExport(InsuranceApply model){
+        MPJLambdaWrapper wrapper=  new MPJLambdaWrapper<InsuranceApply>()
+                .selectAll(InsuranceApply.class)
+                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
+                .selectAs(Company::getName,InsuranceApply::getCompanyName)
+                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
+                .eq(InsuranceApply::getId,model.getId())
+                .last("limit 1");
+
+        InsuranceApply insuranceApply = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,wrapper);
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+
+        MPJLambdaWrapper wrapper1=  new MPJLambdaWrapper<ApplyDetail>()
+                .selectAll(ApplyDetail.class)
+                .selectAs(Worktype::getName,ApplyDetail::getWorkTypeName)
+                .selectAs(DispatchUnit::getName,ApplyDetail::getDuName)
+                .leftJoin(Worktype.class,Worktype::getId,ApplyDetail::getWorktypeId)
+                .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyDetail::getDuId)
+                .eq(ApplyDetail::getApplyId,model.getId());
+        //鏌ヨ鏄庣粏
+        List<ApplyDetail> detailList =applyDetailJoinMapper.selectJoinList(ApplyDetail.class,wrapper1);
+        if(detailList!=null){
+            insuranceApply.setInsureNum(detailList.size());
+            insuranceApply.setApplyDetailList(detailList);
+        }
+        insuranceApply.setRemark(model.getRemark());
+        return insuranceApply;
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void applyOpt(InsuranceApplyOptDTO insuranceApplyOptDTO){
+        if(Objects.isNull(insuranceApplyOptDTO)
+            ||Objects.isNull(insuranceApplyOptDTO.getApplyId())
+            ||StringUtils.isBlank(insuranceApplyOptDTO.getOptIllustration())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(loginUserInfo.getType().equals(Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炰紒涓氱鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+        }
+        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(insuranceApplyOptDTO.getApplyId());
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(insuranceApply.getIsdeleted().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鏁版嵁宸插垹闄�,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        //-----TODU-------RJ-------瀹屽杽閫�鍥炵姸鎬佸垎寮�鏍囪------------------
+        Constants.InsuranceApplyStatus insuranceApplyStatus =  Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE;
+        if(insuranceApplyOptDTO.getOptType().equals(Constants.ONE)){
+            if(!(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD.getKey())
+                    ||insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())
+                    ||insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.SIGNATURE.getKey()))){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�侀潪鍙敵璇烽��鍥�!");
+            }
+            if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD.getKey())){
+                insuranceApplyStatus =  Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_UPLOAD;
+            }else   if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())){
+                insuranceApplyStatus =  Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_WAIT_SIGNATURE;
+            }else  if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.SIGNATURE.getKey())){
+                insuranceApplyStatus =  Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_SIGNATURE;
+            }
+        }else if(insuranceApplyOptDTO.getOptType().equals(Constants.TWO)){
+            insuranceApplyStatus =  Constants.InsuranceApplyStatus.CLOSE;
+            if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.CLOSE.getKey())){
+                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"宸插叧闂紝璇峰嬁閲嶅鎿嶄綔");
+            }
+            if(!(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())
+                    ||insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.SIGNATURE.getKey())
+                    ||insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.PLATFORM_CHECK_PASS.getKey()))){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鐘舵�侀潪鍙敵璇烽��鍥�!");
+            }
+        }
+        insuranceApply.setStatus(insuranceApplyStatus.getKey());
+        insuranceApply.setCheckDate(new Date());
+        insuranceApply.setCheckInfo(insuranceApplyOptDTO.getOptIllustration());
+        insuranceApply.setCheckUserId(loginUserInfo.getId());
+        insuranceApplyMapper.updateById(insuranceApply);
+        //瀛樺偍鏃ュ織鏁版嵁
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.COMPANY_APPLY_RETURN;
+        String info =applyLogType.getInfo();
+        info = info.replace("${param}", insuranceApplyOptDTO.getOptIllustration());
+        ApplyLog log = new ApplyLog(insuranceApply,applyLogType.getName(),info,insuranceApply.getId(),applyLogType.getKey(),JSONObject.toJSONString(insuranceApply), JSONObject.toJSONString(insuranceApply));
+        applyLogMapper.insert(log);
+//        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
+    }
+
+
+    /**
+     * 鏇存柊淇濆崟瀹為檯閲戦
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void updateApplyCurrentFee(){
+        List<InsuranceApply> insuranceApplyList = insuranceApplyMapper.selectList(new QueryWrapper<InsuranceApply>().lambda()
+                .eq(InsuranceApply::getIsdeleted,Constants.ZERO)
+                .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
+                .ge(InsuranceApply::getStartTime,DateUtil.getDate(new Date(),"yyyy-MM-dd") + " 00:00:00")
+                .le(InsuranceApply::getEndTime,DateUtil.getDate(new Date(),"yyyy-MM-dd") + " 23:59:59")
+        );
+
+        if(CollectionUtils.isNotEmpty(insuranceApplyList)){
+            for (InsuranceApply insuranceApply:insuranceApplyList) {
+                Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
+                if(Objects.isNull(solutions)){
+                    continue;
+                }
+                BigDecimal sumAmount = BigDecimal.ZERO;
+                List<ApplyDetail> applyDetailList = applyDetailMapper.selectList(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,insuranceApply.getId()));
+                if(CollectionUtils.isNotEmpty(applyDetailList)){
+                    for (ApplyDetail applyDetail: applyDetailList) {
+                        applyDetail.setCurrentFee(Constants.countDetailFee(solutions,new Date(),applyDetail.getStartTime()));
+                        applyDetailMapper.updateById(applyDetail);
+                        sumAmount = sumAmount.add(applyDetail.getCurrentFee());
+                    }
+                }
+                insuranceApply.setCurrentFee(sumAmount);
+                insuranceApplyMapper.updateById(insuranceApply);
+            }
+        }
+
+    }
+
+
+
+    @Override
+    public CountCyclePriceVO getCountCyclePriceVO(CountCyclePriceDTO countCyclePriceDTO){
+        if(Objects.isNull(countCyclePriceDTO)
+            || Objects.isNull(countCyclePriceDTO.getSolutionsId())
+            || Objects.isNull(countCyclePriceDTO.getStartDate())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Solutions solutions = solutionsMapper.selectById(countCyclePriceDTO.getSolutionsId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
+        }
+        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
+        if(solutions.getInsureCycleUnit().equals(Constants.ZERO)){
+            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),0,solutions.getInsureCycle()));
+        }else if(solutions.getInsureCycleUnit().equals(Constants.TWO)){
+            Integer monthDays = DateUtil.monthDays(countCyclePriceDTO.getStartDate());
+            Date afterDate = DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),0,monthDays);
+            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(afterDate,0,-1));
+        }else if(solutions.getInsureCycleUnit().equals(Constants.THREE)){
+            Date afterDate = DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),2,solutions.getInsureCycle());
+            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(afterDate,0,-1));
+        }
+        countCyclePriceVO.setCyclePrice(Constants.countDetailFee(solutions,countCyclePriceVO.getEndDate(),countCyclePriceDTO.getStartDate()));
+        return countCyclePriceVO;
+    }
+
+
+
 }

--
Gitblit v1.9.3