瀏覽代碼

解决bug:
车险出单---订单管理---没有导出按钮
新增订单管理导出Excel接口:/supplementOrder/exportDynamicFields
功能:按条件筛选数据后,按字段动态导出Excel的列,返回:可下载Excel的地址

jiakai 5 月之前
父節點
當前提交
c393710f86

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/dto/InsOrdersParamVO.java

@@ -158,4 +158,6 @@ public class InsOrdersParamVO extends PageRequest {
     @Schema(description = "支付结束时间")
     private String endPayTime;
 
+    @Schema(description = "动态导出字段的列,以分号分隔")
+    private String exportDynamicFields;
 }

+ 34 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.orders.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -13,103 +14,136 @@ public class OrderListVo {
     /**
      * 订单号
      */
+    @ExcelProperty("订单号")
     private String orderNo;
 
+    @ExcelProperty("公司id")
     private String companyId;
 
+    @ExcelProperty("公司名称")
     private String companyName;
 
     /**
      * 险种code
      */
+    @ExcelProperty("险种code")
     private String productCode;
     /**
      * 险种名称
      */
+    @ExcelProperty("险种名称")
     private String productName;
     //订单状态
+    @ExcelProperty("订单状态")
     private String orderStatus;
     //车牌号
+    @ExcelProperty("车牌号")
     private String licenseNo;
 
     //车主姓名
+    @ExcelProperty("车主姓名")
     private String ownerName;
 
     //车主手机号
+    @ExcelProperty("车主手机号")
     private String ownerMobile;
 
     //投保人姓名
+    @ExcelProperty("投保人姓名")
     private String policyName;
 
     //投保人手机号
+    @ExcelProperty("投保人手机号")
     private String policyMobile;
 
     //被保人姓名
+    @ExcelProperty("被保人姓名")
     private String insurName;
 
     //被保人手机号
+    @ExcelProperty("被保人手机号")
     private String insurMobile;
 
     //交强险起保时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ExcelProperty("交强险起保时间")
     private LocalDateTime ciStartDate;
 
     //商业险起保时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ExcelProperty("商业险起保时间")
     private LocalDateTime biStartDate;
 
     //车架号
+    @ExcelProperty("车架号")
     private String vinNo;
 
     // 报价时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ExcelProperty("报价时间")
     private LocalDateTime createTime;
 
     //总保费
+    @ExcelProperty("总保费")
     private String sumPremium;
 
     // 业务员信息
+    @ExcelProperty("业务员信息")
     private String salesmanInfo;
 
     // 业务员类型
+    @ExcelProperty("业务员类型")
     private String salesmanType;
 
     // 出单机构
+    @ExcelProperty("出单机构")
     private String deptName;
 
     // 出单协议
+    @ExcelProperty("出单协议")
     private String agreementName;
 
     // 录单人
+    @ExcelProperty("录单人")
     private String recorder;
 
     // 交强险保费
+    @ExcelProperty("交强险保费")
     private String ciPremium;
 
     // 商业险保费
+    @ExcelProperty("商业险保费")
     private String biPremium;
 
     // 非车险保费
+    @ExcelProperty("非车险保费")
     private String niPremium;
 
     // 车船税
+    @ExcelProperty("车船税")
     private String vvTax;
 
     // 签单时间
+    @ExcelProperty("签单时间")
     private LocalDateTime signingTime;
 
     //支付时间
+    @ExcelProperty("支付时间")
     private LocalDateTime payTime;
 
     //支付链接
+    @ExcelProperty("支付链接")
     private String paymentLink;
 
     //批改状态
+    @ExcelProperty("批改状态")
     private String adjustStatus;
 
     //批改id
+    @ExcelProperty("批改id")
     private String adjustId;
 
     //批改后的保费
+    @ExcelProperty("批改后的保费")
     private String adjustPremium;
 }

+ 116 - 11
commons/src/main/java/com/jzg/commons/util/MinioUtils.java

