fix: align asset customer data with OneOS and refine statistics display
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
shishengliang
2026-09-20 09:51:31 +08:00
parent 746edeb72c
commit 8fb574599b
8 changed files with 56 additions and 86 deletions
+6 -19
View File
@@ -1,13 +1,14 @@
import pool from '../../db.js';
import { LATEST_VEHICLE_LEASE_JOIN_SQL } from '../../vehicle-lease-sql.js';
import type { VehicleInfoRow } from './types.js';
/** 车辆关联信息 SQL(客户名、部门、经理、租赁状态、主体、项目、品牌) */
export const VEHICLE_INFO_SQL = `SELECT
vi.plate_number AS plate,
vi.vin AS vin,
COALESCE(c.customer_name, vor.customer_name, ci.customer_name) AS customer,
COALESCE(c.business_department_name, vor.business_dept) AS department,
COALESCE(c.business_manager_name, vor.business_manager) AS manager,
vor.customer_name AS customer,
vor.business_dept AS department,
vor.business_manager AS manager,
CAST(COALESCE(c.business_manager_id, vi.business_id) AS CHAR) AS manager_id,
CASE vs.operation_status
WHEN '1' THEN '租赁'
@@ -18,7 +19,7 @@ export const VEHICLE_INFO_SQL = `SELECT
ELSE vs.operation_status
END AS rent_status,
NULLIF(vi.registered_ownership, '') AS entity,
COALESCE(c.project_name, vor.project_name) AS project,
vor.project_name AS project,
COALESCE(vi_operation_city.NAME, NULLIF(vi.operation_city, '')) AS inventory_location,
CASE vm.brand
WHEN 'hyundai' THEN CASE WHEN vm.model LIKE '%帕力安%' OR vm.model LIKE '%冷链%' OR vm.model LIKE '%双飞翼%' THEN '帕力安牌' ELSE '现代' END
@@ -50,21 +51,7 @@ LEFT JOIN vehicle_model vm
LEFT JOIN common_district vi_operation_city
ON vi_operation_city.CODE = vi.operation_city COLLATE utf8mb4_unicode_ci
AND vi_operation_city.STATUS = 'VALID'
LEFT JOIN vehicle_lease_order_record vor
ON vor.vehicle_id = vi.id
AND vor.del_flag = '0'
AND vor.id = (
SELECT MAX(vor2.id)
FROM vehicle_lease_order_record vor2
WHERE vor2.vehicle_id = vi.id
AND vor2.del_flag = '0'
)
LEFT JOIN vehicle_lease_contract_info c
ON c.order_id = vor.contract_id
AND c.del_flag = '0'
LEFT JOIN customer_info ci
ON ci.id = vi.customer_id
AND ci.del_flag = '0'
${LATEST_VEHICLE_LEASE_JOIN_SQL}
WHERE vi.del_flag = '0'
AND COALESCE(vs.operation_status, '') <> '5'`;
+7 -20
View File
@@ -1,4 +1,5 @@
import pool from '../../db.js';
import { LATEST_VEHICLE_LEASE_JOIN_SQL } from '../../vehicle-lease-sql.js';
import type { Vehicle, VehicleRow } from '../../types.js';
import { transformRow } from './model.js';
import type { WeeklyTruckIds } from './types.js';
@@ -80,13 +81,13 @@ export const MAIN_SQL = `SELECT
ELSE vm.brand
END AS 车辆品牌Label,
c.id AS 合同ID,
COALESCE(c.contract_code, vor.contract_code, vi.contract_code) AS 合同编码,
COALESCE(c.customer_name, vor.customer_name, ci.customer_name) AS 客户名称,
vor.contract_code AS 合同编码,
vor.customer_name AS 客户名称,
c.signing_company AS 合同归属公司,
COALESCE(c.business_department_name, vor.business_dept) AS 合同归属部门,
vor.business_dept AS 合同归属部门,
NULLIF(vi.registered_ownership, '') AS 主体,
COALESCE(c.project_name, vor.project_name) AS 项目名称,
COALESCE(c.business_manager_name, vor.business_manager) AS 客户经理,
vor.project_name AS 项目名称,
vor.business_manager AS 客户经理,
CAST(COALESCE(c.business_manager_id, vi.business_id) AS CHAR) AS 经理ID
FROM vehicle_info vi
LEFT JOIN vehicle_status vs
@@ -113,21 +114,7 @@ LEFT JOIN common_district vi_city
LEFT JOIN common_district vi_operation_city
ON vi_operation_city.CODE = vi.operation_city COLLATE utf8mb4_unicode_ci
AND vi_operation_city.STATUS = 'VALID'
LEFT JOIN vehicle_lease_order_record vor
ON vor.vehicle_id = vi.id
AND vor.del_flag = '0'
AND vor.id = (
SELECT MAX(vor2.id)
FROM vehicle_lease_order_record vor2
WHERE vor2.vehicle_id = vi.id
AND vor2.del_flag = '0'
)
LEFT JOIN vehicle_lease_contract_info c
ON c.order_id = vor.contract_id
AND c.del_flag = '0'
LEFT JOIN customer_info ci
ON ci.id = vi.customer_id
AND ci.del_flag = '0'
${LATEST_VEHICLE_LEASE_JOIN_SQL}
WHERE vi.del_flag = '0'
AND COALESCE(vs.operation_status, '') <> '5'`;
+25
View File
@@ -0,0 +1,25 @@
/**
* 与 OneOS VehicleInfoMapper.LatestVehicleLeaseJoin 保持一致。
* vi 为车辆表;vor 为当前业务记录;c 为合同。
* 还车会清空 vor 的客户与合同信息,调用方不得用历史档案补回空值。
*/
export const LATEST_VEHICLE_LEASE_JOIN_SQL = `LEFT JOIN (
SELECT ranked_record.*
FROM (
SELECT source_record.*,
ROW_NUMBER() OVER (
PARTITION BY source_record.vehicle_id
ORDER BY COALESCE(
source_record.last_delivery_time,
source_record.last_return_time,
source_record.update_time
) DESC, source_record.id DESC
) AS lease_rn
FROM vehicle_lease_order_record source_record
WHERE source_record.del_flag = '0'
) ranked_record
WHERE ranked_record.lease_rn = 1
) vor ON vor.vehicle_id = vi.id
LEFT JOIN vehicle_lease_contract_info c
ON c.id = vor.contract_id
AND c.del_flag = '0'`;