feat(oa): 添加仪表板功能模块
- 新增仪表板控制器、服务接口及其实现类- 创建仪表板相关的数据传输对象(DTO) - 设计并实现仪表板数据的获取和统计逻辑 - 添加仪表板数据的数据库访问接口和映射文件
This commit is contained in:
230
gear-oa/src/main/resources/mapper/oa/GearDashboardMapper.xml
Normal file
230
gear-oa/src/main/resources/mapper/oa/GearDashboardMapper.xml
Normal file
@@ -0,0 +1,230 @@
|
||||
<?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>
|
||||
Reference in New Issue
Block a user