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

Merge remote-tracking branch 'origin/test'

y 2 лет назад
Родитель
Сommit
5d54ac8242
38 измененных файлов с 1627 добавлено и 138 удалено
  1. 60 0
      src/main/java/com/ydtech/modules/fnc/controller/InsPlyMainController.java
  2. 18 0
      src/main/java/com/ydtech/modules/fnc/dao/InsPlyMainMapper.java
  3. 2 0
      src/main/java/com/ydtech/modules/fnc/dao/InsPlySettleMapper.java
  4. 275 0
      src/main/java/com/ydtech/modules/fnc/entity/InsPlyMain.java
  5. 1 0
      src/main/java/com/ydtech/modules/fnc/entity/InsPlySettle.java
  6. 24 0
      src/main/java/com/ydtech/modules/fnc/service/InsPlyMainService.java
  7. 7 0
      src/main/java/com/ydtech/modules/fnc/service/InsPlySettleService.java
  8. 3 3
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  9. 450 0
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyMainServiceImpl.java
  10. 8 3
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlySettleServiceImpl.java
  11. 62 0
      src/main/java/com/ydtech/modules/fnc/vo/InsPlyMainVo.java
  12. 55 0
      src/main/java/com/ydtech/modules/fnc/xml/InsPlyMainMapper.xml
  13. 2 0
      src/main/java/com/ydtech/modules/ins/dao/InsCommissionDao.java
  14. 6 0
      src/main/java/com/ydtech/modules/ins/dao/impl/InsCommissionDaoImpl.java
  15. 11 6
      src/main/java/com/ydtech/modules/inv/controller/InvReceivableController.java
  16. 7 1
      src/main/java/com/ydtech/modules/inv/controller/InvSettlementSourController.java
  17. 7 1
      src/main/java/com/ydtech/modules/inv/controller/InvSourceController.java
  18. 13 2
      src/main/java/com/ydtech/modules/inv/dao/InvReceivableMapper.java
  19. 3 0
      src/main/java/com/ydtech/modules/inv/model/po/InvChannelAccount.java
  20. 7 1
      src/main/java/com/ydtech/modules/inv/model/po/InvSettlementSource.java
  21. 5 0
      src/main/java/com/ydtech/modules/inv/model/po/QueryInvChannelAccount.java
  22. 10 3
      src/main/java/com/ydtech/modules/inv/model/vo/InvSettlementSourceQueryVo.java
  23. 2 2
      src/main/java/com/ydtech/modules/inv/model/vo/InvSourceQueryVo.java
  24. 30 0
      src/main/java/com/ydtech/modules/inv/model/vo/SettlementSourceDataVo.java
  25. 31 29
      src/main/java/com/ydtech/modules/inv/model/vo/SettlementSourceResultVo.java
  26. 3 0
      src/main/java/com/ydtech/modules/inv/model/vo/SigningSourceResultVo.java
  27. 9 2
      src/main/java/com/ydtech/modules/inv/service/InvReceivableService.java
  28. 7 4
      src/main/java/com/ydtech/modules/inv/service/impl/InvChannelAccountServiceImpl.java
  29. 244 37
      src/main/java/com/ydtech/modules/inv/service/impl/InvReceivableServiceImpl.java
  30. 20 2
      src/main/java/com/ydtech/modules/report/controller/ReportController.java
  31. 9 2
      src/main/java/com/ydtech/modules/report/model/vo/InsPlySettleReportReqVo.java
  32. 14 10
      src/main/java/com/ydtech/modules/report/model/vo/InsPlySettleReportResVo.java
  33. 3 2
      src/main/java/com/ydtech/utils/excel/ExcelUtils2.java
  34. 55 0
      src/main/resources/mapper/modules/fnc/InsPlyMainMapper.xml
  35. 52 3
      src/main/resources/mapper/modules/fnc/InsPlySettleMapper.xml
  36. 105 18
      src/main/resources/mapper/modules/inv/InvReceivableMapper.xml
  37. 7 7
      src/main/resources/mapper/modules/inv/InvSourceMapper.xml
  38. BIN
      src/main/resources/template/policyImport.xlsx

+ 60 - 0
src/main/java/com/ydtech/modules/fnc/controller/InsPlyMainController.java

