”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 ChatGPT 构建订单处理服务(贡献努力)并已完成

使用 ChatGPT 构建订单处理服务(贡献努力)并已完成

发布于2024-11-06
浏览:514

Building an Orders Processing Service with ChatGPT (contribute  efforts) and Finished in ays

人工智能为改变和提高我的日常工作效率做出了贡献

作为一名开发人员,当您的时间有限时,构建订单处理服务有时会让人感到不知所措。然而,借助 ChatGPT 等人工智能驱动的开发工具的强大功能,您可以通过生成代码、设计实体和逐步解决问题来显着加快流程。在本文中,我将向您介绍如何使用 ChatGPT 在短短 2 天 内构建功能齐全的订单处理服务,从收集需求到完成。

老实说,对于不同的小任务有很多小线程和提示,我无法将它们总结成一个完整的项目,但总的来说......它帮助了我 70 - 80%。另外,这里是一些原始代码,经过我审阅,可能是手工修改过的,所以你可能在我分享的github上找不到这个功能。

第一天:了解要求和设置

第 1 步:收集并明确需求

我做的第一件事就是列出该服务所需的核心功能。以下是我需要的主要功能:

  1. 用户注册:允许用户使用手机号码和地址注册。
  2. 特许经营位置搜索:使客户能够查看和查找附近的咖啡特许经营店。
  3. 下订单:客户可以从菜单中下单包含多个项目。
  4. 队列管理:跟踪客户在队列中的位置并提供预期等待时间。
  5. 取消订单:顾客可以随时退出队列并取消订单。

第 2 步:使用 ChatGPT 生成 API 端点

我请求 ChatGPT 帮助我设计满足需求的 API 结构。这是我使用的第一个提示的示例:

迅速的:

使用 Spring Boot 为用户注册系统创建 API 端点,用户可以在其中使用姓名、手机号码和地址进行注册。

结果: ChatGPT 生成了几个端点:

  • POST /users/register:注册新用户。
  • GET /franchises/nearby:根据纬度和经度查找附近的咖啡特许经营店。
  • POST /orders: 下单包含多个商品。
  • GET /orders/{orderId}/queue-position:检查用户在队列中的位置。
  • DELETE /orders/{orderId}: 取消订单并退出队列。

第 3 步:实体设计

对于订单处理服务,我们需要 User、Franchise、Order、Queue 和 OrderItem 实体。我使用 ChatGPT 来定义这些具有必要字段的实体。

迅速的:

设计系统的用户实体。用户可以拥有手机号码、地址和角色(如客户)。

结果: ChatGPT 使用 JPA 提供了一个简单的用户实体:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID id;

    @Column(nullable = false, unique = true)
    private String username;
    @Column(nullable = false)
    private String password;
    private String mobileNumber;
    private String address;
    private UserRole role; // CUSTOMER, ADMIN
}

我对特许经营、订单和队列实体重复了此过程。

第 2 天:实施业务逻辑

第四步:下单逻辑

一旦设置了基本的 API 和实体,我就开始实施下单的业务逻辑。这是该服务的关键部分,因为它需要处理菜单中的多个项目并管理队列位置。

迅速的:

实现对多个商品下订单的逻辑,其中每个商品都链接到特许经营中的特定菜单。

结果: ChatGPT 指导我设计了一个 OrderService 来处理这个问题。这是实现的一部分:

public Order createOrder(UUID customerId, UUID franchiseId, List items) {
    Order order = new Order();
    order.setCustomer(userRepository.findById(customerId).orElseThrow());
    order.setFranchise(franchiseRepository.findById(franchiseId).orElseThrow());

    List orderItems = items.stream()
        .map(itemDto -> new OrderItem(menuItemRepository.findById(itemDto.getMenuItemId()), itemDto.getQuantity()))
        .collect(Collectors.toList());
    order.setItems(orderItems);
    order.setQueuePosition(findQueuePositionForFranchise(franchiseId));
    return orderRepository.save(order);
}

第5步:队列管理

接下来,我请 ChatGPT 帮助我设计将客户放入队列并跟踪其位置的逻辑。

迅速的:

咖啡加盟系统中如何计算订单的排队位置和等待时间?

结果: ChatGPT 建议创建一个 QueueService 来跟踪订单并根据时间戳为其分配位置。我的实现如下:

public int findQueuePositionForFranchise(UUID franchiseId) {
    List queue = customerQueueRepository.findAllByFranchiseId(franchiseId);
    return queue.size()   1;
}

它还提供了根据平均订单处理时间估计等待时间的指导。

第 6 步:取消订单

最后,我实现了允许客户取消订单并退出队列的逻辑:

public void cancelOrder(UUID orderId) {
    Order order = orderRepository.findById(orderId).orElseThrow();
    queueService.removeFromQueue(order.getQueue().getId(), order.getId());
    orderRepository.delete(order);
}

完成项目

到第 2 天结束时,我获得了功能齐全的服务,使客户能够:

  • 使用手机号码和地址注册。
  • 查看附近的特许经营店。
  • 从菜单中选择多个项目下订单。
  • 查看他们的排队位置和等待时间。
  • 随时取消订单。

要点

  • 利用人工智能执行日常任务:ChatGPT 加快了重复性任务的速度,例如设计 API、生成样板代码和实现常见业务逻辑模式。
  • 分而治之:通过将项目分解为小的、可管理的任务(例如用户注册、队列管理和下订单),我能够按顺序实现每个功能。
  • 人工智能辅助学习:虽然ChatGPT提供了大量代码,但我仍然需要了解底层逻辑并根据我的项目需求进行调整,这是一次很棒的学习体验。
  • 实时调试:ChatGPT 帮助我解决了实时问题,指导我解决实施过程中遇到的错误和异常,使项目保持在正轨上。

我还有几个步骤来创建文档、使用 Liquidbase 并让 chatGPT 生成示例数据以便于测试。

结论

在 2 天内为一家咖啡店建立一个订单处理系统可能听起来令人畏惧,但在人工智能的帮助下,这是可以实现的。 ChatGPT 就像编码助手一样,帮助我将抽象需求快速转化为工作系统。虽然人工智能可以提供基础,但改进和定制代码仍然是一项基本技能。这个项目教会了我如何在不失去对开发过程的控制的情况下最大限度地发挥人工智能工具的价值。

按照我采取的步骤,您可以加快自己的项目速度并专注于解决更高级别的问题,而将常规代码生成和指导留给 AI。

完整源码Github

版本声明 本文转载于:https://dev.to/jackynote/building-an-orders-processing-service-with-chatgpt-contribute-70-80-efforts-and-finished-in-2-days-3klf?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-07-01
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-07-01
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-07-01
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-07-01
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-07-01
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-07-01
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-07-01
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-01
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-07-01
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示 仅通过Python的MlStripper 来简化剥离过程,Python Standard库提供了一个专门的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    编程 发布于2025-07-01
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-07-01
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-07-01
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-07-01
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-07-01
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-07-01

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3