微信支付开发-后台统计工厂实现

一、数据库设计图

二、后端统计工厂逻辑

        1、统计父抽象类

                a、StatisticsHandle.php

        2、统计工厂通道类

                a、StatisticsFactory.php

        3、查询实现类

                a、答题统计(Answer.php)

三、后端统计工厂代码实现

        1、统计父抽象类(StatisticsHandle.php)

<?php
/*** 统计父抽象类* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:07*/
namespace Statistics;
abstract class StatisticsHandle
{/*** 获取统计列表* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:31* @ param $param 参数* @ return mixed*/protected abstract function getList($param);/*** 获取统计详情* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:31* @ param $id 编号* @ return mixed*/protected abstract function getInfo($id);/*** 导出统计信息* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:32* @ return mixed*/protected abstract function exportInfo($param);
}

        2、统计工厂通道类(StatisticsFactory.php)

<?php
/*** 统计工厂选择类* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:12*/
namespace Statistics;
use app\BaseError;
use Statistics\statistics\Answer;class StatisticsFactory
{protected static $instance = null;//缓存实例protected $channelType = 0;//通道类型/*** 初始化参数* @ param $types 类型选择*/public function __construct($channelType){$this->channelType = $channelType;}/*** 通道选择器* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:39* @ return null*/public function statisticsHandle(){switch ((int)$this->channelType){case 1: //可疑网址查询break;case 2: //银行卡查询break;case 3: //人员被骗风险查询break;case 4: //答题记录查询self::$instance = new Answer();break;default:self::$instance = null;throw new BaseError("未设置任何通道",50000,200);break;}return self::$instance;}
}

        3、答题统计查询实现(Answer.php)

