fastapi房產銷售系統

說明:
我希望用fastapi寫幾個接口,查詢房產交易系統的幾條數據,然后在postman里面測試

  1. 查詢客戶所有預約記錄(含房源信息)需要對應銷售經理
  2. 查詢客戶所有訂單(含房源信息)
  3. 統計銷售經理名下所有房源銷售情況和銷售金額
  4. 查看房源詳情及評價列表

step1:sql數據庫,建表,添加數據,寫查詢sql

-- 用戶表(管理員/客戶/銷售經理)
CREATE TABLE `user` (`user_id` INT PRIMARY KEY AUTO_INCREMENT,`username` VARCHAR(50) UNIQUE NOT NULL,`password` VARCHAR(100) NOT NULL,`role` ENUM('admin', 'customer', 'sales') NOT NULL DEFAULT 'customer',`real_name` VARCHAR(50),`phone` VARCHAR(20),`email` VARCHAR(50),`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 房源信息表
CREATE TABLE `house` (`house_id` INT PRIMARY KEY AUTO_INCREMENT,`title` VARCHAR(100) NOT NULL,`price` DECIMAL(12,2) NOT NULL,`area` DECIMAL(6,2) COMMENT '面積(平方米)',`room_type` VARCHAR(20) COMMENT '戶型(如3室2廳)',`address` VARCHAR(200),`status` ENUM('pending', 'listed', 'sold') DEFAULT 'pending',`sales_id` INT COMMENT '負責的銷售經理ID',`description` TEXT,`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (`sales_id`) REFERENCES `user`(`user_id`)
);-- 預約看房表
CREATE TABLE `appointment` (`appoint_id` INT PRIMARY KEY AUTO_INCREMENT,`user_id` INT NOT NULL,`house_id` INT NOT NULL,`appoint_time` DATETIME NOT NULL,`status` ENUM('pending', 'confirmed', 'canceled') DEFAULT 'pending',`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`),FOREIGN KEY (`house_id`) REFERENCES `house`(`house_id`)
);-- 訂單表
CREATE TABLE `order` (`order_id` VARCHAR(32) PRIMARY KEY COMMENT '訂單號(如UUID)',`user_id` INT NOT NULL,`house_id` INT NOT NULL,`total_price` DECIMAL(12,2) NOT NULL,`payment_status` ENUM('unpaid', 'paid') DEFAULT 'unpaid',`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`),FOREIGN KEY (`house_id`) REFERENCES `house`(`house_id`)
);-- 房源評價表
CREATE TABLE `comment` (`comment_id` INT PRIMARY KEY AUTO_INCREMENT,`user_id` INT NOT NULL,`house_id` INT NOT NULL,`content` TEXT NOT NULL,`rating` TINYINT CHECK (rating BETWEEN 1 AND 5),`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`),FOREIGN KEY (`house_id`) REFERENCES `house`(`house_id`)
);-- 用戶表(包含10條記錄)
INSERT INTO `user` (username, password, role, real_name, phone, email, create_time) VALUES('admin', '123456', 'admin', '系統管理員', '13800000000', 'admin@example.com', '2025-03-01 09:00:00'),('sales_01', '123456', 'sales', '張偉', '13911111111', 'sales_01@example.com', '2025-03-01 09:00:00'),('sales_02', '123456', 'sales', '李娜', '13922222222', 'sales_02@example.com', '2025-03-01 09:00:00'),('sales_03', '123456', 'sales', '王剛', '13933333333', 'sales_03@example.com', '2025-03-01 09:00:00'),('customer_01', '123456', 'customer', '陳浩', '13844444444', 'customer_01@example.com', '2025-03-01 09:00:00'),('customer_02', '123456', 'customer', '劉芳', '13855555555', 'customer_02@example.com', '2025-03-01 09:00:00'),('customer_03', '123456', 'customer', '張婷', '13866666666', 'customer_03@example.com', '2025-03-01 09:00:00'),('customer_04', '123456', 'customer', '廖學彬', '13877777777', 'customer_04@example.com', '2025-03-01 09:00:00'),('customer_05', '123456', 'customer', '王芳', '13888888888', 'customer_05@example.com', '2025-03-01 09:00:00'),('customer_06', '123456', 'customer', '趙敏', '13899999999', 'customer_06@example.com', '2025-03-01 09:00:00');-- 房源信息表(10條記錄)
INSERT INTO `house` (title, price, area, room_type, address, sales_id, status, description, create_time) VALUES('SOHO', 12000000.00, 150.0, '3室2廳', '北街道', 2, 'listed', '高端商務公寓,帶健身房和游泳池', '2025-03-01 09:00:00'),('村學區房', 18000000.00, 120.0, '2室1廳', '北大街', 3, 'sold', '重點小學學區房,南北通透', '2025-03-01 09:00:00'),('陸景房', 25000000.00, 200.0, '4室3廳', '上環路', 4, 'pending', '高層江景住宅,視野開闊', '2025-03-01 09:00:00'),('金街鋪', 30000000.00, 80.0, '臨街商鋪', '北融街', 2, 'listed', '黃金地段商鋪,租金回報率高', '2025-03-01 09:00:00'),('東環別墅', 60000000.00, 300.0, '獨棟別墅', '北北路', 3, 'sold', '豪華獨棟別墅,帶私人花園', '2025-03-01 09:00:00'),('科技園寫字樓', 80000000.00, 150.0, '甲級寫字樓', '深技園', 4, 'pending', '現代化辦公大樓,配套完善', '2025-03-01 09:00:00'),('老洋房', 45000000.00, 100.0, '2室1廳', '上路', 2, 'listed', '歷史建筑改造,復古風格', '2025-03-01 09:00:00'),('廣高端公寓', 10000000.00, 130.0, '3室2廳', '廣江新城', 3, 'sold', 'CBD核心區高端公寓', '2025-03-01 09:00:00'),('州湖區景觀房', 28000000.00, 180.0, '4室2廳', '州楊公堤', 4, 'pending', '湖濱景觀住宅,環境優美', '2025-03-01 09:00:00'),('都府新科技園', 15000000.00, 120.0, '3室2廳', '都府大道', 2, 'listed', '新興科技產業園區,交通便利', '2025-03-01 09:00:00');-- 預約看房表(10條記錄)
INSERT INTO `appointment` (user_id, house_id, appoint_time, status, create_time) VALUES(6, 1, '2025-04-15 10:00:00', 'confirmed', '2025-04-10 09:00:00'),(7, 2, '2025-04-16 14:30:00', 'pending', '2025-04-10 09:00:00'),(8, 3, '2025-04-17 09:00:00', 'canceled', '2025-04-10 09:00:00'),(9, 4, '2025-04-18 11:00:00', 'confirmed', '2025-04-10 09:00:00'),(10,5, '2025-04-19 15:00:00', 'pending', '2025-04-10 09:00:00'),(6, 6, '2025-04-20 10:00:00', 'confirmed', '2025-04-10 09:00:00'),(7, 7, '2025-04-21 14:00:00', 'canceled', '2025-04-10 09:00:00'),(8, 8, '2025-04-22 09:00:00', 'confirmed', '2025-04-10 09:00:00'),(9, 9, '2025-04-23 11:00:00', 'pending', '2025-04-10 09:00:00'),(10,10, '2025-04-24 15:00:00', 'confirmed', '2025-04-10 09:00:00');-- 訂單表(10條記錄)
INSERT INTO `order` (order_id, user_id, house_id, total_price, payment_status, create_time) VALUES('202504100001', 6, 1, 12000000.00, 'paid', '2025-04-10 09:00:00'),('202504100002', 7, 2, 18000000.00, 'unpaid', '2025-04-10 09:00:00'),('202504100003', 8, 3, 25000000.00, 'paid', '2025-04-10 09:00:00'),('202504100004', 9, 4, 30000000.00, 'unpaid', '2025-04-10 09:00:00'),('202504100005', 10,5, 60000000.00, 'paid', '2025-04-10 09:00:00'),('202504100006', 6, 6, 80000000.00, 'unpaid', '2025-04-10 09:00:00'),('202504100007', 7, 7, 45000000.00, 'paid', '2025-04-10 09:00:00'),('202504100008', 8, 8, 10000000.00, 'unpaid', '2025-04-10 09:00:00'),('202504100009', 9, 9, 28000000.00, 'paid', '2025-04-10 09:00:00'),('202504100010', 10,10, 15000000.00, 'unpaid', '2025-04-10 09:00:00');-- 房源評價表(10條記錄)
INSERT INTO `comment` (user_id, house_id, content, rating, create_time) VALUES(6, 1, '房屋設施非常完善,交通便利!', 5, '2025-04-10 09:00:00'),(7, 2, '學區房位置優越,但周邊配套一般。', 4, '2025-04-10 09:00:00'),(8, 3, '江景房視野開闊,但物業費較高。', 3, '2025-04-10 09:00:00'),(9, 4, '商鋪租金回報率高,適合投資。', 5, '2025-04-10 09:00:00'),(10,5, '別墅面積大,適合家庭居住。', 4, '2025-04-10 09:00:00'),(6,6, '寫字樓采光好,租賃需求旺。', 5, '2025-04-10 09:00:00'),(7,7, '老洋房設計獨特,但維護成本高。', 3, '2025-04-10 09:00:00'),(8,8, '公寓性價比高,適合年輕人。', 4, '2025-04-10 09:00:00'),(9,9, '景觀房環境優美,但離市區較遠。', 3, '2025-04-10 09:00:00'),(10,10, '科技園區交通便利,未來發展潛力大。', 5, '2025-04-10 09:00:00');# 1. 查詢客戶所有預約記錄(含房源信息)需要對應銷售經理
SELECTu.real_name AS customer_name,u.user_id AS customer_id,a.appoint_time,a.status,h.title,h.address,h.price,h.room_type,s.real_name,s.phone
FROMappointment aINNER JOIN user u ON a.user_id = u.user_idLEFT JOIN house h ON a.house_id = h.house_idINNER JOIN user s ON h.sales_id = s.user_id
WHEREu.role = 'customer'
ORDER BYa.create_time DESC;# 2. 查詢客戶所有訂單(含房源信息)
SELECT o.order_id, u.real_name AS customer_name,  u.user_id AS customer_id,o.total_price,o.payment_status, h.title, h.address, h.status AS house_status
FROM `order` oJOIN user u ON o.user_id = u.user_idJOIN house h ON o.house_id = h.house_id
WHERE u.role = 'customer'
ORDER BY o.create_time DESC;# 3. 統計銷售經理名下所有房源銷售情況和銷售金額 ,并列出房源位置信息,和交易時間
SELECT u.real_name AS sales_manager,COUNT(DISTINCT h.house_id) AS sold_count,SUM(o.total_price) AS total_sales
FROM house hJOIN user u ON h.sales_id = u.user_idJOIN `order` o ON h.house_id = o.house_id
WHERE u.role = 'sales' AND h.status = 'sold'
GROUP BY u.user_id;# 4. 查看房源詳情及評價列表
SELECT h.title, h.price, h.area, h.room_type, h.address,c.content AS evaluation, c.rating,c.house_id, c.content,  c.create_time AS eval_time
FROM house hLEFT JOIN comment c ON h.house_id = c.house_id
ORDER BY h.house_id, c.create_time DESC;

