Răsfoiți Sursa

update
1.首页数据查询

wks 6 luni în urmă
părinte
comite
a7ae84ea04
15 a modificat fișierele cu 1300 adăugiri și 399 ștergeri
  1. 19 1
      commons/src/main/java/com/jzg/commons/util/DateTimeUtils.java
  2. 66 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/HomepageDataController.java
  3. 20 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/bo/DataValueBo.java
  4. 22 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/bo/StatDateCountBo.java
  5. 28 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/BusinessDistributionVo.java
  6. 31 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/BusinessFunnelVo.java
  7. 29 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/BusinessTypeDistributionVo.java
  8. 37 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/DailyDataVo.java
  9. 22 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/OrderTrendVo.java
  10. 82 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrdersMapper.java
  11. 49 6
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  12. 195 124
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  13. 20 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/utils/DataQueryFunction.java
  14. 75 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/utils/StatisticsUtil.java
  15. 605 266
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

+ 19 - 1
commons/src/main/java/com/jzg/commons/util/DateTimeUtils.java

@@ -1,12 +1,17 @@
 package com.jzg.commons.util;
 package com.jzg.commons.util;
 
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.time.format.DateTimeParseException;
 
 
 public class DateTimeUtils {
 public class DateTimeUtils {
 
 
-    private static final  String pattern = "yyyy-MM-dd HH:mm:ss";
+    private static final String pattern = "yyyy-MM-dd HH:mm:ss";
+
+    // 标准日期格式
+    private static final DateTimeFormatter DATE_FORMATTER =
+            DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
 
     /**
     /**
      * 比较当前时间是否大于传入的字符串时间
      * 比较当前时间是否大于传入的字符串时间
@@ -34,5 +39,18 @@ public class DateTimeUtils {
         }
         }
     }
     }
 
 
+    /**
+     * 获取今天日期
+     */
+    public static String getToday() {
+        return LocalDate.now().format(DATE_FORMATTER);
+    }
+
+    /**
+     * 获取昨天日期
+     */
+    public static String getYesterday() {
+        return LocalDate.now().minusDays(1).format(DATE_FORMATTER);
+    }
 
 
 }
 }

+ 66 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/HomepageDataController.java

@@ -0,0 +1,66 @@
+package com.jzg.quotation.summary.controller;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.quotation.summary.entity.vo.*;
+import com.jzg.quotation.summary.service.InsOrdersService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Tag(name = "首页-数据查询")
+@RestController
+@RequestMapping("/homepage")
+public class HomepageDataController {
+
+    @Resource
+    private InsOrdersService insOrdersService;
+
+    @GetMapping("/daily/data")
+    @Operation(summary = "今日数据")
+    public HttpResult<DailyDataVo> getDailyData() {
+        DailyDataVo dailyDataVo = insOrdersService.getDailyData();
+        return HttpResult.ok(dailyDataVo);
+    }
+
+    @GetMapping("/common/functions")
+    @Operation(summary = "常用功能")
+    public HttpResult<Object> getCommonFunction() {
+        return HttpResult.ok();
+    }
+
+    @GetMapping("/business/distribution")
+    @Operation(summary = "业务员分布")
+    public HttpResult<List<BusinessDistributionVo>> getBusinessDistribution(@RequestParam(value = "province") String province) {
+        List<BusinessDistributionVo> businessDistributionVos = insOrdersService.getBusinessDistribution(province);
+        return HttpResult.ok(businessDistributionVos);
+    }
+
+    @GetMapping("/order/trend")
+    @Operation(summary = "出单趋势")
+    public HttpResult<List<OrderTrendVo>> getOrderTrend() {
+        List<OrderTrendVo> businessFunnelVos = insOrdersService.getOrderTrend();
+        return HttpResult.ok(businessFunnelVos);
+    }
+
+    @GetMapping("/business/funnel")
+    @Operation(summary = "业务漏斗")
+    public HttpResult<BusinessFunnelVo> getBusinessFunnel() {
+        BusinessFunnelVo businessFunnelVo = insOrdersService.getBusinessFunnel();
+        return HttpResult.ok(businessFunnelVo);
+    }
+
+    @GetMapping("/business-type/distribution")
+    @Operation(summary = "业务类型分布")
+    public HttpResult<BusinessTypeDistributionVo> getBusinessTypeDistribution() {
+        BusinessTypeDistributionVo businessTypeDistribution = insOrdersService.getBusinessTypeDistribution();
+        return HttpResult.ok(businessTypeDistribution);
+    }
+
+
+}

+ 20 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/bo/DataValueBo.java

@@ -0,0 +1,20 @@
+package com.jzg.quotation.summary.entity.bo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class DataValueBo {
+
+    /**
+     * 今日数据
+     */
+    private String todayData;
+
+    /**
+     * 增长率
+     */
+    private String growthRate;
+
+}

+ 22 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/bo/StatDateCountBo.java

@@ -0,0 +1,22 @@
+package com.jzg.quotation.summary.entity.bo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class StatDateCountBo {
+
+    /**
+     * 日期
+     */
+    private String statDate;
+
+    /**
+     * 值
+     */
+    private String value;
+
+}

+ 28 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/BusinessDistributionVo.java

@@ -0,0 +1,28 @@
+package com.jzg.quotation.summary.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BusinessDistributionVo {
+
+    @Schema(description = "地区编码")
+    private String areaCode;
+
+    @Schema(description = "地区名称")
+    private String areaCname;
+
+    @Schema(description = "业务员数量")
+    private String totalSalesmanCount;
+
+    @Schema(description = "个代业务员数量")
+    private String personalAgentCount;
+
+    @Schema(description = "渠道业务员数量")
+    private String channelSalesmanCount;
+
+}

+ 31 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/BusinessFunnelVo.java

@@ -0,0 +1,31 @@
+package com.jzg.quotation.summary.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BusinessFunnelVo {
+
+    @Schema(description = "报价订单")
+    private String quoteCount;
+
+    @Schema(description = "核保订单")
+    private String underwriteCount;
+
+    @Schema(description = "承保订单")
+    private String orderCount;
+
+    @Schema(description = "报价核保比")
+    private String quoteToUnderwriteRatio;
+
+    @Schema(description = "核保出单比")
+    private String underwriteToOrderRatio;
+
+    @Schema(description = "报价出单比")
+    private String quoteToOrderRatio;
+
+}

+ 29 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/BusinessTypeDistributionVo.java

@@ -0,0 +1,29 @@
+package com.jzg.quotation.summary.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description = "今日数据")
+public class BusinessTypeDistributionVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 338636443590350308L;
+
+    @Schema(description = "交强险比例")
+    private String ciProportion;
+
+    @Schema(description = "交强险比例")
+    private String biProportion;
+
+    @Schema(description = "交强险比例")
+    private String niProportion;
+
+}

+ 37 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/DailyDataVo.java

@@ -0,0 +1,37 @@
+package com.jzg.quotation.summary.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;import lombok.Builder;
+import lombok.Data;import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description = "今日数据")
+public class DailyDataVo {
+
+    @Schema(description = "保费")
+    private String premium;
+
+    @Schema(description = "较昨日保费变化")
+    private String premiumChange;
+
+    @Schema(description = "订单数")
+    private String orderQuantity;
+
+    @Schema(description = "较昨日订单数变化")
+    private String orderQuantityChange;
+
+    @Schema(description = "出单业务员")
+    private String insuranceIssuersCount;
+
+    @Schema(description = "较昨日出单业务员变化")
+    private String insuranceIssuersCountChange;
+
+    @Schema(description = "报价次数")
+    private String quoteCount;
+
+    @Schema(description = "较昨日报价次数")
+    private String quoteCountChange;
+
+}

+ 22 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/vo/OrderTrendVo.java

@@ -0,0 +1,22 @@
+package com.jzg.quotation.summary.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderTrendVo {
+
+    @Schema(description = "月份")
+    private String month;
+
+    @Schema(description = "出单数量")
+    private String orderCount;
+
+    @Schema(description = "保费")
+    private String premium;
+
+}

+ 82 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrdersMapper.java

@@ -11,6 +11,11 @@ import com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo;
 import com.jzg.commons.entity.orders.vo.OrderListVo;
 import com.jzg.commons.entity.orders.vo.OrderListVo;
 import com.jzg.commons.entity.vo.OrdersListVo;
 import com.jzg.commons.entity.vo.OrdersListVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.quotation.summary.entity.bo.StatDateCountBo;
+import com.jzg.quotation.summary.entity.vo.BusinessDistributionVo;
+import com.jzg.quotation.summary.entity.vo.BusinessFunnelVo;
+import com.jzg.quotation.summary.entity.vo.BusinessTypeDistributionVo;
+import com.jzg.quotation.summary.entity.vo.OrderTrendVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -31,22 +36,97 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
 
 
     List<HistoryQuoteResultVo> getHistoryQuote(@Param("userName") String userName);
     List<HistoryQuoteResultVo> getHistoryQuote(@Param("userName") String userName);
 
 
-    Page<HistoryQuoteResultVo> getHistoryQuoteList(@Param("page") Page page, @Param("params") HistoryQuoteQueryVo historyQuoteQueryVo,@Param("userName") String userName);
+    Page<HistoryQuoteResultVo> getHistoryQuoteList(@Param("page") Page page, @Param("params") HistoryQuoteQueryVo historyQuoteQueryVo, @Param("userName") String userName);
 
 
     List<HistoryQuoteResultVo> getHistoryQuoteByLicenseNo(@Param("licenseNo") String licenseNo);
     List<HistoryQuoteResultVo> getHistoryQuoteByLicenseNo(@Param("licenseNo") String licenseNo);
 
 
     /**
     /**
      * 获取主订单
      * 获取主订单
+     *
      * @param companyId
      * @param companyId
      * @param licenseNo
      * @param licenseNo
      * @param vinNo
      * @param vinNo
      * @return
      * @return
      */
      */
-    InsOrders getBaseOrders(String companyId,String licenseNo, String vinNo);
+    InsOrders getBaseOrders(String companyId, String licenseNo, String vinNo);
 
 
     /**
     /**
      * 获取最新报价的订单信息
      * 获取最新报价的订单信息
      */
      */
     List<InsOrdersVo> queryNewQuoteListByQuoteNo(String quoteNo);
     List<InsOrdersVo> queryNewQuoteListByQuoteNo(String quoteNo);
 
 
+    /**
+     * 获取今日、昨日的保费数据
+     *
+     * @return 今日、昨日的保费数据
+     */
+    List<StatDateCountBo> getPremiumStatistics(@Param("today") String today,
+                                               @Param("yesterday") String yesterday);
+
+    /**
+     * 获取订单数量
+     *
+     * @param today     今天日期
+     * @param yesterday 昨天日期
+     * @return 订单数量
+     */
+    List<StatDateCountBo> getOrderQuantity(@Param("today") String today,
+                                           @Param("yesterday") String yesterday);
+
+    /**
+     * 获取今日、昨日出单业务员
+     *
+     * @param today     今天日期
+     * @param yesterday 昨天日期
+     * @return 今日、昨日出单业务员
+     */
+    List<StatDateCountBo> getInsuranceIssuersCount(@Param("today") String today,
+                                                   @Param("yesterday") String yesterday);
+
+    /**
+     * 获取今日、昨日报价次数
+     *
+     * @param today     今天日期
+     * @param yesterday 昨天日期
+     * @return 今日、昨日报价次数
+     */
+    List<StatDateCountBo> getQuoteCount(@Param("today") String today,
+                                        @Param("yesterday") String yesterday);
+
+    /**
+     * 获取业务类型分布
+     *
+     * @return 业务类型分布比例
+     */
+    BusinessTypeDistributionVo getPremiumRatio();
+
+
+    /**
+     * 获取业务漏斗
+     *
+     * @return 业务漏斗比例数据
+     */
+    BusinessFunnelVo getBusinessFunnel();
+
+    /**
+     * 获取出单趋势
+     *
+     * @return 出单趋势
+     */
+    List<OrderTrendVo> getOrderTrend();
+
+    /**
+     * 获取省数据
+     *
+     * @return 业务员分布数据
+     */
+    List<BusinessDistributionVo> getCityBusinessDistribution();
+
+    /**
+     * 获取市数据
+     *
+     * @param province 省编码
+     * @return 业务员分布数据
+     */
+    List<BusinessDistributionVo> getProvinceBusinessDistribution(@Param("province") String province);
 }
 }

