SubNotice.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Http\Controllers\Manager\Process;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Manager\External\Company as CompanyModel;
  5. use App\Jobs\Manager\Process\SubNoticeJobs;
  6. use App\Models\Manager\Process\ExecuteLog as ExecuteLogModel;
  7. use App\Models\Manager\Process\SubNoticeLog as SubNoticeLogModel;
  8. use Illuminate\Support\Carbon;
  9. use Illuminate\Support\Facades\DB;
  10. /**
  11. * 违规处理订阅推送
  12. * @author 唐远望
  13. * @version 1.0
  14. * @date 2026-03-30
  15. */
  16. class SubNotice extends Controller
  17. {
  18. /**
  19. * 执行通知推送任务
  20. * @author 唐远望
  21. * @version 1.0
  22. * @date 2025-12-11
  23. *
  24. */
  25. public function push_notice(CompanyModel $CompanyModel, ExecuteLogModel $ExecuteLogModel, SubNoticeLogModel $SubNoticeLogModel)
  26. {
  27. $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00
  28. $todayEnd = Carbon::today()->endOfDay()->getTimestamp(); // 今天结束时间 23:59:59
  29. //查询今日是否存在通知推送记录
  30. $sub_notice_count = $SubNoticeLogModel->query()->where([['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  31. if ($sub_notice_count > 0) return 1;
  32. //查询低价商品清洗清洗情况
  33. $action1 = $ExecuteLogModel->query()->where([['code', '=', 'LowPriceGoodsJobs'], ['status', '=', '0'], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  34. if ($action1 < 1) return 2;
  35. //查询违规产品清洗清洗情况
  36. $action2 = $ExecuteLogModel->query()->where([['code', '=', 'ViolationProductJobs'], ['status', '=', '0'], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  37. if ($action2 < 1) return 3;
  38. //查询违规门店清洗清洗情况
  39. $action3 = $ExecuteLogModel->query()->where([['code', '=', 'ViolationStoreJobs'], ['status', '=', '0'], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  40. if ($action3 < 1) return 4;
  41. // 检查队列是否全部执行完毕
  42. $jobClasses = [
  43. 'LowPriceGoodsDataJobs',
  44. 'LowPriceGoodsJobs',
  45. 'ViolationProductDataJobs',
  46. 'ViolationProductJobs',
  47. 'ViolationStoreDataJobs',
  48. 'ViolationStoreJobs',
  49. ];
  50. $pendingJobs = DB::table('jobs')->where(function ($query) use ($jobClasses) {
  51. foreach ($jobClasses as $class) {
  52. $query->orWhere('payload', 'like', '%' . $class . '%');
  53. }
  54. })->count();
  55. if ($pendingJobs > 0) return 5;
  56. // 查询数据
  57. $result = $CompanyModel->query()->get()->toArray();
  58. // 分配数据
  59. if (!$result) return 6;
  60. foreach ($result as $key => $item) {
  61. $message_data = ['company_id' => $item['id']];
  62. SubNoticeJobs::dispatch($message_data);
  63. // SubNoticeJobs::dispatchSync($message_data);
  64. }
  65. // 增加通知推送记录
  66. $SubNoticeLogModel->query()->insert(['insert_time' => time()]);
  67. // 告知结果
  68. return 7;
  69. }
  70. }