step2:fastapi路由和查詢 C:\Users\Administrator\PycharmProjects\FastAPIProject\main.py

from fastapi import FastAPI, HTTPException
import pymysql.cursors
app = FastAPI()
# 數據庫連接配置
DB_CONFIG = {'host': 'localhost','user': 'root','password': '123456','db': 'school_db','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}
# 查詢數據庫的函數
def query_database(query: str, params=None):try:connection = pymysql.connect(**DB_CONFIG)with connection.cursor() as cursor:cursor.execute(query, params)result = cursor.fetchall()connection.close()return resultexcept Exception as e:raise HTTPException(status_code=500, detail=str(e))@app.get("/customer_appointments/{customer_id}")
async def get_customer_appointments(customer_id: int):query = """SELECT a.appoint_time, a.status, a.create_time,h.title, h.address, h.room_type, h.price,s.real_name AS sales_manager, s.phoneFROM appointment aINNER JOIN user u ON a.user_id = u.user_idLEFT JOIN house h ON a.house_id = h.house_idINNER JOIN user s ON h.sales_id = s.user_idWHERE u.role = 'customer' AND a.user_id = %sORDER BY a.create_time DESC"""data = query_database(query, (customer_id,))return {"data": data}@app.get("/customer_orders/{customer_id}")
async def get_customer_orders(customer_id: int):query = """SELECT o.order_id, o.total_price, o.payment_status, o.create_time,h.title, h.address, h.status AS house_statusFROM `order` oJOIN user u ON o.user_id = u.user_idJOIN house h ON o.house_id = h.house_idWHERE u.role = 'customer' AND o.user_id = %sORDER BY o.create_time DESC"""data = query_database(query, (customer_id,))return {"data": data}@app.get("/sales_stats/{sales_id}")
async def get_sales_stats(sales_id: int):query = """SELECT COUNT(DISTINCT o.house_id) AS sold_count,SUM(o.total_price) AS total_sales,AVG(o.total_price) AS avg_priceFROM `order` oJOIN house h ON o.house_id = h.house_idWHERE h.sales_id = %s AND h.status = 'sold'"""data = query_database(query, (sales_id,))return {"data": data[0] if data else {}}@app.get("/house_details/{house_id}")
async def get_house_details(house_id: int):# 房源基本信息house_query = """SELECT title, price, area, room_type, address, description, status, create_timeFROM house WHERE house_id = %s"""house_data = query_database(house_query, (house_id,))# 關聯評價信息comment_query = """SELECT c.content, c.rating, c.create_time, u.real_nameFROM comment cJOIN user u ON c.user_id = u.user_idWHERE c.house_id = %sORDER BY c.create_time DESC"""comment_data = query_database(comment_query, (house_id,))return {"house_info": house_data[0] if house_data else {},"comments": comment_data}
# 啟動應用
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

step3:postman驗證

用fastapi幫我寫4個查詢接口,參考下面的代碼格式 
1. 查詢客戶所有預約記錄(含房源信息)需要對應銷售經理 
2. 查詢客戶所有訂單(含房源信息)3. 統計銷售經理名下所有房源銷售情況和銷售金額4. 查看房源詳情及評價列表http://localhost:8000/customer_appointments/6{"data": [{"appoint_time": "2025-04-15T10:00:00","status": "confirmed","create_time": "2025-04-10T09:00:00","title": "朝","address": "街道","room_type": "3室2廳","price": 12000000.0,"sales_manager": "張偉","phone": "13911111111"},{"appoint_time": "2025-04-20T10:00:00","status": "confirmed","create_time": "2025-04-10T09:00:00","title": "字樓","address": "技園","room_type": "樓","price": 80000000.0,"sales_manager": "王剛","phone": "13933333333"}]
}http://localhost:8000/customer_orders/6{"data": [{"order_id": "202504100001","total_price": 12000000.0,"payment_status": "paid","create_time": "2025-04-10T09:00:00","title": "","address": "道","house_status": "listed"},{"order_id": "202504100006","total_price": 80000000.0,"payment_status": "unpaid","create_time": "2025-04-10T09:00:00","title": "字樓","address": "技園","house_status": "pending"}]
}http://localhost:8000/sales_stats/3{"data": {"sold_count": 3,"total_sales": 88000000.0,"avg_price": 29333333.333333}
}http://localhost:8000/house_details/1{"house_info": {"title": "","price": 12000000.0,"area": 150.0,"room_type": "3室2廳","address": "道","description": "高端商務公寓,帶健身房和游泳池","status": "listed","create_time": "2025-03-01T09:00:00"},"comments": [{"content": "房屋設施非常完善,交通便利!","rating": 5,"create_time": "2025-04-10T09:00:00","real_name": "劉芳"}]
}

