You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 模板打印控制器
*
* @author qifan
* @date 2020-12-15
*/
namespace app\crm\controller;
use app\admin\controller\ApiCommon;
use app\crm\logic\PrintingLogic;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Shared\Html;
use think\Controller;
use think\Hook;
use think\Request;
class Printing extends ApiCommon
{
public function _initialize()
{
$action = [
'permission'=>['previewData'],
'allow'=>['printingdata', 'template', 'setrecord', 'getrecord', 'preview', 'down']
];
Hook::listen('check_auth',$action);
$request = Request::instance();
$a = strtolower($request->action());
if (!in_array($a, $action['permission'])) {
parent::_initialize();
}
}
/**
* 获取打印的数据
*
* @param PrintingLogic $printingLogic
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function printingData(PrintingLogic $printingLogic)
{
$actionId = $this->param['action_id'];
$templateId = $this->param['template_id'];
$type = $this->param['type'];
$recordId = $this->param['record_id'];
$data = $printingLogic->getPrintingData($type, $actionId, $templateId, $recordId);
return resultArray(['data' => $data]);
}
/**
* 获取打印模板列表
*
* @param PrintingLogic $printingLogic
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function template(PrintingLogic $printingLogic)
{
if (empty($this->param['type'])) return resultArray(['error' => '请选择打印的类型!']);
$data = $printingLogic->getTemplateList($this->param['type']);
return resultArray(['data' => $data]);
}
/**
* 创建模板打印记录
*
* @param PrintingLogic $printingLogic
* @return \think\response\Json
*/
public function setRecord(PrintingLogic $printingLogic)
{
if (empty($this->param['type'])) return resultArray(['error' => '请选择模块!']);
if (empty($this->param['action_id'])) return resultArray(['error' => '缺少数据ID']);
if (empty($this->param['template_id'])) return resultArray(['error' => '缺少模板ID']);
if (empty($this->param['recordContent'])) return resultArray(['error' => '缺少打印内容!']);
$userId = $this->userInfo['id'];
if (!$printingLogic->setRecord($userId, $this->param)) return resultArray(['error' => '操作失败!']);
return resultArray(['data' => '操作成功!']);
}
/**
* 获取打印记录
*
* @param PrintingLogic $printingLogic
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function getRecord(PrintingLogic $printingLogic)
{
if (empty($this->param['crmType'])) return resultArray(['error' => '请选择模块!']);
if (empty($this->param['typeId'])) return resultArray(['error' => '缺少数据ID']);
$data = $printingLogic->getRecord($this->param, $this->userInfo['id']);
return resultArray(['data' => $data]);
}
/**
* 保存打印内容
*
* @param user_id 用户id
* @param type 类型workpdf
* @param content 打印内容
* @author fanqi
* @date 2021-03-25
* @return \think\response\Json
*/
public function preview(PrintingLogic $printingLogic)
{
if (empty($this->param['type'])) return resultArray(['error' => '缺少类型参数!']);
if (empty($this->param['content'])) return resultArray(['error' => '缺少打印内容!']);
$userInfo = $this->userInfo;
$this->param['user_id'] = $userInfo['id'];
$key = $printingLogic->preview($this->param);
return resultArray(['data' => $key]);
}
/**
* 打下打印文件
* @param string key 打印数据的唯一key
* @author fanqi
* @date 2021-03-26
* @return \think\response\Json
*/
public function down()
{
if (empty($this->param['key'])) return resultArray(['error' => '参数错误!']);
$data = db('admin_printing_data')->field(['type', 'content'])->where('key', $this->param['key'])->find();
$type = $data['type'];
$contentArray = json_decode($data['content'], true);
$content = $contentArray['data'];
if ($type == 'pdf') {
require_once(EXTEND_PATH.'tcpdf'.DS.'config'.DS.'tcpdf_config.php');
require_once(EXTEND_PATH.'tcpdf'.DS.'tcpdf.php');
$tcpdf = new \TCPDF();
// 设置PDF页面边距LEFTTOPRIGHT
$tcpdf->SetMargins(10, 10, 10);
// 设置字体,防止中文乱码
$tcpdf->SetFont('simsun', '', 10);
// 设置文件信息
$tcpdf->SetCreator(TITLE_NAME);
$tcpdf->SetAuthor(TITLE_NAME);
$tcpdf->SetTitle("打印文件");
// 删除预定义的打印 页眉/页尾
$tcpdf->setPrintHeader(false);
// 设置文档对齐,间距,字体,图片
$tcpdf->SetCreator(PDF_CREATOR);
$tcpdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$tcpdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// 自动分页
$tcpdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$tcpdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$tcpdf->setFontSubsetting(true);
$tcpdf->setPageMark();
$tcpdf->AddPage();
$html = $content;
$tcpdf->writeHTML($html, true, false, true, true, '');
$tcpdf->lastPage();
$tcpdf->Output('print.PDF','I');
}
if ($type == 'word') {
$fileName = 'print.docx';
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$fileName");
header('Transfer-Encoding: chunked');
$html = '<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">';
$html .= '<head><meta charset="UTF-8" /></head>';
echo $html . '<body>'.$content .'</body></html>';
}
}
}