1. 需求目标
本概览基于实现设计与代码规划包整理:经营预算应用,需求主题为中旅投后全成本管理,覆盖投后项目管理列表、填报人配置列表、投后成本填报列表、创建版本表单、成本版本编辑表单、版本对比分析列表、版本记录列表、全成本查询列表、投后成本查询(内部)列表、来源项目明细列表、内部版本对比分析列表;数据模型与后端开发范围为4张业务表、3组实体关系、11项后端能力。人工处理事项:确认集团接口和外部跳转后续承接方式、确认外部数据来源和历史数据处理后续安排。
2. 方案概览
3. 数据模型
本次新增 4 张业务表,修改 0 张业务表,新增 3 组实体关系。
x_PostCostProject
存储需报送集团的项目范围、集团展示口径和来源系统关联字段
- 字段名字段类型中文解释
ProjectGUIDGUID投后项目ID/业务主键ProjectName单行文本,512项目名称/手工维护项目名称BUGUIDGUID所属公司ID/关联组织架构公司BUName单行文本,512所属公司名称/列表展示和查询使用SourceSystem固定枚举来源系统/固定枚举,本期不生成业务参数SourceProjectCode单行文本,512来源系统项目编码/后续关联经分项目时使用SourceProjectName单行文本,512来源系统项目名称/后续关联经分项目时使用GroupProjectCode单行文本,512集团展示项目编码/集团展示维度聚合编码GroupProjectName单行文本,512集团展示项目名称/集团展示维度聚合名称IsPushToGroup单选,是/否是否推送至集团投资系统/新增默认否;创建版本仅取是IsManualCreated单选,是/否是否手工新增/删除只影响本模块手工或引入后的投后项目,不影响经分主数据CreatedByGUID创建人/系统审计CreatedTime日期时间创建时间/系统审计ModifiedByGUID修改人/系统审计ModifiedTime日期时间修改时间/系统审计
x_PostCostOwnerConfig
存储每个项目六类成本填报责任人,用于后续编辑权限控制
- 字段名字段类型中文解释
OwnerConfigGUIDGUID配置ID/业务主键ProjectGUIDGUID投后项目ID/关联投后项目LandOwnerGUIDGUID土地成本填报人ID/绑定组织用户LandOwnerName单行文本,512土地成本填报人名称/展示组织用户名称BuildOwnerGUIDGUID建安成本填报人ID/绑定组织用户BuildOwnerName单行文本,512建安成本填报人名称/展示组织用户名称UnforeseenOwnerGUIDGUID不可预见费填报人ID/绑定组织用户UnforeseenOwnerName单行文本,512不可预见费填报人名称/展示组织用户名称MarketingOwnerGUIDGUID营销费用填报人ID/绑定组织用户MarketingOwnerName单行文本,512营销费用填报人名称/展示组织用户名称ManageOwnerGUIDGUID管理费用填报人ID/绑定组织用户ManageOwnerName单行文本,512管理费用填报人名称/展示组织用户名称FinanceOwnerGUIDGUID财务费用填报人ID/绑定组织用户FinanceOwnerName单行文本,512财务费用填报人名称/展示组织用户名称CreatedByGUID创建人/系统审计CreatedTime日期时间创建时间/系统审计ModifiedByGUID修改人/系统审计ModifiedTime日期时间修改时间/系统审计
x_PostCostVersion
存储项目月度动态成本版本、成本金额、锁定状态和集团展示字段快照
- 字段名字段类型中文解释
VersionGUIDGUID版本ID/业务主键ProjectGUIDGUID投后项目ID/关联投后项目ProjectName单行文本,512项目名称/创建版本时从投后项目快照BUGUIDGUID所属公司ID/创建版本时从投后项目快照BUName单行文本,512所属公司名称/创建版本时从投后项目快照VersionMonth日期,年月版本月份/创建版本选择的月份VersionName单行文本,512版本名称/项目名称-版本月份-动态版TotalCost金额,2位小数总成本/六类成本自动汇总LandCost金额,2位小数土地成本/按责任人权限维护LandCostDesc单行文本,512土地成本填写说明/手工维护BuildCost金额,2位小数建安成本/按责任人权限维护BuildCostDesc单行文本,512建安成本填写说明/手工维护UnforeseenCost金额,2位小数不可预见费/按责任人权限维护UnforeseenCostDesc单行文本,512不可预见费填写说明/手工维护MarketingCost金额,2位小数营销费用/按责任人权限维护MarketingCostDesc单行文本,512营销费用填写说明/手工维护ManageCost金额,2位小数管理费用/按责任人权限维护ManageCostDesc单行文本,512管理费用填写说明/手工维护FinanceCost金额,2位小数财务费用/按责任人权限维护FinanceCostDesc单行文本,512财务费用填写说明/手工维护Remark单行文本,512备注/手工维护IsLocked单选,未锁定/已锁定是否锁定/创建默认未锁定LockTime日期时间锁定时间/最新一次锁定时间LockUserGUIDGUID锁定人ID/最新一次锁定人LockUserName单行文本,512锁定人名称/展示锁定人GroupProjectCode单行文本,512集团展示项目编码/创建版本时从投后项目快照GroupProjectName单行文本,512集团展示项目名称/创建版本时从投后项目快照CreatedByGUID创建人/系统审计CreatedTime日期时间创建时间/系统审计ModifiedByGUID修改人/系统审计ModifiedTime日期时间修改时间/系统审计
x_PostCostUpdateRecord
记录版本各类成本字段的更新人、更新时间和更新内容
- 字段名字段类型中文解释
RecordGUIDGUID更新记录ID/业务主键VersionGUIDGUID版本ID/关联投后成本版本CostType固定枚举成本类型/土地成本、建安成本、不可预见费、营销费用、管理费用、财务费用OldAmount金额,2位小数更新前金额/更新前成本值NewAmount金额,2位小数更新后金额/更新后成本值OldDesc单行文本,512更新前说明/更新前说明NewDesc单行文本,512更新后说明/更新后说明UpdateUserGUIDGUID更新人ID/当前操作人UpdateUserName单行文本,512更新人名称/当前操作人名称UpdateTime日期时间更新时间/操作时间
| 主表 | 主字段 | 关系 | 从表 | 从字段 | 用途 |
|---|---|---|---|---|---|
x_PostCostProject | ProjectGUID | 1:1 | x_PostCostOwnerConfig | ProjectGUID | 每个投后项目一组填报责任人配置 |
x_PostCostProject | ProjectGUID | 1:N | x_PostCostVersion | ProjectGUID | 每个投后项目按月份创建多个成本版本 |
x_PostCostVersion | VersionGUID | 1:N | x_PostCostUpdateRecord | VersionGUID | 每个版本记录各类成本更新明细 |
4. 页面开发
新增投后项目管理列表
普通列表(AppGrid)
所属公司 BUName;项目名称 ProjectName;来源系统 SourceSystem;是否推送至集团投资系统 IsPushToGroup
项目名称,ProjectName;所属公司,BUName;来源系统,SourceSystem;来源系统项目编码,SourceProjectCode;来源系统项目名称,SourceProjectName;集团展示项目编码,GroupProjectCode;集团展示项目名称,GroupProjectName;是否推送至集团投资系统,IsPushToGroup
主数据源:投后项目,x_PostCostProject;关联数据源:组织架构公司数据源;过滤条件:按所属公司、项目名称、来源系统、是否推送至集团投资系统过滤;默认排序:修改时间倒序
新增一行投后项目,来源系统默认手工新增,是否推送默认否
列表新增行、默认值和保存属于零代码标准能力编辑当前项目行
列表行编辑和保存属于零代码标准能力删除当前投后项目记录,不影响经分系统主数据
删除当前业务表记录属于零代码标准能力,删除范围限定在新增实体导出当前筛选结果
标准列表导出能力可完成打开填报人配置列表弹窗
打开目标页面属于零代码标准能力需求原型

