Verify.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\shop\controller;
  11. use app\model\member\Member;
  12. use app\model\store\Store;
  13. use app\model\system\UserGroup;
  14. use app\model\verify\Verifier;
  15. use app\model\verify\Verify as VerifyModel;
  16. use app\model\verify\VerifyRecord;
  17. use app\model\web\Config as ConfigModel;
  18. /**
  19. * 核销
  20. * Class Verify
  21. * @package app\shop\controller
  22. */
  23. class Verify extends BaseShop
  24. {
  25. /**
  26. * 核销码
  27. * @return array|mixed
  28. */
  29. public function lists()
  30. {
  31. $verify_model = new VerifyModel();
  32. if (request()->isAjax()) {
  33. $page = input('page', 1);
  34. $page_size = input('page_size', PAGE_LIST_ROWS);
  35. $order = input("order", "create_time desc");
  36. $verify_type = input('verify_type', "");//验证类型
  37. $verify_code = input('verify_code', "");//验证码
  38. $verifier_name = input('verifier_name', "");
  39. $start_time = input("start_time", '');
  40. $end_time = input("end_time", '');
  41. $verify_from = input('verify_from', '');
  42. $condition = [
  43. [ 'site_id', "=", $this->site_id ],
  44. [ 'is_verify', '=', 1 ]
  45. ];
  46. if (!empty($verify_type)) {
  47. $condition[] = [ "verify_type", "=", $verify_type ];
  48. }
  49. if (!empty($verify_from)) {
  50. $condition[] = [ "verify_from", "=", $verify_from ];
  51. }
  52. if (!empty($verify_code)) {
  53. $condition[] = [ "verify_code", 'like', '%' . $verify_code . '%' ];
  54. }
  55. if (!empty($verifier_name)) {
  56. $condition[] = [ 'verifier_name', 'like', '%' . $verifier_name . '%' ];
  57. }
  58. if (!empty($start_time) && empty($end_time)) {
  59. $condition[] = [ 'verify_time', '>=', date_to_time($start_time) ];
  60. } elseif (empty($start_time) && !empty($end_time)) {
  61. $condition[] = [ "verify_time", "<=", date_to_time($end_time) ];
  62. } elseif (!empty($start_time) && !empty($end_time)) {
  63. $condition[] = [ 'verify_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  64. }
  65. $list = $verify_model->getVerifyPageList($condition, $page, $page_size, $order, $field = 'id, verify_code, verify_type, verify_type_name, verify_content_json, verifier_id, verifier_name,verify_from,verify_remark, is_verify, create_time, verify_time');
  66. return $list;
  67. } else {
  68. $verify_type = $verify_model->getVerifyType();
  69. $verify_from = $verify_model->verifyFrom;
  70. $this->assign('verify_from', $verify_from);
  71. $this->assign('verify_type', $verify_type);
  72. return $this->fetch("verify/lists");
  73. }
  74. }
  75. /**
  76. * 核销记录
  77. * @return mixed
  78. */
  79. public function records()
  80. {
  81. $verify_model = new VerifyModel();
  82. $verify_record_model = new VerifyRecord();
  83. $verify_code = input('verify_code', "");//验证码
  84. if (request()->isAjax()) {
  85. $page = input('page', 1);
  86. $page_size = input('page_size', PAGE_LIST_ROWS);
  87. $order = input("order", "create_time desc");
  88. $verify_type = input('verify_type', "");//验证类型
  89. $verifier_name = input('verifier_name', "");
  90. $start_time = input("start_time", '');
  91. $end_time = input("end_time", '');
  92. $store_id = input('store_id', '');
  93. $condition = [
  94. [ 'vr.site_id', "=", $this->site_id ],
  95. // ['is_verify', '=', 1]
  96. ];
  97. if (!empty($verify_type)) {
  98. $condition[] = [ "v.verify_type", "=", $verify_type ];
  99. }
  100. if (!empty($store_id)) {
  101. $condition[] = [ "vr.store_id", "=", $store_id ];
  102. }
  103. if (!empty($verify_code)) {
  104. $condition[] = [ "vr.verify_code", 'like', '%' . $verify_code . '%' ];
  105. }
  106. if (!empty($verifier_name)) {
  107. $condition[] = [ 'vr.verifier_name', 'like', '%' . $verifier_name . '%' ];
  108. }
  109. if (!empty($start_time) && empty($end_time)) {
  110. $condition[] = [ 'vr.verify_time', '>=', date_to_time($start_time) ];
  111. } elseif (empty($start_time) && !empty($end_time)) {
  112. $condition[] = [ "vr.verify_time", "<=", date_to_time($end_time) ];
  113. } elseif (!empty($start_time) && !empty($end_time)) {
  114. $condition[] = [ 'vr.verify_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  115. }
  116. $list = $verify_record_model->getVerifyRecordsViewPageList($condition, $page, $page_size, $order, $field = 'id, verify_code, verify_type, verify_type_name, verify_content_json, verifier_id, verifier_name,verify_from,verify_remark, is_verify, create_time, verify_time');
  117. return $list;
  118. } else {
  119. $verify_type = $verify_model->getVerifyType();
  120. $verify_from = $verify_model->verifyFrom;
  121. $this->assign('verify_code', $verify_code);
  122. $this->assign('verify_from', $verify_from);
  123. $this->assign('verify_type', $verify_type);
  124. $store_list = ( new Store() )->getStoreList([ [ 'site_id', '=', $this->site_id ] ], 'store_name,store_id');
  125. $this->assign('store_list', $store_list[ 'data' ]);
  126. return $this->fetch("verify/records");
  127. }
  128. }
  129. /**
  130. * 订单核销
  131. * @return mixed
  132. */
  133. public function orderverify()
  134. {
  135. $verify_model = new VerifyModel();
  136. if (request()->isAjax()) {
  137. $page = input('page', 1);
  138. $page_size = input('page_size', PAGE_LIST_ROWS);
  139. $verify_code = input('verify_code', "");
  140. $start_time = input("start_time", '');
  141. $end_time = input("end_time", '');
  142. $verify_from = input('verify_from', '');
  143. $verify_type = input('verify_type', '');
  144. $is_verify = input('is_verify', '');
  145. $condition = [
  146. [ 'site_id', "=", $this->site_id ],
  147. ];
  148. if (!empty($verify_type)) {
  149. $condition[] = [ "verify_type", "=", $verify_type ];
  150. }
  151. if ($is_verify !== '') {
  152. $condition[] = [ "is_verify", "=", $is_verify ];
  153. }
  154. if (!empty($verify_from)) {
  155. $condition[] = [ "verify_from", "=", $verify_from ];
  156. }
  157. if (!empty($verify_code)) {
  158. $condition[] = [ "verify_code", 'like', '%' . $verify_code . '%' ];
  159. }
  160. if (!empty($start_time) && empty($end_time)) {
  161. $condition[] = [ 'create_time', '>=', date_to_time($start_time) ];
  162. } elseif (empty($start_time) && !empty($end_time)) {
  163. $condition[] = [ "create_time", "<=", date_to_time($end_time) ];
  164. } elseif (!empty($start_time) && !empty($end_time)) {
  165. $condition[] = [ 'create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  166. }
  167. $store_id_arr = [];
  168. $userGroupModel = new UserGroup();
  169. $userInfo = $this->user_info;
  170. $userGroupWhere['uid'] = $userInfo['uid'];
  171. $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
  172. $store_id_arr = array_column($userGroupList['data'],'store_id');
  173. array_push($store_id_arr,0);
  174. if(!empty($store_id_arr) && !$userInfo['is_admin']){
  175. $condition[] = [ "store_id", "in", $store_id_arr];
  176. }
  177. $list = $verify_model->getVerifyPageList($condition, $page, $page_size, 'id desc');
  178. return $list;
  179. } else {
  180. $verify_count = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ] ], 'count(id) as total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
  181. $this->assign('total_count', $verify_count[ 'total_count' ] ?? 0);
  182. $this->assign('verify_use_num', $verify_count[ 'verify_use_num' ] ?? 0);
  183. $verify_info = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'virtualgoods' ] ], 'count(id) as total_count, sum(verify_total_count) as verify_total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
  184. $this->assign('verify_goods_num', (int) abs($verify_info[ 'verify_total_count' ] - $verify_info[ 'verify_use_num' ]));
  185. $this->assign('verify_goods_count', $verify_info[ 'total_count' ]);
  186. $verify_info = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'pickup' ] ], 'count(id) as total_count,sum(verify_total_count) as verify_total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
  187. $this->assign('pickup_num', (int) abs($verify_info[ 'verify_total_count' ] - $verify_info[ 'verify_use_num' ]));
  188. $this->assign('pickup_count', $verify_info[ 'total_count' ]);
  189. $card_goods_count = $verify_model->getVerifyCount([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'cardgoods' ] ], 'id')[ 'data' ] ?? [];
  190. $verify_info = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'cardgoods' ], [ 'verify_total_count', '>', 0 ] ], 'sum(verify_total_count) as verify_total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
  191. $card_goods_num = (int) abs($verify_info[ 'verify_total_count' ] - $verify_info[ 'verify_use_num' ]);
  192. $card_goods_num += $verify_model->getVerifyCount([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'cardgoods' ], [ 'verify_total_count', '=', 0 ], [ 'expire_time', '>', 0 ], [ 'expire_time', '<', time() ] ], 'id')[ 'data' ];
  193. $this->assign('card_goods_num', $card_goods_num);
  194. $this->assign('card_goods_count', $card_goods_count);
  195. $verify_type = $verify_model->getVerifyType();
  196. $this->assign('verify_type', $verify_type);
  197. return $this->fetch("verify/order_verify");
  198. }
  199. }
  200. /**
  201. * 核销信息
  202. */
  203. public function verifyInfo()
  204. {
  205. $id = input('id', '');
  206. $verify_model = new VerifyModel();
  207. $info = $verify_model->getVerifyInfo([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ]);
  208. return $info;
  209. }
  210. /**
  211. * 核销台
  212. * @return mixed
  213. */
  214. public function verifyCard()
  215. {
  216. if (request()->isAjax()) {
  217. $verify_code = input("verify_code", "");
  218. $verify_model = new VerifyModel();
  219. $res = $verify_model->getVerifyInfo([ [ "verify_code", "=", $verify_code ], [ "site_id", "=", $this->site_id ] ]);
  220. return $res;
  221. } else {
  222. return $this->fetch("verify/verify_card");
  223. }
  224. }
  225. /**
  226. * 核销人员
  227. * @return mixed
  228. */
  229. public function user()
  230. {
  231. if (request()->isAjax()) {
  232. $verifier = new Verifier();
  233. $page = input('page', 1);
  234. $page_size = input('page_size', PAGE_LIST_ROWS);
  235. $order = input("order", "v.create_time desc");
  236. $verifier_name = input('verifier_name', '');
  237. $verifier_type = input('verifier_type', 0);
  238. $store_id = input('store_id', 0);
  239. $condition = [];
  240. $condition[] = [ 'v.site_id', "=", $this->site_id ];
  241. if ($verifier_name) {
  242. $condition[] = [ 'v.verifier_name', '=', $verifier_name ];
  243. }
  244. if ($verifier_type != '') {
  245. $condition[] = [ 'v.verifier_type', '=', $verifier_type ];
  246. }
  247. if ($store_id) {
  248. $condition[] = [ 'v.store_id', '=', $store_id ];
  249. }else{
  250. $store_model = new Store();
  251. $store_id_arr = [];
  252. $userGroupModel = new UserGroup();
  253. $userInfo = $this->user_info;
  254. $userGroupWhere['uid'] = $userInfo['uid'];
  255. $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
  256. $store_id_arr = array_column($userGroupList['data'],'store_id');
  257. if(!empty($store_id_arr) && !$userInfo['is_admin']){
  258. $condition[] = [ "v.store_id", "in", $store_id_arr];
  259. }
  260. }
  261. $list = $verifier->getVerifierPageList($condition, $page, $page_size, $order);
  262. return $list;
  263. } else {
  264. // 门店列表
  265. $store_model = new Store();
  266. $store_id_arr = [];
  267. $userGroupModel = new UserGroup();
  268. $userInfo = $this->user_info;
  269. $userGroupWhere['uid'] = $userInfo['uid'];
  270. $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
  271. $store_id_arr = array_column($userGroupList['data'],'store_id');
  272. if(!empty($store_id_arr) && !$userInfo['is_admin']){
  273. $condition[] = [ "store_id", "in", $store_id_arr];
  274. }
  275. $condition[] = [ [ 'site_id', "=", $this->site_id ], [ 'is_frozen', '=', 0 ] ];
  276. $store_list = $store_model->getStoreList($condition, 'store_id,store_name', 'store_id desc')[ 'data' ];
  277. $this->assign('store_list', $store_list);
  278. return $this->fetch("verify/user");
  279. }
  280. }
  281. /**
  282. * 添加核销人员
  283. * @return mixed
  284. */
  285. public function addUser()
  286. {
  287. if (request()->isAjax()) {
  288. $verifier_name = input("verifier_name", "");
  289. $member_id = input("member_id", 0);//会员账号
  290. $uid = input("uid", 0);//管理员账号
  291. $verifier_type = input('verifier_type', 0);//核销员类型:0平台核销员,1门店核销员
  292. $store_id = input('store_id', 0);//门店ID
  293. $model = new Verifier();
  294. $data = [
  295. 'site_id' => $this->site_id,
  296. "verifier_name" => $verifier_name,
  297. "member_id" => $member_id,
  298. "uid" => $uid,
  299. 'verifier_type' => $verifier_type,
  300. 'store_id' => $store_id
  301. ];
  302. $result = $model->addVerifier($data);
  303. return $result;
  304. } else {
  305. $upload_config_model = new ConfigModel();
  306. $upload_config_result = $upload_config_model->getDefaultImg($this->site_id, $this->app_module)[ 'data' ][ 'value' ];
  307. $this->assign("default_headimg", $upload_config_result[ 'head' ]);
  308. // 门店列表
  309. $store_model = new Store();
  310. $store_list = $store_model->getStoreList([ [ 'site_id', "=", $this->site_id ], [ 'is_frozen', '=', 0 ] ], 'store_id,store_name', 'store_id desc')[ 'data' ];
  311. $this->assign('store_list', $store_list);
  312. return $this->fetch("verify/add_user");
  313. }
  314. }
  315. /**
  316. * 编辑核销人员
  317. * @return mixed
  318. */
  319. public function editUser()
  320. {
  321. $verifier_id = input("verifier_id", 0);//核销员id
  322. $model = new Verifier();
  323. if (request()->isAjax()) {
  324. $verifier_name = input("verifier_name", "");
  325. $member_id = input("member_id", 0);//会员账号
  326. $verifier_type = input('verifier_type', 0);//核销员类型:0平台核销员,1门店核销员
  327. $store_id = input('store_id', 0);//门店ID
  328. $data = [
  329. 'verifier_name' => $verifier_name,
  330. 'member_id' => $member_id,
  331. 'uid' => 0,
  332. 'verifier_type' => $verifier_type,
  333. 'store_id' => $verifier_type == 1 ? $store_id : 0
  334. ];
  335. $condition = array (
  336. [ 'verifier_id', '=', $verifier_id ],
  337. [ 'site_id', '=', $this->site_id ],
  338. );
  339. $result = $model->editVerifier($data, $condition);
  340. return $result;
  341. } else {
  342. $this->assign("verifier_id", $verifier_id);
  343. //用户信息
  344. $info = $model->getVerifierInfo([
  345. [ "verifier_id", "=", $verifier_id ],
  346. [ "site_id", "=", $this->site_id ],
  347. ])[ 'data' ];
  348. if (empty($info)) $this->error('未获取到核销员数据', addon_url('shop/verify/user'));
  349. $info[ "member_name" ] = '';
  350. if (!empty($info[ "member_id" ])) {
  351. $member_model = new Member();
  352. $member_info = $member_model->getMemberInfo([ [ "member_id", "=", $info[ "member_id" ] ] ], "username")[ "data" ];
  353. $info[ "member_name" ] = $member_info[ "username" ];
  354. }
  355. if ($info[ 'verifier_type' ] == 1) {
  356. // 门店列表
  357. $store_model = new Store();
  358. $store = $store_model->getStoreInfo([ [ 'store_id', '=', $info[ 'store_id' ] ] ], 'store_name')[ 'data' ];
  359. $info[ 'store_name' ] = $store[ 'store_name' ];
  360. }
  361. $this->assign("data", $info);
  362. $upload_config_model = new ConfigModel();
  363. $upload_config_result = $upload_config_model->getDefaultImg($this->site_id, $this->app_module)[ 'data' ][ 'value' ];
  364. $this->assign("default_headimg", $upload_config_result[ 'head' ]);
  365. // 门店列表
  366. $store_model = new Store();
  367. $store_list = $store_model->getStoreList([ [ 'site_id', "=", $this->site_id ], [ 'is_frozen', '=', 0 ] ], 'store_id,store_name', 'store_id desc')[ 'data' ];
  368. $this->assign('store_list', $store_list);
  369. return $this->fetch("verify/edit_user");
  370. }
  371. }
  372. /**
  373. * 删除核销人员
  374. * @return mixed
  375. */
  376. public function deleteUser()
  377. {
  378. if (request()->isAjax()) {
  379. $verifier = new Verifier();
  380. $verifier_id = input('ids', 0);
  381. $res = $verifier->deleteVerifier($verifier_id, $this->site_id);
  382. return $res;
  383. }
  384. }
  385. /**
  386. * 核销
  387. */
  388. public function verify()
  389. {
  390. $info = array (
  391. "verifier_id" => $this->uid,
  392. "verifier_name" => $this->user_info[ 'username' ],
  393. "verify_from" => 'shop'
  394. );
  395. $verify_code = input("verify_code", "");
  396. $verify_model = new VerifyModel();
  397. $res = $verify_model->verify($info, $verify_code);
  398. return $res;
  399. }
  400. /**
  401. * 搜索会员
  402. * 不是菜单 不入权限
  403. */
  404. public function searchMember()
  405. {
  406. if (request()->isAjax()) {
  407. $search_text = input('search_text', '');
  408. $member_model = new Member();
  409. $member_info = $member_model->getMemberInfo([ [ 'username|mobile', '=', $search_text ], [ 'site_id', '=', $this->site_id ] ]);
  410. return $member_info;
  411. }
  412. }
  413. /**
  414. * 核销记录导出
  415. */
  416. public function exportVerify()
  417. {
  418. $verify_model = new VerifyModel();
  419. $page = input('page', 1);
  420. $page_size = 0;
  421. $order = input("order", "create_time desc");
  422. $verify_type = input('verify_type', "");//验证类型
  423. $verify_code = input('verify_code', "");//验证码
  424. $verifier_name = input('verifier_name', "");
  425. $start_time = input("start_time", '');
  426. $end_time = input("end_time", '');
  427. $condition = [
  428. [ 'site_id', "=", $this->site_id ],
  429. [ 'is_verify', '=', 1 ]
  430. ];
  431. if (!empty($verify_type)) {
  432. $condition[] = [ "verify_type", "=", $verify_type ];
  433. }
  434. if (!empty($verify_code)) {
  435. $condition[] = [ "verify_code", 'like', '%' . $verify_code . '%' ];
  436. }
  437. if (!empty($verifier_name)) {
  438. $condition[] = [ 'verifier_name', 'like', '%' . $verifier_name . '%' ];
  439. }
  440. if (!empty($start_time) && empty($end_time)) {
  441. $condition[] = [ 'verify_time', '>=', date_to_time($start_time) ];
  442. } elseif (empty($start_time) && !empty($end_time)) {
  443. $condition[] = [ "verify_time", "<=", date_to_time($end_time) ];
  444. } elseif (!empty($start_time) && !empty($end_time)) {
  445. $condition[] = [ 'verify_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  446. }
  447. $list_result = $verify_model->getVerifyPageList($condition, $page, $page_size, $order, $field = 'id, verify_code, verify_type, verify_type_name, verify_content_json, verifier_id, verifier_name, is_verify, create_time, verify_time');
  448. $list = $list_result[ 'data' ][ 'list' ];
  449. // 实例化excel
  450. $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
  451. $phpExcel->getProperties()->setTitle("核销记录");
  452. $phpExcel->getProperties()->setSubject("核销记录");
  453. //单独添加列名称
  454. $phpExcel->setActiveSheetIndex(0);
  455. $phpExcel->getActiveSheet()->setCellValue("A1", '核销码');
  456. $phpExcel->getActiveSheet()->setCellValue("B1", '核销类型');
  457. $phpExcel->getActiveSheet()->setCellValue("C1", '核销员');
  458. $phpExcel->getActiveSheet()->setCellValue("D1", '状态');
  459. $phpExcel->getActiveSheet()->setCellValue("E1", '创建时间');
  460. $phpExcel->getActiveSheet()->setCellValue("F1", '核销时间');
  461. if (!empty($list)) {
  462. foreach ($list as $k => $v) {
  463. $start = $k + 2;
  464. $phpExcel->getActiveSheet()->setCellValue('A' . $start, $v[ 'verify_code' ] . "\t");
  465. $phpExcel->getActiveSheet()->setCellValue('B' . $start, $v[ 'verify_type_name' ] . "\t");
  466. $phpExcel->getActiveSheet()->setCellValue('C' . $start, $v[ 'verifier_name' ] . "\t");
  467. if ($v[ 'is_verify' ] == 1) {
  468. $verify_status = "已核销";
  469. } else {
  470. $verify_status = "尚未核销";
  471. }
  472. $phpExcel->getActiveSheet()->setCellValue('D' . $start, $verify_status . "\t");
  473. $phpExcel->getActiveSheet()->setCellValue('E' . $start, time_to_date($v[ 'create_time' ]) . "\t");
  474. $phpExcel->getActiveSheet()->setCellValue('F' . $start, time_to_date($v[ 'verify_time' ]) . "\t");
  475. }
  476. }
  477. // 重命名工作sheet
  478. $phpExcel->getActiveSheet()->setTitle('核销记录');
  479. // 设置第一个sheet为工作的sheet
  480. $phpExcel->setActiveSheetIndex(0);
  481. // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
  482. $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
  483. $file = date('Y年m月d日-核销记录', time()) . '.xlsx';
  484. $objWriter->save($file);
  485. header("Content-type:application/octet-stream");
  486. $filename = basename($file);
  487. header("Content-Disposition:attachment;filename = " . $filename);
  488. header("Accept-ranges:bytes");
  489. header("Accept-length:" . filesize($file));
  490. readfile($file);
  491. unlink($file);
  492. exit;
  493. }
  494. }