where(['status' => StatusEnum::ENABLED,'is_grant'=>'0']); $new_time = time(); foreach ($IssueCoupons->batch(200) as $detail){//分批查询标签 foreach ($detail as $k=>$v){ if($v['timing_time'] && $v['timing_time']<$new_time){ //var_dump($v['id']); $this->executesend($v); } } } } catch (Exception $e) { self::$static_error = $e->getMessage(); return false; } } //手动执行 public function handsend($params){ if($params['id']){ $where[] = ['=','id',$params['id']]; $where[] = ['=','is_grant','0']; $rule = IssueCouponsRule::getOne($where,true); if($rule){ $this->executesend($rule); } } } //执行发送 public function executesend($rule){ if($rule){ //更新是否已经执行 $rule = IssueCouponsRule::findOne(['id'=>$rule['id']]); $rule->is_grant = 1; $rule->save(); switch ($rule['grant_object']){ case 1://发放全部会员 $user_data = User::find()->where(['status' => StatusEnum::ENABLED,'mall_id'=>$rule['mall_id']]); break; case 2://发放指定等级会员 $level_user = json_decode($rule['grant_object_content']); $user_data = User::find()->where(['status' => StatusEnum::ENABLED,'mall_id'=>$rule['mall_id']])->andWhere(['in','level',$level_user]); break; case 3://发放指定标签会员 $level_user = json_decode($rule['grant_object_content']); $user_label = UserLabelRelationship::find()->where(['status' => StatusEnum::ENABLED,'mall_id'=>$rule['mall_id']])->andWhere(['in','label_id',$level_user]); //var_dump($user_label);die; foreach ($user_label->batch(200) as $label){//分批查询标签 $user_ids = []; foreach ($label as $k=>$v){ $user_ids[] = $v['user_id']; } $user_data = User::find()->where(['status' => StatusEnum::ENABLED,'mall_id'=>$rule['mall_id']])->andWhere(['in','id',$user_ids]); } break; case 4://发放指定会员 $level_user = json_decode($rule['grant_object_content']); $user_data = User::find()->where(['status' => StatusEnum::ENABLED,'mall_id'=>$rule['mall_id']])->andWhere(['in','id',$level_user]); break; } $this->sendData($user_data,$rule); } } //发送优惠卷 public function sendData($user_data,$data){ $send['score'] = 0; $send['balance'] = 0; $send['redpack'] = 0; $send['coupon'] = 0; $send['e_coupon'] = 0; foreach ($user_data->batch(200) as $user_data){ $insert_score_wallet = []; foreach ($user_data as $k=>$v){ if(isset($data['score']) && $data['score']){//充值积分 $wallet['user_id'] = $v['id']; $wallet['mall_id'] = $v['mall_id']; $send['score'] += $data['score']; $insert_score_wallet [] = ['mall_id' => $data['mall_id'], 'user_id' => $v['id'], 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_SCORE, 'money' => $data['score'], 'desc' => '发券宝充值积分', 'source_table' => IssueCouponsEnum::ADDONSNAME, 'source_table_id' => $v['id'], 'from_type' => UserWalletEnum::REWARD, 'capital_type' => UserWalletEnum::GIVE, ]; } if(isset($data['balance']) && $data['balance']){//送余额 $wallet['user_id'] = $v['id']; $wallet['mall_id'] = $v['mall_id']; $send['balance'] += $data['balance']; $insert_balance_wallet [] = ['mall_id' => $data['mall_id'], 'user_id' => $v['id'], 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'money' => $data['balance'], 'desc' => '发券宝充值余额', 'source_table' => IssueCouponsEnum::ADDONSNAME, 'source_table_id' => $v['id'], 'from_type' => UserWalletEnum::REWARD, 'capital_type' => UserWalletEnum::GIVE, ]; } if(isset($data['redpack']) && $data['redpack']){//发红包 $redpack['mall_id'] = $v['mall_id']; $redpack['user_id'] = $v['id']; $redpack['is_frozen'] = false; $redpack['money'] = $data['redpack']; $redpack['from_type'] = 1; $redpack['source_table'] = IssueCouponsEnum::ADDONSNAME; $redpack['source_table_id'] = $v['id']; $has_redpack = MallAddons::isInstall($v['mall_id'],IssueCouponsEnum::ADDONSREDPACK); if($has_redpack){ RedpackWallet::setData($redpack); $send['redpack'] += $data['redpack']; }else{ $msg['msg'][0] = "红包插件未安装"; } } if(isset($data['coupon']) && $data['coupon']){//送优惠卷 $coupon = json_decode($data['coupon'],true); if($coupon){ foreach ($coupon as $key=>$value){ $coupon_data = []; $coupon_data[$value['id']] = $value['num']; $has = MallAddons::isInstall($v['mall_id'],IssueCouponsEnum::ADDONSCOUPON); if($has){ AddonsCouponUserRelate::giveCoupon($v['mall_id'],$v['id'],$coupon_data,1); //var_dump(AddonsCouponUserRelate::getStaticError()); $send['coupon'] += $value['num']; }else{ $msg['msg'][1] = "优惠卷插件未安装"; } } } } if(isset($data['e_coupon']) && $data['e_coupon']){//送电子卷 $coupon = json_decode($data['e_coupon'],true); if($coupon){ foreach ($coupon as $key=>$value){ $coupon_data['user_id'] = $v['id']; $coupon_data['e_coupon_id'] = $value['id']; $coupon_data['pieces_amount'] = $value['num']; $coupon_data['get_type'] = 3; $coupon_data['mall_id'] = $v['mall_id']; $has = MallAddons::isInstall($v['mall_id'],IssueCouponsEnum::ADDONSELETRONCOUPON); if($has){ $res = ElectronCouponUserCoupon::userReceiveCoupon($coupon_data); //var_dump(ElectronCouponUserCoupon::getStaticError()); $send['e_coupon'] += $value['num']; }else{ $msg['msg'][2] = "电子券插件未安装"; } } } } //添加会员记录 $this->adduUserLog($v,$data); } //发送积分 if($insert_score_wallet){ $res_score = UserWalletService::batchHandleByQueue($insert_score_wallet); if ($res_score === false) return $this->error(UserWallet::getStaticError()); } //发送余额 if($insert_balance_wallet){ $res_balance = UserWalletService::batchHandleByQueue($insert_balance_wallet); if ($res_balance === false) return $this->error(UserWallet::getStaticError()); } } //进行统计发放 //var_dump($send);die; $this->statistics($data,$send); return $send; } //进行统计 public function statistics($data,$send){ $statistics_data = [ 'rule_id' => $data['id'], 'mall_id' => $data['mall_id'], 'e_coupon_num' => $send['e_coupon'], 'coupon_num' => $send['coupon'], 'redpack_num' => $send['redpack'], 'balance_num' => $send['balance'], 'score_num' => $send['score'], 'grant_object' => $data['grant_object'], 'grant_object_content' => $data['grant_object_content'], 'send_times' => 1, ]; $resadd = IssueCouponsStatistics::setData($statistics_data); //添加发送记录 $res_log = IssueCouponsSendLog::setData($statistics_data); } //添加会员记录 public function adduUserLog($add_log,$data){ //添加会员记录 $add_log = [ 'rule_id' => $data['id'], 'user_id' => $add_log['id'], 'mall_id' => $add_log['mall_id'], 'grant_object' => $data['grant_object'], //'grant_object_content' => $data['grant_object_content'], ]; $resadd = IssueCouponsUser::setData($add_log); //var_dump(IssueCouponsUser::getStaticError()); } }