<?php
/*** 答题记录查询控制* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:29*/
namespace Statistics\statistics;
use Statistics\StatisticsHandle;
use app\BaseError;
use app\model\anxun\shuziren\StatisticsAnswer as ASSAModel;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use Upload\UploadFactory;
class Answer extends StatisticsHandle
{//初始化使用的public function __construct(){}/*** 获取统计列表* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:31* @ return mixed*/public function getList($param){// TODO: Implement getList() method.$where = [];if(!empty($param['digitized_human_name']))$where[] = ['digitized_human_name','like','%'.$param['digitized_human_name'].'%'];if(!empty($param['involved_date']))$where[] = ['involved_date','=',$param['involved_date']];if(!empty($param['id_card']))$where[] = ['id_card','=',$param['id_card']];$resList = ASSAModel::getList($where,'id,digitized_human_name,correct_rate,error_rate,id_card,create_time',[$param['currentPage'], $param['currentSize']]);$list  =  $resList['info'];$res['list'] = $list;$res['meat'] = $resList['page'];return $res;}/*** 获取统计详情* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:31* @ return mixed*/public function getInfo($id){// TODO: Implement getInfo() method.$data = ASSAModel::dataFind(['id' => $id],'id,digitized_human_name,correct_rate,error_rate,id_card,create_time',true);return $data;}/*** 导出统计信息* User: 龙哥·三年风水* Date: 2024/9/11* Time: 10:32* @ return mixed*/public function exportInfo($param){// TODO: Implement exportInfo() method.$where = [];if(!empty($param['digitized_human_name']))$where[] = ['digitized_human_name','like','%'.$param['digitized_human_name'].'%'];if(!empty($param['involved_date']))$where[] = ['involved_date','=',$param['involved_date']];if(!empty($param['id_card']))$where[] = ['id_card','=',$param['id_card']];$list = ASSAModel::getAll($where,'digitized_human_name,correct_rate,error_rate,id_card,create_time','create_time DESC');if(!$list)throw new BaseError('暂无可导出',50000,200);// 处理标题$title = ['机器人名称', '正确题数', '错误题数','身份证号','参与时间'];$filename = '答题参与记录';$spreadsheet = new Spreadsheet();$spreadsheet->getDefaultStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); //设置水平默认对齐方式$spreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); //设置垂直默认对齐方式$sheet = $spreadsheet->getActiveSheet();$everyDay = date('Y-m-d', time()). '_' .uniqid();foreach ($title as $key => $value) {$sheet->setCellValueByColumnAndRow($key+1, 1, $value);}$row = 2;foreach ($list as $item) {$column = 1;foreach ($item as $k => $value) {$sheet->setCellValueByColumnAndRow($column, $row, $value);$column++;}$row++;}$savename = '/storage/'.$filename . '_' . $everyDay . '.xlsx';$object = date('Y-m-d',time()).'/' . $filename . '_' . $everyDay . '.xlsx';$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->save('.' . $savename);$UploadFactory = new UploadFactory();$uploadHandle = $UploadFactory->getUploadHandle();$res = $uploadHandle->uploadFile($object,'.' . $savename);$data['url'] = $res;$filePath = app()->getRuntimePath() . $savename;@unlink($filePath);return $data;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428546.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件

VirtualBox 7.1.0 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接&#xff1a;https://sysin.org/blog/virtualbox-7/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2024 年 9 月 …

Redis面试真题总结(三)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 什么是缓存雪崩&#xff1f;该如何解决&#xff1f; 缓存雪崩是指…

算法课习题汇总(2)

整数划分问题 将正整数n表示成一系列正整数之和&#xff0c;nn1n2…nk(n1>n2>…>nk,k>1)。正整数n的这种表示称为正整数n的划分。 思路&#xff1a; n表示待划分数&#xff0c;m表示最大减数。 #include<iostream> using namespace std;int q(int n, int…

面试题给图例举测试用例或测试点

目录 从功能测试的角度考虑&#xff1a; 从性能角度考虑&#xff1a; 从兼容性的角度考虑&#xff1a; 从自动化角度考虑&#xff1a; 从安全性角度考虑&#xff1a; 用户体验的角度测试&#xff1a; 面试通常会有技术和人事两种&#xff0c;侧重点不一样。 今天聊一下测…

Qt日志输出及QsLog日志库

目录 Qt日志输出及QsLog日志库日志输出格式化日志普通格式化条件格式化环境变量设置格式化日志输出位置日志输出对象信息禁用输出 QsLog日志库使用方法1. 将QsLog目录添加到项目中2. 配置CMakeLists.txt文件3. 配置.pro文件4. 日志记录器的配置5. 运行程序6. 启用行号和文件名C…

有奖直播 | onsemi IPM 助力汽车电气革命及电子化时代冷热管理

在全球汽车行业向电气化和智能化转型的浪潮中&#xff0c;功率管理技术的创新和应用成为了关键驱动力。作为全球领先的半导体解决方案供应商&#xff0c;onsemi&#xff08;安森美&#xff09;致力于通过其先进的智能功率模块&#xff08;IPM&#xff09;技术&#xff0c;推动汽…

[Linux#55][网络协议] 序列化与反序列化 | TcpCalculate为例

目录 1. 理解协议 1.1 结构化数据的传输 序列化与反序列化 代码感知&#xff1a; Request 类 1. 构造函数 2. 序列化函数&#xff1a;Serialize() 3. 反序列化函数&#xff1a;DeSerialize() 补充 4. 成员变量 Response 类 1. 构造函数 2. 序列化函数&#xff1a;…

JavaWeb - 5 - 前端工程化

一.前后端分离开发 前后端混合开发 缺点&#xff1a;沟通成本高&#xff0c;分工不明确&#xff0c;不便管理&#xff0c;不便维护拓展 前后端分离开发 当前最为主流的开发模式&#xff1a;前后端分离 前后端分离开发中很重要的是API接口文档&#xff08;如&#xff1a;YApi&…

胤娲科技:谷歌DeepMind祭出蛋白质设计新AI——癌症治疗迎来曙光

在科技的浩瀚星空中&#xff0c;DeepMind的“阿尔法”家族总是能带来令人瞩目的璀璨光芒。这一次&#xff0c;它们再次以惊人的姿态&#xff0c; 将AI的触角深入到了生命的微观世界——蛋白质设计领域&#xff0c;为我们描绘了一幅未来医疗的宏伟蓝图。 想象一下&#xff0c;一…

Scrapy爬虫实战——某瓣250

# 按照我个人的习惯&#xff0c;在一些需要较多的包作为基础支撑的项目里&#xff0c;习惯使用虚拟环境&#xff0c;因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如A、B、C三个库&#xff0c;A和B同时依赖于C&#xff0c;但是A需要的C库版本大于N&#xff0c;而B…

VUE3配置路由(超级详细)

第一步创建vue3的项目

多版本node管理工具nvm

什么是nvm&#xff1f; 在项目开发过程中&#xff0c;使用到vue框架技术&#xff0c;需要安装node下载项目依赖&#xff0c;但经常会遇到node版本不匹配而导致无法正常下载&#xff0c;重新安装node却又很麻烦。为解决以上问题&#xff0c;nvm&#xff1a;一款node的版本管理工…

微服务-- Sentinel的使用

目录 Sentinel&#xff1a;微服务的哨兵 生态系统景观 sentinel与spring cloud Hystrix 对比 Sentinel 主要分为两部分 Sentinel安装与使用 Sentinel的控制规则 流控规则 流控规则的属性说明 新增流控规则 关联流控模式 SentinelResource注解的使用 SentinelResou…

mysql-死锁

文章目录 1、概念1.1、创建表 account1.2、id 自动创建 主键索引 primary1.3、name 没有创建索引 2、产生死锁的必要条件2.1、此时 name 没有创建 索引 3、如何处理死锁3.1、方式1&#xff1a;等待&#xff0c;直到超时&#xff08;innodb_lock_wait_timeout50s&#xff09;3.2…

GRE隧道在实际部署中的优化、局限性与弊端

GRE的其他特性 上一篇光讲解配置就花了大量的篇幅&#xff0c;还一些特性没有讲解的&#xff0c;这里在来提及下。 1、动态路由协议 在上一篇中是使用的静态路由&#xff0c;那么在动态路由协议中应该怎么配置呢&#xff1f; undoip route-static 192.168.20.0 255.255.255.0 …

element-plus的菜单组件el-menu

菜单是几乎是每个管理系统的软件系统中不可或缺的&#xff0c;element-plus提供的菜单组件可以快速完成大部分的菜单的需求开发&#xff0c; 该组件内置和vue-router的集成&#xff0c;使用起来很方便。 主要组件如下 el-menu 顶级菜单组件 主要属性 mode:决定菜单的展示模式…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…

2024年8月HarmonyOS鸿蒙应用开发者高级认证全新题库

有题库在手&#xff0c;一小时轻松拿下鸿蒙高级。你们需要也可以无偿分享哦&#xff01; 项目需要为不同的设备形态(如手机 、 智能手表)提供定制化构建 。请说明如何在 DevEcostudio 中 设置不同的构建配置&#xff0c; 以生成针对不同设备的 hap 包&#xff1a; 在模块级别 b…

JavaWeb的Filter详解

过滤器Filter 什么是Filter&#xff1f; 依据字面上的中文意思为过滤器。Filter的作用 当用户的请求到达指定的URL之前&#xff0c;可以借助Filter来改变这些请求的内容&#xff1b;同样地&#xff0c;当响应结果到达客户端之前&#xff0c;可以使用Filter修改输出的内容。什么…

【数据结构入门】排序算法之三路划分与非比较排序

文章目录 前言 一、三路划分优化 1.1. 基本思想 1.2. 实现步骤 1.3. 优点 1.4 代码实现 二、非比较排序 2.1 计数排序 2.1.1基本思想 2.1.2具体步骤 2.1.3算法特性 2.1.4算法实现 2.2 基数排序 2.2.1基本思想 2.2.2具体步骤 2.2.3 基数排序的方法 2.2.4算法特…