一.业务需求

二.产品设计

三.UI设计

四.程序设计

1.使用behavior配置页面缓存

class WmsCheckController extends Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
            [
                'class' => 'yii\filters\PageCache',
                'only' => ['view'],
                'duration' => 3600,
                'variations' => [
                    \Yii::$app->language,
                ],
                'dependency' => [
                    'class' => 'yii\caching\DbDependency',
                ],
            ],
        ];
    }

  

2.在控制器中编写redis缓存对数据进行缓存

public function actionPrint($id)
    {
        //设置无布局
        $this->layout = false;

        //获取打印数据
        $model = $this->findModel($id);

        if(!($model->is_del == 0)){
            throw new ForbiddenHttpException("该单据无法打印");
        }

        $serializedDataProvider = \Yii::$app->redis->get('wms_check_detail_data_provider');
        if (false == $serializedDataProvider){
            $wmsCheckDetail = new \backend\models\WmsCheckDetailSearch();
            $dataProvider = $wmsCheckDetail->searchByCheckId($id);
            \Yii::$app->redis->set('wms_check_detail_data_provider', serialize($dataProvider));
            \Yii::$app->redis->expire('wms_check_detail_data_provider', 3600);
        }else{
            $dataProvider = unserialize($serializedDataProvider);
        }

        //生成页面内容
        $content = $this->render('print', [
            'model' => $model,
            'dataProvider'=>$dataProvider,
        ]);
        //打印对象
//        $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT,true, 'UTF-8', false);
        $pdf = (new \TCPDF('L', 'mm', array(240, 140), true, 'UTF-8', false));
        //设置无打印头
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
        //设置PDF打印纸张的编剧
        $pdf->SetMargins(20, 20,20);
        //设置单元格内边距
        $pdf->setCellPaddings(0, 0, 0, 0);
        //设置自动进入下一页
//        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_TOP);
//        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_LEFT);
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_RIGHT);
//        $pdf->SetAutoPageBreak(TRUE, 0);
        $pdf->AddPage();
        //设置字体
        $pdf->SetFont('stsongstdlight', '', 10);
        $pdf->writeHTML($content, true, false, true, false, '');
        $pdf->lastPage();
        $pdf->get('库存盘点.pdf');
    }

  

3.进行页面缓存

<?php if ($this->beginCache($model->id, [
        'duration' => 3600,
        'enabled' => Yii::$app->request->isGet])): ?>
    <?php foreach ($dataProvider->getModels() as $detail): ?>
    <table class="table-bordered" style="font-size: 10px; border-top: 2px solid black;">
        <tr>
            <td colspan="2" class="active" align="center">名称</td>
            <td colspan="4" class="active" align="center">等级</td>
            <td colspan="4" class="active" align="center">单号</td>
            <td colspan="2" class="active" align="center">件数(袋)</td>
            <td colspan="2" class="active" align="center">实盘</td>
            <td colspan="2" class="active" align="center">差异</td>
            <td colspan="2" class="active" align="center">规格</td>
            <td colspan="2" class="active" align="center">重量(公斤)</td>
            <td colspan="2" class="active" align="center">实盘</td>
            <td colspan="2" class="active" align="center">差异</td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <?= $detail->common_producer_herb_info_name ?>
            </td>
            <td colspan="4" align="center">
                <?= $detail->common_producer_herb_grade_info_name ?>
            </td>
            <td colspan="4" align="center">
                <?= $detail->wms_herb_in_sheet_number ?>
            </td>
            <td colspan="2" align="center">
                <?php if(in_array($model->common_producer_herb_type, [\core\models\WmsCheck::HERB_TYPE_MATERIAL, \core\models\WmsCheck::HERB_TYPE_PRODUCT])): ?>
                    <?= $detail->wms_check_detail_system_package_num ?>
                <?php endif; ?>
            </td>
            <td colspan="2" align="center">
                <?php if(in_array($model->common_producer_herb_type, [\core\models\WmsCheck::HERB_TYPE_MATERIAL, \core\models\WmsCheck::HERB_TYPE_PRODUCT])): ?>
                    <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_check_package_num ?><?php endif; ?>
                <?php endif; ?>
            </td>
            <td colspan="2" align="center">
                <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_diff_package_num ?><?php endif; ?>
            </td>
            <td colspan="2" align="center">
                <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_spec_name ?><?php endif; ?>
            </td>
            <td colspan="2" align="center">
                <?= \common\models\Base::weightBcdiv($detail->wms_check_detail_system_weight) ?>
            </td>
            <td colspan="2" align="center">
                <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= \common\models\Base::weightBcdiv($detail->wms_check_detail_check_weight) ?><?php endif; ?>
            </td>
            <td colspan="2" align="center">
                <?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= \common\models\Base::weightBcdiv($detail->wms_check_detail_diff_weight) ?><?php endif; ?>
            </td>
        </tr>
        <tr>
            <td colspan="2" class="active" align="center">说明</td>
            <td colspan="22" align="left"><?php if($model->wms_check_status == \core\models\WmsCheck::STATUS_FINISH): ?><?= $detail->wms_check_detail_diff_note ?><?php endif; ?></td>
        </tr>
    </table>
    <?php endforeach; ?>
    <?php $this->endCache(); endif; ?>

  

