mode_sealaplAction.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <?php
  2. require_once "include/PHPExcel.php";
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  5. use PhpOffice\PhpSpreadsheet\Style;
  6. /**
  7. * 印章申请使用
  8. */
  9. class mode_sealaplClassAction extends inputAction{
  10. protected function savebefore($table, $arr, $id, $addbo){
  11. }
  12. protected function saveafter($table, $arr, $id, $addbo){
  13. //更新
  14. $mknum = arrvalue($arr, 'mknum');
  15. if(!isempt($mknum)){
  16. $numa = explode(',', $mknum);
  17. $num = $numa[0];
  18. $mid = (int)arrvalue($numa,1);
  19. $flow = m('flow')->initflow($num);
  20. if($num=='officia'){
  21. $flow->update("`yzid`='$id'", "`id`='$mid'");
  22. }
  23. }
  24. }
  25. //获取印章
  26. public function getsealdata()
  27. {
  28. $where= m('admin')->getcompanywhere(1);
  29. $rows = m('seal')->getall('1=1 '.$where.'','`id`as value,`name`,`type`','`sort`');
  30. $aaar = $barr = array();
  31. foreach($rows as $k=>$rs){
  32. $rs['subname'] = $rs['type'];
  33. $rs['padding'] = '40';
  34. $aaar[] = $rs;
  35. }
  36. return array_merge($aaar, $barr);
  37. }
  38. public function getsealdatass()
  39. {
  40. $where= m('admin')->getcompanywhere(1);
  41. $rows = m('seal')->getall('1=1 '.$where.'','`id`as value,`name`,`type`','`sort`,`type`');
  42. $barr = array();
  43. $type = '';
  44. foreach($rows as $k=>$rs){
  45. if($type!=$rs['type'])$barr[] = array('value'=>'','name'=>$rs['type'],'disabled'=>true);
  46. $rs['padding'] = '40';
  47. $barr[] = $rs;
  48. $type = $rs['type'];
  49. }
  50. return $barr;
  51. }
  52. public function getSealListAjax() {
  53. $seal_list = m("seal")->getall("1=1", "id, name");
  54. array_unshift($seal_list, ["id"=>"0","name"=>"全部"]);
  55. $this->returnjson($seal_list);
  56. }
  57. /**
  58. * @throws PHPExcel_Exception
  59. * @throws PHPExcel_Writer_Exception
  60. * @throws PHPExcel_Reader_Exception
  61. * @throws \PhpOffice\PhpSpreadsheet\Exception
  62. */
  63. public function export_listAjax() {
  64. $startDate = $this->post("start_date");
  65. $stopDate = $this->post("stop_date");
  66. $status = $this->post("status");
  67. $export_type = $this->post("export_type");
  68. $excelTitle = "枣泉煤矿用印登记台账";
  69. $sealArr = m("seal")->getall("1=1", "id, name, specialized");
  70. $sealDic = [];
  71. foreach ($sealArr as $k=>$v) {
  72. $sealDic[$v["id"]] = $v;
  73. }
  74. $where = "1=1";
  75. if (!empty($startDate) && !empty($stopDate)) {
  76. $where .= " and `applydt` >= '{$startDate}' and `applydt` <= '{$stopDate}'";
  77. }
  78. if ($status == 1) {
  79. $where .= " and `status` = 1";
  80. }
  81. if (!empty($export_type) && $export_type != 0) {
  82. $where .= " and `seal_name` = $export_type";
  83. $excelTitle .= "({$sealDic[$export_type]['name']})";
  84. }
  85. $list = m("sealapl")
  86. ->getall($where, "id, seal_name, applydt, substr(applydt, 1, 4) as year, year_num, office_date, reason, opp_name, amount, contract_num, use_con, applicant, apply_pnum, advice_level4_leader, advice_level3_leader, advice_level2_leader, advice_level1_leader, notes, office_date", "substr(applydt, 1, 4) desc, id asc");
  87. // 创建一个新的PHPExcel对象
  88. # 实例化 Spreadsheet 对象
  89. $spreadsheet = new Spreadsheet();
  90. $spreadsheet->setActiveSheetIndex(0); // 设置活动的工作表
  91. # 获取活动工作薄
  92. $sheet = $spreadsheet->getActiveSheet();
  93. $sheet->mergeCells("A1:P1"); // 水平合并A1单元格
  94. $sheet->setCellValue('A1', $excelTitle); // 设置表头
  95. // 设置样式
  96. // 设置表头和第二行的样式(获取样式及设置方式类似,但类名不同)
  97. $bodersStyle = [
  98. 'borders' => [
  99. 'allBorders' => [
  100. 'borderStyle' => Style\Border::BORDER_THIN,
  101. ],
  102. ]
  103. ];
  104. $styleArray = [
  105. 'borders' => $bodersStyle['borders'],
  106. 'alignment' => [
  107. 'horizontal' => Style\Alignment::HORIZONTAL_CENTER,
  108. 'vertical' => Style\Alignment::VERTICAL_CENTER,
  109. 'wrapText' => true,
  110. ]
  111. ];
  112. $sheet->getStyle('A1:P2')->applyFromArray($styleArray);
  113. $spreadsheet->getActiveSheet()->getRowDimension('1')->setRowHeight(95);
  114. $sheet->getStyle('A1')->getFont()->setBold(false)->setSize(24);
  115. $sheet->getStyle('A2:P2')->getFont()->setBold(true)->setSize(14);
  116. // 设置为字符串格式
  117. $sheet->getStyle('J')->getNumberFormat()->setFormatCode(Style\NumberFormat::FORMAT_TEXT);
  118. // 列宽
  119. $sheet->getColumnDimension('A')->setWidth(13);
  120. $sheet->getColumnDimension('B')->setWidth(7);
  121. $sheet->getColumnDimension('C')->setWidth(47);
  122. $sheet->getColumnDimension('D')->setWidth(18);
  123. $sheet->getColumnDimension('E')->setWidth(10);
  124. $sheet->getColumnDimension('F')->setWidth(12);
  125. $sheet->getColumnDimension('G')->setWidth(8);
  126. $sheet->getColumnDimension('H')->setWidth(11);
  127. $sheet->getColumnDimension('I')->setWidth(12);
  128. $sheet->getColumnDimension('J')->setWidth(11); // 手机号
  129. $sheet->getColumnDimension('K')->setWidth(13);
  130. $sheet->getColumnDimension('L')->setWidth(12);
  131. $sheet->getColumnDimension('M')->setWidth(12);
  132. $sheet->getColumnDimension('N')->setWidth(12);
  133. $sheet->getColumnDimension('O')->setWidth(12);
  134. $sheet->getColumnDimension('P')->setWidth(12);
  135. // 表头
  136. $titleArr = ["时间","年度\n编号","用印事由摘要、\n用印材料明细(全称)","相对方名称","金额、\n工作量","合同号","用印\n数量","申请\n单位\n负责人","经办人","手机号","矿最终审\n批领导","法律事\n务审核\n人","业务\n部门\n审核人","办公室\n审核人","印章\n专管人","备注"];
  137. // 设置列,循环设置表头单元格的值
  138. $column = 'A';
  139. foreach ($titleArr as $title) {
  140. $sheet->setCellValue($column.'2', $title);
  141. $column++;
  142. }
  143. $rowArr = [];
  144. foreach ($list as $key=>$row) {
  145. $num = $row['id'];
  146. $date = $row['applydt'];
  147. $year = date("Y", strtotime($date));
  148. $month = date("m", strtotime($date));
  149. $this_month = date("Y-m", strtotime($date));
  150. $last_month = date("Y-m", strtotime("-1 month", strtotime($date)));
  151. $office_date = date("Y-m-d", strtotime($row['office_date']));
  152. $year_num = $row['year_num'];
  153. $reason = $row['reason'];
  154. $opp_name = $row['opp_name'];
  155. $amount = $row['amount'];
  156. $contract_num = $row['contract_num'];
  157. $use_con = $row['use_con'];
  158. $applicant = $row['applicant'];
  159. $apply_pnum = $row['apply_pnum'];
  160. $advice_level4_leader = $row['advice_level4_leader'];
  161. $advice_level3_leader = $row['advice_level3_leader'];
  162. $advice_level2_leader = $row['advice_level2_leader'];
  163. $advice_level1_leader = $row['advice_level1_leader'];
  164. $notes = $row['notes'];
  165. $seal_name = $row['seal_name'];
  166. $bgr = $sealDic[$seal_name]['specialized'];
  167. $rowArr[] = [
  168. $office_date, // 时间
  169. $year_num, // 年度编号
  170. $reason, // 用印事由摘要、用印材料明细(全称)
  171. $opp_name, // 相对方名称
  172. $amount, // 金额、工作量
  173. $contract_num, // 合同号
  174. $use_con, // 用印数量
  175. $advice_level1_leader, // 申请单位负责人
  176. $applicant, // 经办人
  177. $apply_pnum, // 手机号
  178. null, // 矿最终审批领导
  179. $advice_level4_leader, // 法律事务审核人
  180. $advice_level1_leader, // 业务部门审核人
  181. $advice_level2_leader, // 办公室审核人
  182. $bgr, // 印章保管业务核实人
  183. $notes // 备注
  184. ];
  185. }
  186. $rowNum = 3;
  187. foreach ($rowArr as $row) {
  188. $column = 'A';
  189. foreach ($row as $key => $value) {
  190. $sheet->setCellValue($column.$rowNum, $value);
  191. $column++;
  192. }
  193. $rowNum++;
  194. }
  195. // 其他表格式设置
  196. $rowCode = 'A3:P'.(count($rowArr)+2);
  197. $sheet->getStyle($rowCode)->applyFromArray($styleArray);
  198. $spreadsheet->getActiveSheet()->getStyle($rowCode)->getFont()->setSize(14);
  199. // 定义保存的文件名和路径
  200. $mkdir = UPDIR.'/logs/'.date('Y-m');
  201. if(!contain(strtolower(PHP_OS),'win')){
  202. $excelTitle = c('pingyin')->get("用印列表", 1);//linux要用拼音,不然会乱码
  203. }
  204. $filename = ''.$excelTitle.'_'.date('Y_m_d_H_i_s').'.xlsx';
  205. $filename = str_replace('/','',$filename);
  206. $savePath = $mkdir.'/'.$filename;
  207. $writer = new Xlsx($spreadsheet);
  208. $writer->save($savePath);
  209. $this->returnjson(array(
  210. 'url' => $savePath,
  211. 'totalCount'=> count($list),
  212. 'downCount' => count($list),
  213. ));
  214. }
  215. //获取相关信息放到说明里
  216. public function getbinfoAjax()
  217. {
  218. $mknum = $this->get('mknum');
  219. $barr = array();
  220. if(!isempt($mknum)){
  221. $numa = explode(',', $mknum);
  222. $num = $numa[0];
  223. $mid = (int)arrvalue($numa,1);
  224. $flow = m('flow')->initflow($num, $mid, false);
  225. $barr['zhaiyao'] = $flow->getsummary();
  226. }
  227. return $barr;
  228. }
  229. public function sealaplaftershow($table,$rows)
  230. {
  231. $barr['rows'] = $rows;
  232. $barr['atypearr'] = $this->atypearr;
  233. if($this->loadci==1){
  234. $vobj = m('view');
  235. $barr['isadd'] = $vobj->isadd($this->modeid, $this->adminid); //判断是否可添加
  236. $barr['isdaoru'] = $vobj->isdaoru($this->modeid, $this->adminid); //判断是否可导入
  237. $barr['isdaochu'] = $vobj->isdaochu($this->modeid, $this->adminid); //判断是否可导入
  238. // $barr['listinfo'] = m('mode')->createlistpage($this->flow->moders,0,1,$this);
  239. }
  240. $barr['souarr'] = $this->flow->flowsearchfields();
  241. $rows = $this->flow->viewjinfields($rows);//禁看字段处理
  242. $farrl = array();
  243. foreach($this->flow->fieldsarra as $k2=>$rs2){
  244. if($rs2['fieldstype']=='uploadimg')$farrl[$rs2['fields']]=$rs2['fieldstype'];
  245. }
  246. if($rows)foreach($rows as $k1=>$rs1){
  247. foreach($farrl as $fid=>$flx){
  248. if(isset($rs1[$fid])){
  249. $val = $rs1[$fid];
  250. if($flx=='uploadimg'){
  251. $val = $this->rock->gethttppath($val);
  252. $rows[$k1][$fid] = $val;
  253. //if($this->flow->modeid>92)$val='<img src="'.$val.'" height="60">';
  254. }
  255. }
  256. }
  257. }
  258. $barr['modeid'] = $this->modeid;
  259. $barr['loadci'] = $this->loadci;
  260. // $barr['rows'] = $rows;
  261. $scarr = $this->storeafter($table, $rows, $barr);
  262. if(is_array($scarr))foreach($scarr as $k=>$v)$barr[$k]=$v;
  263. return $barr;
  264. }
  265. // public function sealaplaftershow($table) {
  266. //
  267. // return array(
  268. // 'rows' => [
  269. //
  270. // ],
  271. // 'where' =>'1=1',
  272. // 'order'=>'id desc',
  273. // 'table'=> $table
  274. // );
  275. // }
  276. //
  277. //
  278. // public function sealaplbeforeshow($table) {
  279. //
  280. // return array(
  281. // 'where' =>'1=1',
  282. // 'order'=>'id desc',
  283. // 'table'=> $table
  284. // );
  285. // }
  286. }