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;$idb->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;$idb->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;$ifrom('{{%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;$idb->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(); } } } } }