@@ -0,0 +1,60 @@
+package com.ydtech.modules.fnc.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.fnc.entity.InsPlyMain;
+import com.ydtech.modules.fnc.service.InsPlyMainService;
+import com.ydtech.modules.fnc.vo.InsPlyMainVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author gws
+ * @since 2024-01-23
+ */
+@Api(tags = "非系统出单保单管理")
+@RestController
+@RequestMapping("/fnc/plyMain")
+public class InsPlyMainController {
+
+    @Autowired
+    private InsPlyMainService insPlyMainService;
+
+    @ApiOperation(value = "保单导入")
+    @PostMapping("/import")
+    public HttpResult plyMainImport(MultipartFile file) {
+
+        HttpResult result = null;
+        try {
+            result = insPlyMainService.excelImport(file);
+        } catch (Exception e) {
+            result = HttpResult.error("保单导入失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+    @ApiOperation(value = "导入保单查询")
+    @PostMapping("/query")
+    public HttpResult<BasePageResult<InsPlyMain>> query(@RequestBody InsPlyMainVo insPlyMainVo) {
+
+        HttpResult result = null;
+        try {
+            result = insPlyMainService.queryPly(insPlyMainVo);
+        } catch (Exception e) {
+            result = HttpResult.error("保单查询失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+}

+ 18 - 0
src/main/java/com/ydtech/modules/fnc/dao/InsPlyMainMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.fnc.dao;
+
+import com.ydtech.modules.fnc.entity.InsPlyMain;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author gws
+ * @since 2024-01-23
+ */
+@Mapper
+public interface InsPlyMainMapper extends BaseMapper<InsPlyMain> {
+
+}

+ 2 - 0
src/main/java/com/ydtech/modules/fnc/dao/InsPlySettleMapper.java

@@ -63,6 +63,8 @@ public interface InsPlySettleMapper extends BaseMapper<InsPlySettle> {
 
 
     List<InsPlySettleReportResVo> getInsPlySettleReport(@Param("reportReqVo")InsPlySettleReportReqVo insPlySettleReportReqVo);
     List<InsPlySettleReportResVo> getInsPlySettleReport(@Param("reportReqVo")InsPlySettleReportReqVo insPlySettleReportReqVo);
 
 
+    List<InsPlySettle> getInsPlySettleReportList(@Param("reportReqVo")InsPlySettleReportReqVo insPlySettleReportReqVo);
+
     Long getInsPlySettleReportCount(@Param("reportReqVo") InsPlySettleReportReqVo insPlySettleReportReqVo);
     Long getInsPlySettleReportCount(@Param("reportReqVo") InsPlySettleReportReqVo insPlySettleReportReqVo);
 
 
 }
 }

+ 275 - 0
src/main/java/com/ydtech/modules/fnc/entity/InsPlyMain.java

@@ -0,0 +1,275 @@
+package com.ydtech.modules.fnc.entity;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author gws
+ * @since 2024-01-23
+ */
+@Getter
+@Setter
+@TableName("ins_ply_main")
+@ApiModel(value = "InsPlyMain对象", description = "")
+public class InsPlyMain implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+
+    @ApiModelProperty("批次号")
+    @Excel(name = "批次号")
+    @TableField("batchno")
+    private String batchno;
+
+    @ApiModelProperty("订单号")
+    @Excel(name = "订单号")
+    @TableField("orderno")
+    private String orderno;
+
+    @ApiModelProperty("保单号")
+    @Excel(name = "保单号")
+    @TableId("policyno")
+    private String policyno;
+
+    @ApiModelProperty("机构代码")
+    @Excel(name = "机构代码")
+    @TableField("dept_id")
+    private String deptId;
+
+    @ApiModelProperty("机构名称")
+    @Excel(name = "机构名称")
+    @TableField(exist = false)
+    private String deptName;
+
+    @ApiModelProperty("业务员工号")
+    @Excel(name = "业务员工号")
+    @TableField("user_id")
+    private String userId;
+
+    @Excel(name = "业务员姓名")
+    @TableField(exist = false)
+    private String userName;
+
+    @ApiModelProperty("险种")
+    @Excel(name = "险种")
+    @TableField("riskcode")
+    private String riskcode;
+
+    @ApiModelProperty("出单时间")
+    @Excel(name = "出单时间",format = "yyyy-MM-dd ",width = 15)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @TableField("pay_date")
+    private LocalDateTime payDate;
+
+    @ApiModelProperty("起保时间")
+    @Excel(name = "起保时间",format = "yyyy-MM-dd ",width = 15)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @TableField("start_date")
+    private LocalDateTime startDate;
+
+    @ApiModelProperty("终保时间")
+    @Excel(name = "终保时间",format = "yyyy-MM-dd ",width = 15)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @TableField("end_date")
+    private LocalDateTime endDate;
+
+    @ApiModelProperty("保险公司编码")
+    @Excel(name = "保险公司编码")
+    @TableField("company_id")
+    private String companyId;
+
+    @Excel(name = "保险公司名称")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty("协议号")
+    @Excel(name = "协议号")
+    @TableField("agreement_id")
+    private String agreementId;
+
+    @ApiModelProperty("车牌号")
+    @Excel(name = "车牌号")
+    @TableField("licenseno")
+    private String licenseno;
+
+    @ApiModelProperty("投保人")
+    @Excel(name = "投保人")
+    @TableField("applyname")
+    private String applyname;
+
+    @ApiModelProperty("投保人联系方式")
+    @Excel(name = "投保人联系方式")
+    @TableField("applyphone")
+    private String applyphone;
+
+    @ApiModelProperty("被保人")
+    @Excel(name = "被保人")
+    @TableField("insurername")
+    private String insurername;
+
+    @ApiModelProperty("被保人联系方式")
+    @Excel(name = "被保人联系方式")
+    @TableField("insurerphone")
+    private String insurerphone;
+
+    @ApiModelProperty("车船税")
+    @Excel(name = "车船税")
+    @TableField("taxamount")
+    private BigDecimal taxamount;
+
+    @ApiModelProperty("保费")
+    @Excel(name = "保费")
+    @TableField("premium")
+    private BigDecimal premium;
+
+    @ApiModelProperty("不含税保费")
+    @Excel(name = "不含税保费")
+    @TableField("no_tax_premium")
+    private BigDecimal noTaxPremium;
+
+    @ApiModelProperty("手续费费用比例(%)")
+    @Excel(name = "手续费费用比例(%)")
+    @TableField("commission_feerate")
+    private BigDecimal commissionFeerate;
+
+    @ApiModelProperty("其他费用比例(%)")
+    @Excel(name = "其他费用比例(%)")
+    @TableField("other_feerate")
+    private BigDecimal otherFeerate;
+
+    @ApiModelProperty("手续费费用")
+    @Excel(name = "手续费费用")
+    @TableField("commission_feevalue")
+    private BigDecimal commissionFeevalue;
+
+    @ApiModelProperty("其他费用")
+    @Excel(name = "其他费用")
+    @TableField("other_feevalue")
+    private BigDecimal otherFeevalue;
+
+    @ApiModelProperty("总费用")
+    @TableField("all_fee_value")
+    private BigDecimal allFeeValue;
+
+    @ApiModelProperty("一级机构管理费比例(%)")
+    @Excel(name = "一级机构管理费比例(%)")
+    @TableField("first_dept_proportion")
+    private BigDecimal firstDeptProportion;
+
+    @ApiModelProperty("一级机构管理费")
+    @Excel(name = "一级机构管理费")
+    @TableField("first_dept_premiums")
+    private BigDecimal firstDeptPremiums;
+
+    @ApiModelProperty("二级机构管理费比例(%)")
+    @Excel(name = "二级机构管理费比例(%)")
+    @TableField("second_dept_proportion")
+    private BigDecimal secondDeptProportion;
+
+    @ApiModelProperty("二级机构管理费")
+    @Excel(name = "二级机构管理费")
+    @TableField("second_dept_premiums")
+    private BigDecimal secondDeptPremiums;
+
+    @ApiModelProperty("三级机构管理费比例(%)")
+    @Excel(name = "三级机构管理费比例(%)")
+    @TableField("third_dept_proportion")
+    private BigDecimal thirdDeptProportion;
+
+    @ApiModelProperty("三级机构管理费")
+    @Excel(name = "三级机构管理费")
+    @TableField("third_dept_premiums")
+    private BigDecimal thirdDeptPremiums;
+
+    @ApiModelProperty("四级机构管理费比例(%)")
+    @Excel(name = "四级机构管理费比例(%)")
+    @TableField("forth_dept_proportion")
+    private BigDecimal forthDeptProportion;
+
+    @ApiModelProperty("四级机构管理费")
+    @Excel(name = "四级机构管理费")
+    @TableField("forth_dept_premiums")
+    private BigDecimal forthDeptPremiums;
+
+    @ApiModelProperty("五级机构管理费比例(%)")
+    @Excel(name = "五级机构管理费比例(%)")
+    @TableField("fifth_dept_proportion")
+    private BigDecimal fifthDeptProportion;
+
+    @ApiModelProperty("五级机构管理费")
+    @Excel(name = "五级机构管理费")
+    @TableField("fifth_dept_premiums")
+    private BigDecimal fifthDeptPremiums;
+
+    @ApiModelProperty("一级分销费比例(%)")
+    @Excel(name = "一级分销费比例(%)")
+    @TableField("first_detail_proportion")
+    private BigDecimal firstDetailProportion;
+
+    @ApiModelProperty("一级分销费")
+    @Excel(name = "一级分销费")
+    @TableField("first_detail_premiums")
+    private BigDecimal firstDetailPremiums;
+
+    @ApiModelProperty("二级分销费比例(%)")
+    @Excel(name = "二级分销费比例(%)")
+    @TableField("second_detail_proportion")
+    private BigDecimal secondDetailProportion;
+
+    @ApiModelProperty("二级分销费")
+    @Excel(name = "二级分销费")
+    @TableField("second_detail_premiums")
+    private BigDecimal secondDetailPremiums;
+
+    @ApiModelProperty("三级分销费比例(%)")
+    @Excel(name = "三级分销费比例(%)")
+    @TableField("third_detail_proportion")
+    private BigDecimal thirdDetailProportion;
+
+    @ApiModelProperty("三级分销费")
+    @Excel(name = "三级分销费")
+    @TableField("third_detail_premiums")
+    private BigDecimal thirdDetailPremiums;
+
+    @ApiModelProperty("业务员结算比例(%)")
+    @Excel(name = "业务员结算比例(%)")
+    @TableField("user_fee_proportion")
+    private BigDecimal userFeeProportion;
+
+    @ApiModelProperty("业务员结算金额")
+    @Excel(name = "业务员结算金额")
+    @TableField("user_feel_premiums")
+    private BigDecimal userFeelPremiums;
+
+    @ApiModelProperty("导入人")
+    @TableField("creator")
+    private String creator;
+
+    @ApiModelProperty("导入时间")
+    @TableField("createtime")
+    private LocalDateTime createtime;
+
+    @ApiModelProperty("修改人")
+    @TableField("updateuser")
+    private String updateuser;
+
+    @ApiModelProperty("修改时间")
+    @TableField("updatetime")
+    private LocalDateTime updatetime;
+}

+ 1 - 0
src/main/java/com/ydtech/modules/fnc/entity/InsPlySettle.java

@@ -34,6 +34,7 @@ public class InsPlySettle implements Serializable {
     @ApiModelProperty("保险公司")
     @ApiModelProperty("保险公司")
     @TableField("company_id")
     @TableField("company_id")
     private String companyId;
     private String companyId;
+
     @ApiModelProperty("保险公司名称")
     @ApiModelProperty("保险公司名称")
     @TableField(exist = false)
     @TableField(exist = false)
     private String companyName;
     private String companyName;

+ 24 - 0
src/main/java/com/ydtech/modules/fnc/service/InsPlyMainService.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.fnc.service;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.fnc.entity.InsPlyMain;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.fnc.vo.InsPlyMainVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author gws
+ * @since 2024-01-23
+ */
+public interface InsPlyMainService extends IService<InsPlyMain> {
+    public HttpResult excelImport(MultipartFile file) throws Exception;
+
+    public HttpResult<BasePageResult<InsPlyMain>> queryPly(InsPlyMainVo insPlyMainVo);
+
+
+}

+ 7 - 0
src/main/java/com/ydtech/modules/fnc/service/InsPlySettleService.java

@@ -48,4 +48,11 @@ public interface InsPlySettleService extends IService<InsPlySettle> {
      */
      */
     public HttpResult<String> exportInsPlySettleReport(InsPlySettleReportReqVo insPlySettleReportReqVo) ;
     public HttpResult<String> exportInsPlySettleReport(InsPlySettleReportReqVo insPlySettleReportReqVo) ;
 
 
+    /**
+     * 报表-月度结算清单-导出明细
+     * @param insPlySettleReportReqVo
+     * @return
+     */
+    public HttpResult<String> exportInsPlySettleReportList(InsPlySettleReportReqVo insPlySettleReportReqVo);
+
 }
 }

+ 3 - 3
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -272,7 +272,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 commission.setLevel("3");
                 commission.setLevel("3");
                 commission.setAuditstatus("1");  //0未审核 1已审核
                 commission.setAuditstatus("1");  //0未审核 1已审核
                 commission.setSettlestatus("0"); //0未结算 1已结算
                 commission.setSettlestatus("0"); //0未结算 1已结算
-                commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
+                commission.setInsuredtime(plyDto.getPayDate().toString()); //承保确认时间
                 if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
                 if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
                     commission.setPolicyno(plyDto.getJqpolicyno());
                     commission.setPolicyno(plyDto.getJqpolicyno());
                     commission.setRiskcode("交强");
                     commission.setRiskcode("交强");
@@ -309,7 +309,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 commission.setLevel("2");
                 commission.setLevel("2");
                 commission.setAuditstatus("1");  //0未审核 1已审核
                 commission.setAuditstatus("1");  //0未审核 1已审核
                 commission.setSettlestatus("0"); //0未结算 1已结算
                 commission.setSettlestatus("0"); //0未结算 1已结算
-                commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
+                commission.setInsuredtime(plyDto.getPayDate().toString()); //承保确认时间
                 if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
                 if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
                     commission.setPolicyno(plyDto.getJqpolicyno());
                     commission.setPolicyno(plyDto.getJqpolicyno());
                     commission.setRiskcode("交强");
                     commission.setRiskcode("交强");
@@ -345,7 +345,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 commission.setLevel("1");
                 commission.setLevel("1");
                 commission.setAuditstatus("1");  //0未审核 1已审核
                 commission.setAuditstatus("1");  //0未审核 1已审核
                 commission.setSettlestatus("0"); //0未结算 1已结算
                 commission.setSettlestatus("0"); //0未结算 1已结算
-                commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
+                commission.setInsuredtime(plyDto.getPayDate().toString()); //承保确认时间
                 if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
                 if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
                     commission.setPolicyno(plyDto.getJqpolicyno());
                     commission.setPolicyno(plyDto.getJqpolicyno());
                     commission.setRiskcode("交强");
                     commission.setRiskcode("交强");

+ 450 - 0
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyMainServiceImpl.java

@@ -0,0 +1,450 @@
+package com.ydtech.modules.fnc.service.impl;
+
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ydtech.aop.exception.DescribeException;
+import com.ydtech.constants.SysConstants;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.dao.SysDeptMapper;
+import com.ydtech.modules.admin.dao.SysUserMapper;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.esm.dao.EsmInsCompanyMapper;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.esm.service.EsmUserReferrerService;
+import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
+import com.ydtech.modules.fnc.entity.InsPlyIncome;
+import com.ydtech.modules.fnc.entity.InsPlyMain;
+import com.ydtech.modules.fnc.dao.InsPlyMainMapper;
+import com.ydtech.modules.fnc.service.InsPlyMainService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.fnc.vo.InsPlyIncomeVo;
+import com.ydtech.modules.fnc.vo.InsPlyMainVo;
+import com.ydtech.modules.ins.model.InsCmain;
+import com.ydtech.modules.ins.model.InsCommission;
+import com.ydtech.modules.ins.model.InsCompanyFee;
+import com.ydtech.modules.ins.model.InsDeptFee;
+import com.ydtech.modules.ins.model.vo.InsCmainExcelVO;
+import com.ydtech.modules.ins.service.InsCommissionService;
+import com.ydtech.modules.ins.service.InsCompanyFeeService;
+import com.ydtech.modules.ins.service.InsDeptFeeService;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.security.PubUserInfo;
+import com.ydtech.utils.BigDecimalUtils;
+import com.ydtech.utils.DateUtil;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.excel.ExcelUtils2;
+import org.jsoup.helper.DataUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author gws
+ * @since 2024-01-23
+ */
+@Service
+public class InsPlyMainServiceImpl extends ServiceImpl<InsPlyMainMapper, InsPlyMain> implements InsPlyMainService {
+
+    @Autowired
+    private EsmInsCompanyMapper esmInsCompanyMapper;
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    @Autowired
+    private InsPlyIncomeMapper insPlyIncomeMapper;
+    @Autowired
+    private InsDeptFeeService insDeptFeeService;
+    @Autowired
+    private InsCommissionService insCommissionService;
+    @Autowired
+    private InsCompanyFeeService insCompanyFeeService;
+    @Autowired
+    private EsmUserReferrerService esmUserReferrerService;
+
+
+    public HttpResult<BasePageResult<InsPlyMain>> queryPly(InsPlyMainVo insPlyMainVo) {
+
+        try {
+            PageInfo<List<InsPlyMain>> pageHelper = null;
+            PageHelper.startPage(insPlyMainVo.getPageNum(), insPlyMainVo.getPageSize());
+            LambdaQueryWrapper<InsPlyMain> wrapper=new LambdaQueryWrapper<InsPlyMain>();
+            wrapper.likeRight(StringUtils.isNotEmpty(insPlyMainVo.getBatchno()),InsPlyMain::getBatchno,insPlyMainVo.getBatchno())
+                    .likeRight(StringUtils.isNotEmpty(insPlyMainVo.getDeptId()),InsPlyMain::getDeptId,insPlyMainVo.getDeptId())
+                    .eq(StringUtils.isNotEmpty(insPlyMainVo.getPolicyno()),InsPlyMain::getPolicyno,insPlyMainVo.getPolicyno())
+                    .between(!ObjectUtils.isEmpty(insPlyMainVo.getStartDate()) && !ObjectUtils.isEmpty(insPlyMainVo.getEndDate()),
+                            InsPlyMain::getCreatetime, insPlyMainVo.getStartDate(), insPlyMainVo.getEndDate())
+                    .eq(StringUtils.isNotEmpty(insPlyMainVo.getCompanyId()),InsPlyMain::getCompanyId,insPlyMainVo.getCompanyId());
+
+            List<InsPlyMain> list = this.baseMapper.selectList(wrapper);
+            pageHelper = new PageInfo(list);
+            BasePageResult<InsPlyMain> pageResult = new BasePageResult<InsPlyMain>(insPlyMainVo.getPageNum(), insPlyMainVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list);
+            return HttpResult.ok(pageResult);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("查询异常");
+        }
+    }
+    /**
+     * 保单导入
+     *
+     * @param file    excel文件
+     * @return
+     */
+    @Transactional
+    @Override
+    public HttpResult excelImport(MultipartFile file) throws Exception {
+        String msg = "导入成功";
+        try {
+            List<InsPlyMain> insPlyMainList = ExcelUtils2.importExcel(file, 0, 1, InsPlyMain.class);
+
+            //  校验保单信息
+            Date date = new Date();
+            int count = 0;
+
+            String batchno = DateUtil.formatFullTime(LocalDateTime.now())+StpUtil.getLoginId().toString();
+            for (int i = 0; i < insPlyMainList.size(); i++) {
+                InsPlyMain excelVo = insPlyMainList.get(i);
+                /**
+                 * 1.校验是否为空
+                 */
+                isNullCmain(i, excelVo);
+               /**
+                 * 2.码值校验:保险公司、协议号、机构代码、业务员工号
+                 */
+                checkData(i, excelVo);
+                excelVo.setAllFeeValue(excelVo.getCommissionFeevalue().add(excelVo.getOtherFeevalue()));
+                excelVo.setBatchno(batchno);
+                excelVo.setCreator(StpUtil.getLoginId().toString());
+                excelVo.setCreatetime(LocalDateTime.now());
+                this.baseMapper.insert(excelVo);
+                //生成保司费用(应收费用)
+                gene_orderIncome(  excelVo);
+                //生成机构费用
+                gene_deptfee( excelVo);
+                //生成分销费用
+                saveRetail(excelVo);
+                //个代费用生成
+                saveInsCompanyFee(excelVo);
+                count++;
+            }
+
+            if (insPlyMainList.size() != count) {
+                throw new DescribeException("导入数据错误,应导入" + insPlyMainList.size() + "条数据,实际导入" + count + "条数据,请检查excel数据格式后重新导入或请联系相关人员!");
+            }
+            msg = "导入成功,批次号:"+batchno+"  成功导入<" + insPlyMainList.size() + ">条数据!";
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw e;
+        }
+        return HttpResult.ok(msg, null);
+    }
+
+    /**
+     * 生成保司费用(应收费用)
+
+     * @throws Exception
+     */
+    private void gene_orderIncome(InsPlyMain excelVo) throws Exception{
+
+        InsPlyIncome insPlyIncome =new InsPlyIncome();
+        insPlyIncome.setOrderno(excelVo.getOrderno());
+        insPlyIncome.setDeptId(excelVo.getDeptId());
+        insPlyIncome.setCompanyId(excelVo.getCompanyId());
+        insPlyIncome.setAgreementId(excelVo.getAgreementId());
+        insPlyIncome.setLicenseno(excelVo.getLicenseno());
+        insPlyIncome.setPayDate(StringUtils.isNullOrEmpty(excelVo.getPayDate())?excelVo.getCreatetime():excelVo.getPayDate());
+        insPlyIncome.setCreateTime(LocalDateTime.now() );
+        insPlyIncome.setPolicyno(excelVo.getPolicyno());
+        insPlyIncome.setRiskcode(excelVo.getRiskcode());
+        insPlyIncome.setTaxamount(excelVo.getTaxamount());
+        insPlyIncome.setNoTaxPremium(excelVo.getNoTaxPremium());
+        insPlyIncome.setCommissionFeerate(excelVo.getCommissionFeerate());
+        insPlyIncome.setOtherFeerate(excelVo.getOtherFeerate());
+        insPlyIncome.setCommissionFeevalue(excelVo.getCommissionFeevalue());
+        insPlyIncome.setOtherFeevalue(excelVo.getOtherFeevalue());
+        insPlyIncome.setAllFeeValue(excelVo.getAllFeeValue());
+        insPlyIncomeMapper.insert(insPlyIncome);
+
+    }
+    /**
+     * 生成机构费用
+     * @throws Exception
+     */
+    private void gene_deptfee( InsPlyMain excelVo) throws Exception{
+        InsDeptFee deptFee = new InsDeptFee();
+        deptFee.setOrderno(excelVo.getOrderno());
+        deptFee.setAgreeid(excelVo.getAgreementId());
+        deptFee.setAuditstatus("1");
+        deptFee.setSettlestatus("0");
+        deptFee.setInscompany(excelVo.getCompanyId());
+        deptFee.setPolicyno(excelVo.getPolicyno());
+        deptFee.setRiskcode(excelVo.getRiskcode());
+        deptFee.setLicenseno(excelVo.getLicenseno());
+        geneInsDeptFee(deptFee,excelVo);
+
+
+    }
+
+    private void geneInsDeptFee(InsDeptFee deptFee,InsPlyMain excelVo) {
+        if (excelVo.getFirstDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(excelVo.getDeptId().substring(0, 2));  //99140302M01D01
+            deptFee.setKeeprate(excelVo.getFirstDeptProportion().doubleValue() );
+            deptFee.setKeepamount(excelVo.getFirstDeptPremiums().doubleValue());
+            deptFee.setComlevel("一级");
+            insDeptFeeService.insert(deptFee);
+        }
+        if (excelVo.getSecondDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(excelVo.getDeptId().substring(0, 4));  //99140302M01D01
+            deptFee.setKeeprate(excelVo.getSecondDeptProportion().doubleValue() );
+            deptFee.setKeepamount(excelVo.getSecondDeptPremiums().doubleValue());
+            deptFee.setComlevel("二级");
+            insDeptFeeService.insert(deptFee);
+        }
+        if (excelVo.getThirdDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(excelVo.getDeptId().substring(0, 6));  //99140302M01D01
+            deptFee.setKeeprate(excelVo.getThirdDeptProportion().doubleValue() );
+            deptFee.setKeepamount(excelVo.getThirdDeptPremiums().doubleValue());
+            deptFee.setComlevel("三级");
+            insDeptFeeService.insert(deptFee);
+        }
+        if (excelVo.getForthDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(excelVo.getDeptId().substring(0, 8));  //99140302M01D01
+            deptFee.setKeeprate(excelVo.getForthDeptProportion().doubleValue() );
+            deptFee.setKeepamount(excelVo.getForthDeptPremiums().doubleValue());
+            deptFee.setComlevel("四级");
+            insDeptFeeService.insert(deptFee);
+        }
+        if (excelVo.getFifthDeptPremiums().doubleValue() > 0) {
+            deptFee.setComcode(excelVo.getDeptId().substring(0, 11));  //99140302M01D01
+            deptFee.setKeeprate(excelVo.getFifthDeptProportion().doubleValue() );
+            deptFee.setKeepamount(excelVo.getFifthDeptPremiums().doubleValue());
+            deptFee.setComlevel("五级");
+            insDeptFeeService.insert(deptFee);
+        }
+    }
+
+    /**
+     * 三级分销费用保存
+     *
+     * @return
+     */
+    public void saveRetail(InsPlyMain excelVo) throws Exception{
+        List<String> userlist=new ArrayList<>();
+        esmUserReferrerService.getUpUser(excelVo.getUserId(),userlist);
+
+        //userlist:包括本人在内向上所有人
+        if(userlist.size()-1>0){
+            if(userlist.size()-1>=1
+                    && excelVo.getThirdDetailProportion().doubleValue()>0)
+            {//三级分销
+                SysUser user=sysUserMapper.selectById(userlist.get(1));
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(excelVo.getOrderno());
+                commission.setDeptid(excelVo.getDeptId());
+                commission.setDeptname(excelVo.getDeptName());
+                commission.setInscompany(excelVo.getCompanyId());
+                commission.setAgreeid(excelVo.getAgreementId());
+                commission.setRefereescode(user.getId());
+                commission.setRefereesname(user.getName());
+                commission.setLevel("3");
+                commission.setAuditstatus("1");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(excelVo.getPayDate().toString()); //承保确认时间
+                commission.setPolicyno(excelVo.getPolicyno());
+                commission.setRiskcode(excelVo.getRiskcode());
+                commission.setLicenseno(excelVo.getLicenseno());
+
+                commission.setCommissionrate(excelVo.getThirdDetailProportion().doubleValue());
+                commission.setCommissionamount(excelVo.getThirdDetailPremiums().doubleValue());
+                insCommissionService.insert(commission);
+
+            }
+            if(userlist.size()-1>=2
+                    &&excelVo.getSecondDetailPremiums().doubleValue()>0)
+            {//二级分销
+                SysUser user=sysUserMapper.selectById(userlist.get(1));
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(excelVo.getOrderno());
+                commission.setDeptid(excelVo.getDeptId());
+                commission.setDeptname(excelVo.getDeptName());
+                commission.setInscompany(excelVo.getCompanyId());
+                commission.setAgreeid(excelVo.getAgreementId());
+                commission.setRefereescode(user.getId());
+                commission.setRefereesname(user.getName());
+                commission.setLevel("2");
+                commission.setAuditstatus("1");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(excelVo.getPayDate().toString()); //承保确认时间
+                commission.setPolicyno(excelVo.getPolicyno());
+                commission.setRiskcode(excelVo.getRiskcode());
+                commission.setLicenseno(excelVo.getLicenseno());
+
+                commission.setCommissionrate(excelVo.getSecondDetailProportion().doubleValue());
+                commission.setCommissionamount(excelVo.getSecondDetailPremiums().doubleValue());
+                insCommissionService.insert(commission);
+            }
+            if(userlist.size()-1>=3
+                    &&excelVo.getFirstDetailPremiums().doubleValue()>0)
+            {//一级分销
+                SysUser user=sysUserMapper.selectById(userlist.get(1));
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(excelVo.getOrderno());
+                commission.setDeptid(excelVo.getDeptId());
+                commission.setDeptname(excelVo.getDeptName());
+                commission.setInscompany(excelVo.getCompanyId());
+                commission.setAgreeid(excelVo.getAgreementId());
+                commission.setRefereescode(user.getId());
+                commission.setRefereesname(user.getName());
+                commission.setLevel("1");
+                commission.setAuditstatus("1");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(excelVo.getPayDate().toString()); //承保确认时间
+                commission.setPolicyno(excelVo.getPolicyno());
+                commission.setRiskcode(excelVo.getRiskcode());
+                commission.setLicenseno(excelVo.getLicenseno());
+
+                commission.setCommissionrate(excelVo.getFirstDetailProportion().doubleValue());
+                commission.setCommissionamount(excelVo.getFirstDetailPremiums().doubleValue());
+                insCommissionService.insert(commission);
+            }
+        }
+    }
+
+
+    /**
+     * 生成个代费用
+     * @throws Exception
+     */
+    public void saveInsCompanyFee(InsPlyMain excelVo) throws Exception {
+
+        SysDept sysDept=sysDeptMapper.selectById(excelVo.getDeptId());
+        SysUser sysUser=sysUserMapper.selectById(excelVo.getUserId());
+
+        InsCompanyFee insCompanyFee = new InsCompanyFee();
+        insCompanyFee.setOrderno(excelVo.getOrderno());
+//        insCompanyFee.setFrameNo(excelVo.getFrameno());
+        insCompanyFee.setLicenseNo(excelVo.getLicenseno());
+        insCompanyFee.setInscompany(excelVo.getCompanyId());
+        insCompanyFee.setAgreeid(excelVo.getAgreementId());
+        insCompanyFee.setUserid(excelVo.getUserId());
+        insCompanyFee.setUsername(sysUser.getName());
+        insCompanyFee.setDeptid(excelVo.getDeptId());
+        insCompanyFee.setDeptname(sysDept.getName());
+        insCompanyFee.setSettletype("B");
+        insCompanyFee.setSettlestatus("0");
+        insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN));
+
+        BigDecimal dept_rate=excelVo.getFirstDeptProportion()
+                .add(excelVo.getSecondDeptProportion())
+                .add(excelVo.getThirdDeptProportion())
+                .add(excelVo.getForthDeptProportion())
+                .add(excelVo.getFifthDeptProportion());
+        BigDecimal retail_rate=excelVo.getFirstDetailProportion()
+                .add(excelVo.getSecondDetailProportion())
+                .add(excelVo.getThirdDetailProportion());
+        insCompanyFee.setPolicyno(excelVo.getPolicyno());
+        insCompanyFee.setRiskcode(excelVo.getRiskcode());
+
+
+        if("交强".equals(excelVo.getRiskcode())){
+
+            //交强费用比例=总费用比例-五级机构管理费比例-三级分销比例
+            insCompanyFee.setFeerate(excelVo.getCommissionFeerate().add(excelVo.getOtherFeerate()).subtract(dept_rate).subtract(retail_rate).doubleValue());
+            insCompanyFee.setFeeamount(excelVo.getNoTaxPremium().multiply(new BigDecimal(insCompanyFee.getFeerate())).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
+            insCompanyFee.setJqpremium(excelVo.getNoTaxPremium().doubleValue());
+            //保存业务员费用
+            insCompanyFeeService.insert(insCompanyFee);
+        }
+        if("商业".equals(excelVo.getRiskcode())){
+
+            //商业费用比例=总费用比例-五级机构管理费比例-三级分销比例
+            insCompanyFee.setDisrate(excelVo.getCommissionFeerate().add(excelVo.getOtherFeerate()).subtract(dept_rate).subtract(retail_rate).doubleValue());
+            insCompanyFee.setDisamount(excelVo.getNoTaxPremium().multiply(new BigDecimal(insCompanyFee.getDisrate())).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
+            insCompanyFee.setSypremium(excelVo.getNoTaxPremium().doubleValue());
+            //保存业务员费用
+            insCompanyFeeService.insert(insCompanyFee);
+        }
+
+    }
+    private void isNullCmain(int i, InsPlyMain excelVo) {
+        if (StringUtils.isNullOrEmpty(excelVo.getOrderno())
+                ||StringUtils.isNullOrEmpty(excelVo.getPolicyno())
+                ||StringUtils.isNullOrEmpty(excelVo.getCompanyId())
+                ||StringUtils.isNullOrEmpty(excelVo.getDeptId())
+                ||StringUtils.isNullOrEmpty(excelVo.getUserId())
+                ||StringUtils.isNullOrEmpty(excelVo.getRiskcode())
+                ||StringUtils.isNullOrEmpty(excelVo.getLicenseno())
+                ||StringUtils.isNullOrEmpty(excelVo.getPayDate())
+                ||StringUtils.isNullOrEmpty(excelVo.getPremium())
+                ||StringUtils.isNullOrEmpty(excelVo.getTaxamount())
+                ||StringUtils.isNullOrEmpty(excelVo.getNoTaxPremium())
+                ||StringUtils.isNullOrEmpty(excelVo.getCommissionFeerate())
+                ||StringUtils.isNullOrEmpty(excelVo.getCommissionFeevalue())
+                ||StringUtils.isNullOrEmpty(excelVo.getOtherFeerate())
+                ||StringUtils.isNullOrEmpty(excelVo.getOtherFeevalue())
+                ||StringUtils.isNullOrEmpty(excelVo.getFirstDeptProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getFirstDeptPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getSecondDeptProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getSecondDeptPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getThirdDeptProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getThirdDeptPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getForthDeptProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getForthDeptPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getFifthDeptProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getFifthDeptPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getFirstDetailProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getFirstDetailPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getSecondDetailProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getSecondDetailPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getThirdDetailProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getThirdDetailPremiums())
+                ||StringUtils.isNullOrEmpty(excelVo.getUserFeeProportion())
+                ||StringUtils.isNullOrEmpty(excelVo.getUserFeelPremiums())
+        ) {
+            throw new DescribeException("第" + (i + 1) + "行 必填字段 不可为空");
+        }
+    }
+    private void checkData(int i, InsPlyMain excelVo) {
+        EsmInsCompany esmInsCompany =esmInsCompanyMapper.selectById(excelVo.getCompanyId());
+        if(StringUtils.isNullOrEmpty(esmInsCompany)){
+            throw new DescribeException("第" + (i + 1) + "行 保司编码错误,请核对!");
+        }
+        SysDept sysDept=sysDeptMapper.selectById(excelVo.getDeptId());
+        if(StringUtils.isNullOrEmpty(sysDept)){
+            throw new DescribeException("第" + (i + 1) + "行 机构编码错误,请核对!");
+        }
+        SysUser sysUser=sysUserMapper.selectById(excelVo.getUserId());
+        if(StringUtils.isNullOrEmpty(sysUser)){
+            throw new DescribeException("第" + (i + 1) + "行 人员编码错误,请核对!");
+        }
+        if(!"交强".equals(excelVo.getRiskcode())&&!"商业".equals(excelVo.getRiskcode())){
+            throw new DescribeException("第" + (i + 1) + "行 险种错误,只能填写 【交强】、【商业】!");
+        }
+    }
+}

+ 8 - 3
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlySettleServiceImpl.java

@@ -222,9 +222,14 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
 
 
     @Override
     @Override
     public HttpResult<String> exportInsPlySettleReport(InsPlySettleReportReqVo insPlySettleReportReqVo) {
     public HttpResult<String> exportInsPlySettleReport(InsPlySettleReportReqVo insPlySettleReportReqVo) {
-        List<InsPlySettleReportResVo> policyInsuranceReportResVoPage = baseMapper.getInsPlySettleReport(insPlySettleReportReqVo);
-        String s = EasyExcelUtils.downExcel(uploadFilePath, PolicyInsuranceReportResVo.class, policyInsuranceReportResVoPage);
+        List<InsPlySettleReportResVo> insPlySettleReportResVoList = baseMapper.getInsPlySettleReport(insPlySettleReportReqVo);
+        String s = EasyExcelUtils.downExcel(uploadFilePath, InsPlySettleReportResVo.class, insPlySettleReportResVoList);
+        return HttpResult.ok("", s);
+    }
+    @Override
+    public HttpResult<String> exportInsPlySettleReportList(InsPlySettleReportReqVo insPlySettleReportReqVo) {
+        List<InsPlySettle> insPlySettleReportList = baseMapper.getInsPlySettleReportList(insPlySettleReportReqVo);
+        String s = EasyExcelUtils.downExcel(uploadFilePath, InsPlySettle.class, insPlySettleReportList);
         return HttpResult.ok("", s);
         return HttpResult.ok("", s);
     }
     }
-
 }
 }

+ 62 - 0
src/main/java/com/ydtech/modules/fnc/vo/InsPlyMainVo.java

@@ -0,0 +1,62 @@
+package com.ydtech.modules.fnc.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author gws
+ * @since 2024-01-23
+ */
+@Data
+public class InsPlyMainVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(name = "批次号")
+    private String batchno;
+
+    @ApiModelProperty("保单号")
+    private String policyno;
+
+    @ApiModelProperty("保险公司")
+    private String companyId;
+
+    @ApiModelProperty("机构")
+    private String deptId;
+
+    @ApiModelProperty("导入时间起期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startDate;
+
+    @ApiModelProperty("导入时间止期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endDate;
+
+    @ApiModelProperty(value = "每页页数")
+    @Min(value = 20, message = "页数最小为20")
+    @Max(value = 100, message = "页数最大为100")
+    private int pageSize=20;
+
+    @ApiModelProperty(value = "页数")
+    @Min(value = 1, message = "页数最小为1")
+    private int pageNum=1;
+}

+ 55 - 0
src/main/java/com/ydtech/modules/fnc/xml/InsPlyMainMapper.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.fnc.dao.InsPlyMainMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.fnc.entity.InsPlyMain">
+        <id column="policyno" property="policyno" />
+        <result column="batchno" property="batchno" />
+        <result column="orderno" property="orderno" />
+        <result column="dept_id" property="deptId" />
+        <result column="user_id" property="userId" />
+        <result column="riskcode" property="riskcode" />
+        <result column="pay_date" property="payDate" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="company_id" property="companyId" />
+        <result column="agreement_id" property="agreementId" />
+        <result column="licenseno" property="licenseno" />
+        <result column="applyname" property="applyname" />
+        <result column="applyphone" property="applyphone" />
+        <result column="insurername" property="insurername" />
+        <result column="insurerphone" property="insurerphone" />
+        <result column="taxamount" property="taxamount" />
+        <result column="premium" property="premium" />
+        <result column="no_tax_premium" property="noTaxPremium" />
+        <result column="commission_feerate" property="commissionFeerate" />
+        <result column="other_feerate" property="otherFeerate" />
+        <result column="commission_feevalue" property="commissionFeevalue" />
+        <result column="other_feevalue" property="otherFeevalue" />
+        <result column="all_fee_value" property="allFeeValue" />
+        <result column="first_dept_proportion" property="firstDeptProportion" />
+        <result column="first_dept_premiums" property="firstDeptPremiums" />
+        <result column="second_dept_proportion" property="secondDeptProportion" />
+        <result column="second_dept_premiums" property="secondDeptPremiums" />
+        <result column="third_dept_proportion" property="thirdDeptProportion" />
+        <result column="third_dept_premiums" property="thirdDeptPremiums" />
+        <result column="forth_dept_proportion" property="forthDeptProportion" />
+        <result column="forth_dept_premiums" property="forthDeptPremiums" />
+        <result column="fifth_dept_proportion" property="fifthDeptProportion" />
+        <result column="fifth_dept_premiums" property="fifthDeptPremiums" />
+        <result column="first_detail_proportion" property="firstDetailProportion" />
+        <result column="first_detail_premiums" property="firstDetailPremiums" />
+        <result column="second_detail_proportion" property="secondDetailProportion" />
+        <result column="second_detail_premiums" property="secondDetailPremiums" />
+        <result column="third_detail_proportion" property="thirdDetailProportion" />
+        <result column="third_detail_premiums" property="thirdDetailPremiums" />
+        <result column="user_fee_proportion" property="userFeeProportion" />
+        <result column="user_feel_premiums" property="userFeelPremiums" />
+        <result column="creator" property="creator" />
+        <result column="createtime" property="createtime" />
+        <result column="updateuser" property="updateuser" />
+        <result column="updatetime" property="updatetime" />
+    </resultMap>
+
+</mapper>

+ 2 - 0
src/main/java/com/ydtech/modules/ins/dao/InsCommissionDao.java

@@ -19,6 +19,8 @@ public interface InsCommissionDao {
 
 
     public double sumAmount(String whereCase, Object[] paramValues);
     public double sumAmount(String whereCase, Object[] paramValues);
 
 
+    public double sumCommRate(String whereCase, Object[] paramValues);
+
     public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
     public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
 
 
     public Integer insert(InsCommission model);
     public Integer insert(InsCommission model);

+ 6 - 0
src/main/java/com/ydtech/modules/ins/dao/impl/InsCommissionDaoImpl.java

@@ -106,7 +106,13 @@ public class InsCommissionDaoImpl implements InsCommissionDao {
 
 
         return jdbcTemplate.queryForObject(sql, paramValues, Double.class);
         return jdbcTemplate.queryForObject(sql, paramValues, Double.class);
     }
     }
+    public double sumCommRate(String whereCase, Object[] paramValues) {
+        String sql = "select IFNULL(sum(t.commissionrate),0) totalamount from ins_commission t " + whereCase;
 
 
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Double.class);
+    }
     public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
     public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
 
 
         Dialect dialect = Dialect.guessDialect(dataSource);
         Dialect dialect = Dialect.guessDialect(dataSource);

+ 11 - 6
src/main/java/com/ydtech/modules/inv/controller/InvReceivableController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.inv.model.po.InvChannelAccount;
 import com.ydtech.modules.inv.model.po.InvChannelAccount;
 import com.ydtech.modules.inv.model.po.InvSettlementSource;
 import com.ydtech.modules.inv.model.po.InvSettlementSource;
 import com.ydtech.modules.inv.model.po.InvSource;
 import com.ydtech.modules.inv.model.po.InvSource;
@@ -75,13 +76,13 @@ public class InvReceivableController extends BaseController {
 
 
     @ApiOperation("应收结果")
     @ApiOperation("应收结果")
     @GetMapping("receivableResult")
     @GetMapping("receivableResult")
-    public HttpResult<BasePageResult<ReceivableResultVo>> receivableResult(String yearMonthStr){
+    public HttpResult<BasePageResult<ReceivableResultVo>> receivableResult(String yearMonthStr,String insuranceId){
         // 获取当前年月
         // 获取当前年月
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
         YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
         YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
         // 获取当前月份的最大天数
         // 获取当前月份的最大天数
         int maxDaysInMonth = yearMonth.lengthOfMonth();
         int maxDaysInMonth = yearMonth.lengthOfMonth();
-        List<ReceivableResultVo> invChannelAccountList = invReceivableService.getReceivableList(yearMonth.toString() + "-01",yearMonth.toString() + "-" + String.valueOf(maxDaysInMonth));
+        List<ReceivableResultVo> invChannelAccountList = invReceivableService.getReceivableList(yearMonth.toString() + "-01",yearMonth.toString() + "-" + String.valueOf(maxDaysInMonth),insuranceId);
         BasePageResult<ReceivableResultVo> invChannelAccountBasePageResult = new BasePageResult<>(0, 0, 0, 0, invChannelAccountList);
         BasePageResult<ReceivableResultVo> invChannelAccountBasePageResult = new BasePageResult<>(0, 0, 0, 0, invChannelAccountList);
         return HttpResult.ok(invChannelAccountBasePageResult);
         return HttpResult.ok(invChannelAccountBasePageResult);
     }
     }
@@ -99,11 +100,9 @@ public class InvReceivableController extends BaseController {
 
 
     @ApiOperation("结算日期结算来源表")
     @ApiOperation("结算日期结算来源表")
     @GetMapping("settlementSourceResult")
     @GetMapping("settlementSourceResult")
-    public HttpResult<BasePageResult<SettlementSourceResultVo>> settlementSourceResult(String yearMonthStr){
+    public HttpResult<BasePageResult<SettlementSourceResultVo>> settlementSourceResult(String yearMonthStr,String insuranceId){
         // 获取当前年月
         // 获取当前年月
-        String startMonth = yearMonthStr + "-01-01";
-        String endMonth = yearMonthStr + "-12-31";
-        List<SettlementSourceResultVo> invChannelAccountList = invReceivableService.getSettlementSourceResult(yearMonthStr,startMonth,endMonth);
+        List<SettlementSourceResultVo> invChannelAccountList = invReceivableService.getSettlementSourceResult(yearMonthStr,insuranceId);
         BasePageResult<SettlementSourceResultVo> invChannelAccountBasePageResult = new BasePageResult<>(0, 0, 0, 0, invChannelAccountList);
         BasePageResult<SettlementSourceResultVo> invChannelAccountBasePageResult = new BasePageResult<>(0, 0, 0, 0, invChannelAccountList);
         return HttpResult.ok(invChannelAccountBasePageResult);
         return HttpResult.ok(invChannelAccountBasePageResult);
     }
     }
@@ -115,5 +114,11 @@ public class InvReceivableController extends BaseController {
         return HttpResult.ok("同步成功,共同步" + i + "条数据");
         return HttpResult.ok("同步成功,共同步" + i + "条数据");
     }
     }
 
 
+    @ApiOperation("获取保险公司")
+    @GetMapping("getInsureCompany")
+    public HttpResult getInsureCompany(){
+        List<EsmInsCompany> insureCompany = invReceivableService.getInsureCompany();
+        return HttpResult.ok(insureCompany);
+    }
 
 
 }
 }

+ 7 - 1
src/main/java/com/ydtech/modules/inv/controller/InvSettlementSourController.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.inv.controller;
 package com.ydtech.modules.inv.controller;
 
 
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.inv.service.InvReceivableService;
 import com.ydtech.modules.inv.service.InvSettlementSourceService;
 import com.ydtech.modules.inv.service.InvSettlementSourceService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +20,9 @@ public class InvSettlementSourController {
     @Autowired
     @Autowired
     private InvSettlementSourceService invSettlementSourceService;
     private InvSettlementSourceService invSettlementSourceService;
 
 
+    @Autowired
+    private InvReceivableService invReceivableService;
+
     private static String concatenateWithSlash(String[] array) {
     private static String concatenateWithSlash(String[] array) {
         StringBuilder result = new StringBuilder();
         StringBuilder result = new StringBuilder();
 
 
@@ -51,6 +55,8 @@ public class InvSettlementSourController {
         int index = findIndex(pathSegments,"upload");
         int index = findIndex(pathSegments,"upload");
         String[] subarray = Arrays.copyOfRange(pathSegments, index+1, pathSegments.length);
         String[] subarray = Arrays.copyOfRange(pathSegments, index+1, pathSegments.length);
         String filename = concatenateWithSlash(subarray);
         String filename = concatenateWithSlash(subarray);
-        return invSettlementSourceService.readInvSettlementSourceExcel(filename);
+        HttpResult httpResult = invSettlementSourceService.readInvSettlementSourceExcel(filename);
+        invReceivableService.syncStatus();
+        return httpResult;
     }
     }
 }
 }

+ 7 - 1
src/main/java/com/ydtech/modules/inv/controller/InvSourceController.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.inv.controller;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.inv.model.excel.InvSourceExcel;
 import com.ydtech.modules.inv.model.excel.InvSourceExcel;
 import com.ydtech.modules.inv.model.po.InvSource;
 import com.ydtech.modules.inv.model.po.InvSource;
+import com.ydtech.modules.inv.service.InvReceivableService;
 import com.ydtech.modules.inv.service.InvSourceService;
 import com.ydtech.modules.inv.service.InvSourceService;
 import com.ydtech.modules.inv.utils.EasyExcelUtils;
 import com.ydtech.modules.inv.utils.EasyExcelUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -22,6 +23,9 @@ public class InvSourceController {
     @Autowired
     @Autowired
     private InvSourceService invSourceService;
     private InvSourceService invSourceService;
 
 
+    @Autowired
+    private InvReceivableService invReceivableService;
+
     private static String concatenateWithSlash(String[] array) {
     private static String concatenateWithSlash(String[] array) {
         StringBuilder result = new StringBuilder();
         StringBuilder result = new StringBuilder();
 
 
@@ -53,6 +57,8 @@ public class InvSourceController {
         int index = findIndex(pathSegments,"upload");
         int index = findIndex(pathSegments,"upload");
         String[] subarray = Arrays.copyOfRange(pathSegments, index+1, pathSegments.length);
         String[] subarray = Arrays.copyOfRange(pathSegments, index+1, pathSegments.length);
         String filename = concatenateWithSlash(subarray);
         String filename = concatenateWithSlash(subarray);
-       return invSourceService.readExcel(filename);
+        HttpResult httpResult = invSourceService.readExcel(filename);
+        invReceivableService.syncStatus();
+        return httpResult;
     }
     }
 }
 }

+ 13 - 2
src/main/java/com/ydtech/modules/inv/dao/InvReceivableMapper.java

@@ -1,11 +1,14 @@
 package com.ydtech.modules.inv.dao;
 package com.ydtech.modules.inv.dao;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.inv.model.po.InvChannelAccount;
 import com.ydtech.modules.inv.model.po.InvChannelAccount;
 import com.ydtech.modules.inv.model.vo.ReceivableResultVo;
 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.SettlementSourceResultVo;
 import com.ydtech.modules.inv.model.vo.SigningSourceResultVo;
 import com.ydtech.modules.inv.model.vo.SigningSourceResultVo;
 
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -15,11 +18,19 @@ import java.util.List;
 * @Entity com.ydtech.modules.inv.model.po.InvChannelAccount
 * @Entity com.ydtech.modules.inv.model.po.InvChannelAccount
 */
 */
 public interface InvReceivableMapper extends BaseMapper<InvChannelAccount> {
 public interface InvReceivableMapper extends BaseMapper<InvChannelAccount> {
-    List<ReceivableResultVo> getReceivableList(String startTime, String endTime);
+    List<ReceivableResultVo> getReceivableList(String startTime, String endTime,String insuranceId);
 
 
     List<SigningSourceResultVo> getSigningSourceResult(String startTime, String endTime);
     List<SigningSourceResultVo> getSigningSourceResult(String startTime, String endTime);
 
 
-    List<SettlementSourceResultVo> getSettlementSourceResult(String startTime, String endTime);
+    List<SigningSourceResultVo> getSigningSourceDayResult(String startTime, String endTime,String insuranceId);
+
+    List<SettlementSourceDataVo> getSettlementSourceResult(String signDate,String startTime, String endTime, String insuranceId);
+
+    List<EsmInsCompany> getInsureCompany();
+
+    List<HashMap> getMaxReceivable(String startTime,String endTime);
+
+    List<HashMap> getUnsettledProfitCalculation(String startTime,String endTime);
 }
 }
 
 
 
 

+ 3 - 0
src/main/java/com/ydtech/modules/inv/model/po/InvChannelAccount.java

@@ -23,6 +23,9 @@ public class InvChannelAccount implements Serializable {
     @TableField(value = "employee_id")
     @TableField(value = "employee_id")
     private String employeeId;
     private String employeeId;
 
 
+    @TableField(value = "channel_name")
+    private String channelName;
+
     /**
     /**
      * 编号
      * 编号
      */
      */

+ 7 - 1
src/main/java/com/ydtech/modules/inv/model/po/InvSettlementSource.java

@@ -71,11 +71,17 @@ public class InvSettlementSource implements Serializable {
     @ApiModelProperty("被保险人")
     @ApiModelProperty("被保险人")
     private String insuredName;
     private String insuredName;
 
 
+    /**
+     * 保司编码
+     */
+    @TableField(value = "insurance_id")
+    @ApiModelProperty("保司编码")
+    private String insuranceId;
     /**
     /**
      * 保险公司
      * 保险公司
      */
      */
     @TableField(value = "insurance_company")
     @TableField(value = "insurance_company")
-    @ApiModelProperty("险种")
+    @ApiModelProperty("保险公司")
     private String insuranceCompany;
     private String insuranceCompany;
 
 
     /**
     /**

+ 5 - 0
src/main/java/com/ydtech/modules/inv/model/po/QueryInvChannelAccount.java

@@ -45,6 +45,11 @@ public class QueryInvChannelAccount extends PageRequest implements Serializable
      */
      */
     private String group;
     private String group;
 
 
+    /**
+     * 渠道名称
+     */
+    private String channelName;
+
     /**
     /**
      * 组员
      * 组员
      */
      */

+ 10 - 3
src/main/java/com/ydtech/modules/inv/model/vo/InvSettlementSourceQueryVo.java

@@ -53,7 +53,7 @@ public class InvSettlementSourceQueryVo extends PageRequest implements Serializa
     @TableField(value = "sign_date")
     @TableField(value = "sign_date")
     @ApiModelProperty("签单日期")
     @ApiModelProperty("签单日期")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate signDate;
+    private String signDate;
 
 
     /**
     /**
      * 车牌号
      * 车牌号
@@ -69,11 +69,18 @@ public class InvSettlementSourceQueryVo extends PageRequest implements Serializa
     @ApiModelProperty("被保险人")
     @ApiModelProperty("被保险人")
     private String insuredName;
     private String insuredName;
 
 
+    /**
+     * 保司编码
+     */
+    @TableField(value = "insurance_id")
+    @ApiModelProperty("保司编码")
+    private String insuranceId;
+
     /**
     /**
      * 保险公司
      * 保险公司
      */
      */
     @TableField(value = "insurance_company")
     @TableField(value = "insurance_company")
-    @ApiModelProperty("险种")
+    @ApiModelProperty("保险公司")
     private String insuranceCompany;
     private String insuranceCompany;
 
 
     /**
     /**
@@ -173,7 +180,7 @@ public class InvSettlementSourceQueryVo extends PageRequest implements Serializa
     @TableField(value = "agency_settlement_time")
     @TableField(value = "agency_settlement_time")
     @ApiModelProperty("代理结算时间")
     @ApiModelProperty("代理结算时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate agencySettlementTime;
+    private String agencySettlementTime;
 
 
     @TableField(exist = false)
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;

+ 2 - 2
src/main/java/com/ydtech/modules/inv/model/vo/InvSourceQueryVo.java

@@ -33,7 +33,7 @@ public class InvSourceQueryVo extends PageRequest implements Serializable {
      */
      */
     @TableField(value = "insurance_id")
     @TableField(value = "insurance_id")
     @ApiModelProperty("保司编码")
     @ApiModelProperty("保司编码")
-    private Long insuranceId;
+    private String insuranceId;
 
 
 
 
     /**
     /**
@@ -147,7 +147,7 @@ public class InvSourceQueryVo extends PageRequest implements Serializable {
     @TableField(value = "signing_time")
     @TableField(value = "signing_time")
     @ApiModelProperty("出单日期")
     @ApiModelProperty("出单日期")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate signingTime;
+    private String signingTime;
 
 
     /**
     /**
      * 结算日期
      * 结算日期

+ 30 - 0
src/main/java/com/ydtech/modules/inv/model/vo/SettlementSourceDataVo.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.inv.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class SettlementSourceDataVo {
+
+    @ApiModelProperty(value = "日期")
+    private String day;
+
+    @ApiModelProperty(value = "结算日期")
+    private String settlementDate;
+
+    @ApiModelProperty(value = "签单结算保费")
+    private BigDecimal settlementPremium;
+
+    @ApiModelProperty(value = "签单结算应收金额")
+    private BigDecimal agentCommission;
+
+    public SettlementSourceDataVo(){
+        this.settlementDate = "0";
+        this.settlementPremium = new BigDecimal(0);
+        this.agentCommission = new BigDecimal(0);
+    }
+}

+ 31 - 29
src/main/java/com/ydtech/modules/inv/model/vo/SettlementSourceResultVo.java

@@ -1,51 +1,53 @@
 package com.ydtech.modules.inv.model.vo;
 package com.ydtech.modules.inv.model.vo;
 
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
 @Data
 @Data
 public class SettlementSourceResultVo {
 public class SettlementSourceResultVo {
-    @ApiModelProperty(value = "年月")
-    @ExcelProperty(value = "年月",index = 0)
-    private String yearmonth;
 
 
     @ApiModelProperty(value = "日期")
     @ApiModelProperty(value = "日期")
-    @ExcelProperty(value = "日期",index = 1)
     private String day;
     private String day;
 
 
-    @ApiModelProperty(value = "保险公司名称")
-    @ExcelProperty(value = "保险公司名称",index = 2)
-    private String insuranceName;
+    @ApiModelProperty(value = "签单日期")
+    private String signDate;
 
 
-    @ApiModelProperty(value = "交强")
-    @ExcelProperty(value = "交强",index = 3)
-    private String jqPremiumTax;
+    @ApiModelProperty(value = "签单保费")
+    private BigDecimal signPremium;
 
 
-    @ApiModelProperty(value = "商业")
-    @ExcelProperty(value = "商业",index = 4)
-    private String syPremiumTax;
+    @ApiModelProperty(value = "签单应收金额")
+    private BigDecimal signReceivableAmount;
 
 
-    @ApiModelProperty(value = "非车")
-    @ExcelProperty(value = "非车",index = 6)
-    private String nonCarPremiumTax;
+    @ApiModelProperty(value = "未计算签单金额")
+    private BigDecimal unCalculatedAmount;
 
 
-    @ApiModelProperty(value = "签单保费")
-    private String writtenPremium;
+    @ApiModelProperty(value = "代理人金额")
+    private BigDecimal agentAmount;
 
 
-    @ApiModelProperty(value = "结算金额")
-    @ExcelProperty(value = "结算金额",index = 10)
-    private String settlementAmount;
+    @ApiModelProperty(value = "已结算利润")
+    private BigDecimal settledProfit;
 
 
+    @ApiModelProperty(value = "未结算利润测算")
+    private BigDecimal unsettledProfitCalculation;
+
+    @ApiModelProperty(value = "结算数据")
+    private List<SettlementSourceDataVo> settlementData;
 
 
     public SettlementSourceResultVo(){
     public SettlementSourceResultVo(){
-        this.yearmonth = "0";
-        this.day = "0";
-        this.insuranceName = "0";
-        this.jqPremiumTax = "0";
-        this.syPremiumTax = "0";
-        this.nonCarPremiumTax = "0";
-        this.writtenPremium = "0";
-        this.settlementAmount = "0";
+        this.signDate = "0";
+        this.signPremium = new BigDecimal(0);
+        this.signReceivableAmount = new BigDecimal(0);
+        this.unCalculatedAmount = new BigDecimal(0);
+        this.settledProfit = new BigDecimal(0);
+        if(this.settlementData == null) {
+            this.settlementData = new ArrayList<>();
+        }
     }
     }
+
 }
 }

+ 3 - 0
src/main/java/com/ydtech/modules/inv/model/vo/SigningSourceResultVo.java

@@ -14,6 +14,9 @@ public class SigningSourceResultVo {
     @ExcelProperty(value = "日期",index = 1)
     @ExcelProperty(value = "日期",index = 1)
     private String day;
     private String day;
 
 
+    @ApiModelProperty(value = "月份")
+    private String month;
+
     @ApiModelProperty(value = "保险公司名称")
     @ApiModelProperty(value = "保险公司名称")
     @ExcelProperty(value = "保险公司名称",index = 2)
     @ExcelProperty(value = "保险公司名称",index = 2)
     private String insuranceName;
     private String insuranceName;

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

@@ -3,12 +3,14 @@ package com.ydtech.modules.inv.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.inv.model.InvAccount;
 import com.ydtech.modules.inv.model.InvAccount;
 import com.ydtech.modules.inv.model.po.InvSettlementSource;
 import com.ydtech.modules.inv.model.po.InvSettlementSource;
 import com.ydtech.modules.inv.model.po.InvSource;
 import com.ydtech.modules.inv.model.po.InvSource;
 import com.ydtech.modules.inv.model.po.QueryInvChannelAccount;
 import com.ydtech.modules.inv.model.po.QueryInvChannelAccount;
 import com.ydtech.modules.inv.model.vo.*;
 import com.ydtech.modules.inv.model.vo.*;
 
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -18,11 +20,13 @@ import java.util.List;
 */
 */
 public interface InvReceivableService {
 public interface InvReceivableService {
 
 
-    List<ReceivableResultVo> getReceivableList(String startTime,String endTime);
+    List<ReceivableResultVo> getReceivableList(String startTime,String endTime,String insuranceId);
 
 
     List<SigningSourceResultVo> getSigningSourceResult(String yearMonthStr,String startTime, String endTime);
     List<SigningSourceResultVo> getSigningSourceResult(String yearMonthStr,String startTime, String endTime);
 
 
-    List<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr,String startTime,String endTime);
+    List<SigningSourceResultVo> getSigningSourceDayResult(String yearMonthStr,String startTime, String endTime,String insuranceId);
+
+    List<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr,String insuranceId);
 
 
 
 
     IPage<InvSource> getRecivablePage(InvSourceQueryVo invSourceQueryVo);
     IPage<InvSource> getRecivablePage(InvSourceQueryVo invSourceQueryVo);
@@ -34,4 +38,7 @@ public interface InvReceivableService {
     Boolean updateSettlement(InvSettlementSource invSettlementSource);
     Boolean updateSettlement(InvSettlementSource invSettlementSource);
 
 
     Integer syncStatus();
     Integer syncStatus();
+
+    List<EsmInsCompany> getInsureCompany();
+
 }
 }

+ 7 - 4
src/main/java/com/ydtech/modules/inv/service/impl/InvChannelAccountServiceImpl.java

@@ -28,18 +28,21 @@ public class InvChannelAccountServiceImpl extends ServiceImpl<InvChannelAccountM
         pageRequest.setPageSize(invChannelAccount.getPageSize());
         pageRequest.setPageSize(invChannelAccount.getPageSize());
         Page page = PageRequest.buildPageRequest(pageRequest);
         Page page = PageRequest.buildPageRequest(pageRequest);
         LambdaQueryWrapper<InvChannelAccount> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<InvChannelAccount> wrapper = new LambdaQueryWrapper<>();
-        if(invChannelAccount.getEmployeeId() != null) {
+        if(invChannelAccount.getEmployeeId() != null && !invChannelAccount.getEmployeeId().equals("")) {
             wrapper.eq(InvChannelAccount::getEmployeeId, invChannelAccount.getEmployeeId());
             wrapper.eq(InvChannelAccount::getEmployeeId, invChannelAccount.getEmployeeId());
         }
         }
-        if(invChannelAccount.getAccount() != null) {
+        if(invChannelAccount.getAccount() != null && !invChannelAccount.getAccount().equals("")) {
             wrapper.eq(InvChannelAccount::getAccount, invChannelAccount.getAccount());
             wrapper.eq(InvChannelAccount::getAccount, invChannelAccount.getAccount());
         }
         }
-        if(invChannelAccount.getMember() != null){
+        if(invChannelAccount.getMember() != null && !invChannelAccount.getMember().equals("")) {
             wrapper.eq(InvChannelAccount::getMember, invChannelAccount.getMember());
             wrapper.eq(InvChannelAccount::getMember, invChannelAccount.getMember());
         }
         }
-        if(invChannelAccount.getPayee() != null){
+        if(invChannelAccount.getPayee() != null && !invChannelAccount.getPayee().equals("")){
             wrapper.eq(InvChannelAccount::getProvince, invChannelAccount.getProvince());
             wrapper.eq(InvChannelAccount::getProvince, invChannelAccount.getProvince());
         }
         }
+        if(invChannelAccount.getChannelName() != null && !invChannelAccount.getChannelName().equals("")){
+            wrapper.like(InvChannelAccount::getChannelName, invChannelAccount.getChannelName());
+        }
         return baseMapper.selectPage(page, wrapper);
         return baseMapper.selectPage(page, wrapper);
     }
     }
 }
 }

