RegisterAwardLogic.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace app\common\logic;
  3. use app\adminapi\logic\marketing\CouponLogic;
  4. use app\common\enum\AccountLogEnum;
  5. use app\common\enum\CouponEnum;
  6. use app\common\model\AccountLog;
  7. use app\common\model\Coupon;
  8. use app\common\model\CouponList;
  9. use app\common\model\User;
  10. use app\common\service\ConfigService;
  11. use think\facade\Db;
  12. class RegisterAwardLogic extends BaseLogic
  13. {
  14. static function getConfig()
  15. {
  16. $config = [
  17. 'status' => ConfigService::get('register_award', 'status', 0),
  18. 'user_integral_status' => ConfigService::get('register_award', 'user_integral_status', 0),
  19. 'user_integral_num' => ConfigService::get('register_award', 'user_integral_num', ''),
  20. 'user_money_status' => ConfigService::get('register_award', 'user_money_status', 0),
  21. 'user_money_num' => ConfigService::get('register_award', 'user_money_num', ''),
  22. 'coupon_status' => ConfigService::get('register_award', 'coupon_status', 0),
  23. 'coupon_array' => (array) ConfigService::get('register_award', 'coupon_array', []),
  24. // 1:风格1 2:风格2
  25. 'style' => ConfigService::get('register_award', 'style', 1),
  26. ];
  27. $hidden = [
  28. 'send_total_type', 'send_total',
  29. 'use_time_type', 'use_time_start', 'use_time_end', 'use_time',
  30. 'get_type', 'get_num_type', 'get_num',
  31. 'use_goods_ids',
  32. 'create_time', 'update_time', 'delete_time',
  33. ];
  34. $cIds = [];
  35. foreach ($config['coupon_array'] as $key => $item) {
  36. if (isset($item['id'])) {
  37. $cIds[] = $item['id'];
  38. } else {
  39. unset($config['coupon_array'][$key]);
  40. }
  41. }
  42. if ($cIds) {
  43. $lists = Coupon::field(true)
  44. ->where('id', 'in', array_column($config['coupon_array'], 'id'))
  45. ->where([ 'status' => CouponEnum::COUPON_STATUS_CONDUCT ])
  46. ->append([ 'is_available', 'is_receive', 'condition', 'is_empty', 'use_time_text', 'use_time_text2', 'discount_content', 'use_time_text', 'use_time_text2' ])
  47. ->hidden($hidden)
  48. ->withAttr('is_empty', function ($value, $data) {
  49. // 判断优惠券是否库存已空
  50. unset($value);
  51. if ($data['send_total_type'] == CouponEnum::SEND_TOTAL_TYPE_FIXED) {
  52. if ($data['send_total'] <= 0) {
  53. return 1;
  54. }
  55. $receiveTotal = (new CouponList())->where(['coupon_id'=>intval($data['id'])])->count();
  56. if ($receiveTotal >= $data['send_total']) {
  57. return 1;
  58. }
  59. }
  60. return 0;
  61. })
  62. ->order('id', 'desc')
  63. ->select()
  64. ->toArray();
  65. $lists = array_column($lists, null, 'id');
  66. foreach ($config['coupon_array'] as $key => $item) {
  67. $config['coupon_array'][$key] = $lists[$item['id']] ?? $item;
  68. }
  69. }
  70. return $config;
  71. }
  72. static function setConfig(array $params)
  73. {
  74. ConfigService::set('register_award', 'status', $params['status'] ?? 0);
  75. ConfigService::set('register_award', 'user_integral_status', $params['user_integral_status'] ?? 0);
  76. ConfigService::set('register_award', 'user_integral_num', $params['user_integral_num'] ?? 0);
  77. ConfigService::set('register_award', 'user_money_status', $params['user_money_status'] ?? 0);
  78. ConfigService::set('register_award', 'user_money_num', $params['user_money_num'] ?? 0);
  79. ConfigService::set('register_award', 'coupon_status', $params['coupon_status'] ?? 0);
  80. ConfigService::set('register_award', 'coupon_array', (array) ($params['coupon_array'] ?? []));
  81. ConfigService::set('register_award', 'style', $params['style'] ?? 1);
  82. return true;
  83. }
  84. static function registerAward($userId)
  85. {
  86. $config = static::getConfig();
  87. // 未开启注册额奖励
  88. if (! $config['status']) {
  89. return true;
  90. }
  91. if ($config['user_integral_status'] == 1 && $config['user_integral_num'] > 0) {
  92. User::update([
  93. 'id' => $userId,
  94. 'user_integral' => Db::raw('user_integral+' . $config['user_integral_num']),
  95. ]);
  96. AccountLogLogic::add($userId, AccountLogEnum::INTEGRAL_INC_USER_REGISTER, AccountLogEnum::INC, $config['user_integral_num']);
  97. }
  98. if ($config['user_money_status'] == 1 && $config['user_money_num'] > 0) {
  99. User::update([
  100. 'id' => $userId,
  101. 'user_money' => Db::raw('user_money+' . $config['user_money_num']),
  102. ]);
  103. AccountLogLogic::add($userId, AccountLogEnum::BNW_INC_USER_REGISTER, AccountLogEnum::INC, $config['user_money_num']);
  104. }
  105. if ($config['coupon_status'] == 1) {
  106. foreach ($config['coupon_array'] as $coupon) {
  107. CouponLogic::send([
  108. 'id' => $coupon['id'],
  109. 'send_user_num' => 1,
  110. 'send_user' => [ $userId ],
  111. ]);
  112. }
  113. }
  114. }
  115. }