Stock.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Services;
  3. use App\Http\helper\NumConfig;
  4. use Illuminate\Support\Facades\DB;
  5. class Stock
  6. {
  7. public function todayRes($where)
  8. {
  9. $date = [];
  10. for ($h = 1; $h <= 24; $h++) {
  11. if ($h < 10) {
  12. $h = (string)'0' . $h;
  13. }
  14. $date[] = $h;
  15. }
  16. $query = DB::table('agent.dbo.stock_change')
  17. ->where($where)
  18. ->selectRaw("substring(CONVERT(varchar(120), mydate, 120),12,2) mydate,sum(stock) stock")
  19. ->groupBy(DB::raw('substring(CONVERT(varchar(120), mydate, 120),12,2)'))
  20. ->pluck('stock', 'mydate')->toArray();
  21. $list = [];
  22. $start_time = $where[1][2] ?? '';
  23. if (!empty($start_time)) {
  24. $start_time = strtotime($start_time);
  25. }
  26. $now = time();
  27. foreach ($date as $key => $val) {
  28. if ($now > $start_time && !empty($start_time)) {
  29. $list[] = isset($query[$val]) ? number_float($query[$val] / NumConfig::NUM_VALUE) : 0;
  30. } else {
  31. $list[] = isset($query[$val]) ? number_float($query[$val] / NumConfig::NUM_VALUE) : number_float(end($query) / NumConfig::NUM_VALUE);
  32. }
  33. }
  34. return compact('list', 'date');
  35. }
  36. function allDay($start_time, $end_time, $where = [])
  37. {
  38. $date = $this->getDateFromRange($start_time, $end_time);
  39. $query = DB::connection('read')->table('agent.dbo.stock_change')
  40. ->where('identifier', 1)
  41. ->where($where)
  42. ->where('mydate', '>=', $start_time)
  43. ->where('mydate', '<', $end_time)
  44. ->selectRaw('sum(stock) as stock,CONVERT(varchar(100),mydate,23) mydate')
  45. ->groupBy(DB::raw('CONVERT(varchar(100),mydate,23)'))
  46. ->pluck('stock', 'mydate')->toArray();
  47. $list = [];
  48. foreach ($date as $key => $val) {
  49. $list[] = isset($query[$val]) ? number_float($query[$val] / 100) : number_float(end($query) / NumConfig::NUM_VALUE);
  50. // foreach ($query as &$value) {
  51. // $list[] = $value->mydate == $val ? number_float($value->stock / 100) : 0;
  52. // }
  53. }
  54. return compact('list', 'date');
  55. }
  56. function getDateFromRange($startdate, $enddate)
  57. {
  58. $stimestamp = strtotime($startdate);
  59. $etimestamp = strtotime($enddate); // 计算日期段内有多少天
  60. $days = ($etimestamp - $stimestamp) / 86400; // 保存每天日期
  61. $date = array();
  62. for ($i = 0; $i < $days; $i++) {
  63. $date[] = date('Y-m-d', $stimestamp + (86400 * $i));
  64. }
  65. return $date;
  66. }
  67. }