」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 ChatGPT 建立訂單處理服務(貢獻努力)並已完成

使用 ChatGPT 建立訂單處理服務(貢獻努力)並已完成

發佈於2024-11-06
瀏覽:710

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]刪除
最新教學 更多>
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-05-02
  • 如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    程式設計 發佈於2025-05-02
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-05-02
  • 如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用時間數據時...
    程式設計 發佈於2025-05-02
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-05-02
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-05-02
  • PHP SimpleXML解析帶命名空間冒號的XML方法
    PHP SimpleXML解析帶命名空間冒號的XML方法
    在php 很少,請使用該限制很大,很少有很高。例如:這種技術可確保可以通過遍歷XML樹和使用兒童()方法()方法的XML樹和切換名稱空間來訪問名稱空間內的元素。
    程式設計 發佈於2025-05-02
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-05-02
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-05-02
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-05-02
  • Python中何時用"try"而非"if"檢測變量值?
    Python中何時用"try"而非"if"檢測變量值?
    使用“ try“ vs.” if”來測試python 在python中的變量值,在某些情況下,您可能需要在處理之前檢查變量是否具有值。在使用“如果”或“ try”構建體之間決定。 “ if” constructs result = function() 如果結果: 對於結果: ...
    程式設計 發佈於2025-05-02
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-05-02
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-05-02
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-05-02
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-05-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3