stat_general.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. /**
  3. * 统计概述
  4. ***/
  5. defined('InShopNC') or exit('Access Invalid!');
  6. class stat_generalControl extends SystemControl{
  7. private $links = array(
  8. array('url'=>'act=stat_general&op=general','lang'=>'stat_generalindex'),
  9. array('url'=>'act=stat_general&op=setting','lang'=>'stat_goodspricerange'),
  10. array('url'=>'act=stat_general&op=orderprange','lang'=>'stat_orderpricerange')
  11. );
  12. public function __construct(){
  13. parent::__construct();
  14. Language::read('stat');
  15. import('function.statistics');
  16. }
  17. /**
  18. * 促销分析
  19. */
  20. public function generalOp(){
  21. $model = Model('stat');
  22. //统计的日期0点
  23. $stat_time = strtotime(date('Y-m-d',time())) - 86400;
  24. /*
  25. * 昨日最新情报
  26. */
  27. $stime = $stat_time;
  28. $etime = $stat_time + 86400 - 1;
  29. $statnew_arr = array();
  30. //查询订单表下单量、下单金额、下单客户数、平均客单价
  31. $where = array();
  32. $where['order_isvalid'] = 1;//计入统计的有效订单
  33. $where['order_add_time'] = array('between',array($stime,$etime));
  34. $field = ' COUNT(*) as ordernum, SUM(order_amount) as orderamount, COUNT(DISTINCT buyer_id) as ordermembernum, AVG(order_amount) as orderavg ';
  35. $stat_order = $model->getoneByStatorder($where, $field);
  36. $statnew_arr['ordernum'] = ($t = $stat_order['ordernum'])?$t:0;
  37. $statnew_arr['orderamount'] = ncPriceFormat(($t = $stat_order['orderamount'])?$t:(0));
  38. $statnew_arr['ordermembernum'] = ($t = $stat_order['ordermembernum'])?$t:0;
  39. $statnew_arr['orderavg'] = ncPriceFormat(($t = $stat_order['orderavg'])?$t:0);
  40. unset($stat_order);
  41. //查询订单商品表下单商品数
  42. $where = array();
  43. $where['order_isvalid'] = 1;//计入统计的有效订单
  44. $where['order_add_time'] = array('between',array($stime,$etime));
  45. $field = ' SUM(goods_num) as ordergoodsnum,AVG(goods_pay_price/goods_num) as priceavg ';
  46. $stat_ordergoods = $model->getoneByStatordergoods($where, $field);
  47. $statnew_arr['ordergoodsnum'] = ($t = $stat_ordergoods['ordergoodsnum'])?$t:0;
  48. $statnew_arr['priceavg'] = ncPriceFormat(($t = $stat_ordergoods['priceavg'])?$t:0);
  49. unset($stat_ordergoods);
  50. //新增会员数
  51. $where = array();
  52. $where['member_time'] = array('between',array($stime,$etime));
  53. $field = ' COUNT(*) as newmember ';
  54. $stat_member = $model->getoneByMember($where, $field);
  55. $statnew_arr['newmember'] = ($t = $stat_member['newmember'])?$t:0;
  56. unset($stat_member);
  57. //会员总数
  58. $where = array();
  59. $field = ' COUNT(*) as membernum ';
  60. $stat_member = $model->getoneByMember($where, $field);
  61. $statnew_arr['membernum'] = ($t = $stat_member['membernum'])?$t:0;
  62. unset($stat_member);
  63. //新增店铺
  64. $where = array();
  65. $where['store_time'] = array('between',array($stime,$etime));
  66. $field = ' COUNT(*) as newstore ';
  67. $stat_store = $model->getoneByStore($where, $field);
  68. $statnew_arr['newstore'] = ($t = $stat_store['newstore'])?$t:0;
  69. unset($stat_store);
  70. //店铺总数
  71. $where = array();
  72. $field = ' COUNT(*) as storenum ';
  73. $stat_store = $model->getoneByStore($where, $field);
  74. $statnew_arr['storenum'] = ($t = $stat_store['storenum'])?$t:0;
  75. unset($stat_store);
  76. //新增商品,商品总数
  77. $goods_list = $model->statByGoods(array('is_virtual'=>0),"COUNT(*) as goodsnum, SUM(IF(goods_addtime>=$stime and goods_addtime<=$etime,1,0)) as newgoods");
  78. $statnew_arr['goodsnum'] = ($t = $goods_list[0]['goodsnum'])>0?$t:0;
  79. $statnew_arr['newgoods'] = ($t = $goods_list[0]['newgoods'])>0?$t:0;
  80. /*
  81. * 昨日销售走势
  82. */
  83. //构造横轴数据
  84. for($i=0; $i<24; $i++){
  85. //统计图数据
  86. $curr_arr[$i] = 0;//今天
  87. $up_arr[$i] = 0;//昨天
  88. //横轴
  89. $stat_arr['xAxis']['categories'][] = "$i";
  90. }
  91. $stime = $stat_time - 86400;//昨天0点
  92. $etime = $stat_time + 86400 - 1;//今天24点
  93. $yesterday_day = @date('d', $stime);//昨天日期
  94. $today_day = @date('d', $etime);//今天日期
  95. $where = array();
  96. $where['order_isvalid'] = 1;//计入统计的有效订单
  97. $where['order_add_time'] = array('between',array($stime,$etime));
  98. $field = ' SUM(order_amount) as orderamount,DAY(FROM_UNIXTIME(order_add_time)) as dayval,HOUR(FROM_UNIXTIME(order_add_time)) as hourval ';
  99. $stat_order = $model->statByStatorder($where, $field, 0, 0, '','dayval,hourval');
  100. if($stat_order){
  101. foreach($stat_order as $k => $v){
  102. if($today_day == $v['dayval']){
  103. $curr_arr[$v['hourval']] = intval($v['orderamount']);
  104. }
  105. if($yesterday_day == $v['dayval']){
  106. $up_arr[$v['hourval']] = intval($v['orderamount']);
  107. }
  108. }
  109. }
  110. $stat_arr['series'][0]['name'] = '昨天';
  111. $stat_arr['series'][0]['data'] = array_values($up_arr);
  112. $stat_arr['series'][1]['name'] = '今天';
  113. $stat_arr['series'][1]['data'] = array_values($curr_arr);
  114. //得到统计图数据
  115. $stat_arr['title'] = date('Y-m-d',$stat_time).'销售走势';
  116. $stat_arr['yAxis'] = '销售额';
  117. $stattoday_json = getStatData_LineLabels($stat_arr);
  118. unset($stat_arr);
  119. /*
  120. * 7日内店铺销售TOP30
  121. */
  122. $stime = $stat_time - 86400*6;//7天前0点
  123. $etime = $stat_time + 86400 - 1;//今天24点
  124. $where = array();
  125. $where['order_isvalid'] = 1;//计入统计的有效订单
  126. $where['order_add_time'] = array('between',array($stime,$etime));
  127. $field = ' SUM(order_amount) as orderamount, store_id, store_name ';
  128. $storetop30_arr = $model->statByStatorder($where, $field, 0, 0, 'orderamount desc', 'store_id');
  129. /*
  130. * 7日内商品销售TOP30
  131. */
  132. $stime = $stat_time - 86400*6;//7天前0点
  133. $etime = $stat_time + 86400 - 1;//今天24点
  134. $where = array();
  135. $where['order_isvalid'] = 1;//计入统计的有效订单
  136. $where['order_add_time'] = array('between',array($stime,$etime));
  137. $field = ' sum(goods_num) as ordergoodsnum, goods_id, goods_name ';
  138. $goodstop30_arr = $model->statByStatordergoods($where, $field, 0, 30,'ordergoodsnum desc', 'goods_id');
  139. Tpl::output('goodstop30_arr',$goodstop30_arr);
  140. Tpl::output('storetop30_arr',$storetop30_arr);
  141. Tpl::output('stattoday_json',$stattoday_json);
  142. Tpl::output('statnew_arr',$statnew_arr);
  143. Tpl::output('stat_time',$stat_time);
  144. Tpl::output('top_link',$this->sublink($this->links, 'general'));
  145. Tpl::showpage('stat.general.index');
  146. }
  147. /**
  148. * 统计设置
  149. */
  150. public function settingOp(){
  151. $model_setting = Model('setting');
  152. if (chksubmit()){
  153. $update_array = array();
  154. if ($_POST['pricerange']){
  155. foreach ((array)$_POST['pricerange'] as $k=>$v){
  156. $pricerange_arr[] = $v;
  157. }
  158. $update_array['stat_pricerange'] = serialize($pricerange_arr);
  159. } else {
  160. $update_array['stat_pricerange'] = '';
  161. }
  162. $result = $model_setting->updateSetting($update_array);
  163. if ($result === true){
  164. $this->log(L('nc_edit,stat_setting'),1);
  165. showMessage(L('nc_common_save_succ'));
  166. }else {
  167. $this->log(L('nc_edit,stat_setting'),0);
  168. showMessage(L('nc_common_save_fail'));
  169. }
  170. }
  171. $list_setting = $model_setting->getListSetting();
  172. $list_setting['stat_pricerange'] = unserialize($list_setting['stat_pricerange']);
  173. Tpl::output('list_setting',$list_setting);
  174. Tpl::output('top_link',$this->sublink($this->links, 'setting'));
  175. Tpl::showpage('stat.setting');
  176. }
  177. /**
  178. * 统计设置
  179. */
  180. public function orderprangeOp(){
  181. $model_setting = Model('setting');
  182. if (chksubmit()){
  183. $update_array = array();
  184. if ($_POST['pricerange']){
  185. foreach ((array)$_POST['pricerange'] as $k=>$v){
  186. $pricerange_arr[] = $v;
  187. }
  188. $update_array['stat_orderpricerange'] = serialize($pricerange_arr);
  189. } else {
  190. $update_array['stat_orderpricerange'] = '';
  191. }
  192. $result = $model_setting->updateSetting($update_array);
  193. if ($result === true){
  194. $this->log(L('nc_edit,stat_setting'),1);
  195. showMessage(L('nc_common_save_succ'));
  196. } else {
  197. $this->log(L('nc_edit,stat_setting'),0);
  198. showMessage(L('nc_common_save_fail'));
  199. }
  200. }
  201. $list_setting = $model_setting->getListSetting();
  202. $list_setting['stat_orderpricerange'] = unserialize($list_setting['stat_orderpricerange']);
  203. Tpl::output('list_setting',$list_setting);
  204. Tpl::output('top_link',$this->sublink($this->links, 'orderprange'));
  205. Tpl::showpage('stat.setting.orderprange');
  206. }
  207. }