GoodsSalesRank.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\common\model;
  13. /**
  14. * 门店销售数据每日统计模型
  15. * Class ShopsDailySalesSt
  16. * @package app\common\model
  17. */
  18. class GoodsSalesRank extends BaseModel
  19. {
  20. // 定义表名
  21. protected $name = 'goods_sales_rank';
  22. // 定义主键
  23. protected $pk = 'id';
  24. /**
  25. * 商品销量排行昨日统计数据添加
  26. * @author: zjwhust
  27. * @Time: 2022/3/31 15:31
  28. */
  29. public function addGoodsSalesRankDaily(){
  30. $orderGood = new \app\api\model\OrderGoods();
  31. $data = [];
  32. $baseTo = strtotime(date("Y-m-d"),time());
  33. $now = time();
  34. $from = $baseTo - 86400;
  35. $to = $from + 86399;
  36. $temp = [];
  37. //批量插入,当门店过多时,需优化成分批插入
  38. self::where('start_time','>=',$from)->where('end_time','<=',$to)->delete();
  39. $tj = $orderGood->addGoodsSalesRank($from,$to);
  40. if($tj){
  41. foreach ($tj as $item){
  42. $temp['sale_volume'] = $item['sale_volume'];
  43. $temp['sale_nums'] = $item['sale_nums'];
  44. $temp['goods_id'] = $item['goods_id'];
  45. $temp['start_time'] = $from;
  46. $temp['end_time'] = $to;
  47. $temp['create_time'] = $now;
  48. $temp['update_time'] = $now;
  49. $data[] = $temp;
  50. }
  51. }
  52. self::insertAll($data);
  53. }
  54. /**
  55. * 商品销量排行里诶博爱
  56. * @param $from
  57. * @param $to
  58. * @return mixed
  59. * @author: zjwhust
  60. * @Time: 2022/3/31 16:54
  61. */
  62. public function listRank($from,$to){
  63. return self::alias('r')
  64. ->where('start_time','>=',$from)
  65. ->where('end_time','<=',$to)
  66. ->field('sum(r.sale_nums) as sale_num_total,sum(r.sale_volume) as sale_volume_total,r.goods_id,g.goods_name,g.goods_no,g.goods_price_min as goods_price')
  67. ->leftJoin('goods g','g.goods_id=r.goods_id')
  68. ->group('r.goods_id')
  69. ->order('sale_num_total desc,sale_volume_total desc')
  70. ->paginate(15);
  71. }
  72. /**
  73. * 导出记录
  74. */
  75. public function export($from,$to)
  76. {
  77. $data['header'] = ['排名', '商品名称','商品编码', '商品单价(元)','销量', '销售额'];
  78. $data['filename'] = '商品销量排名导出';
  79. $data['data'] = [];
  80. $list = self::alias('r')
  81. ->where('start_time','>=',$from)
  82. ->where('end_time','<=',$to)
  83. ->field('sum(r.sale_nums) as sale_num_total,sum(r.sale_volume) as sale_volume_total,r.goods_id,g.goods_name,g.goods_no,g.goods_price_min as goods_price')
  84. ->leftJoin('goods g','g.goods_id=r.goods_id')
  85. ->group('r.goods_id')
  86. ->order('sale_num_total desc,sale_volume_total desc')
  87. ->select();
  88. foreach ($list as $k=>$arr){
  89. $new_list['rank'] = $k+1;
  90. $new_list['goods_name'] = $arr['goods_name'];
  91. $new_list['goods_no'] = $arr['goods_no'];
  92. $new_list['goods_price'] = $arr['goods_price'];
  93. $new_list['sale_num_total'] = $arr['sale_num_total'];
  94. $new_list['sale_volume_total'] = $arr['sale_volume_total'];
  95. $data['data'][] = $new_list;
  96. }
  97. return $data;
  98. }
  99. }