123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare (strict_types = 1);
- namespace app\store\model;
- use app\common\model\GiveOutCoupon as GiveOutCouponModel;
- use think\cache\driver\Redis;
- use think\facade\Queue;
- /**
- * 发放优惠券模型
- * Class ShopsDailySalesSt
- * @package app\common\model
- */
- class GiveOutCoupon extends GiveOutCouponModel
- {
- public function add($params){
- //主管发优惠券
- if ($params['role'] == 1){//系统主动发券
- if ($params['rev_type'] == 2){
- $flag = $this->gitOutActByRevUser($params);
- if ($flag === false){
- $this->error = '系统繁忙';
- return false;
- }
- }
- $params['audit_user_id'] = $params['create_admin_id'];
- $params['audit_time'] = date('Y-m-d H:i:s');
- $params['audit_status'] = 1;
- }else{
- if ($params['rev_user'] == 1){
- $keys = $params['mobile_keys']??'';
- if ($keys){
- $rds = new Redis(config('cache.stores.redis'));
- $mobiles = $rds->get($keys);
- if (!$mobiles){
- $this->error = '请导入电话号码';
- return false;
- }
- }else{
- $mobiles_str = $params['mobiles'];
- $mobiles_arr = explode(',',trim($mobiles_str));
- $mobiles = json_encode($mobiles_arr);
- }
- $params['mobiles'] = $mobiles;
- }
- }
- $this->save($params);
- return true;
- }
- private function gitOutActByRevUser(&$params,$isAudit = false){
- if ($params['rev_user'] == 1){//指定用户
- if ($isAudit == true){
- $mobiles = $params['mobiles'];
- $mobiles_str = $params['mobiles'];
- $mobiles_arr = json_decode($mobiles_str);
- }else{
- $keys = $params['mobile_keys']??'';
- if ($keys){
- $rds = new Redis(config('cache.stores.redis'));
- $mobiles = $rds->get($keys);
- if (!$mobiles){
- $this->error = '请导入电话号码';
- return false;
- }
- $mobiles_arr = json_decode($mobiles);
- }else{
- $mobiles_str = $params['mobiles'];
- $mobiles_arr = explode(',',trim($mobiles_str));
- $mobiles = json_encode($mobiles_arr);
- }
- }
- $params['mobiles'] = $mobiles;
- return $this->giveUserCouponAct($mobiles_arr,$params['coupon_id']);
- }
- if ($params['rev_user'] == 2){
- if ($params['user_type'] == 1){//新用户
- $newUserIds = User::getNewUserIds();
- return $this->giveUserCouponActByUserId($newUserIds,$params['coupon_id']);
- }
- if ($params['user_type'] == 2){//老用户
- $oldUserIds = User::getOldUserIds();
- return $this->giveUserCouponActByUserId($oldUserIds,$params['coupon_id']);
- }
- }
- if ($params['rev_user'] == 3){//活跃用户 todo
- /* if ($params['user_type'] == 7){//7日活跃用户
- }
- if ($params['user_type'] == 14){//14日活跃用户
- }*/
- return true;
- }
- return true;
- }
- private function giveUserCouponAct($mobiles_arr,$coupon_id): bool
- {
- foreach ($mobiles_arr as $mobile){
- $user = User::where(['mobile'=>$mobile])->field('user_id')->find();
- if (!$user){
- continue;
- }
- $this->giveOutCouponQueue($coupon_id,$user['user_id']);
- }
- return true;
- }
- private function giveUserCouponActByUserId($userIds,$coupon_id){
- foreach ($userIds as $userId){
- $this->giveOutCouponQueue($coupon_id,$userId);
- }
- return true;
- }
- public function getList($param){
- return $this->with(['coupon','createrAdmin','auditAdmin'])->where(['is_delete'=>0])
- ->field('id,coupon_id,rev_type,rev_user,reason,audit_status,audit_time,create_admin_id,audit_user_id')
- ->order('id desc')->paginate(15);
- }
- public function coupon(){
- return $this->belongsTo(Coupon::class,'coupon_id','coupon_id');
- }
- public function createrAdmin(){
- return $this->belongsTo(\app\store\model\store\User::class,'create_admin_id','store_user_id')
- ->field('store_user_id,user_name,real_name');
- }
- public function auditAdmin(){
- return $this->belongsTo(\app\store\model\store\User::class,'audit_user_id','store_user_id')
- ->field('store_user_id,user_name,real_name');
- }
- public function audit($param){
- $this->where('id',$param['id'])->update($param);
- if ($param['audit_status'] == 1){
- $params = $this->where('id',$param['id'])->find();
- //主管发优惠券
- if ($params['rev_type'] == 2){//系统主动发券
- //dd($params->toArray());
- $this->gitOutActByRevUser($params,true);
- }
- }
- return true;
- }
- /**
- * 给用户发券队列
- * @param $coupon_id
- * @param $user_id
- * @return bool
- */
- public function giveOutCouponQueue($coupon_id,$user_id){
- $jobHandlerClassName = 'app\job\GiveOutCouponToUser';
- $jobQueueName = "orderWaitCommissionsQueue";
- //数组数据
- $orderData = [
- 'coupon_id' => $coupon_id,
- 'user_id' => $user_id,
- ];
- $isPushed = Queue::push($jobHandlerClassName, $orderData ,$jobQueueName);
- //$isPushed = Queue::later(5, $jobHandlerClassName, $orderData, $jobQueueName);
- if( $isPushed !== false ){
- return true;
- }else{
- log_record('加队列失败:'.$coupon_id.'--'.$user_id,'error');
- return false;
- }
- }
- public function detail($id){
- $d = $this->with(['coupon','createrAdmin','auditAdmin'])->where(['id'=>$id,'is_delete'=>0])
- ->field('id,coupon_id,rev_type,rev_user,user_type,mobiles,reason,audit_status,audit_time,create_admin_id,audit_user_id')
- ->find();
- if ($d['mobiles']){
- $d['mobiles'] = json_decode($d['mobiles']);
- $d['mobiles'] = implode(',',$d['mobiles']);
- }else{
- $d['mobiles'] = '';
- }
- return $d;
- }
- }
|