SubNotice.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. use App\Jobs\Manager\Process\SendNoticeJobs;
  11. use Illuminate\Support\Facades\Cache;
  12. /**
  13. * 违规处理订阅推送
  14. * @author 唐远望
  15. * @version 1.0
  16. * @date 2026-03-30
  17. */
  18. class SubNotice extends Controller
  19. {
  20. /**
  21. * 执行通知推送任务
  22. * @author 唐远望
  23. * @version 1.0
  24. * @date 2025-12-11
  25. *
  26. */
  27. public function push_notice(CompanyModel $CompanyModel, ExecuteLogModel $ExecuteLogModel, SubNoticeLogModel $SubNoticeLogModel)
  28. {
  29. $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00
  30. $todayEnd = Carbon::today()->endOfDay()->getTimestamp(); // 今天结束时间 23:59:59
  31. // 查询数据
  32. $result = $CompanyModel->query()->get()->toArray();
  33. // 分配数据
  34. if (!$result) return 5;
  35. $key_index = 0;
  36. foreach ($result as $key => $item) {
  37. $second = 60 * $key_index; // 每个商户延迟 60 秒
  38. //查询低价商品清洗清洗情况
  39. $action1 = $ExecuteLogModel->query()->where([['code', '=', 'LowPriceGoodsJobs'], ['company_id', '=', $item['id']], ['status', '=', '0'], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  40. if ($action1 < 1) continue;
  41. //查询违规产品清洗清洗情况
  42. $action2 = $ExecuteLogModel->query()->where([['code', '=', 'ViolationProductJobs'], ['company_id', '=', $item['id']], ['status', '=', '0'], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  43. if ($action2 < 1) continue;
  44. //查询违规门店清洗清洗情况
  45. $action3 = $ExecuteLogModel->query()->where([['code', '=', 'ViolationStoreJobs'], ['company_id', '=', $item['id']], ['status', '=', '0'], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  46. if ($action3 < 1) continue;
  47. // 准备数据
  48. $message_data = ['company_id' => $item['id']];
  49. //如果今日存在通知推送记录,则跳过统计
  50. $sub_notice_count = $SubNoticeLogModel->query()->where([['company_id', '=', $item['id']], ['insert_time', '>=', $todayStart], ['insert_time', '<=', $todayEnd]])->count();
  51. if ($sub_notice_count > 0) {
  52. //执行发送通知任务
  53. SendNoticeJobs::dispatch($message_data);
  54. // SendNoticeJobs::dispatchSync($message_data);
  55. } else {
  56. $key_name = 'SubNoticeJobs_company_id_' . $item['id'];
  57. $sub_noticeJobs_data_info = Cache::get($key_name);
  58. if ($sub_noticeJobs_data_info) continue;
  59. //创建缓存
  60. Cache::put($key_name,'1', 86400); // 每个商户每天只统计执行一次
  61. //执行统计任务
  62. SubNoticeJobs::dispatch($message_data)->delay($second);
  63. // SubNoticeJobs::dispatchSync($message_data)->delay($second);;
  64. }
  65. $key_index++;
  66. }
  67. // 告知结果
  68. return 6;
  69. }
  70. }