stat_aftersale.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. /**
  3. * 售后分析
  4. ***/
  5. defined('InShopNC') or exit('Access Invalid!');
  6. class stat_aftersaleControl extends SystemControl{
  7. private $links = array(
  8. array('url'=>'act=stat_aftersale&op=refund','lang'=>'stat_refund'),
  9. array('url'=>'act=stat_aftersale&op=evalstore','lang'=>'stat_evalstore'),
  10. );
  11. private $search_arr;//处理后的参数
  12. public function __construct(){
  13. parent::__construct();
  14. Language::read('stat');
  15. import('function.statistics');
  16. import('function.datehelper');
  17. $model = Model('stat');
  18. //存储参数
  19. $this->search_arr = $_REQUEST;
  20. //处理搜索时间
  21. if (in_array($this->search_arr['op'],array('refund'))){
  22. $this->search_arr = $model->dealwithSearchTime($this->search_arr);
  23. //获得系统年份
  24. $year_arr = getSystemYearArr();
  25. //获得系统月份
  26. $month_arr = getSystemMonthArr();
  27. //获得本月的周时间段
  28. $week_arr = getMonthWeekArr($this->search_arr['week']['current_year'], $this->search_arr['week']['current_month']);
  29. Tpl::output('year_arr', $year_arr);
  30. Tpl::output('month_arr', $month_arr);
  31. Tpl::output('week_arr', $week_arr);
  32. }
  33. Tpl::output('search_arr', $this->search_arr);
  34. }
  35. /**
  36. * 退款统计
  37. */
  38. public function refundOp(){
  39. $where = array();
  40. if(!$this->search_arr['search_type']){
  41. $this->search_arr['search_type'] = 'day';
  42. }
  43. $model = Model('stat');
  44. //获得搜索的开始时间和结束时间
  45. $searchtime_arr = $model->getStarttimeAndEndtime($this->search_arr);
  46. $field = ' SUM(refund_amount) as amount ';
  47. if($this->search_arr['search_type'] == 'day'){
  48. //构造横轴数据
  49. for($i=0; $i<24; $i++){
  50. $stat_arr['xAxis']['categories'][] = "$i";
  51. $statlist[$i] = 0;
  52. }
  53. $field .= ' ,HOUR(FROM_UNIXTIME(add_time)) as timeval ';
  54. }
  55. if($this->search_arr['search_type'] == 'week'){
  56. //构造横轴数据
  57. for($i=1; $i<=7; $i++){
  58. $tmp_weekarr = getSystemWeekArr();
  59. //横轴
  60. $stat_arr['xAxis']['categories'][] = $tmp_weekarr[$i];
  61. unset($tmp_weekarr);
  62. $statlist[$i] = 0;
  63. }
  64. $field .= ' ,WEEKDAY(FROM_UNIXTIME(add_time))+1 as timeval ';
  65. }
  66. if($this->search_arr['search_type'] == 'month'){
  67. //计算横轴的最大量(由于每个月的天数不同)
  68. $dayofmonth = date('t',$searchtime_arr[0]);
  69. //构造横轴数据
  70. for($i=1; $i<=$dayofmonth; $i++){
  71. //横轴
  72. $stat_arr['xAxis']['categories'][] = $i;
  73. $statlist[$i] = 0;
  74. }
  75. $field .= ' ,day(FROM_UNIXTIME(add_time)) as timeval ';
  76. }
  77. $where = array();
  78. $where['add_time'] = array('between',$searchtime_arr);
  79. $statlist_tmp = $model->statByRefundreturn($where, $field, 0, 0, 'timeval asc', 'timeval');
  80. if ($statlist_tmp){
  81. foreach((array)$statlist_tmp as $k=>$v){
  82. $statlist[$v['timeval']] = floatval($v['amount']);
  83. }
  84. }
  85. //得到统计图数据
  86. $stat_arr['legend']['enabled'] = false;
  87. $stat_arr['series'][0]['name'] = '退款金额';
  88. $stat_arr['series'][0]['data'] = array_values($statlist);
  89. $stat_arr['title'] = '退款金额统计';
  90. $stat_arr['yAxis'] = '金额';
  91. $stat_json = getStatData_LineLabels($stat_arr);
  92. Tpl::output('stat_json',$stat_json);
  93. Tpl::output('searchtime',implode('|',$searchtime_arr));
  94. Tpl::output('top_link',$this->sublink($this->links, 'refund'));
  95. Tpl::showpage('stat.aftersale.refund');
  96. }
  97. /**
  98. * 退款统计
  99. */
  100. public function refundlistOp(){
  101. $model = Model('refund_return');
  102. $refundstate_arr = $model->getRefundStateArray();
  103. $where = array();
  104. $searchtime_arr_tmp = explode('|',$this->search_arr['t']);
  105. foreach ((array)$searchtime_arr_tmp as $k=>$v){
  106. $searchtime_arr[] = intval($v);
  107. }
  108. $where['add_time'] = array('between',$searchtime_arr);
  109. if ($this->search_arr['exporttype'] == 'excel'){
  110. $refundlist_tmp = $model->getRefundReturnList($where, 0);
  111. } else {
  112. $refundlist_tmp = $model->getRefundReturnList($where, 10);
  113. }
  114. $statheader = array();
  115. $statheader[] = array('text'=>'订单编号','key'=>'order_sn');
  116. $statheader[] = array('text'=>'退款编号','key'=>'refund_sn');
  117. $statheader[] = array('text'=>'店铺名','key'=>'store_name','class'=>'alignleft');
  118. $statheader[] = array('text'=>'商品名称','key'=>'goods_name','class'=>'alignleft');
  119. $statheader[] = array('text'=>'买家会员名','key'=>'buyer_name');
  120. $statheader[] = array('text'=>'申请时间','key'=>'add_time');
  121. $statheader[] = array('text'=>'退款金额','key'=>'refund_amount');
  122. $statheader[] = array('text'=>'卖家审核','key'=>'seller_state');
  123. $statheader[] = array('text'=>'平台确认','key'=>'refund_state');
  124. foreach ((array)$refundlist_tmp as $k=>$v){
  125. $tmp = $v;
  126. foreach ((array)$statheader as $h_k=>$h_v){
  127. $tmp[$h_v['key']] = $v[$h_v['key']];
  128. if ($h_v['key'] == 'add_time'){
  129. $tmp[$h_v['key']] = @date('Y-m-d',$v['add_time']);
  130. }
  131. if ($h_v['key'] == 'refund_state'){
  132. $tmp[$h_v['key']] = $v['seller_state']==2 ? $refundstate_arr['admin'][$v['refund_state']]:'无';
  133. }
  134. if ($h_v['key'] == 'seller_state'){
  135. $tmp[$h_v['key']] = $refundstate_arr['seller'][$v['seller_state']];
  136. }
  137. if ($h_v['key'] == 'goods_name'){
  138. $tmp[$h_v['key']] = '<a href="'.urlShop('goods', 'index', array('goods_id' => $v['goods_id'])).'" target="_blank">'.$v['goods_name'].'</a>';
  139. }
  140. }
  141. $statlist[] = $tmp;
  142. }
  143. if ($this->search_arr['exporttype'] == 'excel'){
  144. //导出Excel
  145. import('libraries.excel');
  146. $excel_obj = new Excel();
  147. $excel_data = array();
  148. //设置样式
  149. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  150. //header
  151. foreach ((array)$statheader as $k=>$v){
  152. $excel_data[0][] = array('styleid'=>'s_title','data'=>$v['text']);
  153. }
  154. //data
  155. foreach ((array)$statlist as $k=>$v){
  156. foreach ((array)$statheader as $h_k=>$h_v){
  157. $excel_data[$k+1][] = array('data'=>$v[$h_v['key']]);
  158. }
  159. }
  160. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  161. $excel_obj->addArray($excel_data);
  162. $excel_obj->addWorksheet($excel_obj->charset('退款记录',CHARSET));
  163. $excel_obj->generateXML($excel_obj->charset('退款记录',CHARSET).date('Y-m-d-H',time()));
  164. exit();
  165. } else {
  166. Tpl::output('statheader',$statheader);
  167. Tpl::output('statlist',$statlist);
  168. Tpl::output('show_page',$model->showpage(2));
  169. Tpl::output('searchtime',$_GET['t']);
  170. Tpl::output('actionurl',"index.php?act={$this->search_arr['act']}&op={$this->search_arr['op']}&t={$this->search_arr['t']}");
  171. Tpl::showpage('stat.listandorder','null_layout');
  172. }
  173. }
  174. /**
  175. * 店铺动态评分统计
  176. */
  177. public function evalstoreOp(){
  178. //店铺分类
  179. Tpl::output('class_list', rkcache('store_class', true));
  180. $model = Model('stat');
  181. $where = array();
  182. if(intval($_GET['store_class']) > 0){
  183. $where['sc_id'] = intval($_GET['store_class']);
  184. }
  185. if (trim($this->search_arr['storename'])){
  186. $where['seval_storename'] = array('like',"%".trim($this->search_arr['storename'])."%");
  187. }
  188. $field = ' seval_storeid, seval_storename';
  189. $field .= ' ,(SUM(seval_desccredit)/COUNT(*)) as avgdesccredit';
  190. $field .= ' ,(SUM(seval_servicecredit)/COUNT(*)) as avgservicecredit';
  191. $field .= ' ,(SUM(seval_deliverycredit)/COUNT(*)) as avgdeliverycredit';
  192. $orderby_arr = array('avgdesccredit asc','avgdesccredit desc','avgservicecredit asc','avgservicecredit desc','avgdeliverycredit asc','avgdeliverycredit desc');
  193. if (!in_array(trim($this->search_arr['orderby']),$orderby_arr)){
  194. $this->search_arr['orderby'] = 'avgdesccredit desc';
  195. }
  196. $orderby = trim($this->search_arr['orderby']).',seval_storeid';
  197. //查询评论的店铺总数
  198. $count_arr = $model->statByStoreAndEvaluatestore($where, 'count(DISTINCT evaluate_store.seval_storeid) as countnum');
  199. $countnum = intval($count_arr[0]['countnum']);
  200. if ($this->search_arr['exporttype'] == 'excel'){
  201. $statlist_tmp = $model->statByStoreAndEvaluatestore($where, $field, 0, 0, $orderby, 'seval_storeid');
  202. } else {
  203. $statlist_tmp = $model->statByStoreAndEvaluatestore($where, $field, array(10,$countnum), 0, $orderby, 'seval_storeid');
  204. }
  205. foreach((array)$statlist_tmp as $k=>$v){
  206. $tmp = $v;
  207. $tmp['avgdesccredit'] = round($v['avgdesccredit'],2);
  208. $tmp['avgservicecredit'] = round($v['avgservicecredit'],2);
  209. $tmp['avgdeliverycredit'] = round($v['avgdeliverycredit'],2);
  210. $statlist[] = $tmp;
  211. }
  212. //导出Excel
  213. if ($this->search_arr['exporttype'] == 'excel'){
  214. //导出Excel
  215. import('libraries.excel');
  216. $excel_obj = new Excel();
  217. $excel_data = array();
  218. //设置样式
  219. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  220. //header
  221. $excel_data[0][] = array('styleid'=>'s_title','data'=>'店铺名称');
  222. $excel_data[0][] = array('styleid'=>'s_title','data'=>'描述相符度');
  223. $excel_data[0][] = array('styleid'=>'s_title','data'=>'服务态度');
  224. $excel_data[0][] = array('styleid'=>'s_title','data'=>'发货速度');
  225. //data
  226. foreach ((array)$statlist as $k=>$v){
  227. $excel_data[$k+1][] = array('data'=>$v['seval_storename']);
  228. $excel_data[$k+1][] = array('data'=>$v['avgdesccredit']);
  229. $excel_data[$k+1][] = array('data'=>$v['avgservicecredit']);
  230. $excel_data[$k+1][] = array('data'=>$v['avgdeliverycredit']);
  231. }
  232. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  233. $excel_obj->addArray($excel_data);
  234. $excel_obj->addWorksheet($excel_obj->charset('店铺动态评分统计',CHARSET));
  235. $excel_obj->generateXML($excel_obj->charset('店铺动态评分统计',CHARSET).date('Y-m-d-H',time()));
  236. exit();
  237. }
  238. Tpl::output('statlist',$statlist);
  239. Tpl::output('orderby',$this->search_arr['orderby']);
  240. Tpl::output('show_page',$model->showpage(2));
  241. Tpl::output('top_link',$this->sublink($this->links, 'evalstore'));
  242. Tpl::showpage('stat.aftersale.evalstore');
  243. }
  244. }