request->get(); //2020年5月24日14:03:28 cavan if(empty($this->userInfo)){ return $this->buildFailed("获取报告列表失败,因用户信息为空,请重新登录","",ReturnCode::AUTH_ERROR); } if (!$this->isAdmin() && !$this->isAppraiser()) { //$data['user_id'] = $this->userInfo['user_ids'] ? implode(',', $this->userInfo['user_ids']) : ''; //权限 $data['user_id'] = array($this->userInfo['user_id']); } $res = $report->getReportList($this->getPage(), $data); return $this->buildSuccess($res); } /** * @api {post} admin/report/reportDetail 报告详情 * @author zdc */ public function reportDetail(ReportModel $report) { $data = $this->request->post(); if (empty($data['id'])) return $this->buildFailed('参数不能为空!'); $res = $report->getReportDetail($data); return $this->buildSuccess($res); } /** * @api {post} admin/report/addReportTemplate 新增报告模板 * @author zdc */ public function addReportTemplate() { $id = input('id'); $name = input('name', '', 'trim'); $content = input('content/a'); if (empty($name)) return $this->buildFailed('请输入报告名称!'); if (empty($content)) return $this->buildFailed('请填写报告模板!'); $detailModel = new ReportTemplateDetail(); if (empty($id)) { $check = Db::name('report_template')->where(['name' => $name, 'status' => 1])->value('id'); if (!empty($check)) return $this->buildFailed('报告模板已存在!'); Db::startTrans(); $data = ['name' => $name, 'create_uid' => $this->userInfo['user_id'], 'create_time' => time(), 'update_time' => time()]; $id = Db::name('report_template')->insertGetId($data); if ($id <= 0) { Db::rollback(); return $this->buildFailed('新增报告模板失败!'); } $detail = []; foreach ($content as $key => $value) { if (empty($value['content'])) { Db::rollback(); return $this->buildFailed('报告模板内容不能为空!'); } $list = []; $list['report_tmpl_id'] = $id; $list['content'] = $value['content']; $list['create_time'] = $list['update_time'] = time(); $detail[] = $list; } $detailModel->saveAll($detail); Db::commit(); } else { Db::startTrans(); $data = ['name' => $name, 'update_time' => time()]; if (!Db::name('report_template')->where('id', $id)->update($data)) { Db::rollback(); return $this->buildFailed('更新报告模板失败!'); } $detail = []; $ids = []; foreach ($content as $key => $value) { if (empty($value['content'])) { Db::rollback(); return $this->buildFailed('报告模板内容不能为空!'); } $list = []; $list['report_tmpl_id'] = $id; $list['content'] = $value['content']; $list['update_time'] = time(); if (!empty($value['id'])) { if (!$detailModel->where('id', $value['id'])->update($list)) { Db::rollback(); return $this->buildFailed('更新报告模板内容失败!'); } $detail_id = $value['id']; } else { $list['create_time'] = time(); $detail_id = $detailModel->insertGetId($list); if ($detail_id <= 0) { Db::rollback(); return $this->buildFailed('添加报告模板内容失败!'); } } $ids[] = $detail_id; } Db::commit(); $detailModel->where('report_tmpl_id', $id)->whereNotIn('id', $ids)->update(['status' => -1, 'update_time' => time()]); } return $this->buildSuccess(); } /** * 产生合同号 * * @param [type] $r_type * @return void */ public function generateContractNo( ) { $str_no = ""; $param = $this->request->post(); $c_type = $param['c_type']; $quot_id = $param['quot_id']; // 创建或打开文件,以读写模式 $file = fopen("gSNO.txt", "c+"); if (!$file) { $res = "文件打开失败!"; return $this->buildFailed($res); } else { // 读取文件中的gSNO值 fseek($file, 0); $gSNO = intval(fread($file, filesize("gSNO.txt"))); // 更新文件中的gSNO值 $gSNO++; fseek($file, 0); fwrite($file, strval($gSNO)); fclose($file); $year = date("Y"); $str_no = "err_no:-003"; $str_no_prefix = "深国中"; $str_no_tail = "委字[".$year."]第".$gSNO."号"; switch ($c_type) { case "1": //"评估类" $str_no = $str_no_prefix."评".$str_no_tail;break; case "2": //"咨询类" $str_no = $str_no_prefix."咨".$str_no_tail;break; case "3": //"资产类" $str_no = $str_no_prefix."资".$str_no_tail;break; default: $str_no = "err_no:-002"; } // 合同号写入inquiry表里 $inquiryModal = new Inquiry(); $inquiryModal->updateContractNo( $quot_id, $str_no); $res = $str_no; return $this->buildSuccess($str_no); } } /** * @api {post} admin/report/reportTemplateList 报告模板列表 * @author zdc */ public function reportTemplateList() { $search_text = input('search_text'); $subordinates = input('subordinates'); $where = []; $where['status'] = 1; if (!empty($subordinates) && $subordinates == 1) { $where['type'] = ['in', [1,2]]; } elseif (!empty($subordinates) && $subordinates == 2) { $where['type'] = ['=', 1]; } if (!empty($search_text)) { $ids = Db::name('report_template')->where(new Where(['name' => ['like', '%'.$search_text.'%'], 'status' => 1]))->column('id'); if (empty($ids)) { return $this->buildSuccess([]); } $where['id|trunk_id'] = ['in', $ids]; } $res = Db::name('report_template')->field('id,name,trunk,type,update_time,status')->where(new Where($where))->order('update_time', 'desc')->paginate($this->getPage()) ->each(function ($item){ $item['update_time'] = !empty($item['update_time']) ? date('Y-m-d H:i:s', $item['update_time']) : ''; $item['type_str'] = $item['type'] == 1 ? '主干' : '分支'; return $item; }) ->toArray(); return $this->buildSuccess(['data' => $res['data'], 'count' => $res['total']]); } /** * @api {post} admin/report/setTemplateStatus 设置模板状态 * @author zdc */ public function setTemplateStatus() { $id = input('id'); $status = input('status'); if (empty($id) || empty($status)) return $this->buildFailed('参数不能为空!'); if (!Db::name('report_template')->where('id', $id)->update(['status' => $status, 'update_time' => time()])) { return $this->buildFailed('更新状态失败!'); } return $this->buildSuccess(); } /** * @api {post} admin/report/getReportTemplateInfo 获取报告模板信息 * @author zdc */ public function getReportTemplateInfo() { $id = input('id'); if (empty($id)) return $this->buildFailed('参数不能为空!'); $res = Db::name('report_template')->field('id,name,report_detail_id')->where('id', $id)->find(); if (empty($res)) return $this->buildFailed('报告模板信息不存在!'); $res['report_detail_id'] = explode(',', $res['report_detail_id']); $detailModel = new ReportTemplateDetail(); $ids = implode(',', $res['report_detail_id']); if(empty($ids)){ $res['info'] = array(); return $this->buildSuccess($res); } $sql = "SELECT `module_name`,`id`,`content`,`type` FROM `pg_report_template_detail` WHERE `id` IN ($ids) ORDER BY field(id,$ids)"; $list = Db::name('report_template_detail')->query($sql); $res['info'] = $list; return $this->buildSuccess($res); } /** * @api {post} admin/report/getSimpleReportTemplateInfo 获取简易报告模板信息 * @author zdc */ public function getSimpleReportTemplateInfo() { // $detailModel = new ReportTemplateDetail(); $where['status']=1; $list = Db::name('report_template_detail_simple')->field('id,content')->whereIn('report_tmpl_id', 99)->where($where)->select(); $res['info'] = $list; return $this->buildSuccess($res); } /** * @api {post} admin/report/updateSimpleReportTemplate 新增报告模板 * @author zdc */ public function updateSimpleReportTemplate() { $id = 99; // $name = input('name', '', 'trim'); $content = input('content/a'); // if (empty($name)) return $this->buildFailed('请输入报告名称!'); if (empty($content)) return $this->buildFailed('请填写报告模板!'); $detailModel = new ReportTemplateDetailSimple(); Db::startTrans(); // $data = ['name' => $name, 'update_time' => time()]; // if (!Db::name('report_template')->where('id', $id)->update($data)) { // Db::rollback(); // return $this->buildFailed('更新报告模板失败!'); // } $detail = []; $ids = []; foreach ($content as $key => $value) { if (empty($value['content'])) { Db::rollback(); return $this->buildFailed('报告模板内容不能为空!'); } $list = []; $list['report_tmpl_id'] = $id; $list['content'] = $value['content']; $list['update_time'] = time(); if (!empty($value['id'])) { if (!$detailModel->where('id', $value['id'])->update($list)) { Db::rollback(); return $this->buildFailed('更新报告模板内容失败!'); } $detail_id = $value['id']; } else { $list['create_time'] = time(); $detail_id = $detailModel->insertGetId($list); if ($detail_id <= 0) { Db::rollback(); return $this->buildFailed('添加报告模板内容失败!'); } } $ids[] = $detail_id; } Db::commit(); $detailModel->where('report_tmpl_id', $id)->whereNotIn('id', $ids)->update(['status' => -1, 'update_time' => time()]); return $this->buildSuccess(); } //预览 public function templatePreview() { $id = input('id'); $report_detail_id = input('report_detail_id/a'); //if (empty($content)) return $this->buildFailed('参数不能为空!'); if (!empty($id)) { $res = ReportTemplate::field('id,report_info')->where('id', $id)->find(); $template = $res['report_info']; } if (!empty($report_detail_id)) { $detailModel = new ReportTemplateDetail(); $template = $detailModel->field('id,content,module_name')->whereIn('id', $report_detail_id)->select(); } $extract = date('YmdHis', time()); set_time_limit(0); ini_set('max_execution_time', '100'); $config = array( 'mode' => 'zh-cn',//zh-cn中文符号不会出现乱码 'format' => 'A4', 'default_font_size' => 14, ); //设置中文字体 $mpdf = new Mpdf($config); $mpdf->SetDisplayMode('fullpage'); $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; $mpdf->list_symbol_size = 14; ob_end_clean(); //加水印 $img_water = ROOT_PATH . 'public' . DS . 'static/background.png'; $mpdf->SetWatermarkImage($img_water, 0.1, 10);//参数一是图片的位置(图片相对目录 为处理脚本的相对目录),参数二是透明度0.1-1 $mpdf->showWatermarkImage = true; //设置自动分页符 $mpdf->SetAutoPageBreak(TRUE); $start = 0; $end = 999; foreach ($template as $k => $v) { $content = $v['content']; $data = <<AddPage('','', '','','','','','', 15);//留出页脚高度 if ($k === 0) { $img_file10 = ROOT_PATH . 'public' . DS . 'static/logo3.png';//首页右上角logo $mpdf->Image($img_file10, 60, 10, 85, 32, '', '', true, true); // $img_file = ROOT_PATH . 'public' . DS . 'static/bottom.png'; // $mpdf->Image($img_file, 30, 60); } else { $img_file10 = ROOT_PATH . 'public' . DS . 'static/logo3.png'; $header=''; $mpdf->SetHTMLHeader($header, '', true);//页眉 } if (strpos($v['module_name'], '目录') !== false) { $start = $k; $mpdf->pageNumStart = $k + 1; } if (strpos($v['module_name'], '估价对象位置') !== false) { $end = $k; } if ($k >= $end) { $footer = ''; $mpdf->SetHTMLFooter($footer); } elseif ($start != 0 && $k > $start) { $footer = '
{PAGENO}
'; $mpdf->SetHTMLFooter($footer); } $mpdf->WriteHTML($data); } $date = date('Ymd'); $Path = config('uploadFile.img_path') . DS . 'uploads' . DS . $date; if (!file_exists($Path)) { //检查是否有该文件夹,如果没有就创建,并给予最高权限 mkdir($Path, 0777, true); } //Dest:PDF输出的方式。I,默认值,在浏览器中打开;D,点击下载按钮, PDF文件会被下载下来;F,文件会被保存在服务器中;S,PDF会以字符串形式输出;E:PDF以邮件的附件输出 $filename = DS . 'uploads' . DS . $date . DS . $extract . ".pdf"; $filePath = $Path . DS . "$extract.pdf"; $mpdf->Output($Path . DS . "$extract.pdf", 'F'); $upload = ossUpload(trim(str_replace("\\", "/", $filename), '/'), $filePath); unlink($filePath); //把本地图片删除(原图) return $this->buildSuccess(['url' => config('uploadFile.url') . $filename]); } //简易报告预览 public function templatePreviewSimple() { $report_detail_id = input('report_detail_id/a'); // if (!empty($report_detail_id)) { $template = Db::name('report_template_detail_simple')->field('id,content')->whereIn('report_tmpl_id', 99)->select(); // } // dump($template);die(); $extract = date('YmdHis', time()); set_time_limit(0); ini_set('max_execution_time', '100'); $config = array( 'mode' => 'zh-cn',//zh-cn中文符号不会出现乱码 'format' => 'A4', 'default_font_size' => 14, ); $mpdf = new Mpdf($config); $mpdf->SetDisplayMode('fullpage'); $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; $mpdf->list_symbol_size = 14; ob_end_clean(); //加水印 $img_water = ROOT_PATH . 'public' . DS . 'static/background.png'; $mpdf->SetWatermarkImage($img_water, 0.1, 10);//参数一是图片的位置(图片相对目录 为处理脚本的相对目录),参数二是透明度0.1-1 $mpdf->showWatermarkImage = true; //设置自动分页符 $mpdf->SetAutoPageBreak(TRUE); $start = 0; foreach ($template as $k => $v) { $content = $v['content']; $data = <<AddPage('','', '','','','','','', 15);//留出页脚高度 if ($k === 0) { $img_file10 = ROOT_PATH . 'public' . DS . 'static/logo3.png';//首页右上角logo $mpdf->Image($img_file10, 60, 10, 85, 32, '', '', true, true); // $img_file = ROOT_PATH . 'public' . DS . 'static/bottom.png'; // $mpdf->Image($img_file, 30, 60); } else { $img_file10 = ROOT_PATH . 'public' . DS . 'static/logo3.png'; $header=''; $mpdf->SetHTMLHeader($header, '', true);//页眉 } // if (strpos($v['module_name'], '目录') !== false) { // $start = $k; // $mpdf->pageNumStart = $k + 1; // } if ($start != 0 && $k > $start) { $footer = '
{PAGENO}
'; $mpdf->SetHTMLFooter($footer); } $mpdf->WriteHTML($data); } $date = date('Ymd'); $Path = config('uploadFile.img_path') . DS . 'uploads' . DS . $date; if (!file_exists($Path)) { //检查是否有该文件夹,如果没有就创建,并给予最高权限 mkdir($Path, 0777, true); } //Dest:PDF输出的方式。I,默认值,在浏览器中打开;D,点击下载按钮, PDF文件会被下载下来;F,文件会被保存在服务器中;S,PDF会以字符串形式输出;E:PDF以邮件的附件输出 $filename = DS . 'uploads' . DS . $date . DS . $extract . ".pdf"; $filePath = $Path . DS . "$extract.pdf"; $mpdf->Output($Path . DS . "$extract.pdf", 'F'); $upload = ossUpload(trim(str_replace("\\", "/", $filename), '/'), $filePath); unlink($filePath); //把本地图片删除(原图) return $this->buildSuccess(['url' => config('uploadFile.url') . $filename]); } //预览 public function templatePreviewleo() { $report_id = input('id'); $reportInfo = Db::name('report')->where('id',$report_id)->find(); $reportDetailInfo = Db::name('report_detail')->where('report_id',$report_id)->select(); $estateNum = count($reportDetailInfo); $id = input('id'); if (empty($id)) return $this->buildFailed('参数不能为空!'); $res = Db::name('report_template')->field('id,name')->where('id', $id)->find(); $detailModel = new ReportTemplateDetail(); $list = $detailModel->field('id,content')->where(['report_tmpl_id' => $id, 'status' => 1])->order('id', 'asc')->select(); $extract = date('YmdHis', time()); set_time_limit(0); ini_set('max_execution_time', '100'); $pdf = new \TCPDF('P', 'mm', 'A4', true, 'UTF-8', false); ob_end_clean(); $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor("Author"); $pdf->SetTitle("pdf test"); $pdf->SetSubject('TCPDF Tutorial'); $pdf->SetKeywords('TCPDF, PDF, example, test, guide'); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '1', PDF_FONT_SIZE_DATA)); $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);//设置默认等宽字体 $pdf->SetMargins(PDF_MARGIN_LEFT, 24, PDF_MARGIN_RIGHT);//设置页面边幅 //$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); if (@file_exists(ROOT_PATH.'/vendor/tecnickcom/tcpdf/examples/lang/eng.php')) { require_once(ROOT_PATH.'/vendor/tecnickcom/tcpdf/examples/lang/eng.php'); } // $pdf->setLanguageArray($l); $pdf->SetFont('stsongstdlight', '', 12); foreach ($list as $k => $v) { $template = $v['content']; $pdf->AddPage(); $firstpageone = $template; $pdf->writeHTML($firstpageone, true, false, true, false, ''); } $Path=ROOT_PATH . 'public' . DS . 'uploads'; if (!file_exists($Path)) { //检查是否有该文件夹,如果没有就创建,并给予最高权限 mkdir($Path, 0700, true); } //Dest:PDF输出的方式。I,默认值,在浏览器中打开;D,点击下载按钮, PDF文件会被下载下来;F,文件会被保存在服务器中;S,PDF会以字符串形式输出;E:PDF以邮件的附件输出 $pdf->Output($Path . DS ."$extract.pdf", 'I'); exit; } //保存模板 public function subModule() { $id = input('id'); $name = input('name'); $report_detail_id = input('report_detail_id/a'); if (empty($report_detail_id)) return $this->buildFailed('请选择模块!'); if (empty($name)) return $this->buildFailed('报告模板名称不能为空!'); $ids = implode(',',$report_detail_id); //$detailInfo = Db::name('report_template_detail')->field('id,module_name,content')->whereIn('id', $ids)->order('field(id,'.$ids.')')->select(); $sql = "SELECT `module_name`,`id`,`content` FROM `pg_report_template_detail` WHERE `id` IN ($ids) ORDER BY field(id,$ids)"; $detailInfo = Db::name('report_template_detail')->query($sql); $data = array('name' => $name, 'report_detail_id' => implode(',', $report_detail_id), 'report_info' => json_encode($detailInfo), 'update_time' => time()); if (empty($id)) { // 新增主干报告 $res['create_uid'] = $this->userInfo['user_id']; $res['create_time'] = $res['update_time'] = time(); if (!Db::name('report_template')->insert($data)) { return $this->buildFailed('新增主干报告模板失败!'); } } else { $res = Db::name('report_template')->where('id', $id)->field('report_detail_id,report_info')->find(); $res['type'] = 2; $res['trunk_id'] = $id; $res['trunk'] = Db::name('report_template')->where('id', $id)->value('name'); $res['name'] = date('Y年m月d日', time()) . '前模板'; $res['create_time'] = $res['update_time'] = time(); $res['create_uid'] = $this->userInfo['user_id']; $check = Db::name('report_template')->where(new Where(['trunk_id' => $id, 'name' => $res['name']]))->value('id'); if ($check) {//更新当天分支 if (!Db::name('report_template')->where('id', $check)->update($res)) { return $this->buildFailed('更新分支报告模板失败!'); } } else {//新建分支 if (!Db::name('report_template')->insert($res)) { return $this->buildFailed('新增分支报告模板失败!'); } } if (!Db::name('report_template')->where('id', $id)->update($data)) { return $this->buildFailed('更新报告失败!'); } } return $this->buildSuccess(); } //获取模块列表 public function getModuleList() { $type = input('type'); $name = input('module_name'); if (empty($type)) return $this->buildFailed('模板类型不能为空!'); $map = []; $map[] = ['type', '=', $type]; $map[] = ['status', '=', 1]; if ($name) { $map[] = ['module_name', 'like', '%'.$name.'%']; } $res = Db::name('report_template_detail')->field('id,module_name')->where($map)->select(); return $this->buildSuccess($res); } //新增模块 public function addModule() { $id = input('id'); $name = input('name'); $type = input('type'); $sort = input('sort'); $content = input('content'); if (empty($name)) return $this->buildFailed('模块名称不能为空!'); if (empty($type)) return $this->buildFailed('请选择模块类型!'); if (empty($content)) return $this->buildFailed('模块内容不能为空!'); if (empty($sort)) return $this->buildFailed('排序不能为空!'); $data = array('module_name' => $name, 'type' => $type, 'sort' => $sort, 'content' => $content, 'update_time' => time()); if (empty($id)) { $data['create_time'] = time(); if (!Db::name('report_template_detail')->insert($data)) { return $this->buildFailed('新增模块失败!'); } } else { if (!Db::name('report_template_detail')->where('id', $id)->update($data)) { return $this->buildFailed('更新模块失败!'); } //同步模板 $this->synchronizationTemplate($id); } return $this->buildSuccess(); } //同步模板 public function synchronizationTemplate($id) { $str = 'FIND_IN_SET(' . $id . ', report_detail_id)'; $res = Db::name('report_template')->where('', 'exp', $str)->where('type', 1)->field('id,name,report_detail_id,report_info')->select(); if ($res) { foreach ($res as $key => $value) { //新增分支 $data = []; $data['type'] = 2; $data['trunk_id'] = $value['id']; $data['trunk'] = $value['name']; $data['name'] = date('Y年m月d日', time()) . '前模板'; $data['report_detail_id'] = $value['report_detail_id']; $data['report_info'] = $value['report_info']; $data['create_time'] = $data['update_time'] = time(); $data['create_uid'] = $this->userInfo['user_id']; $check = Db::name('report_template')->where(new Where(['trunk_id' => $value['id'], 'name' => $data['name']]))->value('id'); if ($check) {//更新当天分支 Db::name('report_template')->where('id', $check)->update($data); } else {//新建分支 Db::name('report_template')->insert($data); } //更新主干 $ids = $value['report_detail_id']; $sql = "SELECT `module_name`,`id`,`content` FROM `pg_report_template_detail` WHERE `id` IN ($ids) ORDER BY field(id,$ids)"; $detailInfo = Db::name('report_template_detail')->query($sql); Db::name('report_template')->where('id', $value['id'])->update(['report_info' => json_encode($detailInfo), 'update_time' => time()]); } } return true; } //获取模块信息 public function getModuleInfo() { $id = input('id'); if (empty($id)) return $this->buildFailed('参数不能为空!'); $res = Db::name('report_template_detail')->where('id', $id)->find(); return $this->buildSuccess($res); } //模块列表 public function moduleList() { $module_name = input('module_name'); $map = []; $map[] = ['status', '=', 1]; if ($module_name) { $map[] = ['module_name', 'like', '%'.$module_name.'%']; } $res = Db::name('report_template_detail')->field('id,module_name,type,sort,update_time') ->where($map) ->order('sort', 'desc') ->paginate($this->getPage()) ->each(function ($item){ $item['update_time'] = !empty($item['update_time']) ? date('Y-m-d H:i:s', $item['update_time']) : ""; $item['type_str'] = $item['type'] == 1 ? "公共" : "私有"; return $item; }) ->toArray(); return $this->buildSuccess(['data' => $res['data'], 'count' => $res['total']]); } //更新模块排序 public function updateModuleSort() { $id = input('id'); $sort = input('sort'); if (empty($id)) return $this->buildFailed('列表id不能为空!'); if (empty($sort)) return $this->buildFailed('排序不能为空!'); if (!Db::name('report_template_detail')->where('id', $id)->update(['sort' => $sort, 'update_time' => time()])) { return $this->buildFailed('更新模块失败!'); } return $this->buildSuccess(); } }