新增工具中心和财务报表修改

This commit is contained in:
2025-06-14 19:35:05 +08:00
parent 03d2d1afcb
commit d9ae540fd7
29 changed files with 776 additions and 37 deletions

View File

@@ -191,20 +191,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and date_format(sof.finance_time,'%Y-%m-%d %H:%i:%s') >= date_format(#{beginTime},'%Y-%m-%d %H:%i:%s')
and date_format(sof.finance_time,'%Y-%m-%d %H:%i:%s') <= date_format(#{endTime},'%Y-%m-%d %H:%i:%s')
</select>
<select id="getBarData" resultMap="SysOaFinanceResult">
<!-- 月度收支对比:仅查询近 6 个月,使用 f.finance_type 判断进10-->
<select id="getBarData" resultType="com.ruoyi.oa.domain.dto.BarDataDTO">
SELECT
DATE_FORMAT(a.create_time, '%Y-%m') AS month,
SUM(CASE WHEN a.finance_type = '0' THEN b.price ELSE 0 END) AS total_out,
SUM(CASE WHEN a.finance_type = '1' THEN b.price ELSE 0 END) AS total_in
FROM sys_oa_finance a
LEFT JOIN sys_oa_detail b
ON a.finance_id = b.finance_id
AND a.create_time >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 5 MONTH), '%Y-%m-01')
AND DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH) > a.create_time
GROUP BY DATE_FORMAT(a.create_time, '%Y-%m')
ORDER BY month;
DATE_FORMAT(f.finance_time, '%Y-%m') AS month,
SUM(CASE WHEN f.finance_type = '0' THEN d.price ELSE 0 END) AS totalOut,
SUM(CASE WHEN f.finance_type = '1' THEN d.price ELSE 0 END) AS totalIn
FROM sys_oa_detail d
JOIN sys_oa_finance f ON d.finance_id = f.finance_id
<where>
<!-- 可选的项目过滤 -->
<if test="projectId != null and projectId > 0">
AND f.project_id = #{projectId}
</if>
<!-- 只筛近 6 个月:从 5 个月前的第一天到当月最后一天 -->
AND f.finance_time BETWEEN
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m-01')
AND LAST_DAY(CURDATE())
</where>
GROUP BY DATE_FORMAT(f.finance_time, '%Y-%m')
ORDER BY month
</select>
<!-- 明细列表:含币种判断(使用 f.remark 来模糊匹配币种),并只查询近 6 个月的数据 -->
<select id="getFinanceDetails" resultType="com.ruoyi.oa.domain.dto.FinanceDetailDTO">
SELECT
DATE_FORMAT(f.finance_time, '%Y-%m-%d') AS date,
f.finance_type AS type,
CASE
WHEN f.remark LIKE '%美金%' OR f.remark LIKE '%美元%' THEN 'USD'
ELSE 'CNY'
END AS currency,
d.price AS amount,
f.project_id AS projectId
FROM sys_oa_detail d
JOIN sys_oa_finance f ON d.finance_id = f.finance_id
<where>
<!-- 项目过滤 -->
<if test="projectId != null and projectId > 0">
AND f.project_id = #{projectId}
</if>
<!-- 进/出账类型过滤 -->
<if test="financeType != null and financeType != ''">
AND f.finance_type = #{financeType}
</if>
<!-- 只查询近 6 个月的记录 -->
AND f.finance_time BETWEEN
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m-01')
AND LAST_DAY(CURDATE())
</where>
ORDER BY f.finance_time DESC
</select>
</mapper>