dingdanquanliucheng/backend/app/services/demo_store.py
2026-05-14 13:51:06 +08:00

100 lines
3.8 KiB
Python

from copy import deepcopy
class DemoStore:
def __init__(self) -> None:
self.users = {
("sales01", "salesman"): {
"user_id": 1,
"username": "sales01",
"real_name": "张三",
"mobile": "13800000000",
"role_id": 2,
"role_name": "业务员",
"role_code": "salesman",
"token": "demo-sales-token",
"menus": [{"menu_name": "我的订单", "menu_path": "/orders"}],
"permissions": ["order:create", "order:list", "order:submit"],
},
("admin01", "admin"): {
"user_id": 99,
"username": "admin01",
"real_name": "管理员",
"mobile": "13900000001",
"role_id": 1,
"role_name": "管理员",
"role_code": "admin",
"token": "demo-admin-token",
"menus": [{"menu_name": "后台首页", "menu_path": "/dashboard"}],
"permissions": ["system:user:list", "system:role:list", "order:list"],
},
}
self.orders = [
{
"order_id": 9001,
"order_no": "SO202605140001",
"customer_name": "李四",
"customer_mobile": "13900000000",
"salesman_name": "张三",
"order_status": "draft",
"sale_price_total": 100.0,
"profit_total": 20.0,
"commission_amount": 50.0,
"created_at": "2026-05-14 10:00:00",
"items": [],
"approve_logs": [],
"attachments": [],
"remark": "演示订单",
}
]
def login(self, username: str, role_type: str) -> dict | None:
user = self.users.get((username, role_type))
return deepcopy(user) if user else None
def get_me(self, token: str) -> dict | None:
for user in self.users.values():
if user["token"] == token:
data = deepcopy(user)
return data
return None
def list_orders(self) -> list[dict]:
return deepcopy(self.orders)
def get_order(self, order_id: int) -> dict | None:
for order in self.orders:
if order["order_id"] == order_id:
return deepcopy(order)
return None
def create_order(self, payload: dict) -> dict:
next_id = max(order["order_id"] for order in self.orders) + 1 if self.orders else 9001
sale_total = sum(item["quantity"] * item["sale_price"] for item in payload["items"])
cost_total = sum(item["quantity"] * item["cost_price"] for item in payload["items"])
profit_total = sale_total - cost_total - payload["rebate_total"] - payload["freight_total"] - payload["tax_total"] - payload["other_fee_total"]
profit_rate = round((profit_total / sale_total) * 100, 2) if sale_total else 0
order = {
"order_id": next_id,
"order_no": f"SO{next_id}",
"customer_name": payload["customer_name"],
"customer_mobile": payload["customer_mobile"],
"salesman_name": "张三",
"order_status": "draft",
"sale_price_total": round(sale_total, 2),
"cost_price_total": round(cost_total, 2),
"profit_total": round(profit_total, 2),
"profit_rate": profit_rate,
"commission_amount": payload["commission_amount"],
"created_at": "2026-05-14 12:00:00",
"items": payload["items"],
"approve_logs": [],
"attachments": [],
"remark": payload.get("remark"),
}
self.orders.append(order)
return deepcopy(order)
demo_store = DemoStore()