| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /**
- * 嗨呗定时任务
- */
- namespace addons\HiGo\console\controllers;
- use addons\HiGo\common\enums\HiGoEnum;
- use addons\HiGo\common\logic\HiBeiLogic;
- use common\enums\RedisKeyEnum;
- use common\enums\StatusEnum;
- use common\helpers\LockHelper;
- use common\models\goods\GoodsMarketing;
- use common\models\mall\Mall;
- use common\models\mall\MallAddons;
- use yii\console\Controller;
- use yii\console\ExitCode;
- class HiBeiCrontabController extends Controller
- {
- /**
- * 嗨贝空投
- */
- public function actionAirdrop()
- {
- try {
- echo '嗨贝空投,start:';
- \Yii::$app->db->close();
- $lock_key = RedisKeyEnum::suffix('lock_hi_bei_send_');
- $identification = uniqid();
- if (!LockHelper::lock($lock_key, $identification, 60, 10)) throw new \Exception('嗨贝空投进入处理阶段,当前访问过多');
- $mall_list = Mall::getEnableMallList(true);
- $mall_ids = array_column($mall_list, 'id');
- if (empty($mall_ids)) {
- echo '没有可用商城,不做处理 ... ' . PHP_EOL;
- return ExitCode::UNSPECIFIED_ERROR;
- }
- $redis = \Yii::$app->redis;
- foreach ($mall_ids as $mall_id) {
- if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0) continue;
- $setting = \Yii::$app->services->setting->addons->get($mall_id, HiGoEnum::ADDONS_NAME, 'basic');
- if(!$setting || !$setting['is_enable'] || !$setting['airdrop_time']) continue;
- //判断时间
- $airdrop_time = strtotime(date('Y-m-d '.$setting['airdrop_time']));
- if($airdrop_time > time()) continue;
- //今天是否执行过
- $check_key = 'mall_airdrop_'.$mall_id;
- $ttl = strtotime(date('Y-m-d',strtotime('+1 day'))) - time();
- $check = $redis->set($check_key,1,'NX','EX',$ttl);
- if(!$check) continue;
- HiBeiLogic::airdrop($mall_id);
- }
- LockHelper::uLock($lock_key,$identification);
- return ExitCode::OK;
- } catch (\Exception $e) {
- echo '嗨贝空投,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL;
- \Yii::error('嗨贝空投,执行结束失败任务处理出错:' . $e->getMessage());
- \Yii::getLogger()->flush(true);
- return ExitCode::UNSPECIFIED_ERROR;
- }
- }
- }
|