Index.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. <?php
  2. /**
  3. * @author huwhois<huwhois@163.com>
  4. */
  5. namespace app\admin\controller;
  6. use daswork\Controller;
  7. use app\admin\model\SignBak;
  8. use app\admin\model\Attenders;
  9. class Index extends Base
  10. {
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. $this->model = new Attenders();
  15. }
  16. public function index()
  17. {
  18. $key = isset($_GET['key']) ? escapeString($_GET['key']) : '';
  19. $where = '';
  20. if ($key) {
  21. $where = "WHERE truename LIKE '$key%' OR phone LIKE '$key%' or organization LIKE '$key%'";
  22. $this->assign('key', $key);
  23. }
  24. $page = isset($_GET['page']) ? escapeString($_GET['page']) : 1;
  25. $data = $this->model->pageList($where, $page, 15);
  26. $this->assign('data', $data);
  27. $this->fetch();
  28. }
  29. public function info()
  30. {
  31. $id = $_GET['id'];
  32. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  33. if (!$id) {
  34. echo json_encode(['code' => 1, 'msg'=>'id不能为空']);
  35. }
  36. $data = $this->model->getOneById($id);
  37. echo json_encode(['code'=>0, 'data'=>$data]);
  38. } else {
  39. if (!$id) {
  40. echo "<script>alert('id 不能为空');history.back();</script>";
  41. }
  42. $data = $this->model->getOneById($id);
  43. $this->assign('data', $this->replaceDate($data));
  44. $this->fetch();
  45. }
  46. }
  47. // 替换报名表数据输出字符
  48. public function replaceDate($arr = []) {
  49. // 替换性别
  50. if (isset($arr['sex'])) {
  51. $arr['sex'] = ($arr['sex'] == 2) ? "女" : "男";
  52. }
  53. // 替换开票信息
  54. if (isset($arr['tax_type'])) {
  55. $arr['tax_type'] = ($arr['tax_type'] == 2) ? "专票" : "普票";
  56. }
  57. // 替换会议注册类型(注册费)
  58. if (isset($arr['fee_type'])) {
  59. $arr['fee_type'] = ($arr['fee_type'] == 2) ? "学生(1200/人)" : "普通(2000/人)";
  60. }
  61. //是否做报告
  62. if (isset($arr['is_report'])) {
  63. $arr['is_report'] = ($arr['is_report'] == 1) ? "是" : "否";
  64. }
  65. // 酒店
  66. if (isset($arr['room_type'])) {
  67. $arr['room_type'] = ($arr['room_type'] == 1) ? "标准间" : "商务房";
  68. }
  69. if (isset($arr['is_share'])) {
  70. $arr['is_share'] = ($arr['is_share'] == 1) ? "是" : "否";
  71. }
  72. // 支付形式
  73. if (isset($arr['pay_type'])) {
  74. $arr['pay_type'] = ($arr['pay_type'] == 1) ? "汇款" : "现场缴费";
  75. }
  76. // 报名时间
  77. if (isset($arr['create_time'])) {
  78. date_default_timezone_set("PRC");
  79. $arr['create_time'] = date("Y-m-d H:i:s", $arr['create_time']);
  80. }
  81. return $arr;
  82. }
  83. public function test()
  84. {
  85. $res = $this->model->getByTruenameAndPhone('测试', '13366667777');
  86. var_dump($res);
  87. exit;
  88. }
  89. public function save()
  90. {
  91. $params = escapeString($_POST);
  92. // echo json_encode($params);
  93. // exit;
  94. if (empty($params['truename']) || empty($params['phone'])) {
  95. die(json_encode(['code'=>1, 'msg'=>'姓名 or 电话不能为空']));
  96. }
  97. $res = $this->model->getByTruenameAndPhone($params['truename'], $params['phone']);
  98. if ($res) {
  99. die(json_encode(['code'=>1, 'msg'=>'已经报名成功,请勿重复提交']));
  100. }
  101. // var_dump($res);
  102. // exit;
  103. $data = [
  104. "meeting_id" => 3,
  105. 'truename' => $params['truename'],
  106. 'organization' => $params['organization'],
  107. 'position' => $params['position'],
  108. 'sex' => $params['sex'],
  109. 'phone' => $params['phone'],
  110. 'email' => $params['email'],
  111. 'fee_type' => intval($params['feeType']),
  112. 'is_report' => intval($params['isReport']),
  113. 'report_title' => $params['reportTitle'],
  114. 'hotel_type' => 1,
  115. 'room_type' => intval($params['roomType']),
  116. 'is_share' => intval($params['isShare']),
  117. 'pay_type' => intval($params['payType']),
  118. 'is_pay' => intval($params['isPay']),
  119. 'money' =>floatval($params['money']),
  120. 'tax_type' => intval($params['taxType']),
  121. 'tax_title' => $params['taxTitle'],
  122. 'tax_number' => $params['taxNumber'],
  123. 'bank_account' => $params['bankAccount'],
  124. 'company_address' => $params['companyAddress'],
  125. 'company_phone' => $params['companyPhone'],
  126. 'mailing_address' => $params['mailingAddress'],
  127. 'postcode' => $params['postcode'],
  128. 'remark' => $params['remark'],
  129. 'member_type'=> 10,
  130. 'status' => 0,
  131. 'token' => md5($params['truename'] . $params['phone']),
  132. 'create_time' => time()
  133. ];
  134. $id = $params['id'];
  135. if ($id) {
  136. $data['id'] = $id;
  137. $res = $this->model->updateById($data);
  138. } else {
  139. $res = $this->model->save($data);
  140. }
  141. if (!$res) {
  142. echo json_encode(['code' => 2, 'msg'=>$this->model->lastErrorMsg()]);
  143. } else {
  144. echo json_encode(['code' => 0]);
  145. }
  146. }
  147. public function delete()
  148. {
  149. $id = escapeString($_POST['id']);
  150. if (!$id) {
  151. echo json_encode(['code' => 1, 'msg'=>'id不能为空']);
  152. }
  153. $res = $this->model->deleteById($id);
  154. if (!$res) {
  155. echo json_encode(['code' => 2, 'msg'=>$this->model->lastErrorMsg()]);
  156. } else {
  157. echo json_encode(['code' => 0]);
  158. }
  159. }
  160. public function export()
  161. {
  162. require_once (VENDOR . DS .'phpoffice/PHPExcel.php');
  163. // Create new PHPExcel object
  164. $objPHPExcel = new \PHPExcel();
  165. // Set document properties
  166. $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
  167. ->setLastModifiedBy("Maarten Balliauw")
  168. ->setTitle("Office 2007 XLSX Test Document")
  169. ->setSubject("Office 2007 XLSX Test Document")
  170. ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
  171. ->setKeywords("office 2007 openxml php")
  172. ->setCategory("Test result file");
  173. // 设置D,E,F,G,I列宽
  174. $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
  175. $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(13);
  176. $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  177. $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(13);
  178. $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(18);
  179. // 设置E,G,J,L,M,O,R列为文本格式
  180. $objPHPExcel->getActiveSheet()->getStyle('E')->getNumberFormat()
  181. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  182. $objPHPExcel->getActiveSheet()->getStyle('G')->getNumberFormat()
  183. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  184. $objPHPExcel->getActiveSheet()->getStyle('J')->getNumberFormat()
  185. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  186. $objPHPExcel->getActiveSheet()->getStyle('L')->getNumberFormat()
  187. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  188. $objPHPExcel->getActiveSheet()->getStyle('M')->getNumberFormat()
  189. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  190. $objPHPExcel->getActiveSheet()->getStyle('O')->getNumberFormat()
  191. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  192. $objPHPExcel->getActiveSheet()->getStyle('R')->getNumberFormat()
  193. ->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  194. // 添加表头
  195. $objPHPExcel->setActiveSheetIndex(0)
  196. ->setCellValue('A1', 'ID')
  197. ->setCellValue('B1', '姓名')
  198. ->setCellValue('C1', '所属机构')
  199. ->setCellValue('D1', '职位')
  200. ->setCellValue('E1', '性别')
  201. ->setCellValue('F1', '电话')
  202. ->setCellValue('G1', '邮箱')
  203. ->setCellValue('H1', '注册费(类型)')
  204. ->setCellValue('I1', '是否做报告')
  205. ->setCellValue('J1', '报告题目')
  206. ->setCellValue('K1', '酒店')
  207. ->setCellValue('L1', '房型')
  208. ->setCellValue('M1', '是否接受合住')
  209. ->setCellValue('N1', '付款方式')
  210. ->setCellValue('O1', '是否付款')
  211. ->setCellValue('P1', '金额')
  212. ->setCellValue('Q1', '开票类型')
  213. ->setCellValue('R1', '发票抬头')
  214. ->setCellValue('S1', '纳税人识别号')
  215. ->setCellValue('T1', '开户行及账号')
  216. ->setCellValue('U1', '单位电话')
  217. ->setCellValue('V1', '单位地址')
  218. ->setCellValue('W1', '邮寄地址')
  219. ->setCellValue('X1', '邮编')
  220. ->setCellValue('Y1', '备注')
  221. ->setCellValue('Z1', '报名时间');
  222. $data = $this->model->dataList();
  223. if ($data) {
  224. $count = 1;
  225. foreach ($data as $value) {
  226. $count += 1;
  227. //替换性别等字符
  228. $value = $this->replaceDate($value);
  229. // 字符型数字前加空格" ", 以字符型插入excel
  230. $objPHPExcel->setActiveSheetIndex(0)
  231. ->setCellValue('A'.$count, $value['id'])
  232. ->setCellValue('B'.$count, $value['truename'])
  233. ->setCellValue('C'.$count, $value['organization'])
  234. ->setCellValue('D'.$count, $value['position'])
  235. ->setCellValue('E'.$count, $value['sex'])
  236. ->setCellValue('F'.$count, $value['phone'])
  237. ->setCellValue('G'.$count, $value['email'])
  238. ->setCellValue('H'.$count, $value['fee_type'])
  239. ->setCellValue('I'.$count, $value['is_report'])
  240. ->setCellValue('J'.$count, $value['report_title'])
  241. ->setCellValue('K'.$count, $value['hotel_type'])
  242. ->setCellValue('L'.$count, $value['room_type'])
  243. ->setCellValue('M'.$count, $value['is_share'])
  244. ->setCellValue('N'.$count, $value['pay_type'])
  245. ->setCellValue('O'.$count, $value['is_pay'])
  246. ->setCellValue('P'.$count, $value['money'])
  247. ->setCellValue('Q'.$count, $value['tax_type'])
  248. ->setCellValue('R'.$count, $value['tax_title'])
  249. ->setCellValue('S'.$count, $value['tax_number'])
  250. ->setCellValue('T'.$count, $value['bank_account'])
  251. ->setCellValue('U'.$count, $value['company_address'])
  252. ->setCellValue('V'.$count, $value['company_phone'])
  253. ->setCellValue('W'.$count, $value['mailing_address'])
  254. ->setCellValue('X'.$count, $value['postcode'])
  255. ->setCellValue('Y'.$count, $value['remark'])
  256. ->setCellValue('Z'.$count, $value['create_time']);
  257. }
  258. }
  259. // 命名标签页
  260. $objPHPExcel->getActiveSheet()->setTitle('2020耐蚀钢会网络报名表');
  261. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  262. $objPHPExcel->setActiveSheetIndex(0);
  263. // Redirect output to a client’s web browser (Excel2007)
  264. $filename = date('YmdHis') . ".xlsx";
  265. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  266. header('Content-Disposition: attachment;filename=' . $filename);
  267. header('Cache-Control: max-age=0');
  268. // If you're serving to IE 9, then the following may be needed
  269. header('Cache-Control: max-age=1');
  270. // If you're serving to IE over SSL, then the following may be needed
  271. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  272. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  273. header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  274. header('Pragma: public'); // HTTP/1.0
  275. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  276. $objWriter->save('php://output');
  277. exit;
  278. }
  279. public function doPrint()
  280. {
  281. $id = $_POST['id'];
  282. if (!$id) {
  283. echo json_encode(['code' => 1, 'msg'=>'id不能为空']);
  284. }
  285. $time = time();
  286. $sql = "UPDATE `sign_bak` SET badge=1, status=1, printNum=printNum+1, printTime=$time WHERE member_id=$id";
  287. $res = $this->model->query($sql);
  288. if ($res===false) {
  289. echo json_encode(['code' => 2, 'msg'=>$this->model->lastErrorMsg()]);
  290. }
  291. $data = $this->model->getOneById($id);
  292. $data['img'] = $this->getQrcode($data['token']);
  293. header("Content-type: text/html; charset=utf-8");
  294. // var_dump($data);
  295. echo json_encode(['code'=>0, 'data'=>$data]);
  296. }
  297. public function getQrcode($token)
  298. {
  299. include_once(VENDOR . 'phpqrcode' . DS . 'phpqrcode.php');
  300. $codeUrl = 'http://meeting.ecorr.org/qrcode/webmeeting.html?token=' . $token;
  301. ob_start();//开启缓冲区
  302. \QRcode::png($codeUrl, false, 'L', 6, 1);//生成二维码
  303. $img = ob_get_contents();//获取缓冲区内容
  304. ob_end_clean();//清除缓冲区内容
  305. $imgInfo = 'data:image/png;base64,' . chunk_split(base64_encode($img));//转base64
  306. ob_flush();
  307. return $imgInfo;
  308. }
  309. public function printReceipt()
  310. {
  311. $ids = escapeString($_GET['ids']);
  312. $idarr = explode(',', $ids);
  313. $id = '(';
  314. foreach ($idarr as $value) {
  315. $id .= intval($value) . ',';
  316. }
  317. $id = rtrim($id, ',');
  318. $id .=")";
  319. $res = $this->model->dataList("where id IN $id");
  320. // var_dump($res);
  321. // exit;
  322. $name = [];
  323. $money = 0;
  324. $organization = '';
  325. foreach ($res as $val) {
  326. $name[] = $val['truename'];
  327. if ($val['fee_type']==1) {
  328. $money += 2000;
  329. } else {
  330. $money += 1200;
  331. }
  332. $organization = $val['organization'];
  333. }
  334. $pname = implode(',', $name);
  335. $this->assign('time', date('Y-m-d'));
  336. $this->assign('pname', $pname);
  337. $this->assign('money', $money);
  338. $this->assign('organization', $organization);
  339. $this->assign('dxmoney', $this->convertAmountToCn($money));
  340. $this->fetch();
  341. }
  342. /**
  343. * 将数值金额转换为中文大写金额
  344. * @param $amount float 金额(支持到分)
  345. * @param $type int 补整类型,0:到角补整;1:到元补整
  346. * @return mixed 中文大写金额
  347. */
  348. public function convertAmountToCn($amount, $type = 1) {
  349. // 判断输出的金额是否为数字或数字字符串
  350. if(!is_numeric($amount)){
  351. return "要转换的金额只能为数字!";
  352. }
  353. // 金额为0,则直接输出"零元整"
  354. if($amount == 0) {
  355. return "人民币零元整";
  356. }
  357. // 金额不能为负数
  358. if($amount < 0) {
  359. return "要转换的金额不能为负数!";
  360. }
  361. // 金额不能超过万亿,即12位
  362. if(strlen($amount) > 12) {
  363. return "要转换的金额不能为万亿及更高金额!";
  364. }
  365. // 预定义中文转换的数组
  366. $digital = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
  367. // 预定义单位转换的数组
  368. $position = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '元');
  369. // 将金额的数值字符串拆分成数组
  370. $amountArr = explode('.', $amount);
  371. // 将整数位的数值字符串拆分成数组
  372. $integerArr = str_split($amountArr[0], 1);
  373. // 将整数部分替换成大写汉字
  374. // $result = '人民币';
  375. $result = '';
  376. $integerArrLength = count($integerArr); // 整数位数组的长度
  377. $positionLength = count($position); // 单位数组的长度
  378. $zeroCount = 0; // 连续为0数量
  379. for($i = 0; $i < $integerArrLength; $i++) {
  380. // 如果数值不为0,则正常转换
  381. if($integerArr[$i] != 0){
  382. // 如果前面数字为0需要增加一个零
  383. if($zeroCount >= 1){
  384. $result .= $digital[0];
  385. }
  386. $result .= $digital[$integerArr[$i]] . $position[$positionLength - $integerArrLength + $i];
  387. $zeroCount = 0;
  388. }else{
  389. $zeroCount += 1;
  390. // 如果数值为0, 且单位是亿,万,元这三个的时候,则直接显示单位
  391. if(($positionLength - $integerArrLength + $i + 1)%4 == 0){
  392. $result = $result . $position[$positionLength - $integerArrLength + $i];
  393. }
  394. }
  395. }
  396. // 如果小数位也要转换
  397. if($type == 0) {
  398. // 将小数位的数值字符串拆分成数组
  399. $decimalArr = str_split($amountArr[1], 1);
  400. // 将角替换成大写汉字. 如果为0,则不替换
  401. if($decimalArr[0] != 0){
  402. $result = $result . $digital[$decimalArr[0]] . '角';
  403. }
  404. // 将分替换成大写汉字. 如果为0,则不替换
  405. if($decimalArr[1] != 0){
  406. $result = $result . $digital[$decimalArr[1]] . '分';
  407. }
  408. }else{
  409. $result = $result . '整';
  410. }
  411. return $result;
  412. }
  413. public function receipt()
  414. {
  415. $params = $_GET;
  416. // var_dump($params);
  417. $this->assign('data', $params);
  418. $this->fetch();
  419. }
  420. public function getab($y = 1000)
  421. {
  422. $res = [];
  423. $sum = 0;
  424. $s = 0;
  425. // echo mt_rand(1, 10);
  426. // var_dump($y);
  427. while(1){
  428. $ab = [];
  429. $ab['a'] = mt_rand(10, 20);
  430. $ab['b'] = mt_rand(10, 20);
  431. $sum += $ab['a'] * $ab['b'];
  432. if ($sum > $y) {
  433. break;
  434. }
  435. $s = $sum;
  436. $res[] = $ab;
  437. }
  438. $sy = $y - $s;
  439. var_dump($s);
  440. var_dump($sy);
  441. while(1){
  442. $ab = [];
  443. $ab['a'] = mt_rand(1, 200);
  444. $ab['b'] = mt_rand(1, 200);
  445. if ($ab['a'] * $ab['b'] == $sy) {
  446. $res[] = $ab;
  447. break;
  448. }
  449. }
  450. return $res;
  451. }
  452. }