+ 49 - 6
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -23,6 +23,7 @@ import com.jzg.commons.entity.vo.OrdersListVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersAdd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersAdd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersEnd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersEnd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.quotation.summary.entity.vo.*;
 
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 import java.util.List;
@@ -46,6 +47,7 @@ public interface InsOrdersService extends IService<InsOrders> {
 
 
     /**
     /**
      * 根据报价参数生成订单  返回订单号
      * 根据报价参数生成订单  返回订单号
+     *
      * @param quoteVo
      * @param quoteVo
      * @param companyName
      * @param companyName
      * @return String
      * @return String
@@ -55,12 +57,13 @@ public interface InsOrdersService extends IService<InsOrders> {
 
 
     /**
     /**
      * 获取主订单信息 用于判断是否存在主订单
      * 获取主订单信息 用于判断是否存在主订单
+     *
      * @param companyId
      * @param companyId
      * @param licenseNo
      * @param licenseNo
      * @param vinNo
      * @param vinNo
      * @return
      * @return
      */
      */
-    InsOrders getMainOrders(String companyId,String licenseNo, String vinNo);
+    InsOrders getMainOrders(String companyId, String licenseNo, String vinNo);
 
 
     /**
     /**
      * 设置人员地址
      * 设置人员地址
@@ -92,11 +95,12 @@ public interface InsOrdersService extends IService<InsOrders> {
 
 
     /**
     /**
      * 发送订单状态变更消息
      * 发送订单状态变更消息
-     * @param insOrders 订单信息
-     * @param carInfo 订单车辆信息
+     *
+     * @param insOrders   订单信息
+     * @param carInfo     订单车辆信息
      * @param ordersCosts 订单费用信息
      * @param ordersCosts 订单费用信息
-     * @param token 授权token
-     * @param tplCode 模板code
+     * @param token       授权token
+     * @param tplCode     模板code
      */
      */
     void orderStatusMessage(InsOrders insOrders, InsOrdersCarInfo carInfo, InsOrdersCosts ordersCosts, String token, MessageCodeEnum tplCode);
     void orderStatusMessage(InsOrders insOrders, InsOrdersCarInfo carInfo, InsOrdersCosts ordersCosts, String token, MessageCodeEnum tplCode);
 
 
@@ -130,12 +134,14 @@ public interface InsOrdersService extends IService<InsOrders> {
 
 
     /**
     /**
      * 获取历史报价列表
      * 获取历史报价列表
+     *
      * @return
      * @return
      */
      */
     Page<HistoryQuoteResultVo> getHistoryQuoteList(HistoryQuoteQueryVo historyQuoteQueryVo);
     Page<HistoryQuoteResultVo> getHistoryQuoteList(HistoryQuoteQueryVo historyQuoteQueryVo);
 
 
     /**
     /**
      * 获取历史报价信息
      * 获取历史报价信息
+     *
      * @return
      * @return
      */
      */
     List<HistoryQuoteResultVo> getHistoryQuoteByLicenseNo(String licenseNo);
     List<HistoryQuoteResultVo> getHistoryQuoteByLicenseNo(String licenseNo);
@@ -149,15 +155,17 @@ public interface InsOrdersService extends IService<InsOrders> {
 
 
     /**
     /**
      * 更改对接人
      * 更改对接人
+     *
      * @param orderNo
      * @param orderNo
      * @param name
      * @param name
      * @param phone
      * @param phone
      * @return
      * @return
      */
      */
-    boolean changePerson(String orderNo,String name,String phone);
+    boolean changePerson(String orderNo, String name, String phone);
 
 
     /**
     /**
      * 更改补录订单
      * 更改补录订单
+     *
      * @param orderNo
      * @param orderNo
      * @return
      * @return
      */
      */
@@ -165,4 +173,39 @@ public interface InsOrdersService extends IService<InsOrders> {
 
 
     List<InsOrdersVo> comparePrice(String quoteNo);
     List<InsOrdersVo> comparePrice(String quoteNo);
 
 
+    /**
+     * 获取今日数据
+     *
+     * @return 今日数据
+     */
+    DailyDataVo getDailyData();
+
+    /**
+     * 查询业务类型分布
+     *
+     * @return 业务类型分布
+     */
+    BusinessTypeDistributionVo getBusinessTypeDistribution();
+
+    /**
+     * 查询业务漏斗
+     *
+     * @return 业务漏斗数据
+     */
+    BusinessFunnelVo getBusinessFunnel();
+
+    /**
+     * 出单趋势
+     *
+     * @return 出单趋势数据
+     */
+    List<OrderTrendVo> getOrderTrend();
+
+    /**
+     * 业务员分布
+     *
+     * @param province 省编码
+     * @return 业务分布数据
+     */
+    List<BusinessDistributionVo> getBusinessDistribution(String province);
 }
 }

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

@@ -37,6 +37,7 @@ import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.DateTimeUtils;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.commons.util.idgen.IdGenerate;
@@ -45,10 +46,16 @@ import com.jzg.quotation.commons.client.PartnerDistributionClient;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.summary.consumer.template.OrderMessageTemplate;
 import com.jzg.quotation.summary.consumer.template.OrderMessageTemplate;
+import com.jzg.quotation.summary.entity.bo.DataValueBo;
+import com.jzg.quotation.summary.entity.bo.StatDateCountBo;
+import com.jzg.quotation.summary.entity.vo.*;
 import com.jzg.quotation.summary.mapper.*;
 import com.jzg.quotation.summary.mapper.*;
 import com.jzg.quotation.summary.service.*;
 import com.jzg.quotation.summary.service.*;
 import com.jzg.quotation.summary.state.listener.OrderStateListener;
 import com.jzg.quotation.summary.state.listener.OrderStateListener;
+import com.jzg.quotation.summary.utils.StatisticsUtil;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletRequest;
+import lombok.AllArgsConstructor;
+import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 import lombok.Setter;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.BeanUtils;
@@ -62,6 +69,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URL;
 import java.net.URL;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
@@ -226,9 +234,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersRiskService.save(biRiskInfoVo);
             insOrdersRiskService.save(biRiskInfoVo);
 
 
             InsTaskImagesAdd imagesAdds = ordersAdd.getImagesAdds();
             InsTaskImagesAdd imagesAdds = ordersAdd.getImagesAdds();
-            if (ObjectUtil.isNotEmpty(imagesAdds)){
+            if (ObjectUtil.isNotEmpty(imagesAdds)) {
                 List<InsTaskImages> insTaskImages = BeanUtil.copyToList(imagesAdds.getImages(), InsTaskImages.class);
                 List<InsTaskImages> insTaskImages = BeanUtil.copyToList(imagesAdds.getImages(), InsTaskImages.class);
-                insTaskImages.forEach(image->{
+                insTaskImages.forEach(image -> {
                     image.setQuoteNo(quoteNo);
                     image.setQuoteNo(quoteNo);
                     insTaskImagesService.save(image);
                     insTaskImagesService.save(image);
                 });
                 });
@@ -240,7 +248,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
             // 发送订单状态变更消息
             // 发送订单状态变更消息
             this.orderStatusMessage(insOrders,
             this.orderStatusMessage(insOrders,
-                    insOrdersCarInfo,insOrdersCosts,
+                    insOrdersCarInfo, insOrdersCosts,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_9);
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_9);
 
 
             // 返回成功信息,表示订单、车辆和用户信息保存成功
             // 返回成功信息,表示订单、车辆和用户信息保存成功
@@ -259,7 +267,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             // 获取订单对象并设置引用编号
             // 获取订单对象并设置引用编号
             InsOrders insOrders = ordersEnd.getInsOrders();
             InsOrders insOrders = ordersEnd.getInsOrders();
             InsOrdersOtherInfoVo ordersOtherInfo = ordersEnd.getInsOrdersOtherInfo();
             InsOrdersOtherInfoVo ordersOtherInfo = ordersEnd.getInsOrdersOtherInfo();
-            if (ObjectUtil.isNotEmpty(ordersOtherInfo)){
+            if (ObjectUtil.isNotEmpty(ordersOtherInfo)) {
                 insOrders.setCompanyId(ordersOtherInfo.getCompanyId());
                 insOrders.setCompanyId(ordersOtherInfo.getCompanyId());
                 insOrders.setCompanyName(ordersOtherInfo.getCompanyName());
                 insOrders.setCompanyName(ordersOtherInfo.getCompanyName());
                 insOrders.setSigningTime(ordersOtherInfo.getSigningTime());
                 insOrders.setSigningTime(ordersOtherInfo.getSigningTime());
@@ -273,7 +281,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             String quoteNo = insOrders.getId();
             String quoteNo = insOrders.getId();
             // 获取车辆信息对象,并设置订单编号,然后保存车辆信息
             // 获取车辆信息对象,并设置订单编号,然后保存车辆信息
             InsOrdersCarInfo insOrdersCarInfo = BeanUtil.copyProperties(ordersEnd.getCarInfoVo(), InsOrdersCarInfo.class);
             InsOrdersCarInfo insOrdersCarInfo = BeanUtil.copyProperties(ordersEnd.getCarInfoVo(), InsOrdersCarInfo.class);
-            ordersCarInfoService.update(insOrdersCarInfo,new LambdaUpdateWrapper<>(InsOrdersCarInfo.class).eq(InsOrdersCarInfo::getOrderNo,quoteNo));
+            ordersCarInfoService.update(insOrdersCarInfo, new LambdaUpdateWrapper<>(InsOrdersCarInfo.class).eq(InsOrdersCarInfo::getOrderNo, quoteNo));
 
 
             // 获取用户信息对象,并设置订单编号,然后保存用户信息
             // 获取用户信息对象,并设置订单编号,然后保存用户信息
             List<InsOrdersCarUserInfo> userInfos = new ArrayList<>();
             List<InsOrdersCarUserInfo> userInfos = new ArrayList<>();
@@ -298,9 +306,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             // 保存其他信息
             // 保存其他信息
             InsOrdersCosts insOrdersCosts = BeanUtil.copyProperties(insOrdersOtherInfo, InsOrdersCosts.class);
             InsOrdersCosts insOrdersCosts = BeanUtil.copyProperties(insOrdersOtherInfo, InsOrdersCosts.class);
             if (ObjectUtil.isNotNull(insOrdersCosts.getJqPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getSyPremium())
             if (ObjectUtil.isNotNull(insOrdersCosts.getJqPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getSyPremium())
-            || ObjectUtil.isNotNull(insOrdersCosts.getJyPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getSumPremium())
+                    || ObjectUtil.isNotNull(insOrdersCosts.getJyPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getSumPremium())
                     || ObjectUtil.isNotNull(insOrdersCosts.getTaxPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getJqRatio())
                     || ObjectUtil.isNotNull(insOrdersCosts.getTaxPremium()) || ObjectUtil.isNotNull(insOrdersCosts.getJqRatio())
-            || ObjectUtil.isNotNull(insOrdersCosts.getSyRatio())){
+                    || ObjectUtil.isNotNull(insOrdersCosts.getSyRatio())) {
                 insOrdersCosts.setOrderNo(quoteNo);
                 insOrdersCosts.setOrderNo(quoteNo);
                 insOrdersCostsService.updateById(insOrdersCosts);
                 insOrdersCostsService.updateById(insOrdersCosts);
             }
             }
@@ -318,15 +326,15 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             // 交强险 险种信息
             // 交强险 险种信息
             RiskInfoVo ciRiskInfoVo = ordersEnd.getCiRiskInfoVo();
             RiskInfoVo ciRiskInfoVo = ordersEnd.getCiRiskInfoVo();
             InsOrdersRisk insuranceInfo = BeanUtil.copyProperties(ciRiskInfoVo, InsOrdersRisk.class);
             InsOrdersRisk insuranceInfo = BeanUtil.copyProperties(ciRiskInfoVo, InsOrdersRisk.class);
-            insOrdersRiskService.update(insuranceInfo,new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo,quoteNo));
+            insOrdersRiskService.update(insuranceInfo, new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo, quoteNo));
             // 商业险 险种信息
             // 商业险 险种信息
             InsOrdersRisk biRiskInfoVo = BeanUtil.copyProperties(ordersEnd.getBiRiskInfoVo(), InsOrdersRisk.class);
             InsOrdersRisk biRiskInfoVo = BeanUtil.copyProperties(ordersEnd.getBiRiskInfoVo(), InsOrdersRisk.class);
-            insOrdersRiskService.update(biRiskInfoVo,new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo,quoteNo));
+            insOrdersRiskService.update(biRiskInfoVo, new LambdaUpdateWrapper<>(InsOrdersRisk.class).eq(InsOrdersRisk::getOrderNo, quoteNo));
 
 
             InsTaskImagesAdd imagesAdds = ordersEnd.getImagesAdds();
             InsTaskImagesAdd imagesAdds = ordersEnd.getImagesAdds();
-            if (ObjectUtil.isNotEmpty(imagesAdds)){
+            if (ObjectUtil.isNotEmpty(imagesAdds)) {
                 List<InsTaskImages> insTaskImages = BeanUtil.copyToList(imagesAdds.getImages(), InsTaskImages.class);
                 List<InsTaskImages> insTaskImages = BeanUtil.copyToList(imagesAdds.getImages(), InsTaskImages.class);
-                insTaskImages.forEach(image->{
+                insTaskImages.forEach(image -> {
                     image.setQuoteNo(String.valueOf(quoteNo));
                     image.setQuoteNo(String.valueOf(quoteNo));
                     insTaskImagesService.save(image);
                     insTaskImagesService.save(image);
                 });
                 });
@@ -350,7 +358,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
     @Override
     @Override
     public IPage<OrdersListVo> pageList(InsOrdersParam insOrdersParam) {
     public IPage<OrdersListVo> pageList(InsOrdersParam insOrdersParam) {
-        if(Objects.nonNull(insOrdersParam.getRecordingTime()) && insOrdersParam.getRecordingTime().length > 0){
+        if (Objects.nonNull(insOrdersParam.getRecordingTime()) && insOrdersParam.getRecordingTime().length > 0) {
             insOrdersParam.setStartDate(insOrdersParam.getRecordingTime()[0]);
             insOrdersParam.setStartDate(insOrdersParam.getRecordingTime()[0]);
             insOrdersParam.setEndDate(insOrdersParam.getRecordingTime()[1]);
             insOrdersParam.setEndDate(insOrdersParam.getRecordingTime()[1]);
         }
         }
@@ -376,16 +384,16 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             throw new SystemException("查询结果为空,无法处理订单信息");
             throw new SystemException("查询结果为空,无法处理订单信息");
         }
         }
         // 协议名称、协议类型
         // 协议名称、协议类型
-        if(Objects.nonNull(insOrdersVo.getInsOrders().getAgreementId())) {
+        if (Objects.nonNull(insOrdersVo.getInsOrders().getAgreementId())) {
             HttpResult<AgreementInfoVo> ptlAgreement = orgClient.queryAgreementById(insOrdersVo.getInsOrders().getAgreementId(), baseController.getToken(), baseController.getAppSystemCode());
             HttpResult<AgreementInfoVo> ptlAgreement = orgClient.queryAgreementById(insOrdersVo.getInsOrders().getAgreementId(), baseController.getToken(), baseController.getAppSystemCode());
-            AssertionUtils.isFail(ptlAgreement.getCode() == 500,ptlAgreement.getMsg() + ",请联系管理处理");
+            AssertionUtils.isFail(ptlAgreement.getCode() == 500, ptlAgreement.getMsg() + ",请联系管理处理");
             insOrdersVo.setAgreementType(ptlAgreement.getData().getAgreement().getAgreementType());
             insOrdersVo.setAgreementType(ptlAgreement.getData().getAgreement().getAgreementType());
             insOrdersVo.setAgreementName(ptlAgreement.getData().getAgreement().getAgreementName());
             insOrdersVo.setAgreementName(ptlAgreement.getData().getAgreement().getAgreementName());
         }
         }
 
 
         // 业务员信息
         // 业务员信息
-        SalesmanVo salesmanInfo = orgClient.getUserByMobile(insOrdersVo.getCreateBy(),baseController.getToken(),baseController.getAppSystemCode());
-        if(Objects.nonNull(salesmanInfo)) {
+        SalesmanVo salesmanInfo = orgClient.getUserByMobile(insOrdersVo.getCreateBy(), baseController.getToken(), baseController.getAppSystemCode());
+        if (Objects.nonNull(salesmanInfo)) {
             InsOrdersVo.Salesman salesman = new InsOrdersVo.Salesman();
             InsOrdersVo.Salesman salesman = new InsOrdersVo.Salesman();
             salesman.setName(salesmanInfo.getName());
             salesman.setName(salesmanInfo.getName());
             salesman.setDeptName(salesmanInfo.getDeptName());
             salesman.setDeptName(salesmanInfo.getDeptName());
@@ -407,25 +415,25 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersVo.setCarUserInfoList(null);
             insOrdersVo.setCarUserInfoList(null);
         }
         }
         InsTaskImagesVo imagesAdds = insOrdersVo.getImagesAdds();
         InsTaskImagesVo imagesAdds = insOrdersVo.getImagesAdds();
-        if (ObjectUtil.isNotEmpty(imagesAdds)){
+        if (ObjectUtil.isNotEmpty(imagesAdds)) {
             imagesAdds.getImages().forEach(image -> {
             imagesAdds.getImages().forEach(image -> {
-                if (StringUtils.isNotEmpty(image.getBucketName()) && StringUtils.isNotEmpty(image.getFileName())){
+                if (StringUtils.isNotEmpty(image.getBucketName()) && StringUtils.isNotEmpty(image.getFileName())) {
                     image.setDownloadUrl(MinioUtils.getPresignedObjectUrl(image.getBucketName(), image.getFileName()));
                     image.setDownloadUrl(MinioUtils.getPresignedObjectUrl(image.getBucketName(), image.getFileName()));
                 }
                 }
             });
             });
         }
         }
 
 
-        if (Objects.nonNull(insOrdersVo.getOwnersInfo())){
+        if (Objects.nonNull(insOrdersVo.getOwnersInfo())) {
             insOrdersVo.getOwnersInfo().setIdentifyType(insOrdersVo.getOwnersInfo().getPersonType());
             insOrdersVo.getOwnersInfo().setIdentifyType(insOrdersVo.getOwnersInfo().getPersonType());
         }
         }
-        if (Objects.nonNull(insOrdersVo.getPolicyHolderInfo())){
+        if (Objects.nonNull(insOrdersVo.getPolicyHolderInfo())) {
             insOrdersVo.getPolicyHolderInfo().setIdentifyType(insOrdersVo.getPolicyHolderInfo().getPersonType());
             insOrdersVo.getPolicyHolderInfo().setIdentifyType(insOrdersVo.getPolicyHolderInfo().getPersonType());
         }
         }
-        if (Objects.nonNull(insOrdersVo.getInsuredPersonInfo())){
+        if (Objects.nonNull(insOrdersVo.getInsuredPersonInfo())) {
             insOrdersVo.getInsuredPersonInfo().setIdentifyType(insOrdersVo.getInsuredPersonInfo().getPersonType());
             insOrdersVo.getInsuredPersonInfo().setIdentifyType(insOrdersVo.getInsuredPersonInfo().getPersonType());
         }
         }
 
 
-        if (CollectionUtil.isNotEmpty(insOrdersVo.getInsOrdersRiskList())){
+        if (CollectionUtil.isNotEmpty(insOrdersVo.getInsOrdersRiskList())) {
             insOrdersVo.getInsOrdersRiskList().forEach(riskInfo -> {
             insOrdersVo.getInsOrdersRiskList().forEach(riskInfo -> {
                 insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
                 insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
 //                if (StringUtils.equals(riskInfo.getRiskCode(),"0507")){
 //                if (StringUtils.equals(riskInfo.getRiskCode(),"0507")){
@@ -446,7 +454,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         }
         // 订单电子保单信息
         // 订单电子保单信息
         insOrdersVo.setInsOrdersPdfUrl(insOrdersPdfUrlService.getById(id));
         insOrdersVo.setInsOrdersPdfUrl(insOrdersPdfUrlService.getById(id));
-        if (insOrdersVo.getInsOrdersPdfUrl() ==  null) {
+        if (insOrdersVo.getInsOrdersPdfUrl() == null) {
             insOrdersVo.setInsOrdersPdfUrl(new InsOrdersPdfUrl());
             insOrdersVo.setInsOrdersPdfUrl(new InsOrdersPdfUrl());
         }
         }
         // 驾意险信息
         // 驾意险信息
@@ -477,7 +485,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         }
 
 
         // 批改明细查询
         // 批改明细查询
-        if (insOrdersVo.getInsOrderAdjust() !=  null) {
+        if (insOrdersVo.getInsOrderAdjust() != null) {
             LambdaQueryWrapper<InsOrderAdjustInfo> wrapper = new LambdaQueryWrapper<>();
             LambdaQueryWrapper<InsOrderAdjustInfo> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(InsOrderAdjustInfo::getAdjustId, insOrdersVo.getInsOrderAdjust().getId());
             wrapper.eq(InsOrderAdjustInfo::getAdjustId, insOrdersVo.getInsOrderAdjust().getId());
             wrapper.eq(InsOrderAdjustInfo::getIsDelete, 0);
             wrapper.eq(InsOrderAdjustInfo::getIsDelete, 0);
@@ -495,10 +503,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         RiskInfoVo riskInfoVo = new RiskInfoVo();
         RiskInfoVo riskInfoVo = new RiskInfoVo();
         riskInfoVo.setId(riskInfo.getId());
         riskInfoVo.setId(riskInfo.getId());
         riskInfoVo.setRiskCode(riskInfo.getRiskCode());
         riskInfoVo.setRiskCode(riskInfo.getRiskCode());
-        if (ObjectUtil.isNotNull(riskInfo.getStartDate())){
+        if (ObjectUtil.isNotNull(riskInfo.getStartDate())) {
             riskInfoVo.setStartDate(riskInfo.getStartDate().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
             riskInfoVo.setStartDate(riskInfo.getStartDate().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
         }
         }
-        if (ObjectUtil.isNotNull(riskInfo.getEndDate())){
+        if (ObjectUtil.isNotNull(riskInfo.getEndDate())) {
             riskInfoVo.setEndDate(riskInfo.getEndDate().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
             riskInfoVo.setEndDate(riskInfo.getEndDate().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
         }
         }
         return riskInfoVo;
         return riskInfoVo;
@@ -506,7 +514,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
 
 
     public void setInsOrdersExternalPolicy(InsOrdersExternalPolicy ordersExternalPolicy) {
     public void setInsOrdersExternalPolicy(InsOrdersExternalPolicy ordersExternalPolicy) {
-        if (ObjectUtil.isNotEmpty(ordersExternalPolicy) && CollectionUtil.isNotEmpty(ordersExternalPolicy.getUploadFiles())){
+        if (ObjectUtil.isNotEmpty(ordersExternalPolicy) && CollectionUtil.isNotEmpty(ordersExternalPolicy.getUploadFiles())) {
             ordersExternalPolicy.getUploadFiles().stream().forEach(sysUploadFiles -> {
             ordersExternalPolicy.getUploadFiles().stream().forEach(sysUploadFiles -> {
                 sysUploadFiles.setDownloadUrl(MinioUtils.getPresignedObjectUrl(sysUploadFiles.getBucketName(), sysUploadFiles.getFileName()));
                 sysUploadFiles.setDownloadUrl(MinioUtils.getPresignedObjectUrl(sysUploadFiles.getBucketName(), sysUploadFiles.getFileName()));
             });
             });
@@ -519,10 +527,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     private CustomerInfoVo mapCarUserInfoToCustomerInfo(InsOrdersCarUserInfo carUserInfo) {
     private CustomerInfoVo mapCarUserInfoToCustomerInfo(InsOrdersCarUserInfo carUserInfo) {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         CustomerInfoVo customerInfoVo = BeanUtil.copyProperties(carUserInfo, CustomerInfoVo.class);
         CustomerInfoVo customerInfoVo = BeanUtil.copyProperties(carUserInfo, CustomerInfoVo.class);
-        if(Objects.nonNull(carUserInfo.getIdentifyValidDate())) {
+        if (Objects.nonNull(carUserInfo.getIdentifyValidDate())) {
             customerInfoVo.setIdentifyValidDate(carUserInfo.getIdentifyValidDate().format(formatter));
             customerInfoVo.setIdentifyValidDate(carUserInfo.getIdentifyValidDate().format(formatter));
         }
         }
-        if(Objects.nonNull(carUserInfo.getIdentifyValidEndDate())) {
+        if (Objects.nonNull(carUserInfo.getIdentifyValidEndDate())) {
             customerInfoVo.setIdentifyValidEndDate(carUserInfo.getIdentifyValidEndDate().format(formatter));
             customerInfoVo.setIdentifyValidEndDate(carUserInfo.getIdentifyValidEndDate().format(formatter));
         }
         }
         customerInfoVo.setProperty(customerInfoVo.getPersonType());
         customerInfoVo.setProperty(customerInfoVo.getPersonType());
@@ -533,7 +541,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      * 根据 policyPersonType 设置对应的用户信息
      * 根据 policyPersonType 设置对应的用户信息
      */
      */
     private void setPolicyPersonInfo(InsOrdersVo insOrdersVo, Integer policyPersonType, CustomerInfoVo customerInfoVo) {
     private void setPolicyPersonInfo(InsOrdersVo insOrdersVo, Integer policyPersonType, CustomerInfoVo customerInfoVo) {
-        if (ObjectUtil.isEmpty(policyPersonType)){
+        if (ObjectUtil.isEmpty(policyPersonType)) {
             return;
             return;
         }
         }
         switch (policyPersonType) {
         switch (policyPersonType) {
@@ -566,23 +574,23 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 //        insOrdersMapper.insert(insOrders);
 //        insOrdersMapper.insert(insOrders);
 
 
         InsOrdersCarInfo carInfo = new InsOrdersCarInfo();
         InsOrdersCarInfo carInfo = new InsOrdersCarInfo();
-        BeanUtils.copyProperties(carInfo,quoteVo.getCarInfoVo());
+        BeanUtils.copyProperties(carInfo, quoteVo.getCarInfoVo());
         carInfo.setOrderNo(insOrders.getId());
         carInfo.setOrderNo(insOrders.getId());
 
 
         InsOrdersCarUserInfo ownersInfo = new InsOrdersCarUserInfo();
         InsOrdersCarUserInfo ownersInfo = new InsOrdersCarUserInfo();
-        BeanUtils.copyProperties(ownersInfo,quoteVo.getOwnersInfo());
+        BeanUtils.copyProperties(ownersInfo, quoteVo.getOwnersInfo());
 
 
         InsOrdersCarUserInfo insuredPersonInfo = new InsOrdersCarUserInfo();
         InsOrdersCarUserInfo insuredPersonInfo = new InsOrdersCarUserInfo();
-        BeanUtils.copyProperties(insuredPersonInfo,quoteVo.getInsuredPersonInfo());
+        BeanUtils.copyProperties(insuredPersonInfo, quoteVo.getInsuredPersonInfo());
 
 
         InsOrdersCarUserInfo policyHolderInfo = new InsOrdersCarUserInfo();
         InsOrdersCarUserInfo policyHolderInfo = new InsOrdersCarUserInfo();
-        BeanUtils.copyProperties(policyHolderInfo,quoteVo.getPolicyHolderInfo());
+        BeanUtils.copyProperties(policyHolderInfo, quoteVo.getPolicyHolderInfo());
 
 
         return true;
         return true;
     }
     }
 
 
     @Override
     @Override
-    public void setUserAreaCode(QuoteVo quoteVo){
+    public void setUserAreaCode(QuoteVo quoteVo) {
         HttpResult<PersonAreaVo> ownerAddress = orgClient.queryByAddress(
         HttpResult<PersonAreaVo> ownerAddress = orgClient.queryByAddress(
                 quoteVo.getOwnersInfo().getAddr(), quoteVo.getOwnersInfo().getIdentifyNumber());
                 quoteVo.getOwnersInfo().getAddr(), quoteVo.getOwnersInfo().getIdentifyNumber());
 
 
@@ -624,8 +632,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     public void orderAfterUpdateQuote(String ordersNo, QuoteResultsVo quoteResponse) {
     public void orderAfterUpdateQuote(String ordersNo, QuoteResultsVo quoteResponse) {
 
 
         // 检测主订单是否存在
         // 检测主订单是否存在
-        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId,ordersNo));
-        AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
+        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId, ordersNo));
+        AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
 
 
         InsOrdersCarInfo carInfo = ordersCarInfoService.getByOrderId(insOrders.getId());
         InsOrdersCarInfo carInfo = ordersCarInfoService.getByOrderId(insOrders.getId());
         //设置订单状态
         //设置订单状态
@@ -640,7 +648,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
         baseMapper.updateById(insOrders);
         baseMapper.updateById(insOrders);
         // 判断状态 是否是成功  如何成功则处理下面的流程
         // 判断状态 是否是成功  如何成功则处理下面的流程
-        if(stateResult.getCurrentState() == Integer.parseInt(InsOrderStatusEnum.WAIT_AUDIT.getCode())) {
+        if (stateResult.getCurrentState() == Integer.parseInt(InsOrderStatusEnum.WAIT_AUDIT.getCode())) {
             // 更新起保终保时间
             // 更新起保终保时间
             List<InsOrdersRisk> insOrdersRiskList = insOrdersRiskService.list(new LambdaQueryWrapper<InsOrdersRisk>().eq(InsOrdersRisk::getOrderNo, ordersNo));
             List<InsOrdersRisk> insOrdersRiskList = insOrdersRiskService.list(new LambdaQueryWrapper<InsOrdersRisk>().eq(InsOrdersRisk::getOrderNo, ordersNo));
             if (Objects.nonNull(insOrdersRiskList) && !insOrdersRiskList.isEmpty()) {
             if (Objects.nonNull(insOrdersRiskList) && !insOrdersRiskList.isEmpty()) {
@@ -711,12 +719,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
             //更新商业险种的保费
             //更新商业险种的保费
             List<InsOrdersKind> kindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>()
             List<InsOrdersKind> kindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>()
-                    .eq(InsOrdersKind::getOrderNo,ordersNo));
-            if (CollectionUtil.isNotEmpty(quoteResponse.getKindInfoVo())){
+                    .eq(InsOrdersKind::getOrderNo, ordersNo));
+            if (CollectionUtil.isNotEmpty(quoteResponse.getKindInfoVo())) {
                 quoteResponse.getKindInfoVo().forEach(kindInfoVo -> {
                 quoteResponse.getKindInfoVo().forEach(kindInfoVo -> {
                     kindList.forEach(kind -> {
                     kindList.forEach(kind -> {
                         if (kind.getKindCode().equals(kindInfoVo.getPlatformKindCode())) {
                         if (kind.getKindCode().equals(kindInfoVo.getPlatformKindCode())) {
-                            if(Objects.nonNull(kindInfoVo.getPremium())) {
+                            if (Objects.nonNull(kindInfoVo.getPremium())) {
                                 kind.setPremium(new BigDecimal(kindInfoVo.getPremium()));
                                 kind.setPremium(new BigDecimal(kindInfoVo.getPremium()));
                             }
                             }
                         }
                         }
@@ -726,7 +734,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersKindService.updateBatchById(kindList);
             insOrdersKindService.updateBatchById(kindList);
 
 
             // 发送订单状态变更消息
             // 发送订单状态变更消息
-            this.orderStatusMessage(insOrders,carInfo,ordersCosts,
+            this.orderStatusMessage(insOrders, carInfo, ordersCosts,
                     baseController.getToken(),
                     baseController.getToken(),
                     MessageCodeEnum.TEMPLATE_1);
                     MessageCodeEnum.TEMPLATE_1);
         }
         }
@@ -736,8 +744,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     @Override
     public void orderAfterUpdateFailedQuote(String ordersNo, String errMessage) {
     public void orderAfterUpdateFailedQuote(String ordersNo, String errMessage) {
         // 检测主订单是否存在
         // 检测主订单是否存在
-        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId,ordersNo));
-        AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
+        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId, ordersNo));
+        AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
 
 
         InsOrdersCarInfo carInfo = ordersCarInfoService.getByOrderId(insOrders.getId());
         InsOrdersCarInfo carInfo = ordersCarInfoService.getByOrderId(insOrders.getId());
         //设置订单状态
         //设置订单状态
@@ -750,46 +758,46 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     @Override
     public void orderStatusMessage(InsOrders insOrders, InsOrdersCarInfo carInfo, InsOrdersCosts ordersCosts, String token, MessageCodeEnum tplCode) {
     public void orderStatusMessage(InsOrders insOrders, InsOrdersCarInfo carInfo, InsOrdersCosts ordersCosts, String token, MessageCodeEnum tplCode) {
         // 获取消息模板 并替换内容
         // 获取消息模板 并替换内容
-        HttpResult<SysMessageTemplate>  result = orgClient.templateGet(tplCode,
+        HttpResult<SysMessageTemplate> result = orgClient.templateGet(tplCode,
                 baseController.getToken());
                 baseController.getToken());
         SysMessageTemplate template = result.getData();
         SysMessageTemplate template = result.getData();
-        AssertionUtils.isFail(Objects.isNull(template),"获取模板失败!");
+        AssertionUtils.isFail(Objects.isNull(template), "获取模板失败!");
         Map<String, Object> valuesMap = new HashMap<>();
         Map<String, Object> valuesMap = new HashMap<>();
-        valuesMap.put("licenseNo",carInfo.getLicenseNo());
-        valuesMap.put("orderStatus",InsOrderStatusEnum.matchKey(insOrders.getOrderStatus()).getDesc());
-        valuesMap.put("amount",Objects.isNull(ordersCosts.getSumPremium())? new BigDecimal(0) : ordersCosts.getSumPremium());
-        String content = StringUtils.replaceContent(template.getContent(),valuesMap);
+        valuesMap.put("licenseNo", carInfo.getLicenseNo());
+        valuesMap.put("orderStatus", InsOrderStatusEnum.matchKey(insOrders.getOrderStatus()).getDesc());
+        valuesMap.put("amount", Objects.isNull(ordersCosts.getSumPremium()) ? new BigDecimal(0) : ordersCosts.getSumPremium());
+        String content = StringUtils.replaceContent(template.getContent(), valuesMap);
         // 获取接收用户
         // 获取接收用户
         Set<String> userList = new HashSet<>();
         Set<String> userList = new HashSet<>();
-        if(StringUtils.isNotBlank(insOrders.getRealQuoteUserId())){
+        if (StringUtils.isNotBlank(insOrders.getRealQuoteUserId())) {
             userList.add(insOrders.getRealQuoteUserId());
             userList.add(insOrders.getRealQuoteUserId());
         }
         }
         userList.add(insOrders.getCreateBy());
         userList.add(insOrders.getCreateBy());
         List<String> recerveLsit = new ArrayList<>(userList);
         List<String> recerveLsit = new ArrayList<>(userList);
-        orderMessageTemplate.SendOrderStatus(insOrders.getId(),template.getTplName(),content,
+        orderMessageTemplate.SendOrderStatus(insOrders.getId(), template.getTplName(), content,
                 recerveLsit,
                 recerveLsit,
-                token,tplCode);
+                token, tplCode);
     }
     }
 
 
     @Override
     @Override
     public void orderAfterUpdateUnderwriting(UnderwritingResultsVo underwritingResultsVo) {
     public void orderAfterUpdateUnderwriting(UnderwritingResultsVo underwritingResultsVo) {
         // 检测主订单是否存在
         // 检测主订单是否存在
-        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId,underwritingResultsVo.getOrdersNo()));
-        AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
+        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId, underwritingResultsVo.getOrdersNo()));
+        AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
 
 
         //设置订单状态
         //设置订单状态
         StateResult stateResult = orderStateListener.statusChange(underwritingResultsVo.getUnderwritingStatus(), insOrders.getOrderStatus());
         StateResult stateResult = orderStateListener.statusChange(underwritingResultsVo.getUnderwritingStatus(), insOrders.getOrderStatus());
         insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
         insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
 
 
         //如果保司订单号存在则进行更新  有的保司在核保获取订单号
         //如果保司订单号存在则进行更新  有的保司在核保获取订单号
-        if(Objects.nonNull(underwritingResultsVo.getCompanyOrderNo())){
+        if (Objects.nonNull(underwritingResultsVo.getCompanyOrderNo())) {
             insOrders.setCompanyOrderNo(underwritingResultsVo.getCompanyOrderNo());
             insOrders.setCompanyOrderNo(underwritingResultsVo.getCompanyOrderNo());
             insOrders.setPayLink(underwritingResultsVo.getPaymentLink());
             insOrders.setPayLink(underwritingResultsVo.getPaymentLink());
         }
         }
 
 
         insOrdersMapper.updateById(insOrders);
         insOrdersMapper.updateById(insOrders);
 
 
-        InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getOne(new LambdaQueryWrapper<InsOrdersPolicy>().eq(InsOrdersPolicy::getOrderNo,underwritingResultsVo.getOrdersNo()));
+        InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getOne(new LambdaQueryWrapper<InsOrdersPolicy>().eq(InsOrdersPolicy::getOrderNo, underwritingResultsVo.getOrdersNo()));
         if (underwritingResultsVo.getJqApplyNo() != null) {
         if (underwritingResultsVo.getJqApplyNo() != null) {
             insOrdersPolicy.setJqApplyNo(underwritingResultsVo.getJqApplyNo());
             insOrdersPolicy.setJqApplyNo(underwritingResultsVo.getJqApplyNo());
         }
         }
@@ -799,13 +807,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (underwritingResultsVo.getJyApplyNo() != null) {
         if (underwritingResultsVo.getJyApplyNo() != null) {
             insOrdersPolicy.setJyApplyNo(underwritingResultsVo.getJyApplyNo());
             insOrdersPolicy.setJyApplyNo(underwritingResultsVo.getJyApplyNo());
         }
         }
-        if(underwritingResultsVo.getJqPolicyno() != null){
+        if (underwritingResultsVo.getJqPolicyno() != null) {
             insOrdersPolicy.setJqPolicyNo(underwritingResultsVo.getJqPolicyno());
             insOrdersPolicy.setJqPolicyNo(underwritingResultsVo.getJqPolicyno());
         }
         }
-        if(underwritingResultsVo.getSyPolicyno() != null){
+        if (underwritingResultsVo.getSyPolicyno() != null) {
             insOrdersPolicy.setSyPolicyNo(underwritingResultsVo.getSyPolicyno());
             insOrdersPolicy.setSyPolicyNo(underwritingResultsVo.getSyPolicyno());
         }
         }
-        if(underwritingResultsVo.getJyPolicyno() != null){
+        if (underwritingResultsVo.getJyPolicyno() != null) {
             insOrdersPolicy.setJyPolicyNo(underwritingResultsVo.getJyPolicyno());
             insOrdersPolicy.setJyPolicyNo(underwritingResultsVo.getJyPolicyno());
         }
         }
         insOrdersPolicyService.updateById(insOrdersPolicy);
         insOrdersPolicyService.updateById(insOrdersPolicy);
@@ -815,12 +823,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrdersQrcode.setId(IdGenerate.nextId());
         insOrdersQrcode.setId(IdGenerate.nextId());
         insOrdersQrcode.setOrderno(underwritingResultsVo.getOrdersNo());
         insOrdersQrcode.setOrderno(underwritingResultsVo.getOrdersNo());
         String paylink = "";
         String paylink = "";
-        if(isHttpUrl(insOrders.getPayLink())){
+        if (isHttpUrl(insOrders.getPayLink())) {
             paylink = insOrders.getPayLink().replace("{", "").replace("}", "");
             paylink = insOrders.getPayLink().replace("{", "").replace("}", "");
             insOrdersQrcode.setJumpUrl(paylink);
             insOrdersQrcode.setJumpUrl(paylink);
-        }else{
-            if(paylink.contains("data:image/jpg;base64,")){
-                paylink = paylink.replace("data:image/jpg;base64,","");
+        } else {
+            if (paylink.contains("data:image/jpg;base64,")) {
+                paylink = paylink.replace("data:image/jpg;base64,", "");
             }
             }
             insOrdersQrcode.setJumpUrl(paylink);
             insOrdersQrcode.setJumpUrl(paylink);
         }
         }
@@ -842,7 +850,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
     @Override
     @Override
     @Transactional
     @Transactional
-    public String generateOrders(QuoteVo quoteVo,String companyName) {
+    public String generateOrders(QuoteVo quoteVo, String companyName) {
         // 生成订单的条件
         // 生成订单的条件
         // 1个保险公司只有一个主订单   不区分险种
         // 1个保险公司只有一个主订单   不区分险种
         InsOrders mainOrders = this.getMainOrders(
         InsOrders mainOrders = this.getMainOrders(
@@ -850,39 +858,39 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 quoteVo.getCarInfoVo().getLicenseNo(),
                 quoteVo.getCarInfoVo().getLicenseNo(),
                 quoteVo.getCarInfoVo().getVinNo());
                 quoteVo.getCarInfoVo().getVinNo());
         boolean isExistsMainOrder = false;
         boolean isExistsMainOrder = false;
-        if (Objects.nonNull(mainOrders))
-        {
+        if (Objects.nonNull(mainOrders)) {
             isExistsMainOrder = true;
             isExistsMainOrder = true;
         }
         }
         String mainOrderNo;
         String mainOrderNo;
         // 如果订单号为0 则生成主订单
         // 如果订单号为0 则生成主订单
         if (!isExistsMainOrder) {
         if (!isExistsMainOrder) {
             // 生成主订单
             // 生成主订单
-            mainOrderNo = this.saveBaseOrderorSubOrder(quoteVo,companyName,"0");
-        }else{
+            mainOrderNo = this.saveBaseOrderorSubOrder(quoteVo, companyName, "0");
+        } else {
             // 更新主订单
             // 更新主订单
-            mainOrderNo = this.updateMainOrders(quoteVo,mainOrders.getId(),companyName);
+            mainOrderNo = this.updateMainOrders(quoteVo, mainOrders.getId(), companyName);
         }
         }
         // 生成子订单
         // 生成子订单
-        return this.saveBaseOrderorSubOrder(quoteVo,companyName,mainOrderNo);
+        return this.saveBaseOrderorSubOrder(quoteVo, companyName, mainOrderNo);
     }
     }
 
 
 
 
     /**
     /**
      * 保存主订单或者子订单
      * 保存主订单或者子订单
+     *
      * @param quoteVo
      * @param quoteVo
      * @param companyName
      * @param companyName
-     * @param mainOrderNo   主订单号
+     * @param mainOrderNo 主订单号
      * @return
      * @return
      */
      */
-    private String saveBaseOrderorSubOrder(QuoteVo quoteVo,String companyName,String mainOrderNo){
+    private String saveBaseOrderorSubOrder(QuoteVo quoteVo, String companyName, String mainOrderNo) {
         // 保存主订单信息
         // 保存主订单信息
         InsOrders insOrders = new InsOrders();
         InsOrders insOrders = new InsOrders();
         // 生成主订单编号
         // 生成主订单编号
-        if ("0".equals(mainOrderNo)){
+        if ("0".equals(mainOrderNo)) {
             insOrders.setParentId("0");
             insOrders.setParentId("0");
             insOrders.setId(IdGenerate.nextId());
             insOrders.setId(IdGenerate.nextId());
-        }else{
+        } else {
             // 生成子订单编号
             // 生成子订单编号
             insOrders.setParentId(mainOrderNo);
             insOrders.setParentId(mainOrderNo);
             insOrders.setId(IdGenerate.nextId());
             insOrders.setId(IdGenerate.nextId());
@@ -897,16 +905,16 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrders.setProductId(quoteVo.getOrder().getProductId());
         insOrders.setProductId(quoteVo.getOrder().getProductId());
         insOrders.setProductName(ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId()));
         insOrders.setProductName(ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId()));
         // 如果和报价人和登录人 不一致则判断为代课录单
         // 如果和报价人和登录人 不一致则判断为代课录单
-        if(!baseController.getUserName().equals(quoteVo.getOrder().getRealQuoteUserId())) {
+        if (!baseController.getUserName().equals(quoteVo.getOrder().getRealQuoteUserId())) {
             insOrders.setEntryStatus(2);
             insOrders.setEntryStatus(2);
-        }else{
+        } else {
             insOrders.setEntryStatus(1);
             insOrders.setEntryStatus(1);
         }
         }
         String productName = ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId());
         String productName = ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId());
         insOrders.setProductName(productName);
         insOrders.setProductName(productName);
-        if(Objects.isNull(insOrders.getRealQuoteUserId())) {
+        if (Objects.isNull(insOrders.getRealQuoteUserId())) {
             insOrders.setRealQuoteUserId(baseController.getUserName());
             insOrders.setRealQuoteUserId(baseController.getUserName());
-        }else{
+        } else {
             insOrders.setRealQuoteUserId(quoteVo.getOrder().getRealQuoteUserId());
             insOrders.setRealQuoteUserId(quoteVo.getOrder().getRealQuoteUserId());
         }
         }
         insOrdersMapper.insert(insOrders);
         insOrdersMapper.insert(insOrders);
@@ -918,18 +926,18 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = new ArrayList<>();
         List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = new ArrayList<>();
 
 
         // 添加车主信息
         // 添加车主信息
-        insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getOwnersInfo(), insOrders.getId(),1));
+        insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getOwnersInfo(), insOrders.getId(), 1));
         // 添加投保人信息
         // 添加投保人信息
-        insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getPolicyHolderInfo(), insOrders.getId(),2));
+        insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getPolicyHolderInfo(), insOrders.getId(), 2));
         // 添加被保险人信息
         // 添加被保险人信息
-        insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getInsuredPersonInfo(), insOrders.getId(),3));
+        insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getInsuredPersonInfo(), insOrders.getId(), 3));
         ordersCarUserInfoService.saveBatch(insOrdersCarUserInfoList);
         ordersCarUserInfoService.saveBatch(insOrdersCarUserInfoList);
 
 
         // 保存订单费用信息 ins_orders_costs
         // 保存订单费用信息 ins_orders_costs
         insOrdersCostsService.createCosts(insOrders);
         insOrdersCostsService.createCosts(insOrders);
 
 
         // 保存订单险种信息 ins_orders_kind
         // 保存订单险种信息 ins_orders_kind
-        insOrdersKindService.createKind(insOrders, quoteVo.getKindInfoVo(),quoteVo.getOrder().getInsuranceCompanyCode());
+        insOrdersKindService.createKind(insOrders, quoteVo.getKindInfoVo(), quoteVo.getOrder().getInsuranceCompanyCode());
 
 
         // 保存订单其他信息 ins_orders_other
         // 保存订单其他信息 ins_orders_other
         insOrdersOtherService.createOther(insOrders);
         insOrdersOtherService.createOther(insOrders);
@@ -938,28 +946,29 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrdersPolicyService.createPolicy(insOrders);
         insOrdersPolicyService.createPolicy(insOrders);
 
 
         // 保存订单险种信息 ins_orders_risk
         // 保存订单险种信息 ins_orders_risk
-        insOrdersRiskService.createRisk(insOrders, quoteVo.getCiRiskInfoVo(),quoteVo.getBiRiskInfoVo());
+        insOrdersRiskService.createRisk(insOrders, quoteVo.getCiRiskInfoVo(), quoteVo.getBiRiskInfoVo());
 
 
         // 保存订单车船税税信息 ins_orders_tax
         // 保存订单车船税税信息 ins_orders_tax
-        insOrdersTaxService.createTax(insOrders,quoteVo);
+        insOrdersTaxService.createTax(insOrders, quoteVo);
 
 
         // 保存特约信息
         // 保存特约信息
         if (quoteVo.getSpecialInfoVo() != null) {
         if (quoteVo.getSpecialInfoVo() != null) {
-            insOrdersClauseService.createClause(insOrders,quoteVo);
+            insOrdersClauseService.createClause(insOrders, quoteVo);
         }
         }
         // 保存订单驾意险
         // 保存订单驾意险
         if (quoteVo.getAccidentalDrivings() != null) {
         if (quoteVo.getAccidentalDrivings() != null) {
-            insOrdersAccidentalDrivingService.createAccidentalDriving(insOrders,quoteVo);
+            insOrdersAccidentalDrivingService.createAccidentalDriving(insOrders, quoteVo);
         }
         }
         return insOrders.getId();
         return insOrders.getId();
     }
     }
 
 
     /**
     /**
      * 更新主订单信息
      * 更新主订单信息
+     *
      * @param quoteVo
      * @param quoteVo
      * @return
      * @return
      */
      */
-    private String updateMainOrders(QuoteVo quoteVo,String mainOrderNo, String companyName){
+    private String updateMainOrders(QuoteVo quoteVo, String mainOrderNo, String companyName) {
         InsOrders insOrders = this.getById(mainOrderNo);
         InsOrders insOrders = this.getById(mainOrderNo);
 
 
         // 轨迹赋值
         // 轨迹赋值
@@ -977,9 +986,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrders.setProductName(ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId()));
         insOrders.setProductName(ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId()));
         String productName = ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId());
         String productName = ProductsType.getProductNameByCode(quoteVo.getOrder().getProductId());
         insOrders.setProductName(productName);
         insOrders.setProductName(productName);
-        if(Objects.isNull(insOrders.getRealQuoteUserId())) {
+        if (Objects.isNull(insOrders.getRealQuoteUserId())) {
             insOrders.setRealQuoteUserId(baseController.getUserName());
             insOrders.setRealQuoteUserId(baseController.getUserName());
-        }else{
+        } else {
             insOrders.setRealQuoteUserId(quoteVo.getOrder().getRealQuoteUserId());
             insOrders.setRealQuoteUserId(quoteVo.getOrder().getRealQuoteUserId());
         }
         }
         this.updateById(insOrders);
         this.updateById(insOrders);
@@ -989,19 +998,19 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         newOrder.setProductName(insOrders.getProductName());
         newOrder.setProductName(insOrders.getProductName());
         // 更新主订单车辆信息
         // 更新主订单车辆信息
         InsOrdersCarInfo carInfo = ordersCarInfoService.getById(mainOrderNo);
         InsOrdersCarInfo carInfo = ordersCarInfoService.getById(mainOrderNo);
-        ordersCarInfoService.updateMainOrderCarInfo(quoteVo.getCarInfoVo(), carInfo,insOrders);
+        ordersCarInfoService.updateMainOrderCarInfo(quoteVo.getCarInfoVo(), carInfo, insOrders);
 
 
         // 更新主订单用户信息
         // 更新主订单用户信息
         List<InsOrdersCarUserInfo> subOrdersCarUserInfoList = new ArrayList<>();
         List<InsOrdersCarUserInfo> subOrdersCarUserInfoList = new ArrayList<>();
 
 
         List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = ordersCarUserInfoService.getByOrderId(mainOrderNo);
         List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = ordersCarUserInfoService.getByOrderId(mainOrderNo);
         // 添加车主信息
         // 添加车主信息
-        subOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getOwnersInfo(), insOrders.getId(),1));
+        subOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getOwnersInfo(), insOrders.getId(), 1));
         // 添加投保人信息
         // 添加投保人信息
-        subOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getPolicyHolderInfo(), insOrders.getId(),2));
+        subOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getPolicyHolderInfo(), insOrders.getId(), 2));
         // 添加被保险人信息
         // 添加被保险人信息
-        subOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getInsuredPersonInfo(), insOrders.getId(),3));
-        ordersCarUserInfoService.updateMainOrderCarUserInfo(insOrdersCarUserInfoList, subOrdersCarUserInfoList,carInfo,insOrders);
+        subOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getInsuredPersonInfo(), insOrders.getId(), 3));
+        ordersCarUserInfoService.updateMainOrderCarUserInfo(insOrdersCarUserInfoList, subOrdersCarUserInfoList, carInfo, insOrders);
 
 
         // 更新订单费用信息 ins_orders_costs
         // 更新订单费用信息 ins_orders_costs
         insOrdersCostsService.updateMainCosts(insOrders);
         insOrdersCostsService.updateMainCosts(insOrders);
@@ -1029,10 +1038,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 //        insOrdersPolicyService.createPolicy(insOrders);
 //        insOrdersPolicyService.createPolicy(insOrders);
 
 
         // 保存订单险种信息 ins_orders_risk
         // 保存订单险种信息 ins_orders_risk
-        insOrdersRiskService.updateMainRisk(quoteVo.getCiRiskInfoVo(),quoteVo.getBiRiskInfoVo(), mainOrderNo);
+        insOrdersRiskService.updateMainRisk(quoteVo.getCiRiskInfoVo(), quoteVo.getBiRiskInfoVo(), mainOrderNo);
 
 
         // 保存订单车船税税信息 ins_orders_tax
         // 保存订单车船税税信息 ins_orders_tax
-        insOrdersTaxService.updateMainTax(quoteVo, mainOrderNo,carInfo,insOrders);
+        insOrdersTaxService.updateMainTax(quoteVo, mainOrderNo, carInfo, insOrders);
         return mainOrderNo;
         return mainOrderNo;
     }
     }
 
 
