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"], }, ("driver01", "driver"): { "user_id": 10, "username": "driver01", "real_name": "演示司机", "mobile": "13900000010", "role_id": 4, "role_name": "司机", "role_code": "driver", "token": "demo-driver-token", "menus": [{"menu_name": "我的任务", "menu_path": "/pages/task-list"}], "permissions": ["driver:task:list", "driver:task:accept"], }, } self.orders = [ { "order_id": 9001, "order_no": "SO202605140001", "customer_name": "李四", "customer_mobile": "13900000000", "salesman_name": "张三", "order_status": "approved", "customer_address": "杭州市西湖区演示路 1 号", "order_source": "线下拜访", "delivery_type": "工厂直送", "factory_id": 1001, "factory_name": "工厂A", "sale_price_total": 100.0, "cost_price_total": 60.0, "profit_total": 20.0, "profit_rate": 20.0, "commission_amount": 50.0, "created_at": "2026-05-14 10:00:00", "items": [ { "item_id": 1, "product_id": 2001, "product_name": "产品A", "specification": "10kg", "unit": "吨", "quantity": 1, "sale_price": 100, "cost_price": 60, "rebate_amount": 0, "freight_amount": 0, "tax_amount": 0, "other_fee_amount": 0, "remark": "演示明细", } ], "approve_logs": [], "attachments": [], "remark": "演示订单", } ] self.logistics_tasks = [] 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) def list_logistics_tasks(self) -> dict: return { "total": len(self.logistics_tasks), "page_no": 1, "page_size": 20, "list": deepcopy(self.logistics_tasks), } def create_logistics_task(self, payload: dict) -> dict: next_id = max([task["task_id"] for task in self.logistics_tasks], default=5000) + 1 order = self.get_order(payload["order_id"]) task = { "task_id": next_id, "task_no": f"LT{next_id}", "order_id": payload["order_id"], "order_no": order["order_no"] if order else "", "driver_id": payload["driver_id"], "driver_name": f"司机{payload['driver_id']}", "factory_id": payload.get("factory_id"), "factory_name": order.get("factory_name", "") if order else "", "pickup_address": payload["pickup_address"], "delivery_address": payload["delivery_address"], "pickup_content": payload["pickup_content"], "quantity": payload["quantity"], "status": "pending", "remark": payload.get("remark"), "created_at": "2026-05-14 14:00:00", "salesman_name": order.get("salesman_name", "") if order else "", "customer_name": order.get("customer_name", "") if order else "", } self.logistics_tasks.append(task) for index, item in enumerate(self.orders): if item["order_id"] == payload["order_id"]: self.orders[index]["order_status"] = "pending_driver" break return deepcopy(task) def get_logistics_task(self, task_id: int) -> dict | None: for task in self.logistics_tasks: if task["task_id"] == task_id: return deepcopy(task) return None demo_store = DemoStore()