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

Merge remote-tracking branch 'origin/master'

lixiaolong 1 месяц назад
Родитель
Сommit
e969424890
37 измененных файлов с 977 добавлено и 92 удалено
  1. 10 4
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java
  2. 2 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/UpdateSettlementStatusVo.java
  3. 31 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditSummaryParam.java
  4. 30 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditSummaryVO.java
  5. 27 1
      commons/src/main/java/com/jzg/commons/entity/report/dto/ReportMeetDataDetailDto.java
  6. 22 0
      commons/src/main/java/com/jzg/commons/entity/report/vo/PayableStatisticsDetailParam.java
  7. 4 1
      commons/src/main/java/com/jzg/commons/entity/report/vo/ReportSearchCommonVo.java
  8. 30 0
      commons/src/main/java/com/jzg/commons/entity/user/vo/UserInfoWithPhone.java
  9. 15 0
      consoleStatistics/src/main/java/com/jzg/console/client/FeeAuditClient.java
  10. 26 0
      consoleStatistics/src/main/java/com/jzg/console/client/OrganizationClient.java
  11. 44 2
      consoleStatistics/src/main/java/com/jzg/console/controller/ReportFinanceDataManageController.java
  12. 41 0
      consoleStatistics/src/main/java/com/jzg/console/mapper/ReportMeetDataMapper.java
  13. 38 0
      consoleStatistics/src/main/java/com/jzg/console/service/ReportMeetDataService.java
  14. 11 16
      consoleStatistics/src/main/java/com/jzg/console/service/ReportReceivableDataService.java
  15. 108 0
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportMeetDataServiceImpl.java
  16. 87 32
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportPersonCheckDataServiceImpl.java
  17. 39 6
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportReceivableDataServiceImpl.java
  18. 162 0
      consoleStatistics/src/main/resources/mapper/ReportMeetDataMapper.xml
  19. 8 8
      consoleStatistics/src/main/resources/mapper/ReportReceivableDataMapper.xml
  20. 37 8
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java
  21. 1 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  22. 1 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  23. 16 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java
  24. 8 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrderAdjustController.java
  25. 12 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsFeeAuditMapper.java
  26. 10 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java
  27. 27 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  28. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  29. 28 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  30. 15 4
      tenant/organization/src/main/java/com/jzg/organization/controller/SysUserJzgInfoController.java
  31. 1 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeInvoiceSettlementMapper.java
  32. 9 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgInfoMapper.java
  33. 9 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgInfoService.java
  34. 5 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  35. 26 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoServiceImpl.java
  36. 16 5
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml
  37. 20 0
      tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

