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

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

@@ -0,0 +1,23 @@
<?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.ruoyi.oa.mapper.OaApplicationMapper">
<resultMap type="com.ruoyi.oa.domain.OaApplication" id="OaApplicationResult">
<result property="applicationId" column="application_id"/>
<result property="icon" column="icon"/>
<result property="ip" column="ip"/>
<result property="port" column="port"/>
<result property="applicationName" column="application_name"/>
<result property="description" column="description"/>
<result property="createdBy" column="created_by"/>
<result property="createdTime" column="created_time"/>
<result property="updatedBy" column="updated_by"/>
<result property="updatedTime" column="updated_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
</resultMap>
</mapper>

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') &lt;= 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>

View File

@@ -597,6 +597,50 @@
</where>
</select>
<!-- 当月/指定月份各项目支出占比 -->
<select id="getProjectData"
parameterType="string"
resultType="com.ruoyi.oa.domain.dto.ProjectDataDTO">
SELECT
p.project_id AS projectId,
p.project_name AS projectName,
p.color AS color,
IFNULL(
SUM(
CASE WHEN f.finance_type = '0' THEN d.price ELSE 0 END
),
0
) AS totalPrice
FROM sys_oa_project p
LEFT JOIN sys_oa_finance f
ON f.project_id = p.project_id
LEFT JOIN sys_oa_detail d
ON d.finance_id = f.finance_id
<where>
<choose>
<when test="month != null and month != ''">
AND DATE_FORMAT(f.finance_time, '%Y-%m') = #{month}
</when>
<otherwise>
AND DATE_FORMAT(f.finance_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
</otherwise>
</choose>
</where>
GROUP BY p.project_id, p.project_name, p.color
</select>
<!-- 项目活跃度(明细) -->
<select id="getProjectActivities" resultType="com.ruoyi.oa.domain.dto.ProjectActivityDTO">
SELECT
p.project_name AS projectName,
f.finance_time AS createTime,
d.price AS laborCost,
p.color AS color
FROM sys_oa_project p
JOIN sys_oa_finance f ON f.project_id = p.project_id
JOIN sys_oa_detail d ON d.finance_id = f.finance_id
ORDER BY f.finance_time
</select>
<!-- 历史(月度)平均合同总额 -->
<select id="selectPrevAvgTotalFunds" resultType="java.math.BigDecimal">