HiValueCrontabController.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. /**
  3. * 嗨值定时任务
  4. */
  5. namespace addons\HiGo\console\controllers;
  6. use addons\HiGo\common\enums\HiGoEnum;
  7. use addons\HiGo\common\logic\HiValueLogic;
  8. use common\enums\RedisKeyEnum;
  9. use common\enums\StatusEnum;
  10. use common\helpers\LockHelper;
  11. use common\models\goods\GoodsMarketing;
  12. use common\models\mall\Mall;
  13. use common\models\mall\MallAddons;
  14. use yii\console\Controller;
  15. use yii\console\ExitCode;
  16. class HiValueCrontabController extends Controller
  17. {
  18. /**
  19. * 嗨值销毁
  20. */
  21. public function actionDestroy()
  22. {
  23. try {
  24. echo '嗨值销毁,start:';
  25. \Yii::$app->db->close();
  26. $lock_key = RedisKeyEnum::suffix('lock_hi_value_destory_');
  27. $identification = uniqid();
  28. if (!LockHelper::lock($lock_key, $identification, 60, 10)) throw new \Exception('嗨值销毁进入处理阶段,当前访问过多');
  29. $mall_list = Mall::getEnableMallList(true);
  30. $mall_ids = array_column($mall_list, 'id');
  31. if (empty($mall_ids)) {
  32. echo '没有可用商城,不做处理 ... ' . PHP_EOL;
  33. return ExitCode::UNSPECIFIED_ERROR;
  34. }
  35. $redis = \Yii::$app->redis;
  36. foreach ($mall_ids as $mall_id) {
  37. if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0) continue;
  38. $setting = \Yii::$app->services->setting->addons->get($mall_id, HiGoEnum::ADDONS_NAME, 'basic');
  39. if(!$setting || !$setting['is_enable'] || !$setting['destroy_time']) continue;
  40. //判断时间
  41. $destroy_time = strtotime(date('Y-m-d'.$setting['destroy_time']));
  42. if($destroy_time > time()) continue;
  43. //今天是否执行过
  44. $check_key = 'mall_hi_value_destroy_'.$mall_id;
  45. $check = $redis->set($check_key,1,'NX','EX',86400);
  46. if(!$check) continue;
  47. //destroy_formula : 嗨值销毁方式
  48. HiValueLogic::destroy($mall_id,$setting['destroy_formula'],$setting['destroy_ratio']);
  49. }
  50. LockHelper::uLock($lock_key,$identification);
  51. return ExitCode::OK;
  52. } catch (\Exception $e) {
  53. echo '嗨值销毁,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL;
  54. \Yii::error('嗨值销毁,执行结束失败任务处理出错:' . $e->getMessage());
  55. \Yii::getLogger()->flush(true);
  56. return ExitCode::UNSPECIFIED_ERROR;
  57. }
  58. }
  59. }