MrShi
2025-06-25 54130a901757db72ae1d7c8d20cdfc2123749244
Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/yunyibao into 2.0.1
已添加2个文件
已修改7个文件
591 ■■■■■ 文件已修改
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/vo/dataBoard/DataListVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/vo/dataBoard/InsuranceApplyDataVO.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/vo/dataBoard/InsuranceApplyReportDataVO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/InsuranceApplyOnService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyOnServiceImpl.java 411 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -12,6 +12,8 @@
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.vo.ApplyPowerVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.dao.business.vo.dataBoard.DataListVO;
import com.doumee.service.business.InsuranceApplyOnService;
import com.doumee.service.business.InsuranceApplyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -37,6 +39,9 @@
    @Autowired
    private InsuranceApplyService insuranceApplyService;
    @Autowired
    private InsuranceApplyOnService insuranceApplyOnService;
    @PreventRepeat
    @ApiOperation("新建")
@@ -192,4 +197,26 @@
    public ApiResponse<ApplyPowerVO> getApplyPower(@RequestBody ApplyPowerDTO applyPowerDTO) {
        return ApiResponse.success(insuranceApplyService.getApplyPower(applyPowerDTO));
    }
    @ApiOperation("每月加减保人数")
    @GetMapping("/getAddReduceData")
    public ApiResponse<List<DataListVO>> getAddReduceData() {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        return ApiResponse.success(insuranceApplyOnService.getAddReduceData(loginUserInfo));
    }
    @ApiOperation("已投保单各状态占比")
    @GetMapping("/getInsuranceApplyStatusData")
    public ApiResponse<List<DataListVO>> getInsuranceApplyStatusData() {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        return ApiResponse.success(insuranceApplyOnService.getInsuranceApplyStatusData(loginUserInfo));
    }
    @ApiOperation("在保员工")
    @GetMapping("/getInsuranceMemberData")
    public ApiResponse<List<DataListVO>> getInsuranceMemberData() {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        return ApiResponse.success(insuranceApplyOnService.getInsuranceMemberData(loginUserInfo));
    }
}
server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -4,6 +4,7 @@
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.business.dto.ApplyPowerDTO;
@@ -13,12 +14,16 @@
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.vo.ApplyPowerVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.dao.business.vo.dataBoard.DataListVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceApplyDataVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceApplyReportDataVO;
import com.doumee.service.business.InsuranceApplyOnService;
import com.doumee.service.business.InsuranceApplyService;
import com.doumee.service.business.impl.UnionApplyServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -187,4 +192,38 @@
        insuranceApplyService.testSendEmail();
        return ApiResponse.success(null);
    }
    @ApiOperation("投保分析报表数据")
    @GetMapping("/getInsuranceApplyReportDataVO")
    public ApiResponse<InsuranceApplyReportDataVO> getInsuranceApplyReportDataVO() {
        return ApiResponse.success(insuranceApplyOnService.getInsuranceApplyReportDataVO());
    }
    @ApiOperation("投保分析数据")
    @GetMapping("/getInsuranceApplyDataVO")
    public ApiResponse<InsuranceApplyDataVO> getInsuranceApplyDataVO() {
        return ApiResponse.success(insuranceApplyOnService.getInsuranceApplyDataVO());
    }
    @ApiOperation("每月加减保人数")
    @GetMapping("/getAddReduceData")
    public ApiResponse<List<DataListVO>> getAddReduceData() {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        return ApiResponse.success(insuranceApplyOnService.getAddReduceData(loginUserInfo));
    }
    @ApiOperation("已投保单数据")
    @GetMapping("/getInsuranceNum")
    public ApiResponse<InsuranceApplyDataVO> getInsuranceNum() {
        return ApiResponse.success(insuranceApplyOnService.getInsuranceNum());
    }
    @ApiOperation("每月赔付金额")
    @GetMapping("/getSettleClaimsMoney")
    public ApiResponse<List<DataListVO>> getSettleClaimsMoney() {
        return ApiResponse.success(insuranceApplyOnService.getSettleClaimsMoney());
    }
}
server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
@@ -194,4 +194,10 @@
    @TableField(exist = false)
    private Integer insuranceId;
    @TableField(exist = false)
    private String dataFirst;
    @TableField(exist = false)
    private String dataSecond;
}
server/service/src/main/java/com/doumee/dao/business/vo/dataBoard/DataListVO.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.vo.dataBoard;
import com.doumee.dao.business.model.Solutions;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -21,4 +22,6 @@
    @ApiModelProperty(value = "第三个参数", example = "1")
    private String dataThird;
    @ApiModelProperty(value = "方案信息", example = "1")
    private Solutions solutions;
}
server/service/src/main/java/com/doumee/dao/business/vo/dataBoard/InsuranceApplyDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.doumee.dao.business.vo.dataBoard;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class InsuranceApplyDataVO {
    @ApiModelProperty(value = "累计投保企业数量", example = "1")
    private Integer  insuranceCompanyNum;
    @ApiModelProperty(value = "本月新增投保企业数量", example = "1")
    private Integer  monthAddInsuranceCompanyNum;
    @ApiModelProperty(value = "累计有效保单数量", example = "1")
    private Integer  insuranceNum;
    @ApiModelProperty(value = "本月新增有效保单数量", example = "1")
    private Integer  monthAddInsuranceNum;
    @ApiModelProperty(value = "累计保障人员数量", example = "1")
    private Integer  memberNum;
    @ApiModelProperty(value = "本月新增保障人员数量", example = "1")
    private Integer  monthAddMemberNum;
    @ApiModelProperty(value = "合计总费用", example = "1")
    private BigDecimal  totalFee;
    @ApiModelProperty(value = "本月新增费用", example = "1")
    private BigDecimal  monthAddTotalFee;
    @ApiModelProperty(value = "在保企业数量", example = "1")
    private Integer  useCompanyNum;
    @ApiModelProperty(value = "在保保单数量", example = "1")
    private Integer  useInsuranceNum;
    @ApiModelProperty(value = "在保人数", example = "1")
    private Integer  useMemberNum;
    @ApiModelProperty(value = "委托保保单数量", example = "1")
    private Integer  wtbInsuranceNum;
    @ApiModelProperty(value = "直保保单数量", example = "1")
    private Integer  zbInsuranceNum;
}
server/service/src/main/java/com/doumee/dao/business/vo/dataBoard/InsuranceApplyReportDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.doumee.dao.business.vo.dataBoard;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class InsuranceApplyReportDataVO {
    @ApiModelProperty(value = "累计企业投保金额top10")
    private List<DataListVO> companyTopFeeList;
    @ApiModelProperty(value = "热门保险方案", example = "1")
    private List<DataListVO>  hotSolutionList;
    @ApiModelProperty(value = "每月加减保人数", example = "1")
    private List<DataListVO>  monthAddReduceList;
}
server/service/src/main/java/com/doumee/service/business/InsuranceApplyOnService.java
@@ -1,11 +1,15 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.*;
import com.doumee.dao.business.model.InsuranceApply;
import com.doumee.dao.business.vo.ApplyPowerVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.dao.business.vo.dataBoard.DataListVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceApplyDataVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceApplyReportDataVO;
import com.doumee.service.business.impl.UnionApplyServiceImpl;
import com.jzq.common.bean.sign.NotifyDataReq;
@@ -29,5 +33,18 @@
    Integer   dealBackApply(InsuranceApply insuranceApply);
    InsuranceApplyReportDataVO getInsuranceApplyReportDataVO();
    InsuranceApplyDataVO getInsuranceApplyDataVO();
    List<DataListVO> getAddReduceData(LoginUserInfo loginUserInfo);
    InsuranceApplyDataVO getInsuranceNum();
    List<DataListVO> getSettleClaimsMoney();
    List<DataListVO> getInsuranceApplyStatusData(LoginUserInfo loginUserInfo);
    List<DataListVO> getInsuranceMemberData(LoginUserInfo loginUserInfo);
}
server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
@@ -322,15 +322,15 @@
        queryWrapper.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
        queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getApplyId()),ApplyDetail::getApplyId,applyDetailPageDTO.getApplyId());
        queryWrapper.ge(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
                        &&!applyDetailPageDTO.getApplyStatus().equals(Constants.ZERO),
                ApplyDetail::getStartTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 00:00:00");
//        queryWrapper.ge(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
//                        &&!applyDetailPageDTO.getApplyStatus().equals(Constants.ZERO),
//                ApplyDetail::getStartTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 00:00:00");
        //在保
        queryWrapper.le(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
                        &&applyDetailPageDTO.getApplyStatus().equals(Constants.ONE),
                ApplyDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 23:59:59");
        //不在保
        queryWrapper.ge(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
                        &&applyDetailPageDTO.getApplyStatus().equals(Constants.ONE),
                ApplyDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss"));
        //不在保
        queryWrapper.le(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
                        &&applyDetailPageDTO.getApplyStatus().equals(Constants.TWO),
                ApplyDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 23:59:59");
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getDuId()),ApplyDetail::getDuId,applyDetailPageDTO.getDuId());
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyOnServiceImpl.java
@@ -23,6 +23,9 @@
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.ApplyPowerVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.dao.business.vo.dataBoard.DataListVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceApplyDataVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceApplyReportDataVO;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.InsuranceApplyOnService;
@@ -83,7 +86,7 @@
    @Autowired
    private ApplyLogJoinMapper applyLogJoinMapper;
    @Autowired
    private SolutionsMapper solutionsMapper;
    private SolutionsJoinMapper solutionsMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
@@ -108,6 +111,10 @@
    private SystemUserMapper systemUserMapper;
    @Autowired
    private CompanyDepartmentMapper companyDepartmentMapper;
    @Autowired
    private ApplyChangeDetailJoinMapper applyChangeDetailJoinMapper;
    @Autowired
    private SettleClaimsMapper settleClaimsMapper;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
@@ -613,6 +620,408 @@
        }
        return list;
    }
    @Override
    public InsuranceApplyDataVO getInsuranceApplyDataVO() {
        InsuranceApplyDataVO insuranceApplyDataVO = new InsuranceApplyDataVO();
        insuranceApplyDataVO.setInsuranceNum(Constants.ZERO);
        insuranceApplyDataVO.setMonthAddInsuranceNum(Constants.ZERO);
        insuranceApplyDataVO.setInsuranceCompanyNum(Constants.ZERO);
        insuranceApplyDataVO.setMonthAddInsuranceCompanyNum(Constants.ZERO);
        insuranceApplyDataVO.setMemberNum(Constants.ZERO);
        insuranceApplyDataVO.setMonthAddMemberNum(Constants.ZERO);
        insuranceApplyDataVO.setTotalFee(BigDecimal.ZERO);
        insuranceApplyDataVO.setMonthAddTotalFee(BigDecimal.ZERO);
        insuranceApplyDataVO.setUseCompanyNum(Constants.ZERO);
        insuranceApplyDataVO.setUseInsuranceNum(Constants.ZERO);
        insuranceApplyDataVO.setUseMemberNum(Constants.ZERO);
        List<InsuranceApply> insuranceApplyList = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class,
                new MPJLambdaWrapper<InsuranceApply>()
                        .selectAll(InsuranceApply.class)
                        .selectAs(Solutions::getType, InsuranceApply::getSolutionType)
                        .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                        .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                        .notIn(InsuranceApply::getStatus,
                                Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                        )
        );
        String monthDate = DateUtil.getFomartDate(new Date(), "yyyy-MM");
        if (CollectionUtils.isNotEmpty(insuranceApplyList)) {
            //累计有效保单
            insuranceApplyDataVO.setInsuranceNum(
                    insuranceApplyList.stream().filter(i -> Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                            || Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                    ).collect(Collectors.toList()).size()
            );
            //本月新增有效保单
            insuranceApplyDataVO.setMonthAddInsuranceNum(
                    insuranceApplyList.stream().filter(i -> (Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                            || Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey()))
                            && DateUtil.formatDate(i.getCreateDate(), "yyyy-MM").equals(monthDate)
                    ).collect(Collectors.toList()).size()
            );
            //在保企业数量
            List<Integer> useCompanyNum = insuranceApplyList.stream().filter(i -> (Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                    || Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey()))
                    && i.getStartTime().getTime() <= System.currentTimeMillis() && i.getEndTime().getTime() >= System.currentTimeMillis()
            ).map(i -> i.getCompanyId()).collect(Collectors.toList());
            insuranceApplyDataVO.setUseCompanyNum(new HashSet<>(useCompanyNum).size());
            //在保保单数量
            insuranceApplyDataVO.setUseInsuranceNum(
                    insuranceApplyList.stream().filter(i -> (Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                            || Constants.equalsInteger(i.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey()))
                            && i.getStartTime().getTime() <= System.currentTimeMillis() && i.getEndTime().getTime() >= System.currentTimeMillis()
                    ).collect(Collectors.toList()).size()
            );
            List<Integer> companyIds = insuranceApplyList.stream().map(i -> i.getCompanyId()).collect(Collectors.toList());
            if (CollectionUtils.isNotEmpty(companyIds)) {
                //累计投保企业数量
                insuranceApplyDataVO.setInsuranceCompanyNum(new HashSet<>(companyIds).size());
            }
            Integer monthAddInsuranceCompanyNum = insuranceApplyJoinMapper.selectJoinCount(
                    new MPJLambdaWrapper<InsuranceApply>()
                            .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                            .notIn(InsuranceApply::getStatus,
                                    Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                    Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                            )
                            .apply(" company_id in ( select c.id from company c where c.ISDELETED = 0 and   DATE_FORMAT(c.CREATE_DATE, '%Y-%m')  = DATE_FORMAT(now(), '%Y-%m') )   ")
                            .groupBy(InsuranceApply::getCompanyId)
            );
            //本月新增投保企业
            insuranceApplyDataVO.setMonthAddInsuranceCompanyNum(Objects.nonNull(monthAddInsuranceCompanyNum)?monthAddInsuranceCompanyNum:Constants.ZERO);
            //直保保单数量
            insuranceApplyDataVO.setZbInsuranceNum(insuranceApplyList.stream().filter(i -> Constants.equalsInteger(i.getSolutionType(), Constants.ZERO)).collect(Collectors.toList()).size());
            //委托保保单数量
            insuranceApplyDataVO.setWtbInsuranceNum(insuranceApplyList.stream().filter(i -> Constants.equalsInteger(i.getSolutionType(), Constants.ONE)).collect(Collectors.toList()).size());
        }
            //合计总费用
            insuranceApplyDataVO.setTotalFee(new BigDecimal(applyDetailJoinMapper.selectJoinMap( new MPJLambdaWrapper<ApplyDetail>()
                    .select("ifnull(sum(t.fee),0) as fee")
                    .selectAs(InsuranceApply::getStatus, ApplyDetail::getApplyStatus)
                    .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                    .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                    .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                    .notIn(InsuranceApply::getStatus,
                            Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                            Constants.InsuranceApplyStatus.CLOSE.getKey(),
                            Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                            Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                    )
            ).get("fee").toString()));
            //本月新增费用
            insuranceApplyDataVO.setMonthAddTotalFee(
                    new BigDecimal(applyDetailJoinMapper.selectJoinMap( new MPJLambdaWrapper<ApplyDetail>()
                            .select("ifnull(sum(t.fee),0) as fee")
                            .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                            .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                            .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                            .notIn(InsuranceApply::getStatus,
                                    Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                    Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                            )
                            .apply(" DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(now(), '%Y-%m')   ")
                    ).get("fee").toString())
            );
            //累计投保人次
            insuranceApplyDataVO.setMemberNum(
                    Integer.valueOf(applyDetailJoinMapper.selectJoinMap( new MPJLambdaWrapper<ApplyDetail>()
                            .select("count(distinct t.MEMBER_ID) as memberTimes")
                            .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                            .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                            .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                            .notIn(InsuranceApply::getStatus,
                                    Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                    Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                            )
                    ).get("memberTimes").toString())
        );
            //本月新增投保人次
            insuranceApplyDataVO.setMonthAddMemberNum(
                    Integer.valueOf(applyDetailJoinMapper.selectJoinMap( new MPJLambdaWrapper<ApplyDetail>()
                            .select("count(distinct t.MEMBER_ID) as memberTimes")
                            .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                            .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                            .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                            .notIn(InsuranceApply::getStatus,
                                    Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                    Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                            )
                            .apply(" DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(now(), '%Y-%m') ")
                    ).get("memberTimes").toString())
        );
            //当前保障人员
            insuranceApplyDataVO.setUseMemberNum(
                    Integer.valueOf(applyDetailJoinMapper.selectJoinMap( new MPJLambdaWrapper<ApplyDetail>()
                            .select("count(distinct t.MEMBER_ID) as memberTimes")
                            .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                            .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                            .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                            .notIn(InsuranceApply::getStatus,
                                    Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                    Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                    Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                            )
                            .apply(" t.start_time <= now() and t.end_time >= now() ")
                    ).get("memberTimes").toString())
                     );
        return insuranceApplyDataVO;
    }
    @Override
    public InsuranceApplyReportDataVO getInsuranceApplyReportDataVO(){
        InsuranceApplyReportDataVO insuranceApplyReportDataVO = new InsuranceApplyReportDataVO();
        List<DataListVO> companyTopFeeList = applyDetailJoinMapper.selectJoinList(DataListVO.class, new MPJLambdaWrapper<ApplyDetail>()
                .select(" t2.name as dataFirst, ROUND(ifnull(sum(t.fee),0),2) as dataSecond ")
                .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                        .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                .notIn(InsuranceApply::getStatus,
                        Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                        Constants.InsuranceApplyStatus.CLOSE.getKey(),
                        Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                        Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                )
                        .groupBy(" t1.company_id,t2.name")
                .orderByDesc(" sum(t.fee) ")
                .last(" limit 10")
        );
        insuranceApplyReportDataVO.setCompanyTopFeeList(companyTopFeeList);
        List<DataListVO> hotSolutionList = insuranceApplyJoinMapper.selectJoinList(DataListVO.class, new MPJLambdaWrapper<InsuranceApply>()
                .select(" solution_id as dataFirst, count(1) as dataSecond ")
                .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                .notIn(InsuranceApply::getStatus,
                        Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                        Constants.InsuranceApplyStatus.CLOSE.getKey(),
                        Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                        Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                )
                .groupBy(" t.solution_id")
                .orderByDesc(" count(1) ")
                .last(" limit 10")
        );
        if(CollectionUtils.isNotEmpty(hotSolutionList)){
            List<Solutions>  solutionsList = solutionsMapper.selectJoinList(Solutions.class,new MPJLambdaWrapper<Solutions>()
                            .select("t.id, t.NAME , t1.name as solutionBaseName ,t.PRICE,t.TIME_UNIT  ")
                            .leftJoin(SolutionsBase.class,SolutionsBase::getId,Solutions::getParentId)
                    .in(Solutions::getId,hotSolutionList.stream().map(i->i.getDataFirst()).collect(Collectors.toList())));
            if(CollectionUtils.isNotEmpty(solutionsList)){
                for (DataListVO dataListVO:hotSolutionList) {
                    List<Solutions> solutions = solutionsList.stream().filter(i->Constants.equalsInteger(i.getId(),Integer.valueOf(dataListVO.getDataFirst()))).collect(Collectors.toList());
                    if(CollectionUtils.isNotEmpty(solutions)){
                        dataListVO.setSolutions(solutions.get(Constants.ZERO));
                    }
                }
            }
            insuranceApplyReportDataVO.setHotSolutionList(hotSolutionList);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        insuranceApplyReportDataVO.setMonthAddReduceList(this.getAddReduceData(loginUserInfo));
        return insuranceApplyReportDataVO;
    }
    @Override
    public List<DataListVO> getAddReduceData(LoginUserInfo loginUserInfo){
        List<DataListVO> monthAddReduceList = new ArrayList<>();
        for (int i = -11; i <= 0 ; i++) {
            String month = DateUtil.DateToStr(
                    DateUtil.afterDateByType(new Date(),1,i),"yyyy-MM");
            DataListVO dataListVO = new DataListVO();
            dataListVO.setDataFirst(month);
            dataListVO.setDataSecond(
                    applyChangeDetailJoinMapper.selectJoinCount(new MPJLambdaWrapper<ApplyChagneDetail>()
                            .leftJoin(ApplyChange.class,ApplyChange::getId,ApplyChagneDetail::getApplyChangeId)
                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                            .eq(ApplyChagneDetail::getType,Constants.ZERO)
                                    .eq(Objects.nonNull(loginUserInfo)&&Constants.equalsInteger(loginUserInfo.getType(),Constants.ONE),InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                            .apply(" DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = '"+month+"'")
                    ) +""
            );
            dataListVO.setDataThird("-"+
                    applyChangeDetailJoinMapper.selectJoinCount(new MPJLambdaWrapper<ApplyChagneDetail>()
                            .leftJoin(ApplyChange.class,ApplyChange::getId,ApplyChagneDetail::getApplyChangeId)
                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                            .eq(ApplyChagneDetail::getType,Constants.ONE)
                            .eq(Objects.nonNull(loginUserInfo)&&Constants.equalsInteger(loginUserInfo.getType(),Constants.ONE)
                                    ,InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                            .apply(" DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = '"+month+"'")
                    )
            );
            monthAddReduceList.add(dataListVO);
        }
        return monthAddReduceList;
    }
    @Override
    public InsuranceApplyDataVO getInsuranceNum(){
        List<InsuranceApply> insuranceApplyList = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class,
                new MPJLambdaWrapper<InsuranceApply>()
                        .selectAll(InsuranceApply.class)
                        .selectAs(Solutions::getType, InsuranceApply::getSolutionType)
                        .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                        .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                        .notIn(InsuranceApply::getStatus,
                                Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey(),
                                Constants.InsuranceApplyStatus.CLOSE.getKey(),
                                Constants.InsuranceApplyStatus.WTB_RETURN.getKey(),
                                Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
                        )
        );
        InsuranceApplyDataVO insuranceApplyDataVO = new InsuranceApplyDataVO();
        //直保保单数量
        insuranceApplyDataVO.setZbInsuranceNum(insuranceApplyList.stream().filter(i -> Constants.equalsInteger(i.getSolutionType(), Constants.ZERO)).collect(Collectors.toList()).size());
        //委托保保单数量
        insuranceApplyDataVO.setWtbInsuranceNum(insuranceApplyList.stream().filter(i -> Constants.equalsInteger(i.getSolutionType(), Constants.ONE)).collect(Collectors.toList()).size());
        return insuranceApplyDataVO;
    }
    @Override
    public List<DataListVO> getSettleClaimsMoney(){
        List<SettleClaims> settleClaimsList = settleClaimsMapper.selectList(new QueryWrapper<SettleClaims>().lambda()
                        .eq(SettleClaims::getStatus,Constants.SettleClaimsStatus.CLOSE_CASE.getKey())
                .eq(SettleClaims::getIsdeleted,Constants.ZERO));
        List<DataListVO> monthTotalMoneyDataList = new ArrayList<>();
        for (int i = -11; i <= 0 ; i++) {
            String month = DateUtil.DateToStr(
                    DateUtil.afterDateByType(new Date(),1,i),"yyyy-MM");
            DataListVO dataListVO = new DataListVO();
            dataListVO.setDataFirst(month);
            if (CollectionUtils.isNotEmpty(settleClaimsList)) {
                BigDecimal hpAccount = settleClaimsList.stream().filter(j->DateUtil.DateToStr(j.getCreateDate(),"yyyy-MM").equals(month))
                        .map(j->j.getHpAccount().add(j.getHpOtherAccount())).reduce(BigDecimal.ZERO,BigDecimal::add);
                dataListVO.setDataSecond(hpAccount.compareTo(BigDecimal.ZERO)>Constants.ZERO?
                        hpAccount.divide(new BigDecimal("10000"),2,BigDecimal.ROUND_HALF_UP).toString():"0"
                );
            }else{
                dataListVO.setDataSecond("0");
            }
            monthTotalMoneyDataList.add(dataListVO);
        }
        return monthTotalMoneyDataList;
    }
    @Override
    public List<DataListVO> getInsuranceApplyStatusData(LoginUserInfo loginUserInfo){
        List<DataListVO> dataListVOList = new ArrayList<>();
        //待生效
        DataListVO dataListVOA = new DataListVO();
        dataListVOA.setDataFirst("待生效");
        dataListVOA.setDataSecond(
                insuranceApplyMapper.selectCount(new QueryWrapper<InsuranceApply>().lambda().eq(InsuranceApply::getIsdeleted,Constants.ZERO)
                        .in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                                .eq(InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                        .apply("  start_time > now() ")
                ).toString()
        );
        dataListVOList.add(dataListVOA);
        //保障中
        DataListVO dataListVOB = new DataListVO();
        dataListVOB.setDataFirst("保障中");
        dataListVOB.setDataSecond(
                insuranceApplyMapper.selectCount(new QueryWrapper<InsuranceApply>().lambda().eq(InsuranceApply::getIsdeleted,Constants.ZERO)
                        .in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                        .eq(InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                        .apply("  start_time <= now()  and  end_time >= now()")
                ).toString()
        );
        dataListVOList.add(dataListVOB);
        //已过期
        DataListVO dataListVOC = new DataListVO();
        dataListVOC.setDataFirst("已过期");
        dataListVOC.setDataSecond(
                insuranceApplyMapper.selectCount(new QueryWrapper<InsuranceApply>().lambda().eq(InsuranceApply::getIsdeleted,Constants.ZERO)
                        .in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                        .eq(InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                        .apply("   end_time < now()")
                ).toString()
        );
        dataListVOList.add(dataListVOC);
        return dataListVOList;
    }
    @Override
    public List<DataListVO> getInsuranceMemberData(LoginUserInfo loginUserInfo){
        List<DataListVO> dataListVOList = new ArrayList<>();
        //待生效
        DataListVO dataListVOA = new DataListVO();
        dataListVOA.setDataFirst("不在保");
        dataListVOA.setDataSecond(
                applyDetailJoinMapper.selectJoinCount( new MPJLambdaWrapper<ApplyDetail>()
                                .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                                .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                                .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                                .in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                                .eq(InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                                .apply("  t.END_TIME < now() ")).toString()
        );
        dataListVOList.add(dataListVOA);
        //保障中
        DataListVO dataListVOB = new DataListVO();
        dataListVOB.setDataFirst("保障中");
        dataListVOB.setDataSecond(
                applyDetailJoinMapper.selectJoinCount( new MPJLambdaWrapper<ApplyDetail>()
                        .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyDetail::getApplyId)
                        .eq(ApplyDetail::getIsdeleted, Constants.ZERO)
                        .eq(InsuranceApply::getIsdeleted, Constants.ZERO)
                        .in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                        .eq(InsuranceApply::getCompanyId,loginUserInfo.getCompanyId())
                        .apply("  t.END_TIME >= now() ")).toString()
        );
        dataListVOList.add(dataListVOB);
        return dataListVOList;
    }
}