Просмотр исходного кода

Merge branch 'test' of http://www.baoxianzhanggui.com:8090/sxzgd/java-insagent-pc into test

guoweisong 2 лет назад
Родитель
Сommit
fd9ca68638

+ 7 - 0
src/main/java/com/ydtech/modules/esm/service/EsmInsCompanyService.java

@@ -59,6 +59,13 @@ public interface EsmInsCompanyService extends IService<EsmInsCompany> {
      * @return
      */
     List<String> getAllRelationCompanyId(String companyId);
+
+    /**
+     * 获取指定保险公司的下一级保司列表,入参为空时,直接返回顶层保司
+     * @param companyId
+     * @return
+     */
+    List<String> getInsCompanyNextLevel(String companyId);
 }
 
 

+ 19 - 0
src/main/java/com/ydtech/modules/esm/service/impl/EsmInsCompanyServiceImpl.java

@@ -146,6 +146,25 @@ public class EsmInsCompanyServiceImpl extends ServiceImpl<EsmInsCompanyMapper, E
         }
         return result;
     }
+
+    @Override
+    public List<String> getInsCompanyNextLevel(String companyId){
+        List<String> result=new ArrayList<>();
+        LambdaQueryWrapper<EsmInsCompany> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EsmInsCompany::getType,"1");
+        if(StringUtils.isNotEmpty(companyId)){
+            //不为空时,需要找选定机构的下一层
+            wrapper.eq(EsmInsCompany::getParentId,companyId);
+        }else{
+            //为空时,直接查询顶层保险公司机构  parentid=0
+            wrapper.eq(EsmInsCompany::getParentId,"0");
+        }
+        List<EsmInsCompany> allList = list(wrapper);
+        allList.forEach(item -> {
+             result.add(item.getId());
+        });
+        return result;
+    }
 }
 
 

+ 93 - 1
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlySettleServiceImpl.java

@@ -7,7 +7,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.esm.service.EsmInsCompanyService;
 import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
 import com.ydtech.modules.fnc.dao.InsPlySettleDetailMapper;
 import com.ydtech.modules.fnc.dao.InsPlySettleHxMapper;
@@ -40,6 +43,7 @@ import java.sql.Wrapper;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.YearMonth;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -62,7 +66,8 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
     private InsPlyIncomeMapper insPlyIncomeMapper;
     @Autowired
     private InsPlySettleHxMapper insPlySettleHxMapper;
-
+    @Autowired
+    private EsmInsCompanyService esmInsCompanyService;
 
     @Override
     @Transactional
