AI编程再试牛刀-强大的Cursor+Claude3.7-实现采购订单录入功能

B站影视 日本电影 2025-03-20 11:09 2

摘要:上篇文章试验了一个简单的项目跟踪系统,今天重点还是想试下一个主从表单的录入功能是否能够实现。因此我选择了采购订单录入这个功能。采购订单录入功能看似简单,但是涉及到订单头,订单明细,供应商,物料,数据字典多张表。数据联动和业务规则相对更加复杂。

Hello,大家好,我是人月聊IT。

今天再跟大家分享一篇用Cursor来做一个稍微复杂的功能。首先在讲具体的内容前还是做一下关键点的总结,具体如下:

上篇文章试验了一个简单的项目跟踪系统,今天重点还是想试下一个主从表单的录入功能是否能够实现。因此我选择了采购订单录入这个功能。采购订单录入功能看似简单,但是涉及到订单头,订单明细,供应商,物料,数据字典多张表。数据联动和业务规则相对更加复杂。

比如选择了供应商后,在后面订单明细物料录入只能录入该供应商供货的物料信息。再比如录入数量后自动计算价格和订单总价等。

在这次的测试中,我刚好想试验下Claude 3.7本身写提示词的能力。因此我只初步表达了想做一个采购订单的录入功能,我如何才能够清晰表达需求和提示词,让AI能够理解并帮我生成代码。

基于这个提问,Claude帮我生成了完整的提示词如下:

我需要开发一个采购管理系统中的采购订单录入功能,使用Python+Flask框架和SQLite数据库。这是一个全新的功能,需要从零开始设计所有数据表。请帮我实现以下功能:设计完整的数据模型,包括:供应商表(Supplier):包含供应商编码(唯一)、名称、联系人、电话、地址、邮箱、税号、开户行、银行账号、状态(正常/失效)、创建人、创建时间、修改人、最后修改时间等信息物料表(Material):包含物料编码(唯一,以M打头+4位流水号)、名称、规格、型号、单位、类别、状态(正常/失效)、创建人、创建时间、修改人、最后修改时间等信息供应商物料关联表(SupplierMaterial):记录供应商可提供的物料信息,包含供应商ID、物料ID、单价、创建人、创建时间、修改人、最后修改时间等订单头表(PurchaseOrder):包含订单编号、供应商ID、订单日期、预计到货日期、总金额、备注、状态(草稿/生效)、删除标志、创建人、创建时间、修改人、最后修改时间等订单明细表(PurchaseOrderItem):包含订单ID、物料ID、数量、单价、金额、交货日期、备注、创建人、创建时间、修改人、最后修改时间等数据字典表(Dictionary):用于存储各种状态、类型等选项值的表,包含类型、编码、名称、排序、备注等//各数据项的录入规则:订单头信息:订单编号:系统自动生成,格式为"PO"+年月日+4位流水号(按天重置),如PO2025031800001,不可手动修改供应商:从已有正常状态的供应商列表中选择,不可手动输入,必须先选择供应商才能录入明细订单日期:日期选择器选择,默认为当天预计到货日期:日期选择器选择,默认为当天+7天,必须大于订单日期备注:可选文本域,手动输入,最多500字符订单明细信息(可动态添加多行):物料:从已选供应商可提供的正常状态物料列表中选择,不可手动输入物料规格型号:选择物料后自动带出,不可修改单位:选择物料后自动带出,不可修改数量:手动输入,必须为正数,最多保留2位小数单价:选择物料后自动带出供应商-物料关联表中的默认单价,可以手动修改,必须为正数,最多保留2位小数金额:自动计算(数量×单价),不可手动修改,最多保留2位小数,无需考虑税率交货日期:日期选择器选择,默认为订单预计到货日期,必须大于等于订单日期备注:可选文本输入,最多200字符创建必要的数据库模式,使用SQLite作为数据库:定义所有表结构及字段类型设置主键和外键关系定义必要的索引,特别是针对查询频繁的字段数据修改与删除规则:订单保存后允许修改所有内容,除了订单编号支持订单逻辑删除(设置删除标志,而非物理删除)基础数据(供应商、物料)被引用后不允许删除只有正常状态的供应商和物料可以选择实现订单录入的功能:新建订单页面,包含订单头信息和可动态添加的订单明细必须先选择供应商,然后才能录入明细信息订单明细可以动态添加/删除行项目保存功能:点击保存按钮即完成订单录入并生效,无需额外的工作流审批订单提交前进行数据验证,确保必填字段已填写且符合规则订单提交时自动计算总金额(所有明细行金额之和)实现基础数据维护功能:供应商管理:添加、编辑、查询供应商信息物料管理:添加、编辑、查询物料信息(物料编码自动生成)供应商物料关联管理:设置供应商可提供的物料及其价格数据字典管理:维护系统中使用的各种状态、类型等选项值实现订单查询功能:订单列表页,支持按订单编号、供应商、日期范围等条件查询订单详情页,显示完整的订单头和明细信息支持分页功能,默认每页10条记录//数据验证和业务规则:同一订单中不能有重复的物料订单总金额不能为零或负数订单必须至少有一条明细行所有必填字段必须填写且符合格式要求校验失败时,通过对话框提示失败信息//用户界面要求:使用Bootstrap实现响应式设计订单头信息每行排列三个数据录入元素,采用表格化布局订单头和明细在同一页面上录入订单明细表格需显示物料编码,物料名称,规格型号,单位,价格,数量,金额明细表格默认按物料编码排序//用户认证:实现简单的用户登录功能,用户名和密码都为admin无需角色权限控制//其他约束:数字、日期、货币的格式化按中国大陆的通常规则无需支持多语言、移动端访问、大数据量性能优化无需导出功能和报表功能无需单元测试无需打印功能无需批量导入导出功能无需复制功能无需操作日志记录无需数据库备份恢复无需系统配置管理请提供完整的Python+Flask源代码实现,包括:数据模型定义(使用SQLAlchemy ORM)数据库迁移脚本API路由和控制器前端模板和表单(使用Jinja2和WTForms)静态资源(CSS、JavaScript,可以使用jQuery和Bootstrap)业务逻辑层初始化数据脚本(如预置一些基础的供应商、物料和字典数据)//登录和菜单要求首先访问首页显示登录界面,登录界面简洁美观,居中。登录进入系统后显示系统主界面,布局为左右布局,左边是类似微软 outlook bar的菜单布局方式。支持一级菜单和二级菜单。一级菜单有采购订单管理和数据查询两个。采购订单管理下面有:采购订单录入,采购订单查询,物料管理,供应商管理,供应商物料关系管理,数据字典管理几个功能,具体要把上面实现的功能挂接到这些二级菜单下面。一级菜单数据查询下面只有一个二级菜单,数据表查询数据表查询功能是直接对sqlite数据库中的数据表进行查询。查询条件为数据表名称,最大查询条数。数据表名称从下拉列表中选择。注意整体界面需要美观,符合通用的web系统的易用性展示。你可以选择常用的css文件或bootstrap进行界面美化。注意顶部需要有一个top bar栏位,深蓝色底色。右上方可以查看到个人信息,也可以注销退出。//代码要求:清晰的项目结构(遵循Flask应用的最佳实践)遵循PEP 8编码规范包含适当的注释和文档错误处理和日志记录易于维护和扩展的设计模式

