Нет описания

AssignJuxingAdToRds.php 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\JuxingAdAccount;
  4. use App\Support\Log;
  5. use App\Support\RedisModel;
  6. use Illuminate\Console\Command;
  7. class AssignJuxingAdToRds extends Command
  8. {
  9. /**
  10. * The name and signature of the console command.
  11. *
  12. * @var string
  13. */
  14. protected $signature = 'AssignJuxingAdToRds';
  15. /**
  16. * The console command description.
  17. *
  18. * @var string
  19. */
  20. protected $description = '分配广告主爬取数据';
  21. protected $advertiserIds = null;
  22. protected $liveDayAgo = 14;
  23. /**
  24. * Create a new command instance.
  25. *
  26. * @return void
  27. */
  28. public function __construct()
  29. {
  30. parent::__construct();
  31. }
  32. /**
  33. * Execute the console command.
  34. *
  35. * @return int
  36. */
  37. public function handle()
  38. {
  39. $this->info(date('H:i') . ' 开始执行');
  40. $this->start();
  41. $this->info(date('H:i') . ' 结束执行');
  42. return 0;
  43. }
  44. public function start($newAdvertiserId = null)
  45. {
  46. # 可以设置时间规则
  47. list($H, $I) = explode(':', date('H:i'));
  48. if (!is_null($newAdvertiserId)) {
  49. $this->liveDayAgo = 90;
  50. $this->advertiserIds = [$newAdvertiserId];
  51. }
  52. if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 5)) ||((($H % 6) == 5) && ($I == 0))) {
  53. $advertiserIds = $this->getAdvertiserIds();
  54. if (!empty($advertiserIds)) $this->getStarVideo($advertiserIds);
  55. }
  56. if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 10)) ||((($H % 6) == 5) && ($I == 5))) {
  57. $advertiserIds = $this->getAdvertiserIds();
  58. if (!empty($advertiserIds)) $this->getStarLive($advertiserIds);
  59. }
  60. if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 15)) ||((($H % 6) == 5) && ($I == 10))) {
  61. $advertiserIds = $this->getAdvertiserIds();
  62. if (!empty($advertiserIds)) $this->getQtaskVideo($advertiserIds);
  63. }
  64. if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 20)) ||((($H % 6) == 5) && ($I == 15))) {
  65. $advertiserIds = $this->getAdvertiserIds();
  66. if (!empty($advertiserIds)) $this->getQtaskLive($advertiserIds);
  67. }
  68. // if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 25)) ||((($H % 6) == 5) && ($I == 20))) {
  69. // $advertiserIds = $this->getAdvertiserIds();
  70. // # 每6小时同步一次全部账户的所有助推订单
  71. // if (!empty($advertiserIds)) $this->getFlowQtaskVideo($advertiserIds, 1);
  72. // }
  73. if (!is_null($newAdvertiserId) || ($I % 30 == 2)) {
  74. $advertiserIds = $this->getAdvertiserIds();
  75. # 每30分钟同步一次全部账户的近90天助推订单
  76. if (!empty($advertiserIds)) $this->getFlowQtaskVideo($advertiserIds, 2);
  77. }
  78. if (!is_null($newAdvertiserId) || ($I % 10 == 3)) {
  79. $advertiserIds = $this->getAdvertiserIds();
  80. # 每10分钟同步一次全部账户的近14天助推订单
  81. if (!empty($advertiserIds)) $this->getFlowQtaskVideo($advertiserIds, 3);
  82. }
  83. // if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 25)) ||((($H % 6) == 5) && ($I == 20))) {
  84. // $advertiserIds = $this->getAdvertiserIds();
  85. // # 每6小时同步一次全部账户的所有助推订单
  86. // if (!empty($advertiserIds)) $this->getFlowStarVideo($advertiserIds, 1);
  87. // }
  88. if (!is_null($newAdvertiserId) || ($I % 30 == 2)) {
  89. $advertiserIds = $this->getAdvertiserIds();
  90. # 每30分钟同步一次全部账户的近90天助推订单
  91. if (!empty($advertiserIds)) $this->getFlowStarVideo($advertiserIds, 2);
  92. }
  93. if (!is_null($newAdvertiserId) || ($I % 5 == 3)) {
  94. $advertiserIds = $this->getAdvertiserIds();
  95. # 每5分钟同步一次全部账户的近14天助推订单
  96. if (!empty($advertiserIds)) $this->getFlowStarVideo($advertiserIds, 3);
  97. }
  98. if (!is_null($newAdvertiserId) || (($H == 0) && ($I == 35)) ||((($H % 6) == 5) && ($I == 30))) {
  99. $advertiserIds = $this->getAdvertiserIds();
  100. if (!empty($advertiserIds)) $this->getFlowStarLive($advertiserIds);
  101. }
  102. if ((($I % 5) == 4)) {
  103. $advertiserIds = $this->getAdvertiserIds();
  104. if (!empty($advertiserIds)) $this->getDailyFlowStarVideo($advertiserIds);
  105. }
  106. }
  107. public function getAdvertiserIds()
  108. {
  109. if (is_null($this->advertiserIds)) {
  110. $advertiserIds = JuxingAdAccount::query()
  111. ->where('enable', 1)
  112. ->pluck('advertiser_id')
  113. ->all();
  114. $this->advertiserIds = $advertiserIds;
  115. }
  116. return $this->advertiserIds;
  117. }
  118. /**
  119. * 获取星视频数据
  120. * @param $advertiserIds
  121. */
  122. public function getStarVideo($advertiserIds)
  123. {
  124. # 设置时间
  125. // $stTime = '2022-11-01';
  126. $stTime = date('Y-m-d', strtotime("-{$this->liveDayAgo} day"));
  127. $enTime = date('Y-m-d');
  128. # 获取时间段数组
  129. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  130. foreach ($advertiserIds as $advertiserId) {
  131. foreach ($timeRangeArr as $timeRange) {
  132. # 插入队列
  133. $advertiserItem = [
  134. 'advertiserId' => $advertiserId,
  135. 'timeRange' => $timeRange
  136. ];
  137. RedisModel::lPush(JuxingAdAccount::JUXING_STAR_VIDEO_SYNC_ADVID_LIST, json_encode($advertiserItem));
  138. # 输出日志
  139. // Log::info('获取星视频数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  140. }
  141. }
  142. }
  143. /**
  144. * 获取星直播数据
  145. * @param $advertiserIds
  146. */
  147. public function getStarLive($advertiserIds)
  148. {
  149. # 设置时间
  150. $stTime = date('Y-m-d', strtotime("-{$this->liveDayAgo} day"));
  151. $enTime = date('Y-m-d');
  152. # 获取时间段数组
  153. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  154. foreach ($advertiserIds as $advertiserId) {
  155. foreach ($timeRangeArr as $timeRange) {
  156. # 插入队列
  157. $advertiserItem = [
  158. 'advertiserId' => $advertiserId,
  159. 'stTime' => $timeRange['st'],
  160. 'enTime' => $timeRange['en']
  161. ];
  162. RedisModel::lPush(JuxingAdAccount::JUXING_STAR_LIVE_SYNC_ADVID_LIST, json_encode($advertiserItem));
  163. # 输出日志
  164. // Log::info('获取星直播数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  165. }
  166. }
  167. }
  168. /**
  169. * 获取星任务视频
  170. * @param $advertiserIds
  171. */
  172. public function getQtaskVideo($advertiserIds)
  173. {
  174. # 设置时间
  175. // $stTime = '2022-11-01';
  176. $stTime = date('Y-m-d', strtotime("-{$this->liveDayAgo} day"));
  177. $enTime = date('Y-m-d');
  178. # 获取时间段数组
  179. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  180. foreach ($advertiserIds as $advertiserId) {
  181. foreach ($timeRangeArr as $timeRange) {
  182. # 插入队列
  183. $advertiserItem = [
  184. 'advertiserId' => $advertiserId,
  185. 'timeRange' => $timeRange
  186. ];
  187. RedisModel::lPush(JuxingAdAccount::JUXING_QTASK_VIDEO_SYNC_ADVID_LIST, json_encode($advertiserItem));
  188. # 输出日志
  189. // Log::info('获取星任务视频数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  190. }
  191. }
  192. }
  193. /**
  194. * 获取星任务直播
  195. * @param $advertiserIds
  196. */
  197. public function getQtaskLive($advertiserIds)
  198. {
  199. # 设置时间
  200. $stTime = date('Y-m-d', strtotime("-{$this->liveDayAgo} day"));
  201. $enTime = date('Y-m-d');
  202. # 获取时间段数组
  203. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  204. foreach ($advertiserIds as $advertiserId) {
  205. foreach ($timeRangeArr as $timeRange) {
  206. # 插入队列
  207. $advertiserItem = [
  208. 'advertiserId' => $advertiserId,
  209. 'stTime' => $timeRange['st'],
  210. 'enTime' => $timeRange['en']
  211. ];
  212. RedisModel::lPush(JuxingAdAccount::JUXING_QTASK_LIVE_SYNC_ADVID_LIST, json_encode($advertiserItem));
  213. # 输出日志
  214. // Log::info('获取星任务直播数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  215. }
  216. }
  217. }
  218. /**
  219. * 获取流量助推-星任务-视频数据
  220. * @param $advertiserIds
  221. */
  222. public function getFlowQtaskVideo($advertiserIds, $type)
  223. {
  224. switch($type) {
  225. case 2:
  226. $stTime = date('Y-m-d', strtotime('-90 days'));
  227. break;
  228. case 3:
  229. $stTime = date('Y-m-d', strtotime('-14 days'));
  230. break;
  231. default:
  232. $stTime = '2022-11-01';
  233. break;
  234. }
  235. # 设置时间
  236. $enTime = date('Y-m-d');
  237. # 获取时间段数组
  238. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  239. foreach ($advertiserIds as $advertiserId) {
  240. foreach ($timeRangeArr as $timeRange) {
  241. # 插入队列
  242. $advertiserItem = [
  243. 'advertiserId' => $advertiserId,
  244. 'timeRange' => $timeRange
  245. ];
  246. RedisModel::lPush(JuxingAdAccount::JUXING_FLOW_QTASK_VIDEO_SYNC_ADVID_LIST, json_encode($advertiserItem));
  247. # 输出日志
  248. // Log::info('获取流量助推-星任务-视频数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  249. }
  250. }
  251. }
  252. /**
  253. * 获取流量助推-星视频数据
  254. * @param $advertiserIds
  255. */
  256. public function getFlowStarVideo($advertiserIds, $type)
  257. {
  258. # 设置时间
  259. switch($type) {
  260. case 2:
  261. $stTime = date('Y-m-d', strtotime('-90 days'));
  262. break;
  263. case 3:
  264. $stTime = date('Y-m-d', strtotime('-14 days'));
  265. break;
  266. default:
  267. $stTime = '2022-11-01';
  268. break;
  269. }
  270. $enTime = date('Y-m-d');
  271. # 获取时间段数组
  272. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  273. foreach ($advertiserIds as $advertiserId) {
  274. foreach ($timeRangeArr as $timeRange) {
  275. # 插入队列
  276. $advertiserItem = [
  277. 'advertiserId' => $advertiserId,
  278. 'timeRange' => $timeRange
  279. ];
  280. RedisModel::lPush(JuxingAdAccount::JUXING_FLOW_STAR_VIDEO_SYNC_ADVID_LIST, json_encode($advertiserItem));
  281. # 输出日志
  282. // Log::info('获取流量助推-星视频数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  283. }
  284. }
  285. }
  286. /**
  287. * 获取流量助推-星直播数据
  288. * @param $advertiserIds
  289. */
  290. public function getFlowStarLive($advertiserIds)
  291. {
  292. # 设置时间
  293. // $stTime = '2022-11-01';
  294. $stTime = date('Y-m-d', strtotime("-{$this->liveDayAgo} day"));
  295. $enTime = date('Y-m-d');
  296. # 获取时间段数组
  297. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  298. foreach ($advertiserIds as $advertiserId) {
  299. foreach ($timeRangeArr as $timeRange) {
  300. # 插入队列
  301. $advertiserItem = [
  302. 'advertiserId' => $advertiserId,
  303. 'timeRange' => $timeRange
  304. ];
  305. RedisModel::lPush(JuxingAdAccount::JUXING_FLOW_STAR_LIVE_SYNC_ADVID_LIST, json_encode($advertiserItem));
  306. # 输出日志
  307. // Log::info('获取流量助推-星直播数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  308. }
  309. }
  310. }
  311. /**
  312. * 获取流量助推-星视频每日数据
  313. * @param $advertiserIds
  314. */
  315. public function getDailyFlowStarVideo($advertiserIds)
  316. {
  317. # 设置时间
  318. $stTime = date('Y-m-d', strtotime("-41 day"));
  319. $enTime = date('Y-m-d');
  320. # 获取时间段数组
  321. $timeRangeArr = getTimeRangeArr($stTime, $enTime);
  322. foreach ($advertiserIds as $advertiserId) {
  323. # 插入队列
  324. $advertiserItem = [
  325. 'advertiserId' => $advertiserId,
  326. 'timeRangeArr' => $timeRangeArr
  327. ];
  328. RedisModel::lPush(JuxingAdAccount::JUXING_FLOW_STAR_VIDEO_DAILY_SYNC_ADVID_LIST, json_encode($advertiserItem));
  329. # 输出日志
  330. // Log::info('获取流量助推-星视频订单每日数据入队列成功', $advertiserItem, 'AssignJuxingAdToRds');
  331. }
  332. }
  333. }