stat_trade.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. <?php
  2. /**
  3. * 统计管理(销量分析)
  4. ***/
  5. defined('InShopNC') or exit('Access Invalid!');
  6. class stat_tradeControl extends SystemControl{
  7. private $links = array(
  8. array('url'=>'act=stat_trade&op=income','lang'=>'stat_sale_income'),
  9. array('url'=>'act=stat_trade&op=predeposit','lang'=>'stat_predeposit'),
  10. array('url'=>'act=stat_trade&op=sale','lang'=>'stat_sale')
  11. );
  12. private $search_arr;//处理后的参数
  13. public function __construct(){
  14. parent::__construct();
  15. Language::read('stat');
  16. import('function.statistics');
  17. import('function.datehelper');
  18. }
  19. /**
  20. * 销售收入统计
  21. */
  22. public function incomeOp(){
  23. $model = Model('stat');
  24. if($_GET['search_year'] == '' || $_GET['search_month'] == ''){
  25. $now_year = date('Y',time());
  26. $now_month = date('m',time());
  27. if($now_month == 1){
  28. $_GET['search_year'] = $now_year-1;
  29. $_GET['search_month'] = 12;
  30. }else{
  31. $_GET['search_year'] = $now_year;
  32. if(m>10){
  33. $_GET['search_month'] = m-1;
  34. }else{
  35. $_GET['search_month'] = '0'.(m-1);
  36. }
  37. }
  38. }
  39. $year = intval($_GET['search_year']);
  40. $month = trim($_GET['search_month']);
  41. if (!in_array($month,array('01','02','03','04','05','06','07','08','09','10','11','12'))){
  42. $month = date('m',time());
  43. $_GET['search_month'] = $month;
  44. }
  45. $condition['os_month'] = $year.$month;
  46. if($_GET['exporttype'] == 'excel'){
  47. //获取全部店铺结账数据
  48. $bill_list = $model->getBillList($condition,'ob',false);
  49. //导出Excel
  50. import('libraries.excel');
  51. $excel_obj = new Excel();
  52. $excel_data = array();
  53. //设置样式
  54. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  55. //header
  56. $excel_data[0][0] = array('styleid'=>'s_title','data'=>'店铺名称');
  57. $excel_data[0][1] = array('styleid'=>'s_title','data'=>'卖家账号');
  58. $excel_data[0][2] = array('styleid'=>'s_title','data'=>'订单金额');
  59. $excel_data[0][3] = array('styleid'=>'s_title','data'=>'收取佣金');
  60. $excel_data[0][4] = array('styleid'=>'s_title','data'=>'退单金额');
  61. $excel_data[0][5] = array('styleid'=>'s_title','data'=>'退回佣金');
  62. $excel_data[0][6] = array('styleid'=>'s_title','data'=>'店铺费用');
  63. $excel_data[0][7] = array('styleid'=>'s_title','data'=>'结算金额');
  64. //data
  65. foreach ($bill_list as $k=>$v){
  66. $excel_data[$k+1][0] = array('data'=>$v['ob_store_name']);
  67. $excel_data[$k+1][1] = array('data'=>$v['member_name']);
  68. $excel_data[$k+1][2] = array('data'=>$v['ob_order_totals']);
  69. $excel_data[$k+1][3] = array('data'=>$v['ob_commis_totals']);
  70. $excel_data[$k+1][4] = array('data'=>$v['ob_order_return_totals']);
  71. $excel_data[$k+1][5] = array('data'=>$v['ob_commis_return_totals']);
  72. $excel_data[$k+1][6] = array('data'=>$v['ob_store_cost_totals']);
  73. $excel_data[$k+1][7] = array('data'=>$v['ob_result_totals']);
  74. }
  75. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  76. $excel_obj->addArray($excel_data);
  77. $excel_obj->addWorksheet($excel_obj->charset('店铺佣金统计',CHARSET));
  78. $excel_obj->generateXML($excel_obj->charset('店铺佣金统计',CHARSET).date('Y-m-d-H',time()));
  79. exit();
  80. }else{
  81. //获取平台总数据
  82. $plat_data = $model->getBillList($condition,'os');
  83. Tpl::output('plat_data',$plat_data[0]);
  84. //店铺数据
  85. Tpl::output('store_list',$model->getBillList($condition,'ob'));
  86. Tpl::output('show_page',$model->showpage());
  87. Tpl::output('top_link',$this->sublink($this->links, 'income'));
  88. Tpl::showpage('stat.income');
  89. }
  90. }
  91. /**
  92. * 预存款统计
  93. */
  94. public function predepositOp(){
  95. $where = array();
  96. if(trim($_GET['pd_type'])=='cash_pay'){
  97. $field = 'sum(lg_freeze_amount) as allnum';
  98. }else{
  99. $field = 'sum(lg_av_amount) as allnum';
  100. }
  101. if(!$_REQUEST['search_type']){
  102. $_REQUEST['search_type'] = 'day';
  103. }
  104. $where['lg_type'] = trim($_GET['pd_type'])==''?'recharge':trim($_GET['pd_type']);
  105. //初始化时间
  106. //天
  107. if(!$_REQUEST['search_time']){
  108. $_REQUEST['search_time'] = date('Y-m-d', time()-86400);
  109. }
  110. $search_time = strtotime($_REQUEST['search_time']);//搜索的时间
  111. Tpl::output('search_time',$_REQUEST['search_time']);
  112. //周
  113. if(!$_REQUEST['search_time_year']){
  114. $_REQUEST['search_time_year'] = date('Y', time());
  115. }
  116. if(!$_REQUEST['search_time_month']){
  117. $_REQUEST['search_time_month'] = date('m', time());
  118. }
  119. if(!$_REQUEST['search_time_week']){
  120. $_REQUEST['search_time_week'] = implode('|', getWeek_SdateAndEdate(time()));
  121. }
  122. $current_year = $_REQUEST['search_time_year'];
  123. $current_month = $_REQUEST['search_time_month'];
  124. $current_week = $_REQUEST['search_time_week'];
  125. $year_arr = getSystemYearArr();
  126. $month_arr = getSystemMonthArr();
  127. $week_arr = getMonthWeekArr($current_year, $current_month);
  128. Tpl::output('current_year', $current_year);
  129. Tpl::output('current_month', $current_month);
  130. Tpl::output('current_week', $current_week);
  131. Tpl::output('year_arr', $year_arr);
  132. Tpl::output('month_arr', $month_arr);
  133. Tpl::output('week_arr', $week_arr);
  134. $model = Model('stat');
  135. $statlist = array();//统计数据列表
  136. if($_REQUEST['search_type'] == 'day'){
  137. //构造横轴数据
  138. for($i=0; $i<24; $i++){
  139. //统计图数据
  140. $curr_arr[$i] = 0;//今天
  141. $up_arr[$i] = 0;//昨天
  142. //统计表数据
  143. $uplist_arr[$i]['timetext'] = $i;
  144. $currlist_arr[$i]['timetext'] = $i;
  145. $uplist_arr[$i]['val'] = 0;
  146. $currlist_arr[$i]['val'] = 0;
  147. //横轴
  148. $stat_arr['xAxis']['categories'][] = "$i";
  149. }
  150. $stime = $search_time - 86400;//昨天0点
  151. $etime = $search_time + 86400 - 1;//今天24点
  152. $today_day = @date('d', $search_time);//今天日期
  153. $yesterday_day = @date('d', $stime);//昨天日期
  154. $where['lg_add_time'] = array('between',array($stime,$etime));
  155. $field .= ' ,DAY(FROM_UNIXTIME(lg_add_time)) as dayval,HOUR(FROM_UNIXTIME(lg_add_time)) as hourval ';
  156. $memberlist = $model->getPredepositInfo($where, $field, 0, '', 0, 'dayval,hourval');
  157. if($memberlist){
  158. foreach($memberlist as $k => $v){
  159. if($today_day == $v['dayval']){
  160. $curr_arr[$v['hourval']] = abs($v['allnum']);
  161. $currlist_arr[$v['hourval']]['val'] = abs($v['allnum']);
  162. }
  163. if($yesterday_day == $v['dayval']){
  164. $up_arr[$v['hourval']] = abs($v['allnum']);
  165. $uplist_arr[$v['hourval']]['val'] = abs($v['allnum']);
  166. }
  167. }
  168. }
  169. $stat_arr['series'][0]['name'] = '昨天';
  170. $stat_arr['series'][0]['data'] = array_values($up_arr);
  171. $stat_arr['series'][1]['name'] = '今天';
  172. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  173. //统计数据标题
  174. $statlist['headertitle'] = array('小时','昨天','今天','同比');
  175. Tpl::output('actionurl','index.php?act=stat_trade&op=predeposit&search_type=day&search_time='.date('Y-m-d',$search_time));
  176. }
  177. if($_REQUEST['search_type'] == 'week'){
  178. $current_weekarr = explode('|', $current_week);
  179. $stime = strtotime($current_weekarr[0])-86400*7;
  180. $etime = strtotime($current_weekarr[1])+86400-1;
  181. $up_week = @date('W', $stime);//上周
  182. $curr_week = @date('W', $etime);//本周
  183. //构造横轴数据
  184. for($i=1; $i<=7; $i++){
  185. //统计图数据
  186. $up_arr[$i] = 0;
  187. $curr_arr[$i] = 0;
  188. $tmp_weekarr = getSystemWeekArr();
  189. //统计表数据
  190. $uplist_arr[$i]['timetext'] = $tmp_weekarr[$i];
  191. $currlist_arr[$i]['timetext'] = $tmp_weekarr[$i];
  192. $uplist_arr[$i]['val'] = 0;
  193. $currlist_arr[$i]['val'] = 0;
  194. //横轴
  195. $stat_arr['xAxis']['categories'][] = $tmp_weekarr[$i];
  196. unset($tmp_weekarr);
  197. }
  198. $where['lg_add_time'] = array('between', array($stime,$etime));
  199. $field .= ',WEEKOFYEAR(FROM_UNIXTIME(lg_add_time)) as weekval,WEEKDAY(FROM_UNIXTIME(lg_add_time))+1 as dayofweekval ';
  200. $memberlist = $model->getPredepositInfo($where, $field, 0, '', 0, 'weekval,dayofweekval');
  201. if($memberlist){
  202. foreach($memberlist as $k=>$v){
  203. if ($up_week == $v['weekval']){
  204. $up_arr[$v['dayofweekval']] = abs($v['allnum']);
  205. $uplist_arr[$v['dayofweekval']]['val'] = abs($v['allnum']);
  206. }
  207. if ($curr_week == $v['weekval']){
  208. $curr_arr[$v['dayofweekval']] = abs($v['allnum']);
  209. $currlist_arr[$v['dayofweekval']]['val'] = abs($v['allnum']);
  210. }
  211. }
  212. }
  213. $stat_arr['series'][0]['name'] = '上周';
  214. $stat_arr['series'][0]['data'] = array_values($up_arr);
  215. $stat_arr['series'][1]['name'] = '本周';
  216. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  217. //统计数据标题
  218. $statlist['headertitle'] = array('星期','上周','本周','同比');
  219. Tpl::output('actionurl','index.php?act=stat_trade&op=predeposit&search_type=week&search_time_year='.$current_year.'&search_time_month='.$current_month.'&search_time_week='.$current_week);
  220. }
  221. if($_REQUEST['search_type'] == 'month'){
  222. $stime = strtotime($current_year.'-'.$current_month."-01 -1 month");
  223. $etime = getMonthLastDay($current_year,$current_month)+86400-1;
  224. $up_month = date('m',$stime);
  225. $curr_month = date('m',$etime);
  226. //计算横轴的最大量(由于每个月的天数不同)
  227. $up_dayofmonth = date('t',$stime);
  228. $curr_dayofmonth = date('t',$etime);
  229. $x_max = $up_dayofmonth > $curr_dayofmonth ? $up_dayofmonth : $curr_dayofmonth;
  230. //构造横轴数据
  231. for($i=1; $i<=$x_max; $i++){
  232. //统计图数据
  233. $up_arr[$i] = 0;
  234. $curr_arr[$i] = 0;
  235. //统计表数据
  236. $uplist_arr[$i]['timetext'] = $i;
  237. $currlist_arr[$i]['timetext'] = $i;
  238. $uplist_arr[$i]['val'] = 0;
  239. $currlist_arr[$i]['val'] = 0;
  240. //横轴
  241. $stat_arr['xAxis']['categories'][] = $i;
  242. }
  243. $where['lg_add_time'] = array('between', array($stime,$etime));
  244. $field .= ',MONTH(FROM_UNIXTIME(lg_add_time)) as monthval,day(FROM_UNIXTIME(lg_add_time)) as dayval ';
  245. $memberlist = $model->getPredepositInfo($where, $field, 0, '', 0, 'monthval,dayval');
  246. if($memberlist){
  247. foreach($memberlist as $k=>$v){
  248. if ($up_month == $v['monthval']){
  249. $up_arr[$v['dayval']] = abs($v['allnum']);
  250. $uplist_arr[$v['dayval']]['val'] = abs($v['allnum']);
  251. }
  252. if ($curr_month == $v['monthval']){
  253. $curr_arr[$v['dayval']] = abs($v['allnum']);
  254. $currlist_arr[$v['dayval']]['val'] = abs($v['allnum']);
  255. }
  256. }
  257. }
  258. $stat_arr['series'][0]['name'] = '上月';
  259. $stat_arr['series'][0]['data'] = array_values($up_arr);
  260. $stat_arr['series'][1]['name'] = '本月';
  261. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  262. //统计数据标题
  263. $statlist['headertitle'] = array('日期','上月','本月','同比');
  264. Tpl::output('actionurl','index.php?act=stat_trade&op=predeposit&search_type=month&search_time_year='.$current_year.'&search_time_month='.$current_month);
  265. }
  266. //计算同比
  267. foreach ((array)$currlist_arr as $k=>$v){
  268. $tmp = array();
  269. $tmp['timetext'] = $v['timetext'];
  270. $tmp['currentdata'] = $v['val'];
  271. $tmp['updata'] = $uplist_arr[$k]['val'];
  272. $tmp['tbrate'] = getTb($tmp['updata'], $tmp['currentdata']);
  273. $statlist['data'][] = $tmp;
  274. }
  275. //导出Excel
  276. if ($_GET['exporttype'] == 'excel'){
  277. //获取数据
  278. $log_list = $model->getPredepositInfo($where, '*', '');
  279. //导出Excel
  280. import('libraries.excel');
  281. $excel_obj = new Excel();
  282. $excel_data = array();
  283. //设置样式
  284. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  285. //header
  286. $excel_data[0][] = array('styleid'=>'s_title','data'=>'会员名称');
  287. $excel_data[0][] = array('styleid'=>'s_title','data'=>'创建时间');
  288. $excel_data[0][] = array('styleid'=>'s_title','data'=>'可用金额(元)');
  289. $excel_data[0][] = array('styleid'=>'s_title','data'=>'冻结金额(元)');
  290. $excel_data[0][] = array('styleid'=>'s_title','data'=>'管理员名称');
  291. $excel_data[0][] = array('styleid'=>'s_title','data'=>'类型');
  292. $excel_data[0][] = array('styleid'=>'s_title','data'=>'描述');
  293. //data
  294. foreach ($log_list as $k=>$v){
  295. $excel_data[$k+1][] = array('data'=>$v['lg_member_name']);
  296. $excel_data[$k+1][] = array('data'=>date('Y-m-d H:i:s',$v['lg_add_time']));
  297. $excel_data[$k+1][] = array('data'=>$v['lg_av_amount']);
  298. $excel_data[$k+1][] = array('data'=>$v['lg_freeze_amount']);
  299. $excel_data[$k+1][] = array('data'=>$v['lg_admin_name']);
  300. switch ($v['lg_type']){
  301. case 'recharge':
  302. $excel_data[$k+1][] = array('data'=>'充值');
  303. break;
  304. case 'order_pay':
  305. $excel_data[$k+1][] = array('data'=>'消费');
  306. break;
  307. case 'cash_pay':
  308. $excel_data[$k+1][] = array('data'=>'提现');
  309. break;
  310. case 'refund':
  311. $excel_data[$k+1][] = array('data'=>'退款');
  312. break;
  313. }
  314. $excel_data[$k+1][] = array('data'=>$v['lg_desc']);
  315. }
  316. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  317. $excel_obj->addArray($excel_data);
  318. $excel_obj->addWorksheet($excel_obj->charset('预存款统计',CHARSET));
  319. $excel_obj->generateXML($excel_obj->charset('预存款统计',CHARSET).date('Y-m-d-H',time()));
  320. exit();
  321. } else {
  322. $log_list = $model->getPredepositInfo($where, '*', 15);
  323. Tpl::output('log_list',$log_list);
  324. Tpl::output('show_page',$model->showpage());
  325. //总数统计部分
  326. $recharge_amount = $model->getPredepositInfo(array('lg_type'=>'recharge','lg_add_time'=>array('between', array($stime,$etime))), 'sum(lg_av_amount) as allnum');
  327. $order_amount = $model->getPredepositInfo(array('lg_type'=>'order_pay','lg_add_time'=>array('between', array($stime,$etime))), 'sum(lg_av_amount) as allnum');
  328. $cash_amount = $model->getPredepositInfo(array('lg_type'=>'cash_pay','lg_add_time'=>array('between', array($stime,$etime))), 'sum(lg_freeze_amount) as allnum');
  329. Tpl::output('stat_array',array('recharge_amount'=>$recharge_amount[0]['allnum'],'order_amount'=>abs($order_amount[0]['allnum']),'cash_amount'=>abs($cash_amount[0]['allnum'])));
  330. $user_amount = $model->getPredepositInfo(true, 'distinct lg_member_id');
  331. Tpl::output('user_amount',count($user_amount));
  332. $usable_amount = $model->getPredepositInfo(true, 'sum(lg_av_amount+lg_freeze_amount) as allnum');
  333. Tpl::output('usable_amount',$usable_amount[0]['allnum']);
  334. //得到统计图数据
  335. $stat_arr['title'] = '预存款统计';
  336. $stat_arr['yAxis'] = '金额';
  337. $stat_json = getStatData_LineLabels($stat_arr);
  338. Tpl::output('stat_json',$stat_json);
  339. Tpl::output('statlist',$statlist);
  340. Tpl::output('top_link',$this->sublink($this->links, 'predeposit'));
  341. Tpl::showpage('stat.predeposit');
  342. }
  343. }
  344. /**
  345. * 订单统计
  346. */
  347. public function saleOp(){
  348. $model = Model('stat');
  349. //存储参数
  350. $this->search_arr = $_REQUEST;
  351. //处理搜索时间
  352. $this->search_arr = $model->dealwithSearchTime($this->search_arr);
  353. //获得系统年份
  354. $year_arr = getSystemYearArr();
  355. //获得系统月份
  356. $month_arr = getSystemMonthArr();
  357. //获得本月的周时间段
  358. $week_arr = getMonthWeekArr($this->search_arr['week']['current_year'], $this->search_arr['week']['current_month']);
  359. Tpl::output('year_arr', $year_arr);
  360. Tpl::output('month_arr', $month_arr);
  361. Tpl::output('week_arr', $week_arr);
  362. Tpl::output('search_arr', $this->search_arr);
  363. //默认统计当前数据
  364. if(!$this->search_arr['search_type']){
  365. $this->search_arr['search_type'] = 'day';
  366. }
  367. //计算昨天和今天时间
  368. if($this->search_arr['search_type'] == 'day'){
  369. $stime = $this->search_arr['day']['search_time'] - 86400;//昨天0点
  370. $etime = $this->search_arr['day']['search_time'] + 86400 - 1;//今天24点
  371. $curr_stime = $this->search_arr['day']['search_time'];//今天0点
  372. } elseif ($this->search_arr['search_type'] == 'week'){
  373. $current_weekarr = explode('|', $this->search_arr['week']['current_week']);
  374. $stime = strtotime($current_weekarr[0])-86400*7;
  375. $etime = strtotime($current_weekarr[1])+86400-1;
  376. $curr_stime = strtotime($current_weekarr[0]);//本周0点
  377. } elseif ($this->search_arr['search_type'] == 'month'){
  378. $stime = strtotime($this->search_arr['month']['current_year'].'-'.$this->search_arr['month']['current_month']."-01 -1 month");
  379. $etime = getMonthLastDay($this->search_arr['month']['current_year'],$this->search_arr['month']['current_month'])+86400-1;
  380. $curr_stime = strtotime($this->search_arr['month']['current_year'].'-'.$this->search_arr['month']['current_month']."-01");;//本月0点
  381. }
  382. $where = array();
  383. $where['order_add_time'] = array('between',array($curr_stime,$etime));
  384. if(trim($_GET['order_type']) != ''){
  385. $where['order_state'] = trim($_GET['order_type']);
  386. }
  387. if(trim($_GET['store_name']) != ''){
  388. $where['store_name'] = array('like','%'.trim($_GET['store_name']).'%');
  389. }
  390. if ($_GET['exporttype'] == 'excel'){
  391. $order_list = $model->statByStatorder($where, '', 0, 0, 'order_id desc', '');
  392. } else {
  393. $order_list = $model->statByStatorder($where, '', 10, 0, 'order_id desc', '');
  394. }
  395. //统计数据标题
  396. $statlist = array();
  397. $statlist['headertitle'] = array('订单号','买家','店铺名称','下单时间','订单总额','订单状态');
  398. foreach ((array)$order_list as $k=>$v){
  399. switch ($v['order_state']){
  400. case ORDER_STATE_CANCEL:
  401. $v['order_statetext'] = '已取消';
  402. break;
  403. case ORDER_STATE_NEW:
  404. $v['order_statetext'] = '待付款';
  405. break;
  406. case ORDER_STATE_PAY:
  407. $v['order_statetext'] = '待发货';
  408. break;
  409. case ORDER_STATE_SEND:
  410. $v['order_statetext'] = '待收货';
  411. break;
  412. case ORDER_STATE_SUCCESS:
  413. $v['order_statetext'] = '交易完成';
  414. break;
  415. }
  416. $statlist['data'][$k]= $v;
  417. }
  418. //导出Excel
  419. if ($_GET['exporttype'] == 'excel'){
  420. //导出Excel
  421. import('libraries.excel');
  422. $excel_obj = new Excel();
  423. $excel_data = array();
  424. //设置样式
  425. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  426. //header
  427. foreach ($statlist['headertitle'] as $v){
  428. $excel_data[0][] = array('styleid'=>'s_title','data'=>$v);
  429. }
  430. //data
  431. foreach ((array)$statlist['data'] as $k=>$v){
  432. $excel_data[$k+1][] = array('data'=>$v['order_sn']);
  433. $excel_data[$k+1][] = array('data'=>$v['buyer_name']);
  434. $excel_data[$k+1][] = array('data'=>$v['store_name']);
  435. $excel_data[$k+1][] = array('data'=>date('Y-m-d H:i:s',$v['order_add_time']));
  436. $excel_data[$k+1][] = array('data'=>number_format(($v['order_amount']),2));
  437. $excel_data[$k+1][] = array('data'=>$v['order_statetext']);
  438. }
  439. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  440. $excel_obj->addArray($excel_data);
  441. $excel_obj->addWorksheet($excel_obj->charset('订单统计',CHARSET));
  442. $excel_obj->generateXML($excel_obj->charset('订单统计',CHARSET).date('Y-m-d-H',time()));
  443. exit();
  444. } else {
  445. //总数统计
  446. $statcount_arr = $model->getoneByStatorder($where,' COUNT(*) as ordernum, SUM(order_amount) as orderamount');
  447. Tpl::output('statcount_arr',$statcount_arr);
  448. Tpl::output('searchtime',implode('|',array($stime,$etime)));
  449. Tpl::output('statlist',$statlist);
  450. Tpl::output('show_page',$model->showpage());
  451. Tpl::output('top_link',$this->sublink($this->links, 'sale'));
  452. Tpl::showpage('stat.sale');
  453. }
  454. }
  455. /**
  456. * 订单走势
  457. */
  458. public function sale_trendOp(){
  459. $model = Model('stat');
  460. //存储参数
  461. $this->search_arr = $_REQUEST;
  462. //默认统计当前数据
  463. if(!$this->search_arr['search_type']){
  464. $this->search_arr['search_type'] = 'day';
  465. }
  466. $where = array();
  467. if(trim($_GET['order_state']) != ''){
  468. $where['order_state'] = trim($_GET['order_state']);
  469. }
  470. if(trim($_GET['store_name']) != ''){
  471. $where['store_name'] = array('like','%'.trim($_GET['store_name']).'%');
  472. }
  473. $stattype = trim($_GET['type']);
  474. if($stattype == 'ordernum'){
  475. $field = ' COUNT(*) as ordernum ';
  476. $stat_arr['title'] = '订单量统计';
  477. $stat_arr['yAxis'] = '订单量';
  478. } else {
  479. $stattype = 'orderamount';
  480. $field = ' SUM(order_amount) as orderamount ';
  481. $stat_arr['title'] = '订单销售额统计';
  482. $stat_arr['yAxis'] = '订单销售额';
  483. }
  484. $searchtime_arr_tmp = explode('|',$this->search_arr['t']);
  485. foreach ((array)$searchtime_arr_tmp as $k=>$v){
  486. $searchtime_arr[] = intval($v);
  487. }
  488. if($this->search_arr['search_type'] == 'day'){
  489. //构造横轴数据
  490. for($i=0; $i<24; $i++){
  491. //统计图数据
  492. $curr_arr[$i] = 0;//今天
  493. $up_arr[$i] = 0;//昨天
  494. //统计表数据
  495. $currlist_arr[$i]['timetext'] = $i;
  496. $uplist_arr[$i]['val'] = 0;
  497. $currlist_arr[$i]['val'] = 0;
  498. //横轴
  499. $stat_arr['xAxis']['categories'][] = "$i";
  500. }
  501. $today_day = @date('d', $searchtime_arr[1]);//今天日期
  502. $yesterday_day = @date('d', $searchtime_arr[0]);//昨天日期
  503. $where['order_add_time'] = array('between',$searchtime_arr);
  504. $field .= ' ,DAY(FROM_UNIXTIME(order_add_time)) as dayval,HOUR(FROM_UNIXTIME(order_add_time)) as hourval ';
  505. $orderlist = $model->statByStatorder($where, $field, 0, 0, '', 'dayval,hourval');
  506. foreach((array)$orderlist as $k => $v){
  507. if($today_day == $v['dayval']){
  508. $curr_arr[$v['hourval']] = intval($v[$stattype]);
  509. $currlist_arr[$v['hourval']]['val'] = $v[$stattype];
  510. }
  511. if($yesterday_day == $v['dayval']){
  512. $up_arr[$v['hourval']] = intval($v[$stattype]);
  513. $uplist_arr[$v['hourval']]['val'] = $v[$stattype];
  514. }
  515. }
  516. $stat_arr['series'][0]['name'] = '昨天';
  517. $stat_arr['series'][0]['data'] = array_values($up_arr);
  518. $stat_arr['series'][1]['name'] = '今天';
  519. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  520. }
  521. if($this->search_arr['search_type'] == 'week'){
  522. $up_week = @date('W', $searchtime_arr[0]);//上周
  523. $curr_week = @date('W', $searchtime_arr[1]);//本周
  524. //构造横轴数据
  525. for($i=1; $i<=7; $i++){
  526. //统计图数据
  527. $up_arr[$i] = 0;
  528. $curr_arr[$i] = 0;
  529. $tmp_weekarr = getSystemWeekArr();
  530. //统计表数据
  531. $uplist_arr[$i]['timetext'] = $tmp_weekarr[$i];
  532. $currlist_arr[$i]['timetext'] = $tmp_weekarr[$i];
  533. $uplist_arr[$i]['val'] = 0;
  534. $currlist_arr[$i]['val'] = 0;
  535. //横轴
  536. $stat_arr['xAxis']['categories'][] = $tmp_weekarr[$i];
  537. unset($tmp_weekarr);
  538. }
  539. $where['order_add_time'] = array('between', $searchtime_arr);
  540. $field .= ',WEEKOFYEAR(FROM_UNIXTIME(order_add_time)) as weekval,WEEKDAY(FROM_UNIXTIME(order_add_time))+1 as dayofweekval ';
  541. $orderlist = $model->statByStatorder($where, $field, 0, 0, '', 'weekval,dayofweekval');
  542. foreach((array)$orderlist as $k=>$v){
  543. if ($up_week == $v['weekval']){
  544. $up_arr[$v['dayofweekval']] = intval($v[$stattype]);
  545. $uplist_arr[$v['dayofweekval']]['val'] = intval($v[$stattype]);
  546. }
  547. if ($curr_week == $v['weekval']){
  548. $curr_arr[$v['dayofweekval']] = intval($v[$stattype]);
  549. $currlist_arr[$v['dayofweekval']]['val'] = intval($v[$stattype]);
  550. }
  551. }
  552. $stat_arr['series'][0]['name'] = '上周';
  553. $stat_arr['series'][0]['data'] = array_values($up_arr);
  554. $stat_arr['series'][1]['name'] = '本周';
  555. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  556. }
  557. if($this->search_arr['search_type'] == 'month'){
  558. $up_month = date('m',$searchtime_arr[0]);
  559. $curr_month = date('m',$searchtime_arr[1]);
  560. //计算横轴的最大量(由于每个月的天数不同)
  561. $up_dayofmonth = date('t',$searchtime_arr[0]);
  562. $curr_dayofmonth = date('t',$searchtime_arr[1]);
  563. $x_max = $up_dayofmonth > $curr_dayofmonth ? $up_dayofmonth : $curr_dayofmonth;
  564. //构造横轴数据
  565. for($i=1; $i<=$x_max; $i++){
  566. //统计图数据
  567. $up_arr[$i] = 0;
  568. $curr_arr[$i] = 0;
  569. //统计表数据
  570. $currlist_arr[$i]['timetext'] = $i;
  571. $uplist_arr[$i]['val'] = 0;
  572. $currlist_arr[$i]['val'] = 0;
  573. //横轴
  574. $stat_arr['xAxis']['categories'][] = $i;
  575. }
  576. $where['order_add_time'] = array('between', array($searchtime_arr[0],$searchtime_arr[1]));
  577. $field .= ',MONTH(FROM_UNIXTIME(order_add_time)) as monthval,day(FROM_UNIXTIME(order_add_time)) as dayval ';
  578. $orderlist = $model->statByStatorder($where, $field, 0, 0, '', 'monthval,dayval');
  579. foreach($orderlist as $k=>$v){
  580. if ($up_month == $v['monthval']){
  581. $up_arr[$v['dayval']] = intval($v[$stattype]);
  582. $uplist_arr[$v['dayval']]['val'] = intval($v[$stattype]);
  583. }
  584. if ($curr_month == $v['monthval']){
  585. $curr_arr[$v['dayval']] = intval($v[$stattype]);
  586. $currlist_arr[$v['dayval']]['val'] = intval($v[$stattype]);
  587. }
  588. }
  589. $stat_arr['series'][0]['name'] = '上月';
  590. $stat_arr['series'][0]['data'] = array_values($up_arr);
  591. $stat_arr['series'][1]['name'] = '本月';
  592. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  593. }
  594. $stat_json = getStatData_LineLabels($stat_arr);
  595. Tpl::output('stat_json',$stat_json);
  596. Tpl::output('stattype',$stattype);
  597. Tpl::showpage('stat.linelabels','null_layout');
  598. }
  599. }