AttendTimeLogic.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace addons\LuckyGroup\common\logic\attend;
  3. use addons\LuckyGroup\common\enums\LuckyGroupEnum;
  4. use addons\LuckyGroup\common\models\LuckyGroupAttendTimesLog;
  5. use addons\LuckyGroup\common\models\LuckyGroupLevel;
  6. use addons\LuckyGroup\common\models\LuckyGroupUser;
  7. use common\enums\StatusEnum;
  8. use common\traits\ErrorTrait;
  9. class AttendTimeLogic
  10. {
  11. use ErrorTrait;
  12. /**
  13. * @name:
  14. * @msg: 每日更新参团会员的参团次数
  15. * @param {int} $mall_id
  16. * @return {*}
  17. */
  18. public static function addUserAttendTimes(int $mall_id)
  19. {
  20. $group_levels = LuckyGroupLevel::find()
  21. ->select('level,init_attend_times')
  22. ->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED])
  23. ->asArray()
  24. ->indexBy('level')
  25. ->all();
  26. $group_users_query = LuckyGroupUser::find()->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]);
  27. $time = time();
  28. foreach ($group_users_query->batch(200) as $group_users) {
  29. if (!empty($group_users)) {
  30. foreach ($group_users as $user) {
  31. $group_level = $group_levels[$user->level] ?? [];
  32. $user->clear_attend_times_at = $time;
  33. $user->give_attend_times_at = $time;
  34. $attend_times = $group_level['init_attend_times'] ?? 0;
  35. if ($attend_times == 0 && $user->level == 0) {
  36. $attend_times = \Yii::$app->services->setting->addons->get($mall_id, LuckyGroupEnum::ADDONS_NAME, 'basic.default_level_attend_times');
  37. }
  38. $before_attend_times = $user->attend_times ?? 0;
  39. $user->attend_times = $attend_times;
  40. $res = $user->save();
  41. if (false === $res) {
  42. \Yii::error('自动更新参团会员参团次数失败: errmsg => ' . $user->getErrorMessage() . ', user_id => ' . $user->user_id . ', level => ' . $user->level . ', attend_times => ' . $group_level['init_attend_times'] ?? 0);\Yii::getLogger()->flush(true);
  43. echo '自动更新参团会员参团次数失败: errmsg => ' . $user->getErrorMessage() . PHP_EOL;
  44. continue;
  45. }
  46. $insert_data[] = [$mall_id, $user->user_id, $attend_times, $before_attend_times, '系统每日重置参团会员的参团次数', 1, 1, $time, $time];
  47. }
  48. if (!empty($insert_data)) {
  49. $fields = ['mall_id', 'user_id', 'num', 'before_num', 'desc', 'type', 'status', 'created_at', 'updated_at'];
  50. $res = \Yii::$app->db->createCommand()->batchInsert(LuckyGroupAttendTimesLog::tableName(), $fields, $insert_data)->execute();
  51. if (empty($res)) {
  52. \Yii::error('自动更新参团会员参团次数失败: errmsg => 批量插入更新参团次数日志记录失败。insert_data => ' . var_export($insert_data, true));\Yii::getLogger()->flush(true);
  53. echo '自动更新参团会员参团次数失败: errmsg => 批量插入更新参团次数日志记录失败' . PHP_EOL;
  54. continue;
  55. }
  56. }
  57. }
  58. }
  59. return true;
  60. }
  61. }