+ 244 - 37
src/main/java/com/ydtech/modules/inv/service/impl/InvReceivableServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.core.page.PageRequest;
 import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.inv.dao.InvChannelAccountMapper;
 import com.ydtech.modules.inv.dao.InvChannelAccountMapper;
 import com.ydtech.modules.inv.dao.InvReceivableMapper;
 import com.ydtech.modules.inv.dao.InvReceivableMapper;
 import com.ydtech.modules.inv.dao.InvSettlementSourceMapper;
 import com.ydtech.modules.inv.dao.InvSettlementSourceMapper;
@@ -26,7 +27,9 @@ import java.math.RoundingMode;
 import java.time.YearMonth;
 import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
 * @author Administrator
 * @author Administrator
@@ -48,8 +51,8 @@ public class InvReceivableServiceImpl implements InvReceivableService {
     InvSettlementSourceMapper invSettlementSourceMapper;
     InvSettlementSourceMapper invSettlementSourceMapper;
 
 
     @Override
     @Override
-    public List<ReceivableResultVo> getReceivableList(String startTime, String endTime) {
-        return invReceivableMapper.getReceivableList(startTime,endTime);
+    public List<ReceivableResultVo> getReceivableList(String startTime, String endTime,String insuranceId) {
+        return invReceivableMapper.getReceivableList(startTime,endTime,insuranceId);
     }
     }
 
 
     @Override
     @Override
@@ -99,67 +102,236 @@ public class InvReceivableServiceImpl implements InvReceivableService {
     }
     }
 
 
     @Override
     @Override