@@ -211,8 +216,52 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
     public BasePageResult<InsPlySettleReportResVo> getInsPlySettleReport( InsPlySettleReportReqVo insPlySettleReportReqVo) {
         Page<InsOrders> page = new Page<>(insPlySettleReportReqVo.getPageNum(), insPlySettleReportReqVo.getPageSize());
         page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
+        if(StringUtils.isNotEmpty(insPlySettleReportReqVo.getIsReturnBack())&&"1".equals(insPlySettleReportReqVo.getIsReturnBack())){
+            //如果是返回上级时,找上级的上级往下找
+            LambdaQueryWrapper<EsmInsCompany> lqw1 = new LambdaQueryWrapper<>();
+            lqw1.eq(EsmInsCompany::getId, insPlySettleReportReqVo.getCompanyId());
+            EsmInsCompany esmInsCompany1=esmInsCompanyService.getOne(lqw1);
+            if(esmInsCompany1==null){
+                throw new SystemException("已经是最顶层机构,无法继续返回!");
+            }
+            LambdaQueryWrapper<EsmInsCompany> lqw2 = new LambdaQueryWrapper<>();
+            lqw2.eq(EsmInsCompany::getId, esmInsCompany1.getParentId());
+            EsmInsCompany esmInsCompany2=esmInsCompanyService.getOne(lqw2);
+            if(esmInsCompany2==null){
+                insPlySettleReportReqVo.setCompanyId(esmInsCompany1.getParentId());
+            }else{
+                insPlySettleReportReqVo.setCompanyId(esmInsCompany2.getParentId());
+            }
+        }
+
+        //正常查询,下钻查询时调整
+        List<String> companyArr=esmInsCompanyService.getInsCompanyNextLevel(insPlySettleReportReqVo.getCompanyId());
+        if(!(companyArr!=null&&companyArr.size()>0)){
+            throw new SystemException("已经是最底层机构,无法继续下钻!");
+        }
+        insPlySettleReportReqVo.setGroupInsCompanyArr(companyArr);
+
         Page<InsPlySettleReportResVo> policyInsuranceReportResVoPage = baseMapper.getInsPlySettleReport(page,
                 insPlySettleReportReqVo);
+        if(policyInsuranceReportResVoPage.getRecords().size()==0){
+            throw new SystemException("未查询到有效数据!");
+        }
+        policyInsuranceReportResVoPage.getRecords().stream().forEach(item->{
+            EsmInsCompany esmInsCompany =esmInsCompanyService.getById(item.getCompanyId());
+            item.setCompanyName(esmInsCompany.getName());
+            if(StringUtils.isEmpty(item.getStatus())){
+                item.setStatus("全部");
+            }else{
+                if("0".equals(item.getStatus())){
+                    item.setStatus("未核销");
+                }else if("1".equals(item.getStatus())){
+                    item.setStatus("部分核销");
+                }else if ("2".equals(item.getStatus())){
+                    item.setStatus("已核销");
+                }
+            }
+        });
+
         Long total = baseMapper.getInsPlySettleReportCount(insPlySettleReportReqVo);
         policyInsuranceReportResVoPage.setTotal(total);
         return new BasePageResult<>(insPlySettleReportReqVo.getPageNum(), insPlySettleReportReqVo.getPageSize(),
@@ -222,7 +271,50 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
 
     @Override
     public HttpResult<String> exportInsPlySettleReport(InsPlySettleReportReqVo insPlySettleReportReqVo) {
+        if(StringUtils.isNotEmpty(insPlySettleReportReqVo.getIsReturnBack())&&"1".equals(insPlySettleReportReqVo.getIsReturnBack())){
+            //如果是返回上级时,找上级的上级往下找
+            LambdaQueryWrapper<EsmInsCompany> lqw1 = new LambdaQueryWrapper<>();
+            lqw1.eq(EsmInsCompany::getId, insPlySettleReportReqVo.getCompanyId());
+            EsmInsCompany esmInsCompany1=esmInsCompanyService.getOne(lqw1);
+            if(esmInsCompany1==null){
+                throw new SystemException("已经是最顶层机构,无法继续返回!");
+            }
+            LambdaQueryWrapper<EsmInsCompany> lqw2 = new LambdaQueryWrapper<>();
+            lqw2.eq(EsmInsCompany::getId, esmInsCompany1.getParentId());
+            EsmInsCompany esmInsCompany2=esmInsCompanyService.getOne(lqw2);
+            if(esmInsCompany2==null){
+                insPlySettleReportReqVo.setCompanyId(esmInsCompany1.getParentId());
+            }else{
+                insPlySettleReportReqVo.setCompanyId(esmInsCompany2.getParentId());
+            }
+        }
+
+        //正常查询,下钻查询时调整
+        List<String> companyArr=esmInsCompanyService.getInsCompanyNextLevel(insPlySettleReportReqVo.getCompanyId());
+        if(!(companyArr!=null&&companyArr.size()>0)){
+            throw new SystemException("已经是最底层机构,无法继续下钻!");
+        }
+        insPlySettleReportReqVo.setGroupInsCompanyArr(companyArr);
+
         List<InsPlySettleReportResVo> insPlySettleReportResVoList = baseMapper.getInsPlySettleReport(insPlySettleReportReqVo);
+        if(insPlySettleReportResVoList.size()==0){
+            throw new SystemException("未查询到有效数据!");
+        }
+        insPlySettleReportResVoList.stream().forEach(item->{
+            EsmInsCompany esmInsCompany =esmInsCompanyService.getById(item.getCompanyId());
+            item.setCompanyName(esmInsCompany.getName());
+            if(StringUtils.isEmpty(item.getStatus())){
+                item.setStatus("全部");
+            }else{
+                if("0".equals(item.getStatus())){
+                    item.setStatus("未核销");
+                }else if("1".equals(item.getStatus())){
+                    item.setStatus("部分核销");
+                }else if ("2".equals(item.getStatus())){
+                    item.setStatus("已核销");
+                }
+            }
+        });
         String s = EasyExcelUtils.downExcel(uploadFilePath, InsPlySettleReportResVo.class, insPlySettleReportResVoList);
         return HttpResult.ok("", s);
     }

+ 63 - 0
src/main/java/com/ydtech/modules/inv/controller/InvReceivableController.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.inv.controller;
 
 import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.modules.base.controller.BaseController;
@@ -15,11 +16,18 @@ import com.ydtech.modules.inv.service.InvChannelAccountService;
 import com.ydtech.modules.inv.service.InvReceivableService;
 import com.ydtech.modules.inv.utils.EasyExcelUtils;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.utils.excel.ExcelUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.YearMonth;
@@ -36,9 +44,17 @@ import java.util.List;
 @RequestMapping("/InsReceivable")
 @RestController
 public class InvReceivableController extends BaseController {
+
+
     @Autowired
     private InvReceivableService invReceivableService;
 
+    @Value("${upload.file.path}")
+    private String uploadPath;
+
+    @Value("${upload.file.url}")
+    private String uploadUrl;
+
     @ApiOperation("应收导入数据分页查询")
     @PostMapping("receivablePage")
     public HttpResult<PageResult> receivablePage(@RequestBody InvSourceQueryVo invSourceQueryVo){
@@ -56,6 +72,19 @@ public class InvReceivableController extends BaseController {
         return b ? HttpResult.ok("修改成功") : HttpResult.error("修改失败");
     }
 
+    @ApiOperation("应收表导出")
+    @PostMapping("exportReceivable")
+    public HttpResult<PageResult> exportReceivable(@RequestBody InvSourceQueryVo invSourceQueryVo) throws IOException {
+        List<InvSource> recivablePage = invReceivableService.getRecivableList(invSourceQueryVo);
+        String uploadPath = this.uploadPath + "/excel/";
+        Path path = Paths.get(uploadPath);
+        if(!Files.exists(path)){
+            Files.createDirectories(path);
+        }
+        String fileName = EasyExcelUtils.downExcel(uploadPath, "应收表", InvSource.class, recivablePage);
+        return HttpResult.ok(uploadUrl + "excel/" +fileName);
+    }
+
 
     @ApiOperation("结算导入数据分页查询")
     @PostMapping("settlementPage")
@@ -73,6 +102,19 @@ public class InvReceivableController extends BaseController {
         return b ? HttpResult.ok("修改成功") : HttpResult.error("修改失败");
     }
 
+    @ApiOperation("结算导出")
+    @PostMapping("exportSettlement")
+    public HttpResult<PageResult> exportSettlement(@RequestBody InvSettlementSourceQueryVo invSettlementSourceQueryVo) throws IOException {
+        List<InvSettlementSource> recivableList = invReceivableService.getSettlementList(invSettlementSourceQueryVo);
+        String uploadPath = this.uploadPath + "/excel/";
+        Path path = Paths.get(uploadPath);
+        if(!Files.exists(path)){
+            Files.createDirectories(path);
+        }
+        String fileName = EasyExcelUtils.downExcel(uploadPath, "结算表", InvSettlementSource.class, recivableList);
+        return HttpResult.ok(uploadUrl + "excel/" +fileName);
+    }
+
 
     @ApiOperation("应收结果")
     @GetMapping("receivableResult")
@@ -121,4 +163,25 @@ public class InvReceivableController extends BaseController {
         return HttpResult.ok(insureCompany);
     }
 
+    @ApiOperation("应收应付表")
+    @PostMapping("receivableAndSettlement")
+    public HttpResult<PageResult> receivableAndSettlement(@RequestBody ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo){
+        Page<ReceivableAndSettlementVo> invChannelAccountList = invReceivableService.getReceivableAndSettlementPage(receivableAndSettlementQueryVo);
+        PageResult pageResult = buildPageResponse(invChannelAccountList);
+        return HttpResult.ok(pageResult);
+    }
+
+    @ApiOperation("导出应收应付表")
+    @PostMapping("excelReceivableAndSettlement")
+    public HttpResult excelReceivableAndSettlement(@RequestBody ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) throws IOException {
+        String uploadPath = this.uploadPath + "/excel/";
+        Path path = Paths.get(uploadPath);
+        if(!Files.exists(path)){
+            Files.createDirectories(path);
+        }
+        List<ReceivableAndSettlementVo> invChannelAccountList = invReceivableService.getReceivableAndSettlementList(receivableAndSettlementQueryVo);
+        String fileName = EasyExcelUtils.downExcel(uploadPath, "应收应付表", ReceivableAndSettlementVo.class, invChannelAccountList);
+        return HttpResult.ok(uploadUrl + "excel/" +fileName);
+    }
+
 }

+ 7 - 4
src/main/java/com/ydtech/modules/inv/dao/InvReceivableMapper.java

@@ -1,12 +1,11 @@
 package com.ydtech.modules.inv.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.inv.model.po.InvChannelAccount;
-import com.ydtech.modules.inv.model.vo.ReceivableResultVo;
-import com.ydtech.modules.inv.model.vo.SettlementSourceDataVo;
-import com.ydtech.modules.inv.model.vo.SettlementSourceResultVo;
-import com.ydtech.modules.inv.model.vo.SigningSourceResultVo;
+import com.ydtech.modules.inv.model.vo.*;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.HashMap;
 import java.util.List;
@@ -31,6 +30,10 @@ public interface InvReceivableMapper extends BaseMapper<InvChannelAccount> {
     List<HashMap> getMaxReceivable(String startTime,String endTime);
 
     List<HashMap> getUnsettledProfitCalculation(String startTime,String endTime);
+
+    Page<ReceivableAndSettlementVo> getReceivableAndSettlementPage(Page page,@Param("param") ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo);
+
+    List<ReceivableAndSettlementVo> getReceivableAndSettlementPage(@Param("param") ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo);
 }
 
 

+ 30 - 2
src/main/java/com/ydtech/modules/inv/model/po/InvSettlementSource.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.inv.model.po;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -13,6 +14,7 @@ import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * 结算来源表
@@ -20,6 +22,8 @@ import lombok.Data;
  */
 @TableName(value ="inv_settlement_source")
 @Data
+@EqualsAndHashCode
+@HeadFontStyle(fontHeightInPoints = 10)
 public class InvSettlementSource implements Serializable {
 
 
@@ -27,6 +31,7 @@ public class InvSettlementSource implements Serializable {
      * 编号
      */
     @TableId(value = "id")
+    @ApiModelProperty("编号")
     private Long id;
 
     /**
@@ -34,18 +39,22 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "employee_id")
     @ApiModelProperty("工号")
+    @ExcelProperty("工号")
     private String employeeId;
 
     @TableField(value = "operations_team")
     @ApiModelProperty("运营小组")
+    @ExcelProperty("运营小组")
     private String operationsTeam;
 
     @TableField(value = "channel_classification")
     @ApiModelProperty("渠道分级")
+    @ExcelProperty("渠道分级")
     private String channelClassification;
 
     @TableField(value = "channel")
     @ApiModelProperty("渠道")
+    @ExcelProperty("渠道")
     private String channel;
 
 
@@ -55,13 +64,15 @@ public class InvSettlementSource implements Serializable {
     @TableField(value = "sign_date")
     @ApiModelProperty("签单日期")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate signDate;
+    @ExcelProperty("签单日期")
+    private String signDate;
 
     /**
      * 车牌号
      */
     @TableField(value = "licenseno")
     @ApiModelProperty("车牌号")
+    @ExcelProperty("车牌号")
     private String licenseno;
 
     /**
@@ -69,6 +80,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "insured_name")
     @ApiModelProperty("被保险人")
+    @ExcelProperty("被保险人")
     private String insuredName;
 
     /**
@@ -76,12 +88,14 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "insurance_id")
     @ApiModelProperty("保司编码")
+    @ExcelProperty("保司编码")
     private String insuranceId;
     /**
      * 保险公司
      */
     @TableField(value = "insurance_company")
     @ApiModelProperty("保险公司")
+    @ExcelProperty("保险公司")
     private String insuranceCompany;
 
     /**
@@ -89,6 +103,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "insurance_type")
     @ApiModelProperty("险种")
+    @ExcelProperty("险种")
     private String insuranceType;
 
     /**
@@ -96,6 +111,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "business_owner")
     @ApiModelProperty("业务归属")
+    @ExcelProperty("业务归属")
     private String businessOwner;
 
     /**
@@ -103,6 +119,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "jq_policy_id")
     @ApiModelProperty("交强保单号")
+    @ExcelProperty("交强保单号")
     private String jqPolicyId;
 
     /**
@@ -110,6 +127,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "sy_policy_id")
     @ApiModelProperty("商业保单号")
+    @ExcelProperty("商业保单号")
     private String syPolicyId;
 
     /**
@@ -117,6 +135,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "non_car_policy_id")
     @ApiModelProperty("非车保单号")
+    @ExcelProperty("非车保单号")
     private String nonCarPolicyId;
 
     /**
@@ -124,6 +143,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "jq_premium_tax")
     @ApiModelProperty("交强保费")
+    @ExcelProperty("交强保费")
     private BigDecimal jqPremiumTax;
 
     /**
@@ -131,6 +151,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "vehicle_tax")
     @ApiModelProperty("车船税")
+    @ExcelProperty("车船税")
     private BigDecimal vehicleTax;
 
     /**
@@ -138,6 +159,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "sy_premium_tax")
     @ApiModelProperty("商业保费")
+    @ExcelProperty("商业保费")
     private BigDecimal syPremiumTax;
 
     /**
@@ -145,6 +167,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "non_car_premium_tax")
     @ApiModelProperty("非车保费")
+    @ExcelProperty("非车保费")
     private BigDecimal nonCarPremiumTax;
 
     /**
@@ -152,6 +175,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "compulsory_export_ratio")
     @ApiModelProperty("交强出口比例")
+    @ExcelProperty("交强出口比例")
     private BigDecimal compulsoryExportRatio;
 
     /**
@@ -159,6 +183,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "commercial_export_ratio")
     @ApiModelProperty("商业出口比例")
+    @ExcelProperty("商业出口比例")
     private BigDecimal commercialExportRatio;
 
     /**
@@ -166,6 +191,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "non_vehicle_export_ratio")
     @ApiModelProperty("非车出口比例")
+    @ExcelProperty("非车出口比例")
     private BigDecimal nonVehicleExportRatio;
 
     /**
@@ -173,6 +199,7 @@ public class InvSettlementSource implements Serializable {
      */
     @TableField(value = "settlement_amount")
     @ApiModelProperty("结算金额")
+    @ExcelProperty("结算金额")
     private BigDecimal settlementAmount;
 
     /**
@@ -181,7 +208,8 @@ public class InvSettlementSource implements Serializable {
     @TableField(value = "agency_settlement_time")
     @ApiModelProperty("代理结算时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate agencySettlementTime;
+    @ExcelProperty("代理结算时间")
+    private String agencySettlementTime;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;

+ 51 - 1
src/main/java/com/ydtech/modules/inv/model/po/InvSource.java

@@ -1,6 +1,11 @@
 package com.ydtech.modules.inv.model.po;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentFontStyle;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.alibaba.excel.annotation.write.style.HeadStyle;
+import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -13,6 +18,7 @@ import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * 来源表
@@ -20,6 +26,8 @@ import lombok.Data;
  */
 @TableName(value ="inv_source")
 @Data
+@EqualsAndHashCode
+@HeadFontStyle(fontHeightInPoints = 10)
 public class InvSource implements Serializable {
 
 
@@ -28,6 +36,7 @@ public class InvSource implements Serializable {
      */
     @TableId(value = "id")
     @ApiModelProperty("编号")
+    @ExcelProperty("编号")
     private String id;
 
     /**
@@ -35,6 +44,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "insurance_id")
     @ApiModelProperty("保司编码")
+    @ExcelProperty("保司编码")
     private String insuranceId;
 
 
@@ -43,6 +53,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "insurance_name")
     @ApiModelProperty("保司名称")
+    @ExcelProperty("保司名称")
     private String insuranceName;
 
     /**
@@ -50,6 +61,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "insurance_dept")
     @ApiModelProperty("保司机构")
+    @ExcelProperty("保司机构")
     private String insuranceDept;
 
     /**
@@ -57,6 +69,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "insurance_dept_id")
     @ApiModelProperty("保司机构id")
+    @ExcelProperty("保司机构id")
     private String insuranceDeptId;
 
     /**
@@ -64,6 +77,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "risk")
     @ApiModelProperty("险种")
+    @ExcelProperty("险种")
     private String risk;
 
     /**
@@ -71,6 +85,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "jq_policy_id")
     @ApiModelProperty("交强保单号")
+    @ExcelProperty("交强保单号")
     private String jqPolicyId;
 
     /**
@@ -78,6 +93,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "jq_premium_tax")
     @ApiModelProperty("交强保费(含税)")
+    @ExcelProperty("交强保费(含税)")
     private BigDecimal jqPremiumTax;
 
     /**
@@ -85,6 +101,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "jq_premium")
     @ApiModelProperty("交强保费(不含税)")
+    @ExcelProperty("交强保费(不含税)")
     private BigDecimal jqPremium;
 
     /**
@@ -92,6 +109,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "sy_policy_id")
     @ApiModelProperty("商业保单号")
+    @ExcelProperty("商业保单号")
     private String syPolicyId;
 
     /**
@@ -99,6 +117,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "sy_premium_tax")
     @ApiModelProperty("商业保费(含税)")
+    @ExcelProperty("商业保费(含税)")
     private BigDecimal syPremiumTax;
 
     /**
@@ -106,6 +125,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "sy_premium")
     @ApiModelProperty("商业保费(不含税)")
+    @ExcelProperty("商业保费(不含税)")
     private BigDecimal syPremium;
 
     /**
@@ -113,6 +133,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "non_car_policy_id")
     @ApiModelProperty("非车保单号")
+    @ExcelProperty("非车保单号")
     private String nonCarPolicyId;
 
     /**
@@ -120,6 +141,7 @@ public class InvSource implements Serializable {
      */
     @ApiModelProperty("非车保单号")
     @TableField(value = "non_car_premium_tax")
+    @ExcelProperty("非车保费(含税)")
     private BigDecimal nonCarPremiumTax;
 
     /**
@@ -127,6 +149,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "non_car_premium")
     @ApiModelProperty("非车保费(不含税)")
+    @ExcelProperty("非车保费(不含税)")
     private BigDecimal nonCarPremium;
 
     /**
@@ -134,6 +157,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "insured_name")
     @ApiModelProperty("被保险人名字")
+    @ExcelProperty("被保险人名字")
     private String insuredName;
 
     /**
@@ -141,6 +165,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "licenseno")
     @ApiModelProperty("车牌号")
+    @ExcelProperty("车牌号")
     private String licenseno;
 
     /**
@@ -149,7 +174,8 @@ public class InvSource implements Serializable {
     @TableField(value = "signing_time")
     @ApiModelProperty("出单日期")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate signingTime;
+    @ExcelProperty("出单日期")
+    private String signingTime;
 
     /**
      * 结算日期
@@ -157,6 +183,7 @@ public class InvSource implements Serializable {
     @TableField(value = "clearing_time")
     @ApiModelProperty("结算日期")
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelProperty("结算日期")
     private String clearingTime;
 
     /**
@@ -164,6 +191,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "taxamount")
     @ApiModelProperty("车船税")
+    @ExcelProperty("车船税")
     private BigDecimal taxamount;
 
     /**
@@ -171,6 +199,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "jq_receivable_ratio")
     @ApiModelProperty("交强应收比例")
+    @ExcelProperty("交强应收比例")
     private BigDecimal jqReceivableRatio;
 
     /**
@@ -178,6 +207,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "jq_premium_ratio")
     @ApiModelProperty("交强手续费比例")
+    @ExcelProperty("交强手续费比例")
     private BigDecimal jqPremiumRatio;
 
     /**
@@ -185,6 +215,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "jq_non_copying_ratio")
     @ApiModelProperty("交强非跟单比例")
+    @ExcelProperty("交强非跟单比例")
     private BigDecimal jqNonCopyingRatio;
 
     /**
@@ -192,6 +223,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "sy_receivable_ratio")
     @ApiModelProperty("商业应收比例")
+    @ExcelProperty("商业应收比例")
     private BigDecimal syReceivableRatio;
 
     /**
@@ -199,6 +231,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "sy_premium_ratio")
     @ApiModelProperty("商业手续费比例")
+    @ExcelProperty("商业手续费比例")
     private BigDecimal syPremiumRatio;
 
     /**
@@ -206,6 +239,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "sy_non_copying_ratio")
     @ApiModelProperty("商业非跟单比例")
+    @ExcelProperty("商业非跟单比例")
     private BigDecimal syNonCopyingRatio;
 
     /**
@@ -213,6 +247,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "non_car_receivable_ratio")
     @ApiModelProperty("非车应收比例")
+    @ExcelProperty("非车应收比例")
     private BigDecimal nonCarReceivableRatio;
 
     /**
@@ -220,6 +255,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "non_car_premium_ratio")
     @ApiModelProperty("非车手续费比例")
+    @ExcelProperty("非车手续费比例")
     private BigDecimal nonCarPremiumRatio;
 
     /**
@@ -227,6 +263,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "non_car_non_copying_ratio")
     @ApiModelProperty("非车非跟单比例")
+    @ExcelProperty("非车非跟单比例")
     private BigDecimal nonCarNonCopyingRatio;
 
     /**
@@ -234,6 +271,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "premium")
     @ApiModelProperty("手续费金额")
+    @ExcelProperty("手续费金额")
     private BigDecimal premium;
 
     /**
@@ -241,6 +279,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "non_copying")
     @ApiModelProperty("非跟单金额")
+    @ExcelProperty("非跟单金额")
     private BigDecimal nonCopying;
 
     /**
@@ -248,6 +287,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "receivable")
     @ApiModelProperty("保司应收金额")
+    @ExcelProperty("保司应收金额")
     private BigDecimal receivable;
 
     @ExcelProperty("补贴比例")
@@ -264,6 +304,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "max_jq_receivable_ratio")
     @ApiModelProperty("最大交强应付比例")
+    @ExcelProperty("最大交强应付比例")
     private BigDecimal maxJqReceivableRatio;
 
     /**
@@ -271,6 +312,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "max_sy_receivable_ratio")
     @ApiModelProperty("最大交强应付比例")
+    @ExcelProperty("最大交强应付比例")
     private BigDecimal maxSyReceivableRatio;
 
     /**
@@ -278,6 +320,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "max_non_car_receivable_ratio")
     @ApiModelProperty("最大交强应付比例")
+    @ExcelProperty("最大交强应付比例")
     private BigDecimal maxNonCarReceivableRatio;
 
     /**
@@ -285,6 +328,7 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "max_receivable")
     @ApiModelProperty("最大应收金额")
+    @ExcelProperty("最大应收金额")
     private BigDecimal maxReceivable;
 
     /**
@@ -292,8 +336,14 @@ public class InvSource implements Serializable {
      */
     @TableField(value = "clearing_state")
     @ApiModelProperty("结算状态 (0 已认领 (未结) 1已认领(结算) 2未认领 3Singleton)")
+    @ExcelProperty("结算状态")
     private String clearingState;
 
+    @TableField(value = "insurance_clearing_state")
+    @ApiModelProperty("保司结算状态")
+    @ExcelProperty("保司结算状态")
+    private String insuranceClearingState;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 38 - 0
src/main/java/com/ydtech/modules/inv/model/vo/ReceivableAndSettlementQueryVo.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.inv.model.vo;
+
+import com.ydtech.core.page.PageRequest;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 应收应付 查询
+ */
+@Data
+public class ReceivableAndSettlementQueryVo extends PageRequest {
+    @ApiModelProperty(value = "运营团队")
+    private String operationsTeam; // 操作团队
+    @ApiModelProperty(value = "渠道分类")
+    private String channelClassification; // 渠道分类
+    @ApiModelProperty(value = "签约日期开始")
+    private String signDateStartTime; // 签约日期开始
+    @ApiModelProperty(value = "签约日期结束")
+    private String signDateEndTime; // 签约日期结束
+    @ApiModelProperty(value = "渠道")
+    private String channel; // 渠道
+    @ApiModelProperty(value = "车牌号")
+    private String licenseNo; // 执照号
+    @ApiModelProperty(value = "被保人")
+    private String insuredName; // 被保险人姓名
+    @ApiModelProperty(value = "保险公司")
+    private String insuranceId; // 保险ID
+    @ApiModelProperty(value = "部门id")
+    private String insuranceDeptId; // 保险部门ID
+    @ApiModelProperty(value = "代理结算开始时间")
+    private String agencySettlementTimeStartTime; // 代理结算时间开始
+    @ApiModelProperty(value = "代理结算结束时间")
+    private String agencySettlementTimeEndTime; // 代理结算时间结束
+    @ApiModelProperty(value = "结算状态")
+    private String clearingState; // 结算状态
+}

+ 184 - 0
src/main/java/com/ydtech/modules/inv/model/vo/ReceivableAndSettlementVo.java

@@ -0,0 +1,184 @@
+package com.ydtech.modules.inv.model.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.ydtech.modules.nai.httpvo.excel.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 应收应付
+ */
+@Data
+@EqualsAndHashCode
+@HeadFontStyle(fontHeightInPoints = 10)
+public class ReceivableAndSettlementVo {
+    @ApiModelProperty(value = "运营团队")
+    @ExcelProperty(value = "运营团队")
+    private String operationsTeam; // 操作团队
+
+    @ApiModelProperty(value = "渠道分类")
+    @ExcelProperty(value = "渠道分类")
+    private String channelClassification; // 渠道分类
+
+    @ApiModelProperty(value = "签约日期")
+    @ExcelProperty(value = "签约日期")
+    private String signDate; // 签约日期
+
+    @ApiModelProperty(value = "渠道")
+    @ExcelProperty(value = "渠道")
+    private String channel; // 渠道
+
+    @ApiModelProperty(value = "车牌号")
+    @ExcelProperty(value = "车牌号")
+    private String licenseNo; // 执照号
+
+    @ApiModelProperty(value = "被保人")
+    @ExcelProperty(value = "被保人")
+    private String insuredName; // 被保险人姓名
+
+    @ApiModelProperty(value = "保险id")
+    @ExcelProperty(value = "保险id")
+    private String insuranceId; // 保险ID
+
+    @ApiModelProperty(value = "保险公司")
+    @ExcelProperty(value = "保险公司")
+    private String insuranceCompany; // 保险公司
+
+    @ApiModelProperty(value = "部门id")
+    @ExcelProperty(value = "部门id")
+    private String insuranceDeptId; // 保险部门ID
+
+    @ApiModelProperty(value = "保险部门")
+    @ExcelProperty(value = "保险部门")
+    private String insuranceDept; // 保险部门
+
+    @ApiModelProperty(value = "保险类型")
+    @ExcelProperty(value = "保险类型")
+    private String insuranceType; // 保险类型
+
+    @ApiModelProperty(value = "业务所有者")
+    @ExcelProperty(value = "业务所有者")
+    private String businessOwner; // 业务所有者
+
+    @ApiModelProperty(value = "交强保单号")
+    @ExcelProperty(value = "交强保单号")
+    private String jqPolicyId;
+
+    @ApiModelProperty(value = "交强险税额")
+    @ExcelProperty(value = "交强险税额")
+    private String jqPremiumTax; // 交强险税额
+
+    @ApiModelProperty(value = "交强险保费")
+    @ExcelProperty(value = "交强险保费")
+    private String jqPremium; // 交强险保费
+
+    @ApiModelProperty(value = "商业保单号")
+    @ExcelProperty(value = "商业保单号")
+    private String syPolicyId;
+
+    @ApiModelProperty(value = "商业险税额")
+    @ExcelProperty(value = "商业险税额")
+    private String syPremiumTax; // 商业险税额
+
+    @ApiModelProperty(value = "商业险保费")
+    @ExcelProperty(value = "商业险保费")
+    private String syPremium; // 商业险保费
+
+    @ApiModelProperty(value = "非车保单号")
+    @ExcelProperty(value = "非车保单号")
+    private String nonCarPolicyId;
+
+    @ApiModelProperty(value = "非车险税额")
+    @ExcelProperty(value = "非车险税额")
+    private String nonCarPremiumTax; // 非车险税额
+
+    @ApiModelProperty(value = "非车险保费")
+    @ExcelProperty(value = "非车险保费")
+    private String nonCarPremium; // 非车险保费
+
+    @ApiModelProperty(value = "代理结算时间")
+    @ExcelProperty(value = "代理结算时间")
+    private String agencySettlementTime; // 代理结算时间
+
+    @ApiModelProperty(value = "税额")
+    @ExcelProperty(value = "税额")
+    private String taxAmount; // 税额
+
+    @ApiModelProperty(value = "交强险应收比例")
+    @ExcelProperty(value = "交强险应收比例")
+    private String jqReceivableRatio; // 交强险应收比例
+
+    @ApiModelProperty(value = "交强险保费比例")
+    @ExcelProperty(value = "交强险保费比例")
+    private String jqPremiumRatio; // 交强险保费比例
+
+    @ApiModelProperty(value = "交强险非复制比例")
+    @ExcelProperty(value = "交强险非复制比例")
+    private String jqNonCopyingRatio; // 交强险非复制比例
+
+    @ApiModelProperty(value = "商业险应收比例")
+    @ExcelProperty(value = "商业险应收比例")
+    private String syReceivableRatio; // 商业险应收比例
+
+    @ApiModelProperty(value = "商业险保费比例")
+    @ExcelProperty(value = "商业险保费比例")
+    private String syPremiumRatio; // 商业险保费比例
+
+    @ApiModelProperty(value = "商业险非复制比例")
+    @ExcelProperty(value = "商业险非复制比例")
+    private String syNonCopyingRatio; // 商业险非复制比例
+
+    @ApiModelProperty(value = "非车险应收比例")
+    @ExcelProperty(value = "非车险应收比例")
+    private String nonCarReceivableRatio; // 非车险应收比例
+
+    @ApiModelProperty(value = "非车险保费比例")
+    @ExcelProperty(value = "非车险保费比例")
+    private String nonCarPremiumRatio; // 非车险保费比例
+
+    @ApiModelProperty(value = "非车险非复制比例")
+    @ExcelProperty(value = "非车险非复制比例")
+    private String nonCarNonCopyingRatio; // 非车险非复制比例
+
+    @ApiModelProperty(value = "手续费金额")
+    @ExcelProperty(value = "手续费金额")
+    private String premium; // 保费
+
+    @ApiModelProperty(value = "非跟单金额")
+    @ExcelProperty(value = "非跟单金额")
+    private String nonCopying; // 非复制
+
+    @ApiModelProperty(value = "应收")
+    @ExcelProperty(value = "应收")
+    private String receivable; // 应收
+
+    @ApiModelProperty(value = "补贴比例")
+    @ExcelProperty(value = "补贴比例")
+    private String subsidyRatio; // 补贴比例
+
+    @ApiModelProperty(value = "补贴金额")
+    @ExcelProperty(value = "补贴金额")
+    private String subsidyAmount; // 补贴金额
+
+    @ApiModelProperty(value = "最大交强险应收比例")
+    @ExcelProperty(value = "最大交强险应收比例")
+    private String maxJqReceivableRatio; // 最大交强险应收比例
+
+    @ApiModelProperty(value = "最大商业险应收比例")
+    @ExcelProperty(value = "最大商业险应收比例")
+    private String maxSyReceivableRatio; // 最大商业险应收比例
+
+    @ApiModelProperty(value = "最大非车险应收比例")
+    @ExcelProperty(value = "最大非车险应收比例")
+    private String maxNonCarReceivableRatio; // 最大非车险应收比例
+
+    @ApiModelProperty(value = "结算状态")
+    @ExcelProperty(value = "结算状态")
+    private String clearingState; // 结算状态
+
+    @ApiModelProperty(value = "保司结算状态")
+    @ExcelProperty(value = "保司结算状态")
+    private String insuranceClearingState;
+}

+ 9 - 0
src/main/java/com/ydtech/modules/inv/service/InvReceivableService.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.inv.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.esm.model.EsmInsCompany;
@@ -31,14 +32,22 @@ public interface InvReceivableService {
 
     IPage<InvSource> getRecivablePage(InvSourceQueryVo invSourceQueryVo);
 
+    List<InvSource> getRecivableList(InvSourceQueryVo invSourceQueryVo);
+
     Boolean updateRecivable(InvSource invSource);
 
     IPage<InvSettlementSource> getSettlementPage(InvSettlementSourceQueryVo invSettlementSourceQueryVo);
 
+    List<InvSettlementSource> getSettlementList(InvSettlementSourceQueryVo invSettlementSourceQueryVo);
+
     Boolean updateSettlement(InvSettlementSource invSettlementSource);
 
     Integer syncStatus();
 
     List<EsmInsCompany> getInsureCompany();
 
+    Page<ReceivableAndSettlementVo> getReceivableAndSettlementPage(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo);
+
+    List<ReceivableAndSettlementVo> getReceivableAndSettlementList(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo);
+
 }

+ 110 - 12
src/main/java/com/ydtech/modules/inv/service/impl/InvReceivableServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.MonthDay;
 import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -151,12 +152,23 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         return signingSourceResult;
     }
 
+    public static String[] getNext12MonthsDates(YearMonth startYearMonth) {
+        String[] next12MonthsDates = new String[12];
+        for (int i = 0; i < 12; i++) {
+            YearMonth nextYearMonth = startYearMonth.plusMonths(i);
+            String formattedDate = nextYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+            next12MonthsDates[i] = formattedDate;
+        }
+        return next12MonthsDates;
+    }
+
     @Override
     public List<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr, String insuranceId) {
         // 定义日期时间格式
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
         // 将字符串解析为YearMonth对象
         YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
+        String[] next12MonthsDates = getNext12MonthsDates(yearMonth);
         int maxDays = yearMonth.lengthOfMonth();
         //获取签单数据
         List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceDayResult(yearMonthStr + "-01", yearMonthStr + "-" + maxDays,insuranceId);
@@ -192,26 +204,29 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         int year = yearMonth.getYear();
         //遍历结算数据
         settlementSources.forEach(signing->{
-            String startTime = String.valueOf(year) + "-01-01";
-            String endTime = String.valueOf(year) + "-12-31";
+//            String startTime = String.valueOf(year) + "-01-01";
+//            String endTime = String.valueOf(year) + "-12-31";
+            String startTime = next12MonthsDates[0] + "-01";
+            int day = YearMonth.parse(next12MonthsDates[11], formatter).lengthOfMonth();
+            String endTime = next12MonthsDates[11] + "-" + day;
             List<SettlementSourceDataVo> settlementSourceResultTmp =
                     invReceivableMapper.getSettlementSourceResult(signing.getSignDate(),startTime, endTime, insuranceId);
             List<SettlementSourceDataVo> settlementSourceResult = new ArrayList<>();
             System.out.printf("1");
             //补齐数据
-            for(int i=1;i<=12;i++)
+            for(int i=0;i<12;i++)
             {
                 //查找day是否有数据
-                String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
-                boolean countBol = settlementSourceResultTmp.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
+                String month = next12MonthsDates[i];
+                boolean countBol = settlementSourceResultTmp.stream().filter(x -> month.equals(x.getSettlementDate())).count() > 0 ? true : false;
                 if(!countBol)
                 {
                     SettlementSourceDataVo settlementSourceData = new SettlementSourceDataVo();
-                    settlementSourceData.setDay(finalI);
-                    settlementSourceData.setSettlementDate(year + "-" + finalI);
+                    settlementSourceData.setDay(month);
+                    settlementSourceData.setSettlementDate(next12MonthsDates[i]);
                     settlementSourceResult.add(settlementSourceData);
                 }else{
-                    settlementSourceResult.add(settlementSourceResultTmp.stream().filter(x -> finalI.equals(x.getDay())).findFirst().get());
+                    settlementSourceResult.add(settlementSourceResultTmp.stream().filter(x -> month.equals(x.getSettlementDate())).findFirst().get());
                 }
             }
             signing.setSettlementData(settlementSourceResult);
@@ -242,9 +257,10 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         // 计算每个日期的签单保费 和代理人佣金 竖向计算
         List<SettlementSourceDataVo> settlementSourceDataSum = new ArrayList<>();
 
-        for(int i=1;i<=12;i++){
+        for(int i=0;i<12;i++){
             //提取每个月的数据
-            String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
+//            String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
+            String month = next12MonthsDates[i];
             List<SettlementSourceDataVo> settlementSourceDataVos = new ArrayList<>();
 
             BigDecimal settlementPremium = new BigDecimal(0);
@@ -252,7 +268,7 @@ public class InvReceivableServiceImpl implements InvReceivableService {
 
             for(int j=0;j<settlementSources.size();j++){
 
-                List<SettlementSourceDataVo> collect = settlementSources.get(j).getSettlementData().stream().filter(x -> x.getDay() != null && x.getDay().equals(finalI)).collect(Collectors.toList());
+                List<SettlementSourceDataVo> collect = settlementSources.get(j).getSettlementData().stream().filter(x -> x.getSettlementDate() != null && x.getSettlementDate().equals(month)).collect(Collectors.toList());
                 for(int k=0;k<collect.size();k++)
                 {
                     settlementPremium = settlementPremium.add(collect.get(k).getAgentCommission());
@@ -260,7 +276,7 @@ public class InvReceivableServiceImpl implements InvReceivableService {
                 }
             }
             SettlementSourceDataVo settlementSourceDataVo = new SettlementSourceDataVo();
-            settlementSourceDataVo.setDay(finalI);
+            settlementSourceDataVo.setDay(month);
             settlementSourceDataVo.setSettlementPremium(settlementPremium);
             settlementSourceDataVo.setAgentCommission(agentCommission);
             settlementSourceDataSum.add(settlementSourceDataVo);
@@ -374,6 +390,42 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         return pageData;
     }
 
+    @Override
+    public List<InvSource> getRecivableList(InvSourceQueryVo invSourceQueryVo) {
+        LambdaQueryWrapper<InvSource> queryWrapper = new LambdaQueryWrapper<>();
+        if(invSourceQueryVo.getLicenseno() != null && !"".equals(invSourceQueryVo.getLicenseno())){
+            queryWrapper.eq(InvSource::getLicenseno,invSourceQueryVo.getLicenseno());
+        }
+        if(invSourceQueryVo.getJqPolicyId() != null && !"".equals(invSourceQueryVo.getJqPolicyId())){
+            queryWrapper.eq(InvSource::getJqPolicyId,invSourceQueryVo.getJqPolicyId());
+        }
+        if(invSourceQueryVo.getSyPolicyId() != null && !"".equals(invSourceQueryVo.getSyPolicyId())){
+            queryWrapper.eq(InvSource::getSyPolicyId,invSourceQueryVo.getSyPolicyId());
+        }
+        if(invSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSourceQueryVo.getNonCarPolicyId())){
+            queryWrapper.eq(InvSource::getNonCarPolicyId,invSourceQueryVo.getNonCarPolicyId());
+        }
+        if(invSourceQueryVo.getInsuranceId() != null && !"".equals(invSourceQueryVo.getInsuranceId())){
+            queryWrapper.in(InvSource::getInsuranceId,invSourceQueryVo.getInsuranceId());
+        }
+        if(invSourceQueryVo.getRisk() != null && !"".equals(invSourceQueryVo.getRisk())){
+            queryWrapper.eq(InvSource::getRisk,invSourceQueryVo.getRisk());
+        }
+        if(invSourceQueryVo.getInsuredName() != null && !"".equals(invSourceQueryVo.getInsuredName())){
+            queryWrapper.like(InvSource::getInsuredName,invSourceQueryVo.getInsuredName());
+        }
+        if(invSourceQueryVo.getClearingTime() != null && !"".equals(invSourceQueryVo.getClearingTime())){
+            String[] split = invSourceQueryVo.getClearingTime().split(",");
+            queryWrapper.between(InvSource::getClearingTime,split[0],split[1]);
+        }
+        if(invSourceQueryVo.getSigningTime() != null && !"".equals(invSourceQueryVo.getSigningTime())){
+            String[] split = invSourceQueryVo.getSigningTime().split(",");
+            queryWrapper.between(InvSource::getSigningTime,split[0],split[1]);
+        }
+        List<InvSource> pageData = invSourceMapper.selectList(queryWrapper);
+        return pageData;
+    }
+
     @Override
     public Boolean updateRecivable(InvSource invSource) {
         BigDecimal tax = new BigDecimal(1.06);
@@ -450,6 +502,37 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         return pageData;
     }
 
+    @Override
+    public List<InvSettlementSource> getSettlementList(InvSettlementSourceQueryVo invSettlementSourceQueryVo) {
+        LambdaQueryWrapper<InvSettlementSource> queryWrapper = new LambdaQueryWrapper<>();
+        if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){
+            queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno());
+        }
+        if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){
+            queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId());
+        }
+        if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){
+            queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId());
+        }
+        if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
+            queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId());
+        }
+        if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){
+            queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId());
+        }
+        if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){
+            queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType());
+        }
+        if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate()))
+        {
+            String[] split = invSettlementSourceQueryVo.getSignDate().split(",");
+            queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]);
+        }
+        List<InvSettlementSource> pageData = invSettlementSourceMapper.selectList(queryWrapper);
+
+        return pageData;
+    }
+
     @Override
     public Boolean updateSettlement(InvSettlementSource invSettlementSource) {
         //处理结算金额
@@ -471,6 +554,21 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         return insureCompany;
     }
 