@@ -1043,7 +1052,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
 
 
     @Override
     @Override
-    public Page<OrderListVo> queryList(InsOrdersParam insOrdersParam){
+    public Page<OrderListVo> queryList(InsOrdersParam insOrdersParam) {
         String userName = baseController.getUserName();
         String userName = baseController.getUserName();
         insOrdersParam.setSalesman(userName);
         insOrdersParam.setSalesman(userName);
         Page<OrderListVo> orderListVoPage = insOrdersMapper.queryOrderList(insOrdersParam.getPage(), insOrdersParam);
         Page<OrderListVo> orderListVoPage = insOrdersMapper.queryOrderList(insOrdersParam.getPage(), insOrdersParam);
@@ -1054,12 +1063,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     @Override
     public QuoteEchoVo getOrderDetail(String ordersNo) {
     public QuoteEchoVo getOrderDetail(String ordersNo) {
         InsOrdersVo insOrdersVo = selectById(Long.parseLong(ordersNo));
         InsOrdersVo insOrdersVo = selectById(Long.parseLong(ordersNo));
-        AssertionUtils.isFail(Objects.isNull(insOrdersVo),"订单不存在");
+        AssertionUtils.isFail(Objects.isNull(insOrdersVo), "订单不存在");
         QuoteEchoVo resultVo = new QuoteEchoVo(insOrdersVo);
         QuoteEchoVo resultVo = new QuoteEchoVo(insOrdersVo);
         //获取保司信息
         //获取保司信息
         String companyId = insOrdersVo.getInsOrders().getCompanyId();
         String companyId = insOrdersVo.getInsOrders().getCompanyId();
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findLogoById(companyId, baseController.getToken());
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findLogoById(companyId, baseController.getToken());
-        if(esmInsCompanyHttpResult.getCode()==200){
+        if (esmInsCompanyHttpResult.getCode() == 200) {
             resultVo.setInsCompanyVo(esmInsCompanyHttpResult.getData());
             resultVo.setInsCompanyVo(esmInsCompanyHttpResult.getData());
         }
         }
         // 影像资料
         // 影像资料
@@ -1103,7 +1112,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         List<InsOrdersQrcode> qrcodes = insOrdersQrcodeMapper.selectList(new LambdaQueryWrapper<InsOrdersQrcode>()
         List<InsOrdersQrcode> qrcodes = insOrdersQrcodeMapper.selectList(new LambdaQueryWrapper<InsOrdersQrcode>()
                 .eq(InsOrdersQrcode::getOrderno, ordersNo)
                 .eq(InsOrdersQrcode::getOrderno, ordersNo)
                 .orderByDesc(InsOrdersQrcode::getCreatetime));
                 .orderByDesc(InsOrdersQrcode::getCreatetime));
-        if(qrcodes.size()>0) {
+        if (qrcodes.size() > 0) {
             resultVo.setQrcode(qrcodes.get(0));
             resultVo.setQrcode(qrcodes.get(0));
         }
         }
         // 费用信息
         // 费用信息
@@ -1114,8 +1123,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (insFeeOrders != null) {
         if (insFeeOrders != null) {
             resultVo.setInsFeeOrders(new InsFeeOrdersVo(insFeeOrders));
             resultVo.setInsFeeOrders(new InsFeeOrdersVo(insFeeOrders));
             List<PtlAgreementCostTypeVo> ptlAgreementCostTypeList = orgClient.queryByCostId(insFeeOrders.getCostId());
             List<PtlAgreementCostTypeVo> ptlAgreementCostTypeList = orgClient.queryByCostId(insFeeOrders.getCostId());
-            PtlAgreement ptlAgreement = orgClient.getByAgreementId(insOrdersVo.getInsOrders().getAgreementId(),baseController.getToken(),systemCode);
-            resultVo.setCostRatio(new PtlAgreementCostRatioVo(ptlAgreementCostTypeList,ptlAgreement));
+            PtlAgreement ptlAgreement = orgClient.getByAgreementId(insOrdersVo.getInsOrders().getAgreementId(), baseController.getToken(), systemCode);
+            resultVo.setCostRatio(new PtlAgreementCostRatioVo(ptlAgreementCostTypeList, ptlAgreement));
         }
         }
         return resultVo;
         return resultVo;
     }
     }
@@ -1134,18 +1143,18 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      * 获取历史报价信息
      * 获取历史报价信息
      * @return
      * @return
      */
      */
-    public List<HistoryQuoteResultVo> getHistoryQuote(){
+    public List<HistoryQuoteResultVo> getHistoryQuote() {
         String userName = baseController.getUserName();
         String userName = baseController.getUserName();
 
 
         return insOrdersMapper.getHistoryQuote(userName);
         return insOrdersMapper.getHistoryQuote(userName);
     }
     }
 
 
     @Override
     @Override
-    public Page<HistoryQuoteResultVo> getHistoryQuoteList(HistoryQuoteQueryVo historyQuoteQueryVo){
+    public Page<HistoryQuoteResultVo> getHistoryQuoteList(HistoryQuoteQueryVo historyQuoteQueryVo) {
         String userName = baseController.getUserName();
         String userName = baseController.getUserName();
         Page page = historyQuoteQueryVo.getPage();
         Page page = historyQuoteQueryVo.getPage();
         Page<HistoryQuoteResultVo> historyQuoteList = insOrdersMapper.getHistoryQuoteList(page, historyQuoteQueryVo, userName);
         Page<HistoryQuoteResultVo> historyQuoteList = insOrdersMapper.getHistoryQuoteList(page, historyQuoteQueryVo, userName);
-        historyQuoteList.getRecords().forEach(item->{
+        historyQuoteList.getRecords().forEach(item -> {
             InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item.getOrderStatus());
             InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item.getOrderStatus());
             item.setOrderStatusName(insOrderStatusEnum.getDesc());
             item.setOrderStatusName(insOrderStatusEnum.getDesc());
         });
         });
@@ -1157,9 +1166,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         List<HistoryQuoteResultVo> historyQuoteByLicenseNo = insOrdersMapper.getHistoryQuoteByLicenseNo(licenseNo);
         List<HistoryQuoteResultVo> historyQuoteByLicenseNo = insOrdersMapper.getHistoryQuoteByLicenseNo(licenseNo);
         HttpResult<List<EsmInsCompany>> userCompanyResult = platformClient.getUserCompany(baseController.getAppSystemCode(), baseController.getToken(), baseController.getAppSystemCode());
         HttpResult<List<EsmInsCompany>> userCompanyResult = platformClient.getUserCompany(baseController.getAppSystemCode(), baseController.getToken(), baseController.getAppSystemCode());
         List<EsmInsCompany> userCompany = userCompanyResult.getData();
         List<EsmInsCompany> userCompany = userCompanyResult.getData();
-        historyQuoteByLicenseNo.forEach(item->{
+        historyQuoteByLicenseNo.forEach(item -> {
             EsmInsCompany esmInsCompany = userCompany.stream().filter(x -> x.getId().equals(item.getCompanyId())).findFirst().orElse(null);
             EsmInsCompany esmInsCompany = userCompany.stream().filter(x -> x.getId().equals(item.getCompanyId())).findFirst().orElse(null);
-            if(Objects.nonNull(esmInsCompany)){
+            if (Objects.nonNull(esmInsCompany)) {
                 String companyLogoAddress = MinioUtils.getPresignedObjectUrl("jzg", esmInsCompany.getLogo());
                 String companyLogoAddress = MinioUtils.getPresignedObjectUrl("jzg", esmInsCompany.getLogo());
                 item.setLogo(companyLogoAddress);
                 item.setLogo(companyLogoAddress);
             }
             }
@@ -1174,47 +1183,47 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 .groupBy(InsOrders::getCompanyId));
                 .groupBy(InsOrders::getCompanyId));
         List<String> companyIds = insOrders.stream().filter(v -> !Objects.isNull(v) && StringUtils.isNotEmpty(v.getCompanyId())).map(InsOrders::getCompanyId).collect(Collectors.toList());
         List<String> companyIds = insOrders.stream().filter(v -> !Objects.isNull(v) && StringUtils.isNotEmpty(v.getCompanyId())).map(InsOrders::getCompanyId).collect(Collectors.toList());
         String joined = String.join(",", companyIds);
         String joined = String.join(",", companyIds);
-        HttpResult<List<EsmInsCompany>> companyByIds = platformClient.getCompanyByIds(joined,baseController.getToken());
+        HttpResult<List<EsmInsCompany>> companyByIds = platformClient.getCompanyByIds(joined, baseController.getToken());
         return companyByIds.getData();
         return companyByIds.getData();
     }
     }
 
 
     @Override
     @Override
     public void orderAfterUpdateOrderStatus(String orderNo, OrderStatusResultVo orderStatusResultVo) {
     public void orderAfterUpdateOrderStatus(String orderNo, OrderStatusResultVo orderStatusResultVo) {
         // 检测主订单是否存在
         // 检测主订单是否存在
-        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId,orderNo));
-        AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
+        InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId, orderNo));
+        AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoMapper.selectById(insOrders.getId());
         InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoMapper.selectById(insOrders.getId());
         InsOrdersCosts costs = insOrdersCostsService.getById(insOrders.getId());
         InsOrdersCosts costs = insOrdersCostsService.getById(insOrders.getId());
         //设置订单状态   如果状态一致则不进行判断
         //设置订单状态   如果状态一致则不进行判断
