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

155 lines
5.0 KiB

  1. <?php
  2. namespace App\Admin\Metrics\Examples\Order;
  3. use App\Models\ImsCjdcOrder;
  4. use App\Models\ImsCjdcOrderMain;
  5. use Dcat\Admin\Widgets\Metrics\Card;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. class OrderData extends Card
  9. {
  10. protected $title;
  11. protected $data_type;
  12. protected $market_id;
  13. protected $user_ids;
  14. public function __construct($data_type = null, $market_id = null, $title = null, $uid = [], $icon = null)
  15. {
  16. $this->title = $title;
  17. $this->data_type = $data_type;
  18. $this->market_id = $market_id;
  19. $this->user_ids = $uid;
  20. parent::__construct($title, $icon);
  21. }
  22. public function init()
  23. {
  24. parent::init(); // TODO: Change the autogenerated stub
  25. $this->dropdown([
  26. '1' => '今日',
  27. '-1' => '昨日',
  28. '7' => '最近7天',
  29. 'w' => '本周',
  30. 'lw' => '上周',
  31. '30' => '本月',
  32. '-30' => '上月'
  33. ]);
  34. }
  35. public function handle(Request $request)
  36. {
  37. $type = $request->get('option');//数据选项
  38. $data_type = $request->get('data_type');//数据类型
  39. $market_id = $request->get('market_id');//市场id
  40. $user_ids = $request->get('user_ids');//市场id
  41. $this->content($this->orderNum($data_type, $type, $market_id, $user_ids));
  42. }
  43. public function orderDataBuild($type = null, $marketId = null)
  44. {
  45. $where = [];
  46. $where['type'] = 1;
  47. if ($marketId) {
  48. if (is_array($marketId)) {
  49. $where[] = ['in' => ['market_id' => $marketId]];
  50. } else {
  51. $where['market_id'] = $marketId;
  52. }
  53. }
  54. switch ($type) {
  55. case '1':
  56. $beginTime = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
  57. $endTime = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;
  58. break;
  59. case '-1':
  60. $beginTime = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'));
  61. $endTime = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 1;
  62. break;
  63. case '7':
  64. $beginTime = mktime(0, 0, 0, date('m'), date('d') - 7, date('Y'));
  65. $endTime = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;
  66. break;
  67. case 'w':
  68. $beginTime = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1, date("Y"));
  69. $endTime = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7, date("Y"));
  70. break;
  71. case 'lw':
  72. $beginTime = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1 - 7, date("Y"));
  73. $endTime = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7 - 7, date("Y"));
  74. break;
  75. case '30':
  76. $beginTime = mktime(0, 0, 0, date('m'), 1, date('Y'));
  77. $endTime = mktime(23, 59, 59, date('m'), date('t'), date('Y'));
  78. break;
  79. case '-30':
  80. $beginTime = mktime(0, 0, 0, date('m') - 1, 1, date('Y'));
  81. $endTime = strtotime(date("Y-m-d H:i:s", mktime(23, 59, 59, date("m"), 0, date("Y"))));
  82. break;
  83. default:
  84. $beginTime = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
  85. $endTime = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;
  86. break;
  87. }
  88. $build = ImsCjdcOrderMain
  89. ::whereBetween('created_at', [$beginTime, $endTime])
  90. ->whereIn('state', [3, 4, 5, 10])
  91. ->where($where);
  92. return $build;
  93. }
  94. public function orderNum($data_type, $type, $marketId, $user_ids)
  95. {
  96. $build = $this->orderDataBuild($type, $marketId);
  97. if ($user_ids){
  98. $build = $build->whereIn('user_id',$user_ids);
  99. }
  100. if ($data_type == 'number') {
  101. $result = $build->count();
  102. } elseif ($data_type == 'amount') {
  103. $result = $build->sum('money');
  104. } elseif ($data_type == 'user') {
  105. if ($user_ids){
  106. $result = $build->groupBy('user_id')
  107. ->pluck('user_id')
  108. ->toArray();
  109. $result = count($result);
  110. }else{
  111. $result = 0;
  112. }
  113. } else {
  114. $result = 0;
  115. }
  116. return $result;
  117. }
  118. // 传递自定义参数到 handle 方法
  119. public function parameters(): array
  120. {
  121. return [
  122. 'data_type' => $this->data_type,
  123. 'market_id' => $this->market_id,
  124. 'user_ids' => $this->user_ids
  125. ];
  126. }
  127. /**
  128. * 渲染卡片内容
  129. * @return string
  130. */
  131. public function renderContent()
  132. {
  133. $content = parent::renderContent();
  134. return <<<HTML
  135. <div class="d-flex justify-content-between bg-primary align-items-center mt-1" style="margin-bottom: 2px">
  136. <h2 class="ml-1 font-large-1">{$content}</h2>
  137. </div>
  138. HTML;
  139. }
  140. }