RepurchaseCrontabController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * 复购逻辑-冻结账户嗨值
  4. */
  5. namespace addons\HiGo\console\controllers;
  6. use addons\HiGo\common\enums\HiGoEnum;
  7. use addons\HiGo\common\logic\WalletLogic;
  8. use addons\HiGo\common\models\HigoWallet;
  9. use common\enums\RedisKeyEnum;
  10. use common\enums\StatusEnum;
  11. use common\helpers\LockHelper;
  12. use common\models\common\CapitalLog;
  13. use common\models\mall\Mall;
  14. use common\models\mall\MallAddons;
  15. use common\models\order\Order;
  16. use common\models\user\User;
  17. use yii\console\Controller;
  18. use yii\console\ExitCode;
  19. class RepurchaseCrontabController extends Controller
  20. {
  21. /**
  22. * 检测会员上笔订单,超出时间,冻结账户嗨值
  23. * @return void
  24. */
  25. public function actionIndex()
  26. {
  27. try {
  28. \Yii::$app->db->close();
  29. $lock_key = RedisKeyEnum::suffix('lock_higo_user_hi_value');
  30. $identification = uniqid();
  31. if (!LockHelper::lock($lock_key, $identification, 60, 10)) throw new \Exception('检测会员上笔订单,超出时间,冻结账户嗨值进入处理阶段,当前访问过多');
  32. $mall_list = Mall::getEnableMallList(true);
  33. $mall_ids = array_column($mall_list, 'id');
  34. if (empty($mall_ids)) {
  35. echo '没有可用商城,不做处理 ... ' . PHP_EOL;
  36. return ExitCode::UNSPECIFIED_ERROR;
  37. }
  38. $redis = \Yii::$app->redis;
  39. foreach ($mall_ids as $mall_id) {
  40. if (MallAddons::isInstall($mall_id, HiGoEnum::ADDONS_NAME) == 0) continue;
  41. $setting = \Yii::$app->services->setting->addons->get($mall_id, HiGoEnum::ADDONS_NAME, 'marketing');
  42. if (!$setting || !$setting['new_order_enable'] || !$setting['new_order_days']) continue;
  43. $order_start_time = strtotime('-'.$setting['new_order_days'].' day');
  44. $where = [
  45. 'and',
  46. ['mall_id' => $mall_id],
  47. ['>', 'hi_value', 0],
  48. ['status' => StatusEnum::ENABLED],
  49. ];
  50. foreach (HigoWallet::find()->where($where)->each(500) as $user_wallet) {
  51. //查询用户上一笔订单
  52. $user_id = $user_wallet->user_id;
  53. $last_order = Order::find()->where(['user_id' => $user_id,'mall_id' => $mall_id])->andWhere(['>','pay_time',$order_start_time])->one();
  54. if($last_order) continue;
  55. //未查询到订单,冻结嗨值
  56. echo '这是会员ID:'.$user_id;
  57. //注册赠送嗨值
  58. $desc = '冻结会员嗨值';
  59. $wallet_log = [
  60. 'mall_id' => $mall_id,
  61. 'user_id' => $user_id,
  62. 'change_type' => CapitalLog::CHANGE_TYPE_ADD,
  63. 'change_num' => $user_wallet->hi_value,
  64. 'desc' => $desc,
  65. 'source_table' => User::tableName(),
  66. 'source_table_id' => $user_id,
  67. 'from_type' => HiGoEnum::FROM_TYPE_REPURCHASE_ACTIVE,
  68. 'wallet_type' => HiGoEnum::WALLET_TYPE_HI_VALUE,
  69. 'is_freeze' => 1,
  70. 'from_normal_to_freeze' => 1,
  71. 'addon_name' => HiGoEnum::ADDONS_NAME,
  72. ];
  73. WalletLogic::handleInQueue($wallet_log);
  74. }
  75. }
  76. LockHelper::uLock($lock_key,$identification);
  77. return ExitCode::OK;
  78. } catch (\Exception $e) {
  79. $msg = '检测会员上笔订单,超出时间,冻结账户嗨值,执行结束失败任务处理出错:' . $e->getMessage() . PHP_EOL;
  80. echo $msg;
  81. \Yii::error($msg);
  82. \Yii::getLogger()->flush(true);
  83. return ExitCode::UNSPECIFIED_ERROR;
  84. }
  85. }
  86. }