+    @Override
+    public Page<ReceivableAndSettlementVo> getReceivableAndSettlementPage(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) {
+        Page page = new Page();
+        page.setPages(receivableAndSettlementQueryVo.getPageNum());
+        page.setSize(receivableAndSettlementQueryVo.getPageSize());
+        Page<ReceivableAndSettlementVo> receivableAndSettlementPage = invReceivableMapper.getReceivableAndSettlementPage(page, receivableAndSettlementQueryVo);
+        return receivableAndSettlementPage;
+    }
+
+    @Override
+    public List<ReceivableAndSettlementVo> getReceivableAndSettlementList(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) {
+        List<ReceivableAndSettlementVo> receivableAndSettlementVoList = invReceivableMapper.getReceivableAndSettlementPage(receivableAndSettlementQueryVo);
+        return receivableAndSettlementVoList;
+    }
+
 }
 
 

+ 8 - 0
src/main/java/com/ydtech/modules/inv/utils/EasyExcelUtils.java

@@ -36,6 +36,14 @@ public class EasyExcelUtils {
         return file;
     }
 
+    public static String downExcel(String uploadFilePath, String fileName, Class clz, List<?> list) {
+
+        String file = fileName + System.currentTimeMillis() + ".xlsx";
+        String filePath = uploadFilePath + file;
+        EasyExcel.write(filePath, clz).sheet("1").doWrite(list);
+        return file;
+    }
+
     public static List<InvSourceExcel> readInvSourceExcel(String uploadFilePath, Class clz) {
 
         // 这里默认每次会读取100条数据 然后返回过来 直接调用使用数据就行

+ 7 - 0
src/main/java/com/ydtech/modules/report/model/vo/InsPlySettleReportReqVo.java

@@ -8,6 +8,7 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @Author: CXP
@@ -38,4 +39,10 @@ public class InsPlySettleReportReqVo {
     @ApiModelProperty(value = "页数")
     @Min(value = 1, message = "页数最小为1")
     private int pageNum;
+
+    @ApiModelProperty(value = "需要分组的保险公司列表")
+    private List<String> groupInsCompanyArr;
+
+    @ApiModelProperty(value = "是否返回上层  1 返回上层 0非返回上层")
+    private String isReturnBack;
 }

+ 5 - 1
src/main/java/com/ydtech/modules/report/model/vo/InsPlySettleReportResVo.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.report.model.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
@@ -15,7 +16,6 @@ import java.time.LocalDateTime;
 @Data
 public class InsPlySettleReportResVo {
 
-    @TableField(value = "company_name")
     @ExcelProperty(value = "保险公司")
     private String companyName;
 
@@ -38,4 +38,8 @@ public class InsPlySettleReportResVo {
     @TableField(value = "status")
     @ExcelProperty(value = "账单状态")
     private String status;
+
+    @ExcelIgnore
+    @TableField(value = "company_id")
+    private String companyId;
 }

+ 47 - 51
src/main/resources/mapper/modules/fnc/InsPlySettleMapper.xml

@@ -20,7 +20,7 @@
     </resultMap>
 
     <resultMap id="SettleReportDataMap" type="com.ydtech.modules.report.model.vo.InsPlySettleReportResVo">
-        <result property="companyName" column="company_name" jdbcType="VARCHAR"/>
+        <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
         <result property="settleMonth" column="settle_month" jdbcType="VARCHAR"/>
         <result property="commissionFeevalue" column="commission_feevalue" jdbcType="DECIMAL"/>
         <result property="otherFeevalue" column="other_feevalue" jdbcType="DECIMAL"/>
@@ -29,61 +29,57 @@
     </resultMap>
 
     <select id="getInsPlySettleReport"  resultMap="SettleReportDataMap">
-        SELECT
-        ''company_name,
-        ''settle_month,
-        ''status,
-        SUM(p.`commission_feevalue`) commission_feevalue,
-        SUM(p.`other_feevalue`) other_feevalue,
-        SUM(p.`all_fee_value`) all_fee_value
-        FROM
-        ins_ply_settle p WHERE 1=1
-        <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
-            and p.company_id = #{reportReqVo.companyId}
-        </if>
-        <if test="reportReqVo.status != null and reportReqVo.status != ''">
-            and p.status = #{reportReqVo.status}
-        </if>
-        <if test="reportReqVo.quoteStartDate != null and reportReqVo.quoteEndDate != null">
-            and p.create_time  between #{reportReqVo.quoteStartDate} AND #{reportReqVo.quoteEndDate}
-        </if>
-        GROUP BY p.`settle_month`
-        <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
-            ,p.company_id
-        </if>
-        <if test="reportReqVo.status != null and reportReqVo.status != ''">
-            ,p.status
-        </if>
+        <foreach collection="reportReqVo.groupInsCompanyArr" item="id"
+                 separator=" union all " >
+
+            SELECT
+            #{id} company_id,
+            settle_month,
+            #{reportReqVo.status} status,
+            SUM(p.`commission_feevalue`) commission_feevalue,
+            SUM(p.`other_feevalue`) other_feevalue,
+            SUM(p.`all_fee_value`) all_fee_value
+            FROM
+            ins_ply_settle p WHERE
+            p.company_id in (select id from esm_ins_company  where FIND_IN_SET(id,get_child_list(#{id})))
+            <if test="reportReqVo.status != null and reportReqVo.status != ''">
+                and p.status = #{reportReqVo.status}
+            </if>
+            <if test="reportReqVo.quoteStartDate != null and reportReqVo.quoteEndDate != null">
+                and p.create_time  between #{reportReqVo.quoteStartDate} AND #{reportReqVo.quoteEndDate}
+            </if>
+            GROUP BY p.`settle_month`
+
+        </foreach>
+
+
     </select>
     <select id="getInsPlySettleReportCount" resultType="Long">
         select
         count(1)
         from (
-        SELECT
-        ''company_name,
-        ''settle_month,
-        ''status,
-        SUM(p.`commission_feevalue`) commission_feevalue,
-        SUM(p.`other_feevalue`) other_feevalue,
-        SUM(p.`all_fee_value`) all_fee_value
-        FROM
-        ins_ply_settle p WHERE 1=1
-        <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
-            and p.company_id = #{reportReqVo.companyId}
-        </if>
-        <if test="reportReqVo.status != null and reportReqVo.status != ''">
-            and p.status = #{reportReqVo.status}
-        </if>
-        <if test="reportReqVo.quoteStartDate != null and reportReqVo.quoteEndDate != null">
-            and p.create_time  between #{reportReqVo.quoteStartDate} AND #{reportReqVo.quoteEndDate}
-        </if>
-        GROUP BY p.`settle_month`
-        <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
-            ,p.company_id
-        </if>
-        <if test="reportReqVo.status != null and reportReqVo.status != ''">
-            ,p.status
-        </if>
+        <foreach collection="reportReqVo.groupInsCompanyArr" item="id"
+                 separator=" union all " >
+
+            SELECT
+            #{id} company_id,
+            settle_month,
+            #{reportReqVo.status} status,
+            SUM(p.`commission_feevalue`) commission_feevalue,
+            SUM(p.`other_feevalue`) other_feevalue,
+            SUM(p.`all_fee_value`) all_fee_value
+            FROM
+            ins_ply_settle p WHERE
+            p.company_id in (select id from esm_ins_company  where FIND_IN_SET(id,get_child_list(#{id})))
+            <if test="reportReqVo.status != null and reportReqVo.status != ''">
+                and p.status = #{reportReqVo.status}
+            </if>
+            <if test="reportReqVo.quoteStartDate != null and reportReqVo.quoteEndDate != null">
+                and p.create_time  between #{reportReqVo.quoteStartDate} AND #{reportReqVo.quoteEndDate}
+            </if>
+            GROUP BY p.`settle_month`
+
+        </foreach>
         ) as s
     </select>
     <select id="getInsPlySettleReportList" resultMap="BaseResultMap">

+ 92 - 0
src/main/resources/mapper/modules/inv/InvReceivableMapper.xml

@@ -176,5 +176,97 @@
                 '%Y-%m-%d')
     </select>
 
+    <select id="getReceivableAndSettlementPage" resultType="com.ydtech.modules.inv.model.vo.ReceivableAndSettlementVo">
+        SELECT
+            iss.operations_team,
+            iss.channel_classification,
+            ivs.signing_time as sign_date,
+            iss.channel,
+            ivs.licenseno,
+            ivs.insured_name,
+            ivs.insurance_id,
+            ivs.insurance_name as insurance_company,
+            ivs.insurance_dept_id,
+            ivs.insurance_dept,
+            ivs.risk as insurance_type,
+            iss.business_owner,
+            ivs.jq_policy_id,
+            ivs.jq_premium_tax,
+            ivs.jq_premium,
+            ivs.sy_policy_id,
+            ivs.sy_premium_tax,
+            ivs.sy_premium,
+            ivs.non_car_policy_id,
+            ivs.non_car_premium_tax,
+            ivs.non_car_premium,
+            iss.agency_settlement_time,
+            ivs.taxamount,
+            ivs.jq_receivable_ratio,
+            ivs.jq_premium_ratio,
+            ivs.jq_non_copying_ratio,
+            ivs.sy_receivable_ratio,
+            ivs.sy_premium_ratio,
+            ivs.sy_non_copying_ratio,
+            ivs.non_car_receivable_ratio,
+            ivs.non_car_premium_ratio,
+            ivs.non_car_non_copying_ratio,
+            ivs.premium,
+            ivs.non_copying,
+            ivs.receivable,
+            ivs.subsidy_ratio,
+            ivs.subsidy_amount,
+            ivs.max_jq_receivable_ratio,
+            ivs.max_sy_receivable_ratio,
+            ivs.max_non_car_receivable_ratio,
+            (CASE ivs.clearing_state
+            WHEN 1 THEN '已结算'
+            WHEN 0 THEN '未结算'
+            WHEN 3 THEN '孤儿单'
+            END) as clearing_state,
+            (CASE ivs.insurance_clearing_state
+            WHEN 1 THEN '已结算'
+            WHEN 0 THEN '未结算'
+            WHEN 3 THEN '孤儿单'
+            END) as insurance_clearing_state
+        FROM
+        inv_source ivs
+        LEFT JOIN inv_settlement_source iss ON ivs.licenseno = iss.licenseno
+        AND ivs.jq_policy_id = iss.jq_policy_id
+        AND ivs.sy_policy_id = iss.sy_policy_id
+        AND ivs.non_car_policy_id = iss.non_car_policy_id
+        WHERE
+            1=1
+            <if test="param.signDateStartTime != null and param.signDateStartTime != ''">
+                and iss.sign_date between #{param.signDateStartTime} and #{param.signDateEndTime}
+            </if>
+            <if test="param.agencySettlementTimeStartTime != null and param.agencySettlementTimeStartTime != ''">
+                and iss.agency_settlement_time between #{param.agencySettlementTimeStartTime} and #{param.agencySettlementTimeEndTime}
+            </if>
+            <if test="param.operationsTeam != null and param.operationsTeam != ''">
+                and iss.operations_team = #{param.operationsTeam}
+            </if>
+            <if test="param.channelClassification != null and param.channelClassification != ''">
+                and iss.channel_classification = #{param.channelClassification}
+            </if>
+            <if test="param.channel != null and param.channel != ''">
+                and iss.channel = #{param.channel}
+            </if>
+            <if test="param.licenseNo != null and param.licenseNo != ''">
+                and iss.licenseno = #{param.licenseNo}
+            </if>
+            <if test="param.insuredName != null and param.insuredName != ''">
+                and iss.insured_name = #{param.insuredName}
+            </if>
+            <if test="param.insuranceId != null and param.insuranceId != ''">
+                and ivs.insurance_id = #{param.insuranceId}
+            </if>
+            <if test="param.insuranceDeptId != null and param.insuranceDeptId != ''">
+                and ivs.insurance_dept_id = #{param.insuranceDeptId}
+            </if>
+            <if test="param.clearingState != null and param.clearingState != ''">
+                and iss.clearing_state = #{param.clearingState}
+            </if>
+    </select>
+
 
 </mapper>