- 新增仪表板控制器、服务接口及其实现类- 创建仪表板相关的数据传输对象(DTO) - 设计并实现仪表板数据的获取和统计逻辑 - 添加仪表板数据的数据库访问接口和映射文件
230 lines
8.0 KiB
XML
230 lines
8.0 KiB
XML
<?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.gear.oa.mapper.GearDashboardMapper">
|
||
|
||
<!-- 获取今日订单数 -->
|
||
<select id="getTodayOrderCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_order
|
||
WHERE DATE(create_time) = CURDATE()
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取本周订单数 -->
|
||
<select id="getWeekOrderCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_order
|
||
WHERE YEARWEEK(create_time, 1) = YEARWEEK(CURDATE(), 1)
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取本月订单数 -->
|
||
<select id="getMonthOrderCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_order
|
||
WHERE YEAR(create_time) = YEAR(CURDATE())
|
||
AND MONTH(create_time) = MONTH(CURDATE())
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取上周订单数 -->
|
||
<select id="getLastWeekOrderCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_order
|
||
WHERE YEARWEEK(create_time, 1) = YEARWEEK(CURDATE(), 1) - 1
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取本周订单总金额 -->
|
||
<select id="getWeekOrderAmount" resultType="java.math.BigDecimal">
|
||
SELECT COALESCE(SUM(tax_amount), 0)
|
||
FROM gear_order
|
||
WHERE YEARWEEK(create_time, 1) = YEARWEEK(CURDATE(), 1)
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取近一周订单趋势 -->
|
||
<select id="getWeeklyOrderTrend" resultType="java.util.Map">
|
||
SELECT
|
||
DATE(create_time) as date,
|
||
COUNT(*) as value
|
||
FROM gear_order
|
||
WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
|
||
AND create_time < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
|
||
AND del_flag = 0
|
||
GROUP BY DATE(create_time)
|
||
ORDER BY DATE(create_time)
|
||
</select>
|
||
|
||
<!-- 获取今日薪资支出 -->
|
||
<select id="getTodaySalary" resultType="java.math.BigDecimal">
|
||
SELECT COALESCE(SUM(wage), 0)
|
||
FROM gear_attendance_record
|
||
WHERE DATE(record_date) = CURDATE()
|
||
AND del_flag = 0
|
||
AND wage IS NOT NULL
|
||
</select>
|
||
|
||
<!-- 获取本周薪资支出 -->
|
||
<select id="getWeekSalary" resultType="java.math.BigDecimal">
|
||
SELECT COALESCE(SUM(wage), 0)
|
||
FROM gear_attendance_record
|
||
WHERE YEARWEEK(record_date, 1) = YEARWEEK(CURDATE(), 1)
|
||
AND del_flag = 0
|
||
AND wage IS NOT NULL
|
||
</select>
|
||
|
||
<!-- 获取本月薪资支出 -->
|
||
<select id="getMonthSalary" resultType="java.math.BigDecimal">
|
||
SELECT COALESCE(SUM(wage), 0)
|
||
FROM gear_attendance_record
|
||
WHERE YEAR(record_date) = YEAR(CURDATE())
|
||
AND MONTH(record_date) = MONTH(CURDATE())
|
||
AND del_flag = 0
|
||
AND wage IS NOT NULL
|
||
</select>
|
||
|
||
<!-- 获取上周薪资支出 -->
|
||
<select id="getLastWeekSalary" resultType="java.math.BigDecimal">
|
||
SELECT COALESCE(SUM(wage), 0)
|
||
FROM gear_attendance_record
|
||
WHERE YEARWEEK(record_date, 1) = YEARWEEK(CURDATE(), 1) - 1
|
||
AND del_flag = 0
|
||
AND wage IS NOT NULL
|
||
</select>
|
||
|
||
<!-- 获取近一周薪资趋势 -->
|
||
<select id="getWeeklySalaryTrend" resultType="java.util.Map">
|
||
SELECT
|
||
DATE(record_date) as date,
|
||
COALESCE(SUM(wage), 0) as value
|
||
FROM gear_attendance_record
|
||
WHERE record_date >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
|
||
AND record_date < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
|
||
AND del_flag = 0
|
||
GROUP BY DATE(record_date)
|
||
ORDER BY DATE(record_date)
|
||
</select>
|
||
|
||
<!-- 获取库存排行(前10) -->
|
||
<select id="getStockRanking" resultType="com.gear.oa.domain.vo.dashboard.StockRankingVO">
|
||
SELECT
|
||
s.item_id,
|
||
s.item_type,
|
||
s.quantity,
|
||
s.unit,
|
||
w.warehouse_name,
|
||
CASE
|
||
WHEN s.item_type = 'product' THEN p.product_name
|
||
WHEN s.item_type = 'raw_material' THEN rm.material_name
|
||
ELSE '未知'
|
||
END as item_name,
|
||
CASE
|
||
WHEN s.item_type = 'product' THEN p.product_code
|
||
WHEN s.item_type = 'raw_material' THEN rm.material_code
|
||
ELSE ''
|
||
END as item_code,
|
||
CASE
|
||
WHEN s.item_type = 'product' THEN pc.category_name
|
||
ELSE NULL
|
||
END as category_name,
|
||
CASE
|
||
WHEN s.item_type = 'product' THEN p.owner
|
||
ELSE NULL
|
||
END as owner
|
||
FROM gear_stock s
|
||
LEFT JOIN gear_warehouse w ON s.warehouse_id = w.warehouse_id
|
||
LEFT JOIN gear_product p ON s.item_type = 'product' AND s.item_id = p.product_id
|
||
LEFT JOIN gear_product_category pc ON p.category_id = pc.category_id
|
||
LEFT JOIN (
|
||
SELECT product_id as material_id, product_name as material_name, product_code as material_code
|
||
FROM gear_product
|
||
WHERE type = 'raw'
|
||
) rm ON s.item_type = 'raw_material' AND s.item_id = rm.material_id
|
||
WHERE s.del_flag = 0
|
||
AND s.quantity > 0
|
||
ORDER BY s.quantity DESC
|
||
LIMIT 10
|
||
</select>
|
||
|
||
<!-- 获取活跃客户数(本月有订单的客户) -->
|
||
<select id="getActiveCustomerCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(DISTINCT customer_id)
|
||
FROM gear_order
|
||
WHERE YEAR(create_time) = YEAR(CURDATE())
|
||
AND MONTH(create_time) = MONTH(CURDATE())
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取待处理订单数 -->
|
||
<select id="getPendingOrderCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_order
|
||
WHERE order_status IN (0, 1)
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取库存预警数量(假设库存小于10为预警) -->
|
||
<select id="getLowStockCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_stock
|
||
WHERE quantity < 10
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取本月营收 -->
|
||
<select id="getMonthlyRevenue" resultType="java.math.BigDecimal">
|
||
SELECT COALESCE(SUM(tax_amount), 0)
|
||
FROM gear_order
|
||
WHERE YEAR(create_time) = YEAR(CURDATE())
|
||
AND MONTH(create_time) = MONTH(CURDATE())
|
||
AND order_status = 2
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取员工总数(从考勤记录中统计活跃用户) -->
|
||
<select id="getTotalEmployeeCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(DISTINCT user_id)
|
||
FROM gear_attendance_record
|
||
WHERE record_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
|
||
AND del_flag = 0
|
||
</select>
|
||
|
||
<!-- 获取今日出勤率 -->
|
||
<select id="getTodayAttendanceRate" resultType="java.math.BigDecimal">
|
||
SELECT
|
||
CASE
|
||
WHEN total_employees.total = 0 THEN 0
|
||
ELSE ROUND((attended_employees.attended * 100.0 / total_employees.total), 2)
|
||
END as attendance_rate
|
||
FROM
|
||
(SELECT COUNT(DISTINCT user_id) as total
|
||
FROM gear_attendance_record
|
||
WHERE record_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
|
||
AND del_flag = 0) total_employees
|
||
CROSS JOIN
|
||
(SELECT COUNT(DISTINCT user_id) as attended
|
||
FROM gear_attendance_record
|
||
WHERE DATE(record_date) = CURDATE()
|
||
AND record_type = 'attendance'
|
||
AND del_flag = 0) attended_employees
|
||
</select>
|
||
|
||
<!-- 获取产品总数 -->
|
||
<select id="getTotalProductCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_product
|
||
WHERE del_flag = 0
|
||
AND is_enabled = 1
|
||
</select>
|
||
|
||
<!-- 获取供应商总数 -->
|
||
<select id="getTotalSupplierCount" resultType="java.lang.Integer">
|
||
SELECT COUNT(*)
|
||
FROM gear_supplier
|
||
WHERE del_flag = 0
|
||
</select>
|
||
|
||
</mapper> |