微信支付开发-配景统计工厂实现

打印 上一主题 下一主题

主题 519|帖子 519|积分 1557

一、数据库设计图


二、后端统计工厂逻辑

        1、统计父抽象类

                a、StatisticsHandle.php

        2、统计工厂通道类

                a、StatisticsFactory.php

        3、查询实现类

                a、答题统计(Answer.php)

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

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

  1. <?php
  2. /**
  3. * 统计父抽象类
  4. * User: 龙哥·三年风水
  5. * Date: 2024/9/11
  6. * Time: 10:07
  7. */
  8. namespace Statistics;
  9. abstract class StatisticsHandle
  10. {
  11.     /**
  12.      * 获取统计列表
  13.      * User: 龙哥·三年风水
  14.      * Date: 2024/9/11
  15.      * Time: 10:31
  16.      * @ param $param 参数
  17.      * @ return mixed
  18.      */
  19.     protected abstract function getList($param);
  20.     /**
  21.      * 获取统计详情
  22.      * User: 龙哥·三年风水
  23.      * Date: 2024/9/11
  24.      * Time: 10:31
  25.      * @ param $id 编号
  26.      * @ return mixed
  27.      */
  28.     protected abstract function getInfo($id);
  29.     /**
  30.      * 导出统计信息
  31.      * User: 龙哥·三年风水
  32.      * Date: 2024/9/11
  33.      * Time: 10:32
  34.      * @ return mixed
  35.      */
  36.     protected abstract function exportInfo($param);
  37. }
复制代码
        2、统计工厂通道类(StatisticsFactory.php)

  1. <?php
  2. /**
  3. * 统计工厂选择类
  4. * User: 龙哥·三年风水
  5. * Date: 2024/9/11
  6. * Time: 10:12
  7. */
  8. namespace Statistics;
  9. use app\BaseError;
  10. use Statistics\statistics\Answer;
  11. class StatisticsFactory
  12. {
  13.     protected static $instance = null;//缓存实例
  14.     protected $channelType = 0;//通道类型
  15.     /**
  16.      * 初始化参数
  17.      * @ param $types 类型选择
  18.      */
  19.     public function __construct($channelType){
  20.         $this->channelType = $channelType;
  21.     }
  22.     /**
  23.      * 通道选择器
  24.      * User: 龙哥·三年风水
  25.      * Date: 2024/9/11
  26.      * Time: 10:39
  27.      * @ return null
  28.      */
  29.     public function statisticsHandle(){
  30.         switch ((int)$this->channelType){
  31.             case 1: //可疑网址查询
  32.                 break;
  33.             case 2: //银行卡查询
  34.                 break;
  35.             case 3: //人员被骗风险查询
  36.                 break;
  37.             case 4: //答题记录查询
  38.                 self::$instance = new Answer();
  39.                 break;
  40.             default:
  41.                 self::$instance = null;
  42.                 throw new BaseError("未设置任何通道",50000,200);
  43.                 break;
  44.         }
  45.         return self::$instance;
  46.     }
  47. }
