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.mzph.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——静态分配内存的顺序表和动态分配内存的顺序表的相同之处和不同之处 相同之处 基本操作逻辑相同:无论是静态分配还是动态分配的顺序表,其核心的操作逻辑是一致的。例如插入操作都需要将插入位置之后的元素依次后移,删除操作都需要将删除…