如何创建与模型关联的里程碑百分比列表以计算企业进度差值
业务模型里程碑差值计算实现方案
需求说明
- 关联企业名称与里程碑百分比列表,计算企业当前进度与相邻两个里程碑的差值
- 支持用户自定义配置里程碑列表,无需调整核心计算逻辑
架构实现方案
1. 配置层解耦,支持自定义参数
将里程碑列表设为可配置的业务参数,不做硬编码:
- 为每个企业单独设置
custom_milestones字段存储专属里程碑列表,无自定义配置的企业默认调用全局统一里程碑参数 - 配置入口内置校验逻辑,自动对输入的里程碑数值排序、过滤重复/无效值,避免后续计算出错
2. 封装独立公共计算函数
把差值计算逻辑封装为公共函数,所有业务场景统一调用,示例代码如下:
def calculate_milestone_gap(company_name: str, current_progress: float, milestones: list) -> str: # 自动排序里程碑,兼容用户乱序输入的情况 sorted_milestones = sorted(milestones) # 匹配相邻的上下里程碑 lower_milestone = max([m for m in sorted_milestones if m <= current_progress], default=None) upper_milestone = min([m for m in sorted_milestones if m >= current_progress], default=None) # 拼接返回结果 result_parts = [] if upper_milestone: result_parts.append(f"is {(upper_milestone - current_progress):.1f}% away from the {upper_milestone}% milestone") if lower_milestone: result_parts.append(f"{(current_progress - lower_milestone):.1f}% above the {lower_milestone}% milestone") return f"{company_name} {',and '.join(result_parts)}."
3. 调用效果示例
输入参数
企业名称:Company A 当前进度:9.5 里程碑列表:[5, 10, 15, 20, 25]
输出结果
"Company A is 0.5% away from the 10% milestone, and 4.5% above the 5% milestone."
自定义配置使用说明
用户需要调整里程碑列表时,直接更新对应企业的custom_milestones字段值即可,核心逻辑不需要做任何修改,支持为不同类型的企业配置完全独立的里程碑体系,互不影响。
内容的提问来源于stack exchange,提问作者OperGo
相关产品推荐
相关产品推荐

