链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.6 KiB

  1. <?php
  2. namespace App\Admin\Repositories\v3;
  3. use App\Models\LanzuOrderGoods as Model;
  4. use Dcat\Admin\Grid\Model as GridModel;
  5. use Dcat\Admin\Repositories\EloquentRepository;
  6. use Illuminate\Support\Facades\DB;
  7. class GoodsActivityReport extends EloquentRepository
  8. {
  9. public $params = [];
  10. /**
  11. * Model.
  12. *
  13. * @var string
  14. */
  15. protected $eloquentClass = Model::class;
  16. public function __construct($params = [])
  17. {
  18. $this->params = $params;
  19. }
  20. /**
  21. * 获取统计列表数据
  22. */
  23. public function get(GridModel $model)
  24. {
  25. // 获取当前页数
  26. $currentPage = $model->getCurrentPage();
  27. // 获取每页显示行数
  28. $perPage = $model->getPerPage();
  29. $where = [];
  30. if(!empty($this->params) && isset($this->params['market_id']) && !empty($this->params['market_id'])){
  31. $where = ['market_id'=>$this->params['market_id']];
  32. }
  33. $selects = 'SUM(number) as total,SUM((original_price-price)*number) as subsidy_total,price,original_price,lanzu_order_goods.goods_id,lanzu_order_goods.name,lanzu_order_goods.cover_img,lanzu_order_main.market_id,lanzu_order.store_id';
  34. $orderGoodsActivity = $this->getDataModel($selects,$where);
  35. $list = $orderGoodsActivity->orderBy('total','desc')->groupBy('goods_id','lanzu_order_goods.name','cover_img','market_id','store_id','price','original_price')->paginate($perPage);
  36. $list = $list->toArray();
  37. return $model->makePaginator(
  38. $list['total'] ?? 0,$list['data'] ?? []
  39. );
  40. }
  41. public function getDataModel($selects,$params = [])
  42. {
  43. $time = date('Y-m-d',time());
  44. // 获取筛选参数
  45. $name = $params['name'] ?? request()->input('name', '');
  46. $marketId = $params['market_id'] ?? request()->input('market_id',0);
  47. $storeId = $params['store_id'] ?? request()->input('store_id',0);
  48. $startTime = $params['start_time'] ?? request()->input('start_time','');
  49. $endTime = $params['end_time'] ?? request()->input('end_time','');
  50. $orderGoodsActivity = Model::select(DB::raw($selects))
  51. ->join('lanzu_order','lanzu_order_goods.order_id','=','lanzu_order.id')
  52. ->join('lanzu_order_main','lanzu_order.order_main_id','=','lanzu_order_main.global_order_id')
  53. ->where('lanzu_order_goods.activity_type',2)
  54. ->where('lanzu_order_goods.status',1)
  55. ->whereIn('lanzu_order_main.state',[4,5,10,11]);
  56. if($name){
  57. $orderGoodsActivity->where('lanzu_order_goods.name','like',"%$name%");
  58. }
  59. if($marketId){
  60. $orderGoodsActivity->where('market_id',$marketId);
  61. }
  62. if($storeId){
  63. $orderGoodsActivity->where('store_id',$storeId);
  64. }
  65. if($startTime){
  66. $date = $startTime;
  67. $startTime = $startTime.' 00:00:00';
  68. $orderGoodsActivity->where('lanzu_order_goods.created_at','>=',strtotime($startTime));
  69. }else{
  70. $date = '2020-06-01';
  71. }
  72. if($endTime){
  73. $date = $date.' 至 '.$endTime;
  74. $endTime = $endTime.' 23:59:59';
  75. $orderGoodsActivity->where('lanzu_order_goods.created_at','<=',strtotime($endTime));
  76. }else{
  77. $date .= ' 至 '.$time;
  78. }
  79. // if(empty($startTime) && empty($endTime)){
  80. // $date = $time;
  81. // $todayStart = $time.' 00:00:00';
  82. // $todayEnd = $time.' 23:59:59';
  83. // $orderGoodsActivity->where([['lanzu_order_goods.created_at','>=',strtotime($todayStart)]]);
  84. // $orderGoodsActivity->where([['lanzu_order_goods.created_at','<=',strtotime($todayEnd)]]);
  85. // }
  86. return $orderGoodsActivity;
  87. }
  88. /**
  89. * 获取总数
  90. */
  91. public function getCountData($params = [])
  92. {
  93. $selects = "SUM(lanzu_order_goods.number) as total,SUM((original_price-price)*number) as subsidy_total,FROM_UNIXTIME(lanzu_order_goods.created_at,'%Y-%m-%d') as dtime";
  94. $orderGoodsActivity = $this->getDataModel($selects,$params);
  95. $total = $orderGoodsActivity->groupBy('dtime')->get()->toArray();
  96. return $total ?? [];
  97. }
  98. /**
  99. * 分市场获取
  100. */
  101. public function getMarketData($params = [])
  102. {
  103. $selects = "SUM(lanzu_order_goods.number) as total,SUM((original_price-price)*number) as subsidy_total,market_id";
  104. $orderGoodsActivity = $this->getDataModel($selects,$params);
  105. $total = $orderGoodsActivity->groupBy('market_id')->get()->toArray();
  106. return $total ?? [];
  107. }
  108. }