链街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.

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