|
|
@@ -0,0 +1,431 @@
|
|
|
+<?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="cn.com.mes.mapper.BigViewMesMapper">
|
|
|
+
|
|
|
+ <!-- 统计产品总量 -->
|
|
|
+ <select id="getProductTotal" resultType="java.util.Map">
|
|
|
+ SELECT COALESCE(SUM(quantity), 0) as totalProducts,
|
|
|
+ COALESCE(SUM(quantity_produced), 0) as totalProducedProducts,
|
|
|
+ COALESCE(SUM(quantity_scheduled), 0) as totalScheduledProducts,
|
|
|
+ COALESCE(SUM(quantity_changed), 0) as totalChangedProducts
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE')
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取未完成工单统计数据 -->
|
|
|
+ <select id="getCountIncompleteWorkorders" resultType="int">
|
|
|
+ SELECT
|
|
|
+ COUNT(workorder_id) as totalIncomplete
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询未完成工单列表 -->
|
|
|
+ <select id="selectIncompleteWorkorders" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ workorder_id as workorderId,
|
|
|
+ workorder_code as workorderCode,
|
|
|
+ workorder_name as workorderName,
|
|
|
+ product_name as productName,
|
|
|
+ status,
|
|
|
+ request_date as requestDate,
|
|
|
+ finish_date as finishDate,
|
|
|
+ quantity as totalQuantity,
|
|
|
+ COALESCE(quantity_produced, 0) as producedQuantity,
|
|
|
+ COALESCE(quantity_scheduled, 0) as scheduledQuantity,
|
|
|
+ COALESCE(quantity_changed, 0) as changedQuantity,
|
|
|
+ (quantity - COALESCE(quantity_produced, 0)) as incompleteQuantity,
|
|
|
+ CASE
|
|
|
+ WHEN quantity > 0 THEN ROUND((COALESCE(quantity_produced, 0) / quantity) * 100, 2)
|
|
|
+ ELSE 0
|
|
|
+ END as completionRate,
|
|
|
+ CASE
|
|
|
+ WHEN quantity > 0 THEN ROUND((COALESCE(quantity_scheduled, 0) / quantity) * 100, 2)
|
|
|
+ ELSE 0
|
|
|
+ END as schedulingRate
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ ORDER BY create_time DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询未完成工单产品统计(相同产品合并) -->
|
|
|
+ <select id="selectIncompleteWorkorderProductsGroup" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ product_name as productName,
|
|
|
+ product_id as productId,
|
|
|
+ COUNT(*) as workorderCount,
|
|
|
+ SUM(quantity) as totalQuantity,
|
|
|
+ SUM(COALESCE(quantity_produced, 0)) as totalProducedQuantity,
|
|
|
+ SUM(COALESCE(quantity_scheduled, 0)) as totalScheduledQuantity,
|
|
|
+ SUM(quantity - COALESCE(quantity_produced, 0)) as totalIncompleteQuantity,
|
|
|
+ CASE
|
|
|
+ WHEN SUM(quantity) > 0 THEN ROUND((SUM(COALESCE(quantity_produced, 0)) / SUM(quantity)) * 100, 2)
|
|
|
+ ELSE 0
|
|
|
+ END as averageCompletionRate,
|
|
|
+ CASE
|
|
|
+ WHEN SUM(quantity) > 0 THEN ROUND((SUM(COALESCE(quantity_scheduled, 0)) / SUM(quantity)) * 100, 2)
|
|
|
+ ELSE 0
|
|
|
+ END as averageSchedulingRate
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ GROUP BY product_id, product_name
|
|
|
+ ORDER BY totalIncompleteQuantity DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取半年内每月工单统计和逾期工单统计 -->
|
|
|
+ <select id="selectMonthlyOverdueWorkorderStatistics" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(d.stat_date, '%Y-%m') AS month_year_str,
|
|
|
+ YEAR(d.stat_date) AS stat_year,
|
|
|
+ MONTH(d.stat_date) AS stat_month,
|
|
|
+ COALESCE(w.total_workorders, 0) AS total_workorders,
|
|
|
+ COALESCE(w.overdue_workorders, 0) AS overdue_workorders,
|
|
|
+ CASE
|
|
|
+ WHEN COALESCE(w.total_workorders, 0) > 0
|
|
|
+ THEN ROUND(COALESCE(w.overdue_workorders, 0) * 100.0 / w.total_workorders, 2)
|
|
|
+ ELSE 0.00
|
|
|
+ END AS overdue_rate
|
|
|
+ FROM (
|
|
|
+ SELECT DATE_SUB(CURDATE(), INTERVAL nums.n MONTH) AS stat_date
|
|
|
+ FROM (
|
|
|
+ SELECT 0 AS n UNION ALL
|
|
|
+ SELECT 1 UNION ALL
|
|
|
+ SELECT 2 UNION ALL
|
|
|
+ SELECT 3 UNION ALL
|
|
|
+ SELECT 4 UNION ALL
|
|
|
+ SELECT 5
|
|
|
+ ) nums
|
|
|
+ ) d
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(request_date, '%Y-%m') AS stat_month_year,
|
|
|
+ COUNT(*) AS total_workorders,
|
|
|
+ SUM(CASE
|
|
|
+ WHEN (finish_date IS NOT NULL AND finish_date > request_date)
|
|
|
+ OR (finish_date IS NULL AND NOW() > request_date)
|
|
|
+ THEN 1
|
|
|
+ ELSE 0
|
|
|
+ END) AS overdue_workorders
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE request_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
|
|
|
+ AND status IS NOT NULL
|
|
|
+ GROUP BY DATE_FORMAT(request_date, '%Y-%m')
|
|
|
+ ) w ON DATE_FORMAT(d.stat_date, '%Y-%m') = w.stat_month_year
|
|
|
+ ORDER BY d.stat_date ASC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 根据产品IDs获取生产工单统计(一周内每天不同产品的数据) -->
|
|
|
+ <select id="selectProductionWorkorderStatisticsByProductIds" resultType="java.util.Map" parameterType="string">
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(d.stat_date, '%Y-%m-%d') as stat_date_str,
|
|
|
+ YEAR(d.stat_date) as stat_year,
|
|
|
+ MONTH(d.stat_date) as stat_month,
|
|
|
+ DAY(d.stat_date) as stat_day,
|
|
|
+ DATE_FORMAT(d.stat_date, '%Y-%m') as month_year_str,
|
|
|
+ DAYOFWEEK(d.stat_date) as day_of_week,
|
|
|
+ CASE DAYOFWEEK(d.stat_date)
|
|
|
+ WHEN 1 THEN '周日'
|
|
|
+ WHEN 2 THEN '周一'
|
|
|
+ WHEN 3 THEN '周二'
|
|
|
+ WHEN 4 THEN '周三'
|
|
|
+ WHEN 5 THEN '周四'
|
|
|
+ WHEN 6 THEN '周五'
|
|
|
+ WHEN 7 THEN '周六'
|
|
|
+ END as day_name,
|
|
|
+ COALESCE(w.product_id, 0) as product_id,
|
|
|
+ COALESCE(w.product_code, '') as product_code,
|
|
|
+ COALESCE(w.product_name, '') as product_name,
|
|
|
+ COALESCE(w.product_spc, '') as product_spc,
|
|
|
+ COALESCE(w.unit_of_measure, '') as unit_of_measure,
|
|
|
+ COALESCE(w.workorder_count, 0) as workorder_count,
|
|
|
+ COALESCE(w.total_quantity, 0) as total_quantity,
|
|
|
+ COALESCE(w.total_produced_quantity, 0) as total_produced_quantity,
|
|
|
+ COALESCE(w.total_scheduled_quantity, 0) as total_scheduled_quantity,
|
|
|
+ COALESCE(w.total_changed_quantity, 0) as total_changed_quantity,
|
|
|
+ COALESCE(w.total_incomplete_quantity, 0) as total_incomplete_quantity,
|
|
|
+ COALESCE(w.completion_rate, 0.00) as completion_rate,
|
|
|
+ COALESCE(w.scheduling_rate, 0.00) as scheduling_rate,
|
|
|
+ w.earliest_request_date,
|
|
|
+ w.latest_request_date,
|
|
|
+ COALESCE(w.all_statuses, '') as all_statuses
|
|
|
+ FROM (
|
|
|
+ SELECT DATE_SUB(CURDATE(), INTERVAL nums.n DAY) AS stat_date
|
|
|
+ FROM (
|
|
|
+ SELECT 0 AS n UNION ALL
|
|
|
+ SELECT 1 UNION ALL
|
|
|
+ SELECT 2 UNION ALL
|
|
|
+ SELECT 3 UNION ALL
|
|
|
+ SELECT 4 UNION ALL
|
|
|
+ SELECT 5 UNION ALL
|
|
|
+ SELECT 6
|
|
|
+ ) nums
|
|
|
+ ) d
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ DATE(create_time) as work_date,
|
|
|
+ product_id,
|
|
|
+ product_code,
|
|
|
+ product_name,
|
|
|
+ product_spc,
|
|
|
+ unit_of_measure,
|
|
|
+ COUNT(*) as workorder_count,
|
|
|
+ SUM(quantity) as total_quantity,
|
|
|
+ SUM(COALESCE(quantity_produced, 0)) as total_produced_quantity,
|
|
|
+ SUM(COALESCE(quantity_scheduled, 0)) as total_scheduled_quantity,
|
|
|
+ SUM(COALESCE(quantity_changed, 0)) as total_changed_quantity,
|
|
|
+ SUM(quantity - COALESCE(quantity_produced, 0)) as total_incomplete_quantity,
|
|
|
+ CASE
|
|
|
+ WHEN SUM(quantity) > 0
|
|
|
+ THEN ROUND(SUM(COALESCE(quantity_produced, 0)) * 100.0 / SUM(quantity), 2)
|
|
|
+ ELSE 0.00
|
|
|
+ END as completion_rate,
|
|
|
+ CASE
|
|
|
+ WHEN SUM(quantity) > 0
|
|
|
+ THEN ROUND(SUM(COALESCE(quantity_scheduled, 0)) * 100.0 / SUM(quantity), 2)
|
|
|
+ ELSE 0.00
|
|
|
+ END as scheduling_rate,
|
|
|
+ MIN(request_date) as earliest_request_date,
|
|
|
+ MAX(request_date) as latest_request_date,
|
|
|
+ GROUP_CONCAT(DISTINCT status) as all_statuses
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ AND create_time >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
|
|
|
+ <if test="productIds != null and productIds != ''">
|
|
|
+ AND product_id IN
|
|
|
+ <foreach collection="productIds.split(',')" item="productId" open="(" separator="," close=")">
|
|
|
+ #{productId}
|
|
|
+ </foreach>
|
|
|
+ </if>
|
|
|
+ GROUP BY DATE(create_time), product_id, product_code, product_name, product_spc, unit_of_measure
|
|
|
+ ) w ON d.stat_date = w.work_date
|
|
|
+ ORDER BY d.stat_date DESC, w.product_id ASC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- TODO -->
|
|
|
+ <!-- 统计月预计工单完成总量 -->
|
|
|
+ <select id="countMonthlyWorkorders" resultType="int">
|
|
|
+ SELECT COUNT(*)
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取月交易总额统计 -->
|
|
|
+ <select id="getMonthlyTransactionTotal" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ COALESCE(SUM(CASE WHEN wps.status = 'FINISHED' THEN wpsl.price * wpsl.quantity_salse ELSE 0 END), 0) as salesTotal,
|
|
|
+ 0 as purchaseTotal
|
|
|
+ FROM wm_product_salse wps
|
|
|
+ LEFT JOIN wm_product_salse_line wpsl ON wps.salse_id = wpsl.salse_id
|
|
|
+ WHERE DATE_FORMAT(wps.salse_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 统计月未完成工单数 -->
|
|
|
+ <select id="countMonthlyIncompleteWorkorders" resultType="int">
|
|
|
+ SELECT COUNT(*)
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ AND DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
|
|
|
+ </select>
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 获取出货统计 -->
|
|
|
+ <select id="getShipmentStatistics" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ COALESCE(SUM(CASE WHEN status = 'FINISHED' THEN 1 ELSE 0 END), 0) as finishedQuantity,
|
|
|
+ COALESCE(COUNT(*), 0) as plannedQuantity
|
|
|
+ FROM wm_product_salse
|
|
|
+ WHERE DATE_FORMAT(salse_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取人员周考勤统计 -->
|
|
|
+ <select id="getWeeklyAttendanceStatistics" resultType="java.util.Map">
|
|
|
+ <![CDATA[
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT user_name) as totalEmployees,
|
|
|
+ COUNT(*) as totalAttendanceDays,
|
|
|
+ CASE
|
|
|
+ WHEN COUNT(DISTINCT user_name) > 0
|
|
|
+ THEN ROUND(COUNT(*) / COUNT(DISTINCT user_name), 2)
|
|
|
+ ELSE 0
|
|
|
+ END as averageAttendanceDays
|
|
|
+ FROM pro_workrecord
|
|
|
+ WHERE operation_time >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
|
|
|
+ AND operation_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY)
|
|
|
+ ]]>
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取设备预处理统计 -->
|
|
|
+ <select id="getEquipmentPreprocessingStatistics" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ COUNT(*) as totalEquipment,
|
|
|
+ COUNT(CASE WHEN status = 'NORMAL' THEN 1 END) as normalEquipment,
|
|
|
+ COUNT(CASE WHEN status = 'MAINTENANCE' THEN 1 END) as maintenanceEquipment,
|
|
|
+ COUNT(CASE WHEN status = 'OFFLINE' THEN 1 END) as offlineEquipment,
|
|
|
+ CASE
|
|
|
+ WHEN COUNT(*) > 0
|
|
|
+ THEN ROUND((COUNT(CASE WHEN status = 'NORMAL' THEN 1 END) / COUNT(*)) * 100, 2)
|
|
|
+ ELSE 0
|
|
|
+ END as utilizationRate
|
|
|
+ FROM dv_machinery
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取年度出货统计 -->
|
|
|
+ <select id="getMonthlyShipmentStatistics" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(salse_date, '%Y-%m') as month,
|
|
|
+ COUNT(*) as totalOrders,
|
|
|
+ COUNT(CASE WHEN status = 'FINISHED' THEN 1 END) as finishedOrders,
|
|
|
+ COALESCE(SUM(total_amount), 0) as totalAmount
|
|
|
+ FROM wm_product_salse
|
|
|
+ WHERE salse_date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
|
|
|
+ GROUP BY DATE_FORMAT(salse_date, '%Y-%m')
|
|
|
+ ORDER BY month DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取生产工单统计 -->
|
|
|
+ <select id="selectProductionWorkorderStatistics" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(create_time, '%Y-%m-%d') as statisticsDate,
|
|
|
+ COUNT(*) as totalWorkorders,
|
|
|
+ COUNT(CASE WHEN status = 'FINISHED' THEN 1 END) as finishedWorkorders,
|
|
|
+ COUNT(CASE WHEN status NOT IN ('PREPARE', 'FINISHED') THEN 1 END) as inProgressWorkorders,
|
|
|
+ SUM(quantity) as totalQuantity,
|
|
|
+ SUM(COALESCE(quantity_produced, 0)) as totalProducedQuantity
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status != 'PREPARE'
|
|
|
+ AND create_time >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
|
|
|
+ GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
|
|
|
+ ORDER BY statisticsDate DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取当日未完成工单产品统计(相同产品合并) -->
|
|
|
+ <select id="selectDailyIncompleteWorkorderProducts" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ product_name as productName,
|
|
|
+ product_id as productId,
|
|
|
+ COUNT(*) as workorderCount,
|
|
|
+ SUM(quantity) as totalQuantity,
|
|
|
+ SUM(COALESCE(quantity_produced, 0)) as totalProducedQuantity,
|
|
|
+ SUM(quantity - COALESCE(quantity_produced, 0)) as totalIncompleteQuantity,
|
|
|
+ CASE
|
|
|
+ WHEN SUM(quantity) > 0 THEN ROUND((SUM(COALESCE(quantity_produced, 0)) / SUM(quantity)) * 100, 2)
|
|
|
+ ELSE 0
|
|
|
+ END as completionRate
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ AND DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(CURDATE(), '%Y-%m-%d')
|
|
|
+ GROUP BY product_id, product_name
|
|
|
+ ORDER BY totalIncompleteQuantity DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 获取一周内工单合格率统计 -->
|
|
|
+ <select id="selectWeeklyQualifiedWorkorderStatistics" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ item_code AS itemCode,
|
|
|
+ item_name AS itemName,
|
|
|
+ workstation_name AS workName,
|
|
|
+ quantity_check AS checkQty,
|
|
|
+ quantity_unqualified AS fail,
|
|
|
+ quantity_qualified AS pass,
|
|
|
+ inspect_date,
|
|
|
+ CASE
|
|
|
+ WHEN quantity_check > 0
|
|
|
+ THEN ROUND(quantity_qualified * 100.0 / quantity_check, 2)
|
|
|
+ ELSE 0.00
|
|
|
+ END AS qualified_rate
|
|
|
+ FROM qc_ipqc
|
|
|
+ WHERE status = 'FINISHED'
|
|
|
+ AND inspect_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
|
|
|
+ <if test="qualifiedRate != null and qualifiedRate != ''">
|
|
|
+ AND CASE
|
|
|
+ WHEN quantity_check > 0
|
|
|
+ THEN ROUND(quantity_qualified * 100.0 / quantity_check, 2)
|
|
|
+ ELSE 0.00
|
|
|
+ END < #{qualifiedRate}
|
|
|
+ </if>
|
|
|
+ ORDER BY inspect_date DESC,
|
|
|
+ CASE
|
|
|
+ WHEN quantity_check > 0
|
|
|
+ THEN ROUND(quantity_qualified * 100.0 / quantity_check, 2)
|
|
|
+ ELSE 0.00
|
|
|
+ END ASC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 获取未排产工单统计 -->
|
|
|
+ <select id="selectUnplannedWorkorderStatistics" resultType="java.util.Map">
|
|
|
+ <![CDATA[
|
|
|
+ SELECT
|
|
|
+ d.week_start_date,
|
|
|
+ d.week_end_date,
|
|
|
+ d.week_number,
|
|
|
+ d.year_week,
|
|
|
+ COALESCE(w.total_unplanned_workorders, 0) AS total_unplanned_workorders,
|
|
|
+ COALESCE(w.total_unplanned_quantity, 0) AS total_unplanned_quantity,
|
|
|
+ GROUP_CONCAT(DISTINCT w.status ORDER BY w.status) AS unplanned_statuses
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ 0 AS week_offset,
|
|
|
+ DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 DAY) AS week_start_date,
|
|
|
+ DATE_ADD(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 DAY), INTERVAL 6 DAY) AS week_end_date,
|
|
|
+ WEEK(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 DAY), 1) AS week_number,
|
|
|
+ DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 DAY), '%Y-%u') AS year_week
|
|
|
+ UNION ALL
|
|
|
+ SELECT
|
|
|
+ 1 AS week_offset,
|
|
|
+ DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 7 DAY) AS week_start_date,
|
|
|
+ DATE_ADD(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 7 DAY), INTERVAL 6 DAY) AS week_end_date,
|
|
|
+ WEEK(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 7 DAY), 1) AS week_number,
|
|
|
+ DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 7 DAY), '%Y-%u') AS year_week
|
|
|
+ UNION ALL
|
|
|
+ SELECT
|
|
|
+ 2 AS week_offset,
|
|
|
+ DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 14 DAY) AS week_start_date,
|
|
|
+ DATE_ADD(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 14 DAY), INTERVAL 6 DAY) AS week_end_date,
|
|
|
+ WEEK(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 14 DAY), 1) AS week_number,
|
|
|
+ DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 14 DAY), '%Y-%u') AS year_week
|
|
|
+ UNION ALL
|
|
|
+ SELECT
|
|
|
+ 3 AS week_offset,
|
|
|
+ DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 21 DAY) AS week_start_date,
|
|
|
+ DATE_ADD(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 21 DAY), INTERVAL 6 DAY) AS week_end_date,
|
|
|
+ WEEK(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 21 DAY), 1) AS week_number,
|
|
|
+ DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2 + 7) % 7 + 21 DAY), '%Y-%u') AS year_week
|
|
|
+ ) d
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(create_time, '%Y-%u') AS year_week,
|
|
|
+ COUNT(*) AS total_unplanned_workorders,
|
|
|
+ SUM(quantity) AS total_unplanned_quantity,
|
|
|
+ status
|
|
|
+ FROM pro_workorder
|
|
|
+ WHERE status IS NOT NULL
|
|
|
+ AND status NOT IN ('PREPARE', 'FINISHED')
|
|
|
+ AND create_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
|
|
|
+ GROUP BY DATE_FORMAT(create_time, '%Y-%u'), status
|
|
|
+ ) w ON d.year_week = w.year_week
|
|
|
+ GROUP BY d.week_start_date, d.week_end_date, d.week_number, d.year_week
|
|
|
+ ORDER BY d.week_start_date DESC
|
|
|
+ ]]>
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <select id="selectWmProductSalseLineList" resultType="java.util.Map">
|
|
|
+ select line_id, salse_id, material_stock_id, item_id, item_code, item_name, specification, unit_of_measure, (select measure_name from md_unit_measure where measure_code = unit_of_measure) measure_name
|
|
|
+ , quantity_salse, batch_code, warehouse_id, warehouse_code, warehouse_name, location_id, location_code, location_name, area_id, area_code, area_name, oqc_check,oqc_id,oqc_code
|
|
|
+ , remark, price, cess, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_product_salse_line
|
|
|
+ order by create_time desc
|
|
|
+ </select>
|
|
|
+</mapper>
|