-        if(!orderStatusResultVo.getOrderStatus().getCode().equals(insOrders.getOrderStatus())) {
+        if (!orderStatusResultVo.getOrderStatus().getCode().equals(insOrders.getOrderStatus())) {
             StateResult stateResult = orderStateListener.statusChange(orderStatusResultVo.getOrderStatus(), insOrders.getOrderStatus());
             StateResult stateResult = orderStateListener.statusChange(orderStatusResultVo.getOrderStatus(), insOrders.getOrderStatus());
             insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
             insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
         }
         }
 
 
         //更新保单号
         //更新保单号
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(orderNo);
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(orderNo);
-        if(Objects.nonNull(orderStatusResultVo.getJqPolicyno())) {
+        if (Objects.nonNull(orderStatusResultVo.getJqPolicyno())) {
             insOrdersPolicy.setJqPolicyNo(orderStatusResultVo.getJqPolicyno());
             insOrdersPolicy.setJqPolicyNo(orderStatusResultVo.getJqPolicyno());
         }
         }
-        if(Objects.nonNull(orderStatusResultVo.getSyPolicyno())) {
+        if (Objects.nonNull(orderStatusResultVo.getSyPolicyno())) {
             insOrdersPolicy.setSyPolicyNo(orderStatusResultVo.getSyPolicyno());
             insOrdersPolicy.setSyPolicyNo(orderStatusResultVo.getSyPolicyno());
         }
         }
 
 
