库存记录报表:前端首次查询默认当天日期,后端sql优化

This commit is contained in:
zds
2024-08-19 13:48:28 +08:00
parent 9c1c722142
commit ade7016114
3 changed files with 110 additions and 62 deletions

View File

@@ -8,56 +8,83 @@
<select id="queryAll" resultType="org.nl.wms.sch.data.service.dto.MaterialDataResponse">
SELECT
supplierCode,
MAX(md.supplierName) AS supplierName,
productName,
specification,
MAX(batch) AS batch,
MAX(barLevel) AS barLevel,
DATE_FORMAT(md.createTime, '%Y-%m-%d') AS date,
COALESCE(SUM(CASE WHEN md.type = 1 THEN md.length ELSE 0 END), 0) AS ll_length,
COALESCE(SUM(CASE WHEN md.type = 1 THEN md.weight ELSE 0 END), 0) AS ll_weight,
COALESCE(SUM(CASE WHEN md.type = 2 THEN md.length ELSE 0 END), 0) AS sc_length,
COALESCE(SUM(CASE WHEN md.type = 2 THEN md.weight ELSE 0 END), 0) AS sc_weight,
COALESCE(
(SELECT
SUM(CASE WHEN type = 1 THEN length ELSE 0 END) - SUM(CASE WHEN type = 2 THEN length ELSE 0 END)
FROM material_data
WHERE
supplierCode = md.supplierCode AND
createTime <![CDATA[ < ]]> DATE_FORMAT(DATE_SUB(CONCAT(YEAR(#{query.start_time}), '-', MONTH(#{query.start_time}), '-01'), INTERVAL 1 DAY), '%Y-%m-%d')
), 0) AS sy_length,
COALESCE(
(SELECT
SUM(CASE WHEN type = 1 THEN weight ELSE 0 END) - SUM(CASE WHEN type = 2 THEN weight ELSE 0 END)
FROM material_data
WHERE
supplierCode = md.supplierCode AND
createTime <![CDATA[ < ]]> DATE_FORMAT(DATE_SUB(CONCAT(YEAR(#{query.start_time}), '-', DAY(#{query.start_time}), '-01'), INTERVAL 1 DAY), '%Y-%m-%d')
), 0) AS sy_weight,
COALESCE(
(SELECT
SUM(CASE WHEN type = 1 THEN length ELSE 0 END) - SUM(CASE WHEN type = 2 THEN length ELSE 0 END)
FROM material_data
WHERE
supplierCode = md.supplierCode and productName = md.productName and specification = md.specification
), 0) AS jc_length,
COALESCE(
(SELECT
SUM(CASE WHEN type = 1 THEN weight ELSE 0 END) - SUM(CASE WHEN type = 2 THEN weight ELSE 0 END)
FROM material_data
WHERE
supplierCode = md.supplierCode and productName =md.productName and specification = md.specification
), 0) AS jc_weight
FROM
material_data md
WHERE
DATE_FORMAT(md.createTime, '%Y-%m-%d') = DATE_FORMAT(#{query.start_time}, '%Y-%m-%d')
GROUP BY
md.productName,md.specification,supplierCode, DATE_FORMAT(md.createTime, '%Y-%m-%d')
ORDER BY
md.supplierCode, md.productName
supplierCode,
MAX( md.supplierName ) AS supplierName,
productName,
specification,
MAX( batch ) AS batch,
MAX( barLevel ) AS barLevel,
DATE_FORMAT( md.createTime, '%Y-%m-%d' ) AS date,
COALESCE ( SUM( CASE WHEN md.type = 1 THEN md.length ELSE 0 END ), 0 ) AS ll_length,
COALESCE ( SUM( CASE WHEN md.type = 1 THEN md.weight ELSE 0 END ), 0 ) AS ll_weight,
COALESCE ( SUM( CASE WHEN md.type = 2 THEN md.length ELSE 0 END ), 0 ) AS sc_length,
COALESCE ( SUM( CASE WHEN md.type = 2 THEN md.weight ELSE 0 END ), 0 ) AS sc_weight,
COALESCE (
(
SELECT
SUM( CASE WHEN type = 1 THEN length ELSE 0 END ) - SUM( CASE WHEN type = 2 THEN length ELSE 0 END )
FROM
material_data
WHERE
supplierCode = md.supplierCode
AND productName = md.productName
AND specification = md.specification
AND createTime like CONCAT(DATE_FORMAT(DATE_SUB( #{query.start_time}, INTERVAL 1 DAY ), '%Y-%m-%d') , '%')
),
0
) AS sy_length,
COALESCE (
(
SELECT
SUM( CASE WHEN type = 1 THEN weight ELSE 0 END ) - SUM( CASE WHEN type = 2 THEN weight ELSE 0 END )
FROM
material_data
WHERE
supplierCode = md.supplierCode
AND productName = md.productName
AND specification = md.specification
AND createTime like CONCAT(DATE_FORMAT(DATE_SUB( #{query.start_time}, INTERVAL 1 DAY ), '%Y-%m-%d') , '%')
),
0
) AS sy_weight,
COALESCE (
(
SELECT
SUM( CASE WHEN type = 1 THEN length ELSE 0 END ) - SUM( CASE WHEN type = 2 THEN length ELSE 0 END )
FROM
material_data
WHERE
supplierCode = md.supplierCode
AND productName = md.productName
AND specification = md.specification
),
0
) AS jc_length,
COALESCE (
(
SELECT
SUM( CASE WHEN type = 1 THEN weight ELSE 0 END ) - SUM( CASE WHEN type = 2 THEN weight ELSE 0 END )
FROM
material_data
WHERE
supplierCode = md.supplierCode
AND productName = md.productName
AND specification = md.specification
),
0
) AS jc_weight
FROM
material_data md
WHERE
DATE_FORMAT( md.createTime, '%Y-%m-%d' ) = DATE_FORMAT( #{query.start_time}, '%Y-%m-%d' )
GROUP BY
md.productName,
md.specification,
supplierCode,
DATE_FORMAT( md.createTime, '%Y-%m-%d' )
ORDER BY
md.supplierCode,
md.productName
</select>