+ 10 - 4
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -3,6 +3,7 @@ package com.jzg.commons.entity.finance.po;
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -50,13 +51,14 @@ public class InsPlyIncome extends BaseModel {
     private String productName;
 
     @Schema(description = "险种")
-    @ExcelProperty("险种")
+    @ExcelProperty("险种编码")
     @ExcelIgnore
     private String riskCode;
 
     @Schema(description = "签单时间")
     //@TableField(exist = false)
-    @ExcelIgnore
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelProperty("签单时间")
     private LocalDateTime signingTime;
 
     @Schema(description = "签单年份")
@@ -66,6 +68,7 @@ public class InsPlyIncome extends BaseModel {
 
     @Schema(description = "签单日期 yyyy-mm-dd 格式")
     @TableField(exist = false)
+    @ExcelProperty("签单日期")
     @ExcelIgnore
     private String signDate;
 
@@ -266,6 +269,7 @@ public class InsPlyIncome extends BaseModel {
     private String contactPerson;
 
     @Schema(description = "对接人手机号")
+    @ExcelProperty("对接人手机号")
     private String contactPersonPhone;
 
     public String getDockingPerson(){
@@ -281,6 +285,7 @@ public class InsPlyIncome extends BaseModel {
     private String businessSource;
 
     @Schema(description = "结算时间")
+    @ExcelProperty("结算时间")
     private LocalDateTime settlementTime;
 
     // 设置初始值为0, 未结算
@@ -374,15 +379,16 @@ public class InsPlyIncome extends BaseModel {
 
     @TableField(exist = false)
     @Schema(description = "非车应收金额")
+    @ExcelProperty("非车应收金额")
     private BigDecimal jyTotalPremiums;
 
     @TableField(exist = false)
     @Schema(description = "合作保险公司ID")
+    @ExcelIgnore
     private String partnerCompanyId;
 
     @TableField(exist = false)
     @Schema(description = "禁用标志:1-已对账(禁用),0-未对账(可用)")
+    @ExcelIgnore
     private String disableFlag;
-
-
 }

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/UpdateSettlementStatusVo.java

@@ -2,6 +2,7 @@ package com.jzg.commons.entity.finance.vo;
 
 import com.jzg.commons.core.base.PageRequest;
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 
 import java.util.List;
@@ -11,6 +12,7 @@ import java.util.List;
  * @date 2025/7/31 17:59
  */
 
+@AllArgsConstructor
 @Data
 public class UpdateSettlementStatusVo extends PageRequest {
 

+ 31 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditSummaryParam.java

@@ -0,0 +1,31 @@
+package com.jzg.commons.entity.orders.vo;
+
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+@Data
+public class FeeAuditSummaryParam  extends PageRequest implements Serializable  {
+
+    @Serial
+    private static final long serialVersionUID = 5264837616895147955L;
+
+    @Schema(name = "签单开始时间")
+    private String signTimeStart;
+
+    @Schema(name = "签单结束时间")
+    private String signTimeEnd;
+
+    private LocalDateTime signTimeStartTime;
+
+    private LocalDateTime signTimeEndTime;
+
+    @Schema(name = "租户代码")
+    private String systemCode;
+
+}

+ 30 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditSummaryVO.java

@@ -0,0 +1,30 @@
+package com.jzg.commons.entity.orders.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class FeeAuditSummaryVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -1881572631140225228L;
+
+    private String receiveUser;
+
+    private String auditStatus;
+
+    @Schema(name = "是否是疑问订单")
+    private String problemIdentify;
+
+    private Long num;
+
+    @Schema(name = "进行费用调整的数量")
+    private Long calFee;
+
+    @Schema(name = "费用审核耗时")
+    private Long costTime;
+
+}

+ 27 - 1
commons/src/main/java/com/jzg/commons/entity/report/dto/ReportMeetDataDetailDto.java

@@ -50,7 +50,7 @@ public class ReportMeetDataDetailDto {
     /**
      * 银行卡号
      */
-    @ExcelProperty(value = "手机号", index = 2)
+    @ExcelProperty(value = "银行卡号", index = 2)
     @ColumnWidth(30)
     @Schema(description = "银行卡号")
     private String bankCardNumber;
@@ -95,4 +95,30 @@ public class ReportMeetDataDetailDto {
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @Schema(description = "付款时间")
     private Date paidTime;
+
+    /**
+     * 付款账户
+     */
+    @ExcelProperty(value = "付款账户", index = 8)
+    @ColumnWidth(30)
+    @Schema(description = "付款账户")
+    private String payAccountName;
+
+    /**
+     * 驳回人
+     */
+    @ExcelProperty(value = "驳回人", index = 9)
+    @ColumnWidth(20)
+    @Schema(description = "驳回人")
+    private String rejectPerson;
+
+    /**
+     * 驳回时间
+     */
+    @ExcelProperty(value = "驳回时间", index = 10)
+    @ColumnWidth(30)
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "驳回时间")
+    private Date rejectTime;
 }

+ 22 - 0
commons/src/main/java/com/jzg/commons/entity/report/vo/PayableStatisticsDetailParam.java

@@ -0,0 +1,22 @@
+package com.jzg.commons.entity.report.vo;
+
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 财务数据-应付统计明细列表请求参数
+ * 根据年月查询该月所有提现申请明细
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(description = "财务数据-应付统计明细列表请求参数")
+public class PayableStatisticsDetailParam extends PageRequest {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "年月时间,格式:yyyy-MM")
+    private String yearAndMonthTime;
+
+}

+ 4 - 1
commons/src/main/java/com/jzg/commons/entity/report/vo/ReportSearchCommonVo.java

@@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
 import java.io.Serializable;
 import java.util.List;
 
@@ -21,7 +22,9 @@ import java.util.List;
 @NoArgsConstructor
 public class ReportSearchCommonVo implements Serializable {
 
-     @Schema(description = "用户id")
+    @Serial
+    private static final long serialVersionUID = -8629307976503058201L;
+    @Schema(description = "用户id")
      private String userId;
 
      @Schema(description = "路由可以")

+ 30 - 0
commons/src/main/java/com/jzg/commons/entity/user/vo/UserInfoWithPhone.java

@@ -0,0 +1,30 @@
+package com.jzg.commons.entity.user.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class UserInfoWithPhone implements Serializable {
+
+
+    @Serial
+    private static final long serialVersionUID = -8342922106296036199L;
+    private String userId;
+
+    private String jzgInfoId;
+
+    private String systemCode;
+
+    // 手机号, sys_user表的userName字段
+    private String userName;
+
+    private String name;
+
+    private String deptTid;
+
+    private String deptName;
+
+
+}

+ 15 - 0
consoleStatistics/src/main/java/com/jzg/console/client/FeeAuditClient.java

@@ -3,11 +3,15 @@ package com.jzg.console.client;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.FeeAuditParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+
 /**
  * 调用 quotation-summary 的订单审核接口 Feign 客户端
  */
@@ -19,4 +23,15 @@ public interface FeeAuditClient {
      */
     @PostMapping("/feeAudit/auditList")
     HttpResult<Page<FeeAuditVo>> auditList(@RequestBody FeeAuditParam param);
+
+    /**
+     * 查询费用审核统计数据
+     *
+     * @param param
+     * @author lipf
+     * @date 2026/7/24 14:28
+     */
+    @PostMapping("/feeAudit/queryAuditSummary")
+    HttpResult<List<FeeAuditSummaryVO>> queryAuditSummary(@RequestBody FeeAuditSummaryParam param);
+
 }

+ 26 - 0
consoleStatistics/src/main/java/com/jzg/console/client/OrganizationClient.java

@@ -0,0 +1,26 @@
+package com.jzg.console.client;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.user.vo.UserInfoWithPhone;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+/**
+ * 调用 quotation-summary 的订单审核接口 Feign 客户端
+ */
+@FeignClient(value = "jzg-organization")
+public interface OrganizationClient {
+
+    /**
+     * 查询用户基础信息
+     *
+     * @author lipf
+     * @date 2026/7/24 14:10
+     */
+    @PostMapping("/api/v1/organization/queryUserInfo")
+    HttpResult<Map<String, UserInfoWithPhone>> queryUserInfo(@RequestParam("systemCode") String systemCode);
+
+}

+ 44 - 2
consoleStatistics/src/main/java/com/jzg/console/controller/ReportFinanceDataManageController.java

@@ -1,5 +1,6 @@
 package com.jzg.console.controller;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.core.base.BaseController;
@@ -7,6 +8,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.report.dto.FeeAuditSummaryVo;
 import com.jzg.commons.entity.report.vo.FeeAuditDetailParam;
 import com.jzg.commons.entity.report.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.report.vo.PayableStatisticsDetailParam;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import com.jzg.console.service.*;
@@ -294,6 +296,7 @@ public class ReportFinanceDataManageController extends BaseController {
     @Operation(summary = "财务数据-人员审核-列表查询", description = "财务数据-人员审核-列表查询")
     @PostMapping(value = "/personCheckDataPageList")
     public HttpResult<?> personCheckDataPageList(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        log.info("查询财务人员审核统计信息。 reportSearchCommonVo=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo));
         try{
             IPage<?> pageList = reportPersonCheckDataService.getPageListByParams(reportSearchCommonVo);
             return HttpResult.ok(pageList);
@@ -412,7 +415,7 @@ public class ReportFinanceDataManageController extends BaseController {
     public HttpResult<?> receivableStatistics(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
         try {
             String systemCode = getSystemCode();
-            List<?> list = reportReceivableDataService.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
+            IPage<?> list = reportReceivableDataService.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
             return HttpResult.ok(list);
         } catch (Exception e) {
             log.error("财务数据-应收统计异常", e);
@@ -442,7 +445,7 @@ public class ReportFinanceDataManageController extends BaseController {
     public HttpResult<?> receivableStatisticsDetail(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
         try {
             String systemCode = getSystemCode();
-            List<?> list = reportReceivableDataService.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+            IPage<?> list = reportReceivableDataService.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
             return HttpResult.ok(list);
         } catch (Exception e) {
             log.error("财务数据-应收统计明细异常", e);
@@ -461,4 +464,43 @@ public class ReportFinanceDataManageController extends BaseController {
         reportReceivableDataService.exportReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
     }
 
+    /**
+     * 财务数据-应付统计:按月份汇总查询应付数据
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     * 保费按签单时间(signing_time)统计,佣金/提现按创建时间(create_time)统计
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应付统计", description = "财务数据-应付统计(按月份汇总)")
+    @PostMapping(value = "/payableStatistics")
+    public HttpResult<?> payableStatistics(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        try {
+            String systemCode = getSystemCode();
+            IPage<?> list = reportMeetDataService.getPayableStatisticsByMonth(reportSearchCommonVo, systemCode);
+            return HttpResult.ok(list);
+        } catch (Exception e) {
+            log.error("财务数据-应付统计异常", e);
+            return HttpResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 财务数据-应付统计明细:查询指定年月的提现明细列表
+     * 根据年月查询 sys_amount_auditing 中 create_time 落在该年月的所有提现记录
+     * 返回:业务员名称/手机号/银行卡号/银行/状态/提现金额/付款人/付款账户/付款时间/驳回人/驳回时间
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应付统计明细", description = "财务数据-应付统计明细(按年月查询)")
+    @PostMapping(value = "/payableStatisticsDetail")
+    public HttpResult<?> payableStatisticsDetail(@RequestBody PayableStatisticsDetailParam param) {
+        try {
+            String systemCode = getSystemCode();
+            IPage<?> list = reportMeetDataService.getPayableStatisticsDetail(param, systemCode);
+            return HttpResult.ok(list);
+        } catch (Exception e) {
+            log.error("财务数据-应付统计明细异常", e);
+            return HttpResult.error(e.getMessage());
+        }
+    }
+
 }

+ 41 - 0
consoleStatistics/src/main/java/com/jzg/console/mapper/ReportMeetDataMapper.java

@@ -0,0 +1,41 @@
+package com.jzg.console.mapper;
+
+import com.jzg.commons.entity.report.dto.ReportMeetDataDetailDto;
+import com.jzg.commons.entity.report.dto.ReportMeetDataDto;
+import com.jzg.commons.entity.report.vo.PayableStatisticsDetailParam;
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 财务数据-应付统计 Mapper
+ */
+@Mapper
+public interface ReportMeetDataMapper {
+
+    /**
+     * 按月份汇总应付统计数据
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     *
+     * @param reportSearchCommonVo 查询参数(year 为年份集合,如 ["2026"])
+     * @param systemCode 系统编码(当前登录用户的租户编码)
+     * @return 按月份汇总的应付统计数据
+     */
+    List<ReportMeetDataDto> getPayableStatisticsByMonth(@Param("param") ReportSearchCommonVo reportSearchCommonVo,
+                                                        @Param("systemCode") String systemCode);
+
+    /**
+     * 查询指定年月的应付统计明细列表
+     * 查询 sys_amount_auditing 中 create_time 落在该年月的所有提现记录
+     * 返回:业务员名称/手机号/银行卡号/银行/状态/提现金额/付款人/付款账户/付款时间/驳回人/驳回时间
+     *
+     * @param param 请求参数(yearAndMonthTime 格式 yyyy-MM)
+     * @param systemCode 系统编码(当前登录用户的租户编码)
+     * @return 应付统计明细列表
+     */
+    List<ReportMeetDataDetailDto> getPayableStatisticsDetail(@Param("param") PayableStatisticsDetailParam param,
+                                                             @Param("systemCode") String systemCode);
+}

+ 38 - 0
consoleStatistics/src/main/java/com/jzg/console/service/ReportMeetDataService.java

@@ -1,5 +1,7 @@
 package com.jzg.console.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.jzg.commons.entity.report.vo.PayableStatisticsDetailParam;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 
 import java.util.List;
@@ -20,4 +22,40 @@ public interface ReportMeetDataService extends  ReportBaseService{
      *  @Description:  财务数据-应付-列表
      */
     List<?> getListByParams(ReportSearchCommonVo reportSearchCommonVo);
+
+    /**
+     * 按月份汇总应付统计数据 - 分页查询
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     *
+     * @param reportSearchCommonVo 查询参数(包含年份和分页参数)
+     * @param systemCode 系统编码(当前登录用户的租户编码)
+     * @return 按月份汇总的应付统计数据分页结果
+     */
+    IPage<?> getPayableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+
+    /**
+     * 查询指定年月的应付统计明细列表 - 分页查询
+     * 查询 sys_amount_auditing 中 create_time 落在该年月的所有提现记录
+     * 返回:业务员名称/手机号/银行卡号/银行/状态/提现金额/付款人/付款账户/付款时间/驳回人/驳回时间
+     *
+     * @param param 请求参数(包含 yearAndMonthTime 和分页参数)
+     * @param systemCode 系统编码(当前登录用户的租户编码)
+     * @return 应付统计明细分页结果
+     */
+    IPage<?> getPayableStatisticsDetail(PayableStatisticsDetailParam param, String systemCode);
+
+    /**
+     * 财务数据-应付统计导出Excel
+     * @param reportSearchCommonVo 查询参数
+     * @param systemCode 系统编码
+     */
+    void exportPayableStatistics(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+
+    /**
+     * 财务数据-应付统计明细导出Excel
+     * @param param 请求参数
+     * @param systemCode 系统编码
+     */
+    void exportPayableStatisticsDetail(PayableStatisticsDetailParam param, String systemCode);
 }

+ 11 - 16
consoleStatistics/src/main/java/com/jzg/console/service/ReportReceivableDataService.java

@@ -1,5 +1,6 @@
 package com.jzg.console.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 
 import java.util.List;
@@ -29,26 +30,20 @@ public interface ReportReceivableDataService extends  ReportBaseService{
     List<?> getDetailListByParams(ReportSearchCommonVo reportSearchCommonVo);
 
     /**
-     *  @version
-     *  @author: jk
-     *  @Date: 2026/7/20
-     *  @Description:  财务数据-应收统计(按月份汇总)
-     *  @param reportSearchCommonVo 查询参数(包含年份)
-     *  @param systemCode 系统编码
-     *  @return 按月份汇总的应收数据列表
+     * 财务数据-应收统计(按月份汇总)- 分页查询
+     * @param reportSearchCommonVo 查询参数(包含年份和分页参数)
+     * @param systemCode 系统编码
+     * @return 按月份汇总的应收数据分页结果
      */
-    List<?> getReceivableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+    IPage<?> getReceivableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
 
     /**
-     *  @version
-     *  @author: jk
-     *  @Date: 2026/7/20
-     *  @Description:  财务数据-应收统计明细(按保险公司分组)
-     *  @param reportSearchCommonVo 查询参数(包含年月)
-     *  @param systemCode 系统编码
-     *  @return 按保险公司分组的应收明细数据列表
+     * 财务数据-应收统计明细(按保险公司分组)- 分页查询
+     * @param reportSearchCommonVo 查询参数(包含年月和分页参数)
+     * @param systemCode 系统编码
+     * @return 按保险公司分组的应收明细数据分页结果
      */
-    List<?> getReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+    IPage<?> getReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
 
     /**
      * 财务数据-应收统计导出Excel

+ 108 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportMeetDataServiceImpl.java

@@ -1,16 +1,27 @@
 package com.jzg.console.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.entity.report.dto.*;
+import com.jzg.commons.entity.report.vo.PayableStatisticsDetailParam;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.commons.util.EasyExcelUtils;
+import com.jzg.commons.util.ServletUtils;
+import com.jzg.console.mapper.ReportMeetDataMapper;
 import com.jzg.console.service.ReportMeetDataService;
 import com.jzg.console.service.ReportReceivableDataService;
 import io.swagger.v3.oas.annotations.media.Schema;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
 
@@ -27,6 +38,12 @@ import java.util.List;
  */
 @Service
 public class ReportMeetDataServiceImpl extends ReportBaseServiceImpl implements ReportMeetDataService {
+
+    private static final Logger log = LoggerFactory.getLogger(ReportMeetDataServiceImpl.class);
+
+    @Autowired
+    private ReportMeetDataMapper reportMeetDataMapper;
+
     /**
      *  @version
      *  @author: hxl
@@ -38,6 +55,97 @@ public class ReportMeetDataServiceImpl extends ReportBaseServiceImpl implements
         return getList();
     }
 
+    /**
+     * 按月份汇总应付统计数据 - 分页查询
+     * 查询选中年份的应付数据,按年-月汇总
+     * 返回:时间(年月)、保费、应付佣金、未提现、提现中、已付款
+     */
+    @Override
+    public IPage<?> getPayableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+        log.info("财务数据-应付统计(按月份汇总). reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
+        List<String> years = reportSearchCommonVo.getYear();
+        if (CollUtil.isEmpty(years)) {
+            log.warn("查询年份为空,返回空列表");
+            return new Page<>(reportSearchCommonVo.getPageNo() != null ? reportSearchCommonVo.getPageNo() : 1,
+                              reportSearchCommonVo.getPageSize() != null ? reportSearchCommonVo.getPageSize() : 10);
+        }
+        List<ReportMeetDataDto> dataList = reportMeetDataMapper.getPayableStatisticsByMonth(reportSearchCommonVo, systemCode);
+
+        // 内存分页
+        int pageNo = reportSearchCommonVo.getPageNo() != null ? reportSearchCommonVo.getPageNo() : 1;
+        int pageSize = reportSearchCommonVo.getPageSize() != null ? reportSearchCommonVo.getPageSize() : 10;
+        int total = dataList.size();
+        int fromIndex = (pageNo - 1) * pageSize;
+        int toIndex = Math.min(fromIndex + pageSize, total);
+
+        Page<ReportMeetDataDto> page = new Page<>(pageNo, pageSize, total);
+        if (fromIndex < total) {
+            page.setRecords(dataList.subList(fromIndex, toIndex));
+        } else {
+            page.setRecords(new ArrayList<>());
+        }
+        return page;
+    }
+
+    /**
+     * 查询指定年月的应付统计明细列表 - 分页查询
+     * 查询 sys_amount_auditing 中 create_time 落在该年月的所有提现记录
+     * 返回:业务员名称/手机号/银行卡号/银行/状态/提现金额/付款人/付款账户/付款时间/驳回人/驳回时间
+     */
+    @Override
+    public IPage<?> getPayableStatisticsDetail(PayableStatisticsDetailParam param, String systemCode) {
+        log.info("财务数据-应付统计明细. param=[{}], systemCode=[{}]", JSONUtil.toJsonStr(param), systemCode);
+        if (param == null || StrUtil.isBlank(param.getYearAndMonthTime())) {
+            log.warn("查询年月为空,返回空列表");
+            return new Page<>(param.getPages(), param.getSize());
+        }
+        List<ReportMeetDataDetailDto> dataList = reportMeetDataMapper.getPayableStatisticsDetail(param, systemCode);
+
+        // 内存分页
+        int pageNo = param.getPages();
+        int pageSize = param.getSize();
+        int total = dataList.size();
+        int fromIndex = (pageNo - 1) * pageSize;
+        int toIndex = Math.min(fromIndex + pageSize, total);
+
+        Page<ReportMeetDataDetailDto> page = new Page<>(pageNo, pageSize, total);
+        if (fromIndex < total) {
+            page.setRecords(dataList.subList(fromIndex, toIndex));
+        } else {
+            page.setRecords(new ArrayList<>());
+        }
+        return page;
+    }
+
+    /**
+     * 财务数据-应付统计导出Excel
+     */
+    @Override
+    public void exportPayableStatistics(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+        log.info("财务数据-应付统计导出Excel. reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
+        List<String> years = reportSearchCommonVo.getYear();
+        if (CollUtil.isEmpty(years)) {
+            log.warn("查询年份为空,不导出");
+            return;
+        }
+        List<ReportMeetDataDto> dataList = reportMeetDataMapper.getPayableStatisticsByMonth(reportSearchCommonVo, systemCode);
+        EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), ReportMeetDataDto.class, dataList, "财务数据-应付统计");
+    }
+
+    /**
+     * 财务数据-应付统计明细导出Excel
+     */
+    @Override
+    public void exportPayableStatisticsDetail(PayableStatisticsDetailParam param, String systemCode) {
+        log.info("财务数据-应付统计明细导出Excel. param=[{}], systemCode=[{}]", JSONUtil.toJsonStr(param), systemCode);
+        if (param == null || StrUtil.isBlank(param.getYearAndMonthTime())) {
+            log.warn("查询年月为空,不导出");
+            return;
+        }
+        List<ReportMeetDataDetailDto> dataList = reportMeetDataMapper.getPayableStatisticsDetail(param, systemCode);
+        EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), ReportMeetDataDetailDto.class, dataList, "财务数据-应付统计明细");
+    }
+
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
         return null;

+ 87 - 32
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportPersonCheckDataServiceImpl.java

@@ -1,32 +1,52 @@
 package com.jzg.console.service.impl;
 
 
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO;
 import com.jzg.commons.entity.report.dto.*;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.commons.entity.user.vo.UserInfoWithPhone;
+import com.jzg.console.client.FeeAuditClient;
+import com.jzg.console.client.OrganizationClient;
 import com.jzg.console.service.ReportPersonCheckDataService;
-import com.jzg.console.service.ReportReceivableDataService;
-import io.swagger.v3.oas.annotations.media.Schema;
-import org.springframework.format.annotation.DateTimeFormat;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  财务数据-人员审核
+ * 财务数据-人员审核
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:45
  */
 @Service
 public class ReportPersonCheckDataServiceImpl extends ReportBaseServiceImpl implements ReportPersonCheckDataService {
+
+    private static final Logger log = LoggerFactory.getLogger(ReportPersonCheckDataServiceImpl.class);
+
+    @Autowired
+    private BaseController baseController;
+
+    @Autowired
+    private OrganizationClient organizationClient;
+
+    @Autowired
+    private FeeAuditClient feeAuditClient;
+
+
     /**
      *  @version
      *  @author: hxl
@@ -35,11 +55,60 @@ public class ReportPersonCheckDataServiceImpl extends ReportBaseServiceImpl impl
      */
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        Page<ReportPersonCheckDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
+        String systemCode = baseController.getSystemCode();
+        log.info("getPageListByParams. reportSearchCommonVo=[{}].systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
+
+        HttpResult<Map<String, UserInfoWithPhone>> mapHttpResult = organizationClient.queryUserInfo(systemCode);
+        Map<String, UserInfoWithPhone> userInfoMap = mapHttpResult.getData();
+
+        FeeAuditSummaryParam feeAuditSummaryParam = new FeeAuditSummaryParam();
+
+        feeAuditSummaryParam.setSystemCode(systemCode);
+        feeAuditSummaryParam.setSignTimeStart(reportSearchCommonVo.getSignTimeBegin());
+        feeAuditSummaryParam.setSignTimeEnd(reportSearchCommonVo.getSignTimeEnd());
+        feeAuditSummaryParam.setPages(reportSearchCommonVo.getPageNo());
+        feeAuditSummaryParam.setSize(reportSearchCommonVo.getPageSize());
+        HttpResult<List<FeeAuditSummaryVO>> pageHttpResult = feeAuditClient.queryAuditSummary(feeAuditSummaryParam);
+        List<FeeAuditSummaryVO> records = pageHttpResult.getData();
+        Map<String, List<FeeAuditSummaryVO>> collect = records.stream().collect(Collectors.groupingBy(FeeAuditSummaryVO::getReceiveUser));
+        List<ReportPersonCheckDataDto> list = new ArrayList<>();
+        for (String s : collect.keySet()) {
+            List<FeeAuditSummaryVO> feeAuditSummaryVOS = collect.get(s);
+            UserInfoWithPhone userInfoWithPhone = userInfoMap.get(s);
+            String deptname = null;
+            String name = null;
+            if(userInfoWithPhone != null){
+                deptname = userInfoWithPhone.getDeptName();
+                name = userInfoWithPhone.getName();
+            }
+            Long checkOrderNum = 0L;
+            Long pendingReviewOrderNum = 0L;
+            Long avgReviewDuration = 0L;
+            Long rejectOrderNum = 0L;
+            Long updateOrderNum = 0L;
+            if(CollUtil.isNotEmpty(feeAuditSummaryVOS)){
+                checkOrderNum = feeAuditSummaryVOS.stream().filter(action-> "2".equals(action.getAuditStatus()) || "1".equals(action.getAuditStatus())).map(FeeAuditSummaryVO::getNum).reduce(Long::sum).orElse(0L);
+                if(checkOrderNum != 0){
+                    avgReviewDuration = feeAuditSummaryVOS.stream().filter(action-> "2".equals(action.getAuditStatus()) || "1".equals(action.getAuditStatus())).map(FeeAuditSummaryVO::getCostTime).reduce(Long::sum).orElse(0L);
+                }
+                pendingReviewOrderNum = feeAuditSummaryVOS.stream().filter(action-> "0".equals(action.getAuditStatus()) && !"0".equals(action.getProblemIdentify())).map(FeeAuditSummaryVO::getNum).reduce(Long::sum).orElse(0L);
+                rejectOrderNum = feeAuditSummaryVOS.stream().filter(action-> "2".equals(action.getAuditStatus())).map(FeeAuditSummaryVO::getNum).reduce(Long::sum).orElse(0L);
+                updateOrderNum = feeAuditSummaryVOS.stream().map(FeeAuditSummaryVO::getCalFee).reduce(Long::sum).orElse(0L);
+            }
+            ReportPersonCheckDataDto dto = ReportPersonCheckDataDto.builder()
+                    .salesmanName(name).salesmanPhone(s).deptName(deptname)
+                    .checkOrderNum(checkOrderNum).pendingReviewOrderNum(pendingReviewOrderNum).avgReviewDuration(avgReviewDuration)
+                    .rejectOrderNum(rejectOrderNum).updateOrderNum(updateOrderNum)
+                    .build();
+            list.add(dto);
+
+        }
+
+        log.info("查询出[{}]个业务员的审核记录",CollUtil.size(list));
+        //Page<ReportPersonCheckDataDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
         IPage<ReportPersonCheckDataDto> pageList = new Page<ReportPersonCheckDataDto>();
-        List<ReportPersonCheckDataDto> list = getList();
         pageList.setRecords(list);
-        pageList.setTotal(1l);
+        pageList.setTotal(CollUtil.size(collect));
         pageList.setCurrent(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageSize());
@@ -53,7 +122,8 @@ public class ReportPersonCheckDataServiceImpl extends ReportBaseServiceImpl impl
      */
     @Override
     public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
-        List<ReportPersonCheckDataDto> list = getList();
+        IPage<?> pageListByParams = getPageListByParams(reportSearchCommonVo);
+        List<ReportPersonCheckDataDto> list = (List<ReportPersonCheckDataDto>)pageListByParams.getRecords();
         upLoadFile(reportSearchCommonVo, ReportPersonCheckDataDto.class,list,"财务数据-人员审核-列表导出-"+ reportSearchCommonVo.getUserId());
     }
     /**
@@ -64,6 +134,8 @@ public class ReportPersonCheckDataServiceImpl extends ReportBaseServiceImpl impl
      */
     @Override
     public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        log.info("财务数据-人员审核-明细查询:reportSearchCommonVo=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo));
+
         Page<ReportPersonCheckDataDetailDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
         IPage<ReportPersonCheckDataDetailDto> detailPageList = new Page<ReportPersonCheckDataDetailDto>();
         List<ReportPersonCheckDataDetailDto> detailList = getDetailList();
@@ -86,23 +158,6 @@ public class ReportPersonCheckDataServiceImpl extends ReportBaseServiceImpl impl
         upLoadFile(reportSearchCommonVo, ReportPersonCheckDataDetailDto.class,detailList,"财务数据-人员审核-明细导出-"+ reportSearchCommonVo.getUserId());
     }
 
-    /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
-     */
-    public List<ReportPersonCheckDataDto>  getList(){
-        List<ReportPersonCheckDataDto> list =new ArrayList<>();
-        ReportPersonCheckDataDto reportPersonCheckDataDto = ReportPersonCheckDataDto.builder()
-                .salesmanName("张三").salesmanPhone("18811459985").deptName("众安财险科技营销部")
-                .checkOrderNum(100L).pendingReviewOrderNum(100L).avgReviewDuration(100L)
-                .rejectOrderNum(100L).updateOrderNum(100L)
-                .build();
-        list.add(reportPersonCheckDataDto);
-        return list;
-    }
-
     /**
      *  @version
      *  @author: hxl

+ 39 - 6
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportReceivableDataServiceImpl.java

@@ -3,6 +3,7 @@ package com.jzg.console.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.alibaba.excel.EasyExcel;
 import com.jzg.commons.entity.report.dto.*;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
@@ -130,25 +131,57 @@ public class ReportReceivableDataServiceImpl extends ReportBaseServiceImpl imple
     }
 
     @Override
-    public List<?> getReceivableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+    public IPage<?> getReceivableStatisticsByMonth(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
         log.info("财务数据-应收统计(按月份汇总). reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
         List<String> years = reportSearchCommonVo.getYear();
         if (CollUtil.isEmpty(years)) {
             log.warn("查询年份为空,返回空列表");
-            return new ArrayList<>();
+            return new Page<>(reportSearchCommonVo.getPageNo() != null ? reportSearchCommonVo.getPageNo() : 1,
+                              reportSearchCommonVo.getPageSize() != null ? reportSearchCommonVo.getPageSize() : 10);
         }
-        return reportReceivableDataMapper.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
+        List<ReportReceivableDataDto> dataList = reportReceivableDataMapper.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
+
+        // 内存分页
+        int pageNo = reportSearchCommonVo.getPageNo() != null ? reportSearchCommonVo.getPageNo() : 1;
+        int pageSize = reportSearchCommonVo.getPageSize() != null ? reportSearchCommonVo.getPageSize() : 10;
+        int total = dataList.size();
+        int fromIndex = (pageNo - 1) * pageSize;
+        int toIndex = Math.min(fromIndex + pageSize, total);
+
+        Page<ReportReceivableDataDto> page = new Page<>(pageNo, pageSize, total);
+        if (fromIndex < total) {
+            page.setRecords(dataList.subList(fromIndex, toIndex));
+        } else {
+            page.setRecords(new ArrayList<>());
+        }
+        return page;
     }
 
     @Override
-    public List<?> getReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+    public IPage<?> getReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
         log.info("财务数据-应收统计明细(按保险公司分组). reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
         List<String> years = reportSearchCommonVo.getYear();
         if (CollUtil.isEmpty(years)) {
             log.warn("查询年份为空,返回空列表");
-            return new ArrayList<>();
+            return new Page<>(reportSearchCommonVo.getPageNo() != null ? reportSearchCommonVo.getPageNo() : 1,
+                              reportSearchCommonVo.getPageSize() != null ? reportSearchCommonVo.getPageSize() : 10);
+        }
+        List<ReportReceivableDetailDto> dataList = reportReceivableDataMapper.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+
+        // 内存分页
+        int pageNo = reportSearchCommonVo.getPageNo() != null ? reportSearchCommonVo.getPageNo() : 1;
+        int pageSize = reportSearchCommonVo.getPageSize() != null ? reportSearchCommonVo.getPageSize() : 10;
+        int total = dataList.size();
+        int fromIndex = (pageNo - 1) * pageSize;
+        int toIndex = Math.min(fromIndex + pageSize, total);
+
+        Page<ReportReceivableDetailDto> page = new Page<>(pageNo, pageSize, total);
+        if (fromIndex < total) {
+            page.setRecords(dataList.subList(fromIndex, toIndex));
+        } else {
+            page.setRecords(new ArrayList<>());
         }
-        return reportReceivableDataMapper.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+        return page;
     }
 
     @Override

+ 162 - 0
consoleStatistics/src/main/resources/mapper/ReportMeetDataMapper.xml

@@ -0,0 +1,162 @@
+<?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.jzg.console.mapper.ReportMeetDataMapper">
+
+    <!-- 应付统计结果映射 -->
+    <resultMap id="PayableStatisticsResultMap" type="com.jzg.commons.entity.report.dto.ReportMeetDataDto">
+        <result column="year_and_month_time" property="yearAndMonthTime"/>
+        <result column="sum_premium" property="sumPremium"/>
+        <result column="payable_commission_money" property="payableCommissionMoney"/>
+        <result column="unwithdrawn_money" property="unwithdrawnMoney"/>
+        <result column="withdrawing_money" property="withdrawingMoney"/>
+        <result column="paid_money" property="paidMoney"/>
+    </resultMap>
+
+    <!-- 应付统计明细结果映射 -->
+    <resultMap id="PayableStatisticsDetailResultMap" type="com.jzg.commons.entity.report.dto.ReportMeetDataDetailDto">
+        <result column="salesman_name" property="salesmanName"/>
+        <result column="salesman_phone" property="salesmanPhone"/>
+        <result column="bank_card_number" property="bankCardNumber"/>
+        <result column="bank_name" property="bankName"/>
+        <result column="status_name" property="statusName"/>
+        <result column="withdrawal_money" property="withdrawalMoney"/>
+        <result column="paid_person_name" property="paidPersonName"/>
+        <result column="pay_account_name" property="payAccountName"/>
+        <result column="paid_time" property="paidTime"/>
+        <result column="reject_person" property="rejectPerson"/>
+        <result column="reject_time" property="rejectTime"/>
+    </resultMap>
+
+    <!--
+        按月份汇总应付统计数据
+        说明:
+        1. 保费:ins_fee_orders.total_premium 按签单时间(signing_time)月份汇总(含补录订单)
+        2. 应付佣金/未提现/已付款:sys_user_account_change_log 按创建时间(create_time)月份汇总
+           - amount 字段带符号,正数=新增(应付佣金),负数=提现(已付款)
+           - amount 等价于 amount_after - amount_before,且更可靠(amount_after 可能因并发不准)
+           - 应付佣金 = 所有新增(正数)求和
+           - 未提现 = 新增 - 提现 = 所有 amount 求和
+           - 已付款 = 所有提现(负数)取绝对值求和
+        3. 提现中:sys_amount_auditing 中 auditing_status=0(待付款)的提现金额按创建时间月份汇总
+        4. sys_amount_auditing 与 sys_user_account_change_log 可通过
+           sys_amount_auditing.id = sys_user_account_change_log.related_amount_auditing_id 关联
+    -->
+    <select id="getPayableStatisticsByMonth" resultMap="PayableStatisticsResultMap">
+        SELECT
+            m.year_and_month_time,
+            COALESCE(p.sum_premium, 0) AS sum_premium,
+            COALESCE(c.payable_commission, 0) AS payable_commission_money,
+            COALESCE(c.unwithdrawn, 0) AS unwithdrawn_money,
+            COALESCE(w.withdrawing, 0) AS withdrawing_money,
+            COALESCE(c.paid, 0) AS paid_money
+        FROM (
+            <!-- 汇总所有涉及到的年月集合:保费按签单时间,佣金/提现按创建时间 -->
+            SELECT CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0')) AS year_and_month_time
+            FROM ins_fee_orders ifo
+            WHERE ifo.is_delete = 0
+                AND ifo.system_code = #{systemCode}
+                AND YEAR(ifo.signing_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0'))
+            UNION
+            SELECT CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0')) AS year_and_month_time
+            FROM sys_user_account_change_log suacl
+            WHERE suacl.is_delete = 0
+                AND suacl.status = 10
+                AND suacl.system_code = #{systemCode}
+                AND YEAR(suacl.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0'))
+            UNION
+            SELECT CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0')) AS year_and_month_time
+            FROM sys_amount_auditing saa
+            WHERE saa.is_delete = 0
+                AND saa.system_code = #{systemCode}
+                AND saa.auditing_status = 0
+                AND YEAR(saa.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0'))
+        ) m
+        LEFT JOIN (
+            <!-- 保费:按签单时间月份汇总订单总保费(含补录订单) -->
+            SELECT
+                CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(ifo.total_premium, 0)) AS sum_premium
+            FROM ins_fee_orders ifo
+            WHERE ifo.is_delete = 0
+                AND ifo.system_code = #{systemCode}
+                AND YEAR(ifo.signing_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(ifo.signing_time), '-', LPAD(MONTH(ifo.signing_time), 2, '0'))
+        ) p ON m.year_and_month_time = p.year_and_month_time
+        LEFT JOIN (
+            <!-- 应付佣金/未提现/已付款:按账户变更记录创建时间月份汇总 -->
+            SELECT
+                CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0')) AS year_and_month_time,
+                SUM(CASE WHEN suacl.amount &gt; 0 THEN suacl.amount ELSE 0 END) AS payable_commission,
+                SUM(suacl.amount) AS unwithdrawn,
+                SUM(CASE WHEN suacl.amount &lt; 0 THEN ABS(suacl.amount) ELSE 0 END) AS paid
+            FROM sys_user_account_change_log suacl
+            WHERE suacl.is_delete = 0
+                AND suacl.status = 10
+                AND suacl.system_code = #{systemCode}
+                AND YEAR(suacl.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(suacl.create_time), '-', LPAD(MONTH(suacl.create_time), 2, '0'))
+        ) c ON m.year_and_month_time = c.year_and_month_time
+        LEFT JOIN (
+            <!-- 提现中:按提现申请创建时间月份汇总未付款(auditing_status=0)的提现金额 -->
+            SELECT
+                CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0')) AS year_and_month_time,
+                SUM(COALESCE(saa.amount, 0)) AS withdrawing
+            FROM sys_amount_auditing saa
+            WHERE saa.is_delete = 0
+                AND saa.system_code = #{systemCode}
+                AND saa.auditing_status = 0
+                AND YEAR(saa.create_time) IN
+                <foreach collection="param.year" item="y" open="(" separator="," close=")">#{y}</foreach>
+            GROUP BY CONCAT(YEAR(saa.create_time), '-', LPAD(MONTH(saa.create_time), 2, '0'))
+        ) w ON m.year_and_month_time = w.year_and_month_time
+        ORDER BY m.year_and_month_time ASC
+    </select>
+
+    <!--
+        查询指定年月的应付统计明细
+        说明:
+        1. 以 sys_amount_auditing.create_time 作为年月筛选条件
+        2. 业务员名称/手机号:通过 user_id 关联 sys_user_jzg_info 获取 name,关联 sys_user 获取 mobile
+        3. 状态:auditing_status 转换为中文(0-待付款、1-已付款、2-拒绝付款)
+        4. 付款账户:关联 inv_account_card 根据 account_id 获取 card_name
+    -->
+    <select id="getPayableStatisticsDetail" resultMap="PayableStatisticsDetailResultMap">
+        SELECT
+            suji.name AS salesman_name,
+            su.mobile AS salesman_phone,
+            saa.bank_card_num AS bank_card_number,
+            saa.bank_name,
+            CASE saa.auditing_status
+                WHEN 0 THEN '待付款'
+                WHEN 1 THEN '已付款'
+                WHEN 2 THEN '拒绝付款'
+                ELSE CAST(saa.auditing_status AS CHAR)
+            END AS status_name,
+            saa.amount AS withdrawal_money,
+            saa.receive_user AS paid_person_name,
+            iac.card_name AS pay_account_name,
+            saa.payment_time AS paid_time,
+            saa.reject_person,
+            saa.reject_time
+        FROM sys_amount_auditing saa
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = saa.user_id AND suji.is_delete = 0
+        LEFT JOIN sys_user su ON su.id = saa.user_id AND su.is_delete = 0
+        LEFT JOIN inv_account_card iac ON iac.id = saa.account_id AND iac.is_delete = 0
+        <where>
+            saa.is_delete = 0
+            AND saa.system_code = #{systemCode}
+            <if test="param.yearAndMonthTime != null and param.yearAndMonthTime != ''">
+                AND DATE_FORMAT(saa.create_time, '%Y-%m') = #{param.yearAndMonthTime}
+            </if>
+        </where>
+        ORDER BY saa.create_time DESC
+    </select>
+</mapper>

+ 8 - 8
consoleStatistics/src/main/resources/mapper/ReportReceivableDataMapper.xml

@@ -57,7 +57,7 @@
             FROM ins_ply_income ipi
             WHERE ipi.is_delete = 0
                 AND ipi.system_code = #{systemCode}
-                AND YEAR(ipi.signing_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipi.signing_time) = #{param.year[0]}
             GROUP BY CONCAT(YEAR(ipi.signing_time), '-', LPAD(MONTH(ipi.signing_time), 2, '0'))
         ) r
         LEFT JOIN (
@@ -68,7 +68,7 @@
             WHERE ipii.is_delete = 0
                 AND ipii.system_code = #{systemCode}
                 AND ipii.invoice_type IN ('1','2','3','4')
-                AND YEAR(ipii.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipii.create_time) = #{param.year[0]}
             GROUP BY CONCAT(YEAR(ipii.create_time), '-', LPAD(MONTH(ipii.create_time), 2, '0'))
         ) i ON r.year_and_month_time = i.year_and_month_time
         LEFT JOIN (
@@ -80,7 +80,7 @@
             WHERE ipiis.is_delete = 0
                 AND ipii.system_code = #{systemCode}
                 AND ipii.invoice_type IN ('1','2','3','4','5','6')
-                AND YEAR(ipiis.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipiis.create_time) = #{param.year[0]}
             GROUP BY CONCAT(YEAR(ipiis.create_time), '-', LPAD(MONTH(ipiis.create_time), 2, '0'))
         ) s ON r.year_and_month_time = s.year_and_month_time
         ORDER BY r.year_and_month_time ASC
@@ -127,7 +127,7 @@
             FROM ins_ply_income ipi
             WHERE ipi.is_delete = 0
                 AND ipi.system_code = #{systemCode}
-                AND YEAR(ipi.signing_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipi.signing_time) = #{param.year[0]}
             GROUP BY ipi.company_id, ipi.company_name
         ) rc
         LEFT JOIN (
@@ -139,7 +139,7 @@
             WHERE ipii.is_delete = 0
                 AND ipii.system_code = #{systemCode}
                 AND ipii.invoice_type IN ('1','2','3','4')
-                AND YEAR(ipii.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipii.create_time) = #{param.year[0]}
             GROUP BY ipii.company_id
         ) i ON rc.company_id = i.company_id
         LEFT JOIN (
@@ -160,7 +160,7 @@
                 AND ipii.is_delete = 0
                 AND ipii.system_code = #{systemCode}
             WHERE ipiis.is_delete = 0
-                AND YEAR(ipiis.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipiis.create_time) = #{param.year[0]}
                 AND ipii.company_id IS NOT NULL
             GROUP BY ipii.company_id
             ) t
@@ -172,7 +172,7 @@
                 AND ipii.is_delete = 0
                 AND ipii.system_code = #{systemCode}
             WHERE ipiis.is_delete = 0
-                AND YEAR(ipiis.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipiis.create_time) = #{param.year[0]}
                 AND ipii.company_id IS NULL
             ) plat
         ) s ON rc.company_id = s.company_id
@@ -186,7 +186,7 @@
             WHERE ipii.is_delete = 0
                 AND ipii.system_code = #{systemCode}
                 AND ipii.invoice_type IN ('1','2','3','4','5','6')
-                AND YEAR(ipii.create_time) between #{param.year[0]} and #{param.year[1]}
+                AND YEAR(ipii.create_time) = #{param.year[0]}
             GROUP BY ipii.company_id
         ) us ON rc.company_id = us.company_id
     </select>

+ 37 - 8
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java

@@ -11,10 +11,12 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.OrderStatusResultVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.constant.enums.quote.RenewalEnum;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.dajia.crawler.constant.enums.DaJiaCrawlerOrderState;
 import com.jzg.quotation.dajia.crawler.entity.request.quote.BusinessInsuranceDTO;
 import com.jzg.quotation.dajia.crawler.entity.request.quote.CompulsoryInsuranceDTO;
+import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerActualValueResponse;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerOrderListRevisedResponse;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerSaveResponse;
 import org.apache.logging.log4j.LogManager;
@@ -24,6 +26,7 @@ import org.springframework.util.ObjectUtils;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -47,7 +50,7 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
      * @param daJiaCrawlerSaveResponse 大家财险保存
      * @return 报价结果
      */
-    public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse) {
+    public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse,DaJiaCrawlerActualValueResponse daJiaCrawlerActualValueResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         buildKindInfoVo(quoteVo.getKindInfoVo(), daJiaCrawlerSaveResponse.getBusinessInsurance().getItemKinds());
         quoteResultsVo.setOrdersNo(orderNo);
@@ -67,16 +70,15 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         // 评分
         quoteResultsVo.setScoreVo(buildScoreVo(daJiaCrawlerSaveResponse));
-        // 非车费用
-        quoteResultsVo.getCosts().setNiPremium(daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium().equals("") ? "0.00" : daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium());
         // 交强保费 车船税 商业保费
-        buildOtherInfo(quoteResultsVo, daJiaCrawlerSaveResponse.getCompulsoryInsurance(), daJiaCrawlerSaveResponse.getBusinessInsurance());
+        buildOtherInfo(quoteResultsVo, daJiaCrawlerSaveResponse);
         BusinessInsuranceDTO.ProductInfoDTO productInfo = daJiaCrawlerSaveResponse.getBusinessInsurance().getProductInfo();
         CompulsoryInsuranceDTO.ProductInfoDTO compulsoryInsuranceProductInfo = daJiaCrawlerSaveResponse.getCompulsoryInsurance().getProductInfo();
         quoteResultsVo.setCiStartDate(compulsoryInsuranceProductInfo.getStartDate());
         quoteResultsVo.setCiEndDate(compulsoryInsuranceProductInfo.getEndDate());
         quoteResultsVo.setBiStartDate(productInfo.getStartDate());
         quoteResultsVo.setBiEndDate(productInfo.getEndDate());
+        quoteResultsVo.setCarActualValue(StringUtils.isNotEmpty(daJiaCrawlerActualValueResponse.getActualValue()) ? new BigDecimal(daJiaCrawlerActualValueResponse.getActualValue()) : BigDecimal.ZERO);
         log.info("构建返回信息:{}",JSONObject.toJSONString(quoteResultsVo));
         return quoteResultsVo;
     }
@@ -121,13 +123,19 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
         return ciRiskInfoVo;
     }
 
-    private static void buildOtherInfo(QuoteResultsVo quoteResultsVo, CompulsoryInsuranceDTO compulsoryInsurance, BusinessInsuranceDTO businessInsurance) {
+    private static void buildOtherInfo(QuoteResultsVo quoteResultsVo, DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse) {
+        BusinessInsuranceDTO businessInsurance = daJiaCrawlerSaveResponse.getBusinessInsurance();
+        CompulsoryInsuranceDTO compulsoryInsurance = daJiaCrawlerSaveResponse.getCompulsoryInsurance();
         // 交强
+        BigDecimal sumPremium = BigDecimal.ZERO;
+        BigDecimal totalAmount = BigDecimal.ZERO;
         if (!ObjectUtils.isEmpty(quoteResultsVo.getCiRiskInfoVo())) {
             CompulsoryInsuranceDTO.ProductInfoDTO ciProductInfo = compulsoryInsurance.getProductInfo();
             quoteResultsVo.getCosts().setCiPremium(ciProductInfo.getPremium());
             quoteResultsVo.setCiPolicyNumber(ciProductInfo.getProposalNo());
             quoteResultsVo.getCosts().setVvTax(compulsoryInsurance.getCarShipTax().getTotalTax());
+            sumPremium = sumPremium.add(new BigDecimal(compulsoryInsurance.getCarShipTax().getTotalTax()).add(new BigDecimal(ciProductInfo.getPremium())));
+            totalAmount = totalAmount.add(new BigDecimal(ciProductInfo.getPremium()));
         }
 
         // 商业
@@ -135,8 +143,18 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
             BusinessInsuranceDTO.ProductInfoDTO biProductInfo = businessInsurance.getProductInfo();
             quoteResultsVo.getCosts().setBiPremium(biProductInfo.getPremium());
             quoteResultsVo.setBiPolicyNumber(biProductInfo.getProposalNo());
+            sumPremium = sumPremium.add(new BigDecimal(biProductInfo.getPremium()));
+            totalAmount = totalAmount.add(new BigDecimal(biProductInfo.getPremium()));
         }
-
+        if (StringUtils.isNotEmpty(daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium())){
+            sumPremium = sumPremium.add(new BigDecimal(daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium()));
+            totalAmount = totalAmount.add(new BigDecimal(daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium()));
+        }
+        // 非车费用
+        String string = daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium().equals("") ? "0.00" : daJiaCrawlerSaveResponse.getDriveInsurance().getProductInfo().getPremium();
+        quoteResultsVo.getCosts().setSumPremium(sumPremium.toString());
+        quoteResultsVo.getCosts().setTotalAmount(totalAmount.toString());
+        quoteResultsVo.getCosts().setNiPremium(string);
     }
 
     private static List<KindInfoVo> buildKindInfoVo(List<KindInfoVo> kindInfoVo, List<BusinessInsuranceDTO.ItemKindsDTO> itemKinds) {
@@ -164,13 +182,24 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
         if (!ObjectUtils.isEmpty(compulsoryInsurance)) {
             scoreVo.setJqLossRation(StringUtils.isNotEmpty(compulsoryInsurance.getCoefficientInfo().getLossRatioCi()) ? compulsoryInsurance.getCoefficientInfo().getLossRatioCi() : null);
             scoreVo.setCiClaims(String.valueOf(new BigDecimal(compulsoryInsurance.getCoefficientInfo().getLastPolicyNum()).intValue()));
-            scoreVo.setJqRenewal(compulsoryInsurance.getCoefficientInfo().getRenewalFrequency());
+            String renewalFrequency = compulsoryInsurance.getCoefficientInfo().getRenewalFrequency();
+            if (StringUtils.isNotEmpty(renewalFrequency) && Objects.equals(renewalFrequency, "0")){
+                scoreVo.setJqRenewal(String.valueOf(RenewalEnum.Transfer.getCode()));
+            }else {
+                scoreVo.setJqRenewal(String.valueOf(RenewalEnum.Renewal.getCode()));
+            }
+
         }
         boolean sy = CollectionUtil.isNotEmpty(businessInsurance.getItemKinds());
         if (sy) {
             scoreVo.setSyLossRation(StringUtils.isNotEmpty(businessInsurance.getCoefficientInfo().getLossRatioBi()) ? businessInsurance.getCoefficientInfo().getLossRatioBi() : null);
             scoreVo.setBiClaims(String.valueOf(new BigDecimal(businessInsurance.getCoefficientInfo().getLastPolicyNum()).intValue()));
-            scoreVo.setSyRenewal(businessInsurance.getCoefficientInfo().getRenewalFrequency());
+            String renewalFrequency = businessInsurance.getCoefficientInfo().getRenewalFrequency();
+            if (StringUtils.isNotEmpty(renewalFrequency) && Objects.equals(renewalFrequency, "0")){
+                scoreVo.setSyRenewal(String.valueOf(RenewalEnum.Transfer.getCode()));
+            }else {
+                scoreVo.setSyRenewal(String.valueOf(RenewalEnum.Renewal.getCode()));
+            }
         }
         // 总赔付率 违章评分 高速风险分
         String carIllegalScore;

+ 1 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

@@ -202,7 +202,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         // 4.1 持久化订单信息到本地数据库
         daJiaCrawlerOrderService.saveOrderInfo(quoteVo, daJiaCrawlerSaveResponse, daJiaCrawlerInitDataRequest.getBusinessNo());
         // 4.2 构建并返回报价结果
-        return DaJiaCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder().getOrdersNo(), quoteVo, daJiaCrawlerSaveResponse);
+        return DaJiaCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder().getOrdersNo(), quoteVo, daJiaCrawlerSaveResponse,daJiaCrawlerActualValueResponse);
     }
 
 

+ 1 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -387,8 +387,7 @@ public class QuoteVerificationAspect {
         saveRatio(insFeeOrders, agreementInfoVo, jqCostType, syCostType, jyCostType, isrecordByLeader);
         calculateTotalPremium(insFeeOrders, distributionDiff);
 
-
-
+        insFeeOrders.setSystemCode(baseController.getSystemCode());
         insFeeOrdersService.save(insFeeOrders);
         return insFeeOrders;
     }

+ 16 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java

@@ -9,6 +9,8 @@ import com.jzg.commons.entity.dto.CostCalculateRespVO;
 import com.jzg.commons.entity.dto.FeeAuditParam;
 import com.jzg.commons.entity.dto.VerifyOrderParam;
 import com.jzg.commons.entity.orders.vo.AuditCostInfoVo;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
@@ -219,4 +221,18 @@ public class InsFeeAuditController {
         CostCalculateRespVO costCalculateRespVO = insFeeAuditService.computedCostInfo(param);
         return HttpResult.ok(costCalculateRespVO);
     }
+
+    /**
+     * 查询费用审核统计数据
+     *
+     * @param param
+     * @author lipf
+     * @date 2026/7/24 14:28
+     */
+    @PostMapping("/queryAuditSummary")
+    HttpResult<List<FeeAuditSummaryVO>> queryAuditSummary(@RequestBody FeeAuditSummaryParam param){
+        log.info("查询费用审核统计数据。 FeeAuditSummaryParam=[{}]",JSONUtil.toJsonStr(param));
+        List<FeeAuditSummaryVO>  res = insFeeAuditService.queryAuditSummary(param);
+        return HttpResult.ok(res);
+    }
 }

+ 8 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrderAdjustController.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.summary.controller;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
@@ -22,6 +23,8 @@ import com.jzg.quotation.summary.service.InsOrdersService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,6 +37,8 @@ import java.util.Objects;
 @RequiredArgsConstructor
 public class InsOrderAdjustController extends BaseController {
 
+    private static final Logger log = LoggerFactory.getLogger(InsOrderAdjustController.class);
+
     private final InsOrderAdjustService insOrderAdjustService;
     private final InsOrderAdjustInfoService insOrderAdjustInfoService;
     private final InsOrdersService insOrdersService;
@@ -80,9 +85,11 @@ public class InsOrderAdjustController extends BaseController {
     @Operation(summary = "订单批改信息添加")
     @PostMapping("/adjustAdd")
     public HttpResult adjustAdd(@Validated @RequestBody OrderAdjustAddParam param) {
+        log.info("进行订单批改adjustAdd:param=[{}]", JSONUtil.toJsonStr(param));
         String orderNo = param.getOrderNo();
         InsOrders order = insOrdersService.getById(orderNo);
         AssertionUtils.isFail(Objects.isNull(order), "订单不存在");
+        // TODO 这里需要根据 内部订单和外部订单,状态不一样
         AssertionUtils.isFail(!InsOrderStatusEnum.UNDERWRITED.getCode().equals(order.getOrderStatus()), "未承保订单不允许批改");
         LambdaQueryWrapper<InsOrderAdjust> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(InsOrderAdjust::getOrderNo, orderNo);
@@ -118,6 +125,7 @@ public class InsOrderAdjustController extends BaseController {
     @Operation(summary = "订单批改信息清除")
     @DeleteMapping("/adjustRemove")
     public HttpResult adjustRemove(String orderNo) {
+        log.info("订单批改信息清除. orderNo=[{}]", orderNo);
         boolean b = insOrderAdjustService.adjustRemove(orderNo);
         return HttpResult.ok(b ? "清除成功":"清除失败");
     }

+ 12 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsFeeAuditMapper.java

@@ -1,9 +1,12 @@
 package com.jzg.quotation.summary.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.dto.FeeAuditParam;
 import com.jzg.commons.entity.orders.po.InsFeeAudit;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -34,6 +37,15 @@ public interface InsFeeAuditMapper extends BaseMapper<InsFeeAudit> {
      * @date 2026/7/16 14:33
      */
     InsFeeAudit selectFeeAuditByOrderNo(@Param("orderNo") String orderNo);
+
+    /**
+     * 查询费用审核汇总记录
+     *
+     * @param param 查询条件
+     * @author lipf
+     * @date 2026/7/24 14:41
+     */
+    List<FeeAuditSummaryVO> queryAuditSummary(@Param("param") FeeAuditSummaryParam param);
 }
 
 

+ 10 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java

@@ -9,6 +9,8 @@ import com.jzg.commons.entity.dto.VerifyOrderParam;
 import com.jzg.commons.entity.orders.po.InsFeeAudit;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.vo.AuditCostInfoVo;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
@@ -112,4 +114,12 @@ public interface InsFeeAuditService extends IService<InsFeeAudit> {
     String exportAuditList(FeeAuditParam param);
 
     CostCalculateRespVO computedCostInfo(PtlAgreementCostRatioVo param);
+
+    /**
+     * 查询费用审核统计数据
+     *
+     * @author lipf
+     * @date 2026/7/24 14:33
+     */
+    List<FeeAuditSummaryVO> queryAuditSummary(FeeAuditSummaryParam param);
 }

+ 27 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java

@@ -17,6 +17,8 @@ import com.jzg.commons.entity.dto.FeeAuditParam;
 import com.jzg.commons.entity.dto.VerifyOrderParam;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.orders.vo.AuditCostInfoVo;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryParam;
+import com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
@@ -61,7 +63,9 @@ import java.io.File;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.Instant;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -1161,6 +1165,29 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
             }
         });
     }
+
+    /**
+     * 查询费用审核统计数据
+     *
+     * @param param
+     * @author lipf
+     * @date 2026/7/24 14:33
+     */
+    @Override
+    public List<FeeAuditSummaryVO> queryAuditSummary(FeeAuditSummaryParam param) {
+        if(StrUtil.isNotEmpty(param.getSignTimeStart())){
+            LocalDate start = LocalDate.parse(param.getSignTimeStart(), DateTimeFormatter.ISO_DATE);
+            param.setSignTimeStartTime(start.atStartOfDay());
+        }
+        if(StrUtil.isNotEmpty(param.getSignTimeEnd())){
+            LocalDate start = LocalDate.parse(param.getSignTimeEnd(), DateTimeFormatter.ISO_DATE);
+            param.setSignTimeEndTime(start.plusDays(1).atStartOfDay());
+        }
+        // 1. 创建 Page 对象,从 param 中获取分页信息
+        // Page<FeeAuditSummaryVO> page = new Page<>(param.getPages(), param.getSize());
+        List<FeeAuditSummaryVO> res = baseMapper.queryAuditSummary(param);
+        return res;
+    }
 }
 
 

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -310,7 +310,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         InsFeeOrders feeOrders = BeanUtil.copyProperties(feeOrdersVo, InsFeeOrders.class);
         feeOrders.setOrderNo(quoteNo);
-        feeOrders.setSystemCode(systemCode);
+        feeOrders.setSystemCode(baseController.getSystemCode());
         insFeeOrdersMapper.insertOrUpdate(feeOrders);
     }
 

+ 28 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -302,4 +302,32 @@
         </where>
         ORDER BY io.create_time desc
     </select>
+    <!-- 查询费用审核汇总记录 lipf 2026年7月24日14:42:35 -->
+    <select id="queryAuditSummary" resultType="com.jzg.commons.entity.orders.vo.FeeAuditSummaryVO">
+        select
+        ifa.receive_user,
+        ifa.audit_status,
+        ifa.problem_identify,
+        count(*) as num,
+        sum(ifa.calFee) as calFee,
+        sum(TIMESTAMPDIFF(SECOND, ifa.create_time, ifa.audit_time)) as costTime
+        from (
+            select a.*, if(re_cal_fee_time IS NULL, 0, 1) as calFee,
+            IF(a.problem_time IS NULL, 0, 1) AS problem_identify
+            from
+            ins_fee_audit a
+        ) as ifa
+        left join ins_orders io on
+        ifa.order_no = io.id
+        <where>
+            ifa.receive_user is not null and ifa.system_code = #{param.systemCode}
+            <if test="param.signTimeStartTime != null">
+                and io.sign_time &gt;= #{param.signTimeStartTime}
+            </if>
+            <if test="param.signTimeEndTime != null">
+                and io.sign_time &lt; #{param.signTimeEndTime}
+            </if>
+        </where>
+        group by ifa.receive_user, ifa.audit_status, problem_identify
+    </select>
 </mapper>

+ 15 - 4
tenant/organization/src/main/java/com/jzg/organization/controller/SysUserJzgInfoController.java

@@ -3,15 +3,13 @@ package com.jzg.organization.controller;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
 
+import com.jzg.commons.entity.user.vo.UserInfoWithPhone;
 import com.jzg.organization.service.SysUserJzgInfoService;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
@@ -50,4 +48,17 @@ public class SysUserJzgInfoController {
     public HttpResult<Map<String,String>> queryJzgInfoId2UserId(@RequestBody List<String> jzgInfoTids){
         return HttpResult.ok(sysUserJzgInfoService.queryJzgInfoId2UserId(jzgInfoTids));
     }
+
+    /**
+     * 查询用户基础信息
+     *
+     * @author lipf
+     * @date 2026/7/24 14:10
+     */
+    @PostMapping("/api/v1/organization/queryUserInfo")
+    HttpResult<Map<String, UserInfoWithPhone>> queryUserInfo(@RequestParam("systemCode") String systemCode){
+        return HttpResult.ok(sysUserJzgInfoService.queryUserInfo(systemCode));
+    }
+
+
 }

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeInvoiceSettlementMapper.java

@@ -20,7 +20,7 @@ public interface InsPlyIncomeInvoiceSettlementMapper extends BaseMapper<InsPlyIn
      */
     SettlementVo querySettlementAndDiff(@Param("settlementIds") List<String> settlementIds);
 
-    @Select("select * from ins_ply_income_invoice_settlement ipiis where ipiis.invoice_id = #{invoiceId,jdbcType=VARCHAR} order by ipiis.create_time desc ")
+    @Select("select * from ins_ply_income_invoice_settlement ipiis where ipiis.invoice_id = #{invoiceId,jdbcType=VARCHAR} and ipiis.is_delete = 0 order by ipiis.create_time desc ")
     List<InsPlyIncomeInvoiceSettlement> querySettlementRecent(@Param("invoiceId") String invoiceId);
 
 }

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgInfoMapper.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.dto.PartnerReviewParam;
 import com.jzg.commons.entity.dto.SysUserJzgInfoDto;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
 import com.jzg.commons.entity.user.vo.SysTennatVo;
+import com.jzg.commons.entity.user.vo.UserInfoWithPhone;
 import com.jzg.commons.entity.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -85,4 +86,12 @@ public interface SysUserJzgInfoMapper extends BaseMapper<SysUserJzgInfo> {
      * @date 2026/4/24 15:36
      */
     void updateUserByUserId(@Param("userId") String userId);
+
+    /**
+     * 查询用户信息
+     *
+     * @author lipf
+     * @date 2026/7/24 14:15
+     */
+    List<UserInfoWithPhone> queryUserInfos(String systemCode);
 }

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgInfoService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.entity.dto.PartnerReviewParam;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
+import com.jzg.commons.entity.user.vo.UserInfoWithPhone;
 import com.jzg.commons.entity.vo.PartnerRecommenderVo;
 
 import java.util.List;
@@ -70,4 +71,12 @@ public interface SysUserJzgInfoService extends IService<SysUserJzgInfo> {
      * @date 2026/6/30 14:15
      */
     Map<String, String> queryJzgInfoId2UserId(List<String> jzgInfoTids);
+
+    /**
+     * 查询用户基础信息
+     *
+     * @author lipf
+     * @date 2026/7/24 14:10
+     */
+    Map<String, UserInfoWithPhone> queryUserInfo(String systemCode);
 }

+ 5 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -2917,6 +2917,10 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                         .forEach(item -> incomeIds.add(item.getIncomeId()));
                 // 判断是需要更新哪个字段
                 this.updateIncomeSettlementStatus(insPlyIncomeInvoice.getInvoiceType(), incomeIds, settlementDateTime);
+
+                // add by lipf 2026年7月24日09:27:06 调用标识结清的接口,将未结算晋
+                this.updateSettlementStatus(new UpdateSettlementStatusVo(settlementVo.getInvoicingId(), settlementVo.getSettlementPaymentReason()));
+
             }else{
                 log.info("invoiceId=[{}], 还剩[{}]钱没有结算",settlementVo.getInvoicingId(), surplusPremium.subtract(settlementVo.getActualReceivedAmount()));
             }
@@ -5418,6 +5422,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if(CollUtil.isNotEmpty(records)){
             exportOtherExcelDtos = records.stream().map(action->{
                 ExportOtherExcelDto dto = new  ExportOtherExcelDto();
+                dto.setSigningTime(null != action.getSigningTime() ? action.getSigningTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
                 BeanUtils.copyProperties(action,dto);
                 return dto;
             }).toList();

+ 26 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoServiceImpl.java

@@ -1,14 +1,18 @@
 package com.jzg.organization.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.entity.dto.PartnerReviewParam;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
+import com.jzg.commons.entity.user.vo.UserInfoWithPhone;
 import com.jzg.commons.entity.vo.PartnerRecommenderVo;
 import com.jzg.organization.mapper.SysUserJzgInfoMapper;
 import com.jzg.organization.service.SysUserJzgInfoService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -16,6 +20,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * @author quchen
@@ -25,6 +31,8 @@ import java.util.Map;
 @Service
 public class SysUserJzgInfoServiceImpl extends ServiceImpl<SysUserJzgInfoMapper, SysUserJzgInfo> implements SysUserJzgInfoService {
 
+    private static final Logger log = LoggerFactory.getLogger(SysUserJzgInfoServiceImpl.class);
+
     @Autowired
     private SysUserJzgInfoMapper sysUserJzgInfoMapper;
 
@@ -131,4 +139,22 @@ public class SysUserJzgInfoServiceImpl extends ServiceImpl<SysUserJzgInfoMapper,
         }
         return res;
     }
+
+
+    /**
+     * 查询用户基础信息
+     *
+     * @param systemCode
+     * @author lipf
+     * @date 2026/7/24 14:10
+     */
+    @Override
+    public Map<String, UserInfoWithPhone> queryUserInfo(String systemCode) {
+        List<UserInfoWithPhone> userInfos = baseMapper.queryUserInfos(systemCode);
+
+        Map<String, UserInfoWithPhone> res = userInfos.stream().filter(action -> StrUtil.isNotEmpty(action.getUserName()))
+                .collect(Collectors.toMap(UserInfoWithPhone::getUserName, Function.identity(), (oldItem, newItem) -> oldItem));
+        log.info("查询租户[{}]下有效的用户[{}]个", systemCode, CollUtil.size(res));
+        return res;
+    }
 }

+ 16 - 5
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -338,11 +338,22 @@
             where sujis.type_attr =#{receivableQueryVo.typeAttr})
         </if>
         <if test="receivableQueryVo.invoiceSettlementStatus != null and receivableQueryVo.invoiceSettlementStatus != ''">
-            AND ipi.id  in (
-            select ipil.income_id  from ins_ply_income_invoice_link ipil
-            LEFT JOIN ins_ply_income_invoice ipii ON ipil.invoice_id = ipii.id AND ipii.is_delete = 0
-            where ipii.status = #{receivableQueryVo.invoiceSettlementStatus} and ipil.is_delete = 0
-            )
+            <!-- 当状态为1时,查询已开票的数据 -->
+            <if test="receivableQueryVo.invoiceSettlementStatus != '2'">
+                AND ipi.id in (
+                select ipil.income_id from ins_ply_income_invoice_link ipil
+                LEFT JOIN ins_ply_income_invoice ipii ON ipil.invoice_id = ipii.id AND ipii.is_delete = 0
+                where ipii.status = #{receivableQueryVo.invoiceSettlementStatus} and ipil.is_delete = 0
+                )
+            </if>
+            <!-- 当状态为2时,查询未开票的数据 -->
+            <if test="receivableQueryVo.invoiceSettlementStatus == '2'">
+                AND NOT EXISTS (
+                SELECT 1 FROM ins_ply_income_invoice_link link
+                LEFT JOIN ins_ply_income_invoice inv ON link.invoice_id = inv.id AND inv.is_delete = 0
+                WHERE link.income_id = ipi.id AND link.is_delete = 0
+                )
+            </if>
         </if>
         <if test = "receivableQueryVo.agreementType != null and receivableQueryVo.agreementType != ''">
             AND ipi.agreement_type = #{receivableQueryVo.agreementType}

+ 20 - 0
tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

@@ -492,5 +492,25 @@
             AND sa.type_attr = 3
         </where>
     </select>
+    <!-- 查询用户信息 lipf 2026年7月24日14:12:19 -->
+    <select id="queryUserInfos" resultType="com.jzg.commons.entity.user.vo.UserInfoWithPhone">
+        select
+        su.id as user_id,
+        suji.id as jzg_info_id,
+        suji.system_code,
+        su.username ,
+        suji.name ,
+        suji.dept_id ,
+        sd.name
+        from
+        sys_user su
+        left join sys_user_jzg_info suji on
+        su.id = suji.user_id
+        and suji.system_code = #{systemCode}
+        left join sys_dept sd
+        on sd.id = suji.dept_id
+        and sd.system_code = suji.system_code
+        where suji.system_code is not null
+    </select>
 
 </mapper>