新增填报人配置列表
普通列表(AppGrid)
项目名称 ProjectName;集团展示项目名称 GroupProjectName
项目名称,ProjectName;集团展示项目名称,GroupProjectName;土地成本填报人,LandOwnerName;建安成本填报人,BuildOwnerName;不可预见费填报人,UnforeseenOwnerName;营销费用填报人,MarketingOwnerName;管理费用填报人,ManageOwnerName;财务费用填报人,FinanceOwnerName
主数据源:投后项目填报人配置,x_PostCostOwnerConfig;关联数据源:投后项目,x_PostCostProject;组织用户数据源;过滤条件:默认展示投后项目管理下所有项目;默认排序:项目名称升序
保存当前列表中单项目责任人配置
单行编辑保存和组织用户字段选择可由零代码配置完成对选中项目批量写入六类成本责任人
对多个项目批量写入六类成本责任人需求原型

新增投后成本填报列表
普通列表(AppGrid)
版本月份 VersionMonth;所属公司 BUName;项目名称 ProjectName
项目名称,ProjectName;所属公司,BUName;版本月份,VersionMonth;版本名称,VersionName;总成本,TotalCost;土地成本,LandCost;建安成本,BuildCost;不可预见费,UnforeseenCost;营销费用,MarketingCost;管理费用,ManageCost;财务费用,FinanceCost;是否锁定,IsLocked;锁定时间,LockTime;集团展示项目编码,GroupProjectCode;集团展示项目名称,GroupProjectName
主数据源:投后成本版本,x_PostCostVersion;关联数据源:投后项目,x_PostCostProject;过滤条件:按版本月份、所属公司、项目名称过滤;默认排序:版本月份倒序、项目名称升序
打开创建版本表单
打开目标表单属于零代码标准能力打开成本版本编辑表单
打开目标表单属于零代码标准能力锁定当前版本
未锁定版本置为已锁定批量锁定选中版本
批量解锁选中版本
打开版本对比分析列表
打开目标页面属于零代码标准能力打开版本记录列表
打开目标页面属于零代码标准能力需求原型