-    public List<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr, String startTime, String endTime) {
-        List<SettlementSourceResultVo> settlementSources = invReceivableMapper.getSettlementSourceResult(startTime, endTime);
-        List<SettlementSourceResultVo> settlementSourceResult = new ArrayList<>();
-
+    public List<SigningSourceResultVo> getSigningSourceDayResult(String yearMonthStr, String startTime, String endTime,String insuranceId) {
+        List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceDayResult(startTime, endTime,insuranceId);
+        List<SigningSourceResultVo> signingSourceResult = new ArrayList<>();
+        // 定义日期时间格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        // 将字符串解析为YearMonth对象
+        YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
+        int maxDays = yearMonth.lengthOfMonth();
         Float jqPremiumTax = 0f;
         Float jqPremiumTax = 0f;
         Float syPremiumTax = 0f;
         Float syPremiumTax = 0f;
         Float nonCarPremiumTax = 0f;
         Float nonCarPremiumTax = 0f;
         Float writtenPremium = 0f;
         Float writtenPremium = 0f;
         Float settlementAmount = 0f;
         Float settlementAmount = 0f;
 
 
-        for(int i=1;i<=12;i++){
+        for(int i=1;i<=maxDays;i++){
             //查找day是否有数据
             //查找day是否有数据
             String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
             String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
-            boolean countBol = settlementSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
+            boolean countBol = signingSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
             if(countBol)
             if(countBol)
             {
             {
-                settlementSourceResult.add(settlementSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get());
+                signingSourceResult.add(signingSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get());
             }else{
             }else{
-                SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
-                settlementSourceResultVo.setDay(finalI);
-                settlementSourceResultVo.setYearmonth(yearMonthStr + "-" + String.valueOf(i));
-                settlementSourceResult.add(settlementSourceResultVo);
+                SigningSourceResultVo signingSourceResultVo = new SigningSourceResultVo();
+                signingSourceResultVo.setDay(finalI);
+                signingSourceResultVo.setYearmonth(yearMonthStr + "-" + finalI);
+                signingSourceResult.add(signingSourceResultVo);
             }
             }
         }
         }
 
 
 
 
         //处理合计
         //处理合计
-        for(SettlementSourceResultVo vo : settlementSources){
+        for(SigningSourceResultVo vo : signingSourceResult){
             jqPremiumTax = Float.parseFloat(vo.getJqPremiumTax()) + jqPremiumTax;
             jqPremiumTax = Float.parseFloat(vo.getJqPremiumTax()) + jqPremiumTax;
             syPremiumTax = Float.parseFloat(vo.getSyPremiumTax()) + syPremiumTax;
             syPremiumTax = Float.parseFloat(vo.getSyPremiumTax()) + syPremiumTax;
             nonCarPremiumTax = Float.parseFloat(vo.getNonCarPremiumTax()) + nonCarPremiumTax;
             nonCarPremiumTax = Float.parseFloat(vo.getNonCarPremiumTax()) + nonCarPremiumTax;
             writtenPremium = Float.parseFloat(vo.getWrittenPremium()) + writtenPremium;
             writtenPremium = Float.parseFloat(vo.getWrittenPremium()) + writtenPremium;
-            settlementAmount = Float.parseFloat(vo.getSettlementAmount()) + settlementAmount;
+            settlementAmount = Float.parseFloat(vo.getTotalAmountReceivable()) + settlementAmount;
         }
         }
-        SettlementSourceResultVo vo = new SettlementSourceResultVo();
+        SigningSourceResultVo vo = new SigningSourceResultVo();
         vo.setYearmonth("合计");
         vo.setYearmonth("合计");
         vo.setJqPremiumTax(String.format("%.2f", jqPremiumTax));
         vo.setJqPremiumTax(String.format("%.2f", jqPremiumTax));
         vo.setSyPremiumTax(String.format("%.2f", syPremiumTax));
         vo.setSyPremiumTax(String.format("%.2f", syPremiumTax));
         vo.setNonCarPremiumTax(String.format("%.2f", nonCarPremiumTax));
         vo.setNonCarPremiumTax(String.format("%.2f", nonCarPremiumTax));
         vo.setWrittenPremium(String.format("%.2f", writtenPremium));
         vo.setWrittenPremium(String.format("%.2f", writtenPremium));
-        vo.setSettlementAmount(String.format("%.2f", settlementAmount));
-        settlementSourceResult.add(vo);
-
-        //签单数据
-        List<SigningSourceResultVo> signingSourceResult = this.getSigningSourceResult(yearMonthStr, startTime, endTime);
-        //签单合计
-        SigningSourceResultVo signingSourceResultVo = signingSourceResult.get(signingSourceResult.size() - 1);
-        SettlementSourceResultVo voCalc = new SettlementSourceResultVo();
-        Float jq = Float.parseFloat(signingSourceResultVo.getJqPremiumTax()) - Float.parseFloat(vo.getJqPremiumTax());
-        Float sy = Float.parseFloat(signingSourceResultVo.getSyPremiumTax()) - Float.parseFloat(vo.getSyPremiumTax());
-        Float nonCar = Float.parseFloat(signingSourceResultVo.getNonCarPremiumTax()) - Float.parseFloat(vo.getNonCarPremiumTax());
-        Float written = Float.parseFloat(signingSourceResultVo.getWrittenPremium()) - Float.parseFloat(vo.getWrittenPremium());
-        Float settlement = Float.parseFloat(signingSourceResultVo.getTotalAmountReceivable()) - Float.parseFloat(vo.getSettlementAmount());
-        voCalc.setJqPremiumTax(String.format("%.2f", jq));
-        voCalc.setSyPremiumTax(String.format("%.2f", sy));
-        voCalc.setNonCarPremiumTax(String.format("%.2f", nonCar));
-        voCalc.setWrittenPremium(String.format("%.2f", written));
-        voCalc.setSettlementAmount(String.format("%.2f", settlement));
-        voCalc.setYearmonth("签单合计");
-        settlementSourceResult.add(voCalc);
-        return settlementSourceResult;
+        vo.setTotalAmountReceivable(String.format("%.2f", settlementAmount));
+        signingSourceResult.add(vo);
+        return signingSourceResult;
+    }
+
+    @Override
+    public List<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr, String insuranceId) {
+        // 定义日期时间格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        // 将字符串解析为YearMonth对象
+        YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter);
+        int maxDays = yearMonth.lengthOfMonth();
+        //获取签单数据
+        List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceDayResult(yearMonthStr + "-01", yearMonthStr + "-" + maxDays,insuranceId);
+        //转换类型
+        List<SettlementSourceResultVo> settlementSourcesTmp = new ArrayList<>();
+        List<SettlementSourceResultVo> settlementSources = new ArrayList<>();
+        signingSources.forEach(signing->{
+            SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
+            settlementSourceResultVo.setDay(signing.getDay());
+            settlementSourceResultVo.setSignDate(signing.getYearmonth());
+            settlementSourceResultVo.setSignPremium(new BigDecimal(signing.getWrittenPremium()));
+            settlementSourceResultVo.setSignReceivableAmount(new BigDecimal(signing.getTotalAmountReceivable()));
+            settlementSourceResultVo.setSettlementData(new ArrayList<>());
+            settlementSourcesTmp.add(settlementSourceResultVo);
+        });
+
+        for(int i=1;i<=maxDays;i++)
+        {
+            //查找day是否有数据
+            String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
+            boolean countBol = settlementSourcesTmp.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
+            if(!countBol)
+            {
+                SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
+                settlementSourceResultVo.setDay(finalI);
+                settlementSourceResultVo.setSignDate(yearMonthStr + "-" + finalI);
+                settlementSources.add(settlementSourceResultVo);
+            }else{
+                settlementSources.add(settlementSourcesTmp.stream().filter(x -> finalI.equals(x.getDay())).findFirst().get());
+            }
+        }
+
+        int year = yearMonth.getYear();
+        //遍历结算数据
+        settlementSources.forEach(signing->{
+            String startTime = String.valueOf(year) + "-01-01";
+            String endTime = String.valueOf(year) + "-12-31";
+            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++)
+            {
+                //查找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;
+                if(!countBol)
+                {
+                    SettlementSourceDataVo settlementSourceData = new SettlementSourceDataVo();
+                    settlementSourceData.setDay(finalI);
+                    settlementSourceData.setSettlementDate(year + "-" + finalI);
+                    settlementSourceResult.add(settlementSourceData);
+                }else{
+                    settlementSourceResult.add(settlementSourceResultTmp.stream().filter(x -> finalI.equals(x.getDay())).findFirst().get());
+                }
+            }
+            signing.setSettlementData(settlementSourceResult);
+        });
+
+
+        //计算每个日期的签单保费 和代理人佣金
+        settlementSources.forEach(settlementSource->{
+            int length = settlementSource.getSettlementData().size();
+            BigDecimal settlementPremium = new BigDecimal(0);
+            BigDecimal agentCommission = new BigDecimal(0);
+            //横向计算
+            for(int i=0;i<length;i++){
+                SettlementSourceDataVo settlementSourceData = settlementSource.getSettlementData().get(i);
+                settlementPremium = settlementPremium.add(settlementSourceData.getSettlementPremium());
+                agentCommission = agentCommission.add(settlementSourceData.getAgentCommission());
+            }
+            SettlementSourceDataVo settlementSourceData = new SettlementSourceDataVo();
+            settlementSourceData.setSettlementPremium(settlementPremium);
+            settlementSourceData.setAgentCommission(agentCommission);
+            settlementSourceData.setSettlementDate("合计");
+            settlementSource.getSettlementData().add(settlementSourceData);
+
+            //竖向计算
+//            settlementSource.getSettlementData().stream().filter(x-> x.getDay().equals("01")).count()
+        });
+
+        // 计算每个日期的签单保费 和代理人佣金 竖向计算
+        List<SettlementSourceDataVo> settlementSourceDataSum = new ArrayList<>();
+
+        for(int i=1;i<=12;i++){
+            //提取每个月的数据
+            String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i);
+            List<SettlementSourceDataVo> settlementSourceDataVos = new ArrayList<>();
+
+            BigDecimal settlementPremium = new BigDecimal(0);
+            BigDecimal agentCommission = new BigDecimal(0);
+
+            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());
+                for(int k=0;k<collect.size();k++)
+                {
+                    settlementPremium = settlementPremium.add(collect.get(k).getAgentCommission());
+                    agentCommission = agentCommission.add(collect.get(k).getAgentCommission());
+                }
+            }
+            SettlementSourceDataVo settlementSourceDataVo = new SettlementSourceDataVo();
+            settlementSourceDataVo.setDay(finalI);
+            settlementSourceDataVo.setSettlementPremium(settlementPremium);
+            settlementSourceDataVo.setAgentCommission(agentCommission);
+            settlementSourceDataSum.add(settlementSourceDataVo);
+        }
+
+        //未结算签单保费 与 已结算利润计算
+        settlementSources.forEach(settlementSource -> {
+            SettlementSourceDataVo settlementSourceDataVo = settlementSource.getSettlementData().stream().filter(x -> !"合计".equals(x.getSettlementDate())).findFirst().get();
+            settlementSource.setUnCalculatedAmount(settlementSource.getSignPremium().subtract(settlementSourceDataVo.getSettlementPremium()));
+            settlementSource.setSettledProfit(settlementSource.getSignReceivableAmount().subtract(settlementSourceDataVo.getAgentCommission()));
+        });
+
+        //计算代理人佣金
+        List<HashMap> maxReceivable = invReceivableMapper.getMaxReceivable(yearMonthStr + "-01", yearMonthStr + "-" + maxDays);
+        settlementSources.forEach(settlementSource -> {
+            Boolean b = maxReceivable.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().isPresent();
+            if(!b)
+            {
+                settlementSource.setAgentAmount(new BigDecimal(0));
+            }else{
+                HashMap max = maxReceivable.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().get();
+                SettlementSourceDataVo settlementSourceDataVo = settlementSource.getSettlementData().get(settlementSource.getSettlementData().size() - 1);
+                settlementSource.setAgentAmount(new BigDecimal(max.get("receivable").toString()).subtract(settlementSourceDataVo.getAgentCommission()));
+            }
+        });
+        //计算未结算利润测算
+        List<HashMap> unsettledProfitCalculation = invReceivableMapper.getUnsettledProfitCalculation(yearMonthStr + "-01", yearMonthStr + "-" + maxDays);
+        settlementSources.forEach(settlementSource -> {
+            Boolean b = unsettledProfitCalculation.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().isPresent();
+            if(!b)
+            {
+                settlementSource.setUnsettledProfitCalculation(new BigDecimal(0));
+            }else{
+                HashMap max = unsettledProfitCalculation.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().get();
+                settlementSource.setUnsettledProfitCalculation(new BigDecimal(max.get("unsettled_profit_calculation").toString()));
+            }
+        });
+
+
+        //计算签单合计 (第一层)
+        int length = settlementSources.size();
+        BigDecimal signPremium = new BigDecimal(0);
+        BigDecimal signReceivableAmount = new BigDecimal(0);
+        BigDecimal unCalculatedAmount = new BigDecimal(0);
+        BigDecimal settledProfit = new BigDecimal(0);
+        BigDecimal agentAmount = new BigDecimal(0);
+        BigDecimal unsettledProfitCalculationSum = new BigDecimal(0);
+        for (int i = 0; i < length; i++) {
+            SettlementSourceResultVo settlementSource = settlementSources.get(i);
+            signPremium = signPremium.add(settlementSource.getSignPremium());
+            signReceivableAmount = signReceivableAmount.add(settlementSource.getSignReceivableAmount());
+            unCalculatedAmount = unCalculatedAmount.add(settlementSource.getUnCalculatedAmount());
+            settledProfit = settledProfit.add(settlementSource.getSettledProfit());
+            agentAmount = agentAmount.add(settlementSource.getAgentAmount());
+            unsettledProfitCalculationSum = unsettledProfitCalculationSum.add(settlementSource.getUnsettledProfitCalculation());
+        }
+
+
+
+        //合计
+        SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
+        settlementSourceResultVo.setSignDate("合计");
+        settlementSourceResultVo.setSignPremium(signPremium);
+        settlementSourceResultVo.setSettlementData(settlementSourceDataSum);
+        settlementSourceResultVo.setSignReceivableAmount(signReceivableAmount);
+        settlementSourceResultVo.setUnCalculatedAmount(unCalculatedAmount);
+        settlementSourceResultVo.setSettledProfit(settledProfit);
+        settlementSourceResultVo.setAgentAmount(agentAmount);
+        settlementSourceResultVo.setUnsettledProfitCalculation(unsettledProfitCalculationSum);
+        settlementSources.add(settlementSourceResultVo);
+        return settlementSources;
     }
     }
 
 
     @Override
     @Override