end

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72814.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

導軌式ARM工業控制器:組態軟件平臺的“神經中樞”

工業自動化領域,組態軟件平臺扮演著至關重要的角色。它不僅是工業控制系統的“大腦”,更是實現智能化、高效化生產的關鍵工具。而作為組態軟件平臺的硬件支撐,導軌式ARM工控機(以下簡稱“工控機”)憑借其緊湊的設計、強…

每日一題——矩陣置零問題的原地算法

矩陣置零問題的原地算法 問題描述示例約束條件進階要求 問題分析難點分析解題思路 代碼實現代碼說明 測試用例測試用例 1測試用例 2測試用例 3 總結 問題描述 給定一個 m x n 的矩陣,如果矩陣中的某個元素為 0,則需要將其所在的行和列的所有元素都置為 …

Springboot中的@Value注解:用法與潛在問題探索

在Spring Boot開發中,有個非常實用的注解,那就是Value!它可以幫助我們輕松地從配置文件中讀取屬性值。想象一下,在應用程序中管理各種配置,比如數據庫連接信息、服務URL或者API密鑰等,使用Value是多么方便呀…

C++后端服務器開發技術棧有哪些?有哪些資源或開源庫拿來用?

一、 C后臺服務器開發是一個涉及多方面技術選擇的復雜領域,特別是在高性能、高并發的場景下。以下是C后臺服務器開發的一種常見技術路線,涵蓋了從基礎到高級的技術棧。 1. 基礎技術棧 C標準庫 C11/C14/C17/C20:使用現代C特性,如…