新增创建版本表单
表单(AppForm)
版本月份,VersionMonth
主数据源:投后成本版本,x_PostCostVersion;关联数据源:投后项目,x_PostCostProject;保存方式:保存前调用接口;默认值规则:版本月份由用户选择
调用 createMonthlyVersions 创建月度版本
关闭弹窗
标准关闭弹窗需求原型

新增成本版本编辑表单
表单(AppForm)
项目名称,ProjectName;所属公司,BUName;版本月份,VersionMonth;版本名称,VersionName;集团展示项目编码,GroupProjectCode;集团展示项目名称,GroupProjectName;土地成本,LandCost;土地成本填写说明,LandCostDesc;建安成本,BuildCost;建安成本填写说明,BuildCostDesc;不可预见费,UnforeseenCost;不可预见费填写说明,UnforeseenCostDesc;营销费用,MarketingCost;营销费用填写说明,MarketingCostDesc;管理费用,ManageCost;管理费用填写说明,ManageCostDesc;财务费用,FinanceCost;财务费用填写说明,FinanceCostDesc;备注,Remark;总成本,TotalCost
主数据源:投后成本版本,x_PostCostVersion;关联数据源:投后项目填报人配置,x_PostCostOwnerConfig;保存方式:保存前调用接口;默认值规则:项目、版本和集团展示字段从版本记录带出只读
调用 saveCostVersion 保存成本数据、重算总成本并写入更新记录
关闭弹窗
标准关闭弹窗需求原型

