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>
|