-        if(Objects.nonNull(orderStatusResultVo.getJyPolicyno())) {
+        if (Objects.nonNull(orderStatusResultVo.getJyPolicyno())) {
             insOrdersPolicy.setJyPolicyNo(orderStatusResultVo.getJyPolicyno());
             insOrdersPolicy.setJyPolicyNo(orderStatusResultVo.getJyPolicyno());
         }
         }
         insOrdersPolicyService.updateById(insOrdersPolicy);
         insOrdersPolicyService.updateById(insOrdersPolicy);
 
 
         //更新支付连接
         //更新支付连接
-        if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
+        if (orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
             insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
             insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
             insOrders.setPayTime(LocalDateTime.now());
             insOrders.setPayTime(LocalDateTime.now());
             // 发送订单状态变更消息
             // 发送订单状态变更消息
             this.orderStatusMessage(insOrders,
             this.orderStatusMessage(insOrders,
-                    insOrdersCarInfo,costs,
+                    insOrdersCarInfo, costs,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
         }
         }
-        if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
+        if (orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.UNDERWRITED)) {
             // 增加财务审核
             // 增加财务审核
             insFeeAuditService.feeAuditAdd(insOrders);
             insFeeAuditService.feeAuditAdd(insOrders);
             // 将父订单的保司id 和名称更新
             // 将父订单的保司id 和名称更新
@@ -1225,14 +1234,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             baseMapper.updateById(baseInsOrders);
             baseMapper.updateById(baseInsOrders);
             // 发送订单状态变更消息
             // 发送订单状态变更消息
             this.orderStatusMessage(insOrders,
             this.orderStatusMessage(insOrders,
-                    insOrdersCarInfo,costs,
+                    insOrdersCarInfo, costs,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_6);
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_6);
 //            DistributionVo vo = new DistributionVo();
 //            DistributionVo vo = new DistributionVo();
 //            vo.setInsOrders(insOrders);
 //            vo.setInsOrders(insOrders);
 //            vo.setOrdersCosts(costs);
 //            vo.setOrdersCosts(costs);
 //            vo.setLicenseNo(insOrdersCarInfo.getLicenseNo());
 //            vo.setLicenseNo(insOrdersCarInfo.getLicenseNo());
 //            partnerDistributionClient.distribution(vo);
 //            partnerDistributionClient.distribution(vo);
-        } else{
+        } else {
             insOrders.setErrorMessage(orderStatusResultVo.getErrorMsg());
             insOrders.setErrorMessage(orderStatusResultVo.getErrorMsg());
         }
         }
         this.updateById(insOrders);
         this.updateById(insOrders);
@@ -1248,7 +1257,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
     }
 
 
     @Override
     @Override
-    public boolean changeSupplementOrder(String orderNo){
+    public boolean changeSupplementOrder(String orderNo) {
         InsOrders byId = baseMapper.selectById(Long.parseLong(orderNo));
         InsOrders byId = baseMapper.selectById(Long.parseLong(orderNo));
         byId.setEntryStatus(3);
         byId.setEntryStatus(3);
         baseMapper.updateById(byId);
         baseMapper.updateById(byId);
@@ -1256,16 +1265,78 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
     }
 
 
     @Override
     @Override
-    public List<InsOrdersVo> comparePrice(String quoteNo){
+    public List<InsOrdersVo> comparePrice(String quoteNo) {
         List<InsOrdersVo> ordersVos = baseMapper.queryNewQuoteListByQuoteNo(quoteNo);
         List<InsOrdersVo> ordersVos = baseMapper.queryNewQuoteListByQuoteNo(quoteNo);
         List<InsOrdersVo> resultVos = new ArrayList<>();
         List<InsOrdersVo> resultVos = new ArrayList<>();
-        ordersVos.forEach(item->{
+        ordersVos.forEach(item -> {
             String status = item.getInsOrders().getOrderStatus();
             String status = item.getInsOrders().getOrderStatus();
-            if(InsOrderStatusEnum.WAIT_AUDIT.getCode().equals(status) || InsOrderStatusEnum.PAY_PENDING.getCode().equals(status)){
+            if (InsOrderStatusEnum.WAIT_AUDIT.getCode().equals(status) || InsOrderStatusEnum.PAY_PENDING.getCode().equals(status)) {
                 resultVos.add(item);
                 resultVos.add(item);
             }
             }
         });
         });
         return resultVos;
         return resultVos;
     }
     }
 
 
+    @Override
+    public DailyDataVo getDailyData() {
+        DailyDataVo dailyDataVo = new DailyDataVo();
+        String today = DateTimeUtils.getToday();
+        String yesterday = DateTimeUtils.getYesterday();
+
+        // 获取今日、昨日保费
+        DataValueBo premium = StatisticsUtil.processStatData(today, yesterday, this.baseMapper::getPremiumStatistics);
+        dailyDataVo.setPremium(premium.getTodayData());
+        dailyDataVo.setPremiumChange(premium.getGrowthRate());
+
+        // 获取今日、昨日订单数
+        DataValueBo orderQuantity = StatisticsUtil.processStatData(today, yesterday, this.baseMapper::getOrderQuantity);
+        dailyDataVo.setOrderQuantity(orderQuantity.getTodayData());
+        dailyDataVo.setQuoteCountChange(orderQuantity.getGrowthRate());
+
+        // 获取今日、昨日出单业务员
+        DataValueBo insuranceIssuersCount = StatisticsUtil.processStatData(today, yesterday, this.baseMapper::getOrderQuantity);
+        dailyDataVo.setInsuranceIssuersCount(insuranceIssuersCount.getTodayData());
+        dailyDataVo.setInsuranceIssuersCountChange(insuranceIssuersCount.getGrowthRate());
+
+        // 获取今日、昨日报价次数
+        DataValueBo quoteCount = StatisticsUtil.processStatData(today, yesterday, this.baseMapper::getQuoteCount);
+        dailyDataVo.setQuoteCount(quoteCount.getTodayData());
+        dailyDataVo.setQuoteCountChange(quoteCount.getTodayData());
+
+        return dailyDataVo;
+    }
+
+    @Override
+    public BusinessTypeDistributionVo getBusinessTypeDistribution() {
+        return this.baseMapper.getPremiumRatio();
+    }
+
+    @Override
+    public BusinessFunnelVo getBusinessFunnel() {
+        return this.baseMapper.getBusinessFunnel();
+    }
+
+    @Override
+    public List<OrderTrendVo> getOrderTrend() {
+        List<OrderTrendVo> orderTrend = this.baseMapper.getOrderTrend();
+        Map<String, OrderTrendVo> orderTrendVoMap = orderTrend.stream().collect(Collectors.toMap(OrderTrendVo::getMonth, x -> x));
+        List<OrderTrendVo> list = new ArrayList<>();
+        for (int i = 1; i <= 12; i++) {
+            String mouth = String.valueOf(i);
+            OrderTrendVo orderTrendVo = orderTrendVoMap.get(mouth);
+            if (ObjectUtil.isEmpty(orderTrendVo)) {
+                orderTrendVo = new OrderTrendVo(mouth, "0", "0");
+            }
+            list.add(orderTrendVo);
+        }
+        return list;
+    }
+
+    @Override
+    public List<BusinessDistributionVo> getBusinessDistribution(String province) {
+        if(!StringUtils.hasText(province)){
+            return this.baseMapper.getCityBusinessDistribution();
+        }
+        return this.baseMapper.getProvinceBusinessDistribution(province);
+    }
 }
 }

+ 20 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/utils/DataQueryFunction.java