注意为了输出完整的提示词,实际我做了2轮左右的迭代。就是进一步反问AI,我当前的提示词需求是否足够支撑它去帮我生成完整的源代码,如果不能支撑,还需要我确认哪些问题点。具体如下截图:

通过两轮迭代后,我们基本可以拿到上面这种完整可用的提示词。在拿到提示词后,进入Cursor开始实现完整的功能。

注意我这次采取的是一次全部生成,在整个代码生成和bug修复过程中。再次验证全一次生成不是好思路,更好的思路还是我上个例子一样分段生成,这样容易将复杂问题进行切分,也方便AI修改和查找Bug。

类似今天采购订单创建的例子,仍然可以分为搭建登录和外部框架,配置供应商,物料,数据字典等基础信息维护功能。接着才是采购订单录入和维护功能的实现上面。

在整个系统实现完成后,登录进入首页界面如下:

然后进入到采购订单录入功能:

注意这个界面看着简单,但是实现了比较复杂的一些前端界面交互和联动。比如选择了供应商后才能够添加采购明细行,同时物料选择只能从该供应商提供的物料中进行选择。

另外选择了物料后规格型号,单位,价格信息都会自动填充进来。同时在录入数量后会自动计算该行的金额,同时自动刷新订单总金额。最后,订单编号是自动变化,不允许手工录入,会根据编码规则自动生成订单编号。

所有的这些规则都AI自动完全实现。在保存成功后会自动跳转到采购订单查询界面,支持模糊查询功能。

再点击查看按钮,可以进入到订单详情查看界面。

对于基础数据和关系维护表界面如下:

注意Cursor还帮我生成了完整的Readme文件。

所有我创建订单的时候需要引用的供应商,物料,数据字典表的测试数据,在Cursor开发环境里面,让Cursor再单独写一个initData.py的文件,帮我创建测试用数据,同时注意数据间的主外键关系。

由于Cursor试用期的会话用完,我没有再做进一步的功能优化,但是从这个例子基本看到采用Cursor来从0到1做复杂应用开发没有任何问题。这里面真正影响到效率的地方体现在:

其一是Cursor代码生成速度。其二是Cursor上下文理解和记忆能力,对于Bug的修复能力,包括一次能否修复多个Bug。我反馈Bug给Cursor后,明细感觉Cursor会在本地自己启动Debug模式进行多轮迭代修复,这个是AI辅助工具相当重要的一个功能。

复杂项目的AI辅助编程思路

那么对于复杂项目,我们采用AI辅助编程的思路究竟应该如何?

里面一个关键点仍然应该是分为治之的思路,讲复杂大项目拆分为多个组件和模块,先定义清楚组件模块间的接口和集成关系,在使用AI工具逐个开发每个模块。

如果是微服务架构模式,你仍然可以考虑采用前后端分离的思路,先让Cursor完成后端组件和API接口服务能力的规划和暴露,再基于后端API能力层去辅助开发前端功能模块。

任何一个复杂项目都需要提前规划一个技术平台,规划通用的技术组件和公共方法库。在技术平台里面涉及到具体的系统配置,用户管理,资源,菜单,权限,流程引擎等基础功能。同时还要考虑对应消息,缓存等是否需要规划独立的技术组件服务。

因此复杂项目生成思路可以参考如下:

1. 生成登录和主界面菜单框架风格并优化css

2. 生成常见的系统管理模块(用户,组织,权限,菜单)

3. 生成工作流引擎模块(引入第三方组件集成)

4. 生成公共组件库和公共方法库

5. 引入平台可能用到的消息,安全,缓存,日志组件

6. 上层功能微服务拆分

7. 后端微服务逐个生成,并暴露API接口服务

8. 给出前端框架参考规范模版文件让AI学习

9. 根据规范来生成前端功能,并实现和后端集成

以上是一个完整的复杂项目可以参考的从0到1由Cursor进行生成的思路。再次说明如果源代码工程项目越大,Cursor响应越慢。因此大点的项目一定要分组件和模块,逐个处理。

今天分享就到这里,希望今天分享能够给大家更多启发。

来源:人月聊IT

相关推荐