新增版本对比分析列表
普通列表(AppGrid)
对比版本A BaseVersionGUID
成本项,CostType;版本A金额,BaseAmount;版本B金额,TargetAmount;偏差值,DeviationAmount;偏差率,DeviationRate
主数据源:后端接口返回的版本对比结果;关联数据源:投后成本版本,x_PostCostVersion;过滤条件:当前版本B、选择的已有填报版本A;默认排序:成本项固定顺序
调用 compareVersion 生成对比结果
选择系统内已有填报版本A导出当前对比结果
标准列表导出能力可完成需求原型

新增版本记录列表
普通列表(AppGrid)
成本类型 CostType
成本类型,CostType;更新前金额,OldAmount;更新后金额,NewAmount;更新人,UpdateUserName;更新时间,UpdateTime
主数据源:投后成本更新记录,x_PostCostUpdateRecord;关联数据源:投后成本版本,x_PostCostVersion;过滤条件:当前版本ID;默认排序:更新时间倒序
查询当前版本成本更新记录
关联表查询属于标准列表能力需求原型

新增全成本查询列表
普通列表(AppGrid)
所属公司 buguid;项目名称 projectName;版本月份 versionMonth
项目名称,GroupProjectName;所属公司,BUName;版本月份,VersionMonth;版本名称,VersionName;总成本,TotalCost;土地成本,LandCost;建安成本,BuildCost;不可预见费,UnforeseenCost;营销费用,MarketingCost;管理费用,ManageCost;财务费用,FinanceCost
主数据源:queryGroupLockedCosts 组件后端 API;关联数据源:投后成本版本,x_PostCostVersion;过滤条件:所属公司、项目名称、版本月份;仅已锁定版本;默认排序:版本月份倒序、集团展示项目名称升序
调用 queryGroupLockedCosts 查询已锁定集团口径数据
按集团展示项目维度汇总已锁定版本数据需求原型

新增投后成本查询(内部)列表
普通列表(AppGrid)
所属公司 buguid;项目名称 projectName;版本月份 versionMonth
项目名称,GroupProjectName;所属公司,BUName;来源系统项目编码,SourceProjectCode;来源系统项目名称,SourceProjectName;来源项目个数,SourceProjectCount;版本月份,VersionMonth;版本名称,VersionName;总成本,TotalCost;六类成本;是否锁定,IsLocked
主数据源:queryInternalGroupCosts 组件后端 API;关联数据源:投后成本版本,x_PostCostVersion;投后项目,x_PostCostProject;过滤条件:所属公司、项目名称、版本月份;默认排序:版本月份倒序、集团展示项目名称升序
调用 queryInternalGroupCosts 查询内部汇总数据
按集团展示项目名称汇总投后成本填报数据打开来源项目明细列表
点击列打开目标页面属于零代码页面绑定能力打开内部版本对比分析列表
打开目标页面属于零代码标准能力需求原型

新增来源项目明细列表
普通列表(AppGrid)
来源项目名称 projectName
项目名称,ProjectName;所属公司,BUName;来源系统项目编码,SourceProjectCode;来源系统项目名称,SourceProjectName;版本月份,VersionMonth;版本名称,VersionName;总成本和六类成本
主数据源:querySourceProjectDetails 组件后端 API;关联数据源:投后成本版本,x_PostCostVersion;投后项目,x_PostCostProject;过滤条件:集团展示项目编码、集团展示项目名称、版本月份;默认排序:项目名称升序
调用 querySourceProjectDetails 查询来源明细和合计行
查询来源项目明细列表需求原型

新增内部版本对比分析列表
普通列表(AppGrid)
版本A BaseVersionMonth;版本B TargetVersionMonth
成本项,CostType;版本A金额,BaseAmount;版本B金额,TargetAmount;偏差值,DeviationAmount;偏差率,DeviationRate
主数据源:compareInternalVersion 接口返回结果;关联数据源:投后成本版本,x_PostCostVersion;过滤条件:集团展示项目、版本A、版本B;默认排序:成本项固定顺序
调用 compareInternalVersion 生成集团展示项目维度对比结果
导出当前对比结果
标准列表导出能力可完成需求原型

