当前位置:首页>python>python:Divide and Conquer Algorithm

python:Divide and Conquer Algorithm

  • 2026-08-18 23:10:44
python:Divide and Conquer Algorithm
项目结构:

介绍了一个基于分治算法(Divide and Conquer)的珠宝销售管理系统实现。系统采用Python开发,包含以下核心模块:

数据结构:定义了订单(JewelryOrder)、销售汇总(SaleSummary)和权限节点(JewelryRoleNode)等业务实体。

分治算法实现:

基础分治抽象类(BaseDAC)提供标准分治流程

销售统计分治(SaleStatDAC)用于业绩汇总

风险订单分治(RiskOrderDAC)检测高额订单

权限树分治(PermissionDAC)实现权限校验

业务服务:

销售统计服务支持并行门店统计和时间维度分析

风险服务检测异常高额订单

权限服务实现树形权限校验和数据过滤

系统特点:

采用仓储模式隔离数据访问

支持多线程并行计算

实现数据权限控制

提供月度/季度/年度多维度分析

该系统通过分治算法有效处理了大规模销售数据分析、风险检测等业务场景,提高了计算效率。代码结构清晰,模块划分合理,具有良好的可扩展性。

# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:45# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : constants.py# 业务常量统一管理,便于运维修改RISK_AMOUNT_THRESHOLD = 100000.0  # 高客单风险阈值 10万SHOP_LIST = ["福田店""南山店"]QUARTER_MONTH_MAP = {1: [123], 2: [456], 3: [789], 4: [101112]}CATEGORY_LIST = ["黄金""钻石""彩宝""银饰"]# 权限标识常量PERM_DIAMOND_ADJUST = "钻石调价"PERM_EXPORT_ALL_SHOP = "全门店数据导出"PERM_SHOP_ADJUST = "本店调价"PERM_MODIFY_ROLE = "修改角色权限"PERM_VIEW_SELF_SALE = "查看个人业绩"PERM_VIEW_STOCK = "库存盘点"# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:46# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : utils.pyfrom concurrent.futures import ThreadPoolExecutor, as_completedfrom typing import ListCallableAnydef parallel_batch_execute(task_list: List[Callable[[], Any]], max_workers: int = 4) -> List[Any]:    """    通用多线程并行执行工具:用于门店/月度分治并发计算    :param task_list:    :param max_workers:    :return:    """    results = []    with ThreadPoolExecutor(max_workers=max_workers) as executor:        future_map = {executor.submit(task): task for task in task_list}        for future in as_completed(future_map):            res = future.result()            results.append(res)    return resultsdef format_float(val: float) -> str:    """    金额格式化输出    :param val:    :return:    """    return f"{val:.2f}"# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:46# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : order.pyfrom dataclasses import dataclassfrom typing import Dictfrom DivideConquer.constants import CATEGORY_LIST@dataclass(frozen=False)class JewelryOrder:    """    珠宝订单实体:纯数据载体,无业务逻辑    """    order_id: str    shop_name: str    sale_month: int    quarter: int    category: str    sale_amount: float    profit: float    seller_id: str@dataclass(frozen=False)class SaleSummary:    """    销售统计汇总实体,重载加法实现分治合并    """    total_sales: float = 0.0    total_profit: float = 0.0    gold: float = 0.0    diamond: float = 0.0    gem: float = 0.0    silver: float = 0.0    def __add__(self, other: "SaleSummary") -> "SaleSummary":        return SaleSummary(            total_sales=self.total_sales + other.total_sales,            total_profit=self.total_profit + other.total_profit,            gold=self.gold + other.gold,            diamond=self.diamond + other.diamond,            gem=self.gem + other.gem,            silver=self.silver + other.silver        )    def to_dict(self) -> Dict[strfloat]:        """        转字典用于报表输出扩展        :return:        """        return {            "总销售额"self.total_sales,            "总毛利"self.total_profit,            "黄金"self.gold,            "钻石"self.diamond,            "彩宝"self.gem,            "银饰"self.silver        }def build_single_summary(order: JewelryOrder) -> SaleSummary:    """    单订单转换为汇总实体(最小子问题构造器)    :param order:    :return:    """    s = SaleSummary()    s.total_sales = order.sale_amount    s.total_profit = order.profit    if order.category == "黄金":        s.gold = order.sale_amount    elif order.category == "钻石":        s.diamond = order.sale_amount    elif order.category == "彩宝":        s.gem = order.sale_amount    elif order.category == "银饰":        s.silver = order.sale_amount    return s# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:48# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : role.pyfrom typing import ListOptionalclass JewelryRoleNode:    """    权限二叉树节点实体:承载角色与权限集合    """    def __init__(self, role_name: str, permissions: List[str]):        self.role_name = role_name        self.permissions: List[str] = permissions        self.left: Optional[JewelryRoleNode] = None        self.right: Optional[JewelryRoleNode] = None# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:49# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : order_repo.pyfrom typing import ListDictfrom DivideConquer.entity.order import JewelryOrderfrom DivideConquer.constants import SHOP_LIST, QUARTER_MONTH_MAPclass OrderRepository:    """    订单仓储:统一管理订单数据增查,隔离上层与原始列表    """    def __init__(self):        self._order_data: List[JewelryOrder] = []    def add(self, order: JewelryOrder) -> None:        """        :param order:        :return:        """        self._order_data.append(order)    def batch_add(self, orders: List[JewelryOrder]) -> None:        """        :param orders:        :return:        """        self._order_data.extend(orders)    def get_all(self) -> List[JewelryOrder]:        """        :return:        """        return self._order_data.copy()    def split_by_shop(self) -> Dict[strList[JewelryOrder]]:        """        Divide:按门店拆分订单数据集        :return:        """        split_map = {shop: [] for shop in SHOP_LIST}        for o in self._order_data:            if o.shop_name in split_map:                split_map[o.shop_name].append(o)        return split_map    def split_by_month(self) -> Dict[intList[JewelryOrder]]:        """        Divide:按月份拆分订单数据集        :return:        """        split_map = {m: [] for m in range(113)}        for o in self._order_data:            split_map[o.sale_month].append(o)        return split_map# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:50# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : role_repo.pyfrom typing import Optionalfrom DivideConquer.entity.role import JewelryRoleNodeclass RoleRepository:    """    权限树仓储:构造、存储全局权限树根节点    """    def __init__(self):        self._root: Optional[JewelryRoleNode] = None    def set_root(self, root_node: JewelryRoleNode) -> None:        """        :param root_node:        :return:        """        self._root = root_node    def get_root(self) -> Optional[JewelryRoleNode]:        """        :return:        """        return self._root# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:51# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : base_dac.pyfrom abc import ABC, abstractmethodfrom typing import TypeVar, GenericList# 泛型适配不同分治输入输出T_INPUT = TypeVar("T_INPUT")T_OUTPUT = TypeVar("T_OUTPUT")class BaseDAC(ABC, Generic[T_INPUT, T_OUTPUT]):    """    分治算法标准抽象基类:统一 divide-conquer-combine 流程    """    @abstractmethod    def conquer(self, data: T_INPUT) -> T_OUTPUT:        """        最小子问题求解        :param data:        :return:        """        pass    @abstractmethod    def divide(self, data: List[T_INPUT]) -> tuple[List[T_INPUT], List[T_INPUT]]:        """        二分拆分数据集        :param data:        :return:        """        pass    @abstractmethod    def combine(self, left_res: T_OUTPUT, right_res: T_OUTPUT) -> T_OUTPUT:        """        合并左右子问题结果        :param left_res:        :param right_res:        :return:        """        pass    def dac_recursive(self, data: List[T_INPUT], l: int, r: int) -> T_OUTPUT:        """        标准递归分治入口        :param data:        :param l:        :param r:        :return:        """        if l == r:            return self.conquer(data[l])        mid = (l + r) // 2        left_result = self.dac_recursive(data, l, mid)        right_result = self.dac_recursive(data, mid + 1, r)        return self.combine(left_result, right_result)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:52# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : stat_dac.pyfrom typing import Listfrom DivideConquer.dac.base_dac import BaseDACfrom DivideConquer.entity.order import JewelryOrder, SaleSummary, build_single_summaryclass SaleStatDAC(BaseDAC[JewelryOrder, SaleSummary]):    """    销售业绩统计专用分治实现    """    def conquer(self, data: JewelryOrder) -> SaleSummary:        """        :param data:        :return:        """        return build_single_summary(data)    def divide(self, data: List[JewelryOrder]) -> tuple[List[JewelryOrder], List[JewelryOrder]]:        """        :param data:        :return:        """        mid = len(data) // 2        return data[:mid], data[mid:]    def combine(self, left_res: SaleSummary, right_res: SaleSummary) -> SaleSummary:        """        :param left_res:        :param right_res:        :return:        """        return left_res + right_res    def calc_total(self, data_list: List[JewelryOrder]) -> SaleSummary:        """        :param data_list:        :return:        """        if not data_list:            return SaleSummary()        return self.dac_recursive(data_list, 0len(data_list)-1)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:54# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : risk_dac.pyfrom typing import Listfrom DivideConquer.dac.base_dac import BaseDACfrom DivideConquer.entity.order import JewelryOrderclass RiskOrderDAC(BaseDAC[JewelryOrder, List[JewelryOrder]]):    """    风控高客单检索分治    异常高客单订单检索分治    """    def __init__(self, risk_threshold: float):        self.threshold = risk_threshold    def conquer(self, data: JewelryOrder) -> List[JewelryOrder]:        if data.sale_amount > self.threshold:            return [data]        return []    def divide(self, data: List[JewelryOrder]) -> tuple[List[JewelryOrder], List[JewelryOrder]]:        mid = len(data) // 2        return data[:mid], data[mid:]    def combine(self, left_res: List[JewelryOrder], right_res: List[JewelryOrder]) -> List[JewelryOrder]:        return left_res + right_res    def scan_risk_orders(self, data_list: List[JewelryOrder]) -> List[JewelryOrder]:        if not data_list:            return []        return self.dac_recursive(data_list, 0len(data_list)-1)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:55# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : perm_dac.pyfrom typing import Optionalfrom typing import Listfrom DivideConquer.entity.role import JewelryRoleNodefrom DivideConquer.entity.order import JewelryOrderclass PermissionDAC:    """    树形权限二分递归分治校验(无通用列表,独立实现)    权限树分治校验    """    def check_perm(self, root: Optional[JewelryRoleNode], target_perm: str) -> bool:        """        :param root:        :param target_perm:        :return:        """        if root is None:            return False        if target_perm in root.permissions:            return True        # Divide 拆分左右子树        left_ok = self.check_perm(root.left, target_perm)        right_ok = self.check_perm(root.right, target_perm)        # Combine:任一子树匹配即有权限        return left_ok or right_ok    def filter_order_by_perm(self, orders: List[JewelryOrder], role_perms: List[str], seller_id: str) -> List[JewelryOrder]:        """        分治过滤当前角色可见订单(数据权限隔离)        :param orders:        :param role_perms:        :param seller_id:        :return:        """        def dac_filter(l: int, r: int) -> List[JewelryOrder]:            if l == r:                order = orders[l]                # 导购仅查看本人订单;店长/区域/集团查看全部                if "查看个人业绩" in role_perms and order.seller_id != seller_id:                    return []                return [order]            mid = (l + r) // 2            left = dac_filter(l, mid)            right = dac_filter(mid+1, r)            return left + right        if not orders:            return []        return dac_filter(0len(orders)-1)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:57# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : perm_service.pyfrom DivideConquer.repository.role_repo import RoleRepositoryfrom DivideConquer.dac.perm_dac import PermissionDACfrom DivideConquer.entity.order import JewelryOrderfrom typing import Listclass PermissionService:    """    纯行业业务逻辑,依赖 dac / 仓储    """    def __init__(self, role_repo: RoleRepository):        self._repo = role_repo        self._dac = PermissionDAC()    def has_permission(self, perm_key: str) -> bool:        """        :param perm_key:        :return:        """        root = self._repo.get_root()        return self._dac.check_perm(root, perm_key)    def get_visible_orders(self, all_orders: List[JewelryOrder], login_seller_id: str) -> List[JewelryOrder]:        """        根据登录角色权限分治过滤可查看订单        :param all_orders:        :param login_seller_id:        :return:        """        root = self._repo.get_root()        if not root:            return []        return self._dac.filter_order_by_perm(all_orders, root.permissions, login_seller_id)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:58# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : sale_stat_service.pyfrom DivideConquer.repository.order_repo import OrderRepositoryfrom DivideConquer.dac.stat_dac import SaleStatDACfrom DivideConquer.utils import parallel_batch_executefrom DivideConquer.constants import QUARTER_MONTH_MAPfrom typing import DictTuplefrom DivideConquer.entity.order import SaleSummaryclass SaleStatService:    """    """    def __init__(self, order_repo: OrderRepository):        self._repo = order_repo        self._dac = SaleStatDAC()    def stat_by_shop_parallel(self) -> Dict[str, SaleSummary]:        """        门店分治统计:多线程并行计算各门店业绩        :return:        """        shop_split = self._repo.split_by_shop()        task_list = []        shop_name_list = []        for shop, ords in shop_split.items():            shop_name_list.append(shop)            task_list.append(lambda o=ords: self._dac.calc_total(o))        # 并行执行分治计算        stat_results = parallel_batch_execute(task_list)        shop_result = dict(zip(shop_name_list, stat_results))        # 合并集团总业绩        total = SaleSummary()        for s in stat_results:            total += s        shop_result["集团全部门店合计"] = total        return shop_result    def stat_by_time(self) -> Dict[strobject]:        """        按月分治,合并季度、年度报表        :return:        """        month_split = self._repo.split_by_month()        month_summary: Dict[int, SaleSummary] = {}        # 月度分治统计        for m, ords in month_split.items():            month_summary[m] = self._dac.calc_total(ords)        # 合并季度        quarter_summary: Dict[int, SaleSummary] = {1:SaleSummary(),2:SaleSummary(),3:SaleSummary(),4:SaleSummary()}        year_total = SaleSummary()        for q, month_list in QUARTER_MONTH_MAP.items():            for m in month_list:                quarter_summary[q] += month_summary[m]        for m_sum in month_summary.values():            year_total += m_sum        # 封装返回        month_dict = {f"{m}月": month_summary[m] for m in range(1,13)}        return {            "月度明细": month_dict,            "季度汇总": quarter_summary,            "年度总报表": year_total        }# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 22:59# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : risk_service.pyfrom DivideConquer.repository.order_repo import OrderRepositoryfrom DivideConquer.dac.risk_dac import RiskOrderDACfrom DivideConquer.entity.order import JewelryOrderfrom typing import Listclass RiskScreenService:    """    """    def __init__(self, order_repo: OrderRepository, risk_threshold: float):        self._repo = order_repo        self._dac = RiskOrderDAC(risk_threshold)    def scan_high_amount_orders(self) -> List[JewelryOrder]:        """        :return:        """        all_ords = self._repo.get_all()        return self._dac.scan_risk_orders(all_ords)    def modify_threshold(self, new_val: float) -> None:        """        :param new_val:        :return:        """        self._dac.threshold = new_val

