UpdateMemberLevel.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\event;
  11. use addon\coupon\model\Coupon;
  12. use app\model\member\MemberAccount;
  13. use app\model\member\MemberLevel;
  14. /**
  15. * 会员等级变化(执行会员成长值变化)
  16. */
  17. class UpdateMemberLevel
  18. {
  19. // 行为扩展的执行入口必须是run
  20. public function handle($data)
  21. {
  22. $member_account_model = new MemberAccount();
  23. model('member_account')->startTrans();
  24. try {
  25. if ($data[ 'account_type' ] == 'growth') {
  26. //成长值变化等级检测变化
  27. $member_info = model("member")->getInfo([ [ 'member_id', '=', $data[ 'member_id' ] ] ], 'growth,member_level,member_level_type,nickname');
  28. //查询会员等级
  29. $member_level = new MemberLevel();
  30. $level_list = $member_level->getMemberLevelList([ [ 'growth', '<=', $member_info[ 'growth' ] ], [ 'level_type', '=', 0 ], [ 'site_id', '=', $data[ 'site_id' ] ], ['status', '=', 1] ], 'level_id, level_name, sort, growth, send_point, send_balance, send_coupon', 'growth desc');
  31. $level_detail = [];
  32. if ($member_info[ 'member_level_type' ] == 0 && !empty($level_list[ 'data' ])) {
  33. //检测升级
  34. if ($member_info[ 'member_level' ] == 0) {
  35. //将用户设置为最大等级
  36. $level_detail = $level_list[ 'data' ][ 0 ];
  37. } else {
  38. $level_info = $member_level->getMemberLevelInfo([ [ 'level_id', '=', $member_info[ 'member_level' ] ] ]);
  39. if (empty($level_info[ 'data' ])) {
  40. $level_detail = $level_list[ 'data' ][ 0 ];
  41. } else {
  42. if ($level_info[ 'data' ][ 'growth' ] < $level_list[ 'data' ][ 0 ][ 'growth' ]) {
  43. $level_detail = $level_list[ 'data' ][ 0 ];
  44. }
  45. }
  46. }
  47. }
  48. // 如果存在已升级等级 发放升级奖励
  49. if (!empty($level_detail)) {
  50. // 添加会员卡变更记录
  51. $member_level->addMemberLevelChangeRecord($data[ 'member_id' ], $data[ 'site_id' ], $level_detail[ 'level_id' ], 0, 'upgrade', $data[ 'member_id' ], 'member', $member_info[ 'nickname' ]);
  52. if ($level_detail[ 'send_balance' ] > 0) {
  53. //赠送红包
  54. $balance = $level_detail[ 'send_balance' ];
  55. $member_account_model->addMemberAccount($data[ 'site_id' ], $data[ 'member_id' ], 'balance', $balance, 'upgrade', '会员升级得红包' . $balance, '会员等级升级奖励');
  56. }
  57. if ($level_detail[ 'send_point' ] > 0) {
  58. //赠送积分
  59. $send_point = $level_detail[ 'send_point' ];
  60. $member_account_model->addMemberAccount($data[ 'site_id' ], $data[ 'member_id' ], 'point', $send_point, 'upgrade', '会员升级得积分' . $send_point, '会员等级升级奖励');
  61. }
  62. //给用户发放优惠券
  63. $coupon_model = new Coupon();
  64. $coupon_array = empty($level_detail[ 'send_coupon' ]) ? [] : explode(',', $level_detail[ 'send_coupon' ]);
  65. if (!empty($coupon_array)) {
  66. foreach ($coupon_array as $k => $v) {
  67. $coupon_model->receiveCoupon($v, $data[ 'site_id' ], $data[ 'member_id' ], 3);
  68. }
  69. }
  70. }
  71. }
  72. model('member_account')->commit();
  73. return $member_account_model->success();
  74. } catch (\Exception $e) {
  75. model('member_account')->rollback();
  76. return $member_account_model->error('', $e->getMessage());
  77. }
  78. }
  79. }