@@ -0,0 +1,20 @@
+package com.jzg.quotation.summary.utils;
+
+import com.jzg.quotation.summary.entity.bo.StatDateCountBo;
+
+import java.util.List;
+
+@FunctionalInterface
+public interface DataQueryFunction {
+
+    /**
+     * 查询
+     *
+     * @param today     今天日期
+     * @param yesterday 昨天日期
+     * @return 结果
+     */
+    List<StatDateCountBo> query(String today, String yesterday);
+
+}
+

+ 75 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/utils/StatisticsUtil.java

@@ -0,0 +1,75 @@
+package com.jzg.quotation.summary.utils;
+
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.summary.entity.bo.DataValueBo;
+import com.jzg.quotation.summary.entity.bo.StatDateCountBo;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class StatisticsUtil {
+
+    /**
+     * 统一的数据处理方法
+     */
+    public static DataValueBo processStatData(String today, String yesterday, DataQueryFunction queryFunction) {
+        // 查询数据
+        List<StatDateCountBo> dataList = queryFunction.query(today, yesterday);
+
+        // 转为Map
+        Map<String, String> dataMap = dataList.stream()
+                .collect(Collectors.toMap(
+                        StatDateCountBo::getStatDate,
+                        StatDateCountBo::getValue
+                ));
+
+        // 获取值
+        String todayValue = getValueFromMap(dataMap, today);
+        String yesterdayValue = getValueFromMap(dataMap, yesterday);
+        return new DataValueBo(todayValue, calculateGrowthRateDecimal(todayValue, yesterdayValue).toString());
+    }
+
+
+    /**
+     * 计算增长率(返回数值,方便比较)
+     *
+     * @return BigDecimal 增长率,如 15.25
+     */
+    public static BigDecimal calculateGrowthRateDecimal(String todayValue, String yesterdayValue) {
+        try {
+            BigDecimal today = new BigDecimal(todayValue);
+            BigDecimal yesterday = new BigDecimal(yesterdayValue);
+
+            if (yesterday.compareTo(BigDecimal.ZERO) == 0) {
+                return today.compareTo(BigDecimal.ZERO) > 0
+                        ? new BigDecimal("999999.99")  // 表示无穷大
+                        : BigDecimal.ZERO;
+            }
+
+            return today.subtract(yesterday)
+                    .divide(yesterday, 4, RoundingMode.HALF_UP)
+                    .multiply(new BigDecimal("100"));
+
+        } catch (Exception e) {
+            return BigDecimal.ZERO;
+        }
+    }
+
+
+    /**
+     * 从Map获取值,处理空值
+     */
+    public static String getValueFromMap(Map<String, String> dataMap, String key) {
+        String value = dataMap.get(key);
+        return StringUtils.hasText(value) ? value : "0";
+    }
+
+}

+ 605 - 266
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -106,11 +106,11 @@
     <resultMap id="OrdersKindMap" type="com.jzg.commons.entity.orders.po.InsOrdersKind">
     <resultMap id="OrdersKindMap" type="com.jzg.commons.entity.orders.po.InsOrdersKind">
         <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <result property="amount" column="amount" jdbcType="VARCHAR"/>
         <result property="amount" column="amount" jdbcType="VARCHAR"/>
-        <result property="kindCode" column="kind_code" />
-        <result property="kindName" column="kind_name" />
-        <result property="serviceTimes" column="service_times" />
-        <result property="unitAmount" column="unit_amount" />
-        <result property="deductibleRate" column="deductible_rate" />
+        <result property="kindCode" column="kind_code"/>
+        <result property="kindName" column="kind_name"/>
+        <result property="serviceTimes" column="service_times"/>
+        <result property="unitAmount" column="unit_amount"/>
+        <result property="deductibleRate" column="deductible_rate"/>
     </resultMap>
     </resultMap>
 
 
     <!-- 订单 其他属性 -->
     <!-- 订单 其他属性 -->
@@ -194,20 +194,21 @@
         <result property="auditId" column="audit_id" jdbcType="VARCHAR"/>
         <result property="auditId" column="audit_id" jdbcType="VARCHAR"/>
         <result property="auditName" column="audit_name" jdbcType="VARCHAR"/>
         <result property="auditName" column="audit_name" jdbcType="VARCHAR"/>
         <result property="errorMessage" column="error_message" jdbcType="VARCHAR"/>
         <result property="errorMessage" column="error_message" jdbcType="VARCHAR"/>
-        <association property="insOrders" column="{id=id}" select="selectOrdersById" />
-        <association property="carInfoVo" column="{orderNo=id}" select="selectOrdersCarInfoByOrderNo" />
-        <association property="insOrdersOtherInfo" column="{orderNo=id}" select="selectOrdersOtherByOrderNo" />
-        <association property="ordersExternal" column="{orderNo=id}" select="selectOrdersExternalFeeByOrderNo" />
-        <association property="insOrdersExternalPolicy" column="{orderNo=id}" select="selectExternalPolicyMap" />
-        <association property="vehicleAndVesselTaxVo" column="{orderNo=id}" select="selectOrdersTaxMap" />
-        <association property="imagesAdds" column="{orderNo=id}" select="selectImageByOrderNo" />
-        <collection property="insOrdersRiskList"  column="{orderNo=id}" select="selectOrdersRisk" />
-        <collection property="insOrderAdjust"  column="{orderNo=id}" select="selectOrderAdjust" />
-        <collection property="carUserInfoList"  column="{orderNo=id}"  select="selectCarUserInfo" />
-        <collection property="kindInfoVo" column="{orderNo=id}" select="selectKindMap" />
-        <collection property="insOrdersCosts" column="{orderNo=id}" select="selectOrdersCostsByOrderNo" />
-        <collection property="insOrdersPolicy" column="{orderNo=id}" select="selectOrdersPolicyByOrderNo" />
-        <collection property="accidentalDrivings" column="{orderNo=id}" select="selectOrdersAccidentalDrivingByOrderNo" />
+        <association property="insOrders" column="{id=id}" select="selectOrdersById"/>
+        <association property="carInfoVo" column="{orderNo=id}" select="selectOrdersCarInfoByOrderNo"/>
+        <association property="insOrdersOtherInfo" column="{orderNo=id}" select="selectOrdersOtherByOrderNo"/>
+        <association property="ordersExternal" column="{orderNo=id}" select="selectOrdersExternalFeeByOrderNo"/>
+        <association property="insOrdersExternalPolicy" column="{orderNo=id}" select="selectExternalPolicyMap"/>
+        <association property="vehicleAndVesselTaxVo" column="{orderNo=id}" select="selectOrdersTaxMap"/>
+        <association property="imagesAdds" column="{orderNo=id}" select="selectImageByOrderNo"/>
+        <collection property="insOrdersRiskList" column="{orderNo=id}" select="selectOrdersRisk"/>
+        <collection property="insOrderAdjust" column="{orderNo=id}" select="selectOrderAdjust"/>
+        <collection property="carUserInfoList" column="{orderNo=id}" select="selectCarUserInfo"/>
+        <collection property="kindInfoVo" column="{orderNo=id}" select="selectKindMap"/>
+        <collection property="insOrdersCosts" column="{orderNo=id}" select="selectOrdersCostsByOrderNo"/>
+        <collection property="insOrdersPolicy" column="{orderNo=id}" select="selectOrdersPolicyByOrderNo"/>
+        <collection property="accidentalDrivings" column="{orderNo=id}"
+                    select="selectOrdersAccidentalDrivingByOrderNo"/>
     </resultMap>
     </resultMap>
 
 
     <resultMap id="InsOrdersAccidentalDrivingMap" type="com.jzg.commons.entity.orders.po.InsOrdersAccidentalDriving">
     <resultMap id="InsOrdersAccidentalDrivingMap" type="com.jzg.commons.entity.orders.po.InsOrdersAccidentalDriving">
@@ -223,10 +224,11 @@
         <result property="syPolicy" column="sy_policy" jdbcType="VARCHAR"/>
         <result property="syPolicy" column="sy_policy" jdbcType="VARCHAR"/>
         <result property="noPolicy" column="no_policy" jdbcType="VARCHAR"/>
         <result property="noPolicy" column="no_policy" jdbcType="VARCHAR"/>
         <result property="jqSign" column="jq_sign" jdbcType="VARCHAR"/>
         <result property="jqSign" column="jq_sign" jdbcType="VARCHAR"/>
-        <collection property="uploadFiles" column="concatenated_string" notNullColumn="concatenated_string" select="selectUploadFilesIds"/>
+        <collection property="uploadFiles" column="concatenated_string" notNullColumn="concatenated_string"
+                    select="selectUploadFilesIds"/>
     </resultMap>
     </resultMap>
 
 
-<!--影像资料-->
+    <!--影像资料-->
     <resultMap id="ImageMap" type="com.jzg.commons.entity.vo.InsTaskImagesVo">
     <resultMap id="ImageMap" type="com.jzg.commons.entity.vo.InsTaskImagesVo">
         <result property="quoteNo" column="quote_no" jdbcType="VARCHAR"/>
         <result property="quoteNo" column="quote_no" jdbcType="VARCHAR"/>
         <collection property="images" ofType="com.jzg.commons.entity.vo.ImagesVo">
         <collection property="images" ofType="com.jzg.commons.entity.vo.ImagesVo">
@@ -239,7 +241,7 @@
             <result property="downloadUrl" column="download_url" jdbcType="VARCHAR"/>
             <result property="downloadUrl" column="download_url" jdbcType="VARCHAR"/>
         </collection>
         </collection>
     </resultMap>
     </resultMap>
-<!--费用-->
+    <!--费用-->
     <resultMap id="insOrdersExternalFeeMap" type="com.jzg.commons.entity.orders.po.InsOrdersExternalFee">
     <resultMap id="insOrdersExternalFeeMap" type="com.jzg.commons.entity.orders.po.InsOrdersExternalFee">
         <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <result property="costFlag" column="cost_flag" jdbcType="VARCHAR"/>
         <result property="costFlag" column="cost_flag" jdbcType="VARCHAR"/>
@@ -271,7 +273,7 @@
         <result property="fileSize" column="file_size" jdbcType="VARCHAR"/>
         <result property="fileSize" column="file_size" jdbcType="VARCHAR"/>
         <result property="bucketName" column="bucket_name" jdbcType="VARCHAR"/>
         <result property="bucketName" column="bucket_name" jdbcType="VARCHAR"/>
     </resultMap>
     </resultMap>
-    
+
     <resultMap id="OrdersTaxMap" type="com.jzg.commons.entity.quote.vo.VehicleAndVesselTaxVo">
     <resultMap id="OrdersTaxMap" type="com.jzg.commons.entity.quote.vo.VehicleAndVesselTaxVo">
         <result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
         <result property="extendChar2" column="extend_char2" jdbcType="VARCHAR"/>
         <result property="extendChar2" column="extend_char2" jdbcType="VARCHAR"/>
@@ -302,123 +304,219 @@
     </resultMap>
     </resultMap>
 
 
     <select id="selectOrdersAccidentalDrivingByOrderNo" resultMap="InsOrdersAccidentalDrivingMap">
     <select id="selectOrdersAccidentalDrivingByOrderNo" resultMap="InsOrdersAccidentalDrivingMap">
-        select id, order_no,risk_code,risk_name from ins_orders_accidental_driving where order_no = #{orderNo}
+        select id, order_no, risk_code, risk_name
+        from ins_orders_accidental_driving
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectKindMap" resultMap="KindMap">
     <select id="selectKindMap" resultMap="KindMap">
-        select id, order_no, amount, kind_code, service_times, kind_name, unit_amount, deductible_rate, premium from  ins_orders_kind  where order_no = #{orderNo}
+        select id,
+               order_no,
+               amount,
+               kind_code,
+               service_times,
+               kind_name,
+               unit_amount,
+               deductible_rate,
+               premium
+        from ins_orders_kind
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
 
 
     <select id="selectUploadFilesIds" resultMap="sys_upload_files_map">
     <select id="selectUploadFilesIds" resultMap="sys_upload_files_map">
-        select id, file_name, bucket_name  from sys_upload_files where id in (${concatenated_string})
+        select id, file_name, bucket_name
+        from sys_upload_files
+        where id in (${concatenated_string})
     </select>
     </select>
 
 
     <select id="selectOrdersTaxMap" resultMap="OrdersTaxMap">
     <select id="selectOrdersTaxMap" resultMap="OrdersTaxMap">
-        select order_no, extend_char2, tax_relief, relif_reason, tax_com_code, tax_com_name, tax_document_date, tax_paid_area_code, paid_free_certificate, taxpayer_name, taxpayer_identifier, identify_number, tax_relif_flag from ins_orders_tax where order_no = #{orderNo}
+        select order_no,
+               extend_char2,
+               tax_relief,
+               relif_reason,
+               tax_com_code,
+               tax_com_name,
+               tax_document_date,
+               tax_paid_area_code,
+               paid_free_certificate,
+               taxpayer_name,
+               taxpayer_identifier,
+               identify_number,
+               tax_relif_flag
+        from ins_orders_tax
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectOrdersPolicyByOrderNo" resultMap="InsOrdersPolicyMap">
     <select id="selectOrdersPolicyByOrderNo" resultMap="InsOrdersPolicyMap">
-        select order_no,jq_apply_no,jq_policy_no,sy_apply_no,sy_policy_no,jy_apply_no,jy_policy_no from ins_orders_policy where order_no =  #{orderNo}
+        select order_no, jq_apply_no, jq_policy_no, sy_apply_no, sy_policy_no, jy_apply_no, jy_policy_no
+        from ins_orders_policy
+        where order_no = #{orderNo}
     </select>
     </select>
-    
+
     <select id="selectExternalPolicyMap" resultMap="InsOrdersExternalPolicyMap">
     <select id="selectExternalPolicyMap" resultMap="InsOrdersExternalPolicyMap">
-        SELECT
-            order_no,
-            jq_policy,
-            sy_policy,
-            no_policy,
-            jq_sign,
-
-            NULLIF(
-                    CONCAT_WS(', ',
-                              NULLIF(jq_policy, ''),
-                              NULLIF(sy_policy, ''),
-                              NULLIF(no_policy, ''),
-                              NULLIF(jq_sign, '')
-                    ),
-                    ''
-            ) AS concatenated_string
-        from ins_orders_external_policy where order_no = #{orderNo}
+        SELECT order_no,
+               jq_policy,
+               sy_policy,
+               no_policy,
+               jq_sign,
+
+               NULLIF(
+                       CONCAT_WS(', ',
+                                 NULLIF(jq_policy, ''),
+                                 NULLIF(sy_policy, ''),
+                                 NULLIF(no_policy, ''),
+                                 NULLIF(jq_sign, '')
+                       ),
+                       ''
+               ) AS concatenated_string
+        from ins_orders_external_policy
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectImageByOrderNo" resultMap="ImageMap">
     <select id="selectImageByOrderNo" resultMap="ImageMap">
-        SELECT t.id, t.quote_no, t.image_type, t.image_id, f.file_name, f.file_type, f.bucket_name FROM ins_task_images t LEFT JOIN sys_upload_files f ON f.id = t.image_id where t.quote_no = #{orderNo}
+        SELECT t.id, t.quote_no, t.image_type, t.image_id, f.file_name, f.file_type, f.bucket_name
+        FROM ins_task_images t
+                 LEFT JOIN sys_upload_files f ON f.id = t.image_id
+        where t.quote_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectOrdersExternalFeeByOrderNo" resultMap="insOrdersExternalFeeMap">
     <select id="selectOrdersExternalFeeByOrderNo" resultMap="insOrdersExternalFeeMap">
-        select order_no, cost_flag, cost_id, jq_supervise_costs_proportion, jq_other_costs_proportion, sy_supervise_costs_proportion, sy_other_costs_proportion, no_supervise_costs_proportion, no_other_costs_proportion from ins_orders_external_fee where order_no = #{orderNo}
+        select order_no,
+               cost_flag,
+               cost_id,
+               jq_supervise_costs_proportion,
+               jq_other_costs_proportion,
+               sy_supervise_costs_proportion,
+               sy_other_costs_proportion,
+               no_supervise_costs_proportion,
+               no_other_costs_proportion
+        from ins_orders_external_fee
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectOrdersCostsByOrderNo" resultMap="insOrdersCostsMap">
     <select id="selectOrdersCostsByOrderNo" resultMap="insOrdersCostsMap">
-        select order_no,jq_premium,sy_premium,jy_premium,sum_premium,tax_premium,jq_ratio,sy_ratio from ins_orders_costs where order_no = #{orderNo}
+        select order_no,
+               jq_premium,
+               sy_premium,
+               jy_premium,
+               sum_premium,
+               tax_premium,
+               jq_ratio,
+               sy_ratio
+        from ins_orders_costs
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectOrdersRisk" resultMap="InsOrdersRiskMap">
     <select id="selectOrdersRisk" resultMap="InsOrdersRiskMap">
