Files
GEAR-OA/gear-oa/src/main/resources/mapper/oa/GearDashboardMapper.xml

230 lines
8.0 KiB
XML
Raw Normal View History

<?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 &lt; 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 &lt; 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 &lt; 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>