BI园区大屏指标修改

This commit is contained in:
秦鸿展
2026-09-15 17:13:30 +08:00
parent 6b991363c6
commit ca5b6e4672
26 changed files with 1284 additions and 133 deletions
@@ -8,10 +8,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
plateNumber <- qms_main_business.CAR_NO
status <- qms_main_business.FLOW_STATUS
platformId <- qms_main_business.WINDOW_NAME(叫号月台,主业务表直接有)
platformDuration <- 月台作业时长(分钟):
未进入月台(ENTRY_TIME 为空) -> 0
已进入且已离开 -> EXIT_TIME - ENTRY_TIME
已进入但未离开 -> SYSDATE - ENTRY_TIME
platformDuration <- 月台作业时长(分钟),用「进入月台 / 离开月台」时间
未进入月台(IN_WINDOWS_TIME 为空) -> 0
已进入且已离开月台(OUT_WINDOWS_TIME 非空) -> OUT_WINDOWS_TIME - IN_WINDOWS_TIME
已进入但未离开月台 -> SYSDATE - IN_WINDOWS_TIME
appointmentTime <- qms_main_business.CREATE_TIME
workFloor <- qms_window_info.PLATFORM_FLOOR(按 WINDOW_NAME 关联)
-->
@@ -21,10 +21,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
mb.FLOW_STATUS AS status,
mb.WINDOW_NAME AS platformId,
CASE
WHEN mb.ENTRY_TIME IS NULL THEN 0
WHEN mb.EXIT_TIME IS NOT NULL
THEN CAST((mb.EXIT_TIME - mb.ENTRY_TIME) * 24 * 60 AS BIGINT)
ELSE CAST((SYSDATE - mb.ENTRY_TIME) * 24 * 60 AS BIGINT)
WHEN mb.IN_WINDOWS_TIME IS NULL THEN 0
WHEN mb.OUT_WINDOWS_TIME IS NOT NULL
THEN CAST((mb.OUT_WINDOWS_TIME - mb.IN_WINDOWS_TIME) * 24 * 60 AS BIGINT)
ELSE CAST((SYSDATE - mb.IN_WINDOWS_TIME) * 24 * 60 AS BIGINT)
END AS platformDuration,
TO_CHAR(mb.CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS appointmentTime,
wi.PLATFORM_FLOOR AS workFloor
@@ -37,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<!-- 月台概览:totalPlatforms(总条数)、operatingPlatforms(作业状态=占用,JOB_STATUS: 0空闲 1占用) -->
<select id="queryPlatformOverview" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformOverviewPO">
SELECT
@@ -77,6 +78,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
waiting 等待作业:FLOW_STATUS IN ('1','2','3') 已预约/已签到/已叫号 且 预约日期 = 今天
callStatusTotal 叫号状态合计:已签到 + 已叫号 + 已过号 = FLOW_STATUS IN ('2','3','4') 且 预约日期 = 今天
todayExited 今日已出场:FLOW_STATUS = '11' 且 预约日期 = 今天(月台周转率的分子)
completedVehicles 今日作业车辆总数:FLOW_STATUS = '11' 且 预约日期 = 今天
FLOW_STATUS: 1已预约 2已签到 3已叫号 4已过号 5已进场 6已称重 7已装车 8二次称重 9已结算 10已还卡 11已出场 12已取消 -->
<select id="queryVehicleStatusToday" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO">
SELECT
@@ -86,14 +88,97 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SUM(CASE WHEN FLOW_STATUS IN ('2','3','4') AND TRUNC(TARGET_DATE) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS callStatusTotal,
SUM(CASE WHEN FLOW_STATUS = '11' AND TRUNC(TARGET_DATE) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS todayExited,
SUM(CASE WHEN FLOW_STATUS IN ('5','6','7','8','9','10') AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS operatingVehicles,
SUM(CASE WHEN FLOW_STATUS = '11' AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS completedVehicles
SUM(CASE WHEN FLOW_STATUS = '11' AND TRUNC(TARGET_DATE) = TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS completedVehicles
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
</select>
<!-- ======================= 月台作业参考用时 / 超时相关 =======================
参考用时取自 YMS 库静态字段配置表 NGWL_TEST_YMS.QMS_STATIC_FIELD
FIELD_CODE = 'platform_work_ref_minutes'
取值优先级:WINDOW(按月台) > FLOOR(按楼层) > GLOBAL(全局)
下面用 LEFT JOIN 三级关联 + COALESCE 实现优先级取值,
REF_MINUTES 为空表示该月台未配置参考用时,其记录不计入超时率分母 -->
<!-- 可复用的参考用时关联条件(YMS 库静态字段配置表 QMS_STATIC_FIELD
取值优先级:WINDOW(按月台) > FLOOR(按楼层) > GLOBAL(全局) -->
<sql id="joinStaticRef">
INNER JOIN NGWL_TEST_YMS.QMS_STATIC_FIELD ref
ON ref.FIELD_CODE = #{refCode}
AND ref.DEL_FLAG = 1
AND ref.FIELD_VALUE IS NOT NULL
AND (
(ref.SCOPE_TYPE = 'WINDOW' AND ref.SCOPE_CODE = mb.WINDOW_NAME)
OR (ref.SCOPE_TYPE = 'FLOOR' AND ref.SCOPE_CODE = wi.PLATFORM_FLOOR)
OR (ref.SCOPE_TYPE = 'GLOBAL')
)
</sql>
<!-- 今日作业超时统计(通用:月台作业 / 园区作业,由 refCode + 时长表达式区分)
分母只计入「能取到参考用时 且 时长两端时间都非空」的记录
overtimeCount 超时记录数:作业时长(分钟) > 参考用时
totalCount 有效记录总数(分母)
超时率 = overtimeCount / totalCount × 100%,由 Service 层计算 -->
<select id="queryTodayOvertimeStat" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealOvertimeStatPO">
SELECT
SUM(CASE WHEN (mb.OUT_WINDOWS_TIME - mb.IN_WINDOWS_TIME) * 24 * 60 &gt; ref.REF_MINUTES
THEN 1 ELSE 0 END) AS overtimeCount,
COUNT(1) AS totalCount
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS mb
LEFT JOIN NGWL_TEST_YMS.QMS_WINDOW_INFO wi
ON wi.WINDOW_NAME = mb.WINDOW_NAME
<include refid="joinStaticRef"/>
WHERE mb.TARGET_DATE IS NOT NULL
AND TRUNC(mb.TARGET_DATE) = TRUNC(SYSDATE)
AND mb.IN_WINDOWS_TIME IS NOT NULL
AND mb.OUT_WINDOWS_TIME IS NOT NULL
</select>
<!-- 今日园区作业超时统计(时长 = 实际出场 - 实际进入;参考用时 yard_work_ref_minutes
用于计算「园区作业准时率 = 1 - 超时率」 -->
<select id="queryTodayYardOvertimeStat" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealOvertimeStatPO">
SELECT
SUM(CASE WHEN (mb.EXIT_TIME - mb.ENTRY_TIME) * 24 * 60 &gt; ref.REF_MINUTES
THEN 1 ELSE 0 END) AS overtimeCount,
COUNT(1) AS totalCount
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS mb
LEFT JOIN NGWL_TEST_YMS.QMS_WINDOW_INFO wi
ON wi.WINDOW_NAME = mb.WINDOW_NAME
<include refid="joinStaticRef"/>
WHERE mb.TARGET_DATE IS NOT NULL
AND TRUNC(mb.TARGET_DATE) = TRUNC(SYSDATE)
AND mb.ENTRY_TIME IS NOT NULL
AND mb.EXIT_TIME IS NOT NULL
</select>
<!-- 今日月台作业超时记录列表(月台名称 / 车牌号码 / 超时时长分钟):
超时时长 = 月台作业时长 - 参考用时 -->
<select id="queryTodayOvertimeList" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealOvertimeRecordPO">
SELECT
mb.WINDOW_NAME AS windowName,
mb.CAR_NO AS carNo,
CAST(((mb.OUT_WINDOWS_TIME - mb.IN_WINDOWS_TIME) * 24 * 60 - ref.REF_MINUTES) AS BIGINT) AS overtimeMinutes,
ref.REF_MINUTES AS refMinutes,
CAST((mb.OUT_WINDOWS_TIME - mb.IN_WINDOWS_TIME) * 24 * 60 AS BIGINT) AS platformMinutes
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS mb
LEFT JOIN NGWL_TEST_YMS.QMS_WINDOW_INFO wi
ON wi.WINDOW_NAME = mb.WINDOW_NAME
<include refid="joinStaticRef"/>
WHERE mb.TARGET_DATE IS NOT NULL
AND TRUNC(mb.TARGET_DATE) = TRUNC(SYSDATE)
AND mb.IN_WINDOWS_TIME IS NOT NULL
AND mb.OUT_WINDOWS_TIME IS NOT NULL
AND (mb.OUT_WINDOWS_TIME - mb.IN_WINDOWS_TIME) * 24 * 60 &gt; ref.REF_MINUTES
ORDER BY overtimeMinutes DESC
</select>
<!-- 本月任务量:按预约日期 TARGET_DATE(Y预约日期)统计本月预约总数量 -->
<select id="countMonthTasks" resultType="java.lang.Long">
SELECT COUNT(1)
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
@@ -102,10 +187,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<!-- 本月任务平均作业时长 / 完成率统计(统计范围:本月 TARGET_DATE 在当月的记录):
totalWorkHours 本月任务作业时长合计(小时):
未进入月台 -> 0
已进入且已离开 -> EXIT_TIME - ENTRY_TIME
已进入但未离开 -> SYSDATE - ENTRY_TIME
totalWorkHours 本月任务作业时长合计(小时),用「进入月台 / 离开月台」时间
未进入月台(IN_WINDOWS_TIME 为空) -> 0
已进入且已离开月台(OUT_WINDOWS_TIME 非空) -> OUT_WINDOWS_TIME - IN_WINDOWS_TIME
已进入但未离开月台 -> SYSDATE - IN_WINDOWS_TIME
completedCount 本月已出场(EXIT_TIME IS NOT NULL)的数量;
totalCount 本月预约总数量(作为平均时长的分母)。
avgDurationHours 由 Service 层计算 = totalWorkHours ÷ totalCount(任务平均作业时长)
@@ -113,9 +198,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="queryMonthTaskStats" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealMonthlyTaskDurationPO">
SELECT
SUM(CASE
WHEN ENTRY_TIME IS NULL THEN 0
WHEN EXIT_TIME IS NOT NULL THEN (EXIT_TIME - ENTRY_TIME) * 24
ELSE (SYSDATE - ENTRY_TIME) * 24
WHEN IN_WINDOWS_TIME IS NULL THEN 0
WHEN OUT_WINDOWS_TIME IS NOT NULL THEN (OUT_WINDOWS_TIME - IN_WINDOWS_TIME) * 24
ELSE (SYSDATE - IN_WINDOWS_TIME) * 24
END) AS totalWorkHours,
SUM(CASE WHEN EXIT_TIME IS NOT NULL
AND TARGET_DATE IS NOT NULL
@@ -143,12 +228,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<!-- 月台监控-按楼层统计:
floorNo 楼层号,取自月台表 QMS_WINDOW_INFO.PLATFORM_FLOOR(不再从 WINDOW_NAME 截取)
floorNo 楼层号,取自月台表 QMS_WINDOW_INFO.PLATFORM_FLOOR
platformCount 该楼层月台数量(QMS_WINDOW_INFO
todayReservedVehicles 该楼层今日预约车辆数(按预约时已选的月台/叫号月台关联楼层)
operatingVehicles 该楼层当前作业车辆数(FLOW_STATUS IN 5,6,7,8,9,10
说明:楼层维度以「月台表」为准;车辆预约时若已选月台(WINDOW_NAME 非空)即计入对应楼层,
未选月台的车无法归属楼层,故不计入任何楼层(避免虚增)。 -->
avgPlatformMinutes 该楼层月台作业平均时长(分钟)
公式:SUM(该楼层有效记录的月台作业时长) ÷ 该楼层有效记录数
有效记录:同时有进入月台(IN_WINDOWS_TIME)与离开月台(OUT_WINDOWS_TIME)时间
说明:楼层维度以「月台表」为准;车辆预约时若已选月台(WINDOW_NAME 非空)即计入对应楼层。 -->
<select id="queryPlatformFloorStats" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformFloorStatPO">
SELECT
W.PLATFORM_FLOOR AS floorNo,
@@ -160,7 +247,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHEN TRUNC(mb.TARGET_DATE) = TRUNC(SYSDATE)
AND mb.FLOW_STATUS IN ('5','6','7','8','9','10')
THEN mb.CAR_NO
END) AS operatingVehicles
END) AS operatingVehicles,
ROUND(AVG(CASE
WHEN mb.IN_WINDOWS_TIME IS NOT NULL AND mb.OUT_WINDOWS_TIME IS NOT NULL
THEN (mb.OUT_WINDOWS_TIME - mb.IN_WINDOWS_TIME) * 24 * 60
END), 0) AS avgPlatformMinutes
FROM NGWL_TEST_YMS.QMS_WINDOW_INFO W
LEFT JOIN NGWL_TEST_YMS.QMS_MAIN_BUSINESS mb
ON mb.WINDOW_NAME = W.WINDOW_NAME
@@ -170,6 +261,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<!-- 任务类型统计(来自 NGWL_TEST_YMS.QMS_MAIN_BUSINESS 预约登记表):
按本月预约车辆数(TARGET_DATE 在当前月)按 BUSINESS_NAME 业务类型分组统计 -->
<select id="queryMonthTransportOrderByType" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskTypeStatPO">
@@ -184,18 +276,73 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY COUNT(1) DESC
</select>
<!-- 任务负荷(今日 24 小时时段):按 EXTRACT(HOUR FROM ENTRY_TIME) 统计 -->
<!-- 今日平均作业时长(效率统计-本日):
avgPlatformDurationHours 月台作业平均时长(小时)
统计范围:今日预约记录中「同时有进入月台时间(IN_WINDOWS_TIME)和离开月台时间(OUT_WINDOWS_TIME)」的记录
公式:AVG((OUT_WINDOWS_TIME - IN_WINDOWS_TIME) * 24)
avgYardDurationHours 园区平均时长(小时)
统计范围:今日预约记录中「同时有实际进入时间(ENTRY_TIME)和实际出场时间(EXIT_TIME)」的记录
公式:AVG((EXIT_TIME - ENTRY_TIME) * 24) -->
<select id="queryTodayAvgDuration" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealTodayAvgDurationPO">
SELECT
AVG(CASE WHEN IN_WINDOWS_TIME IS NOT NULL AND OUT_WINDOWS_TIME IS NOT NULL
THEN (OUT_WINDOWS_TIME - IN_WINDOWS_TIME) * 24
END) AS avgPlatformDurationHours,
AVG(CASE WHEN ENTRY_TIME IS NOT NULL AND EXIT_TIME IS NOT NULL
THEN (EXIT_TIME - ENTRY_TIME) * 24
END) AS avgYardDurationHours
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
WHERE TARGET_DATE IS NOT NULL
AND TRUNC(TARGET_DATE) = TRUNC(SYSDATE)
</select>
<!-- 近半年「平均作业时长」趋势(按月分组,取最近 6 个月):
taskCount 该月任务数(预约记录数,作为平均时长的分母);
platformWorkHours 该月月台作业时长合计(小时):
未进入月台(IN_WINDOWS_TIME 为空) -> 0
已进入且已离开月台(OUT_WINDOWS_TIME 非空) -> OUT_WINDOWS_TIME - IN_WINDOWS_TIME
已进入但未离开月台 -> SYSDATE - IN_WINDOWS_TIME
yardWorkHours 该月园区作业时长合计(小时):
未进场(ENTRY_TIME 为空) -> 0
已进场且已出场(EXIT_TIME 非空) -> EXIT_TIME - ENTRY_TIME
已进场但未出场 -> SYSDATE - ENTRY_TIME
平均时长由 Service 层计算 = 时长合计 ÷ taskCount -->
<select id="queryMonthlyAvgDuration" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealMonthlyAvgDurationPO">
SELECT
TO_CHAR(TARGET_DATE, 'YYYY-MM') AS monthOfYear,
COUNT(1) AS taskCount,
SUM(CASE
WHEN IN_WINDOWS_TIME IS NULL THEN 0
WHEN OUT_WINDOWS_TIME IS NOT NULL THEN (OUT_WINDOWS_TIME - IN_WINDOWS_TIME) * 24
ELSE (SYSDATE - IN_WINDOWS_TIME) * 24
END) AS platformWorkHours,
SUM(CASE
WHEN ENTRY_TIME IS NULL THEN 0
WHEN EXIT_TIME IS NOT NULL THEN (EXIT_TIME - ENTRY_TIME) * 24
ELSE (SYSDATE - ENTRY_TIME) * 24
END) AS yardWorkHours
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
WHERE TARGET_DATE IS NOT NULL
AND TARGET_DATE &gt;= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -5)
GROUP BY TO_CHAR(TARGET_DATE, 'YYYY-MM')
ORDER BY 1
</select>
<!-- 小时趋势(今日,每 2 小时分组统计一次):
按车辆进入月台时间 IN_WINDOWS_TIME 分桶,桶为 0,2,4,...,22 -->
<select id="queryTaskLoadToday" resultType="com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO">
SELECT
EXTRACT(HOUR FROM ENTRY_TIME) AS hourOfDay,
COUNT(1) AS taskCount
FLOOR(EXTRACT(HOUR FROM IN_WINDOWS_TIME) / 2) * 2 AS hourOfDay,
COUNT(1) AS taskCount
FROM NGWL_TEST_YMS.QMS_MAIN_BUSINESS
WHERE ENTRY_TIME IS NOT NULL
AND TRUNC(ENTRY_TIME) = TRUNC(SYSDATE)
GROUP BY EXTRACT(HOUR FROM ENTRY_TIME)
ORDER BY EXTRACT(HOUR FROM ENTRY_TIME)
WHERE IN_WINDOWS_TIME IS NOT NULL
AND TRUNC(IN_WINDOWS_TIME) = TRUNC(SYSDATE)
GROUP BY FLOOR(EXTRACT(HOUR FROM IN_WINDOWS_TIME) / 2) * 2
ORDER BY 1
</select>
<!-- 月台管理列表:查询 YMS qms_window_info 月台/鹤位窗口
机构名称 deptName <- sys_dept.DEPT_NAMEd.dept_id = a.ORG_NO 关联)
鹤位屏名称 berrNames <- qms_window_berr(WINDOW_ID/BERR_ID) join qms_berr_config(ID/BERR_NAME)WM_CONCAT 拼接
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.bi.domain.biStaticField.repository.mapper.BiStaticFieldMapper">
<!-- 业务静态字段配置(YMS 库):按字段编码查询全部有效配置
含 GLOBAL / FLOOR / WINDOW 各作用域,由程序按「WINDOW > FLOOR > GLOBAL」优先级取值 -->
<select id="queryByCode" resultType="com.mhd.bi.domain.biStaticField.repository.po.BiStaticFieldPO">
SELECT
FIELD_CODE AS fieldCode,
FIELD_NAME AS fieldName,
SCOPE_TYPE AS scopeType,
SCOPE_CODE AS scopeCode,
FIELD_VALUE AS fieldValue,
UNIT AS unit
FROM NGWL_TEST_YMS.QMS_STATIC_FIELD
WHERE DEL_FLAG = 1
AND FIELD_CODE = #{fieldCode}
</select>
<!-- 批量按字段编码查询 -->
<select id="queryByCodes" resultType="com.mhd.bi.domain.biStaticField.repository.po.BiStaticFieldPO">
SELECT
FIELD_CODE AS fieldCode,
FIELD_NAME AS fieldName,
SCOPE_TYPE AS scopeType,
SCOPE_CODE AS scopeCode,
FIELD_VALUE AS fieldValue,
UNIT AS unit
FROM NGWL_TEST_YMS.QMS_STATIC_FIELD
WHERE DEL_FLAG = 1
AND FIELD_CODE IN
<foreach collection="fieldCodes" item="c" open="(" separator="," close=")">
#{c}
</foreach>
</select>
<!-- 查询全部有效配置 -->
<select id="queryAll" resultType="com.mhd.bi.domain.biStaticField.repository.po.BiStaticFieldPO">
SELECT
FIELD_CODE AS fieldCode,
FIELD_NAME AS fieldName,
SCOPE_TYPE AS scopeType,
SCOPE_CODE AS scopeCode,
FIELD_VALUE AS fieldValue,
UNIT AS unit
FROM NGWL_TEST_YMS.QMS_STATIC_FIELD
WHERE DEL_FLAG = 1
</select>
</mapper>
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.bi.domain.biWarehouseTransport.repository.mapper.BiWarehouseTransportRealDataMapper">
<!-- 仓储订单量:本年度 / 本季度 / 本月度 = 入库业务单 + 出库业务单 数量合计
统计范围:全部组织
口径:del_flag = 1(有效);本季度用「月份向上取整 / 3」判断同季度 -->
<select id="queryWarehouseOrderStat" resultType="com.mhd.bi.domain.biWarehouseTransport.repository.po.RealWarehouseOrderStatPO">
SELECT
(SELECT NVL(SUM(c), 0) FROM (
SELECT COUNT(1) AS c FROM NGWL_TEST_WMS.STOCK_IN_ORDER
WHERE del_flag = 1 AND TO_CHAR(CREATE_TIME, 'YYYY') = TO_CHAR(SYSDATE, 'YYYY')
UNION ALL
SELECT COUNT(1) FROM NGWL_TEST_WMS.STOCK_OUT_ORDER
WHERE del_flag = 1 AND TO_CHAR(CREATE_TIME, 'YYYY') = TO_CHAR(SYSDATE, 'YYYY')
)) AS currentYearOrders,
(SELECT NVL(SUM(c), 0) FROM (
SELECT COUNT(1) AS c FROM NGWL_TEST_WMS.STOCK_IN_ORDER
WHERE del_flag = 1 AND TO_CHAR(CREATE_TIME, 'YYYY') = TO_CHAR(SYSDATE, 'YYYY')
AND CEIL(TO_NUMBER(TO_CHAR(CREATE_TIME, 'MM')) / 3) = CEIL(TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) / 3)
UNION ALL
SELECT COUNT(1) FROM NGWL_TEST_WMS.STOCK_OUT_ORDER
WHERE del_flag = 1 AND TO_CHAR(CREATE_TIME, 'YYYY') = TO_CHAR(SYSDATE, 'YYYY')
AND CEIL(TO_NUMBER(TO_CHAR(CREATE_TIME, 'MM')) / 3) = CEIL(TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) / 3)
)) AS currentQuarterOrders,
(SELECT NVL(SUM(c), 0) FROM (
SELECT COUNT(1) AS c FROM NGWL_TEST_WMS.STOCK_IN_ORDER
WHERE del_flag = 1 AND TO_CHAR(CREATE_TIME, 'YYYY-MM') = TO_CHAR(SYSDATE, 'YYYY-MM')
UNION ALL
SELECT COUNT(1) FROM NGWL_TEST_WMS.STOCK_OUT_ORDER
WHERE del_flag = 1 AND TO_CHAR(CREATE_TIME, 'YYYY-MM') = TO_CHAR(SYSDATE, 'YYYY-MM')
)) AS currentMonthOrders
FROM DUAL
</select>
<!-- 今日订单数量:OMS 运输业务单,今日创建,全部组织 -->
<select id="countTodayTransportOrders" resultType="java.lang.Long">
SELECT COUNT(1)
FROM NGWL_TEST_OMS.BUSINESS_DOCUMENT_ORDER
WHERE CREATE_TIME IS NOT NULL
AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE)
AND IS_DELETE = 0
</select>
<!-- 今日运输车次:TMS 运输单(运单),今日创建,全部组织
口径:一个单 = 一个车次,直接按单计数(不做单号去重,避免单号为空被漏计) -->
<select id="countTodayTransportTrips" resultType="java.lang.Long">
SELECT COUNT(1)
FROM NGWL_TEST_WLHY.TMS_TRANSPORT_NOTE
WHERE CREATE_TIME IS NOT NULL
AND TRUNC(CREATE_TIME) = TRUNC(SYSDATE)
AND (IS_DELETE IS NULL OR IS_DELETE = 0)
</select>
<!-- 客户贡献排名:OMS 运输业务单,近半年按货主(APPOINT_SHIPPER)聚合订单数,取前 5 名
统计范围:全部组织;口径:一个单 = 一单,COUNT(1) -->
<select id="queryCustomerRankTop5" resultType="com.mhd.bi.domain.biWarehouseTransport.repository.po.RealCustomerRankPO">
SELECT * FROM (
SELECT
APPOINT_SHIPPER AS customerName,
CEIL(COUNT(1)) AS customerAmount
FROM NGWL_TEST_OMS.BUSINESS_DOCUMENT_ORDER
WHERE CREATE_TIME IS NOT NULL
AND CREATE_TIME &gt;= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -5)
AND IS_DELETE = 0
AND APPOINT_SHIPPER IS NOT NULL
AND APPOINT_SHIPPER != ''
GROUP BY APPOINT_SHIPPER
ORDER BY COUNT(1) DESC
)
WHERE ROWNUM &lt;= 5
</select>
</mapper>