refactor(factoryinfo): 重构工厂信息查询 SQL

- 修改了 SQL 查询的结构,优化了表的连接方式
- 将结算月份参数化,提高查询灵活性
- 调整了工厂信息的获取方式,直接使用 sf_factory_info 表
- 优化了计算逻辑,使配件和支出的计算更加清晰
This commit is contained in:
furongxin 2025-03-04 22:24:01 +08:00
parent c0d0515fe5
commit 940918d2b8

View File

@ -44,9 +44,9 @@
system_customer_settlement scs
)
SELECT
scs.customer_id AS factoryId,
factory.short_name AS factoryName,
scs.settlement_month,-- 收入明细
sf.id AS factoryId,
sf.short_name AS factoryName,
#{month} AS settlementMonth,-- 收入明细
SUM( CASE WHEN ssi.business_type = 1 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS forkliftRevenue,-- 叉车收入
SUM( CASE WHEN ssi.business_type = 2 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS packageRevenue,-- 打包收入
SUM( CASE WHEN ssi.business_type = 3 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS porterageRevenue,-- 搬运收入
@ -63,19 +63,19 @@
COALESCE ( sss.porterageSalary, 0.00 ) AS porterageSalary,-- 搬运实发工资
COALESCE ( sss.transportSalary, 0.00 ) AS transportSalary,-- 运输实发工资
COALESCE ( sss.otherSalary, 0.00 ) AS otherSalary,-- 其他实发工资
COALESCE ( iii.forkliftAccessories + sac.forklift_accessories, 0.00 ) AS forkliftAccessories, -- 叉车配件
COALESCE ( iii.packageAccessories + sac.package_accessories, 0.00 ) AS packageAccessories, -- 打包配件
COALESCE ( iii.transportationAmount + sac.transportation_amount, 0.00 ) AS transportationAmount, -- 搬运劳保
COALESCE ( iii.forkliftAccessories, 0.00 ) + COALESCE ( sac.forklift_accessories, 0.00 ) AS forkliftAccessories, -- 叉车配件
COALESCE ( iii.packageAccessories, 0.00 ) + COALESCE ( sac.package_accessories, 0.00 ) AS packageAccessories, -- 打包配件
COALESCE ( iii.transportationAmount, 0.00 ) + COALESCE ( sac.transportation_amount, 0.00 ) AS transportationAmount, -- 搬运劳保
COALESCE ( iii.injuryAmount, 0.00 ) AS injuryAmount, -- 工伤赔偿
COALESCE ( loan.loanAmount, 0.00 ) AS loanAmount, -- 工资及借支
COALESCE ( iii.travelExpenses, 0.00 ) AS travelExpenses, -- 差旅费用
COALESCE ( iii.otherAmount, 0.00 ) AS otherAmount, -- 其他
COALESCE ( iii.forkliftExpenses + sac.forklift_accessories, 0.00 ) AS forkliftExpenses, -- 叉车支出
COALESCE ( iii.packageExpenses + sac.package_accessories, 0.00 ) AS packageExpenses, -- 打包支出
COALESCE ( iii.transportationExpenses + sac.transportation_amount, 0.00 ) AS transportationExpenses -- 搬运支出
COALESCE ( iii.forkliftExpenses, 0.00 ) + COALESCE ( sac.forklift_accessories, 0.00 ) AS forkliftExpenses, -- 叉车支出
COALESCE ( iii.packageExpenses, 0.00 ) + COALESCE ( sac.package_accessories, 0.00 ) AS packageExpenses, -- 打包支出
COALESCE ( iii.transportationExpenses, 0.00 ) + COALESCE ( sac.transportation_amount, 0.00 ) AS transportationExpenses -- 搬运支出
FROM
system_customer_settlement scs
LEFT JOIN sf_factory_info factory ON scs.customer_id = factory.id
sf_factory_info sf
LEFT JOIN system_customer_settlement scs ON sf.id = scs.customer_id AND scs.settlement_month = #{month}
LEFT JOIN system_settlement_item ssi ON scs.id = ssi.settlement_id
LEFT JOIN json_extracted je ON scs.id = je.settlement_id
LEFT JOIN (
@ -95,8 +95,8 @@
GROUP BY
s.factory_id,
ss.month
) sss ON scs.customer_id = sss.factory_id
AND scs.settlement_month = sss.month
) sss ON sf.id = sss.factory_id
AND sss.month = #{month}
LEFT JOIN (
SELECT
boei.dept_id,
@ -120,8 +120,8 @@
GROUP BY
boei.dept_id,
DATE_FORMAT( bp.end_time, '%Y-%m' )
) iii ON scs.customer_id = iii.dept_id
AND scs.settlement_month = iii.MONTH
) iii ON sf.id = iii.dept_id
AND iii.MONTH = #{month}
LEFT JOIN (
SELECT
oaLoan.total_money as loanAmount,
@ -134,18 +134,20 @@
oaLoan.process_instance_id = bp.process_instance_id
AND oaLoan.deleted = 0
AND oaLoan.result = 2
) loan ON scs.customer_id = loan.factoryId
AND scs.settlement_month = loan.endTime
LEFT JOIN sf_accessories_collar sac ON sac.factory_id = scs.customer_id
AND scs.settlement_month = sac.month
) loan ON sf.id = loan.factoryId
AND loan.endTime = #{month}
LEFT JOIN sf_accessories_collar sac ON sac.factory_id = sf.id
AND sac.month = #{month}
AND sac.status = 1
AND sac.deleted = 0
WHERE
scs.settlement_month = #{month}
sf.type = 3
AND sf.deleted = 0
AND sf.status = 0
<if test="factoryId != null">
AND scs.customer_id = #{factoryId}
AND sf.id = #{factoryId}
</if>
GROUP BY
scs.id;
sf.id;
</select>
</mapper>