Files
smart_management_dev/src/main/resources/mybatis/wisdom/RkStatisticsMapper.xml
wenshijun d141676788 首页统计接口修改
配送修改状态修改
2026-02-04 16:32:37 +08:00

348 lines
11 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.zg.project.wisdom.mapper.RkStatisticsMapper">
<!-- 当前入库类型统计 -->
<select id="statCurrentInByOperationType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
SELECT
ri.operation_type AS groupValue,
sit.type_name AS groupName,
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
FROM rk_info ri
LEFT JOIN stock_in_type sit
ON sit.type_code = ri.operation_type
AND sit.status = 1
WHERE ri.exec_status = 1
AND ri.is_chuku = 0
AND ri.is_delete = 0
GROUP BY ri.operation_type, sit.type_name
</select>
<!-- 当前物资类型统计 -->
<select id="statCurrentByMaterialType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
SELECT
ri.wl_type AS groupValue,
mt.type_name AS groupName,
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
FROM rk_info ri
LEFT JOIN material_type mt
ON mt.type_code = ri.wl_type
AND mt.status = 1
WHERE ri.exec_status = 1
AND ri.is_chuku = 0
AND ri.is_delete = 0
GROUP BY ri.wl_type, mt.type_name
</select>
<!-- 入库类型统计(时间) -->
<select id="statInByOperationType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
SELECT
ri.operation_type AS groupValue,
sit.type_name AS groupName,
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
FROM rk_info ri
LEFT JOIN stock_in_type sit
ON sit.type_code = ri.operation_type
AND sit.status = 1
WHERE ri.exec_status = 1
AND ri.is_chuku = 0
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, sit.type_name
</select>
<!-- 出库类型统计(时间) -->
<select id="statOutByOperationType"
resultType="com.zg.project.wisdom.domain.vo.StockStatisticGroupVO">
SELECT
rr.operation_type AS groupValue,
sot.type_name AS groupName,
IFNULL(SUM(rr.real_qty * rr.ht_dj), 0) AS totalAmount,
COUNT(DISTINCT rr.pcode) AS locationCount,
IFNULL(SUM(rr.real_qty), 0) AS totalQuantity,
COUNT(DISTINCT rr.xm_no) AS projectCount
FROM rk_record rr
LEFT JOIN stock_out_type sot
ON sot.type_code = rr.operation_type
AND sot.is_delete = '0'
WHERE rr.exec_status = '1'
AND rr.biz_type = '1' <!-- 出库 -->
AND rr.is_delete = '0'
<if test="startDate != null">
AND rr.operation_time <![CDATA[>=]]> #{startDate}
</if>
<if test="endDate != null">
AND rr.operation_time <![CDATA[<=]]> #{endDate}
</if>
GROUP BY rr.operation_type, sot.type_name
</select>
<select id="statHomeKpi"
resultType="com.zg.project.wisdom.domain.vo.HomeKpiVO">
SELECT
/* ===== 月入库 ===== */
COUNT(CASE WHEN rr.biz_type = '0'
AND DATE_FORMAT(rr.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN 1 END) AS monthInCount,
COUNT(DISTINCT CASE WHEN rr.biz_type = '0'
AND DATE_FORMAT(rr.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN rr.xm_no END) AS monthInProjectCount,
IFNULL(SUM(CASE WHEN rr.biz_type = '0'
AND DATE_FORMAT(rr.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN rr.real_qty * rr.ht_dj END),0) AS monthInAmount,
/* ===== 月出库 ===== */
COUNT(CASE WHEN rr.biz_type = '1'
AND DATE_FORMAT(rr.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN 1 END) AS monthOutCount,
COUNT(DISTINCT CASE WHEN rr.biz_type = '1'
AND DATE_FORMAT(rr.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN rr.xm_no END) AS monthOutProjectCount,
IFNULL(SUM(CASE WHEN rr.biz_type = '1'
AND DATE_FORMAT(rr.operation_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
THEN rr.real_qty * rr.ht_dj END),0) AS monthOutAmount
FROM rk_record rr
WHERE rr.exec_status = '1'
AND rr.is_delete = '0'
</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'
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,
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>
</mapper>