@@ -1,6 +1,7 @@
 package com.jzg.commons.util;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.minio.*;
 import io.minio.http.Method;
 import io.minio.messages.Bucket;
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
+import java.lang.reflect.Field;
 import java.net.URLDecoder;
 import java.util.*;
 
@@ -312,7 +314,7 @@ public class MinioUtils {
      * @return
      */
     @SneakyThrows(Exception.class)
-    public static StatObjectResponse  getFileStatusInfo(String bucketName, String objectName) {
+    public static StatObjectResponse getFileStatusInfo(String bucketName, String objectName) {
         return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
     }
 
@@ -385,7 +387,7 @@ public class MinioUtils {
         try {
             GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).method(Method.GET).build();
             return minioClient.getPresignedObjectUrl(args);
-        }catch (Exception e){
+        } catch (Exception e) {
             return null;
         }
     }
@@ -404,24 +406,25 @@ public class MinioUtils {
 
     /**
      * 导出Excel并上传到MinIO
+     *
      * @param fileName 文件名(不含扩展名)
-     * @param clazz 实体类字节码
-     * @param data 导出数据列表
-     * @param <T> 实体类泛型
+     * @param clazz    实体类字节码
+     * @param data     导出数据列表
+     * @param <T>      实体类泛型
      * @return 上传后的文件访问URL
      * @throws Exception 可能抛出的异常
      */
     public static <T> String exportAndUploadToMinIO(String fileName,
-                                             Class<T> clazz,
-                                             List<T> data,
-                                             String bucketName,
-                                             String minioUrl
-                                             ) throws Exception {
+                                                    Class<T> clazz,
+                                                    List<T> data,
+                                                    String bucketName,
+                                                    String minioUrl
+    ) throws Exception {
         // 生成Excel并获取字节数组
         byte[] excelBytes = generateExcelBytes(clazz, data);
 
         // 上传到MinIO并返回URL
-        return uploadToMinIO(excelBytes, fileName,bucketName,minioUrl);
+        return uploadToMinIO(excelBytes, fileName, bucketName, minioUrl);
     }
 
     /**
@@ -466,4 +469,106 @@ public class MinioUtils {
         String baseUrl = minioUrl.endsWith("/") ? minioUrl.substring(0, minioUrl.length() - 1) : minioUrl;
         return baseUrl + "/" + bucketName + "/" + objectName;
     }
+
+    // ===================== 【动态列导出】 =====================
+
+    /**
+     * 动态列导出(重载方法)
+     */
+    public static <T> String exportAndUploadToMinIO(
+            String fileName,
+            Class<T> clazz,
+            List<T> data,
+            Set<String> includeFields,
+            String bucketName,
+            String minioUrl
+    ) throws Exception {
+        byte[] excelBytes = generateExcelBytes(clazz, data, includeFields);
+        return uploadToMinIO(excelBytes, fileName, bucketName, minioUrl);
+    }
+
+    /**
+     * 动态生成Excel
+     */
+    private static <T> byte[] generateExcelBytes(Class<T> clazz, List<T> data, Set<String> includeFields) throws IOException {
+        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
+            if (includeFields == null || includeFields.isEmpty()) {
+                // 没有指定列 → 导出全部
+                EasyExcel.write(outputStream, clazz)
+                        .sheet("数据列表")
+                        .doWrite(data);
+            } else {
+                // 有指定列 → 只导出包含的列(官方推荐,无私有方法)
+                EasyExcel.write(outputStream)
+                        .head(createDynamicHead(clazz, includeFields)) // 动态表头
+                        .sheet("数据列表")
+                        .doWrite(convertData(data, includeFields));   // 动态数据
+            }
+
+            return outputStream.toByteArray();
+        }
+    }
+
+    /**
+     * 动态生成表头(只保留需要的字段)
+     */
+    private static List<List<String>> createDynamicHead(Class<?> clazz, Set<String> includeFields) {
+        List<List<String>> head = new ArrayList<>();
+
+        for (String fieldName : includeFields) {
+            try {
+                Field field = clazz.getDeclaredField(fieldName);
+                ExcelProperty anno = field.getAnnotation(ExcelProperty.class);
+
+                String name = (anno != null && anno.value().length > 0)
+                        ? String.join(",", anno.value())
+                        : fieldName;
+
+                head.add(Collections.singletonList(name));
+            } catch (NoSuchFieldException e) {
+                // 防止字段不存在
+                head.add(Collections.singletonList(fieldName));
+            }
+        }
+        return head;
+    }
+
+    /**
+     * 动态抽取数据(只保留需要的字段)
+     */
+    private static <T> List<List<Object>> convertData(List<T> dataList, Set<String> includeFields) {
+        List<List<Object>> result = new ArrayList<>();
+        if (dataList == null || dataList.isEmpty()) return result;
+
+        Class<?> clazz = dataList.get(0).getClass();
+
+        // 按 includeFields 顺序构建字段列表
+        List<Field> fieldList = new ArrayList<>();
+        for (String fieldName : includeFields) {
+            try {
+                Field field = clazz.getDeclaredField(fieldName);
+                field.setAccessible(true);
+                fieldList.add(field);
+            } catch (NoSuchFieldException e) {
+                fieldList.add(null); // 占位,防止错位
+            }
+        }
+
+        for (T data : dataList) {
+            List<Object> row = new ArrayList<>();
+            for (Field field : fieldList) {
+
+                try {
+                    row.add(field != null ? field.get(data) : null);
+                } catch (Exception e) {
+                    row.add(null);
+                }
+            }
+            result.add(row);
+        }
+        return result;
+    }
+
+
+    // ===================== 【动态列结束】 =====================
 }