25年攜程校招社招求職能力北森測評材料計算部分:備考要點與誤區解析

在求職過程中,能力測評是篩選候選人的重要環節之一。對于攜程這樣的知名企業,其能力測評中的材料計算部分尤為關鍵。許多求職者在備考時容易陷入誤區,導致在考試中表現不佳。本文將深入解析材料計算部分的實際考察方向,并提供針對…

golang進階知識專項-理解值傳遞

在 Go 語言中,所有函數的參數傳遞都是值傳遞(Pass by Value)。當你將一個變量作為參數傳遞給函數時,實際上傳遞的是該變量的副本,而不是變量本身。理解這一點對于避免常見的編程錯誤至關重要。根據不同的類型&#xff…

RuoYi框架添加自己的模塊(學生管理系統CRUD)

RuoYi框架添加自己的模塊(學生管理系統) 框架順利運行 首先肯定要順利運行框架了,這個我不多說了 設計數據庫表 在ry數據庫中添加表tb_student 表字段如圖所示 如圖所示 注意id字段是自增的 注釋部分是后面成功后前端要展示的部分 導入…

中級網絡工程師面試題參考示例(1)

一、基礎理論 1. OSI七層模型與TCP/IP四層模型的區別是什么?請舉例說明第三層(網絡層)和第四層(傳輸層)的核心協議。 參考答案: OSI七層模型分為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用…