复制代码
        3、答题统计查询实现(Answer.php)

  1. <?php
  2. /**
  3. * 答题记录查询控制
  4. * User: 龙哥·三年风水
  5. * Date: 2024/9/11
  6. * Time: 10:29
  7. */
  8. namespace Statistics\statistics;
  9. use Statistics\StatisticsHandle;
  10. use app\BaseError;
  11. use app\model\anxun\shuziren\StatisticsAnswer as ASSAModel;
  12. use PhpOffice\PhpSpreadsheet\IOFactory;
  13. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  14. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  15. use Upload\UploadFactory;
  16. class Answer extends StatisticsHandle
  17. {
  18.     //初始化使用的
  19.     public function __construct(){
  20.     }
  21.     /**
  22.      * 获取统计列表
  23.      * User: 龙哥·三年风水
  24.      * Date: 2024/9/11
  25.      * Time: 10:31
  26.      * @ return mixed
  27.      */
  28.     public function getList($param){
  29.         // TODO: Implement getList() method.
  30.         $where = [];
  31.         if(!empty($param['digitized_human_name']))$where[] = ['digitized_human_name','like','%'.$param['digitized_human_name'].'%'];
  32.         if(!empty($param['involved_date']))$where[] = ['involved_date','=',$param['involved_date']];
  33.         if(!empty($param['id_card']))$where[] = ['id_card','=',$param['id_card']];
  34.         $resList = ASSAModel::getList($where,'id,digitized_human_name,correct_rate,error_rate,id_card,create_time',[$param['currentPage'], $param['currentSize']]);
  35.         $list  =  $resList['info'];
  36.         $res['list'] = $list;
  37.         $res['meat'] = $resList['page'];
  38.         return $res;
  39.     }
  40.     /**
  41.      * 获取统计详情
  42.      * User: 龙哥·三年风水
  43.      * Date: 2024/9/11
  44.      * Time: 10:31
  45.      * @ return mixed
  46.      */
  47.     public function getInfo($id){
  48.         // TODO: Implement getInfo() method.
  49.         $data = ASSAModel::dataFind(['id' => $id],'id,digitized_human_name,correct_rate,error_rate,id_card,create_time',true);
  50.         return $data;
  51.     }
  52.     /**
  53.      * 导出统计信息
  54.      * User: 龙哥·三年风水
  55.      * Date: 2024/9/11
  56.      * Time: 10:32
  57.      * @ return mixed
  58.      */
  59.     public function exportInfo($param){
  60.         // TODO: Implement exportInfo() method.
  61.         $where = [];
  62.         if(!empty($param['digitized_human_name']))$where[] = ['digitized_human_name','like','%'.$param['digitized_human_name'].'%'];
  63.         if(!empty($param['involved_date']))$where[] = ['involved_date','=',$param['involved_date']];
  64.         if(!empty($param['id_card']))$where[] = ['id_card','=',$param['id_card']];
  65.         $list = ASSAModel::getAll($where,'digitized_human_name,correct_rate,error_rate,id_card,create_time','create_time DESC');
  66.         if(!$list)throw new BaseError('暂无可导出',50000,200);
  67.         // 处理标题
  68.         $title = ['机器人名称', '正确题数', '错误题数','身份证号','参与时间'];
  69.         $filename = '答题参与记录';
  70.         $spreadsheet = new Spreadsheet();
  71.         $spreadsheet->getDefaultStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); //设置水平默认对齐方式
  72.         $spreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); //设置垂直默认对齐方式
  73.         $sheet = $spreadsheet->getActiveSheet();
  74.         $everyDay = date('Y-m-d', time()). '_' .uniqid();
  75.         foreach ($title as $key => $value) {
  76.             $sheet->setCellValueByColumnAndRow($key+1, 1, $value);
  77.         }
  78.         $row = 2;
  79.         foreach ($list as $item) {
  80.             $column = 1;
  81.             foreach ($item as $k => $value) {
  82.                 $sheet->setCellValueByColumnAndRow($column, $row, $value);
  83.                 $column++;
  84.             }
  85.             $row++;
  86.         }
  87.         $savename = '/storage/'.$filename . '_' . $everyDay . '.xlsx';
  88.         $object = date('Y-m-d',time()).'/' . $filename . '_' . $everyDay . '.xlsx';
  89.         $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  90.         $writer->save('.' . $savename);
  91.         $UploadFactory = new UploadFactory();
  92.         $uploadHandle = $UploadFactory->getUploadHandle();
  93.         $res = $uploadHandle->uploadFile($object,'.' . $savename);
  94.         $data['url'] = $res;
  95.         $filePath = app()->getRuntimePath() . $savename;
  96.         @unlink($filePath);
  97.         return $data;
  98.     }
  99. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表