| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 |
- <?php
- require_once "include/PHPExcel.php";
- //require_once "include/vendor/phptal/phptal/classes/PHPTAL.php";
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
- use PhpOffice\PhpSpreadsheet\Style;
- use PhpOffice\PhpWord\PhpWord;
- use PhpOffice\PhpWord\IOFactory;
- use PhpOffice\PhpWord\Settings;
- use PhpOffice\PhpWord\Shared\Converter;
- use PhpOffice\PhpWord\Shared\Html;
- use PhpOffice\PhpWord\TemplateProcessor;
- use PhpOffice\PhpWord\Writer\PDF;
- use PhpOffice\PhpWord\SimpleType\Jc;
- use PhpOffice\PhpWord\SimpleType\JcTable;
- use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
- /**
- * 印章申请使用
- */
- class mode_sealaplClassAction extends inputAction{
- public function initAction()
- {
- parent::initAction(); // TODO: Change the autogenerated stub
- // $this->export_detail_listAjax();
- }
- protected function savebefore($table, $arr, $id, $addbo){
-
- }
-
-
- protected function saveafter($table, $arr, $id, $addbo){
- //更新
- $mknum = arrvalue($arr, 'mknum');
- if(!isempt($mknum)){
- $numa = explode(',', $mknum);
- $num = $numa[0];
- $mid = (int)arrvalue($numa,1);
- $flow = m('flow')->initflow($num);
- if($num=='officia'){
- $flow->update("`yzid`='$id'", "`id`='$mid'");
- }
- }
- }
-
- //获取印章
- public function getsealdata()
- {
- $where= m('admin')->getcompanywhere(1);
- $rows = m('seal')->getall('1=1 '.$where.'','`id`as value,`name`,`type`','`sort`');
- $aaar = $barr = array();
- foreach($rows as $k=>$rs){
- $rs['subname'] = $rs['type'];
- $rs['padding'] = '40';
- $aaar[] = $rs;
- }
-
- return array_merge($aaar, $barr);
- }
-
- public function getsealdatass()
- {
- $where= m('admin')->getcompanywhere(1);
- $rows = m('seal')->getall('1=1 '.$where.'','`id`as value,`name`,`type`','`sort`,`type`');
- $barr = array();
- $type = '';
- foreach($rows as $k=>$rs){
- if($type!=$rs['type'])$barr[] = array('value'=>'','name'=>$rs['type'],'disabled'=>true);
- $rs['padding'] = '40';
- $barr[] = $rs;
- $type = $rs['type'];
- }
- return $barr;
- }
- public function getSealListAjax() {
- $seal_list = m("seal")->getall("1=1", "id, name");
- array_unshift($seal_list, ["id"=>"0","name"=>"全部"]);
- $this->returnjson($seal_list);
- }
- /**
- * @throws PHPExcel_Exception
- * @throws PHPExcel_Writer_Exception
- * @throws PHPExcel_Reader_Exception
- * @throws \PhpOffice\PhpSpreadsheet\Exception
- */
- public function export_listAjax() {
- $startDate = $this->post("start_date");
- $stopDate = $this->post("stop_date");
- $status = $this->post("status");
- $export_type = $this->post("export_type");
- $whereArr = [
- "startDate"=>$startDate,
- "stopDate"=>$stopDate,
- "status"=>$status,
- "export_type"=>$export_type,
- ];
- $excelTitle = "枣泉煤矿用印登记台账";
- $sealArr = m("seal")->getall("1=1", "id, name, specialized");
- $sealDic = [];
- foreach ($sealArr as $k=>$v) {
- $sealDic[$v["id"]] = $v;
- }
- if (!empty($export_type) && $export_type != 0) {
- $excelTitle .= "({$sealDic[$export_type]['name']})";
- }
- $list = m("sealapl")->getSealaplList($whereArr);
- // 创建一个新的PHPExcel对象
- # 实例化 Spreadsheet 对象
- $spreadsheet = new Spreadsheet();
- $spreadsheet->setActiveSheetIndex(0); // 设置活动的工作表
- # 获取活动工作薄
- $sheet = $spreadsheet->getActiveSheet();
- $sheet->mergeCells("A1:P1"); // 水平合并A1单元格
- $sheet->setCellValue('A1', $excelTitle); // 设置表头
- // 设置样式
- // 设置表头和第二行的样式(获取样式及设置方式类似,但类名不同)
- $bodersStyle = [
- 'borders' => [
- 'allBorders' => [
- 'borderStyle' => Style\Border::BORDER_THIN,
- ],
- ]
- ];
- $styleArray = [
- 'borders' => $bodersStyle['borders'],
- 'alignment' => [
- 'horizontal' => Style\Alignment::HORIZONTAL_CENTER,
- 'vertical' => Style\Alignment::VERTICAL_CENTER,
- 'wrapText' => true,
- ]
- ];
- $sheet->getStyle('A1:P2')->applyFromArray($styleArray);
- $spreadsheet->getActiveSheet()->getRowDimension('1')->setRowHeight(95);
- $sheet->getStyle('A1')->getFont()->setBold(false)->setSize(24);
- $sheet->getStyle('A2:P2')->getFont()->setBold(true)->setSize(14);
- // 设置为字符串格式
- $sheet->getStyle('J')->getNumberFormat()->setFormatCode(Style\NumberFormat::FORMAT_TEXT);
- // 列宽
- $sheet->getColumnDimension('A')->setWidth(13);
- $sheet->getColumnDimension('B')->setWidth(7);
- $sheet->getColumnDimension('C')->setWidth(47);
- $sheet->getColumnDimension('D')->setWidth(18);
- $sheet->getColumnDimension('E')->setWidth(10);
- $sheet->getColumnDimension('F')->setWidth(12);
- $sheet->getColumnDimension('G')->setWidth(8);
- $sheet->getColumnDimension('H')->setWidth(11);
- $sheet->getColumnDimension('I')->setWidth(12);
- $sheet->getColumnDimension('J')->setWidth(11); // 手机号
- $sheet->getColumnDimension('K')->setWidth(13);
- $sheet->getColumnDimension('L')->setWidth(12);
- $sheet->getColumnDimension('M')->setWidth(12);
- $sheet->getColumnDimension('N')->setWidth(12);
- $sheet->getColumnDimension('O')->setWidth(12);
- $sheet->getColumnDimension('P')->setWidth(12);
- // 表头
- $titleArr = ["时间","年度\n编号","用印事由摘要、\n用印材料明细(全称)","相对方名称","金额、\n工作量","合同号","用印\n数量","申请\n单位\n负责人","经办人","手机号","矿最终审\n批领导","法律事\n务审核\n人","业务\n部门\n审核人","办公室\n审核人","印章\n专管人","备注"];
- // 设置列,循环设置表头单元格的值
- $column = 'A';
- foreach ($titleArr as $title) {
- $sheet->setCellValue($column.'2', $title);
- $column++;
- }
- $rowArr = [];
- foreach ($list as $key=>$row) {
- $num = $row['id'];
- $date = $row['applydt'];
- $year = date("Y", strtotime($date));
- $month = date("m", strtotime($date));
- $this_month = date("Y-m", strtotime($date));
- $last_month = date("Y-m", strtotime("-1 month", strtotime($date)));
- $office_date = date("Y-m-d", strtotime($row['office_date']));
- $year_num = $row['year_num'];
- $reason = $row['reason'];
- $opp_name = $row['opp_name'];
- $amount = $row['amount'];
- $contract_num = $row['contract_num'];
- $use_con = $row['use_con'];
- $applicant = $row['applicant'];
- $apply_pnum = $row['apply_pnum'];
- $advice_level4_leader = $row['advice_level4_leader'];
- $advice_level3_leader = $row['advice_level3_leader'];
- $advice_level2_leader = $row['advice_level2_leader'];
- $advice_level1_leader = $row['advice_level1_leader'];
- $notes = $row['notes'];
- $seal_name = $row['seal_name'];
- $bgr = $sealDic[$seal_name]['specialized'];
- $rowArr[] = [
- $office_date, // 时间
- $year_num, // 年度编号
- $reason, // 用印事由摘要、用印材料明细(全称)
- $opp_name, // 相对方名称
- $amount, // 金额、工作量
- $contract_num, // 合同号
- $use_con, // 用印数量
- $advice_level1_leader, // 申请单位负责人
- $applicant, // 经办人
- $apply_pnum, // 手机号
- null, // 矿最终审批领导
- $advice_level4_leader, // 法律事务审核人
- $advice_level1_leader, // 业务部门审核人
- $advice_level2_leader, // 办公室审核人
- $bgr, // 印章保管业务核实人
- $notes // 备注
- ];
- }
- $rowNum = 3;
- foreach ($rowArr as $row) {
- $column = 'A';
- foreach ($row as $key => $value) {
- $sheet->setCellValue($column.$rowNum, $value);
- $column++;
- }
- $rowNum++;
- }
- // 其他表格式设置
- $rowCode = 'A3:P'.(count($rowArr)+2);
- $sheet->getStyle($rowCode)->applyFromArray($styleArray);
- $spreadsheet->getActiveSheet()->getStyle($rowCode)->getFont()->setSize(14);
- // 定义保存的文件名和路径
- $mkdir = UPDIR.'/logs/'.date('Y-m');
- // 已可用中文
- // if(!contain(strtolower(PHP_OS),'win')){
- // $excelTitle = c('pingyin')->get("枣泉煤矿用印登记台账", 1);//linux要用拼音,不然会乱码
- // }
- $filename = ''.$excelTitle.'_'.date('Y_m_d_H_i_s').'.xlsx';
- $filename = str_replace('/','',$filename);
- $savePath = $mkdir.'/'.$filename;
- if (!is_dir($mkdir)) {
- if (!mkdir($mkdir, 0777, true)) { // recursive=true 自动创建多级目录
- die("错误:无法创建目录 " . $mkdir);
- }
- }
- $writer = new Xlsx($spreadsheet);
- try {
- $writer->save($savePath);
- } catch (WriterException $e) {
- die("保存失败: " . $e->getMessage());
- }
- $this->returnjson(array(
- 'url' => $savePath,
- 'totalCount'=> count($list),
- 'downCount' => count($list),
- ));
- }
- public function export_detail_listAjax() {
- // 获取 POST 数据
- $startDate = $this->post("start_date");
- $stopDate = $this->post("stop_date");
- $status = $this->post("status");
- $export_type = $this->post("export_type");
- $whereArr = [
- "startDate"=>$startDate,
- "stopDate"=>$stopDate,
- "status"=>$status,
- "export_type"=>$export_type,
- ];
- $list = m("sealapl")->getSealaplList($whereArr);
- $sealArr = m("seal")->getall("1=1", "id, name, specialized");
- $sealDic = [];
- foreach ($sealArr as $k => $v) {
- $sealDic[$v["id"]] = $v;
- }
- // 检查模板文件是否存在
- $templatePath = 'upload/template/word/template_sealapl_2.docx';
- if (!file_exists($templatePath)) {
- $this->returnjson(array(
- 'error' => 'Template file not found',
- 'totalCount' => 0,
- 'downCount' => 0
- ));
- return;
- }
- // 创建一个新的 PhpWord 对象
- $phpWord = new PhpWord();
- $section = $phpWord->addSection();
- foreach ($list as $row) {
- try {
- $templateWord = new TemplateProcessor($templatePath);
- $num = $row['year_num'];
- $applydt = $row['applydt'];
- $year = date("Y", strtotime($applydt));
- $month = date("m", strtotime($applydt));
- $this_month = date("Y-m", strtotime($applydt));
- $last_month = date("Y-m", strtotime("-1 month", strtotime($applydt)));
- $office_date = date("Y-m-d", strtotime($row['office_date']));
- $year_num = $row['year_num'];
- $reason = $row['reason'];
- $opp_name = $row['opp_name'];
- $amount = $row['amount'];
- $contract_num = $row['contract_num'];
- $use_con = $row['use_con'];
- $applicant = $row['applicant'];
- $apply_pnum = $row['apply_pnum'];
- $advice_level4 = $row['advice_level4'];
- $advice_level4_leader = $row['advice_level4_leader'];
- $advice_level3_leader = $row['advice_level3_leader'];
- $advice_level2 = $row['advice_level2_leader'];
- $advice_level2_leader = $row['advice_level2_leader'];
- $advice_level1 = $row['advice_level1'];
- $advice_level1_leader = $row['advice_level1_leader'];
- $notes = $row['notes'];
- $seal_name = $row['seal_name'];
- // $bgr = $sealDic[$seal_name]['specialized'];
- $apply_dept = $row['apply_dept'];
- $templateWord->setValues([
- "this_month" => $this_month,
- "num" => $num,
- "apply_dept" => $apply_dept,
- "sealname" => $sealDic[$seal_name]['name'],
- "applydt" => $applydt,
- "opp_name" => $opp_name,
- "contract_num" => $contract_num,
- "amount" => $amount,
- "reason" => $reason,
- "advice_level4" => $advice_level4,
- "advice_level4_leader" => $advice_level4_leader,
- "advice_level1" => $advice_level1,
- "advice_level1_leader" => $advice_level1_leader,
- "advice_level2" => $advice_level2,
- "advice_level2_leader" => $advice_level2_leader,
- "applicant" => $applicant,
- "apply_pnum" => $apply_pnum,
- ]);
- // 将模板处理后的内容保存到临时文件
- $tempWord = tempnam(sys_get_temp_dir(), 'merged_'). '.docx';
- $templateWord->saveAs($tempWord);
- // 删除临时文件
- unlink($tempWord);
- } catch (\Exception $e) {
- // 如果出现异常,删除临时文件
- if (isset($tempWord) && file_exists($tempWord)) {
- unlink($tempWord);
- }
- if (isset($tempPdf) && file_exists($tempPdf)) {
- unlink($tempPdf);
- }
- $this->returnjson(array(
- 'error' => 'An error occurred: '. $e->getMessage(),
- 'totalCount' => 0,
- 'downCount' => 0
- ));
- return;
- }
- }
- // 定义保存的文件名和路径
- $mkdir = UPDIR.'/logs/'.date('Y-m');
- $excelTitle = "枣泉煤矿用印登记台账";
- if(!contain(strtolower(PHP_OS),'win')){
- $excelTitle = c('pingyin')->get($excelTitle, 1);//linux要用拼音,不然会乱码
- }
- $filename = ''.$excelTitle.'_'.date('Y_m_d_H_i_s').'.docx';
- $filename = str_replace('/','',$filename);
- $savePath = $mkdir.'/'.$filename;
- // 保存为 Word 文件
- $wordWriter = IOFactory::createWriter($phpWord, 'Word2007');
- $wordWriter->save($savePath);
- $this->returnjson(array(
- 'url' => $savePath,
- 'totalCount' => count($list),
- 'downCount' => count($list),
- ));
- }
- //获取相关信息放到说明里
- public function getbinfoAjax()
- {
- $mknum = $this->get('mknum');
- $barr = array();
- if(!isempt($mknum)){
- $numa = explode(',', $mknum);
- $num = $numa[0];
- $mid = (int)arrvalue($numa,1);
- $flow = m('flow')->initflow($num, $mid, false);
- $barr['zhaiyao'] = $flow->getsummary();
-
- }
- return $barr;
- }
- public function sealaplaftershow($table,$rows)
- {
- $barr['rows'] = $rows;
- $barr['atypearr'] = $this->atypearr;
- if($this->loadci==1){
- $vobj = m('view');
- $barr['isadd'] = $vobj->isadd($this->modeid, $this->adminid); //判断是否可添加
- $barr['isdaoru'] = $vobj->isdaoru($this->modeid, $this->adminid); //判断是否可导入
- $barr['isdaochu'] = $vobj->isdaochu($this->modeid, $this->adminid); //判断是否可导入
- // $barr['listinfo'] = m('mode')->createlistpage($this->flow->moders,0,1,$this);
- }
- $barr['souarr'] = $this->flow->flowsearchfields();
- $rows = $this->flow->viewjinfields($rows);//禁看字段处理
- $farrl = array();
- foreach($this->flow->fieldsarra as $k2=>$rs2){
- if($rs2['fieldstype']=='uploadimg')$farrl[$rs2['fields']]=$rs2['fieldstype'];
- }
- if($rows)foreach($rows as $k1=>$rs1){
- foreach($farrl as $fid=>$flx){
- if(isset($rs1[$fid])){
- $val = $rs1[$fid];
- if($flx=='uploadimg'){
- $val = $this->rock->gethttppath($val);
- $rows[$k1][$fid] = $val;
- //if($this->flow->modeid>92)$val='<img src="'.$val.'" height="60">';
- }
- }
- }
- }
- $barr['modeid'] = $this->modeid;
- $barr['loadci'] = $this->loadci;
- // $barr['rows'] = $rows;
- $scarr = $this->storeafter($table, $rows, $barr);
- if(is_array($scarr))foreach($scarr as $k=>$v)$barr[$k]=$v;
- return $barr;
- }
- }
-
|