+ 43 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportBaseServiceImpl.java

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 /**
  *  @version 
@@ -77,4 +78,46 @@ public class ReportBaseServiceImpl {
         reportUploadExcelTaskService.updateById(reportUploadExcelTask);
     }
 
+
+    /**
+     * 动态字段导出(新增,不影响原有)
+     */
+    public <T> void upLoadFileDynamic(
+            ReportSearchCommonVo reportSearchCommonVo,
+            Class<T> clazz,
+            List<T> list,
+            Set<String> includeFields,
+            String upLoadName
+    ) {
+        long startTime = System.currentTimeMillis();
+        ReportUploadExcelTask task = ReportUploadExcelTask.builder()
+                .taskName(upLoadName)
+                .routerPathKey(reportSearchCommonVo.getRouterKey())
+                .uploadUserId(reportSearchCommonVo.getUserId())
+                .uploadUserName(reportSearchCommonVo.getUserId())
+                .uploadDate(new Date())
+                .taskStatus(1)
+                .readStatus(0)
+                .build();
+        reportUploadExcelTaskService.save(task);
+
+        try {
+            // 调用动态导出
+            String fileName = MinioUtils.exportAndUploadToMinIO(
+                    upLoadName, clazz, list, includeFields, bucketName, minioUrl
+            );
+            long duration = System.currentTimeMillis() - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            task.setTaskStatus(2);
+            task.setUploadMinutes(minutes);
+            task.setFilePath(fileName);
+        } catch (Exception e) {
+            long duration = System.currentTimeMillis() - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            task.setTaskStatus(0);
+            task.setUploadMinutes(minutes);
+            task.setUploadMsg(e.getMessage());
+        }
+        reportUploadExcelTaskService.updateById(task);
+    }
 }

+ 8 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java

@@ -8,6 +8,7 @@ import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.commons.entity.dto.InsOrdersParamVO;
+import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteQueryVo;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
@@ -34,9 +35,7 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.validation.constraints.NotNull;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RestController
@@ -110,6 +109,12 @@ public class InsOrdersController extends BaseController {
         return HttpResult.ok(insOrdersService.queryList(insOrdersParam));
     }
 
