| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- <?php
- namespace addons\IssueCoupons\common\logic;
- use addons\Coupon\common\models\AddonsCouponUserRelate;
- use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
- use addons\IssueCoupons\common\enums\IssueCouponsEnum;
- use addons\IssueCoupons\common\models\IssueCouponsRule;
- use addons\IssueCoupons\common\models\IssueCouponsSendLog;
- use addons\IssueCoupons\common\models\IssueCouponsStatistics;
- use addons\IssueCoupons\common\models\IssueCouponsUser;
- use addons\Redpack\common\models\Redpack;
- use addons\Redpack\common\models\RedpackWallet;
- use common\enums\RabbitMqEnum;
- use common\enums\RedisKeyEnum;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\helpers\LockHelper;
- use common\helpers\StringHelper;
- use common\models\mall\MallAddons;
- use common\models\user\User;
- use common\models\user\UserLabel;
- use common\models\user\UserLabelRelationship;
- use common\models\user\UserWallet;
- use common\traits\ErrorTrait;
- use Faker\Provider\Address;
- use PHPUnit\Util\Exception;
- use services\common\UserWalletService;
- use yii;
- /**
- * Class LotteryLogic
- * @Author: ltm
- * @DateTime: 2021/12/23 0023 10:21
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package addons\Sudoku\common\logic
- */
- class Send
- {
- use ErrorTrait;
- /**
- * @Author: ltm
- * @DateTime: 2021/12/23 0023 10:21
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $data['score'] 积分
- * @param $data['user_id'] 会员ID
- * @return bool
- */
- //自动执行
- public function execute()
- {
- //handsend
- try {
- $IssueCoupons = IssueCouponsRule::find()->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());
- }
- }
|