GiveOutCoupon.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\store\model;
  13. use app\common\model\GiveOutCoupon as GiveOutCouponModel;
  14. use think\cache\driver\Redis;
  15. use think\facade\Queue;
  16. /**
  17. * 发放优惠券模型
  18. * Class ShopsDailySalesSt
  19. * @package app\common\model
  20. */
  21. class GiveOutCoupon extends GiveOutCouponModel
  22. {
  23. public function add($params){
  24. //主管发优惠券
  25. if ($params['role'] == 1){//系统主动发券
  26. if ($params['rev_type'] == 2){
  27. $flag = $this->gitOutActByRevUser($params);
  28. if ($flag === false){
  29. $this->error = '系统繁忙';
  30. return false;
  31. }
  32. }
  33. $params['audit_user_id'] = $params['create_admin_id'];
  34. $params['audit_time'] = date('Y-m-d H:i:s');
  35. $params['audit_status'] = 1;
  36. }else{
  37. if ($params['rev_user'] == 1){
  38. $keys = $params['mobile_keys']??'';
  39. if ($keys){
  40. $rds = new Redis(config('cache.stores.redis'));
  41. $mobiles = $rds->get($keys);
  42. if (!$mobiles){
  43. $this->error = '请导入电话号码';
  44. return false;
  45. }
  46. }else{
  47. $mobiles_str = $params['mobiles'];
  48. $mobiles_arr = explode(',',trim($mobiles_str));
  49. $mobiles = json_encode($mobiles_arr);
  50. }
  51. $params['mobiles'] = $mobiles;
  52. }
  53. }
  54. $this->save($params);
  55. return true;
  56. }
  57. private function gitOutActByRevUser(&$params,$isAudit = false){
  58. if ($params['rev_user'] == 1){//指定用户
  59. if ($isAudit == true){
  60. $mobiles = $params['mobiles'];
  61. $mobiles_str = $params['mobiles'];
  62. $mobiles_arr = json_decode($mobiles_str);
  63. }else{
  64. $keys = $params['mobile_keys']??'';
  65. if ($keys){
  66. $rds = new Redis(config('cache.stores.redis'));
  67. $mobiles = $rds->get($keys);
  68. if (!$mobiles){
  69. $this->error = '请导入电话号码';
  70. return false;
  71. }
  72. $mobiles_arr = json_decode($mobiles);
  73. }else{
  74. $mobiles_str = $params['mobiles'];
  75. $mobiles_arr = explode(',',trim($mobiles_str));
  76. $mobiles = json_encode($mobiles_arr);
  77. }
  78. }
  79. $params['mobiles'] = $mobiles;
  80. return $this->giveUserCouponAct($mobiles_arr,$params['coupon_id']);
  81. }
  82. if ($params['rev_user'] == 2){
  83. if ($params['user_type'] == 1){//新用户
  84. $newUserIds = User::getNewUserIds();
  85. return $this->giveUserCouponActByUserId($newUserIds,$params['coupon_id']);
  86. }
  87. if ($params['user_type'] == 2){//老用户
  88. $oldUserIds = User::getOldUserIds();
  89. return $this->giveUserCouponActByUserId($oldUserIds,$params['coupon_id']);
  90. }
  91. }
  92. if ($params['rev_user'] == 3){//活跃用户 todo
  93. /* if ($params['user_type'] == 7){//7日活跃用户
  94. }
  95. if ($params['user_type'] == 14){//14日活跃用户
  96. }*/
  97. return true;
  98. }
  99. return true;
  100. }
  101. private function giveUserCouponAct($mobiles_arr,$coupon_id): bool
  102. {
  103. foreach ($mobiles_arr as $mobile){
  104. $user = User::where(['mobile'=>$mobile])->field('user_id')->find();
  105. if (!$user){
  106. continue;
  107. }
  108. $this->giveOutCouponQueue($coupon_id,$user['user_id']);
  109. }
  110. return true;
  111. }
  112. private function giveUserCouponActByUserId($userIds,$coupon_id){
  113. foreach ($userIds as $userId){
  114. $this->giveOutCouponQueue($coupon_id,$userId);
  115. }
  116. return true;
  117. }
  118. public function getList($param){
  119. return $this->with(['coupon','createrAdmin','auditAdmin'])->where(['is_delete'=>0])
  120. ->field('id,coupon_id,rev_type,rev_user,reason,audit_status,audit_time,create_admin_id,audit_user_id')
  121. ->order('id desc')->paginate(15);
  122. }
  123. public function coupon(){
  124. return $this->belongsTo(Coupon::class,'coupon_id','coupon_id');
  125. }
  126. public function createrAdmin(){
  127. return $this->belongsTo(\app\store\model\store\User::class,'create_admin_id','store_user_id')
  128. ->field('store_user_id,user_name,real_name');
  129. }
  130. public function auditAdmin(){
  131. return $this->belongsTo(\app\store\model\store\User::class,'audit_user_id','store_user_id')
  132. ->field('store_user_id,user_name,real_name');
  133. }
  134. public function audit($param){
  135. $this->where('id',$param['id'])->update($param);
  136. if ($param['audit_status'] == 1){
  137. $params = $this->where('id',$param['id'])->find();
  138. //主管发优惠券
  139. if ($params['rev_type'] == 2){//系统主动发券
  140. //dd($params->toArray());
  141. $this->gitOutActByRevUser($params,true);
  142. }
  143. }
  144. return true;
  145. }
  146. /**
  147. * 给用户发券队列
  148. * @param $coupon_id
  149. * @param $user_id
  150. * @return bool
  151. */
  152. public function giveOutCouponQueue($coupon_id,$user_id){
  153. $jobHandlerClassName = 'app\job\GiveOutCouponToUser';
  154. $jobQueueName = "orderWaitCommissionsQueue";
  155. //数组数据
  156. $orderData = [
  157. 'coupon_id' => $coupon_id,
  158. 'user_id' => $user_id,
  159. ];
  160. $isPushed = Queue::push($jobHandlerClassName, $orderData ,$jobQueueName);
  161. //$isPushed = Queue::later(5, $jobHandlerClassName, $orderData, $jobQueueName);
  162. if( $isPushed !== false ){
  163. return true;
  164. }else{
  165. log_record('加队列失败:'.$coupon_id.'--'.$user_id,'error');
  166. return false;
  167. }
  168. }
  169. public function detail($id){
  170. $d = $this->with(['coupon','createrAdmin','auditAdmin'])->where(['id'=>$id,'is_delete'=>0])
  171. ->field('id,coupon_id,rev_type,rev_user,user_type,mobiles,reason,audit_status,audit_time,create_admin_id,audit_user_id')
  172. ->find();
  173. if ($d['mobiles']){
  174. $d['mobiles'] = json_decode($d['mobiles']);
  175. $d['mobiles'] = implode(',',$d['mobiles']);
  176. }else{
  177. $d['mobiles'] = '';
  178. }
  179. return $d;
  180. }
  181. }