律所系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
5.1 KiB

-- =============================================
-- 更新 2026年Q1 的实际成本和实际比例(成本单位:万元)
-- =============================================
SET @hourly_cost = (SELECT CAST(remark AS DECIMAL(10,2)) FROM t_dict WHERE dict_code = 'FILECOST' LIMIT 1);
UPDATE t_firm_reports fr
SET
fr.actual_public_welfare_cost = ROUND(IFNULL((
SELECT
SUM(
CASE
WHEN tg.time_type IN ('TIME', 'DICT') THEN IFNULL(sa.service_duration, 0) * IFNULL(@hourly_cost, 0)
WHEN tg.time_type = 'AMOUT' THEN IFNULL(sa.workload_score, 0)
ELSE 0
END
) / 10000
FROM t_service_applications sa
LEFT JOIN t_goods tg ON sa.activity_name_id = tg.goods_id
WHERE sa.firm_id = fr.firm_id
AND sa.association_audit_status = 3
AND sa.deleted_flag = 0
AND sa.report_time IS NOT NULL
AND tg.time_type IS NOT NULL
AND MONTH(sa.report_time) IN (1,2,3)
AND YEAR(sa.report_time) = 2026
), 0), 2),
fr.actual_cost_income_ratio = CASE
WHEN fr.revenue > 0 THEN LEAST(ROUND(
IFNULL((
SELECT
SUM(
CASE
WHEN tg.time_type IN ('TIME', 'DICT') THEN IFNULL(sa.service_duration, 0) * IFNULL(@hourly_cost, 0)
WHEN tg.time_type = 'AMOUT' THEN IFNULL(sa.workload_score, 0)
ELSE 0
END
) / 10000
FROM t_service_applications sa
LEFT JOIN t_goods tg ON sa.activity_name_id = tg.goods_id
WHERE sa.firm_id = fr.firm_id
AND sa.association_audit_status = 3
AND sa.deleted_flag = 0
AND sa.report_time IS NOT NULL
AND tg.time_type IS NOT NULL
AND MONTH(sa.report_time) IN (1,2,3)
AND YEAR(sa.report_time) = 2026
), 0) / fr.revenue * 100, 2), 25.00)
ELSE 0
END,
fr.update_time = NOW()
WHERE del_flag = 0 AND declare_quarter = 1;
-- 验证更新结果
SELECT
id,
firm_id,
revenue AS 收入_万元,
public_welfare_cost AS 预填报成本_万元,
actual_public_welfare_cost AS 实际成本_万元,
cost_income_ratio AS 预填报比例,
actual_cost_income_ratio AS 实际比例
FROM t_firm_reports
WHERE del_flag = 0 AND declare_quarter = 1
ORDER BY firm_id;
--查询成本是否有误--
-- =============================================
-- 查询 2026年Q1 所有记录的实际成本和比例(不更新)
-- =============================================
SET @hourly_cost = (SELECT CAST(remark AS DECIMAL(10,2)) FROM t_dict WHERE dict_code = 'FILECOST' LIMIT 1);
SELECT
fr.id,
td.department_name AS 律所名称,
fr.declare_year,
fr.declare_quarter,
fr.revenue AS 收入_万元,
fr.public_welfare_cost AS 预填报成本_万元,
-- 计算实际成本(万元)
ROUND(IFNULL((
SELECT
SUM(
CASE
WHEN tg.time_type IN ('TIME', 'DICT') THEN IFNULL(sa.service_duration, 0) * IFNULL(@hourly_cost, 0)
WHEN tg.time_type = 'AMOUT' THEN IFNULL(sa.workload_score, 0)
ELSE 0
END
) / 10000
FROM t_service_applications sa
LEFT JOIN t_goods tg ON sa.activity_name_id = tg.goods_id
WHERE sa.firm_id = fr.firm_id
AND sa.association_audit_status = 3
AND sa.deleted_flag = 0
AND sa.report_time IS NOT NULL
AND tg.time_type IS NOT NULL
AND MONTH(sa.report_time) IN (1,2,3)
AND YEAR(sa.report_time) = 2026
), 0), 2) AS 计算后_实际成本_万元,
-- 计算实际比例
CASE
WHEN fr.revenue > 0 THEN LEAST(ROUND(
IFNULL((
SELECT
SUM(
CASE
WHEN tg.time_type IN ('TIME', 'DICT') THEN IFNULL(sa.service_duration, 0) * IFNULL(@hourly_cost, 0)
WHEN tg.time_type = 'AMOUT' THEN IFNULL(sa.workload_score, 0)
ELSE 0
END
) / 10000
FROM t_service_applications sa
LEFT JOIN t_goods tg ON sa.activity_name_id = tg.goods_id
WHERE sa.firm_id = fr.firm_id
AND sa.association_audit_status = 3
AND sa.deleted_flag = 0
AND sa.report_time IS NOT NULL
AND tg.time_type IS NOT NULL
AND MONTH(sa.report_time) IN (1,2,3)
AND YEAR(sa.report_time) = 2026
), 0) / fr.revenue * 100, 2), 25.00)
ELSE 0
END AS 计算后_实际比例,
-- 当前数据库中的值
fr.actual_public_welfare_cost AS 当前_实际成本_万元,
fr.actual_cost_income_ratio AS 当前_实际比例
FROM t_firm_reports fr
LEFT JOIN t_department td ON fr.firm_id = td.department_id
WHERE fr.del_flag = 0 AND fr.declare_quarter = 1
ORDER BY fr.firm_id;