5. 后端开发
类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostProjectAppService
方法路径:batchSaveCostOwners
相关数据模型:
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:batchSaveCostOwners
前端调用方式
- 调用页面:填报人配置列表。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostProjectAppService.batchSaveCostOwners。
请求参数
- projectGuids、landOwnerGuid、buildOwnerGuid、unforeseenOwnerGuid、marketingOwnerGuid、manageOwnerGuid、financeOwnerGuid
返回结果
- successCount、failItems[]、message
后端实现逻辑
1. 校验项目集合不能为空。
2. 校验传入责任人均可匹配组织用户。
3. 对每个项目新增或更新 x_PostCostOwnerConfig。
4. 返回成功项目数和失败项目明细。
异常/事务处理
- 组织用户不存在、项目不存在、无选中项目时展示业务提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService
方法路径:createMonthlyVersions
相关数据模型:
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:createMonthlyVersions
前端调用方式
- 调用页面:创建版本表单。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService.createMonthlyVersions。
请求参数
- versionMonth
返回结果
- createdCount、skippedItems[]、message
后端实现逻辑
1. 查询 x_PostCostProject 中 IsPushToGroup=是 的项目。
2. 对每个项目校验同一 ProjectGUID + VersionMonth 是否已存在版本。
3. 未存在时创建 x_PostCostVersion,版本名称为 项目名称-版本月份-动态版,六类成本为空,锁定状态为未锁定。
4. 已存在时跳过并返回跳过明细。
异常/事务处理
- 版本月份为空、无可创建项目、全部重复时展示业务提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService
方法路径:lockVersion
相关数据模型:
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:lockVersion
前端调用方式
- 调用页面:投后成本填报列表。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService.lockVersion。
请求参数
- versionGuid
返回结果
- success、message
后端实现逻辑
1. 校验版本存在且当前为未锁定。
2. 将 IsLocked 更新为已锁定。
3. 写入 LockTime、LockUserGUID、LockUserName。
异常/事务处理
- 版本不存在、已锁定时展示业务提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService
方法路径:batchLockVersions
相关数据模型:
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:batchLockVersions
前端调用方式
- 调用页面:投后成本填报列表。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService.batchLockVersions。
请求参数
- versionGuids
返回结果
- successCount、failItems[]、message
后端实现逻辑
1. 校验版本集合不能为空。
2. 对未锁定版本执行锁定。
3. 对已锁定或不存在的版本返回失败明细。
异常/事务处理
- 未选择版本时提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService
方法路径:batchUnlockVersions
相关数据模型:
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:batchUnlockVersions
前端调用方式
- 调用页面:投后成本填报列表。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService.batchUnlockVersions。
请求参数
- versionGuids
返回结果
- successCount、failItems[]、message
后端实现逻辑
1. 校验版本集合不能为空。
2. 对已锁定版本执行解锁。
3. 对未锁定或不存在的版本返回失败明细。
异常/事务处理
- 未选择版本时提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService
方法路径:saveCostVersion
相关数据模型:
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:saveCostVersion
前端调用方式
- 调用页面:成本版本编辑表单。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostVersionAppService.saveCostVersion。
请求参数
- versionGuid、六类成本金额和说明字段
返回结果
- success、totalCost、updatedCostTypes[]、message
后端实现逻辑
1. 校验版本存在且未锁定。
2. 根据 x_PostCostOwnerConfig 和当前用户判断六类成本字段可编辑范围。
3. 更新允许编辑的成本金额和说明。
4. 重算 TotalCost。
5. 对发生变化的成本类型写入 x_PostCostUpdateRecord。
异常/事务处理
- 锁定版本、无编辑权限、版本不存在时展示业务提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostCompareAppService
方法路径:compareVersion
相关数据模型:待确认
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:compareVersion
前端调用方式
- 调用页面:版本对比分析列表。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostCompareAppService.compareVersion。
请求参数
- baseVersionGuid、targetVersionGuid
返回结果
- compareItems[]、summary
后端实现逻辑
1. 查询版本A和版本B的六类成本。
2. 逐项计算 偏差值=B-A。
3. 当 A 不为 0 时计算 偏差率=(B-A)/A;A 为 0 时返回偏差率为空并给出说明。
4. 标记偏差率大于 0 的成本项。
异常/事务处理
- 未选择版本、版本不存在、同一版本对比时展示提示。类路径:com.mingyuanyun.jyys.postcost.appservice.PostCostCompareAppService
方法路径:compareInternalVersion
相关数据模型:待确认
应用服务 / 普通 API
后端调整内容
- 变更类型:新增
- 能力标识:compareInternalVersion
前端调用方式
- 调用页面:内部版本对比分析列表。
- AppService 方法:com.mingyuanyun.jyys.postcost.appservice.PostCostCompareAppService.compareInternalVersion。
请求参数
- groupProjectCode、groupProjectName、baseVersionMonth、targetVersionMonth
返回结果
- compareItems[]、summary
后端实现逻辑
1. 按集团展示口径分别汇总版本A和版本B成本。
2. 逐项计算偏差值和偏差率。
3. A 为 0 时返回偏差率为空并给出说明。
4. 标记偏差率大于 0 的成本项。
异常/事务处理
- 未选择版本、版本不存在、同一版本对比时展示提示。类路径:com.mingyuanyun.jyys.postcost.api.PostCostQueryApi
方法路径:queryGroupLockedCosts
相关数据模型:
建模组件后端 API
后端调整内容
- 变更类型:新增
- 能力标识:queryGroupLockedCosts
组件调用方式
- 调用页面:全成本查询列表。
- 组件 API:com.mingyuanyun.jyys.postcost.api.PostCostQueryApi.queryGroupLockedCosts。
取数范围
- 未在设计文档中明确,待人工确认
过滤条件
- buguid、projectName、versionMonth
返回绑定
- 集团展示项目编码、集团展示项目名称、版本月份、版本名称、总成本和六类成本
后端实现逻辑
1. 查询已锁定成本版本。
2. 按集团展示项目维度返回汇总结果。
3. 支持所属公司、项目名称、版本月份过滤。
异常处理
- 查询失败时展示错误提示。类路径:com.mingyuanyun.jyys.postcost.api.PostCostQueryApi
方法路径:queryInternalGroupCosts
相关数据模型:
建模组件后端 API
后端调整内容
- 变更类型:新增
- 能力标识:queryInternalGroupCosts
组件调用方式
- 调用页面:投后成本查询(内部)列表。
- 组件 API:com.mingyuanyun.jyys.postcost.api.PostCostQueryApi.queryInternalGroupCosts。
取数范围
- 未在设计文档中明确,待人工确认
过滤条件
- buguid、projectName、versionMonth
返回绑定
- 集团展示项目编码、集团展示项目名称、来源项目个数、版本信息、总成本、六类成本、是否锁定
后端实现逻辑
1. 查询投后成本版本和项目。
2. 按集团展示项目名称汇总成本。
3. 计算来源项目个数。
4. 返回是否锁定状态。
异常处理
- 查询失败时展示错误提示。类路径:com.mingyuanyun.jyys.postcost.api.PostCostQueryApi
方法路径:querySourceProjectDetails
相关数据模型:
建模组件后端 API
后端调整内容
- 变更类型:新增
- 能力标识:querySourceProjectDetails
组件调用方式
- 调用页面:来源项目明细列表。
- 组件 API:com.mingyuanyun.jyys.postcost.api.PostCostQueryApi.querySourceProjectDetails。
取数范围
- 未在设计文档中明确,待人工确认
过滤条件
- groupProjectCode、groupProjectName、versionMonth
返回绑定
- detailItems[]、totalRow
后端实现逻辑
1. 按集团展示口径和版本月份查询来源项目版本。
2. 返回来源项目明细行。
3. 自动生成合计行。
异常处理
- 无明细时展示空数据提示。