You've already forked opc-backend
开发了多角色登录与鉴权接口:实现了普通用户、企业和管理员的登录分流,并支持Token验证。
开发了权限控制接口:实现了通过数据库分配菜单权限节点,控制接口访问安全。 开发了实名认证中心:实现了个人身份证信息与企业营业执照的提交与审核接口。 开发了任务与协作大厅核心业务:实现了任务的发布、接单、状态流转以及专家邀约接口。 配置了全局环境变量与数据库引擎:集成了 PostgreSQL 数据库、Redis 缓存与 MinIO 对象存储。
This commit is contained in:
59
reservations/models.py
Normal file
59
reservations/models.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import uuid
|
||||
from django.db import models
|
||||
|
||||
class ResourceType(models.TextChoices):
|
||||
ACCESS_CONTROL = 'ACCESS_CONTROL', '门禁通行'
|
||||
MEETING_ROOM = 'MEETING_ROOM', '会议室'
|
||||
|
||||
class OrderStatus(models.TextChoices):
|
||||
PENDING_PAY = 'PENDING_PAY', '待支付'
|
||||
PAID = 'PAID', '已支付'
|
||||
USED = 'USED', '已使用'
|
||||
REFUNDED = 'REFUNDED', '已退款'
|
||||
CANCELLED = 'CANCELLED', '已取消'
|
||||
|
||||
class ReservationResource(models.Model):
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
name = models.CharField(max_length=128)
|
||||
type = models.CharField(max_length=32, choices=ResourceType.choices)
|
||||
description = models.TextField(null=True, blank=True)
|
||||
capacity = models.IntegerField(null=True, blank=True)
|
||||
location = models.CharField(max_length=256, null=True, blank=True)
|
||||
cover_url = models.CharField(max_length=512, null=True, blank=True)
|
||||
price_per_unit = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)
|
||||
price_unit = models.CharField(max_length=32, default='次')
|
||||
is_active = models.BooleanField(default=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
db_table = 'reservation_resources'
|
||||
|
||||
class ReservationOrder(models.Model):
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
order_no = models.CharField(max_length=64, unique=True)
|
||||
user = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='reservation_orders')
|
||||
resource = models.ForeignKey(ReservationResource, on_delete=models.CASCADE, related_name='orders')
|
||||
start_time = models.DateTimeField()
|
||||
end_time = models.DateTimeField()
|
||||
quantity = models.IntegerField(default=1)
|
||||
unit_price = models.DecimalField(max_digits=8, decimal_places=2)
|
||||
total_amount = models.DecimalField(max_digits=10, decimal_places=2)
|
||||
status = models.CharField(max_length=32, choices=OrderStatus.choices, default=OrderStatus.PENDING_PAY)
|
||||
wx_prepay_id = models.CharField(max_length=128, null=True, blank=True)
|
||||
wx_transaction_id = models.CharField(max_length=128, null=True, blank=True)
|
||||
paid_at = models.DateTimeField(null=True, blank=True)
|
||||
refund_reason = models.TextField(null=True, blank=True)
|
||||
refund_amount = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
|
||||
wx_refund_id = models.CharField(max_length=128, null=True, blank=True)
|
||||
refunded_at = models.DateTimeField(null=True, blank=True)
|
||||
qr_code_url = models.CharField(max_length=512, null=True, blank=True)
|
||||
verified_by = models.ForeignKey('users.User', on_delete=models.SET_NULL, null=True, blank=True, related_name='verified_orders')
|
||||
verified_at = models.DateTimeField(null=True, blank=True)
|
||||
remark = models.TextField(null=True, blank=True)
|
||||
is_deleted = models.BooleanField(default=False)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
db_table = 'reservation_orders'
|
||||
Reference in New Issue
Block a user