ExportServices.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\export;
  12. use app\services\BaseServices;
  13. use crmeb\services\SpreadsheetExcelService;
  14. class ExportServices extends BaseServices
  15. {
  16. /**
  17. * 真实请求导出
  18. * @param $header excel表头
  19. * @param $title 标题
  20. * @param array $export 填充数据
  21. * @param string $filename 保存文件名称
  22. * @param string $suffix 保存文件后缀
  23. * @param bool $is_save true|false 是否保存到本地
  24. * @return mixed
  25. */
  26. public function export($header, $title_arr, $export = [], $filename = '', $suffix = 'xlsx', $is_save = false)
  27. {
  28. $title = isset($title_arr[0]) && !empty($title_arr[0]) ? $title_arr[0] : '导出数据';
  29. $name = isset($title_arr[1]) && !empty($title_arr[1]) ? $title_arr[1] : '导出数据';
  30. $info = isset($title_arr[2]) && !empty($title_arr[2]) ? $title_arr[2] : date('Y-m-d H:i:s', time());
  31. $path = SpreadsheetExcelService::instance()->setExcelHeader($header)
  32. ->setExcelTile($title, $name, $info)
  33. ->setExcelContent($export)
  34. ->excelSave($filename, $suffix, $is_save);
  35. $path = $this->siteUrl() . '/' . $path;
  36. return [$path];
  37. }
  38. public function siteUrl()
  39. {
  40. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  41. $domainName = $_SERVER['HTTP_HOST'];
  42. return $protocol . $domainName;
  43. }
  44. /**
  45. * 用户资金导出
  46. * @param $data 导出数据
  47. */
  48. public function userFinance($data = [])
  49. {
  50. $export = [];
  51. if (!empty($data)) {
  52. foreach ($data as $value) {
  53. $export[] = [
  54. $value['uid'],
  55. $value['nickname'],
  56. $value['pm'] == 0 ? '-' . $value['number'] : $value['number'],
  57. $value['title'],
  58. $value['mark'],
  59. $value['add_time'],
  60. ];
  61. }
  62. }
  63. $header = ['会员ID', '昵称', '金额/积分', '类型', '备注', '创建时间'];
  64. $title = ['资金监控', '资金监控', date('Y-m-d H:i:s', time())];
  65. $filename = '资金监控_' . date('YmdHis', time());
  66. $suffix = 'xlsx';
  67. $is_save = true;
  68. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  69. }
  70. /**
  71. * 用户佣金导出
  72. * @param $data 导出数据
  73. */
  74. public function userCommission($data = [])
  75. {
  76. $export = [];
  77. if (!empty($data)) {
  78. foreach ($data as &$value) {
  79. $export[] = [
  80. $value['nickname'],
  81. $value['sum_number'],
  82. $value['now_money'],
  83. $value['brokerage_price'],
  84. $value['extract_price'],
  85. ];
  86. }
  87. }
  88. $header = ['昵称/姓名', '总佣金金额', '账户余额', '账户佣金', '提现到账佣金'];
  89. $title = ['拥金记录', '拥金记录' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  90. $filename = '拥金记录_' . date('YmdHis', time());
  91. $suffix = 'xlsx';
  92. $is_save = true;
  93. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  94. }
  95. /**
  96. * 用户积分导出
  97. * @param $data 导出数据
  98. */
  99. public function userPoint($data = [])
  100. {
  101. $export = [];
  102. if (!empty($data)) {
  103. foreach ($data as $key => $item) {
  104. $export[] = [
  105. $item['id'],
  106. $item['title'],
  107. $item['balance'],
  108. $item['number'],
  109. $item['mark'],
  110. $item['nickname'],
  111. $item['add_time'],
  112. ];
  113. }
  114. }
  115. $header = ['编号', '标题', '变动前积分', '积分变动', '备注', '用户微信昵称', '添加时间'];
  116. $title = ['积分日志', '积分日志' . time(), '生成时间:' . date('Y-m-d H:i:s', time())];
  117. $filename = '积分日志_' . date('YmdHis', time());
  118. $suffix = 'xlsx';
  119. $is_save = true;
  120. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  121. }
  122. /**
  123. * 用户充值导出
  124. * @param $data 导出数据
  125. */
  126. public function userRecharge($data = [])
  127. {
  128. $export = [];
  129. if (!empty($data)) {
  130. foreach ($data as $item) {
  131. switch ($item['recharge_type']) {
  132. case 'routine':
  133. $item['_recharge_type'] = '小程序充值';
  134. break;
  135. case 'weixin':
  136. $item['_recharge_type'] = '公众号充值';
  137. break;
  138. default:
  139. $item['_recharge_type'] = '其他充值';
  140. break;
  141. }
  142. $item['_pay_time'] = $item['pay_time'] ? date('Y-m-d H:i:s', $item['pay_time']) : '暂无';
  143. $item['_add_time'] = $item['add_time'] ? date('Y-m-d H:i:s', $item['add_time']) : '暂无';
  144. $item['paid_type'] = $item['paid'] ? '已支付' : '未支付';
  145. $export[] = [
  146. $item['nickname'],
  147. $item['price'],
  148. $item['paid_type'],
  149. $item['_recharge_type'],
  150. $item['_pay_time'],
  151. $item['paid'] == 1 && $item['refund_price'] == $item['price'] ? '已退款' : '未退款',
  152. $item['_add_time']
  153. ];
  154. }
  155. }
  156. $header = ['昵称/姓名', '充值金额', '是否支付', '充值类型', '支付时间', '是否退款', '添加时间'];
  157. $title = ['充值记录', '充值记录' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  158. $filename = '充值记录_' . date('YmdHis', time());
  159. $suffix = 'xlsx';
  160. $is_save = true;
  161. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  162. }
  163. /**
  164. * 用户推广导出
  165. * @param $data 导出数据
  166. */
  167. public function userAgent($data = [])
  168. {
  169. $export = [];
  170. if (!empty($data)) {
  171. foreach ($data as $index => $item) {
  172. $export[] = [
  173. $item['uid'],
  174. $item['nickname'],
  175. $item['phone'],
  176. $item['spread_count'],
  177. $item['order_count'],
  178. $item['order_price'],
  179. $item['brokerage_money'],
  180. $item['extract_count_price'],
  181. $item['extract_count_num'],
  182. $item['brokerage_price'],
  183. $item['spread_name'],
  184. ];
  185. }
  186. }
  187. $header = ['用户编号', '昵称', '电话号码', '推广用户数量', '订单数量', '推广订单金额', '佣金金额', '已提现金额', '提现次数', '未提现金额', '上级推广人'];
  188. $title = ['推广用户', '推广用户导出' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  189. $filename = '推广用户_' . date('YmdHis', time());
  190. $suffix = 'xlsx';
  191. $is_save = true;
  192. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  193. }
  194. /**
  195. * 微信用户导出
  196. * @param $data 导出数据
  197. */
  198. public function wechatUser($data = [])
  199. {
  200. $export = [];
  201. if (!empty($data)) {
  202. foreach ($data as $index => $item) {
  203. $export[] = [
  204. $item['nickname'],
  205. $item['sex'],
  206. $item['country'] . $item['province'] . $item['city'],
  207. $item['subscribe'] == 1 ? '关注' : '未关注',
  208. ];
  209. }
  210. }
  211. $header = ['名称', '性别', '地区', '是否关注公众号'];
  212. $title = ['微信用户导出', '微信用户导出' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  213. $filename = '微信用户导出_' . date('YmdHis', time());
  214. $suffix = 'xlsx';
  215. $is_save = true;
  216. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  217. }
  218. /**
  219. * 订单资金导出
  220. * @param $data 导出数据
  221. */
  222. public function orderFinance($data = [])
  223. {
  224. $export = [];
  225. if (!empty($data)) {
  226. foreach ($data as $info) {
  227. $time = $info['pay_time'];
  228. $price = $info['total_price'] + $info['pay_postage'];
  229. $zhichu = $info['coupon_price'] + $info['deduction_price'] + $info['cost'];
  230. $profit = ($info['total_price'] + $info['pay_postage']) - ($info['coupon_price'] + $info['deduction_price'] + $info['cost']);
  231. $deduction = $info['deduction_price'];//积分抵扣
  232. $coupon = $info['coupon_price'];//优惠
  233. $cost = $info['cost'];//成本
  234. $export[] = [$time, $price, $zhichu, $cost, $coupon, $deduction, $profit];
  235. }
  236. }
  237. $header = ['时间', '营业额(元)', '支出(元)', '成本', '优惠', '积分抵扣', '盈利(元)'];
  238. $title = ['财务统计', '财务统计', date('Y-m-d H:i:s', time())];
  239. $filename = '财务统计_' . date('YmdHis', time());
  240. $suffix = 'xlsx';
  241. $is_save = true;
  242. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  243. }
  244. /**
  245. * 商铺砍价活动导出
  246. * @param $data 导出数据
  247. */
  248. public function storeBargain($data = [])
  249. {
  250. $export = [];
  251. if (!empty($data)) {
  252. foreach ($data as $index => $item) {
  253. $export[] = [
  254. $item['title'],
  255. $item['info'],
  256. '¥' . $item['price'],
  257. '¥' . $item['bargain_max_price'],
  258. '¥' . $item['bargain_min_price'],
  259. $item['bargain_num'],
  260. $item['status'] ? '开启' : '关闭',
  261. empty($item['start_time']) ? '' : date('Y-m-d H:i:s', (int)$item['start_time']),
  262. empty($item['stop_time']) ? '' : date('Y-m-d H:i:s', (int)$item['stop_time']),
  263. $item['sales'],
  264. $item['stock'],
  265. $item['give_integral'],
  266. empty($item['add_time']) ? '' : $item['add_time'],
  267. ];
  268. }
  269. }
  270. $header = ['砍价活动名称', '砍价活动简介', '砍价金额', '用户每次砍价的最大金额', '用户每次砍价的最小金额',
  271. '用户每次砍价的次数', '砍价状态', '砍价开启时间', '砍价结束时间', '销量', '库存', '返多少积分', '添加时间'];
  272. $title = ['砍价商品导出', '商品信息' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  273. $filename = '砍价商品导出_' . date('YmdHis', time());
  274. $suffix = 'xlsx';
  275. $is_save = true;
  276. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  277. }
  278. /**
  279. * 商铺拼团导出
  280. * @param $data 导出数据
  281. */
  282. public function storeCombination($data = [])
  283. {
  284. $export = [];
  285. if (!empty($data)) {
  286. foreach ($data as $item) {
  287. $export[] = [
  288. $item['id'],
  289. $item['title'],
  290. $item['ot_price'],
  291. $item['price'],
  292. $item['stock'],
  293. $item['people'],
  294. $item['count_people_all'],
  295. $item['count_people_pink'],
  296. $item['sales'] ?? 0,
  297. $item['is_show'] ? '开启' : '关闭',
  298. empty($item['stop_time']) ? '' : date('Y/m/d H:i:s', (int)$item['stop_time'])
  299. ];
  300. }
  301. }
  302. $header = ['编号', '拼团名称', '原价', '拼团价', '库存', '拼团人数', '参与人数', '成团数量', '销量', '商品状态', '结束时间'];
  303. $title = ['拼团商品导出', '商品信息' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  304. $filename = '拼团商品导出_' . date('YmdHis', time());
  305. $suffix = 'xlsx';
  306. $is_save = true;
  307. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  308. }
  309. /**
  310. * 商铺秒杀活动导出
  311. * @param $data 导出数据
  312. */
  313. public function storeSeckill($data = [])
  314. {
  315. $export = [];
  316. if (!empty($data)) {
  317. foreach ($data as $item) {
  318. if ($item['status']) {
  319. if ($item['start_time'] > time())
  320. $item['start_name'] = '活动未开始';
  321. else if ($item['stop_time'] < time())
  322. $item['start_name'] = '活动已结束';
  323. else if ($item['stop_time'] > time() && $item['start_time'] < time())
  324. $item['start_name'] = '正在进行中';
  325. } else {
  326. $item['start_name'] = '活动已结束';
  327. }
  328. $export[] = [
  329. $item['id'],
  330. $item['title'],
  331. $item['info'],
  332. $item['ot_price'],
  333. $item['price'],
  334. $item['stock'],
  335. $item['sales'],
  336. $item['start_name'],
  337. $item['stop_time'] ? date('Y-m-d H:i:s', $item['stop_time']) : '/',
  338. $item['status'] ? '开启' : '关闭',
  339. ];
  340. }
  341. }
  342. $header = ['编号', '活动标题', '活动简介', '原价', '秒杀价', '库存', '销量', '秒杀状态', '结束时间', '状态'];
  343. $title = ['秒杀商品导出', ' ', ' 生成时间:' . date('Y-m-d H:i:s', time())];
  344. $filename = '秒杀商品导出_' . date('YmdHis', time());
  345. $suffix = 'xlsx';
  346. $is_save = true;
  347. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  348. }
  349. /**
  350. * 商铺商品导出
  351. * @param $data 导出数据
  352. */
  353. public function storeProduct($data = [])
  354. {
  355. $export = [];
  356. if (!empty($data)) {
  357. foreach ($data as $index => $item) {
  358. $export[] = [
  359. $item['store_name'],
  360. $item['store_info'],
  361. $item['cate_name'],
  362. '¥' . $item['price'],
  363. $item['stock'],
  364. $item['sales'],
  365. $item['visitor'],
  366. ];
  367. }
  368. }
  369. $header = ['商品名称', '商品简介', '商品分类', '价格', '库存', '销量', '浏览量'];
  370. $title = ['商品导出', '商品信息' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  371. $filename = '商品导出_' . date('YmdHis', time());
  372. $suffix = 'xlsx';
  373. $is_save = true;
  374. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  375. }
  376. /**
  377. * 商铺订单导出
  378. * @param $data 导出数据
  379. */
  380. public function storeOrder($data = [])
  381. {
  382. $export = [];
  383. if (!empty($data)) {
  384. foreach ($data as $item) {
  385. if ($item['paid'] == 1) {
  386. switch ($item['pay_type']) {
  387. case 'weixin':
  388. $item['pay_type_name'] = '微信支付';
  389. break;
  390. case 'yue':
  391. $item['pay_type_name'] = '余额支付';
  392. break;
  393. case 'offline':
  394. $item['pay_type_name'] = '线下支付';
  395. break;
  396. default:
  397. $item['pay_type_name'] = '其他支付';
  398. break;
  399. }
  400. } else {
  401. switch ($item['pay_type']) {
  402. default:
  403. $item['pay_type_name'] = '未支付';
  404. break;
  405. case 'offline':
  406. $item['pay_type_name'] = '线下支付';
  407. $item['pay_type_info'] = 1;
  408. break;
  409. }
  410. }
  411. if ($item['paid'] == 0 && $item['status'] == 0) {
  412. $item['status_name'] = '未支付';
  413. } else if ($item['paid'] == 1 && $item['status'] == 0 && $item['shipping_type'] == 1 && $item['refund_status'] == 0) {
  414. $item['status_name'] = '未发货';
  415. } else if ($item['paid'] == 1 && $item['status'] == 0 && $item['shipping_type'] == 2 && $item['refund_status'] == 0) {
  416. $item['status_name'] = '未核销';
  417. } else if ($item['paid'] == 1 && $item['status'] == 1 && $item['shipping_type'] == 1 && $item['refund_status'] == 0) {
  418. $item['status_name'] = '待收货';
  419. } else if ($item['paid'] == 1 && $item['status'] == 1 && $item['shipping_type'] == 2 && $item['refund_status'] == 0) {
  420. $item['status_name'] = '未核销';
  421. } else if ($item['paid'] == 1 && $item['status'] == 2 && $item['refund_status'] == 0) {
  422. $item['status_name'] = '待评价';
  423. } else if ($item['paid'] == 1 && $item['status'] == 3 && $item['refund_status'] == 0) {
  424. $item['status_name'] = '已完成';
  425. } else if ($item['paid'] == 1 && $item['refund_status'] == 1) {
  426. $refundReasonTime = date('Y-m-d H:i', $item['refund_reason_time']);
  427. $refundReasonWapImg = json_decode($item['refund_reason_wap_img'], true);
  428. $refundReasonWapImg = $refundReasonWapImg ? $refundReasonWapImg : [];
  429. $img = '';
  430. if (count($refundReasonWapImg)) {
  431. foreach ($refundReasonWapImg as $itemImg) {
  432. if (strlen(trim($itemImg)))
  433. $img .= '<img style="height:50px;" src="' . $itemImg . '" />';
  434. }
  435. }
  436. if (!strlen(trim($img))) $img = '无';
  437. $item['status_name'] = <<<HTML
  438. <b style="color:#f124c7">申请退款</b><br/>
  439. <span>退款原因:{$item['refund_reason_wap']}</span><br/>
  440. <span>备注说明:{$item['refund_reason_wap_explain']}</span><br/>
  441. <span>退款时间:{$refundReasonTime}</span><br/>
  442. <span>退款凭证:{$img}</span>
  443. HTML;
  444. } else if ($item['paid'] == 1 && $item['refund_status'] == 2) {
  445. $item['status_name'] = '已退款';
  446. }
  447. $goodsName = [];
  448. foreach ($item['_info'] as $k => $v) {
  449. $suk = '';
  450. if (isset($v['productInfo']['attrInfo'])) {
  451. if (isset($v['productInfo']['attrInfo']['suk'])) {
  452. $suk = '(' . $v['productInfo']['attrInfo']['suk'] . ')';
  453. }
  454. }
  455. if (isset($v['productInfo']['store_name'])) {
  456. $goodsName[] = implode(
  457. [$v['productInfo']['store_name'],
  458. $suk,
  459. "[{$v['cart_num']} * {$v['truePrice']}]"
  460. ], ' ');
  461. }
  462. }
  463. if ($item['sex'] == 1) $sex_name = '男';
  464. else if ($item['sex'] == 2) $sex_name = '女';
  465. else $sex_name = '未知';
  466. $export[] = [
  467. $item['order_id'],
  468. $sex_name,
  469. $item['user_phone'],
  470. $item['real_name'],
  471. $item['user_phone'],
  472. $item['user_address'],
  473. $goodsName ? implode("\n", $goodsName) : '',
  474. $item['total_price'],
  475. $item['pay_price'],
  476. $item['pay_postage'],
  477. $item['coupon_price'],
  478. $item['pay_type_name'],
  479. $item['pay_time'] > 0 ? date('Y/m-d H:i', (int)$item['pay_time']) : '暂无',
  480. $item['status_name'] ?? '未知状态',
  481. empty($item['add_time']) ? 0 : date('Y-m-d H:i:s', (int)$item['add_time']),
  482. $item['mark']
  483. ];
  484. }
  485. }
  486. $header = ['订单号', '性别', '电话', '收货人姓名', '收货人电话', '收货地址', '商品信息',
  487. '总价格', '实际支付', '邮费', '优惠金额', '支付状态', '支付时间', '订单状态', '下单时间', '用户备注'];
  488. $title = ['订单导出', '订单信息' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  489. $filename = '订单导出_' . date('YmdHis', time());
  490. $suffix = 'xlsx';
  491. $is_save = true;
  492. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  493. }
  494. /**
  495. * 商铺自提点导出
  496. * @param $data 导出数据
  497. */
  498. public function storeMerchant($data = [])
  499. {
  500. $export = [];
  501. if (!empty($data)) {
  502. foreach ($data as $index => $item) {
  503. $export[] = [
  504. $item['name'],
  505. $item['phone'],
  506. $item['address'] . '' . $item['detailed_address'],
  507. $item['day_time'],
  508. $item['is_show'] ? '开启' : '关闭'
  509. ];
  510. }
  511. }
  512. $header = ['提货点名称', '提货点', '地址', '营业时间', '状态'];
  513. $title = ['提货点导出', '提货点信息' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  514. $filename = '提货点导出_' . date('YmdHis', time());
  515. $suffix = 'xlsx';
  516. $is_save = true;
  517. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  518. }
  519. public function memberCard($data = [])
  520. {
  521. $export = [];
  522. if (!empty($data)) {
  523. foreach ($data['data'] as $index => $item) {
  524. $export[] = [
  525. $item['card_number'],
  526. $item['card_password'],
  527. $item['user_name'],
  528. $item['user_phone'],
  529. $item['use_time'],
  530. $item['use_uid'] ? '已领取' : '未领取'
  531. ];
  532. }
  533. }
  534. $header = ['会员卡号', '密码', '领取人', '领取人手机号', '领取时间', '是否使用'];
  535. $title = ['会员卡导出', '会员卡导出' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  536. $filename = $data['title'] ? ("卡密会员_" . trim($data['title'])) : "";
  537. $suffix = 'xlsx';
  538. $is_save = true;
  539. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  540. }
  541. public function tradeData($data = [], $tradeTitle = "交易统计")
  542. {
  543. $export = [];
  544. if (!empty($data)) {
  545. $header = ['时间'];
  546. $headerArray = array_column($data['series'], 'name');
  547. $header = array_merge($header, $headerArray);
  548. $export = [];
  549. foreach ($data['series'] as $index => $item) {
  550. foreach ($data['x'] as $k => $v) {
  551. $export[$v]['time'] = $v;
  552. $export[$v][] = $item['value'][$k];
  553. }
  554. }
  555. }
  556. $title = [$tradeTitle, $tradeTitle, ' 生成时间:' . date('Y-m-d H:i:s', time())];
  557. $filename = $tradeTitle;
  558. $suffix = 'xlsx';
  559. $is_save = true;
  560. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  561. }
  562. /**
  563. * 商品统计
  564. * @param $data 导出数据
  565. */
  566. public function productTrade($data = [])
  567. {
  568. $export = [];
  569. if (!empty($data)) {
  570. foreach ($data as &$value) {
  571. $export[] = [
  572. $value['time'],
  573. $value['browse'],
  574. $value['user'],
  575. $value['cart'],
  576. $value['order'],
  577. $value['payNum'],
  578. $value['pay'],
  579. $value['cost'],
  580. $value['refund'],
  581. $value['refundNum'],
  582. $value['changes'] . '%'
  583. ];
  584. }
  585. }
  586. $header = ['日期/时间', '商品浏览量', '商品访客数', '加购件数', '下单件数', '支付件数', '支付金额', '成本金额', '退款金额', '退款件数', '访客-支付转化率'];
  587. $title = ['商品统计', '商品统计' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  588. $filename = '商品统计_' . date('YmdHis', time());
  589. $suffix = 'xlsx';
  590. $is_save = true;
  591. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  592. }
  593. public function userTrade($data = [])
  594. {
  595. $export = [];
  596. if (!empty($data)) {
  597. foreach ($data as &$value) {
  598. $export[] = [
  599. $value['time'],
  600. $value['user'],
  601. $value['browse'],
  602. $value['new'],
  603. $value['paid'],
  604. $value['changes'] . '%',
  605. $value['vip'],
  606. $value['recharge'],
  607. $value['payPrice'],
  608. ];
  609. }
  610. }
  611. $header = ['日期/时间', '访客数', '浏览量', '新增用户数', '成交用户数', '访客-支付转化率', '付费会员数', '充值用户数', '客单价'];
  612. $title = ['用户统计', '用户统计' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
  613. $filename = '用户统计_' . date('YmdHis', time());
  614. $suffix = 'xlsx';
  615. $is_save = true;
  616. return $this->export($header, $title, $export, $filename, $suffix, $is_save);
  617. }
  618. }