调用:

# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Divide and Conquer  Algorithm# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/7/18 23:00# User      :  geovindu# Product   : PyCharm# Project   : PyAlgorithms# File      : DivideConquerBll.pyfrom DivideConquer.repository.order_repo import OrderRepositoryfrom DivideConquer.repository.role_repo import RoleRepositoryfrom DivideConquer.service.perm_service import PermissionServicefrom DivideConquer.service.sale_stat_service import SaleStatServicefrom DivideConquer.service.risk_service import RiskScreenServicefrom DivideConquer.constants import RISK_AMOUNT_THRESHOLDfrom DivideConquer.entity.order import JewelryOrderfrom DivideConquer.entity.role import JewelryRoleNodefrom typing import ListDictfrom DivideConquer.constants import *from DivideConquer.utils import format_floatclass DivideConquerBll(object):    """    """    def __init__(self):        # 初始化仓储        self._order_repo = OrderRepository()        self._role_repo = RoleRepository()        # 初始化业务服务(依赖注入)        self.perm_service = PermissionService(self._role_repo)        self.sale_stat_service = SaleStatService(self._order_repo)        self.risk_service = RiskScreenService(self._order_repo, RISK_AMOUNT_THRESHOLD)        # 订单仓储代理方法    def add_order(self, order: JewelryOrder) -> None:        """        :param order:        :return:        """        self._order_repo.add(order)    def batch_add_orders(self, orders: List[JewelryOrder]) -> None:        """        :param orders:        :return:        """        self._order_repo.batch_add(orders)        # 权限树初始化    def build_permission_tree(self, root_node: JewelryRoleNode) -> None:        """        :param root_node:        :return:        """        self._role_repo.set_root(root_node)        # 对外业务接口    def check_permission(self, perm_key: str) -> bool:        """        :param perm_key:        :return:        """        return self.perm_service.has_permission(perm_key)    def get_user_visible_orders(self, seller_id: str) -> List[JewelryOrder]:        """        :param seller_id:        :return:        """        all_ords = self._order_repo.get_all()        return self.perm_service.get_visible_orders(all_ords, seller_id)    def query_shop_sales_stat(self) -> Dict[strobject]:        """        :return:        """        return self.sale_stat_service.stat_by_shop_parallel()    def query_time_sales_stat(self) -> Dict[strobject]:        """        :return:        """        return self.sale_stat_service.stat_by_time()    def query_risk_orders(self) -> List[JewelryOrder]:        """        :return:        """        return self.risk_service.scan_high_amount_orders()    def Demo(self):        """        :return:        """        # 2. 模拟构造测试订单        mock_orders = [            JewelryOrder("O001""福田店"21"黄金"62801300"S001"),            JewelryOrder("O002""福田店"31"钻石"12860048000"S001"),            JewelryOrder("O003""南山店"52"彩宝"89003600"S002"),            JewelryOrder("O004""南山店"62"钻石"9600039000"S002"),            JewelryOrder("O005""福田店"93"银饰"499220"S003"),            JewelryOrder("O006""南山店"114"钻石"15600062000"S004"),            JewelryOrder("O007""福田店"124"黄金"86001800"S003"),        ]        self.batch_add_orders(mock_orders)        # 3. 构建多层权限树        guide = JewelryRoleNode("门店导购", [PERM_VIEW_SELF_SALE])        keeper = JewelryRoleNode("仓管", [PERM_VIEW_STOCK])        shop_mgr = JewelryRoleNode("门店店长", [PERM_SHOP_ADJUST])        shop_mgr.left = guide        shop_mgr.right = keeper        area_mgr = JewelryRoleNode("华南区域经理", [PERM_DIAMOND_ADJUST])        area_mgr.left = shop_mgr        group_admin = JewelryRoleNode("集团管理员", [PERM_EXPORT_ALL_SHOP, PERM_MODIFY_ROLE])        group_admin.left = area_mgr        self.build_permission_tree(group_admin)        # ========== 业务1:并行分治门店业绩统计 ==========        print("======= 【并行分治-门店业绩汇总】 =======")        shop_stat = self.query_shop_sales_stat()        for shop, summary in shop_stat.items():            print(f"\n【{shop}】")            data = summary.to_dict()            for k, v in data.items():                print(f"{k}{format_float(v)}")        # ========== 业务2:时间维度分治(月/季/年) ==========        print("\n======= 【时间分治-年度经营报表】 =======")        time_stat = self.query_time_sales_stat()        year_sum = time_stat["年度总报表"]        print(f"全年总销售额:{format_float(year_sum.total_sales)},全年毛利:{format_float(year_sum.total_profit)}")        print("\n季度汇总:")        for q, s in time_stat["季度汇总"].items():            print(f"Q{q} 销售总额:{format_float(s.total_sales)}")        # ========== 业务3:风控分治高客单订单检索 ==========        print("\n======= 【风控分治-超10万异常订单】 =======")        risk_list = self.query_risk_orders()        if risk_list:            for item in risk_list:                print(f"订单{item.order_id} | {item.shop_name} | {item.category} | {format_float(item.sale_amount)}元")        else:            print("无风险订单")        # ========== 业务4:树形分治权限校验 ==========        print("\n======= 【树形分治权限校验】 =======")        print(f"区域经理是否可钻石调价:{self.check_permission(PERM_DIAMOND_ADJUST)}")        print(f"店长是否可导出全门店数据:{self.check_permission(PERM_EXPORT_ALL_SHOP)}")        print(f"集团是否可修改角色权限:{self.check_permission(PERM_MODIFY_ROLE)}")        # ========== 业务5:分治数据权限过滤(导购仅看自己订单) ==========        print("\n======= 【分治数据权限过滤-导购S001可见订单】 =======")        user_ords = self.get_user_visible_orders("S001")        for o in user_ords:            print(f"{o.order_id} | 开单人:{o.seller_id} | {o.sale_amount}")

输出:

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 15:33:16 HTTP/2.0 GET : https://f.mffb.com.cn/a/505667.html
  2. 运行时间 : 0.328207s [ 吞吐率:3.05req/s ] 内存消耗:4,574.47kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0454f2b789470f274fa17500d79ef746
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001052s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001443s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.019121s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002027s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001401s ]
  6. SELECT * FROM `set` [ RunTime:0.006788s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001492s ]
  8. SELECT * FROM `article` WHERE `id` = 505667 LIMIT 1 [ RunTime:0.011477s ]
  9. UPDATE `article` SET `lasttime` = 1787297596 WHERE `id` = 505667 [ RunTime:0.010321s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.013332s ]
  11. SELECT * FROM `article` WHERE `id` < 505667 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004291s ]
  12. SELECT * FROM `article` WHERE `id` > 505667 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.011565s ]
  13. SELECT * FROM `article` WHERE `id` < 505667 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008487s ]
  14. SELECT * FROM `article` WHERE `id` < 505667 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.027943s ]
  15. SELECT * FROM `article` WHERE `id` < 505667 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.022419s ]
0.331678s