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

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