@@ -181,6 +353,23 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         if(invSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSourceQueryVo.getNonCarPolicyId())){
         if(invSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSourceQueryVo.getNonCarPolicyId())){
             queryWrapper.eq(InvSource::getNonCarPolicyId,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]);
+        }
         Page pageData = invSourceMapper.selectPage(page, queryWrapper);
         Page pageData = invSourceMapper.selectPage(page, queryWrapper);
         return pageData;
         return pageData;
     }
     }
@@ -245,6 +434,17 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
         if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){
             queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,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]);
+        }
         Page pageData = invSettlementSourceMapper.selectPage(page, queryWrapper);
         Page pageData = invSettlementSourceMapper.selectPage(page, queryWrapper);
 
 
         return pageData;
         return pageData;
@@ -264,6 +464,13 @@ public class InvReceivableServiceImpl implements InvReceivableService {
         Integer i = invSourceMapper.syncStatus();
         Integer i = invSourceMapper.syncStatus();
         return i;
         return i;
     }
     }
+
+    @Override
+    public List<EsmInsCompany> getInsureCompany() {
+        List<EsmInsCompany> insureCompany = invReceivableMapper.getInsureCompany();
+        return insureCompany;
+    }
+
 }
 }
 
 
 
 

+ 20 - 2
src/main/java/com/ydtech/modules/report/controller/ReportController.java