+    @PostMapping("exportDynamicFields")
+    @Operation(summary = "动态导出订单列表字段")
+    public HttpResult exportDynamicFields(@RequestBody InsOrdersParamVO insOrdersParam) {
+        return HttpResult.ok(insOrdersService.exportDynamicFields(insOrdersParam));
+    }
+
     @GetMapping("getOrderDetail")
     @Operation(summary = "获取订单详情")
     public HttpResult getOrderDetail(String ordersNo) {

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

@@ -35,6 +35,8 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
 
     Page<OrderListVo> queryOrderList(@Param("page") Page page, @Param("insOrdersParam") InsOrdersParamVO insOrdersParam);
 
+    List<OrderListVo> queryOrderListAll(@Param("insOrdersParam") InsOrdersParamVO insOrdersParam);
+
     List<HistoryQuoteResultVo> getHistoryQuote(@Param("userName") String userName);
 
     Page<HistoryQuoteResultVo> getHistoryQuoteList(@Param("page") Page page, @Param("params") HistoryQuoteQueryVo historyQuoteQueryVo, @Param("userName") String userName);

+ 7 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -209,4 +209,11 @@ public interface InsOrdersService extends IService<InsOrders> {
      * @return 业务分布数据
      */
     List<BusinessDistributionVo> getBusinessDistribution(String province, String userId, String systemCode);
+
+    /**
+     * 动态导出Excel中的字段,以exportDynamicFields中包含的字段为主,返回下载地址
+     * @param insOrdersParam
+     * @return
+     */
+    String exportDynamicFields(InsOrdersParamVO insOrdersParam);
 }

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

@@ -0,0 +1,82 @@
+package com.jzg.quotation.summary.service.impl;
+
+import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.commons.util.MinioUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ *  @version 
+ *  @author: hxl
+ *  @Date: 2025/9/22 16:43
+ *  @Description:  基础的实现类处理导出excel逻辑
+ */
+@Slf4j
+@Service
+public class ExportBaseServiceImpl {
+
+    @Value("${minio.url:}")
+    private String minioUrl;
+
+    // 从配置文件获取存储桶名称
+    @Value("${minio.bucket-name:excel-files}")
+    private String bucketName;
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/24 10:28
+     *  @Description:  通用上传文件
+     */
+    public <T> void upLoadFile(ReportSearchCommonVo reportSearchCommonVo, Class<T> clazz, List<T> list, String upLoadName) {
+        //打印导入数据的时间
+        long startTime = System.currentTimeMillis();
+        long endTime = System.currentTimeMillis();
+        try{
+            String fileName = MinioUtils.exportAndUploadToMinIO(upLoadName, clazz, list,bucketName,minioUrl);
+            endTime = System.currentTimeMillis();
+            long duration = endTime - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            log.info("方法执行时间: " + minutes + " 分钟");
+            log.debug("方法执行时间: " + minutes + " 分钟");
+        }catch (Exception e){
+            endTime = System.currentTimeMillis();
+            long duration = endTime - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            log.info("方法执行时间: " + minutes + " 分钟");
+            log.debug("方法执行时间: " + minutes + " 分钟");
+        }
+    }
+
+
+    /**
+     * 动态字段导出(新增,不影响原有)
+     */
+    public <T> String upLoadFileDynamic(
+            Class<T> clazz,
+            List<T> list,
+            Set<String> includeFields,
+            String upLoadName
+    ) {
+        long startTime = System.currentTimeMillis();
+        try {
+            // 调用动态导出
+            String fileName = MinioUtils.exportAndUploadToMinIO(
+                    upLoadName, clazz, list, includeFields, bucketName, minioUrl
+            );
+            long duration = System.currentTimeMillis() - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            log.info("方法执行时间: " + minutes + " 分钟");
+            return fileName;
+        } catch (Exception e) {
+            e.printStackTrace();
+            long duration = System.currentTimeMillis() - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            log.info("方法执行时间: " + minutes + " 分钟");
+        }
+        return "";
+    }
+}

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

@@ -69,6 +69,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.net.URL;
+import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -142,6 +143,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     private InsFeeOrdersMapper insFeeOrdersMapper;
     @Autowired
     private InsOrderRightsInfoService insOrderRightsInfoService;
+    @Autowired
+    private ExportBaseServiceImpl exportBaseService;
 
     @Value("${minio.bucket-name}")
     private String bucketName;
@@ -1356,4 +1359,21 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         return this.baseMapper.getProvinceBusinessDistribution(province, userId,  systemCode);
     }