库存盘点打印功能生成PDF速度太慢使用页面缓存的更多相关文章

  1. 快销品 车销批发管理手持终端PDA系统 打印开单 入库 库存 盘点多功能一体

    手持POS终端PDA移动开单 PDA通过扫描商品条码移动开单,实现便携式办公,伴随式销售,浩瀚技术研发团队开发的一款最新产品,PDA能通过WIFI无线局域网.GPRS互联网直接与主机连接,让公司业务人 ...

  2. 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能

    在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...

  3. wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)

    目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...

  4. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  5. 在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all

    在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all 前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, ...

  6. php实现pdf导出和打印功能。

    所用插件:TCODF //导出pdf        public function export_pdf($order_sn){        require_once(FCPATH .'../sha ...

  7. java实现自动静默打印功能

    ​ 最近接到一个需求,要求实现自动打印功能,一般网页打印pdf需要借助浏览器的pdf组件,而且还要弹出打印窗口,再点击打印才能实现. 那么如何实现自动打印了,从点击自己网页上3次缩减到点击一次了? 一 ...

  8. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  9. 手把手教你使用 Java 在线生成 pdf 文档

    一.介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票.订单的库存打印单.各种电子签署合同等等,以方便用户查 ...

随机推荐

  1. PHP json_encode 中文乱码

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code   在编码过程中.经常会用到json_encode来处理中文.但是.出现一个问题.中文 ...

  2. 【转】wamp 3.0.6(apache 2.4.23) 403 forbidden 解决办法

    最近为了使用laraval框架,将wamp 升级到了比较高的版本,相应的apache也升级到了 2.4.23. larval是使用的挺好的,原来的apache倒是出现了问题:同一个局域网内,别人机器不 ...

  3. 【vue】vue +element 搭建项目,将js函数变成vue的函数

    demo:时间转换 1.目录 <1>在src文件夹下新建文件夹prototypefns--------在此文件夹创建util.js, <2>在prototypefns下新建文件 ...

  4. WiFi-ESP8266入门http(1)-建立服务器,直接发送网

    #include <ESP8266WiFi.h> /*** 该工程可以在2.4.0版本esp8266库中运行,没在更高版本库中进行测试 ***/ const char *ssid = &q ...

  5. <计算机网络>运输层

    端口号:通常在一台主机上运行多个网络应用程序,IP地址标识一台主机,而端口号标识特定的进程.端口是一个16bits的数,其大小在0-65535之间.0-1023之间的端口号叫做周知端口号 套接字:从网 ...

  6. 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)

    参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...

  7. Java常见的几种内存溢出及解决方案

    1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn ...

  8. FIFO队列算法的C程序实现

    头文件:Queue.h #ifndef _Queue_H #define _Queue_H typedef struct QueueDef_ //队列对象定义 { u16 front; //队列头部 ...

  9. elasticsearch简单操作(一)

    1.增加记录 例如1:向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录.比如,向/accounts/person发送请求,就可以新增一条人员记录. curl ...

  10. Vue $nextTick 原理

    使用场景 在进行获取数据后,需要对新视图进行下一步操作或者其他操作时,发现获取不到 DOM. 原因: 这里就涉及到 Vue 一个很重要的概念:异步更新队列(JS运行机制 . 事件循环). Vue 在观 ...