@@ -202,14 +202,32 @@ public class ReportController extends BaseController {
     }
     }
 
 
     @PostMapping("/getInsPlySettleReport")
     @PostMapping("/getInsPlySettleReport")
-    @ApiOperation(value = "分页获取月度结算清单数据")
+    @ApiOperation(value = "报表-应收统计-查询")
     public HttpResult<BasePageResult<InsPlySettleReportResVo>> getInsPlySettleReport(@RequestBody InsPlySettleReportReqVo insPlySettleReportReqVo) {
     public HttpResult<BasePageResult<InsPlySettleReportResVo>> getInsPlySettleReport(@RequestBody InsPlySettleReportReqVo insPlySettleReportReqVo) {
         BasePageResult<InsPlySettleReportResVo> quoteResult = insPlySettleService.getInsPlySettleReport(insPlySettleReportReqVo);
         BasePageResult<InsPlySettleReportResVo> quoteResult = insPlySettleService.getInsPlySettleReport(insPlySettleReportReqVo);
         return HttpResult.ok("success", quoteResult);
         return HttpResult.ok("success", quoteResult);
     }
     }
     @PostMapping("/exportInsPlySettleReport")
     @PostMapping("/exportInsPlySettleReport")
-    @ApiOperation(value = "导出月度结算清单数据")
+    @ApiOperation(value = "报表-应收统计-导出清单")
     public HttpResult<String> exportInsPlySettleReport(@RequestBody InsPlySettleReportReqVo insPlySettleReportReqVo) {
     public HttpResult<String> exportInsPlySettleReport(@RequestBody InsPlySettleReportReqVo insPlySettleReportReqVo) {
         return insPlySettleService.exportInsPlySettleReport(insPlySettleReportReqVo);
         return insPlySettleService.exportInsPlySettleReport(insPlySettleReportReqVo);
     }
     }