+
+    @Override
+    public String exportDynamicFields(InsOrdersParamVO insOrdersParam) {
+        List<OrderListVo> orderListVos = insOrdersMapper.queryOrderListAll(insOrdersParam);
+
+        // 动态设置要导出的字段
+        String exportDynamicFields = insOrdersParam.getExportDynamicFields();
+        Set<String> exportFields = new LinkedHashSet<>(Arrays.asList(exportDynamicFields.split(";")));
+
+        // 调用动态导出
+        return exportBaseService.upLoadFileDynamic(
+                OrderListVo.class,
+                orderListVos,
+                exportFields,
+                "车险出单-订单管理-动态导出-" + Instant.now()
+        );
+    }
 }

+ 190 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -896,6 +896,196 @@
         order by io.create_time desc
     </select>
 
+    <select id="queryOrderListAll" resultType="com.jzg.commons.entity.orders.vo.OrderListVo">
+        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
+        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
+        ) ioa1 ON io.id = ioa1.order_no
+        where
+        1=1
+
+        <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
+            AND io.id = #{insOrdersParam.orderNo}
+        </if>
+        <if test="insOrdersParam.parentId != null">
+            AND io.parent_id = #{insOrdersParam.parentId}
+        </if>
+        <if test="insOrdersParam.licenseNo != null and insOrdersParam.licenseNo != ''">
+            AND ioci.license_no = #{insOrdersParam.licenseNo}
+        </if>
+        <if test="insOrdersParam.orderStatus!= null and insOrdersParam.orderStatus!= ''">
+            AND io.order_status = #{insOrdersParam.orderStatus}
+        </if>
+        <if test="insOrdersParam.adjustStatus!= null and insOrdersParam.adjustStatus!= ''">
+            AND ioa.status = #{insOrdersParam.adjustStatus}
+        </if>
+        <if test="insOrdersParam.salesman!= null">
+            AND io.real_quote_user_id = #{insOrdersParam.salesman}
+        </if>
+        <if test="insOrdersParam.companyId != null and insOrdersParam.companyId != ''">
+            AND io.company_id = #{insOrdersParam.companyId}
+        </if>
+        <if test="insOrdersParam.startDate != null and insOrdersParam.startDate != ''and insOrdersParam.endDate != null and insOrdersParam.endDate != ''">
+            AND io.create_time BETWEEN #{insOrdersParam.startDate} and #{insOrdersParam.endDate}
+        </if>
+
+        <if test="insOrdersParam.companyName != null and insOrdersParam.companyName != ''">
+            AND io.company_name = #{insOrdersParam.companyName}
+        </if>
+        <if test="insOrdersParam.productCode != null and insOrdersParam.productCode != ''">
+            AND io.product_id = #{insOrdersParam.productCode}
+        </if>
+        <if test="insOrdersParam.productName != null and insOrdersParam.productName != ''">
+            AND io.product_name = #{insOrdersParam.productName}
+        </if>
+        <if test="insOrdersParam.vinNo != null and insOrdersParam.vinNo != ''">
+            AND ioci.vin_no = #{insOrdersParam.vinNo}
+        </if>
+        <if test="insOrdersParam.ownerName != null and insOrdersParam.ownerName != ''">
+            AND owner_u.name = #{insOrdersParam.ownerName}
+        </if>
+        <if test="insOrdersParam.ownerMobile != null and insOrdersParam.ownerMobile != ''">
+            AND owner_u.mobile = #{insOrdersParam.ownerMobile}
+        </if>
+        <if test="insOrdersParam.policyName != null and insOrdersParam.policyName != ''">
+            AND policy_u.name = #{insOrdersParam.policyName}
+        </if>
+        <if test="insOrdersParam.policyMobile != null and insOrdersParam.policyMobile != ''">
+            AND policy_u.mobile = #{insOrdersParam.policyMobile}
+        </if>
+        <if test="insOrdersParam.insurName != null and insOrdersParam.insurName != ''">
+            AND insur_u.name = #{insOrdersParam.insurName}
+        </if>
+        <if test="insOrdersParam.insurMobile != null and insOrdersParam.insurMobile != ''">
+            AND insur_u.mobile = #{insOrdersParam.insurMobile}
+        </if>
+        <if test="insOrdersParam.ciStartDate != null">
+            AND iorci.start_date = #{insOrdersParam.ciStartDate}
+        </if>
+        <if test="insOrdersParam.biStartDate != null">
+            AND iorbi.start_date = #{insOrdersParam.biStartDate}
+        </if>
+        <if test="insOrdersParam.sumPremium != null">
+            AND iorco.sum_premium = #{insOrdersParam.sumPremium}
+        </if>
+        <if test="insOrdersParam.ciPremium != null">
+            AND iorco.jq_premium = #{insOrdersParam.ciPremium}
+        </if>
+        <if test="insOrdersParam.biPremium != null">
+            AND iorco.sy_premium = #{insOrdersParam.biPremium}
+        </if>
+        <if test="insOrdersParam.niPremium != null">
+            AND iorco.jy_premium = #{insOrdersParam.niPremium}
+        </if>
+        <if test="insOrdersParam.vvTax != null">
+            AND iorco.tax_premium = #{insOrdersParam.vvTax}
+        </if>
+        <if test="insOrdersParam.recorder != null and insOrdersParam.recorder != ''">
+            AND su.username = #{insOrdersParam.recorder}
+        </if>
+        <if test="insOrdersParam.salesmanInfo != null and insOrdersParam.salesmanInfo != ''">
+            AND suji.name = #{insOrdersParam.salesmanInfo}
+        </if>
+        <if test="insOrdersParam.salesmanType != null and insOrdersParam.salesmanType != ''">
+            AND suji.type_attr = #{insOrdersParam.salesmanType}
+        </if>
+        <if test="insOrdersParam.agreementName != null and insOrdersParam.agreementName != ''">
+            AND pa.agreement_name = #{insOrdersParam.agreementName}
+        </if>
+        <if test="insOrdersParam.deptId != null and insOrdersParam.deptId != ''">
+            AND sd.id = #{insOrdersParam.deptId}
+        </if>
+        <if test="insOrdersParam.deptName != null and insOrdersParam.deptName != ''">
+            AND sd.name = #{insOrdersParam.deptName}
+        </if>
+        <if test="insOrdersParam.paymentLink != null and insOrdersParam.paymentLink != ''">
+            AND io.pay_link = #{insOrdersParam.paymentLink}
+        </if>
+        <if test="insOrdersParam.adjustId != null">
+            AND ioa.id = #{insOrdersParam.adjustId}
+        </if>
+        <if test="insOrdersParam.adjustPremium != null">
+            AND ioa1.after_premium = #{insOrdersParam.adjustPremium}
+        </if>
+        <if test="insOrdersParam.startSigningTime != null and insOrdersParam.startSigningTime != ''and insOrdersParam.endSigningTime != null and insOrdersParam.endSigningTime != ''">
+            AND io.signing_time BETWEEN #{insOrdersParam.startSigningTime} and #{insOrdersParam.endSigningTime}
+        </if>
+        <if test="insOrdersParam.startPayTime != null and insOrdersParam.startPayTime != ''and insOrdersParam.endPayTime != null and insOrdersParam.endPayTime != ''">
+            AND io.pay_time BETWEEN #{insOrdersParam.startPayTime} and #{insOrdersParam.endPayTime}
+        </if>
+
+        order by io.create_time desc
+    </select>
+
     <select id="getHistoryQuote" resultType="com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo">
         SELECT t.id as order_no,
                t.license_no