当前位置: 首页 > news >正文

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

一、数据库设计图

二、后端统计工厂逻辑

        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;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 站群服务器是指什么?企业为什么选择站群服务器?
  • 华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?
  • 页面关键路径渲染详解
  • uniapp vue3 梯形选项卡组件
  • SpringBoot Admin调整类的日志级别
  • 2.计算机网络基础
  • 简单了解Maven与安装
  • 加密与安全_优雅存储二要素(AES-256-GCM )
  • 【redis】常用数据类型及命令
  • mongoDB-1
  • JavaEE: 深入探索TCP网络编程的奇妙世界(一)
  • 半导体制造技术中的沉积和驱入(Deposition and drive-in)过程
  • C语言字符串学习
  • linux 双网卡服务器突然断电后网卡单通故障解决
  • 力扣(LeetCode)每日一题 2848. 与车相交的点
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【刷算法】求1+2+3+...+n
  • 0x05 Python数据分析,Anaconda八斩刀
  • java概述
  • JS 面试题总结
  • Netty源码解析1-Buffer
  • React 快速上手 - 07 前端路由 react-router
  • Selenium实战教程系列(二)---元素定位
  • Vue 重置组件到初始状态
  • 电商搜索引擎的架构设计和性能优化
  • 记一次删除Git记录中的大文件的过程
  • 聊聊hikari连接池的leakDetectionThreshold
  • 模型微调
  • 前端
  • 前端面试题总结
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链技术特点之去中心化特性
  • 山寨一个 Promise
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用Python写一份独特的元宵节祝福
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​批处理文件中的errorlevel用法
  • #QT(QCharts绘制曲线)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (4)STL算法之比较
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (libusb) usb口自动刷新
  • (纯JS)图片裁剪
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (九十四)函数和二维数组
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ***测试-HTTP方法