|
@@ -19,29 +19,142 @@ class Plantask extends Controller
|
|
|
$toweek = date('w',$nowtime);
|
|
|
if($toweek == 1){
|
|
|
//周日不结算(自动到下周一),所以,周一不滑落
|
|
|
+ echo '周一不滑落';
|
|
|
exit;
|
|
|
}
|
|
|
|
|
|
//最后买东西是11天前了,intro_num在这里使用,减少查到的数据量
|
|
|
$tendays_ago = $this->hualuo_tendays_ago();
|
|
|
- $list = Db::name('user')->where('last_paytime','lt',$tendays_ago)->where('intro_num','gt',0)->select();
|
|
|
-
|
|
|
- if(!empty($list)){
|
|
|
- Db::startTrans();
|
|
|
- foreach($list as $key => $user){
|
|
|
- //我的下级,的推荐人,改成我的上级。也就是跳过了我
|
|
|
- $rs = Db::name('user')->where('intro_uid',$user['id'])->update(['intro_uid',$user['intro_uid']]);
|
|
|
- if($rs === false){
|
|
|
- Db::rollback();
|
|
|
- }
|
|
|
- //我的推荐人数变0
|
|
|
- $rs2 = Db::name('user')->where('id',$user['id'])->update(['intro_num',0]);
|
|
|
- if($rs2 === false){
|
|
|
+// echo $tendays_ago;
|
|
|
+ Db::startTrans();
|
|
|
+ $user = Db::name('user')->where('last_paytime','lt',$tendays_ago)->where('intro_num','gt',0)->lock(true)->find();
|
|
|
+
|
|
|
+ if(empty($user)){
|
|
|
+ echo '没有数据';
|
|
|
+ Db::rollback();
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+ dump($user);
|
|
|
+
|
|
|
+ //我的多个下级,的推荐人,改成我的上级。也就是跳过了我
|
|
|
+ $my_down = Db::name('user')->where('intro_uid',$user['id'])->select();
|
|
|
+ if(!empty($my_down)){
|
|
|
+ foreach($my_down as $key => $down_user){
|
|
|
+ $rs_down = $this->updateIntro($down_user['id'],$user['intro_uid']);
|
|
|
+ if($rs_down !== true){
|
|
|
+ echo $rs_down;
|
|
|
Db::rollback();
|
|
|
+ exit;
|
|
|
}
|
|
|
}
|
|
|
- Db::commit();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ //用不到了
|
|
|
+ //我滑落了,我的上级保持不变,下级都没了
|
|
|
+ /*$my_update = [
|
|
|
+ 'intro_num' => 0,
|
|
|
+ 'intro_num_all' => 0,
|
|
|
+ ];
|
|
|
+ $rs2 = Db::name('user')->where('id',$user['id'])->update($my_update);
|
|
|
+ if($rs2 === false){
|
|
|
+ Db::rollback();
|
|
|
+ }*/
|
|
|
+
|
|
|
+
|
|
|
+ //提交
|
|
|
+ Db::rollback();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function updateIntro($uid,$intro_uid){
|
|
|
+
|
|
|
+ $db = Db::name("user");
|
|
|
+ //验证
|
|
|
+ if($uid == $intro_uid) $this->error("新邀请人不能是自己!");
|
|
|
+
|
|
|
+ $rs_user = $db->where(array('id' => $uid))->find();
|
|
|
+ if(!$rs_user) $this->error("会员 ".$uid.' 不存在! ');
|
|
|
+
|
|
|
+ $rs_intro = $db->where(array('id' => $intro_uid))->find();
|
|
|
+ if(!$rs_intro) $this->error("新邀请人 ".$intro_uid.' 不存在! ');
|
|
|
+
|
|
|
+ if($rs_user['intro_uid'] == $intro_uid) $this->error("新邀请人不能是原来的邀请人!");
|
|
|
+
|
|
|
+ //新推荐人不能是自己下级
|
|
|
+ if($rs_intro['intro_ids']) {
|
|
|
+ $ary = explode(',', $rs_intro['intro_ids']);
|
|
|
+ if(in_array($rs_user['id'], $ary)) {
|
|
|
+ $this->error("新邀请人不能是自己网体下级会员!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新此会员的上级
|
|
|
+ $data = array();
|
|
|
+ $data['intro_ids'] = $rs_intro['intro_ids'] ? $rs_intro['intro_ids'].','.$rs_intro['id'] : $rs_intro['id']; //新推荐人id序列
|
|
|
+ $data['intro_level'] = $rs_intro['intro_level'] + 1; //新层数
|
|
|
+ $data['intro_uid'] = $rs_intro['id']; //新推荐人id
|
|
|
+ $db->where(['id' => $uid])->update($data);
|
|
|
+
|
|
|
+ //更新此会员的下级会员
|
|
|
+ $num_c = $rs_intro['intro_level'] - $rs_user['intro_level'] + 1;//变化的层数差
|
|
|
+ $user_sub = $db->where("find_in_set('".$rs_user['id']."',intro_ids) > 0")->order("intro_level asc")->select(); //所有下级
|
|
|
+ foreach($user_sub as $users) { //每个下级(因为是升序查询,所以每个的上级一定先更新完毕)
|
|
|
+ $data_sub = array();
|
|
|
+ $rs_tjr = $db->where(array('id' => $users['intro_uid']))->field('id,intro_ids')->find();
|
|
|
+ $data_sub['intro_level'] = $users['intro_level'] + $num_c; //新层数
|
|
|
+ $data_sub['intro_ids'] = $rs_tjr['intro_ids'].','.$rs_tjr['id']; //新推荐人id序列
|
|
|
+ $db->where(array('id' => $users['id']))->update($data_sub);//更新移动网体的会员
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新直推、团队数
|
|
|
+ $team = count($user_sub) + 1;
|
|
|
+ if($rs_user['intro_uid']) {
|
|
|
+ $this->addIntroNum($rs_user['intro_uid'], -1, -$team); //有则 更新原上级
|
|
|
+ }
|
|
|
+ $this->addIntroNum($intro_uid, 1, $team); //更新新上级
|
|
|
+
|
|
|
+
|
|
|
+ $db->commit();
|
|
|
+ $this->success("更新成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新邀请码数和推荐团队人数
|
|
|
+ * @param string $tjrname 用户id
|
|
|
+ * @param integer $num 直推增减人数
|
|
|
+ * @param integer $team 团队增减人数
|
|
|
+ */
|
|
|
+ private function addIntroNum($tjrname, $num, $team)
|
|
|
+ {
|
|
|
+ //更新直推人数
|
|
|
+ if($num < 0) {
|
|
|
+ $rs1 = Db::name('user')->where(['id' => $tjrname])->setDec('intro_num', abs($num));
|
|
|
+ } else {
|
|
|
+ $rs1 = Db::name('user')->where(['id' => $tjrname])->setInc('intro_num', $num);
|
|
|
+ }
|
|
|
+ if($rs1 === false){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //更新团队
|
|
|
+ $rstjr = Db::name('user')->where(['id' => $tjrname])->field('id,intro_ids')->find();
|
|
|
+ if($rstjr) {
|
|
|
+ $tjstr = $rstjr['intro_ids'] ? ($rstjr['intro_ids'] . ',' . $rstjr['id']) : $rstjr['id'];
|
|
|
+ $tjstr = trim($tjstr, ',');
|
|
|
+ $arr_intro = explode(',', $tjstr);
|
|
|
+
|
|
|
+ if($team < 0) {
|
|
|
+ $rs2 = Db::name('user')->where(['id' => ['in', $arr_intro]])->setDec('intro_num_all', abs($team));
|
|
|
+ } else {
|
|
|
+ $rs2 = Db::name('user')->where(['id' => ['in', $arr_intro]])->setInc('intro_num_all', $team);
|
|
|
+ }
|
|
|
+
|
|
|
+ if($rs2 === false){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
//滑落要按11天算
|