canyin-project/ybcy/models/common/Member.php
2024-11-01 16:07:54 +08:00

1076 lines
42 KiB
PHP

<?php
namespace app\models\common;
use Yii;
use yii\db\ActiveRecord;
use app\models\common\WeChat;
use EasyWeChat\Factory;
use yii\db\Expression;
class Member extends ActiveRecord{
/**
* @param $userId [用户id]
* @param $origin [1平台2用户]
* @param $balance [余额]
* @param $type [1.加2.减]
* @param $note [备注]
* @param $uniacid [小程序id]
* @param int $accountId [操作员id]
* @return bool
* @throws \yii\db\Exception
*/
public static function saveBalance($userId, $origin, $balance, $type, $note,$uniacid,$accountId=0){
if(!$balance){
return false;
}
$transaction = Yii::$app->db->beginTransaction();//开始事务
$user=(new \yii\db\Query())
->select('balance,WeChatCardCode,WeChatCardId,WeChatCard')
->from('{{%ybwm_member}}')
->where('id=:id for update', [':id' => $userId])->one();
$data['accountId'] = $accountId;
$data['userId'] = $userId;
$data['origin'] = $origin;
$data['money'] = $balance;
$data['type'] = $type;
$data['note'] = $note;
$data['createdAt'] = time();
$data['uniacid'] = $uniacid;
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_user_balance}}', $data)->execute();
if(!$res){
$transaction->rollBack();//事务回滚
return false;
}
if($type==1){
$newBalance=bcadd($user['balance'],$balance,2);
}else{
$newBalance=bcsub($user['balance'],$balance,2)<0?0:bcsub($user['balance'],$balance,2);
}
$balance=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', ['balance'=>$newBalance], 'id=:id', ['id' =>$userId])->execute();
if(!$balance){
$transaction->rollBack();//事务回滚
return false;
}
if($user['WeChatCard'] == 1){
$update = array(
"code" => $user['WeChatCardCode'],
"card_id" => $user['WeChatCardId'],
"custom_field_value2" => "¥ " . $newBalance,
"notify_optional" => array(
"is_notify_custom_field1" => true,
"is_notify_custom_field2" => true,
),
);
$app=Factory::officialAccount(WeChat::getWeChatTemplateConfig($uniacid));
$card = $app->card;
$card->member_card->updateUser($update);
}
$transaction->commit();//提交事务
return true;
}
/**发放优惠券
* @param $couponId [优惠券id数组]
* @param $userId [用户id]
* @param $receiveType [领取类型]
* @return bool
* @throws \yii\db\Exception
*/
public static function receiveCoupon($couponId,$userId,$receiveType=1){
$coupon=(new \yii\db\Query())
->from('{{%ybwm_coupon}}')
->where(['in','id',$couponId])
->all();
$data=[];
for($i=0;$i<count($coupon);$i++){
$data['couponId']=$coupon[$i]['id'];
$data['userId']=$userId;
$data['type']=$coupon[$i]['type'];
$data['money']=$coupon[$i]['money']?:0;
$data['fullMoney']=$coupon[$i]['fullMoney']?:0;
$data['discount']=$coupon[$i]['discount']?:0;
if($coupon[$i]['timeType']==1){
$data['useStartTime']=$coupon[$i]['useStartTime'];
$data['useEndTime']=$coupon[$i]['useEndTime'];
}else{
if($coupon[$i]['isNextDay']==1){//次日起
$data['useStartTime']=time()+86400;
$data['useEndTime']=time()+$coupon[$i]['day']*86400+86400;
}else{
$data['useStartTime']=time();
$data['useEndTime']=time()+$coupon[$i]['day']*86400;
}
}
$data['useType']=$coupon[$i]['useType'];
$data['receiveType']=$receiveType;
$data['couponName']=$coupon[$i]['name'];
$data['couponDetails']=$coupon[$i]['details'];
$data['storeType']=$coupon[$i]['storeType'];
$data['storeArr']=$coupon[$i]['storeArr']?:'';
$data['goodsType']=$coupon[$i]['goodsType'];
$data['goodsArr']=$coupon[$i]['goodsArr']?:'';
$data['memberLabel']=$coupon[$i]['memberLabel']?:'';
$data['memberType']=$coupon[$i]['memberType']?:1;
$data['uniacid']=$coupon[$i]['uniacid'];
$data['storeId']=$coupon[$i]['storeId'];
$data['subsidy']=0;
if($coupon[$i]['storeType']==2 || $coupon[$i]['storeType']==3){
$data['subsidy']=$coupon[$i]['subsidy'];//平台补贴
}
$data['createdAt']=time();
Yii::$app->db->createCommand()->insert('{{%ybwm_user_coupon}}', $data)->execute();
}
return true;
}
/**下单返红包
* @param $grantId
* @param $userId
* @return bool
* @throws \yii\db\Exception
*/
public static function grantCoupon($grantId,$userId){
$coupon=(new \yii\db\Query())
->from('{{%ybwm_order_grant_coupon}}')
->where('id=:id',[':id'=>$grantId])
->one();
$data=[];
$data['storeId']=$coupon['storeId'];
$data['couponId']=$grantId;
$data['userId']=$userId;
$data['type']=1;
$data['money']=$coupon['money'];
$data['fullMoney']=$coupon['fullMoney'];
if($coupon['timeType']==1){
$data['useStartTime']=$coupon['useStartTime'];
$data['useEndTime']=$coupon['useEndTime'];
}else{
if($coupon['isNextDay']==1){//次日起
$data['useStartTime']=time()+86400;
$data['useEndTime']=time()+$coupon['day']*86400+86400;
}else{
$data['useStartTime']=time();
$data['useEndTime']=time()+$coupon['day']*86400;
}
}
$data['useType']=json_encode([1]);
$data['receiveType']=4;
$data['couponName']=$coupon['name'];
$data['couponDetails']='';
$data['storeType']=$coupon['storeType'];
$data['storeArr']=$coupon['storeArr'];
$data['goodsType']=1;
$data['goodsArr']='';
$data['uniacid']=$coupon['uniacid'];
$data['createdAt']=time();
Yii::$app->db->createCommand()->insert('{{%ybwm_user_coupon}}', $data)->execute();
return true;
}
/**
* @param $userId [用户id]
* @param $origin [1平台2用户3签到]
* @param $growth [成长值]
* @param $type [1加2减]
* @param $note [备注]
* @param null $uniacid [小程序id]
* @param int $accountId [操作员id]
* @return bool
* @throws \yii\db\Exception
*/
public static function saveGrowth($userId, $origin, $growth, $type, $note, $uniacid = null,$accountId=0){
if(!$growth){
return true;
}
$user=(new \yii\db\Query())
->select('growth,level')
->from('{{%ybwm_member}}')
->where('id=:id', [':id' => $userId])->one();
if(!$user['level']){
return true;
}
$data['accountId'] = $accountId;
$data['userId'] = $userId;
$data['origin'] = $origin;
$data['growth'] = $growth?:0;
$data['type'] = $type;
$data['note'] = $note;
$data['createdAt'] = time();
$data['uniacid'] = $uniacid;
$transaction = Yii::$app->db->beginTransaction(); //开始事务
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_user_growth}}', $data)->execute();
if(!$res){
$transaction->rollBack();//事务回滚
return false;
}
if($type==1){
$newBalance=bcadd($user['growth'],$growth,0);
}else{
$newBalance=bcsub($user['growth'],$growth,0)<0?0:bcsub($user['growth'],$growth,0);
}
$balance=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', ['growth'=>$newBalance], 'id=:id', ['id' =>$userId])->execute();
if(!$balance){
$transaction->rollBack();//事务回滚
return false;
}
$card=(new \yii\db\Query())
->from('{{%ybwm_user_card}}')
->where('uniacid=:uniacid', [':uniacid' => $uniacid])
->andWhere(['<=','condition',$newBalance])
->andWhere(['>','level',$user['level']])
->orderBy('level desc')
->one();
if($card){
$upgrade=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', ['level'=>$card['level']], 'id=:id', ['id' =>$userId])->execute();
if(!$upgrade){
$transaction->rollBack();//事务回滚
return false;
}
if($card['isBalance']==1){
$saveBalance=Member::saveBalance($userId, 2, $card['balance'], 1, '会员卡升级',$uniacid);
if(!$saveBalance){
$transaction->rollBack();
return false;
}
}
if($card['isIntegral']==1){
$saveIntegral=Member::saveIntegral($userId, 2, $card['integral'], 1, '会员卡升级',$uniacid);
if(!$saveIntegral){
$transaction->rollBack();
return false;
}
}
if($card['isGrowth']==1){
$saveGrowth=Member::saveGrowth($userId, 2, $card['growth'], 1, '会员卡升级',$uniacid);
if(!$saveGrowth){
$transaction->rollBack();
return false;
}
}
$coupon=json_decode($card['coupon'],true);
//发放优惠券
$receiveCoupon=Member::receiveCoupon($coupon, $userId,12);
if(!$receiveCoupon){
$transaction->rollBack();
return false;
}
}
$transaction->commit();//提交事务
return true;
}
/**
* @param $userId [用户id]
* @param $origin [1平台2用户3签到]
* @param $integral [积分]
* @param $type [1加2减]
* @param $note [备注]
* @param null $uniacid [小程序id]
* @param string $signTime
* @param int $accountId [操作员id]
* @return bool
* @throws \yii\db\Exception
*/
public static function saveIntegral($userId, $origin, $integral, $type, $note, $uniacid = null,$signTime='',$accountId=0){
if(!$integral){
return false;
}
$user=(new \yii\db\Query())
->select('integral,WeChatCard,WeChatCardCode,WeChatCardId')
->from('{{%ybwm_member}}')
->where('id=:id', [':id' => $userId])->one();
if($origin==3){
//新签到用户
$sign=(new \yii\db\Query())
->select('id')
->from('{{%ybwm_user_integral}}')
->where('userId=:userId AND origin=3', [':userId' => $userId])->one();
if(!$sign){
$data['newUser']=1;
}
}
$data['accountId'] = $accountId;
$data['userId'] = $userId;
$data['origin'] = $origin;
$data['integral'] = $integral?:0;
$data['type'] = $type;
$data['note'] = $note;
$data['createdAt'] = time();
$data['signTime'] = $signTime;
$data['uniacid'] = $uniacid;
$transaction = Yii::$app->db->beginTransaction(); //开始事务
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_user_integral}}', $data)->execute();
if(!$res){
$transaction->rollBack();//事务回滚
return false;
}
if($type==1){
$newBalance=bcadd($user['integral'],$integral,0);
}else{
$newBalance=bcsub($user['integral'],$integral,0)<0?0:bcsub($user['integral'],$integral,0);
}
$balance=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', ['integral'=>$newBalance], 'id=:id', ['id' =>$userId])->execute();
if(!$balance){
$transaction->rollBack();//事务回滚
return false;
}
if($user['WeChatCard'] == 1){
$update = array(
"code" => $user['WeChatCardCode'],
"card_id" => $user['WeChatCardId'],
"bonus" => $newBalance,
"record_bonus" => $note,
);
if($type==1){
$update['add_bonus']=$integral;
}elseif($type==2){
$update['add_bonus']="-".$integral;
}
$app=Factory::officialAccount(WeChat::getWeChatTemplateConfig($uniacid));
$card = $app->card;
$card->member_card->updateUser($update);
}
$transaction->commit();//提交事务
return true;
}
/**发放券包
* @param $orderId
* @return bool
* @throws \yii\db\Exception
*/
public static function rollBag($orderId){
$order=(new \yii\db\Query())
->from('{{%ybwm_roll_bag_order}}')
->where('id=:id', [':id' => $orderId])->one();
if($order['state']!=2){
return false;
}
$coupon=json_decode($order['coupon'],true);
for($i=0;$i<count($coupon);$i++){
$data['userId']=$order['userId'];
$data['couponId']=$order['id'];
$data['type']=1;
$data['money']=$coupon[$i]['money'];
$data['discount']=0;
$data['fullMoney']=$coupon[$i]['fullMoney'];
$data['useStartTime']=time();
$data['useEndTime']=time()+$order['days']*86400;
$data['useType']=json_encode([1]);
$data['receiveType']=9;
$data['couponName']='满'.$coupon[$i]['fullMoney']."".$coupon[$i]['money'];
$data['couponDetails']='';
$data['storeType']=1;
$data['storeArr']='';
$data['goodsType']=1;
$data['goodsArr']='';
$data['storeId']=$order['storeId'];
$data['uniacid']=$order['uniacid'];
$data['createdAt']=time();
$num=bcmul($coupon[$i]['num'],$order['num'],0);
for($n=0;$n<$num;$n++){
Yii::$app->db->createCommand()->insert('{{%ybwm_user_coupon}}', $data)->execute();
}
}
return true;
}
/**查看优惠券优惠多少钱
* @param $userId
* @param $storeId
* @param $couponId[优惠券领取金额]
* @return int
*/
public static function couponMoney($userId,$storeId,$couponId,$item=1,$tableId=0){
$coupon=(new \yii\db\Query())
->select('type,money,discount,goodsType,goodsArr')
->from('{{%ybwm_user_coupon}}')
->where('id=:id AND state=2',[':id'=>$couponId])->one();
$storeSet = Config::getStoreSet('instoreSet', $storeId);
if($item==2){
if($storeSet['orderMode']==2){
$where = 'userId='.$userId.' AND tableId='.$tableId.' AND storeId='.$storeId.' AND item=2';
}else{
$where = 'tableId='.$tableId.' AND storeId='.$storeId.' AND item=2';
}
}else{
$where = 'userId='.$userId.' AND storeId='.$storeId.' AND item='.$item;
}
if($coupon['type']==1){
$money=$coupon['money'];
}else{
$goodsArr=json_decode($coupon['goodsArr'],true);
$goodsMoney=(new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where($where)
->sum('money*num')?:0;
$money=bcmul($goodsMoney,(10-$coupon['discount'])/10,2);
if($coupon['goodsType']==2){
//指定商品可用
$goodsMoney=(new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where($where)
->andWhere(['in','goodsId',$goodsArr])
->sum('money*num')?:0;
$money=bcmul($goodsMoney,(10-$coupon['discount'])/10,2);
}
if($coupon['goodsType']==3){
//指定商品不可用
$goodsMoney=(new \yii\db\Query())
->from('{{%ybwm_shop_car}}')
->where($where)
->andWhere(['not in','goodsId',$goodsArr])
->sum('money*num')?:0;
$money=bcmul($goodsMoney,(10-$coupon['discount'])/10,2);
}
if($coupon['goodsType']==4){
if($item==2){
if($storeSet['orderMode']==2){
$where = 'a.userId='.$userId.' AND a.tableId='.$tableId.' AND a.storeId='.$storeId.' AND a.item=2';
}else{
$where = 'a.tableId='.$tableId.' AND a.storeId='.$storeId.' AND a.item=2';
}
}else{
$where = 'a.userId='.$userId.' AND a.storeId='.$storeId.' AND a.item='.$item;
}
//指定商品分类可用
$goodsMoney = (new \yii\db\Query())
->from('{{%ybwm_shop_car}} as a')
->join('LEFT JOIN', '{{%ybwm_core_goods}} as b', 'b.id = a.goodsId')
->where($where)
->andWhere(['in', 'b.typePid', $goodsArr])
->sum('a.money*a.num')?:0;
$money=bcmul($goodsMoney,(10-$coupon['discount'])/10,2);
}
}
return $money;
}
//查看等级折扣
public static function getDiscountByGood($userId,$goodsId,$money){
$user=(new \yii\db\Query())
->select('level')
->from('{{%ybwm_member}}')
->where('id=:id',[':id'=>$userId])
->one();
$data=[
'money'=>$money,
'discount'=>10
];
if(!$user['level']){
return $data;
}
$goods=(new \yii\db\Query())
->select('discountOpen,discountArr')
->from('{{%ybwm_core_goods}}')
->where('id=:id',[':id'=>$goodsId])
->one();
if($goods['goodsType']==2){
return $data;
}
if($goods['discountOpen']==2){
return $data;
}
$level=$user['level']-1;
$discountArr=json_decode($goods['discountArr'],true);
$open=$discountArr[$level]['open'];
$discount=$discountArr[$level]['discount'];
if($open==2 || !$discount){
return $data;
}
$data['discount']=$discount;
$data['money']=bcmul($discountArr[$level]['discount']/10,$money,2);
return $data;
}
//更新老带新活动完成进度
public static function oldWithNewReward($uniacid,$userId){
$now=time();
$actInfo=(new \yii\db\Query())
->from('{{%ybwm_old_with_new}}')
->where('uniacid=:uniacid AND display=1 AND deleteAt=0 AND startTime<=:time AND endTime>:time',[':time'=>$now,':uniacid'=>$uniacid])->one();//查看活动
if(!$actInfo){
return false;
}
if($actInfo['type']==1){
Yii::$app->db->createCommand()->update('{{%ybwm_old_with_new_bind}}', ['state'=>1,'completeAt'=>$now],['bindId'=>$userId,'actId'=>$actInfo['id'],'state'=>2])->execute();
}
if($actInfo['type']==2){
//下单次数
$num=(new \yii\db\Query())
->from('{{%ybwm_bill}}')
->where('userId=:userId AND type=2 AND origin in (1,5,6,7)',[':userId'=>$userId])
->count();
if($num>=$actInfo['num']){
Yii::$app->db->createCommand()->update('{{%ybwm_old_with_new_bind}}', ['state'=>1,'completeAt'=>$now],['bindId'=>$userId,'actId'=>$actInfo['id'],'state'=>2])->execute();
}
}
if($actInfo['type']==3){
//下单金额
$money=(new \yii\db\Query())
->from('{{%ybwm_bill}}')
->where('userId=:userId AND type=2 AND origin in (1,5,6,7)',[':userId'=>$userId])->sum('money');
if($money>=$actInfo['money']){
Yii::$app->db->createCommand()->update('{{%ybwm_old_with_new_bind}}', ['state'=>1,'completeAt'=>$now],['bindId'=>$userId,'actId'=>$actInfo['id'],'state'=>2])->execute();
}
}
$pid=(new \yii\db\Query())
->from('{{%ybwm_old_with_new_bind}}')
->where('bindId=:bindId',[':bindId'=>$userId])->one()['userId'];//上级id
//查看上级的所有完成的下级
$sonCount=(new \yii\db\Query())
->from('{{%ybwm_old_with_new_bind}}')
->where('userId=:userId AND state=1 AND actId=:actId',[':actId'=>$actInfo['id'],':userId'=>$pid])
->count();
$rewardArr=json_decode($actInfo['rewardArr'],true);//奖励数组
$transaction = Yii::$app->db->beginTransaction();//开始事务
if($actInfo['rewardArr']){
for($i=0;$i<count($rewardArr);$i++){
$people=$rewardArr[$i]['people'];
$money=$rewardArr[$i]['money'];
$integral=$rewardArr[$i]['integral'];
$pReward=(new \yii\db\Query())
->from('{{%ybwm_old_with_new_detailed}}')
->where('userId=:userId AND actId=:actId AND people=:people',[':userId'=>$pid,':actId'=>$actInfo['id'],':people'=>$people])->one();
if(!$pReward AND $people==$sonCount){
//发放奖励
if($money){
$bonusRes=self::saveBonus($pid, 2, $money, 1, '老带新奖励',$uniacid);
if(!$bonusRes){
$transaction->rollBack();
return false;
}
}
if($integral){
$integralRes=self::saveIntegral($pid, 2, $integral, 1, '老带新奖励',$uniacid);
if(!$integralRes){
$transaction->rollBack();
return false;
}
}
$rewardData['userId']=$pid;
$rewardData['actId']=$actInfo['id'];
$rewardData['money']=$money;
$rewardData['integral']=$integral;
$rewardData['people']=$people;
$rewardData['uniacid']=$uniacid;
$rewardData['createdAt']=$now;
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_old_with_new_detailed}}', $rewardData)->execute();
if(!$res){
$transaction->rollBack();
return false;
}
}
}
}
$transaction->commit();
return true;
}
//老带新绑定
public static function oldWithNewBind($uniacid,$userId,$shareId){
$now=time();
$new=(new \yii\db\Query())
->from('{{%ybwm_bill}}')
->where('userId=:userId',[':userId'=>$userId])->one();//是否是新用户
if($new){
return false;
}
$bindList=(new \yii\db\Query())
->from('{{%ybwm_old_with_new_bind}}')
->where('bindId=:bindId',[':bindId'=>$userId])->one();//查询绑定关系
if($bindList){
return false;
}
$bindList=(new \yii\db\Query())
->from('{{%ybwm_old_with_new}}')
->where('uniacid=:uniacid AND display=1 AND deleteAt=0 AND startTime<=:time AND endTime>:time',[':time'=>$now,':uniacid'=>$uniacid])->one();//查看活动
if($bindList){
if($bindList['type']==1){
//无限制
$state=1;
$data['completeAt']=time();
}else{
$state=2;
}
}else{
return false;
}
$data['userId']=$shareId;
$data['bindId']=$userId;
$data['uniacid']=$uniacid;
$data['state']=$state;
$data['createdAt']=$now;
$data['actId']=$bindList['id'];
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_old_with_new_bind}}', $data)->execute();
if($res){
self::oldWithNewReward($uniacid,$userId);
return true;
}else{
return false;
}
}
//新用户奖励
public static function newUserReward($uniacid,$userId){
$now=time();
$actInfo=(new \yii\db\Query())
->from('{{%ybwm_old_with_new}}')
->where('uniacid=:uniacid AND display=1 AND deleteAt=0 AND startTime<=:time AND endTime>:time',[':time'=>$now,':uniacid'=>$uniacid])->one();//查看活动
$transaction = Yii::$app->db->beginTransaction();//开始事务
if($actInfo['isCoupon']==1){
$couponRes=self::receiveCoupon(json_decode($actInfo['couponId'],true),$userId,14);
if(!$couponRes){
$transaction->rollBack();
return false;
}
}
if($actInfo['isBalance']==1){
$balanceRes=self::saveBalance($userId, 2, $actInfo['balance'], 1, '老带新奖励',$uniacid);
if(!$balanceRes){
$transaction->rollBack();
return false;
}
}
if($actInfo['isIntegral']==1){
$integralRes=self::saveIntegral($userId, 2, $actInfo['integral'], 1, '老带新奖励',$uniacid);
if(!$integralRes){
$transaction->rollBack();
return false;
}
}
$transaction->commit();
return true;
}
/**奖励金
* @param $userId [用户id]
* @param $origin [1平台2用户]
* @param $balance [余额]
* @param $type [1.加2.减]
* @param $note [备注]
* @param $uniacid [小程序id]
* @param $item [1.老带新2分销商]
* @param int $accountId [操作员id]
* @return bool
* @throws \yii\db\Exception
*/
public static function saveBonus($userId, $origin, $balance, $type, $note,$uniacid,$item=1,$accountId=0){
if(!$balance){
return false;
}
$user=(new \yii\db\Query())
->select('bonus,commission')
->from('{{%ybwm_member}}')
->where('id=:id', [':id' => $userId])->one();
$data['accountId'] = $accountId;
$data['userId'] = $userId;
$data['origin'] = $origin;
$data['money'] = $balance;
$data['type'] = $type;
$data['note'] = $note;
$data['item'] = $item;
$data['createdAt'] = time();
$data['uniacid'] = $uniacid;
$transaction = Yii::$app->db->beginTransaction();//开始事务
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_user_bonus}}', $data)->execute();
if(!$res){
$transaction->rollBack();//事务回滚
return false;
}
if($item==1){
if($type==1){
$newBalance=bcadd($user['bonus'],$balance,2);
}else{
$newBalance=bcsub($user['bonus'],$balance,2)<0?0:bcsub($user['bonus'],$balance,2);
}
$balance=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', ['bonus'=>$newBalance], 'id=:id', ['id' =>$userId])->execute();
}else{
if($type==1){
$newBalance=bcadd($user['commission'],$balance,2);
}else{
$newBalance=bcsub($user['commission'],$balance,2)<0?0:bcsub($user['commission'],$balance,2);
}
$balance=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', ['commission'=>$newBalance], 'id=:id', ['id' =>$userId])->execute();
}
if(!$balance){
$transaction->rollBack();//事务回滚
return false;
}
$transaction->commit();//提交事务
return true;
}
//分销绑定
public static function distributionBind($uniacid,$userId,$shareId){
$now=time();
$distribution=(new \yii\db\Query())
->from('{{%ybwm_distribution}}')
->where('userId=:userId AND state=2',[':userId'=>$shareId])->one();//是否是分销商
if(!$distribution){
return false;
}
$bindList=(new \yii\db\Query())
->from('{{%ybwm_distribution_bind}}')
->where('bindId=:bindId',[':bindId'=>$userId])->one();//查询绑定关系
if($bindList){
return false;
}
$pId=(new \yii\db\Query())
->from('{{%ybwm_distribution_bind}}')
->where('bindId=:bindId',[':bindId'=>$shareId])->one();//查询上级的上级
$data['userId']=$shareId;
$data['twoId']=$pId['userId'];
$data['bindId']=$userId;
$data['uniacid']=$uniacid;
$data['createdAt']=$now;
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_distribution_bind}}', $data)->execute();
if($res){
return true;
}else{
return false;
}
}
/**分销订单
* @param $uniacid
* @param $userId
* @param $money
* @param int $type
* @return bool
* @throws \yii\db\Exception
*/
public static function distributionOrder($uniacid,$userId,$outTradeNo,$money,$item=1,$type=1){
$system=Config::getSystemSet('distributionSet',$uniacid);
if(!$system || $system['open']!=1){
return false;
}
//查看我的上级
$pList=(new \yii\db\Query())
->from('{{%ybwm_distribution_bind}}')
->where('bindId=:bindId',[':bindId'=>$userId])->one();
if(!$pList){
return false;
}
if($system['moneyType']==1){
//百分比
if($item==1){
$oneMoney=bcmul($money,$system['takeOutOne']/100,2);
$towMoney=bcmul($money,$system['takeOutTwo']/100,2);
}else{
$oneMoney=bcmul($money,$system['inStoreOne']/100,2);
$towMoney=bcmul($money,$system['inStoreTwo']/100,2);
}
}else{
if($item==1){
$oneMoney=$system['takeOutOne'];
$towMoney=$system['takeOutTwo'];
}else{
$oneMoney=$system['inStoreOne'];
$towMoney=$system['inStoreTwo'];
}
}
$pUserId=$pList['userId'];//上级id
$transaction = Yii::$app->db->beginTransaction(); //开始事务
$oneData['userId']=$userId;
$oneData['distributionId']=$pUserId;
$oneData['outTradeNo']=$outTradeNo;
$oneData['item']=$item;
$oneData['type']=$type;
$oneData['money']=$oneMoney;
$oneData['createdAt']=time();
$oneData['level']=1;
$oneData['uniacid']=$uniacid;
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_distribution_order}}', $oneData)->execute();
if(!$res){
$transaction->rollBack();
return false;
}
if($type==2){
$oneBonus=self::saveBonus($pUserId,2,$oneMoney,1,'分销一级奖励',$uniacid,2);
if(!$oneBonus){
$transaction->rollBack();
return false;
}
}
if($system['type']==2){
//二级
$topUserId=$pList['twoId'];
if($topUserId){
$twoData['userId']=$userId;
$twoData['distributionId']=$topUserId;
$twoData['outTradeNo']=$outTradeNo;
$twoData['item']=$item;
$twoData['type']=$type;
$twoData['money']=$towMoney;
$twoData['createdAt']=time();
$twoData['level']=2;
$twoData['uniacid']=$uniacid;
$twoRes=Yii::$app->db->createCommand()->insert('{{%ybwm_distribution_order}}', $twoData)->execute();
if(!$twoRes){
$transaction->rollBack();
return false;
}
if($type==2){
$twoBonus=self::saveBonus($topUserId,2,$towMoney,1,'分销二级奖励',$uniacid,2);
if(!$twoBonus){
$transaction->rollBack();
return false;
}
}
}
}
$transaction->commit();
return true;
}
//分销奖励
public static function distributionReward($outTradeNo,$uniacid){
$system=Config::getSystemSet('distributionSet',$uniacid);
if(!$system || $system['open']!=1){
return false;
}
$orderList=(new \yii\db\Query())
->from('{{%ybwm_distribution_order}}')
->where('outTradeNo=:outTradeNo AND type=1',[':outTradeNo'=>$outTradeNo])->all();
if($orderList){
for($i=0;$i<count($orderList);$i++){
if($orderList[$i]['level']==1){
$note='分销一级奖励';
}else{
$note='分销二级奖励';
}
self::saveBonus($orderList[$i]['distributionId'],2,$orderList[$i]['money'],1,$note,$orderList[$i]['uniacid'],2);
Yii::$app->db->createCommand()->update('{{%ybwm_distribution_order}}', ['type'=>2],['id'=>$orderList[$i]['id']])->execute();
}
}
return true;
}
public static function couponList($userId,$storeId=null,$page=1,$state=2){
$num = ($page - 1) * 10;
$limit = 10;
$query=(new \yii\db\Query())
->select(new Expression("from_unixtime(createdAt,'%Y-%m-%d %H:%i:%s') as createdAt,couponId,couponName,money"))
->from('{{%ybwm_user_coupon}}')
->where('userId=:userId and state=:state',[':userId'=>$userId,':state'=>$state]);
if($storeId){
$query->andWhere(['storeId'=>$storeId]);
}
$count=(clone $query)->count();
if($page){
$couponList=(clone $query)->offset($num)
->limit($limit)
->orderBy('id desc')->all();
}else{
$couponList=(clone $query)->all();
}
$data=array('count'=>$count,'data'=>$couponList);
return $data;
}
public static function storeCoupon($storeId,$keyword=null,$page=1){
$num = ($page - 1) * 10;
$limit = 10;
$query=(new \yii\db\Query())
->select('id,name')
->from('{{%ybwm_coupon}}')
->where('storeId=:storeId and memberType=1 and isVip=2 and deleteAt=0 and display=1',[':storeId'=>$storeId]);
if($keyword){
$query->andWhere(['like','name',$keyword]);
}
$count=(clone $query)->count();
if($page){
$couponList=(clone $query)->offset($num)
->limit($limit)
->orderBy('id desc')->all();
}else{
$couponList=(clone $query)->all();
}
$data=array('count'=>$count,'data'=>$couponList);
return $data;
}
//发放新客专享
public static function recordNew($userId,$uniacid){
$now=time();
$new=(new \yii\db\Query())
->from('{{%ybwm_new}}')
->where('uniacid=:uniacid AND deleteAt=0 AND display=1 AND startTime<=:startTime AND endTime>:endTime',[':startTime'=>$now,':endTime'=>$now,':uniacid'=>$uniacid])
->one();
$record=(new \yii\db\Query())
->from('{{%ybwm_new_record}}')
->where('userId=:userId',['userId'=>$userId])
->one();
if(!$new || $record){
return true;
}
$data['balance']=0;
$data['integral']=0;
$data['growth']=0;
$data['coupon']=[];
$transaction = Yii::$app->db->beginTransaction(); //开始事务
if($new['isBalance']==1){
$data['balance']=$new['balance'];
$saveBalance=Member::saveBalance($userId, 2, $new['balance'], 1, '新客专享',$uniacid);
if(!$saveBalance){
$transaction->rollBack();
return false;
}
}
if($new['isIntegral']==1){
$data['integral']=$new['integral'];
$saveIntegral=Member::saveIntegral($userId, 2, $new['integral'], 1, '新客专享',$uniacid);
if(!$saveIntegral){
$transaction->rollBack();
return false;
}
}
if($new['isGrowth']==1){
$data['growth']=$new['growth'];
$saveIntegral=Member::saveGrowth($userId, 2, $new['growth'], 1, '新客专享',$uniacid);
if(!$saveIntegral){
$transaction->rollBack();
return false;
}
}
$coupon=json_decode($new['coupon'],true);
if($new['isCoupon']==1){
//发放优惠券
$receiveCoupon=Member::receiveCoupon($coupon, $userId,3);
if(!$receiveCoupon){
$transaction->rollBack();
return false;
}
$data['coupon']=$coupon;
}
$newRecord['userId']=$userId;
$newRecord['newId']=$new['id'];
$newRecord['balance']=$data['balance'];
$newRecord['integral']=$data['integral'];
$newRecord['growth']=$data['growth'];
$newRecord['coupon']=json_encode($data['coupon']);
$newRecord['uniacid']=$new['uniacid'];
$newRecord['createdAt']=$now;
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_new_record}}', $newRecord)->execute();
if(!$res){
$transaction->rollBack();
return false;
}
$transaction->commit();
return true;
}
//瓜分红包
public static function bonusPackage($orderId){
$now=time();
$order=(new \yii\db\Query())
->select('uniacid,money,userId')
->from('{{%ybwm_takeout_order}}')
->where('id=:id',['id'=>$orderId])
->one();
$dividend =(new \yii\db\Query())
->from('{{%ybwm_dividend}}')
->where('uniacid=:uniacid AND display=1 AND deleteAt=0 AND startTime<=:startTime AND endTime>=:endTime AND couponStartAt<=:startTime AND couponEndAt>=:endTime',[':uniacid'=>$order['uniacid'],':startTime'=>$now,':endTime'=>$now])->one()?:[];
if(!$dividend){
return false;
}
if($order['money']>=$dividend['payMoney']){
$data['divideId']=$dividend['id'];
$data['divideName']=$dividend['name'];
$data['orderId']=$orderId;
$data['userId']=$order['userId'];
$data['totalNum']=$dividend['receiveNum'];
$data['surplusNum']=$dividend['receiveNum'];
$data['luck']=$dividend['luck'];
$data['createdAt']=$now;
$data['uniacid']=$order['uniacid'];
$res=Yii::$app->db->createCommand()->insert('{{%ybwm_dividend_join}}', $data)->execute();
if($res){
return true;
}
}
return false;
}
//外卖订单确认收货已完成后集点返红包
public static function saveColletCoupon($orderId,$uniacid,$storeId,$userId){
$now=time();
$collectGrant=(new \yii\db\Query())
->from('{{%ybwm_order_collect_coupon}}')
->where('uniacid=:uniacid AND deleteAt=0 AND display=1 AND startTime<=:startTime AND endTime>:endTime',[':startTime'=>$now,':endTime'=>$now,':uniacid'=>$uniacid])
->andWhere([
'or',
['and',['storeType'=>1,'storeId'=>$storeId]],
['storeType'=>2],
['and',['storeType'=>3],['like','storeArr',$storeId]]
])->one();
if($collectGrant){
//查出用户活动时间内有集点的活动是否满足
$collectGrantId=$collectGrant['id'];
$startTime=$collectGrant['startTime'];
$endTime=$collectGrant['endTime'];
//查出用户集点活动的卡券
$collectList=(new \yii\db\Query())
->from('{{%ybwm_user_coupon}}')
->where('couponId=:couponId AND userId=:userId AND receiveType=17',[':couponId'=>$collectGrantId,':userId'=>$userId])
->one();
if(!$collectList){
$transaction = Yii::$app->db->beginTransaction();
try {
Yii::$app->db->createCommand()->update('{{%ybwm_takeout_order}}', ['collectCouponId'=>$collectGrant['id'],'collectCouponName'=>$collectGrant['name']],['id'=>$orderId])->execute();
$orderData=(new \yii\db\Query())
->from('{{%ybwm_takeout_order}}')
->where('uniacid=:uniacid AND storeId=:storeId AND userId=:userId AND state=5 AND collectCouponId=:collectGrantId AND createdAt>=:startTime AND createdAt<=:endTime',[':startTime'=>$startTime,':endTime'=>$endTime,':uniacid'=>$uniacid,':storeId'=>$storeId,':collectGrantId'=>$collectGrantId,'userId'=>$userId])
->limit($collectList['orderNum'])
->all();
if(count($orderData) >= intval($collectGrant['orderNum'])){
//满足条件给用户发红包
$data=[];
$data['storeId']=$storeId;
$data['couponId']=$collectGrantId;
$data['userId']=$userId;
$data['type']=1;
$data['money']=$collectGrant['money'];
if($collectGrant['timeType']==1){
$data['useStartTime']=$collectGrant['useStartTime'];
$data['useEndTime']=$collectGrant['useEndTime'];
}else{
if($collectGrant['isNextDay']==1){//次日起
$data['useStartTime']=time()+86400;
$data['useEndTime']=time()+$collectGrant['day']*86400+86400;
}else{
$data['useStartTime']=time();
$data['useEndTime']=time()+$collectGrant['day']*86400;
}
}
$data['useType']=json_encode([1]);
$data['receiveType']=17;
$data['couponName']=$collectGrant['name'];
$data['couponDetails']='';
$data['storeType']=$collectGrant['storeType'];
$data['storeArr']=$collectGrant['storeArr'];
$data['goodsType']=1;
$data['goodsArr']='';
$data['uniacid']=$collectGrant['uniacid'];
$data['createdAt']=time();
Yii::$app->db->createCommand()->insert('{{%ybwm_user_coupon}}', $data)->execute();
$transaction->commit();
}
$transaction->commit();
//return true;
}catch (\Exception $e){
$transaction->rollBack();
}
}
}
}
}