RHCE9.0版本筆記5:防火墻的本地/遠程登錄方式

一、防火墻登錄方式全景圖 華為防火墻支持多種管理訪問方式,根據安全等級和場景需求可分為: graph LR A[管理方式] --> B[本地登錄] A --> C[遠程登錄] B --> B1(Console) B --> B2(Web) C --> C1(SSH) C --> C2(Telnet) C --> C…

2025最新群智能優化算法:山羊優化算法(Goat Optimization Algorithm, GOA)求解23個經典函數測試集,MATLAB

一、山羊優化算法 山羊優化算法(Goat Optimization Algorithm, GOA)是2025年提出的一種新型生物啟發式元啟發式算法,靈感來源于山羊在惡劣和資源有限環境中的適應性行為。該算法旨在通過模擬山羊的覓食策略、移動模式和躲避寄生蟲的能力&…

博弈論算法

一、減法游戲 初始有一個數 n。 兩個玩家輪流操作,每次可以減去 1 到 9 之間的任意整數。 將數減到 0 的玩家獲勝。 可以發現規律: 減法游戲只需要判斷當前數取模是否為0,即可快速判斷勝負。 例題: Leetcode 292. Nim 游戲 …

Excel·VBA江西省預算一體化工資表一鍵處理

每月制作工資表導出為Excel后都需要調整格式,刪除0數據的列、對工資表項目進行排序、打印設置等等,有些單位還分有“行政”、“事業”2個工資表就需要操作2次。顯然,這種重復操作的問題,可以使用VBA代碼解決 目錄 代碼使用說明1&a…