+
+    @PostMapping("/exportInsPlySettleListData")
+    @ApiOperation(value = "报表-应收统计-导出清单")
+    public HttpResult<String> exportInsPlySettleReportListData(@RequestBody InsPlySettleReportReqVo insPlySettleReportReqVo) {
+        return insPlySettleService.exportInsPlySettleReportList(insPlySettleReportReqVo);
+    }
+
+   /* @PostMapping("/getInsPlySettleReport")
+    @ApiOperation(value = "分页获取应付统计清单数据")
+    public HttpResult<BasePageResult<InsPlySettleReportResVo>> getPayApplyReport(@RequestBody PayApplyReportReqVo payApplyReportReqVo) {
+        BasePageResult<InsPlySettleReportResVo> quoteResult = insPlySettleService.getInsPlySettleReport(payApplyReportReqVo);
+        return HttpResult.ok("success", quoteResult);
+    }
+    @PostMapping("/exportInsPlySettleReport")
+    @ApiOperation(value = "导出应付统计清单数据")
+    public HttpResult<String> exportPayApplyReport(@RequestBody PayApplyReportReqVo payApplyReportReqVo) {
+        return insPlySettleService.exportInsPlySettleReport(payApplyReportReqVo);
+    }*/
 }
 }

+ 9 - 2
src/main/java/com/ydtech/modules/report/model/vo/InsPlySettleReportReqVo.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.report.model.vo;
 package com.ydtech.modules.report.model.vo;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.Min;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
 /**
 /**
@@ -20,8 +22,13 @@ public class InsPlySettleReportReqVo {
     @ApiModelProperty("状态")
     @ApiModelProperty("状态")
     private String status;
     private String status;
 
 
-    @ApiModelProperty("结算单生成时间")
-    private LocalDateTime createTime;
+    @ApiModelProperty(value = "结算单生成开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate quoteStartDate;
+
+    @ApiModelProperty(value = "结算单生成结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate quoteEndDate;
 
 
     @ApiModelProperty(value = "每页页数")
     @ApiModelProperty(value = "每页页数")
     @Min(value = 20, message = "页数最小为20")
     @Min(value = 20, message = "页数最小为20")

+ 14 - 10
src/main/java/com/ydtech/modules/report/model/vo/InsPlySettleReportResVo.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.report.model.vo;
 package com.ydtech.modules.report.model.vo;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -14,24 +15,27 @@ import java.time.LocalDateTime;
 @Data
 @Data
 public class InsPlySettleReportResVo {
 public class InsPlySettleReportResVo {
 
 
-    @ApiModelProperty("保险公司")
-    private String companyId;
-
-    @ApiModelProperty("保险公司名称")
+    @TableField(value = "company_name")
+    @ExcelProperty(value = "保险公司")
     private String companyName;
     private String companyName;
 
 
-    @ApiModelProperty("结算批次")
-    private String settleBatch;
+    @TableField(value = "settle_month")
+    @ExcelProperty(value = "账单属期")
+    private String settleMonth;
 
 
-    @ApiModelProperty("手续费")
+    @TableField(value = "commission_feevalue")
+    @ExcelProperty(value = "手续费")
     private BigDecimal commissionFeevalue;
     private BigDecimal commissionFeevalue;
 
 
-    @ApiModelProperty("其他费")
+    @TableField(value = "other_feevalue")
+    @ExcelProperty(value = "跟单费")
     private BigDecimal otherFeevalue;
     private BigDecimal otherFeevalue;
 
 
-    @ApiModelProperty("总费用")
+    @TableField(value = "all_fee_value")
+    @ExcelProperty(value = "费用合计")
     private BigDecimal allFeeValue;
     private BigDecimal allFeeValue;
 
 
-    @ApiModelProperty("状态")
+    @TableField(value = "status")
+    @ExcelProperty(value = "账单状态")
     private String status;
     private String status;
 }
 }

+ 3 - 2
src/main/java/com/ydtech/utils/excel/ExcelUtils2.java

@@ -221,9 +221,10 @@ public class ExcelUtils2 {
         ImportParams params = new ImportParams();
         ImportParams params = new ImportParams();
         params.setTitleRows(titleRows);
         params.setTitleRows(titleRows);
         params.setHeadRows(headerRows);
         params.setHeadRows(headerRows);
-        params.setSaveUrl("/home/server/upload/excel/");
+        //       params.setSaveUrl("/home/server/upload/excel/");
 //        params.setNeedSave(true);  //不保存
 //        params.setNeedSave(true);  //不保存
-        params.setNeedVerify(true);
+//        params.setNeedVerify(true);
+        params.setStartSheetIndex(0);
         try {
         try {
             return ExcelImportUtil.importExcel(inputStream, pojoClass, params);
             return ExcelImportUtil.importExcel(inputStream, pojoClass, params);
         } catch (NoSuchElementException e) {
         } catch (NoSuchElementException e) {

+ 55 - 0
src/main/resources/mapper/modules/fnc/InsPlyMainMapper.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.fnc.dao.InsPlyMainMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.fnc.entity.InsPlyMain">
+        <id column="policyno" property="policyno" />
+        <result column="batchno" property="batchno" />
+        <result column="orderno" property="orderno" />
+        <result column="dept_id" property="deptId" />
+        <result column="user_id" property="userId" />
+        <result column="riskcode" property="riskcode" />
+        <result column="pay_date" property="payDate" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="company_id" property="companyId" />
+        <result column="agreement_id" property="agreementId" />
+        <result column="licenseno" property="licenseno" />
+        <result column="applyname" property="applyname" />
+        <result column="applyphone" property="applyphone" />
+        <result column="insurername" property="insurername" />
+        <result column="insurerphone" property="insurerphone" />
+        <result column="taxamount" property="taxamount" />
+        <result column="premium" property="premium" />
+        <result column="no_tax_premium" property="noTaxPremium" />
+        <result column="commission_feerate" property="commissionFeerate" />
+        <result column="other_feerate" property="otherFeerate" />
+        <result column="commission_feevalue" property="commissionFeevalue" />
+        <result column="other_feevalue" property="otherFeevalue" />
+        <result column="all_fee_value" property="allFeeValue" />
+        <result column="first_dept_proportion" property="firstDeptProportion" />
+        <result column="first_dept_premiums" property="firstDeptPremiums" />
+        <result column="second_dept_proportion" property="secondDeptProportion" />
+        <result column="second_dept_premiums" property="secondDeptPremiums" />
+        <result column="third_dept_proportion" property="thirdDeptProportion" />
+        <result column="third_dept_premiums" property="thirdDeptPremiums" />
+        <result column="forth_dept_proportion" property="forthDeptProportion" />
+        <result column="forth_dept_premiums" property="forthDeptPremiums" />
+        <result column="fifth_dept_proportion" property="fifthDeptProportion" />
+        <result column="fifth_dept_premiums" property="fifthDeptPremiums" />
+        <result column="first_detail_proportion" property="firstDetailProportion" />
+        <result column="first_detail_premiums" property="firstDetailPremiums" />
+        <result column="second_detail_proportion" property="secondDetailProportion" />
+        <result column="second_detail_premiums" property="secondDetailPremiums" />
+        <result column="third_detail_proportion" property="thirdDetailProportion" />
+        <result column="third_detail_premiums" property="thirdDetailPremiums" />
+        <result column="user_fee_proportion" property="userFeeProportion" />
+        <result column="user_feel_premiums" property="userFeelPremiums" />
+        <result column="creator" property="creator" />
+        <result column="createtime" property="createtime" />
+        <result column="updateuser" property="updateuser" />
+        <result column="updatetime" property="updatetime" />
+    </resultMap>
+
+</mapper>

+ 52 - 3
src/main/resources/mapper/modules/fnc/InsPlySettleMapper.xml

@@ -29,7 +29,6 @@
     </resultMap>
     </resultMap>
 
 
     <select id="getInsPlySettleReport"  resultMap="SettleReportDataMap">
     <select id="getInsPlySettleReport"  resultMap="SettleReportDataMap">
-
         SELECT
         SELECT
         ''company_name,
         ''company_name,
         ''settle_month,
         ''settle_month,
@@ -42,7 +41,19 @@
         <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
         <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
             and p.company_id = #{reportReqVo.companyId}
             and p.company_id = #{reportReqVo.companyId}
         </if>
         </if>
-        GROUP BY p.`company_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`
+        <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
+            ,p.company_id
+        </if>
+        <if test="reportReqVo.status != null and reportReqVo.status != ''">
+            ,p.status
+        </if>
     </select>
     </select>
     <select id="getInsPlySettleReportCount" resultType="Long">
     <select id="getInsPlySettleReportCount" resultType="Long">
         select
         select
@@ -60,7 +71,45 @@
         <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
         <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
             and p.company_id = #{reportReqVo.companyId}
             and p.company_id = #{reportReqVo.companyId}
         </if>
         </if>
-        GROUP BY p.`company_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`
+        <if test="reportReqVo.companyId != null and reportReqVo.companyId != ''">
+            ,p.company_id
+        </if>
+        <if test="reportReqVo.status != null and reportReqVo.status != ''">
+            ,p.status
+        </if>
         ) as s
         ) as s
     </select>
     </select>
+    <select id="getInsPlySettleReportList" resultMap="BaseResultMap">
+        SELECT
+        p.settleno,
+        p.company_id,
+        (select name from esm_ins_company where id = p.company_id)company_name,
+        p.settle_month,
+        p.settle_batch,
+        p.status,
+        p.`commission_feevalue`,
+        p.`other_feevalue`,
+        p.`all_fee_value`,
+        p.create_time,
+        p.dept_id,
+        p.operator
+        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>
+    </select>
 </mapper>
 </mapper>

+ 105 - 18
src/main/resources/mapper/modules/inv/InvReceivableMapper.xml

@@ -9,7 +9,42 @@
 
 
     <select id="getReceivableList" resultType="com.ydtech.modules.inv.model.vo.ReceivableResultVo">
     <select id="getReceivableList" resultType="com.ydtech.modules.inv.model.vo.ReceivableResultVo">
         SELECT
         SELECT
-        DATE_FORMAT( signing_time, '%d') as day,
+            DATE_FORMAT( signing_time, '%d' ) AS DAY,
+            DATE_FORMAT( signing_time, '%Y-%m' ) AS yearmonth,
+            DATE_FORMAT( signing_time, '%Y-%m-%d' ),
+            insurance_id,
+            insurance_name,
+            sum( jq_premium_tax ) AS jq_premium_tax,
+            sum( jq_premium ) AS jq_premium,
+            sum( sy_premium_tax ) AS sy_premium_tax,
+            sum( sy_premium ) AS sy_premium,
+            sum( taxamount ) AS taxamount,
+            sum( non_car_premium_tax ) AS non_car_premium_tax,
+            sum( non_car_premium ) AS non_car_premium,
+            sum( premium ) AS premium,
+            sum( non_copying ) AS non_copying,
+            sum( jq_premium_tax + sy_premium_tax + non_car_premium_tax ) AS total_permium,
+            sum( premium + non_copying ) AS total_receivable,
+            sum( subsidy_amount ) AS subsidy_amount,
+            sum( total_receivable_amount ) AS total_receivable_amount
+        FROM
+            inv_source
+        WHERE
+            signing_time BETWEEN #{startTime}
+                AND #{endTime}
+          and insurance_id = #{insuranceId}
+        GROUP BY
+            insurance_id,
+            insurance_name,
+            DATE_FORMAT( signing_time,'%Y-%m-%d'),
+            DATE_FORMAT( signing_time, '%d' ),
+            DATE_FORMAT( signing_time, '%Y-%m' )
+
+    </select>
+
+    <select id="getSigningSourceResult" resultType="com.ydtech.modules.inv.model.vo.SigningSourceResultVo">
+        SELECT
+        DATE_FORMAT( signing_time, '%m') as day,
         DATE_FORMAT( signing_time, '%Y-%m' ) as yearmonth,
         DATE_FORMAT( signing_time, '%Y-%m' ) as yearmonth,
         insurance_name,
         insurance_name,
         sum( jq_premium_tax ) as jq_premium_tax,
         sum( jq_premium_tax ) as jq_premium_tax,
@@ -21,10 +56,9 @@
         sum(non_car_premium) as non_car_premium,
         sum(non_car_premium) as non_car_premium,
         sum(premium) as premium,
         sum(premium) as premium,
         sum(non_copying) as non_copying,
         sum(non_copying) as non_copying,
-        sum(jq_premium_tax + sy_premium_tax + non_car_premium_tax) as total_permium,
+        sum(jq_premium_tax + sy_premium_tax + non_car_premium_tax) as written_premium,
         sum(premium + non_copying) as total_receivable,
         sum(premium + non_copying) as total_receivable,
-        sum(subsidy_amount) as subsidy_amount,
-        sum(total_receivable_amount) as total_receivable_amount
+        sum(receivable) as total_amount_receivable
         FROM
         FROM
         inv_source
         inv_source
         WHERE
         WHERE
@@ -33,15 +67,17 @@
         <!--and insurance_id = '123'-->
         <!--and insurance_id = '123'-->
         GROUP BY
         GROUP BY
         insurance_id,
         insurance_id,
+        insurance_name,
         DATE_FORMAT(
         DATE_FORMAT(
         signing_time,
         signing_time,
-        '%Y-%m-%d')
+        '%Y-%m'),
+        DATE_FORMAT( signing_time, '%m')
     </select>
     </select>
 
 
-    <select id="getSigningSourceResult" resultType="com.ydtech.modules.inv.model.vo.SigningSourceResultVo">
+    <select id="getSigningSourceDayResult" resultType="com.ydtech.modules.inv.model.vo.SigningSourceResultVo">
         SELECT
         SELECT
-        DATE_FORMAT( signing_time, '%m') as day,
-        DATE_FORMAT( signing_time, '%Y-%m' ) as yearmonth,
+        DATE_FORMAT( signing_time, '%d') as day,
+        DATE_FORMAT( signing_time, '%Y-%m-%d' ) as yearmonth,
         insurance_name,
         insurance_name,
         sum( jq_premium_tax ) as jq_premium_tax,
         sum( jq_premium_tax ) as jq_premium_tax,
         sum(jq_premium) as jq_premium,
         sum(jq_premium) as jq_premium,
@@ -60,34 +96,85 @@
         WHERE
         WHERE
         signing_time BETWEEN #{startTime}
         signing_time BETWEEN #{startTime}
         AND #{endTime}
         AND #{endTime}
-        <!--and insurance_id = '123'-->
+          <if test="insuranceId != null and insuranceId != ''">
+            and insurance_id = #{insuranceId}
+          </if>
         GROUP BY
         GROUP BY
         insurance_id,
         insurance_id,
+        insurance_name,
         DATE_FORMAT(
         DATE_FORMAT(
         signing_time,
         signing_time,
-        '%Y-%m')
+        '%Y-%m-%d'),
+        DATE_FORMAT( signing_time, '%d' )
     </select>
     </select>
 
 
-    <select id="getSettlementSourceResult" resultType="com.ydtech.modules.inv.model.vo.SettlementSourceResultVo">
+    <select id="getSettlementSourceResult" resultType="com.ydtech.modules.inv.model.vo.SettlementSourceDataVo">
         SELECT
         SELECT
             DATE_FORMAT( agency_settlement_time, '%m' ) AS DAY,
             DATE_FORMAT( agency_settlement_time, '%m' ) AS DAY,
-            DATE_FORMAT( agency_settlement_time, '%Y-%m' ) AS yearmonth,
+            DATE_FORMAT( agency_settlement_time, '%Y-%m' ) AS settlement_date,
             insurance_company,
             insurance_company,
-            sum( jq_premium_tax ) AS jq_premium_tax,
-            sum( sy_premium_tax ) AS sy_premium_tax,
-            sum( non_car_premium_tax ) AS non_car_premium_tax,
-            sum( jq_premium_tax + sy_premium_tax + non_car_premium_tax ) AS writtenPremium,
-            sum( settlement_amount ) AS settlement_amount
+            sum( jq_premium_tax + sy_premium_tax + non_car_premium_tax ) AS settlement_premium,
+            sum( settlement_amount ) AS agent_commission
         FROM
         FROM
             inv_settlement_source
             inv_settlement_source
         WHERE
         WHERE
+            sign_date = #{signDate}
+                AND
             agency_settlement_time BETWEEN #{startTime}
             agency_settlement_time BETWEEN #{startTime}
                 AND #{endTime}
                 AND #{endTime}
         GROUP BY
         GROUP BY
             insurance_company,
             insurance_company,
             DATE_FORMAT(
             DATE_FORMAT(
                     agency_settlement_time,
                     agency_settlement_time,
-                    '%Y-%m')
+                    '%Y-%m'),
+            DATE_FORMAT( agency_settlement_time, '%m' )
+    </select>
+
+    <select id="getInsureCompany" resultType="com.ydtech.modules.esm.model.EsmInsCompany">
+        SELECT
+            eic.*
+        FROM
+            esm_ins_company eic,
+            ptl_agreement pa
+        WHERE
+            eic.id = pa.insurance_company_id
+        GROUP BY
+            eic.id
     </select>
     </select>
 
 
+
+    <select id="getMaxReceivable" resultType="HashMap">
+        SELECT
+            DATE_FORMAT(
+                    signing_time,
+                    '%Y-%m-%d') as yeatmonth,
+            sum( receivable ) as receivable
+        FROM
+            inv_source
+        WHERE
+          signing_time BETWEEN #{startTime}  and #{endTime}
+        GROUP BY
+            DATE_FORMAT(
+                    signing_time,
+                    '%Y-%m-%d')
+    </select>
+
+    <select id="getUnsettledProfitCalculation" resultType="HashMap">
+        SELECT
+            DATE_FORMAT(
+                    signing_time,
+                    '%Y-%m-%d') as yeatmonth,
+            sum( receivable ) - sum(max_receivable) as unsettled_profit_calculation
+        FROM
+            inv_source
+        WHERE
+            clearing_state = 0 and
+            signing_time BETWEEN '2024-01-01'  and '2024-01-31'
+        GROUP BY
+            DATE_FORMAT(
+                signing_time,
+                '%Y-%m-%d')
+    </select>
+
+
 </mapper>
 </mapper>

+ 7 - 7
src/main/resources/mapper/modules/inv/InvSourceMapper.xml

@@ -61,12 +61,12 @@
     </sql>
     </sql>
 
 
     <update id="syncStatus">
     <update id="syncStatus">
-        UPDATE inv_source ins,
-            inv_settlement_source iss
-        SET ins.clearing_state = 1
-            AND ins.jq_policy_id = iss.jq_policy_id
-            AND ins.sy_policy_id = iss.sy_policy_id
-            AND ins.non_car_policy_id = iss.non_car_policy_id
-            AND ins.licenseno = iss.licenseno
+        UPDATE inv_source ins
+            JOIN inv_settlement_source iss ON ins.jq_policy_id = iss.jq_policy_id
+                AND ins.sy_policy_id = iss.sy_policy_id
+                AND ins.non_car_policy_id = iss.non_car_policy_id
+                AND ins.licenseno = iss.licenseno
+        SET ins.clearing_state = 1,
+            ins.clearing_time = iss.agency_settlement_time;
     </update>
     </update>
 </mapper>
 </mapper>

BIN
src/main/resources/template/policyImport.xlsx