Files
smart_management_dev/src/main/resources/mybatis/wisdom/RkStatisticsMapper.xml

295 lines
10 KiB
XML
Raw Normal View History

2025-08-26 17:01:43 +08:00
<?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.zg.project.wisdom.mapper.RkStatisticsMapper">
2026-02-02 08:06:58 +08:00
<!-- 当前入库类型统计 -->
<select id="statCurrentInByOperationType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
2025-08-26 17:01:43 +08:00
SELECT
2026-02-02 08:06:58 +08:00
ri.operation_type AS groupValue,
IFNULL(SUM(ri.real_qty * ri.ht_dj), 0) AS totalAmount,
COUNT(DISTINCT ri.pcode) AS locationCount,
IFNULL(SUM(ri.real_qty), 0) AS totalQuantity,
COUNT(DISTINCT ri.xm_no) AS projectCount
2025-08-26 17:01:43 +08:00
FROM rk_info ri
2026-02-02 08:06:58 +08:00
WHERE ri.exec_status = 1
2025-08-26 17:01:43 +08:00
AND ri.is_chuku = 0
2026-02-02 08:06:58 +08:00
AND ri.is_delete = 0
GROUP BY ri.operation_type
2025-08-26 17:01:43 +08:00
</select>
2026-02-02 08:06:58 +08:00
<!-- 当前物资类型统计 -->
<select id="statCurrentByMaterialType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
2025-08-26 17:01:43 +08:00
SELECT
2026-02-02 08:06:58 +08:00
ri.wl_type AS groupValue,
IFNULL(SUM(ri.real_qty * ri.ht_dj), 0) AS totalAmount,
COUNT(DISTINCT ri.pcode) AS locationCount,
IFNULL(SUM(ri.real_qty), 0) AS totalQuantity,
COUNT(DISTINCT ri.xm_no) AS projectCount
2025-08-26 17:01:43 +08:00
FROM rk_info ri
2026-02-02 08:06:58 +08:00
WHERE ri.exec_status = 1
2025-08-26 17:01:43 +08:00
AND ri.is_chuku = 0
2026-02-02 08:06:58 +08:00
AND ri.is_delete = 0
GROUP BY ri.wl_type
2025-08-26 17:01:43 +08:00
</select>
2026-02-02 08:06:58 +08:00
<!-- 入库类型统计(时间) -->
<select id="statInByOperationType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
2025-08-26 17:01:43 +08:00
SELECT
2026-02-02 08:06:58 +08:00
ri.operation_type AS groupValue,
IFNULL(SUM(ri.real_qty * ri.ht_dj), 0) AS totalAmount,
COUNT(DISTINCT ri.pcode) AS locationCount,
IFNULL(SUM(ri.real_qty), 0) AS totalQuantity,
COUNT(DISTINCT ri.xm_no) AS projectCount
2025-08-26 17:01:43 +08:00
FROM rk_info ri
2026-02-02 08:06:58 +08:00
WHERE ri.exec_status = 1
2025-08-26 17:01:43 +08:00
AND ri.is_chuku = 0
2026-02-02 08:06:58 +08:00
AND ri.is_delete = 0
<if test="startDate != null">
AND ri.operation_time <![CDATA[>=]]> #{startDate}
</if>
<if test="endDate != null">
AND ri.operation_time <![CDATA[<=]]> #{endDate}
</if>
GROUP BY ri.operation_type
2025-08-26 17:01:43 +08:00
</select>
2026-02-02 08:06:58 +08:00
<!-- 出库类型统计(时间) -->
<select id="statOutByOperationType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
2025-08-26 17:01:43 +08:00
SELECT
2026-02-02 08:06:58 +08:00
ri.operation_type AS groupValue,
IFNULL(SUM(ri.real_qty * ri.ht_dj), 0) AS totalAmount,
COUNT(DISTINCT ri.pcode) AS locationCount,
IFNULL(SUM(ri.real_qty), 0) AS totalQuantity,
COUNT(DISTINCT ri.xm_no) AS projectCount
2025-08-26 17:01:43 +08:00
FROM rk_info ri
2026-02-02 08:06:58 +08:00
WHERE ri.exec_status = 1
AND ri.is_chuku = 1
AND ri.is_delete = 0
<if test="startDate != null">
AND ri.operation_time <![CDATA[>=]]> #{startDate}
</if>
<if test="endDate != null">
AND ri.operation_time <![CDATA[<=]]> #{endDate}
</if>
GROUP BY ri.operation_type
2025-08-26 17:01:43 +08:00
</select>
2026-02-02 08:06:58 +08:00
<select id="statHomeKpi"
resultType="com.zg.project.wisdom.domain.vo.HomeKpiVO">
2025-08-26 17:01:43 +08:00
SELECT
2026-02-02 08:06:58 +08:00
/* 月入库 */
COUNT(CASE WHEN ri.is_chuku = 0
AND DATE_FORMAT(ri.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN 1 END) AS monthInCount,
2025-08-26 17:01:43 +08:00
2026-02-02 08:06:58 +08:00
COUNT(DISTINCT CASE WHEN ri.is_chuku = 0
AND DATE_FORMAT(ri.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN ri.xm_no END) AS monthInProjectCount,
2025-08-26 17:01:43 +08:00
2026-02-02 08:06:58 +08:00
IFNULL(SUM(CASE WHEN ri.is_chuku = 0
AND DATE_FORMAT(ri.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN ri.real_qty * ri.ht_dj END),0) AS monthInAmount,
2025-08-26 17:01:43 +08:00
2026-02-02 08:06:58 +08:00
/* 月出库 */
COUNT(CASE WHEN ri.is_chuku = 1
AND DATE_FORMAT(ri.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN 1 END) AS monthOutCount,
2025-08-26 17:01:43 +08:00
2026-02-02 08:06:58 +08:00
COUNT(DISTINCT CASE WHEN ri.is_chuku = 1
AND DATE_FORMAT(ri.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN ri.xm_no END) AS monthOutProjectCount,
2025-08-26 17:01:43 +08:00
2026-02-02 08:06:58 +08:00
IFNULL(SUM(CASE WHEN ri.is_chuku = 1
AND DATE_FORMAT(ri.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN ri.real_qty * ri.ht_dj END),0) AS monthOutAmount
2025-08-26 17:01:43 +08:00
FROM rk_info ri
2026-02-02 08:06:58 +08:00
WHERE ri.exec_status = 1
AND ri.is_delete = 0
2025-08-26 17:01:43 +08:00
</select>
<select id="selectStockAgeStat" resultType="com.zg.project.wisdom.domain.vo.StockAgeStatVO">
<![CDATA[
SELECT '10-20天' AS name, COUNT(*) AS value
FROM rk_info ri
WHERE ri.is_delete = '0'
AND ri.is_chuku = '0'
AND ri.operation_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) > 10
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) <= 20
UNION ALL
SELECT '20-30天' AS name, COUNT(*) AS value
FROM rk_info ri
WHERE ri.is_delete = '0'
AND ri.is_chuku = '0'
AND ri.operation_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) > 20
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) <= 30
UNION ALL
SELECT '30天以上' AS name, COUNT(*) AS value
FROM rk_info ri
WHERE ri.is_delete = '0'
AND ri.is_chuku = '0'
AND ri.operation_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) > 30
UNION ALL
SELECT '30-60天' AS name, COUNT(*) AS value
FROM rk_info ri
WHERE ri.is_delete = '0'
AND ri.is_chuku = '0'
AND ri.operation_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) > 30
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) <= 60
UNION ALL
SELECT '60天以上' AS name, COUNT(*) AS value
FROM rk_info ri
WHERE ri.is_delete = '0'
AND ri.is_chuku = '0'
AND ri.operation_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) > 60
]]>
</select>
<select id="selectTodoStat" resultType="com.zg.project.wisdom.domain.vo.TodoStatVO">
<![CDATA[
SELECT
'应到未到[部分未到]' AS type,
COUNT(DISTINCT g.xm_no) AS projectCnt,
ROUND(
COALESCE(
SUM(GREATEST(g.jh_qty - g.real_qty, 0)),
0
),
3
) AS totalQty,
ROUND(
COALESCE(
SUM(GREATEST(g.jh_qty - g.real_qty, 0) * g.ht_dj),
0
),
3
) AS totalAmt
FROM gys_jh g
WHERE g.is_delete = '0'
AND g.status = '2'
UNION ALL
SELECT
'应到未到[全部未到]' AS type,
COUNT(DISTINCT g.xm_no) AS projectCnt,
ROUND(
COALESCE(
SUM(g.jh_qty),
0
),
3
) AS totalQty,
ROUND(
COALESCE(
SUM(g.jh_qty * g.ht_dj),
0
),
3
) AS totalAmt
FROM gys_jh g
WHERE g.is_delete = '0'
AND g.status = '0'
2025-09-04 16:55:56 +08:00
UNION ALL
SELECT
'应出未出[全部未出]' AS type,
COUNT(DISTINCT g.xm_no) AS projectCnt,
ROUND(
COALESCE(
SUM(g.real_qty),
0
),
3
) AS totalQty,
ROUND(
COALESCE(
SUM(g.real_qty * g.ht_dj),
0
),
3
) AS totalAmt
FROM gys_jh g
WHERE g.is_delete = '0'
AND g.status = '1';
]]>
</select>
<select id="selectWarehouseSlotStat"
resultType="com.zg.project.wisdom.domain.vo.WarehouseSlotStatVO">
<![CDATA[
SELECT
p.warehouse_code AS cangkuCode,
p.warehouse_name AS cangkuName,
2025-09-04 16:55:56 +08:00
COUNT(DISTINCT p.pcode) AS totalSlot,
COUNT(DISTINCT CASE WHEN r.id IS NOT NULL THEN p.pcode END) AS usedSlot,
COUNT(DISTINCT p.pcode)
- COUNT(DISTINCT CASE WHEN r.id IS NOT NULL THEN p.pcode END) AS unusedSlot
FROM pcde_detail p
LEFT JOIN rk_info r
ON r.pcode = p.pcode
AND r.cangku = p.warehouse_code
AND r.is_delete = '0'
AND r.is_chuku = '0'
WHERE p.is_delete = '0'
AND p.warehouse_name IS NOT NULL
AND TRIM(p.warehouse_name) <> ''
GROUP BY p.warehouse_code, p.warehouse_name
ORDER BY p.warehouse_code
]]>
</select>
<select id="selectStockAgeExport30"
resultType="com.zg.project.wisdom.domain.vo.StockAgeExportVO">
<![CDATA[
SELECT
CASE
WHEN TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) >= 60 THEN '>60天'
ELSE '>30天'
END AS stockAgeGroup,
ri.id AS id,
ri.xm_no AS projectNo,
ri.xm_ms AS projectDesc,
ri.operation_time AS inTime,
TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) AS stockAgeDays,
ri.ht_dj AS unitPrice,
ri.real_qty AS qty,
ROUND(COALESCE(ri.ht_dj, 0) * COALESCE(ri.real_qty, 0), 3) AS lineAmount,
ri.pcode AS slotCode,
ri.tray_code AS trayCode,
ri.bill_no AS billNo
FROM rk_info ri
WHERE ri.is_delete = '0'
AND ri.is_chuku = '0'
AND ri.operation_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, ri.operation_time, NOW()) >= 30
ORDER BY
stockAgeGroup DESC,
stockAgeDays DESC,
ri.operation_time ASC
]]>
</select>
2025-08-26 17:01:43 +08:00
</mapper>