Explorar el Código

fix 订单查询主从订单分离

liub hace 2 semanas
padre
commit
0fb3e083c0

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

@@ -159,6 +159,22 @@ public class InsOrdersController extends BaseController {
         return HttpResult.ok(insOrdersService.queryList(insOrdersParam));
     }
 
+    @PostMapping("queryMainOrderList")
+    @Operation(summary = "查询主订单列表(仅主订单表,不联表)")
+    public HttpResult queryMainOrderList(@RequestBody InsOrdersParamVO insOrdersParam) {
+        log.info("查询主订单列表,insOrdersParam=[{}]", JSONUtil.toJsonStr(insOrdersParam));
+        String systemCode = "";
+        //如果是APP登录的话 则传递SystemCode的头部字段
+        if (baseController.getUserSystemCode().equals("APP")) {
+            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+            systemCode = request.getHeader("system_code");
+        } else {
+            systemCode = baseController.getUserSystemCode();
+        }
+        insOrdersParam.setSystemCode(systemCode);
+        return HttpResult.ok(insOrdersService.queryMainOrderList(insOrdersParam));
+    }
+
     /**
      * 导出车险订单
      *      支持动态选择字段

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

@@ -41,6 +41,15 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
      */
     Page<OrderListVo> queryOrderList(@Param("page") Page page, @Param("insOrdersParam") InsOrdersParamVO insOrdersParam);
 
+    /**
+     * 查询主订单列表(仅查 ins_orders 主表,parent_id=0,不联表)
+     *
+     * @param page           分页参数
+     * @param insOrdersParam 筛选条件(仅主表字段生效)
+     * @return 主订单分页数据
+     */
+    Page<OrderListVo> queryMainOrderList(@Param("page") Page page, @Param("insOrdersParam") InsOrdersParamVO insOrdersParam);
+
     List<OrderListVo> queryOrderListAll(@Param("insOrdersParam") InsOrdersParamVO insOrdersParam);
 
     /**

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

@@ -11,7 +11,6 @@ import com.jzg.commons.entity.finance.vo.BatchModifyVo;
 import com.jzg.commons.entity.finance.vo.UpdateCompanyBatchVo;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
-
 import com.jzg.commons.entity.orders.po.InsOrdersCosts;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteQueryVo;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo;
@@ -23,12 +22,8 @@ import com.jzg.commons.entity.quote.vo.aggregated.OrderStatusResultVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingResultsVo;
+import com.jzg.commons.entity.quote.vo.orders.*;
 import com.jzg.commons.entity.vo.OrdersListVo;
-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.InsOrdersVo;
-import com.jzg.commons.entity.quote.vo.orders.InsFeeCalculateRequest;
-import com.jzg.commons.entity.quote.vo.orders.InsFeeCalculateResponse;
 import com.jzg.quotation.summary.entity.vo.*;
 
 import java.math.BigDecimal;
@@ -122,6 +117,14 @@ public interface InsOrdersService extends IService<InsOrders> {
      */
     Page<OrderListVo> queryList(InsOrdersParamVO insOrdersParam);
 