-        select id,order_no,risk_name,amount,commission_rate,premium,risk_code,no_tax_premium,commission_amount,start_date,end_date from  ins_orders_risk where order_no = #{orderNo}
+        select id,
+               order_no,
+               risk_name,
+               amount,
+               commission_rate,
+               premium,
+               risk_code,
+               no_tax_premium,
+               commission_amount,
+               start_date,
+               end_date
+        from ins_orders_risk
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectOrderAdjust" resultMap="InsOrderAdjustMap">
     <select id="selectOrderAdjust" resultMap="InsOrderAdjustMap">
-        select id,order_no ,license_no ,company_id,product_id,product_name,company_name ,status,type,after_premium,premium from ins_order_adjust where order_no = #{orderNo} AND status in (1,2,3) AND is_delete = 0 order by create_time desc limit 1
+        select id,
+               order_no,
+               license_no,
+               company_id,
+               product_id,
+               product_name,
+               company_name,
+               status,
+               type,
+               after_premium,
+               premium
+        from ins_order_adjust
+        where order_no = #{orderNo}
+          AND status in (1, 2, 3)
+          AND is_delete = 0
+        order by create_time desc
+        limit 1
     </select>
     </select>
 
 
     <select id="selectOrdersTax" resultMap="InsOrdersTaxMap">
     <select id="selectOrdersTax" resultMap="InsOrdersTaxMap">
-        select order_no,extend_char2,tax_relief,relif_reason,tax_com_code,tax_com_name,tax_document_date,tax_paid_area_code,paid_free_certificate,taxpayer_name,taxpayer_identifier,identify_number,tax_relif_flag from  ins_orders_tax where order_no = #{orderNo}
+        select order_no,
+               extend_char2,
+               tax_relief,
+               relif_reason,
+               tax_com_code,
+               tax_com_name,
+               tax_document_date,
+               tax_paid_area_code,
+               paid_free_certificate,
+               taxpayer_name,
+               taxpayer_identifier,
+               identify_number,
+               tax_relif_flag
+        from ins_orders_tax
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
     <select id="selectOrdersKind" resultMap="OrdersKindMap">
     <select id="selectOrdersKind" resultMap="OrdersKindMap">
-        select order_no,amount,kind_code,service_times,kind_name,unit_amount,deductible_rate from  ins_orders_kind where order_no = #{orderNo}
+        select order_no, amount, kind_code, service_times, kind_name, unit_amount, deductible_rate
+        from ins_orders_kind
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
 
 
     <select id="pageList" resultType="com.jzg.commons.entity.vo.OrdersListVo">
     <select id="pageList" resultType="com.jzg.commons.entity.vo.OrdersListVo">
         SELECT
         SELECT
-            o.id,
-            o.quote_no,
-            o.audit_id,
-            o.audit_name,
-            o.company_name,
-            o.create_by,
-            o.create_time,
-            o.order_status,
-            c.license_no,
-            s.jq_premium,
-            s.sy_premium,
-            s.jy_premium,
-            s.sum_premium,
-            s.tax_premium,
-            o.real_quote_user_id,
-            suji.name as real_quote_user_name,
-            sd.name as salesmanCompany,
-            ioa.status as adjustStatus,
-            ioa.id as adjustId,
-            ioa1.after_premium as adjustPremium
+        o.id,
+        o.quote_no,
+        o.audit_id,
+        o.audit_name,
+        o.company_name,
+        o.create_by,
+        o.create_time,
+        o.order_status,
+        c.license_no,
+        s.jq_premium,
+        s.sy_premium,
+        s.jy_premium,
+        s.sum_premium,
+        s.tax_premium,
+        o.real_quote_user_id,
+        suji.name as real_quote_user_name,
+        sd.name as salesmanCompany,
+        ioa.status as adjustStatus,
+        ioa.id as adjustId,
+        ioa1.after_premium as adjustPremium
         FROM
         FROM
-            ins_orders o
-                LEFT JOIN ins_orders_car_info c ON c.order_no = o.id
-                LEFT JOIN ins_orders_costs s ON o.id = s.order_no
-                LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
-                LEFT JOIN sys_user_jzg_info suji ON suji.user_id = su.id
-                LEFT JOIN esm_ins_company eic on o.company_id = eic.id
-                left join sys_dept sd on sd.id = suji.dept_id
-                left join
-                    (
-                        SELECT *
-                        FROM (
-                        SELECT t.*,
-                        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
-                        FROM ins_order_adjust t where t.is_delete = 0
-                    ) x WHERE x.rn = 1
-                    ) ioa ON o.id = ioa.order_no
-                left join
-                    (
-                        SELECT *
-                        FROM (
-                        SELECT t.*,
-                        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
-                        FROM ins_order_adjust t where t.status = 2 and t.is_delete = 0
-                    ) x WHERE x.rn = 1
-                    ) ioa1 ON o.id = ioa1.order_no
+        ins_orders o
+        LEFT JOIN ins_orders_car_info c ON c.order_no = o.id
+        LEFT JOIN ins_orders_costs s ON o.id = s.order_no
+        LEFT JOIN sys_user su ON su.mobile = o.real_quote_user_id
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = su.id
+        LEFT JOIN esm_ins_company eic on o.company_id = eic.id
+        left join sys_dept sd on sd.id = suji.dept_id
+        left join
+        (
+        SELECT *
+        FROM (
+        SELECT t.*,
+        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
+        FROM ins_order_adjust t where t.is_delete = 0
+        ) x WHERE x.rn = 1
+        ) ioa ON o.id = ioa.order_no
+        left join
+        (
+        SELECT *
+        FROM (
+        SELECT t.*,
+        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
+        FROM ins_order_adjust t where t.status = 2 and t.is_delete = 0
+        ) x WHERE x.rn = 1
+        ) ioa1 ON o.id = ioa1.order_no
         <where>
         <where>
             o.is_delete = 0
             o.is_delete = 0
             <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
             <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
@@ -449,57 +547,120 @@
             <if test="insOrdersParam.startDate != null and insOrdersParam.startDate">
             <if test="insOrdersParam.startDate != null and insOrdersParam.startDate">
                 AND o.create_time BETWEEN #{insOrdersParam.startDate} and #{insOrdersParam.endDate}
                 AND o.create_time BETWEEN #{insOrdersParam.startDate} and #{insOrdersParam.endDate}
             </if>
             </if>
-<!--            <if test="insOrdersParam.recordingTime != null and insOrdersParam.recordingTime.size() > 0">-->
-<!--                AND o.create_time BETWEEN #{insOrdersParam.recordingTime[0]} AND #{insOrdersParam.recordingTime[1]}-->
-<!--            </if>-->
+            <!--            <if test="insOrdersParam.recordingTime != null and insOrdersParam.recordingTime.size() > 0">-->
+            <!--                AND o.create_time BETWEEN #{insOrdersParam.recordingTime[0]} AND #{insOrdersParam.recordingTime[1]}-->
+            <!--            </if>-->
         </where>
         </where>
         order by o.create_time desc
         order by o.create_time desc
     </select>
     </select>
 
 
     <select id="selectOrdersById" resultMap="InsOrdersMap">
     <select id="selectOrdersById" resultMap="InsOrdersMap">
-        select id,quote_no,agreement_id,api_type,order_status,company_id,company_name,product_id,product_name,entry_status,order_source,audit_id,
-                audit_name,audit_time,audit_opinion,pay_time,pay_link,ins_order_no,signing_time,is_temporarily
-        from  ins_orders where id = #{id}
+        select id,
+               quote_no,
+               agreement_id,
+               api_type,
+               order_status,
+               company_id,
+               company_name,
+               product_id,
+               product_name,
+               entry_status,
+               order_source,
+               audit_id,
+               audit_name,
+               audit_time,
+               audit_opinion,
+               pay_time,
+               pay_link,
+               ins_order_no,
+               signing_time,
+               is_temporarily
+        from ins_orders
+        where id = #{id}
     </select>
     </select>
 
 
     <select id="selectCarUserInfo" resultMap="carUserInfoMap">
     <select id="selectCarUserInfo" resultMap="carUserInfoMap">
-        select order_no,policy_person_type,person_type,car_owner,cer_type,`name`,identify_number,age,gender,province_code,city_code,county_code,addr,identify_valid_date,identify_valid_end_date,
-        mobile,landline,contact,contact_identify_number,contact_identify_valid_date,contact_identify_valid_end_date,email
-        from ins_orders_car_user_info  where order_no = #{orderNo}
+        select order_no,
+               policy_person_type,
+               person_type,
+               car_owner,
+               cer_type,
+               `name`,
+               identify_number,
+               age,
+               gender,
+               province_code,
+               city_code,
+               county_code,
+               addr,
+               identify_valid_date,
+               identify_valid_end_date,
+               mobile,
+               landline,
+               contact,
+               contact_identify_number,
+               contact_identify_valid_date,
+               contact_identify_valid_end_date,
+               email
+        from ins_orders_car_user_info
+        where order_no = #{orderNo}
     </select>
     </select>
-    
+
     <select id="selectOrdersCarInfoByOrderNo" resultMap="carInfoMap">
     <select id="selectOrdersCarInfoByOrderNo" resultMap="carInfoMap">
-        select order_no,license_no,is_registered,vin_no,brand_name,engine_no,car_year,seat_count,complete_kerb_mass,limit_load,power_scale,purchase_price,car_nature_code,vehicle_use_code,car_type_code,car_kind_code,
-        energy_type_code,property_code,license_color_code,car_kind_detail_id_code,license_kind_code,register_date,issue_date,transfer_date,transfer,displacement
-        from ins_orders_car_info where order_no = #{orderNo}
+        select order_no,
+               license_no,
+               is_registered,
+               vin_no,
+               brand_name,
+               engine_no,
+               car_year,
+               seat_count,
+               complete_kerb_mass,
+               limit_load,
+               power_scale,
+               purchase_price,
+               car_nature_code,
+               vehicle_use_code,
+               car_type_code,
+               car_kind_code,
+               energy_type_code,
+               property_code,
+               license_color_code,
+               car_kind_detail_id_code,
+               license_kind_code,
+               register_date,
+               issue_date,
+               transfer_date,
+               transfer,
+               displacement
+        from ins_orders_car_info
+        where order_no = #{orderNo}
     </select>
     </select>
 
 
 
 
     <select id="selectOrdersOtherByOrderNo" resultMap="InsOrdersOtherMap">
     <select id="selectOrdersOtherByOrderNo" resultMap="InsOrdersOtherMap">
-        SELECT
-            ot.order_no,
-            ot.score,
-            ot.jq_score,
-            ot.sy_score,
-            ot.loss_ration,
-            ot.jq_loss_ration,
-            ot.sy_loss_ration,
-            ot.jq_renewal,
-            ot.sy_renewal,
-            ot.jq_claims,
-            ot.sy_claims,
-            ot.is_djq,
-            ot.jq_adjust_rate,
-            ot.sy_adjust_rate,
-            ot.tp_color_score,
-            o.signing_time,
-            o.company_name
-        FROM
-            ins_orders_other ot
-                LEFT JOIN ins_orders o ON o.quote_no = ot.order_no
-         where ot.order_no = #{orderNo}
+        SELECT ot.order_no,
+               ot.score,
+               ot.jq_score,
+               ot.sy_score,
+               ot.loss_ration,
+               ot.jq_loss_ration,
+               ot.sy_loss_ration,
+               ot.jq_renewal,
+               ot.sy_renewal,
+               ot.jq_claims,
+               ot.sy_claims,
+               ot.is_djq,
+               ot.jq_adjust_rate,
+               ot.sy_adjust_rate,
+               ot.tp_color_score,
+               o.signing_time,
+               o.company_name
+        FROM ins_orders_other ot
+                 LEFT JOIN ins_orders o ON o.quote_no = ot.order_no
+        where ot.order_no = #{orderNo}
     </select>
     </select>
-    
+
     <select id="getById" resultMap="InsOrdersVoMap">
     <select id="getById" resultMap="InsOrdersVoMap">
         select id,
         select id,
                quote_no,
                quote_no,
@@ -507,103 +668,120 @@
                product_id,
                product_id,
                product_name,
                product_name,
                audit_status,
                audit_status,
-               audit_comments,create_by,audit_id,audit_name,error_message,create_time,create_by,update_time,update_by from ins_orders where id = #{id}
+               audit_comments,
+               create_by,
+               audit_id,
+               audit_name,
+               error_message,
+               create_time,
+               create_by,
+               update_time,
+               update_by
+        from ins_orders
+        where id = #{id}
     </select>
     </select>
 
 
     <select id="queryNewQuoteListByQuoteNo" resultMap="InsOrdersVoMap">
     <select id="queryNewQuoteListByQuoteNo" resultMap="InsOrdersVoMap">
         SELECT i.*
         SELECT i.*
         FROM ins_orders i
         FROM ins_orders i
-                 JOIN (
-            SELECT company_id, MAX(create_time) AS max_time
-            FROM ins_orders
-            WHERE quote_no = #{quoteNo}
-            AND order_status in (1,2,3,4)
-            GROUP BY company_id
-        ) t
+                 JOIN (SELECT company_id, MAX(create_time) AS max_time
+                       FROM ins_orders
+                       WHERE quote_no = #{quoteNo}
+                         AND order_status in (1, 2, 3, 4)
+                       GROUP BY company_id) t
                       ON i.company_id = t.company_id AND i.create_time = t.max_time
                       ON i.company_id = t.company_id AND i.create_time = t.max_time
         WHERE i.quote_no = #{quoteNo};
         WHERE i.quote_no = #{quoteNo};
     </select>
     </select>
 
 
     <select id="queryList" resultMap="InsOrdersVoMap">
     <select id="queryList" resultMap="InsOrdersVoMap">
-        select id, quote_no,company_name,audit_status,audit_comments,create_by,audit_id,audit_name from ins_orders order by create_time desc
+        select id,
+               quote_no,
+               company_name,
+               audit_status,
+               audit_comments,
+               create_by,
+               audit_id,
+               audit_name
+        from ins_orders
+        order by create_time desc
     </select>
     </select>
 
 
     <select id="queryOrderList" resultType="com.jzg.commons.entity.orders.vo.OrderListVo">
     <select id="queryOrderList" resultType="com.jzg.commons.entity.orders.vo.OrderListVo">
         SELECT
         SELECT
-            io.id as order_no,
-            io.company_id,
-            io.company_name,
-            io.product_id as productCode,
-            io.product_name as productName,
-            io.order_status,
-            io.create_time,
-            ioci.license_no,
-            ioci.vin_no,
-            owner_u.name as owner_name,
-            owner_u.mobile as owner_mobile,
-            policy_u.name as policy_name,
-            policy_u.mobile as policy_mobile,
-            insur_u.name as insur_name,
-            insur_u.mobile as insur_mobile,
-            iorci.start_date as ci_start_date,
-            iorbi.start_date as bi_start_date,
-            iorco.sum_premium as sumPremium,
-            iorco.jq_premium as ciPremium,
-            iorco.sy_premium as biPremium,
-            iorco.jy_premium as niPremium,
-            iorco.tax_premium as vvTax,
-            su.username as recorder,
-            suji.name as salesmanInfo,
-            suji.type_attr as salesmanType,
-            pa.agreement_name as agreementName,
-            sd.name as deptName,
-            io.pay_link as paymentLink,
-            ioa.status as adjustStatus,
-            ioa.id as adjustId,
-            ioa1.after_premium as adjustPremium
+        io.id as order_no,
+        io.company_id,
+        io.company_name,
+        io.product_id as productCode,
+        io.product_name as productName,
+        io.order_status,
+        io.create_time,
+        ioci.license_no,
+        ioci.vin_no,
+        owner_u.name as owner_name,
+        owner_u.mobile as owner_mobile,
+        policy_u.name as policy_name,
+        policy_u.mobile as policy_mobile,
+        insur_u.name as insur_name,
+        insur_u.mobile as insur_mobile,
+        iorci.start_date as ci_start_date,
+        iorbi.start_date as bi_start_date,
+        iorco.sum_premium as sumPremium,
+        iorco.jq_premium as ciPremium,
+        iorco.sy_premium as biPremium,
+        iorco.jy_premium as niPremium,
+        iorco.tax_premium as vvTax,
+        su.username as recorder,
+        suji.name as salesmanInfo,
+        suji.type_attr as salesmanType,
+        pa.agreement_name as agreementName,
+        sd.name as deptName,
+        io.pay_link as paymentLink,
+        ioa.status as adjustStatus,
+        ioa.id as adjustId,
+        ioa1.after_premium as adjustPremium
         FROM
         FROM
