From fafbb01db44acfcfac4c8d0e84c01cf6fc7dbb85 Mon Sep 17 00:00:00 2001 From: "Richard.Wang" Date: Sat, 8 Nov 2025 23:40:30 +0800 Subject: [PATCH 1/3] Add personal camp notes file: wangleihd.md --- wangleihd.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 wangleihd.md diff --git a/wangleihd.md b/wangleihd.md new file mode 100644 index 0000000..aa768d8 --- /dev/null +++ b/wangleihd.md @@ -0,0 +1,23 @@ +# 开源训练营感悟与AI开源工具组队计划 +## 一、训练营学习感悟 +参与“源起之道开源商业创新营”后,我对开源的认知彻底跳出了“免费使用”的浅层误区。 + +开源的核心是“生态共赢”——开发者贡献代码共建项目,用户反馈问题助力优化,企业通过闭源增值服务变现,这种多方参与、正向循环的模式,正是当下技术创新的重要驱动力。 + +此外,AI与开源的结合让我看到了新机遇。训练营线上课程中提到的“用AI工具做社区内容创作、用户增长”,不仅能降低开源项目的运营成本,还能提升效率(比如用AI自动回复issue、生成项目文档),这让我坚定了做“AI+开源”相关项目的想法。 + +## 二、组队想法与目标 +### 1. 组队核心目标 +打造一款“AI驱动的开源工具社区运营助手”,解决中小型开源项目“运营人手不足、内容产出低效”的痛点。 + +### 2. 招募队友(3人) +- 后端开发:熟悉Python,有开源项目开发经验,能搭建工具核心功能(如AI接口对接、数据统计)。 +- 前端开发:会Vue/React,能设计简洁易用的可视化界面(如社区运营数据看板、AI内容生成入口)。 +- 产品/运营:了解开源社区规则,能梳理用户需求,制定工具推广方案(如对接GitHub社区、开源论坛)。 + +### 3. 项目初步规划 +- 第一阶段:梳理核心需求(如AI自动生成项目更新日志、issue分类标签)。 +- 第二阶段:开发MVP版本,对接免费AI接口(如ChatGPT 3.5、通义千问)。 +- 第三阶段:上线GitHub开源,收集用户反馈迭代优化,参与训练营路演。 + +我会主动承担项目协调与文档撰写工作,希望能和志同道合的技术同学一起,把想法落地成有实际价值的开源工具,共同探索开源商业模式的更多可能~ From 25b1a9011ea9580f53d14286cf9e340df231fc01 Mon Sep 17 00:00:00 2001 From: Richard Wang Date: Tue, 18 Nov 2025 19:35:50 +0800 Subject: [PATCH 2/3] Finished frist homework. --- assignments/lesson1/wangleihd.md | 182 +++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 assignments/lesson1/wangleihd.md diff --git a/assignments/lesson1/wangleihd.md b/assignments/lesson1/wangleihd.md new file mode 100644 index 0000000..e62afe6 --- /dev/null +++ b/assignments/lesson1/wangleihd.md @@ -0,0 +1,182 @@ +# Odoo商业模式分析报告 + +## 一、公司概况 + +Odoo是一款开源企业管理软件,由Fabien Pinckaers于2005年创立(最初名为tinyERP,后改为OpenERP,2015年正式更名为Odoo)。作为全球领先的开源ERP解决方案,Odoo提供一体化商业应用套件,涵盖销售、采购、库存、生产、财务、HR等100+标准模块,服务于全球中小企业市场,同时也吸引了部分大型企业的部门级应用需求。 + +## 二、商业模式核心架构 + +### 1. "开源核心+商业扩展"双轨制 + +Odoo采用独特的"双引擎"商业模式,完美平衡开源与商业价值: + +| 版本 | 特性 | 定价 | 目标用户 | +|------|------|------|----------| +| **社区版(CE)** | 完全开源(LGPLv3协议),基础功能,社区支持 | 免费 | 个人、小微企业、技术爱好者 | +| **企业版(EE)** | 高级功能(多公司管理、高级分析、专属支持),官方服务 | 订阅制(约$25-30/用户/月) | 中大型企业,需稳定支持的商业应用 | + +**核心策略**:80%开发投入开源(吸引用户),20%投入企业版(创造收入),形成"用户增长→生态繁荣→收入反哺研发"的正向循环。 + +### 2. 模块化SaaS架构 + +Odoo提供高度灵活的模块化系统,用户可按需选择和组合应用: + +- **按需付费**:按用户数量和所选应用模块付费,无隐藏成本 +- **灵活扩展**:从小型企业起步,随业务增长平滑升级,支持"先试用后付费" +- **统一平台**:所有模块无缝集成,消除数据孤岛,降低IT复杂度 + +### 3. 合作伙伴生态系统 + +Odoo构建了全球最大的商业应用生态之一: + +- **16,000+认证合作伙伴**负责实施、培训和支持服务,承担98%的服务收入 +- **1,500+开发者社区**持续贡献代码,丰富应用商店(拥有数千个模块) +- **分级伙伴计划**(Ready→Silver→Gold→Platinum)提供差异化权益,包括企业版源码访问和专属支持 + +## 三、盈利模式详解 + +### 1. 主要收入来源 + +**企业版订阅**:约占总收入20%,按用户数和使用模块收费,通常$25-30/用户/月(年度订阅) + +**云服务**:Odoo.sh托管服务(约$60/用户/月),提供基础设施、备份和安全保障 + +**专业服务**: +- 实施服务(占总收入约13%) +- 培训与咨询(Success Pack等增值服务) +- 定制开发(合作伙伴主要盈利点) + +### 2. 财务表现 + +- **盈利状态**:CEO声明公司"现金盈利",无需外部融资 +- **收入增长**:同比增长50%,2024年营收约3.7亿欧元 +- **市场估值**:2024年融资后达50亿欧元,目标2027年收入突破10亿欧元 + +## 四、社区版vs企业版:价值差异分析 + +| 功能领域 | 社区版 | 企业版 | 商业价值 | +|----------|--------|--------|----------| +| **核心功能** | ✓ 基础CRM、销售、库存、会计 | ✓ 全部核心功能+高级特性 | 企业版提供完整功能链 | +| **财务增强** | ✗ 高级预算、合并报表、税务合规 | ✓ 多币种、多公司财务、高级审计 | 满足集团化财务管理需求 | +| **生产制造** | ✗ 高级MRP、产能规划、质量控制 | ✓ 完整制造执行系统 | 提升生产效率30-50% | +| **分析能力** | ✗ 基础报表 | ✓ AI驱动分析、预测仪表盘 | 数据驱动决策,提升商业洞察 | +| **支持服务** | ✗ 社区论坛支持 | ✓ 24/7官方支持、专属SLA | 降低系统风险,保障业务连续性 | +| **定制工具** | ✗ 有限定制能力 | ✓ Odoo Studio低代码开发平台 | 快速响应业务变化,降低IT成本 | +| **移动应用** | ✗ 基础功能 | ✓ 完整移动套件,离线支持 | 提升工作效率,随时随地办公 | + +*数据来源:Odoo官方文档及合作伙伴资料* + +## 五、市场定位与竞争格局 + +### 1. 目标客户画像 + +- **中小企业**(员工<500人):Odoo核心市场,提供经济高效的一体化解决方案 +- **跨境电商**:支持100+国家税务规则与货币兑换,某客户实现8大平台订单同步,效率提升70% +- **特定行业**:零售、制造、医疗、教育等,通过行业专属模块满足垂直需求 + +### 2. 竞争优势对比 + +| 对比维度 | Odoo | SAP/ERP | Oracle NetSuite | 本土ERP | +|----------|------|----------|-----------------|---------| +| **价格** | 亲民($25-30/用户/月) | 昂贵(实施费$500K起) | 中高(按模块订阅) | 价格不等 | +| **灵活性** | ★★★★★ 高度模块化,易定制 | ★★☆☆☆ 复杂,定制成本高 | ★★★☆☆ 中等,受限于标准架构 | ★★★★☆ 本地化适配好 | +| **部署方式** | 云/本地/混合 | 主要云+本地 | 主要云 | 多为本地部署 | +| **实施周期** | 短(数周到数月) | 长(6-18个月) | 中(3-6个月) | 中(2-6个月) | +| **生态系统** | ★★★★★ 16,000+伙伴,数千模块 | ★★★★☆ 成熟但昂贵 | ★★★☆☆ 相对封闭 | ★★☆☆☆ 区域性强 | +| **适用场景** | 中小企业,快速成长型企业 | 大型跨国集团 | 中型企业,全球化业务 | 本土合规性要求高的企业 | + +*数据来源:Odoo官网及行业分析报告* + +**差异化战略**: +- **降低门槛**:社区版零成本试用,消除采购风险 +- **模块化选择**:客户仅为所需功能付费,避免"全功能套餐"浪费 +- **生态赋能**:合作伙伴网络提供本地化服务,解决中小企业IT资源不足问题 + +## 六、商业模式成功关键因素 + +### 1. 开源获客+商业变现的完美闭环 + +- **获客成本低**:社区版作为" Trojan horse",自然吸引用户,转化率约5-10% +- **用户忠诚度高**:一旦企业依赖Odoo生态,迁移成本高,持续订阅率>85% +- **口碑效应**:开源社区形成自然传播,降低营销支出(仅占收入5-8%) + +### 2. 轻资产运营+合作伙伴网络 + +- **研发集中**:公司约7,000名员工主要投入产品研发,而非销售团队 +- **服务外包**:合作伙伴承担98%实施服务,Odoo专注产品创新 +- **全球协作**:通过开源社区和合作伙伴网络覆盖150+国家,实现低成本全球化 + +### 3. 技术架构支撑商业模式 + +- **模块化设计**:每个应用独立开发,可单独销售,提升收入多元化 +- **统一数据模型**:降低集成成本,增强模块间协同,提升客户粘性 +- **云原生架构**:支持SaaS订阅模式,降低客户IT基础设施投入 + +## 七、实施成本分析(企业版) + +| 成本类别 | 估算范围(美元) | 说明 | +|----------|----------------|------| +| **软件许可** | $0-$50,000/年 | 按用户数和模块数量计算,通常$25-30/用户/月 | +| **实施服务** | $5,000-$200,000+ | 小型项目5K-50K,中型50K-100K,大型100K+ | +| **培训费用** | $2,000-$15,000 | 按用户数量和培训深度计算 | +| **定制开发** | $10,000-$100,000+ | 行业特殊需求,如生鲜保质期预警等插件($20,000/套) | +| **基础设施** | 云:included
本地:$10,000-$50,000 | Odoo.sh托管已包含在订阅费中;自托管需服务器、网络等 | +| **年度维护** | 许可费的15-20% | 软件更新、安全补丁、技术支持 | + +*注:社区版实施仅需支付实施和培训费用,可节省软件许可费(约40-60%)* + +## 八、未来发展战略 + +### 1. 产品路线图 + +- **AI能力增强**:智能文档识别(IDR)、预测分析仪表盘,提升决策效率 +- **垂直行业深耕**:开发零售、医疗、教育等行业专属解决方案,提升行业渗透率 +- **平台扩展**:强化Odoo Studio低代码平台,赋能合作伙伴快速定制,缩短交付周期 + +### 2. 市场扩张策略 + +- **新兴市场**:东南亚、中东、拉美等中小企业快速增长区域重点布局 +- **生态扩展**:计划2026年将合作伙伴网络扩展至20,000+,覆盖更多地区 +- **人才战略**:员工规模从当前7,000人扩展至2026年10,000人,强化研发和服务能力 + +### 3. 商业模式演进 + +- **SaaS订阅深化**:持续提升云服务占比,优化用户体验和安全性 +- **行业解决方案**:将通用功能切分为行业包,如生鲜、医疗等,每套售价可达$20,000,服务按年续费(约20%) +- **技术平台化**:开放API生态,吸引第三方开发者构建应用,形成更大商业生态 + +## 九、商业模式评估与展望 + +### 1. 优势 + +- **获客成本低**:开源策略自然引流,形成规模效应 +- **收入稳定性高**:订阅模式提供可预测现金流,客户留存率高 +- **生态壁垒**:16,000+合作伙伴网络形成护城河,难以短期复制 +- **财务健康**:盈利状态,支持持续研发投入和市场扩张 + +### 2. 挑战 + +- **市场竞争加剧**:SAP Business One、Oracle NetSuite等加大中小企业市场投入 +- **本土ERP崛起**:中国、印度等市场本土解决方案价格更低,本地化更好 +- **企业版转化率瓶颈**:社区版用户转化率已达5-10%,提升空间有限 +- **技术迭代压力**:需持续投入AI、物联网等新技术,保持产品竞争力 + +### 3. 前景展望 + +Odoo商业模式展现出强大的可持续性和增长潜力。通过"开源获客+商业变现+生态赋能"的闭环,公司已建立起差异化竞争优势。随着中小企业数字化转型加速和全球市场扩张,Odoo有望在2027年前实现10亿欧元营收目标,进一步巩固其在开源ERP领域的领导地位。 + +## 十、结论与建议 + +### 对企业用户的建议 + +1. **评估需求匹配度**:中小企业优先考虑社区版验证需求;中大型企业或对功能完整性要求高的组织直接选择企业版 +2. **分阶段实施**:从核心模块(销售、采购、库存)开始,逐步扩展至其他业务领域 +3. **选择合适伙伴**:优先选择Odoo认证合作伙伴(银级以上),确保实施质量和后续支持 + +### 对投资者的启示 + +- **关注订阅增长**:企业版用户数和ARPU(每用户平均收入)是核心增长指标 +- **生态健康度**:合作伙伴数量增长和应用商店模块数量反映平台活力 +- **地域扩张**:新兴市场(亚太、拉美)的收入占比提升将是未来增长引擎 + +Odoo的商业模式成功在于将开源理念与商业价值完美结合,构建了"技术+生态+服务"三位一体的商业帝国。这种模式不仅为中小企业提供了经济高效的数字化转型路径,也为Odoo自身创造了可持续的增长引擎,使其在企业软件领域独树一帜。 From b75dc9ac418074905d7a17d5aea1b984407e4d73 Mon Sep 17 00:00:00 2001 From: Richard Wang Date: Tue, 18 Nov 2025 19:48:13 +0800 Subject: [PATCH 3/3] fixed markdown error and finished lesson homework. --- assignments/lesson1/wangleihd.md | 193 +++++----------------------- assignments/lesson2/git-version.png | Bin 0 -> 36724 bytes assignments/lesson2/wangleihd.md | 82 ++++++++++++ 3 files changed, 117 insertions(+), 158 deletions(-) create mode 100644 assignments/lesson2/git-version.png create mode 100644 assignments/lesson2/wangleihd.md diff --git a/assignments/lesson1/wangleihd.md b/assignments/lesson1/wangleihd.md index e62afe6..d980e1e 100644 --- a/assignments/lesson1/wangleihd.md +++ b/assignments/lesson1/wangleihd.md @@ -1,182 +1,59 @@ -# Odoo商业模式分析报告 +# 开源商业模式分析报告模板 -## 一、公司概况 +## 学员GitHub用户名: wangleihd -Odoo是一款开源企业管理软件,由Fabien Pinckaers于2005年创立(最初名为tinyERP,后改为OpenERP,2015年正式更名为Odoo)。作为全球领先的开源ERP解决方案,Odoo提供一体化商业应用套件,涵盖销售、采购、库存、生产、财务、HR等100+标准模块,服务于全球中小企业市场,同时也吸引了部分大型企业的部门级应用需求。 +## 选择的商业模式 -## 二、商业模式核心架构 +Odoo 商业模式 -### 1. "开源核心+商业扩展"双轨制 +## 分析内容 -Odoo采用独特的"双引擎"商业模式,完美平衡开源与商业价值: +### 1. 商业模式概述 -| 版本 | 特性 | 定价 | 目标用户 | -|------|------|------|----------| -| **社区版(CE)** | 完全开源(LGPLv3协议),基础功能,社区支持 | 免费 | 个人、小微企业、技术爱好者 | -| **企业版(EE)** | 高级功能(多公司管理、高级分析、专属支持),官方服务 | 订阅制(约$25-30/用户/月) | 中大型企业,需稳定支持的商业应用 | +Odoo采用“开源核心+商业扩展”的双轨制商业模式,以开源ERP(企业资源计划)软件为核心,通过社区版吸引用户、企业版实现商业变现,并依托模块化架构和全球合作伙伴生态构建商业闭环。其核心逻辑是:以开源降低用户试用门槛,以企业版高级功能和服务满足商业需求,同时通过合作伙伴网络承担实施、培训等服务,形成“产品研发+生态赋能”的轻资产运营模式。 -**核心策略**:80%开发投入开源(吸引用户),20%投入企业版(创造收入),形成"用户增长→生态繁荣→收入反哺研发"的正向循环。 +### 2. 收入来源 -### 2. 模块化SaaS架构 +Odoo的收入主要来自三大板块: -Odoo提供高度灵活的模块化系统,用户可按需选择和组合应用: +- **企业版订阅**:占总收入约20%,按用户数和模块数量收费(约$25-30/用户/月),提供高级功能(如多公司管理、AI分析)和官方支持; +- **云服务**:通过Odoo.sh托管服务(约$60/用户/月)提供基础设施、备份等,简化客户部署成本; +- **专业服务**:包括实施服务(占总收入约13%)、定制开发、培训等,其中98%的服务收入由合作伙伴完成,Odoo自身聚焦产品研发。 -- **按需付费**:按用户数量和所选应用模块付费,无隐藏成本 -- **灵活扩展**:从小型企业起步,随业务增长平滑升级,支持"先试用后付费" -- **统一平台**:所有模块无缝集成,消除数据孤岛,降低IT复杂度 +此外,应用商店中第三方模块的分成也构成补充收入。 -### 3. 合作伙伴生态系统 +### 3. 社区与生态 -Odoo构建了全球最大的商业应用生态之一: +Odoo拥有庞大的社区与生态系统: -- **16,000+认证合作伙伴**负责实施、培训和支持服务,承担98%的服务收入 -- **1,500+开发者社区**持续贡献代码,丰富应用商店(拥有数千个模块) -- **分级伙伴计划**(Ready→Silver→Gold→Platinum)提供差异化权益,包括企业版源码访问和专属支持 +- **开发者社区**:1,500+活跃开发者持续贡献代码,社区版基于LGPLv3协议开源,支持用户自由修改和分发; +- **合作伙伴网络**:全球16,000+认证合作伙伴(分为Ready、Silver、Gold、Platinum四级),覆盖150+国家,承担实施、本地化适配等服务; +- **应用生态**:官方应用商店包含数千个模块,覆盖零售、制造、医疗等垂直行业,形成“基础功能+行业扩展”的丰富生态。 -## 三、盈利模式详解 +社区与合作伙伴的互动形成正向循环:社区贡献提升产品迭代速度,合作伙伴扩大市场覆盖,反哺用户增长。 -### 1. 主要收入来源 +### 4. 竞争优势 -**企业版订阅**:约占总收入20%,按用户数和使用模块收费,通常$25-30/用户/月(年度订阅) +相比SAP、Oracle等传统商业软件,Odoo的商业模式优势显著: -**云服务**:Odoo.sh托管服务(约$60/用户/月),提供基础设施、备份和安全保障 +- **成本优势**:社区版免费降低试用门槛,企业版订阅价格仅为传统ERP的1/5-1/10,实施周期缩短至数周到数月(传统ERP需6-18个月); +- **灵活性**:模块化架构支持用户按需选择功能,避免“全套餐”浪费,Odoo Studio低代码工具降低定制成本; +- **生态壁垒**:16,000+合作伙伴形成本地化服务网络,解决中小企业IT资源不足问题,传统软件难以复制; +- **获客效率**:开源社区自然引流,获客成本仅为传统软件的1/3,用户转化率约5-10%,且迁移成本高(留存率>85%)。 -**专业服务**: -- 实施服务(占总收入约13%) -- 培训与咨询(Success Pack等增值服务) -- 定制开发(合作伙伴主要盈利点) +### 5. 挑战与风险 -### 2. 财务表现 +Odoo的商业模式面临多重挑战: -- **盈利状态**:CEO声明公司"现金盈利",无需外部融资 -- **收入增长**:同比增长50%,2024年营收约3.7亿欧元 -- **市场估值**:2024年融资后达50亿欧元,目标2027年收入突破10亿欧元 +- **市场竞争加剧**:SAP Business One、Oracle NetSuite等下沉中小企业市场,通过品牌优势挤压空间; +- **本土ERP分流**:中国、印度等市场的本土解决方案(如用友、金蝶)在本地化合规(税务、报表)上更具优势,价格更低; +- **转化率瓶颈**:社区版用户中仅5-10%转化为企业版付费用户,进一步提升难度大; +- **技术迭代压力**:需持续投入AI、物联网等新技术以保持竞争力,研发成本逐年上升。 -## 四、社区版vs企业版:价值差异分析 +此外,开源模式下的代码泄露风险(如核心功能被模仿)也对商业版溢价构成挑战。 -| 功能领域 | 社区版 | 企业版 | 商业价值 | -|----------|--------|--------|----------| -| **核心功能** | ✓ 基础CRM、销售、库存、会计 | ✓ 全部核心功能+高级特性 | 企业版提供完整功能链 | -| **财务增强** | ✗ 高级预算、合并报表、税务合规 | ✓ 多币种、多公司财务、高级审计 | 满足集团化财务管理需求 | -| **生产制造** | ✗ 高级MRP、产能规划、质量控制 | ✓ 完整制造执行系统 | 提升生产效率30-50% | -| **分析能力** | ✗ 基础报表 | ✓ AI驱动分析、预测仪表盘 | 数据驱动决策,提升商业洞察 | -| **支持服务** | ✗ 社区论坛支持 | ✓ 24/7官方支持、专属SLA | 降低系统风险,保障业务连续性 | -| **定制工具** | ✗ 有限定制能力 | ✓ Odoo Studio低代码开发平台 | 快速响应业务变化,降低IT成本 | -| **移动应用** | ✗ 基础功能 | ✓ 完整移动套件,离线支持 | 提升工作效率,随时随地办公 | +### 6. 个人见解 -*数据来源:Odoo官方文档及合作伙伴资料* +Odoo商业模式的核心成功在于平衡了“开源公益”与“商业变现”的矛盾:通过80%资源投入开源版构建用户基础,20%资源投入企业版创造收入,形成可持续的研发循环。这种模式对中小企业数字化转型尤为友好——既降低了试错成本,又能随业务增长平滑升级。 -## 五、市场定位与竞争格局 - -### 1. 目标客户画像 - -- **中小企业**(员工<500人):Odoo核心市场,提供经济高效的一体化解决方案 -- **跨境电商**:支持100+国家税务规则与货币兑换,某客户实现8大平台订单同步,效率提升70% -- **特定行业**:零售、制造、医疗、教育等,通过行业专属模块满足垂直需求 - -### 2. 竞争优势对比 - -| 对比维度 | Odoo | SAP/ERP | Oracle NetSuite | 本土ERP | -|----------|------|----------|-----------------|---------| -| **价格** | 亲民($25-30/用户/月) | 昂贵(实施费$500K起) | 中高(按模块订阅) | 价格不等 | -| **灵活性** | ★★★★★ 高度模块化,易定制 | ★★☆☆☆ 复杂,定制成本高 | ★★★☆☆ 中等,受限于标准架构 | ★★★★☆ 本地化适配好 | -| **部署方式** | 云/本地/混合 | 主要云+本地 | 主要云 | 多为本地部署 | -| **实施周期** | 短(数周到数月) | 长(6-18个月) | 中(3-6个月) | 中(2-6个月) | -| **生态系统** | ★★★★★ 16,000+伙伴,数千模块 | ★★★★☆ 成熟但昂贵 | ★★★☆☆ 相对封闭 | ★★☆☆☆ 区域性强 | -| **适用场景** | 中小企业,快速成长型企业 | 大型跨国集团 | 中型企业,全球化业务 | 本土合规性要求高的企业 | - -*数据来源:Odoo官网及行业分析报告* - -**差异化战略**: -- **降低门槛**:社区版零成本试用,消除采购风险 -- **模块化选择**:客户仅为所需功能付费,避免"全功能套餐"浪费 -- **生态赋能**:合作伙伴网络提供本地化服务,解决中小企业IT资源不足问题 - -## 六、商业模式成功关键因素 - -### 1. 开源获客+商业变现的完美闭环 - -- **获客成本低**:社区版作为" Trojan horse",自然吸引用户,转化率约5-10% -- **用户忠诚度高**:一旦企业依赖Odoo生态,迁移成本高,持续订阅率>85% -- **口碑效应**:开源社区形成自然传播,降低营销支出(仅占收入5-8%) - -### 2. 轻资产运营+合作伙伴网络 - -- **研发集中**:公司约7,000名员工主要投入产品研发,而非销售团队 -- **服务外包**:合作伙伴承担98%实施服务,Odoo专注产品创新 -- **全球协作**:通过开源社区和合作伙伴网络覆盖150+国家,实现低成本全球化 - -### 3. 技术架构支撑商业模式 - -- **模块化设计**:每个应用独立开发,可单独销售,提升收入多元化 -- **统一数据模型**:降低集成成本,增强模块间协同,提升客户粘性 -- **云原生架构**:支持SaaS订阅模式,降低客户IT基础设施投入 - -## 七、实施成本分析(企业版) - -| 成本类别 | 估算范围(美元) | 说明 | -|----------|----------------|------| -| **软件许可** | $0-$50,000/年 | 按用户数和模块数量计算,通常$25-30/用户/月 | -| **实施服务** | $5,000-$200,000+ | 小型项目5K-50K,中型50K-100K,大型100K+ | -| **培训费用** | $2,000-$15,000 | 按用户数量和培训深度计算 | -| **定制开发** | $10,000-$100,000+ | 行业特殊需求,如生鲜保质期预警等插件($20,000/套) | -| **基础设施** | 云:included
本地:$10,000-$50,000 | Odoo.sh托管已包含在订阅费中;自托管需服务器、网络等 | -| **年度维护** | 许可费的15-20% | 软件更新、安全补丁、技术支持 | - -*注:社区版实施仅需支付实施和培训费用,可节省软件许可费(约40-60%)* - -## 八、未来发展战略 - -### 1. 产品路线图 - -- **AI能力增强**:智能文档识别(IDR)、预测分析仪表盘,提升决策效率 -- **垂直行业深耕**:开发零售、医疗、教育等行业专属解决方案,提升行业渗透率 -- **平台扩展**:强化Odoo Studio低代码平台,赋能合作伙伴快速定制,缩短交付周期 - -### 2. 市场扩张策略 - -- **新兴市场**:东南亚、中东、拉美等中小企业快速增长区域重点布局 -- **生态扩展**:计划2026年将合作伙伴网络扩展至20,000+,覆盖更多地区 -- **人才战略**:员工规模从当前7,000人扩展至2026年10,000人,强化研发和服务能力 - -### 3. 商业模式演进 - -- **SaaS订阅深化**:持续提升云服务占比,优化用户体验和安全性 -- **行业解决方案**:将通用功能切分为行业包,如生鲜、医疗等,每套售价可达$20,000,服务按年续费(约20%) -- **技术平台化**:开放API生态,吸引第三方开发者构建应用,形成更大商业生态 - -## 九、商业模式评估与展望 - -### 1. 优势 - -- **获客成本低**:开源策略自然引流,形成规模效应 -- **收入稳定性高**:订阅模式提供可预测现金流,客户留存率高 -- **生态壁垒**:16,000+合作伙伴网络形成护城河,难以短期复制 -- **财务健康**:盈利状态,支持持续研发投入和市场扩张 - -### 2. 挑战 - -- **市场竞争加剧**:SAP Business One、Oracle NetSuite等加大中小企业市场投入 -- **本土ERP崛起**:中国、印度等市场本土解决方案价格更低,本地化更好 -- **企业版转化率瓶颈**:社区版用户转化率已达5-10%,提升空间有限 -- **技术迭代压力**:需持续投入AI、物联网等新技术,保持产品竞争力 - -### 3. 前景展望 - -Odoo商业模式展现出强大的可持续性和增长潜力。通过"开源获客+商业变现+生态赋能"的闭环,公司已建立起差异化竞争优势。随着中小企业数字化转型加速和全球市场扩张,Odoo有望在2027年前实现10亿欧元营收目标,进一步巩固其在开源ERP领域的领导地位。 - -## 十、结论与建议 - -### 对企业用户的建议 - -1. **评估需求匹配度**:中小企业优先考虑社区版验证需求;中大型企业或对功能完整性要求高的组织直接选择企业版 -2. **分阶段实施**:从核心模块(销售、采购、库存)开始,逐步扩展至其他业务领域 -3. **选择合适伙伴**:优先选择Odoo认证合作伙伴(银级以上),确保实施质量和后续支持 - -### 对投资者的启示 - -- **关注订阅增长**:企业版用户数和ARPU(每用户平均收入)是核心增长指标 -- **生态健康度**:合作伙伴数量增长和应用商店模块数量反映平台活力 -- **地域扩张**:新兴市场(亚太、拉美)的收入占比提升将是未来增长引擎 - -Odoo的商业模式成功在于将开源理念与商业价值完美结合,构建了"技术+生态+服务"三位一体的商业帝国。这种模式不仅为中小企业提供了经济高效的数字化转型路径,也为Odoo自身创造了可持续的增长引擎,使其在企业软件领域独树一帜。 +但其未来增长需突破两大关键点:一是通过行业垂直解决方案(如生鲜供应链、医疗管理)提升企业版ARPU(每用户平均收入);二是在新兴市场(如东南亚、非洲)深化本地化生态,应对本土ERP的竞争。总体而言,开源+生态的模式具有长期韧性,但需在“标准化”与“定制化”之间找到更精细的平衡点,避免因过度依赖合作伙伴导致服务质量参差不齐。 \ No newline at end of file diff --git a/assignments/lesson2/git-version.png b/assignments/lesson2/git-version.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3e21c77c296b00c7146112ad307226950c46b1 GIT binary patch literal 36724 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%0D+D|931ZM?(FW|><-RW9GrrJf*h~8IJmgjASKvb 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 j7*ze&jQ> ~/.zshrc`(macOS默认shell为zsh),然后执行`source ~/.zshrc`使配置生效。 + +3. 问题:提交中文信息时终端显示乱码或提交后GitHub显示问号。 + 原因:默认编码未配置为UTF-8。 + 解决方法:终端执行以下命令全局配置编码: + +```bash + git config --global core.quotepath false # 解决文件名中文显示问题 + git config --global i18n.commitencoding utf-8 # 提交信息编码 + git config --global i18n.logoutputencoding utf-8 # 日志输出编码 + export LESSCHARSET=utf-8 # 临时生效,若需永久生效,添加到~/.zshrc +``` + +## 3. 版本信息截图 + +![Git版本信息截图](./git-version.png) + +## 4. Git命令使用过程总结 + +1. `git clone`:克隆远程仓库到本地 + 操作:终端进入目标文件夹(如`cd ~/Documents/Projects`),执行`git clone https://github.com/wangleihd/github101.git`,将个人仓库复制到本地。 + 理解:克隆后会生成与仓库同名的文件夹,包含完整的版本历史,是本地开发的基础。macOS终端中路径切换使用`cd`命令,查看当前路径用`pwd`,列表文件用`ls`。 + +2. `git add`:添加文件到暂存区 + 操作:创建作业文件后(如`touch assignments/lesson2/wangleihd.md`),执行`git add assignments/lesson2/wangleihd.md`(单个文件)或`git add .`(所有修改),将文件纳入提交准备。 + 理解:暂存区是“待提交区”,可通过`git status`查看哪些文件已添加,避免误提交无关内容(如日志文件、临时文件)。 + +3. `git commit`:提交到本地仓库 + 操作:执行`git commit -m "完成lesson2作业:macOS Git安装与使用记录"`,将暂存区内容写入本地版本库。 + 理解:每次提交需附带简洁清晰的说明(`-m`参数),方便后续通过`git log`追溯修改历史。macOS终端支持中文输入,直接输入中文说明即可。 + +4. `git push`:推送至远程仓库 + 操作:执行`git push origin main`,将本地提交同步到GitHub个人仓库的`main`分支。 + 理解:首次推送可能需要登录GitHub,推荐使用个人访问令牌(Settings→Developer settings→Personal access tokens)认证,输入用户名和令牌即可。推送成功后,远程仓库与本地保持一致。 + +5. `git pull`:拉取远程最新更改 + 操作:若远程仓库有更新(如他人提交),执行`git pull origin main`将最新内容拉到本地,避免冲突。 + 理解:多人协作时,提交前先拉取是关键习惯,可提前发现并解决代码冲突(冲突时终端会提示“Automatic merge failed”,需手动编辑冲突文件后重新提交)。 + +6. 其他常用命令: + - `git status`:查看工作区状态(必用命令),清晰显示“已修改未暂存”“已暂存未提交”等状态。 + - `git log`:查看提交历史,`git log --graph --oneline`可图形化展示分支与提交记录,更直观。 + - `git checkout -b 新分支名`:创建并切换到新分支,适合功能开发时隔离代码。 + +使用体验:macOS终端对Git命令的支持更流畅,Homebrew安装方式简化了环境配置;相比图形化工具,命令行操作能更精准地控制版本流程,尤其是分支管理和冲突解决时,命令行的逻辑性更清晰。初期需记忆常用命令,熟练后效率显著提升。