深度學習驅動的跨行業智能化革命:技術突破與實踐創新

第一章 深度學習的技術范式演進與核心架構 1.1 從傳統機器學習到深度神經網絡的跨越 深度學習的核心在于通過多層次非線性變換自動提取數據特征,其發展歷程可劃分為三個階段:符號主義時代的規則驅動(1950s-1980s)、連接主義時代的淺層網絡(1990s-2000s)以及深度學習時代…

嵌入式學習筆記-卡爾曼濾波,PID,MicroPython

文章目錄 卡爾曼濾波卡爾曼濾波的核心思想卡爾曼濾波的數學模型1. 狀態轉移模型(預測系統狀態)2. 觀測模型(預測測量值) 卡爾曼濾波的五個關鍵步驟1. 預測狀態2. 預測誤差協方差3. 計算卡爾曼增益4. 更新狀態5. 更新誤差協方差 卡…

一周熱點-文本生成中的擴散模型- Mercury Coder

一、背景知識 在人工智能領域,文本生成模型一直是研究的熱點。傳統的大型語言模型多采用自回歸架構,從左到右逐個預測下一個標記。這種模型雖然在生成連貫文本方面表現出色,但在速度上存在一定的局限性,因為它需要按順序生成每個標…

Qt調試功能使用方法

QT編程環境 QT在Windows操作系統下的三種編程環境搭建。 方案編程環境編譯器調試器1Qt CreatorMinGW GCCGDB2Qt CreatorMicrosoft Visual C CompilerDebugging Tools for Widows3Microsoft Visual Studio VS自帶VS自帶 方案提及的QT安裝程序及壓縮包均能在官網Index of /off…

vulnhub靶場之【digitalworld.local系列】的mercy靶機

前言 靶機:digitalworld.local-mercy,IP地址為192.168.10.11 攻擊:kali,IP地址為192.168.10.6 kali采用VMware虛擬機,靶機選擇使用VMware打開文件,都選擇橋接網絡 這里官方給的有兩種方式,一…

Fiddler抓取App接口-Andriod/IOS配置方法

Andriod配置方法: 1)確保手機和Fiddler所在主機在同一個局域網中 2)獲取Fiddler所在主機的ip地址,通過cmd命令進入命令編輯器,輸入ipconfig -all,找到IPv4地址,記下該地址 3)對手機…

步進電機軟件細分算法解析與實踐指南

1. 步進電機細分技術概述 步進電機是一種將電脈沖信號轉換為角位移的執行機構,其基本運動單位為步距角。傳統步進電機的步距角通常為 1.8(對應 200 步 / 轉),但在高精度定位場景下,這種分辨率已無法滿足需求。細分技術…

C語言_數據結構總結2:動態分配方式的順序表

0——靜態分配內存的順序表和動態分配內存的順序表的相同之處和不同之處 相同之處 基本操作邏輯相同:無論是靜態分配還是動態分配的順序表,其核心的操作邏輯是一致的。例如插入操作都需要將插入位置之后的元素依次后移,刪除操作都需要將刪除…