+    /**
+     * 查询主订单列表(仅查 ins_orders 主表,parent_id=0,不联表)
+     *
+     * @param insOrdersParam 筛选条件(仅主表字段生效)
+     * @return 主订单分页数据
+     */
+    Page<OrderListVo> queryMainOrderList(InsOrdersParamVO insOrdersParam);
+
     /**
      * 查询订单详情
      *

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

@@ -1099,6 +1099,23 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return orderListVoPage;
     }
 
+    /**
+     * 查询主订单列表:仅查 ins_orders 主表(parent_id=0),不联表
+     */
+    @Override
+    public Page<OrderListVo> queryMainOrderList(InsOrdersParamVO insOrdersParam) {
+        String userName = baseController.getUserName();
+        log.info("查询主订单列表(不联表):insOrdersParam=[{}]. userName=[{}]", JSONUtil.toJsonStr(insOrdersParam), userName);
+        HttpResult<SysUserJzgInfo> sysUserJzgInfoHttpResult = orgClient.queryUserByUserId(baseController.getUserId(), baseController.getSystemCode());
+        SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoHttpResult.getData();
+        String jzgInfoId = null;
+        if (sysUserJzgInfo != null) {
+            jzgInfoId = sysUserJzgInfo.getId();
+            insOrdersParam.setJzgInfoId(jzgInfoId);
+        }
+        return insOrdersMapper.queryMainOrderList(insOrdersParam.getPage(), insOrdersParam);
+    }
+
 
     public void processMainOrder(Page<OrderListVo> orderListVoPage) {
         List<OrderListVo> orderList = orderListVoPage.getRecords();

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

@@ -1242,6 +1242,77 @@
         order by io.create_time desc
     </select>
 
+    <!-- 主订单列表:仅查询主订单表 ins_orders,parent_id=0,不联表;筛选条件仅支持主表字段 -->
+    <select id="queryMainOrderList" resultType="com.jzg.commons.entity.orders.vo.OrderListVo">
+        SELECT
+        io.id as order_no,
+        io.quote_no as no,
+        io.company_id,
+        io.company_name,
+        io.product_id as productCode,
+        io.product_name as productName,
+        io.order_status,
+        io.create_time,
+        io.create_by,
+        io.error_message,
+        io.pay_link as paymentLink,
+        io.signing_time,
+        io.pay_time,
+        ioci.license_no as licenseNo,
+        ioci.vin_no as vinNo
+        FROM
+        ins_orders io
+        LEFT JOIN ins_orders_car_info ioci ON ioci.order_no = io.id and ioci.is_delete = 0
+        <where>
+            and io.is_delete = 0 and io.parent_id = '0'
+            <if test="insOrdersParam.jzgInfoId != null and insOrdersParam.jzgInfoId != ''">
+                and io.real_quote_user_id in (select bbb.mobile from sys_user bbb where bbb.id in ( select ss.user_id
+                from sys_user_jzg_info ss where 1 =1 and (ss.leader_id = #{insOrdersParam.jzgInfoId} or ss.id
+                =#{insOrdersParam.jzgInfoId}) and ss.is_delete = 0 ) and bbb.is_delete = 0 )
+            </if>
+            <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
+                AND io.id = #{insOrdersParam.orderNo}
+            </if>
+            <if test="insOrdersParam.licenseNo != null and insOrdersParam.licenseNo != ''">
+                AND ioci.license_no = #{insOrdersParam.licenseNo}
+            </if>
+            <if test="insOrdersParam.vinNo != null and insOrdersParam.vinNo != ''">
+                AND ioci.vin_no = #{insOrdersParam.vinNo}
+            </if>
+            <if test="insOrdersParam.orderStatus!= null and insOrdersParam.orderStatus!= ''">
+                AND io.order_status = #{insOrdersParam.orderStatus}
+            </if>
+            <if test="insOrdersParam.salesman!= null">
+                AND io.real_quote_user_id = #{insOrdersParam.salesman}
+            </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.companyId != null and insOrdersParam.companyId != ''">
+                AND io.company_id = #{insOrdersParam.companyId}
+            </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.paymentLink != null and insOrdersParam.paymentLink != ''">
+                AND io.pay_link = #{insOrdersParam.paymentLink}
+            </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>
+        </where>
+        order by io.create_time desc
+    </select>
+
     <!-- 手动分页版:按车牌+状态分组去重(每组取最新一条),返回当前页数据;不触发 MP 自动 count -->
     <select id="queryOrderListDistinct" resultType="com.jzg.commons.entity.orders.vo.OrderListVo">
         SELECT

+ 161 - 0
主订单列表查询接口对接文档.md

@@ -0,0 +1,161 @@
+# 主订单列表查询接口对接文档
+
+## 1. 概述
+
+- **功能**:查询主订单列表。仅查询主订单表 `ins_orders`(`parent_id = '0'`), **不进行任何联表查询**,筛选条件不变(仅主表字段生效)。
+- **Base URL**:`{host}/supplementOrder`
+
+---
+
+## 2. 接口信息
+
+| 项目             | 说明                                  |
+|------------------|---------------------------------------|
+| **URL**          | `/supplementOrder/queryMainOrderList` |
+| **Method**       | `POST`                                |
+| **Content-Type** | `application/json`                    |
+
+---
+
+## 3. 请求参数
+
+### 3.1 通用分页参数(继承自 `PageRequest`)
+
+| 字段       | 类型   | 必填 | 说明                           |
+|------------|--------|------|--------------------------------|
+| `pageNum`  | int    | 否   | 页码,默认 1                   |
+| `pageSize` | int    | 否   | 每页条数,默认 10              |
+| `orderBy`  | String | 否   | 排序字段(默认按创建时间倒序) |
+
+### 3.2 筛选条件(仅主表字段生效)
+
+```json
+{
+  "pageNum": 1,
+  "pageSize": 10,
+  "orderNo": "OR2026072300001",
+  "licenseNo": "晋A12345",
+  "vinNo": "LSVAA41T0A2000001",
+  "orderStatus": "1",
+  "salesman": "13800000000",
+  "companyName": "中国人民财产保险股份有限公司",
+  "companyId": "C001",
+  "productCode": "P001",
+  "productName": "交强险",
+  "paymentLink": "https://pay.example.com/xxx",
+  "startDate": "2026-08-01 00:00:00",
+  "endDate": "2026-08-25 23:59:59",
+  "startSigningTime": "2026-08-01 00:00:00",
+  "endSigningTime": "2026-08-25 23:59:59",
+  "startPayTime": "2026-08-01 00:00:00",
+  "endPayTime": "2026-08-25 23:59:59"
+}
+```
+
+| 字段                              | 类型   | 必填 | 说明                                           |
+|-----------------------------------|--------|------|------------------------------------------------|
+| `orderNo`                         | String | 否   | 订单号(匹配主表 `id`)                        |
+| `licenseNo`                       | String | 否   | 车牌号(联表 `ins_orders_car_info` 精确匹配)  |
+| `vinNo`                           | String | 否   | 车架号(联表 `ins_orders_car_info` 精确匹配)  |
+| `orderStatus`                     | String | 否   | 订单状态                                       |
+| `salesman`                        | String | 否   | 业务员(匹配主表 `real_quote_user_id` 手机号) |
+| `companyName`                     | String | 否   | 保险公司名称(精确匹配)                       |
+| `companyId`                       | String | 否   | 保险公司ID                                     |
+| `productCode`                     | String | 否   | 险种编码(匹配 `product_id`)                  |
+| `productName`                     | String | 否   | 险种名称                                       |
+| `paymentLink`                     | String | 否   | 支付链接(精确匹配)                           |
+| `startDate/endDate`               | String | 否   | 录单时间范围(`create_time`)                  |
+| `startSigningTime/endSigningTime` | String | 否   | 签单时间范围(`signing_time`)                 |
+| `startPayTime/endPayTime`         | String | 否   | 支付时间范围(`pay_time`)                     |
+
+> **说明**:
+> 1. `jzgInfoId` 无需前端传,服务端根据当前登录用户自动注入(查询本人及其下级业务员的订单)。
+> 2. 以下条件在本接口中 **不支持**
+     (依赖车主/人员/险种/费用等其他表联查,本接口自动忽略):车主/投保人/被保人姓名及手机号、交强/商业险起保日期、各类保费、车船税、录单人、业务员名称/类型、协议名称、部门、批改状态/批改单ID/批改后保费、
+     `isTemporarily`、`auditStatus`、`salesmanCompany`、`recordingTime`、`adjustStatus`、`adjustId`、`adjustPremium`、
+     `parentId`。
+
+---
+
+## 4. 返回结果
+
+### 4.1 响应结构
+
+```json
+{
+  "code": 200,
+  "message": "success",
+  "data": {
+    "records": [
+      {
+        "orderNo": "OR2026072300001",
+        "no": "QZ202607230001",
+        "companyId": "C001",
+        "companyName": "中国人民财产保险股份有限公司",
+        "productCode": "P001",
+        "productName": "交强险",
+        "orderStatus": "1",
+        "createTime": "2026-08-25 10:00:00",
+        "createBy": "张三",
+        "errorMessage": null,
+        "paymentLink": "https://pay.example.com/xxx",
+        "signingTime": "2026-08-25 12:00:00",
+        "payTime": "2026-08-25 13:00:00",
+        "licenseNo": "晋A12345",
+        "vinNo": "LSVAA41T0A2000001",
+        "ownerName": null,
+        "sumPremium": null,
+        "...": null
+      }
+    ],
+    "total": 1,
+    "size": 10,
+    "current": 1,
+    "pages": 1
+  }
+}
+```
+
+### 4.2 返回字段说明
+
+| 字段           | 类型   | 说明                                    |
+|----------------|--------|-----------------------------------------|
+| `orderNo`      | String | 订单号(主表 `id`)                     |
+| `no`           | String | 报价单号(主表 `quote_no`)             |
+| `companyId`    | String | 保险公司ID                              |
+| `companyName`  | String | 保险公司名称                            |
+| `productCode`  | String | 险种编码(主表 `product_id`)           |
+| `productName`  | String | 险种名称                                |
+| `orderStatus`  | String | 订单状态                                |
+| `createTime`   | Date   | 录单时间                                |
+| `createBy`     | String | 录单人                                  |
+| `errorMessage` | String | 错误信息(失败原因)                    |
+| `paymentLink`  | String | 支付链接                                |
+| `signingTime`  | Date   | 签单时间                                |
+| `payTime`      | Date   | 支付时间                                |
+| `licenseNo`    | String | 车牌号(联表 `ins_orders_car_info`)    |
+| `vinNo`        | String | 车架号(联表 `ins_orders_car_info`)    |
+| 其余字段       | -      | 车辆/保费/人员等其他联表字段均为 `null` |
+
+---
+
+## 5. 处理逻辑说明
+
+1. **主订单**:只返回主订单(`parent_id = '0'` 且 `is_delete = 0`),追加/批改产生的子订单不展示。
+2. **联表范围**:仅联表 `ins_orders_car_info` 获取车牌号、车架号,不关联人员/险种/费用等其他表。
+3. **权限过滤**:服务端根据当前登录用户调用组织服务获取 `jzgInfoId`,自动限定本人及其下级业务员的订单(与 `queryList` 一致)。
+4. **排序**:固定按 `create_time desc` 倒序。
+5. **筛选条件**:主表字段 + 车牌号/车架号作为条件生效;其余联表字段(人员、保费等)在请求中被忽略。
+6. **返回字段**:主表字段 + 车牌号/车架号;其余联表字段(保费、车主信息等)为 `null`。
+
+---
+
+## 6. 与 queryList 的差异对比
+
+| 维度         | `queryList`                            | `queryMainOrderList`                    |
+|--------------|----------------------------------------|-----------------------------------------|
+| 查询范围     | 子订单(`parent_id != '0'`)+ 多表联查 | 主订单(`parent_id = '0'`)             |
+| 联表         | 有(车辆、人员、费用等)               | 仅 `ins_orders_car_info`(车牌/车架号) |
+| 联表筛选     | 支持                                   | 仅车牌号、车架号                        |
+| 联表返回字段 | 有(车牌、保费、车主等)               | 仅车牌号、车架号                        |
+| 性能         | 慢(多表 JOIN + N+1)                  | 快(单表 + 1 次 JOIN)                  |