feat(oa/erp): 更新项目台账报表支持多合同聚合显示

- 新增 projectProgressStatus 字段用于显示项目进度状态
- 修改 contractAmount 类型为字符串以支持多合同金额换行分隔显示
- 新增 warrantyPeriodDescription 字段显示质保期描述信息
- 使用子查询聚合多合同数据并按排序顺序连接显示
- 优化合同信息展示逻辑支持多合同场景下的完整信息呈现
- 移除 contractId 字段,不再单独显示单一合同ID
dev
Yangk 3 months ago
parent fb46db75d3
commit 0be10360da

@ -36,8 +36,6 @@ public class ProjectLedgerReportVo implements Serializable {
/** 项目类型ID查询条件 */
private Long projectTypeId;
/** 合同ID */
private Long contractId;
/** 项目编号 */
@ExcelProperty({"基本信息", "项目编号"})
@ -74,11 +72,13 @@ public class ProjectLedgerReportVo implements Serializable {
/** 项目类别 */
private String projectCategory;
/** 项目状态 */
@ExcelProperty(value = {"基本信息", "状态"}, converter = org.dromara.common.excel.convert.ExcelDictConvert.class)
@org.dromara.common.excel.annotation.ExcelDictFormat(dictType = "project_status")
/** 项目状态(内部字典状态) */
private String projectStatus;
/** 项目进度状态(手工填报) */
@ExcelProperty(value = {"基本信息", "状态"})
private String projectProgressStatus;
/** 预计验收时间 */
@ExcelProperty({"基本信息", "预计验收时间"})
private String expectedAcceptanceTime;
@ -99,9 +99,9 @@ public class ProjectLedgerReportVo implements Serializable {
@ExcelProperty({"合同信息", "签订时间"})
private String contractDate;
/** 合同额 */
/** 合同额(多合同时用\n分隔 */
@ExcelProperty({"合同信息", "合同额"})
private BigDecimal contractAmount;
private String contractAmount;
/** 客户经理 */
@ExcelProperty({"合同信息", "客户经理"})
@ -111,6 +111,10 @@ public class ProjectLedgerReportVo implements Serializable {
@ExcelProperty({"合同信息", "付款方式"})
private String paymentMethod;
/** 质保期描述 */
@ExcelProperty({"合同信息", "质保期描述"})
private String warrantyPeriodDescription;
/** 预算 */
@ExcelProperty({"预算及成本", "预算"})
private BigDecimal budgetCost;

@ -11,19 +11,20 @@
t.project_name,
t.project_category,
t.project_status,
c.payment_method,
c.contract_id,
t.project_progress_status,
u1.nick_name AS manager_name,
d.dept_name,
CONCAT(t2.type_name, '/', t1.type_name) AS type_name,
<!-- 异常启动信息 -->
CASE WHEN t.contract_flag = '2' THEN '是' ELSE '否' END AS abnormal_startup,
CASE WHEN t.contract_flag = '2' THEN '无合同' ELSE NULL END AS abnormal_startup_reason,
<!-- 合同信息 -->
c.contract_date,
c.total_price AS contract_amount,
cust.customer_name,
u2.nick_name AS contract_manager_name,
<!-- 合同信息(多合同聚合) -->
contracts_agg.contract_date,
contracts_agg.contract_amount,
contracts_agg.customer_name,
contracts_agg.contract_manager_name,
contracts_agg.payment_method,
contracts_agg.warranty_period_description,
<!-- 预算信息 -->
b.budget_cost,
b.budget_rate,
@ -87,14 +88,32 @@
LEFT JOIN erp_project_type t2 ON t1.parent_id = t2.project_type_id
LEFT JOIN sys_dept d ON d.dept_id = t.dept_id
LEFT JOIN sys_user u1 ON u1.user_id = t.manager_id
<!-- 合同 + 客户 + 客户经理 -->
LEFT JOIN erp_contract_info c ON c.contract_id = (
SELECT contract_id FROM erp_project_contracts
WHERE project_id = t.project_id AND del_flag = '0'
ORDER BY sort_order ASC LIMIT 1
) AND c.del_flag = '0'
LEFT JOIN crm_customer_info cust ON c.one_customer_id = cust.customer_id AND cust.del_flag = '0'
LEFT JOIN sys_user u2 ON c.contract_manager_id = u2.user_id
<!-- 合同多条聚合子查询(多合同用换行符\n分隔 -->
LEFT JOIN (
SELECT
pc.project_id,
GROUP_CONCAT(DATE_FORMAT(c.contract_date, '%Y-%m-%d') ORDER BY pc.sort_order SEPARATOR '\n') AS contract_date,
GROUP_CONCAT(c.total_price ORDER BY pc.sort_order SEPARATOR '\n') AS contract_amount,
GROUP_CONCAT(cust.customer_name ORDER BY pc.sort_order SEPARATOR '\n') AS customer_name,
GROUP_CONCAT(u2.nick_name ORDER BY pc.sort_order SEPARATOR '\n') AS contract_manager_name,
GROUP_CONCAT(COALESCE(pm_agg.payment_desc, '-') ORDER BY pc.sort_order SEPARATOR '\n') AS payment_method,
GROUP_CONCAT(c.warranty_period_description ORDER BY pc.sort_order SEPARATOR '\n') AS warranty_period_description
FROM erp_project_contracts pc
LEFT JOIN erp_contract_info c ON c.contract_id = pc.contract_id AND c.del_flag = '0'
LEFT JOIN (
SELECT
pm.contract_id,
GROUP_CONCAT(CONCAT(CAST(pm.payment_percentage AS CHAR), '%', ps.payment_method) ORDER BY pm.sort_order SEPARATOR '') AS payment_desc
FROM erp_contract_payment_method pm
JOIN base_payment_stage ps ON pm.payment_stage_id = ps.payment_stage_id
WHERE pm.del_flag = '0'
GROUP BY pm.contract_id
) pm_agg ON pm_agg.contract_id = pc.contract_id
LEFT JOIN crm_customer_info cust ON c.one_customer_id = cust.customer_id AND cust.del_flag = '0'
LEFT JOIN sys_user u2 ON c.contract_manager_id = u2.user_id
WHERE pc.del_flag = '0'
GROUP BY pc.project_id
) contracts_agg ON contracts_agg.project_id = t.project_id
<!-- 预算(取已审批的) -->
LEFT JOIN erp_budget_info b ON t.project_id = b.project_id AND b.budget_status = '3' AND b.del_flag = '0'
<!-- 验收(取已完成审批的) -->

Loading…
Cancel
Save