-            ins_orders io
-                LEFT JOIN ins_orders_car_info ioci ON ioci.order_no = io.id
-                LEFT JOIN
-            ins_orders_car_user_info owner_u on owner_u.order_no = io.id and owner_u.policy_person_type = 1
-                left JOIN
-            ins_orders_car_user_info policy_u on policy_u.order_no = io.id and policy_u.policy_person_type = 2
-                left JOIN
-            ins_orders_car_user_info insur_u on insur_u.order_no = io.id and insur_u.policy_person_type = 3
-                left join
-            ins_orders_risk iorci on iorci.order_no = io.id and iorci.risk_code = '0507'
-                left join
-            ins_orders_risk iorbi on iorbi.order_no = io.id and iorbi.risk_code = '0510'
-                LEFT JOIN
-            ins_orders_costs iorco on iorco.order_no = io.id
-                left join
-            sys_user su on su.mobile = io.real_quote_user_id
-                left join
-            sys_user_jzg_info suji on suji.user_id = su.id and suji.system_code = #{insOrdersParam.systemCode}
-                left join
-            sys_dept sd on sd.id = suji.dept_id
-                left join
-            ptl_agreement pa on pa.id = io.agreement_id
-                left join
-            (
-                SELECT *
-                    FROM (
-                        SELECT t.*,
-                        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
-                        FROM ins_order_adjust t where t.is_delete = 0
-                    ) x WHERE x.rn = 1
-            ) ioa ON io.id = ioa.order_no
-                left join
-            (
-            SELECT *
-            FROM (
-                SELECT t.*,
-                ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
-                FROM ins_order_adjust t where t.status = 2 and t.is_delete = 0
-            ) x WHERE x.rn = 1
+        ins_orders io
+        LEFT JOIN ins_orders_car_info ioci ON ioci.order_no = io.id
+        LEFT JOIN
+        ins_orders_car_user_info owner_u on owner_u.order_no = io.id and owner_u.policy_person_type = 1
+        left JOIN
+        ins_orders_car_user_info policy_u on policy_u.order_no = io.id and policy_u.policy_person_type = 2
+        left JOIN
+        ins_orders_car_user_info insur_u on insur_u.order_no = io.id and insur_u.policy_person_type = 3
+        left join
+        ins_orders_risk iorci on iorci.order_no = io.id and iorci.risk_code = '0507'
+        left join
+        ins_orders_risk iorbi on iorbi.order_no = io.id and iorbi.risk_code = '0510'
+        LEFT JOIN
+        ins_orders_costs iorco on iorco.order_no = io.id
+        left join
+        sys_user su on su.mobile = io.real_quote_user_id
+        left join
+        sys_user_jzg_info suji on suji.user_id = su.id and suji.system_code = #{insOrdersParam.systemCode}
+        left join
+        sys_dept sd on sd.id = suji.dept_id
+        left join
+        ptl_agreement pa on pa.id = io.agreement_id
+        left join
+        (
+        SELECT *
+        FROM (
+        SELECT t.*,
+        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
+        FROM ins_order_adjust t where t.is_delete = 0
+        ) x WHERE x.rn = 1
+        ) ioa ON io.id = ioa.order_no
+        left join
+        (
+        SELECT *
+        FROM (
+        SELECT t.*,
+        ROW_NUMBER() OVER(PARTITION BY t.order_no ORDER BY t.create_time DESC) AS rn
+        FROM ins_order_adjust t where t.status = 2 and t.is_delete = 0
+        ) x WHERE x.rn = 1
         ) ioa1 ON io.id = ioa1.order_no
         ) ioa1 ON io.id = ioa1.order_no
         where
         where
-            1=1
+        1=1
         <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
         <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
             AND io.id = #{insOrdersParam.orderNo}
             AND io.id = #{insOrdersParam.orderNo}
         </if>
         </if>
@@ -629,73 +807,62 @@
     </select>
     </select>
 
 
     <select id="getHistoryQuote" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
     <select id="getHistoryQuote" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
-        SELECT
-            t.id as order_no,
-            t.license_no
-        FROM
-            (
-                SELECT
-                    io.id,
-                    ioci.license_no,
-                    ROW_NUMBER() OVER ( PARTITION BY ioci.license_no ORDER BY io.create_time DESC ) AS rn
-                FROM
-                    ins_orders io
-                        LEFT JOIN ins_orders_car_info ioci ON io.id = ioci.order_no
-                WHERE io.real_quote_user_id = #{userName}
-            ) t
-        WHERE
-            t.rn = 1
+        SELECT t.id as order_no,
+               t.license_no
+        FROM (SELECT io.id,
+                     ioci.license_no,
+                     ROW_NUMBER() OVER ( PARTITION BY ioci.license_no ORDER BY io.create_time DESC ) AS rn
+              FROM ins_orders io
+                       LEFT JOIN ins_orders_car_info ioci ON io.id = ioci.order_no
+              WHERE io.real_quote_user_id = #{userName}) t
+        WHERE t.rn = 1
         LIMIT 10
         LIMIT 10
     </select>
     </select>
 
 
     <select id="getHistoryQuoteList" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
     <select id="getHistoryQuoteList" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
         SELECT
         SELECT
-            io.id as order_no,
-            io.company_id,
-            io.company_name,
-            ioci.license_no,
-            io.order_status,
-            io.error_message,
-            io.product_name,
-            io.create_time as quote_time,
-            ioc.jq_premium,
-            ioc.sy_premium,
-            ioc.jy_premium,
-            sum(ioc.jq_premium + ioc.sy_premium + ioc.jy_premium) as sum_premium,
-            COUNT(*) AS quote_number
+        io.id as order_no,
+        io.company_id,
+        io.company_name,
+        ioci.license_no,
+        io.order_status,
+        io.error_message,
+        io.product_name,
+        io.create_time as quote_time,
+        ioc.jq_premium,
+        ioc.sy_premium,
+        ioc.jy_premium,
+        sum(ioc.jq_premium + ioc.sy_premium + ioc.jy_premium) as sum_premium,
+        COUNT(*) AS quote_number
         FROM
         FROM
-            ins_orders io
-                LEFT JOIN ins_orders_car_info ioci ON io.id = ioci.order_no
+        ins_orders io
+        LEFT JOIN ins_orders_car_info ioci ON io.id = ioci.order_no
         LEFT JOIN ins_orders_costs ioc on io.id = ioc.order_no
         LEFT JOIN ins_orders_costs ioc on io.id = ioc.order_no
         WHERE
         WHERE
-            io.real_quote_user_id = #{userName}
+        io.real_quote_user_id = #{userName}
         <if test="params.licenseNo != null and params.licenseNo != ''">
         <if test="params.licenseNo != null and params.licenseNo != ''">
             AND ioci.license_no = #{params.licenseNo}
             AND ioci.license_no = #{params.licenseNo}
         </if>
         </if>
         and
         and
-            io.parent_id != 0
+        io.parent_id != 0
         GROUP BY
         GROUP BY
-            ioci.license_no,
-            io.id;
+        ioci.license_no,
+        io.id;
     </select>
     </select>
 
 
     <select id="getHistoryQuoteByLicenseNo" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
     <select id="getHistoryQuoteByLicenseNo" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
-        SELECT
-            io.id as order_no,
-            io.company_id,
-            io.company_name,
-            io.product_name,
-            io.create_time as quote_time,
-            ioci.license_no,
-            ioc.sum_premium
-        FROM
-            ins_orders io
-                LEFT JOIN ins_orders_car_info ioci ON io.id = ioci.order_no
-                LEFT JOIN ins_orders_costs ioc on io.id = ioc.order_no
-        WHERE
-            ioci.license_no = #{licenseNo}
-          and
-            io.parent_id != 0
+        SELECT io.id          as order_no,
+               io.company_id,
+               io.company_name,
+               io.product_name,
+               io.create_time as quote_time,
+               ioci.license_no,
+               ioc.sum_premium
+        FROM ins_orders io
+                 LEFT JOIN ins_orders_car_info ioci ON io.id = ioci.order_no
+                 LEFT JOIN ins_orders_costs ioc on io.id = ioc.order_no
+        WHERE ioci.license_no = #{licenseNo}
+          and io.parent_id != 0
     </select>
     </select>
 
 
     <select id="getHistoryList" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
     <select id="getHistoryList" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
@@ -721,7 +888,179 @@
         WHERE o.parent_id = 0
         WHERE o.parent_id = 0
           AND o.company_id = #{companyId}
           AND o.company_id = #{companyId}
           AND c.license_no = #{licenseNo}
           AND c.license_no = #{licenseNo}
-            AND c.vin_no = #{vinNo}
+          AND c.vin_no = #{vinNo}
+    </select>
+
+    <select id="getPremiumStatistics" resultType="com.jzg.quotation.summary.entity.bo.StatDateCountBo">
+        select DATE(ioo.create_time)                                                                        AS stat_date,
+               SUM(COALESCE(ioc.sy_premium, 0) + COALESCE(ioc.jq_premium, 0) + COALESCE(ioc.jy_premium, 0)) AS value
+        from ins_orders ioo
+                 left join ins_orders_costs ioc on ioo.id = ioc.order_no
+        WHERE ioo.create_time &gt;= CONCAT(#{yesterday}, ' 00:00:00')
+          AND ioo.create_time &lt; CONCAT(#{today}, ' 23:59:59')
+          AND ioo.order_status = '5'
+        GROUP BY DATE(ioo.create_time);
+    </select>
+
+    <select id="getOrderQuantity" resultType="com.jzg.quotation.summary.entity.bo.StatDateCountBo">
+        select DATE(create_time)                  AS stat_date,
+               COUNT(DISTINCT real_quote_user_id) AS value
+        from ins_orders
+        WHERE create_time &gt;= CONCAT(#{yesterday}, ' 00:00:00')
+          AND create_time &lt; CONCAT(#{today}, ' 23:59:59')
+        GROUP BY DATE(create_time);
+    </select>
+
+    <select id="getInsuranceIssuersCount" resultType="com.jzg.quotation.summary.entity.bo.StatDateCountBo">
+        select DATE(create_time) AS stat_date,
+               COUNT(*)          AS value
+        from ins_orders
+        WHERE create_time &gt;= CONCAT(#{yesterday}, ' 00:00:00')
+          AND create_time &lt; CONCAT(#{today}, ' 23:59:59')
+        GROUP BY DATE(create_time)
+    </select>
+
+    <select id="getQuoteCount" resultType="com.jzg.quotation.summary.entity.bo.StatDateCountBo">
+        select DATE(create_time) AS stat_date,
+               COUNT(*)          AS value
+        from ins_orders
+        WHERE create_time &gt;= CONCAT(#{yesterday}, ' 00:00:00')
+          AND create_time &lt; CONCAT(#{today}, ' 23:59:59')
+        GROUP BY DATE(create_time)
+    </select>
+
+    <select id="getPremiumRatio" resultType="com.jzg.quotation.summary.entity.vo.BusinessTypeDistributionVo">
+        select
+            -- 交强险
+            ROUND(
+                    SUM(COALESCE(ioc.jq_premium, 0)) * 100 /
+                    NULLIF(SUM(COALESCE(ioc.jq_premium, 0) + COALESCE(ioc.sy_premium, 0) + COALESCE(ioc.jy_premium, 0)),
+                           0), 2
+            ) AS ci_proportion,
+            -- 商业险
+            ROUND(
+                    SUM(COALESCE(ioc.sy_premium, 0)) * 100 /
+                    NULLIF(SUM(COALESCE(ioc.jq_premium, 0) + COALESCE(ioc.sy_premium, 0) + COALESCE(ioc.jy_premium, 0)),
+                           0), 2
+            ) AS bi_proportion,
+            -- 驾意险
+            ROUND(
+                    SUM(COALESCE(ioc.jy_premium, 0)) * 100 /
+                    NULLIF(SUM(COALESCE(ioc.jq_premium, 0) + COALESCE(ioc.sy_premium, 0) + COALESCE(ioc.jy_premium, 0)),
+                           0), 2
+            ) AS ni_proportion
+        from ins_orders ioo
+                 left join ins_orders_costs ioc on ioo.id = ioc.order_no
+        WHERE ioo.order_status = '5'
+    </select>
+
+    <select id="getBusinessFunnel" resultType="com.jzg.quotation.summary.entity.vo.BusinessFunnelVo">
+        SELECT
+            -- 报价次数(所有订单状态)
+            COUNT(DISTINCT id) AS quote_count,
+            -- 核保次数(核保相关状态)
+            COUNT(DISTINCT CASE
+                               WHEN order_status IN (2, 3, 4) -- 核保中、人工处理、待缴费
+                                   THEN id
+                END)           AS underwrite_count,
+            -- 出单数量(已承保)
+            COUNT(DISTINCT CASE
+                               WHEN order_status = 5 -- 已承保
+                                   THEN id
+                END)           AS order_count,
+            -- 报价核保比
+            ROUND(
+                    COUNT(DISTINCT CASE WHEN order_status IN (2, 3, 4) THEN id END) * 100.0 /
+                    NULLIF(COUNT(DISTINCT id), 0), 2
+            )                  AS quote_to_underwrite_ratio,
+            -- 核保出单比
+            ROUND(
+                    COUNT(DISTINCT CASE WHEN order_status = 5 THEN id END) * 100.0 /
+                    NULLIF(COUNT(DISTINCT CASE WHEN order_status IN (2, 3, 4) THEN id END), 0), 2
+            )                  AS underwrite_to_order_ratio,
+            -- 报价出单比
+            ROUND(
+                    COUNT(DISTINCT CASE WHEN order_status = 5 THEN id END) * 100.0 /
+                    NULLIF(COUNT(DISTINCT id), 0), 2
+            )                  AS quote_to_order_ratio
+
+        FROM ins_orders
+        WHERE is_delete = 0
+    </select>
+
+    <select id="getOrderTrend" resultType="com.jzg.quotation.summary.entity.vo.OrderTrendVo">
+        SELECT
+            -- 订单数量
+            MONTH(o.create_time)                                                                         AS month,
+            COALESCE(COUNT(DISTINCT o.id), 0)                                                            AS order_count,
+            SUM(COALESCE(ioc.jq_premium, 0) + COALESCE(ioc.sy_premium, 0) + COALESCE(ioc.jy_premium, 0)) as premium
+        FROM ins_orders o
+                 left join ins_orders_costs ioc
+                           on o.id = ioc.order_no
+        where o.is_delete = 0
+          AND o.order_status = 5
+          AND o.create_time &gt;= CONCAT(YEAR(NOW()), '-01-01 00:00:00')
+          AND o.create_time &lt; CONCAT(YEAR(NOW()), '-12-31 23:59:59')
+        group by month
+    </select>
+
+    <select id="getCityBusinessDistribution"
+            resultType="com.jzg.quotation.summary.entity.vo.BusinessDistributionVo">
+        SELECT
+            -- 地区信息
+            a.area_code               AS area_code,
+            a.area_cname              AS area_cname,
+            -- 业务员统计
+            COUNT(DISTINCT u.user_id) AS total_salesman_count,
+
+            -- 个代业务员 (type_attr = 6)
+            COUNT(DISTINCT CASE
+                               WHEN u.type_attr = 6
+                                   THEN u.user_id
+                END)                  AS personal_agent_count,
+
+            -- 渠道业务员 (type_attr = 8)
+            COUNT(DISTINCT CASE
+                               WHEN u.type_attr = 8
+                                   THEN u.user_id
+                END)                  AS channel_salesman_count
+
+        FROM sys_user_jzg_info u
+                 LEFT JOIN sys_dept d on u.dept_id = d.id
+                 LEFT JOIN sys_area a ON d.province = a.area_code
+        where d.province IS NOT NULL
+          AND d.province != ''
+        GROUP BY a.area_code, a.area_cname
+        ORDER BY total_salesman_count DESC
+    </select>
+
+    <select id="getProvinceBusinessDistribution"
+            resultType="com.jzg.quotation.summary.entity.vo.BusinessDistributionVo">
+        SELECT
+            -- 地区信息
+            a.area_code               AS area_code,
+            a.area_cname              AS area_cname,
+            -- 业务员统计
+            COUNT(DISTINCT u.user_id) AS total_salesman_count,
+
+            -- 个代业务员 (type_attr = 6)
+            COUNT(DISTINCT CASE
+                               WHEN u.type_attr = 6
+                                   THEN u.user_id
+                END)                  AS personal_agent_count,
+
+            -- 渠道业务员 (type_attr = 8)
+            COUNT(DISTINCT CASE
+                               WHEN u.type_attr = 8
+                                   THEN u.user_id
+                END)                  AS channel_salesman_count
+
+        FROM sys_user_jzg_info u
+                 LEFT JOIN sys_dept d on u.dept_id = d.id
+                 LEFT JOIN sys_area a ON d.city = a.area_code
+        where d.province = #{province}
+        GROUP BY a.area_code, a.area_cname
+        ORDER BY total_salesman_count DESC
     </select>
     </select>
 
 
 </mapper>
 </mapper>