'未结算', 1 => '已结算', -1 => '失效' ]; public function __construct(App $app, UserRepository $repository) { parent::__construct($app); $this->repository = $repository; $this->source = $this->request->header('source'); $this->merId = $this->request->header('merId'); } /** * 创建环信账户 * @return mixed */ public function hxim_create() { $uid = $this->request->uid(); try { $im = new Im(); $user = Db::name('user')->where('uid', $uid)->field('im_uuid,im_userid as im_user_id,im,uid,nickname,im_password as im_pass')->find(); if (isset($user['im_uuid']) && $user['im_user_id']) { return app('json')->success($user); } $im_user_id = 'user' . $user['uid']; $data = []; $data['im_pass'] = mt_rand(100000, 999999); $data['im_user_id'] = $im_user_id; // 获取用户是否存在 $imUser = $im->getImUser('user' . $uid); if (isset($imUser['activated']) && $imUser['activated'] == true) { $data['im_uuid'] = $imUser['uuid']; } else { $data['im_uuid'] = $im->createImUser($im_user_id, $user['nickname'], $data['im_pass']); } Db::name('User')->where(['uid' => $uid])->update([ 'im' => 1, 'im_uuid' => $data['im_uuid'], 'im_userid' => $im_user_id, 'im_password' => $data['im_pass'] ]); return app('json')->success($data); } catch (\Exception $e) { Db::name('log')->insert(['data' => '注册异常' . $e->getFile() . $e->getMessage() . $e->getLine()]); } return app('json')->fail('注册失败'); } /** * @return mixed * @author xaboy * @day 2020/6/22 */ public function we_com() { $where2['mer_id'] = $this->merId; $user = Db::name('enterprise')->field('we_com,we_com_url')->where($where2)->find(); return app('json')->success($user); } public function spread_image() { $type = $this->request->param('type'); $res = $type == 'routine' ? $this->repository->routineSpreadImage($this->request->userInfo()) : $this->repository->wxSpreadImage($this->request->userInfo()); return app('json')->success($res); } /** * @return mixed * 分享每日海报 */ public function share_day() { /** * 1242 * 2208 */ $user = $this->request->userInfo(); $name = $user['uid'] . '_' . $user['is_promoter'] . '_user_wap.jpg'; $siteUrl = systemConfig('site_url'); $codeUrl = set_http_type($siteUrl . '/share?spread=' . $user['uid'], request()->isSsl() ? 0 : 1);// 二维码链接 $imageInfo = app()->make(QrcodeService::class)->getQRCodePath($codeUrl, $name, $user['avatar']); if (is_string($imageInfo)) throw new ValidateException('二维码生成失败'); $filename = 'https://88yx.xyz/qqh/uploads/20211101074257444.jpg'; $qrcode = $imageInfo['dir']; dump($qrcode); $config = array( 'image' => array( array( 'url' => $qrcode,// 二维码资源 'stream' => 0, 'left' => 533, 'top' => 1941, 'right' => 0, 'bottom' => 0, 'width' => 184, 'height' => 182, 'opacity' => 100 ) ), 'background' => $filename ); $data = setSharePoster($config, 'routine/spread/poster'); dump($data); return app('json')->success($data); } public function spread_info() { $user = $this->request->userInfo(); $user->append(['one_level_count', 'lock_brokerage', 'two_level_count', 'spread_total', 'yesterday_brokerage', 'total_extract', 'total_brokerage']); $data = [ 'lock_brokerage' => $user->lock_brokerage, 'one_level_count' => $user->one_level_count, 'two_level_count' => $user->two_level_count, 'spread_total' => $user->spread_total, 'yesterday_brokerage' => $user->yesterday_brokerage, 'total_extract' => $user->total_extract, 'total_brokerage' => $user->total_brokerage, 'brokerage_price' => $user->brokerage_price, 'member_brokerage_price' => $user->member_brokerage_price, 'now_money' => $user->now_money, 'broken_day' => (int)systemConfig('lock_brokerage_timer') ]; return app('json')->success($data); } // 红包 public function hongbao_info(){ log::info("============hongbao"); $user = $this->request->userInfo(); if($user->uid>0){ // 已经入账红包 $data['total_source']=$user->hongbao; // 为生效红包 $data['no_total_source']=Db::name('user_sign_hongbao')->where('status', -1)->where('uid', $user->uid)->sum('number');; log::info("====spread_info_yhc=={$data['total_source']}======={$data['no_total_source']}"); return app('json')->success($data); } } public function vr_name() { $uid = $this->request->uid(); $data = [ "name"=>"VR", "url"=>'https://show.hxxfb.com/?uid=' .$uid, ]; return app('json')->success($data); } public function hongbao_list(){ $pm = $this->request->param('pm'); [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); log::info("hongbao_list==={$uid}"); $where['uid'] = $uid; if ($pm==0){ $data = DB::name('user_sign_hongbao')->where($where)->where('type',1)->where('status',1)->field('id,mark,number,type,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); } if($pm==1){ $data = DB::name('user_sign_hongbao')->where($where)->where(['type' => 2,'status' => 1])->field('id,mark,number,type,addtime,order_id')->page($page, $limit)->order("id desc")->select(); } if($pm==2){ $data = DB::name('user_sign_hongbao')->where($where)->where('type',1)->where([['status','in','-1,0']])->field('id,mark,number,type,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); if($data){ $data = $data->toArray(); foreach ($data as $k=>$v){ if($v['status'] == 0){ $data[$k]['mark'] = '(失效)' . $v['mark']; } } } } return app("json")->success($data); } public function buildTreeContribute($users, $parentId = 0) { $branch = array(); foreach ($users as $user) { if ($user['spread_uid'] == $parentId) { $children = $this->buildTreeContribute($users, $user['uid']); // 递归查找子节点 if ($children) { $user['children'] = $children; // 如果有子节点,添加到当前节点 }else{ $user['children'] = []; } $user['total_contribute'] = $user['contribute_sum']; // 初始化当前节点的总余额为自身余额 if ($children) { // 如果存在子节点,计算总余额 foreach ($children as $child) { $user['total_contribute'] += $child['total_contribute']; // 累加子节点的总余额 } } $branch[] = $user; // 将当前节点添加到树中 } } return $branch; // 返回当前分支的所有节点 } // 根据父级uid,递归获取所有子级UID数组 默认深度10级 public function getRecursiveChildrenChengji($parentUid, $number = 10) { $user = Db::name('user')->where('uid', $parentUid)->field('uid,spread_uid,contribute,per_contribute')->find(); $user['contribute_sum'] = bcadd($user['contribute'], $user['per_contribute'], 2); $user['contribute_sum'] = 0; $uids = [];// 用于存储符合条件的子级 uid $result = [$user]; // 用于存储符合条件的子级数据 // 定义递归函数 $num = 0;// 当前层级 $recursion = function ($parentUid, $number, $num) use (&$uids, &$result, &$recursion) { if($num >= $number){ return; } // 查询当前父级的所有直接子级 $children = Db::name('user')->field('uid,spread_uid,contribute,per_contribute')->where("spread_uid", $parentUid)->select()->toArray(); // 如果没有子级,直接返回 if (!count($children) && count($children) < 1) { return; }else{ $num = $num + 1; } // 遍历每个子级 foreach ($children as $childUid) { // 如果有重复的就跳过 防止死循环 if(in_array($childUid['uid'], $uids)){ continue; } // 将符合条件的子级 uid 添加到结果数组 $uids[] = $childUid['uid']; // 将符合条件的子级 uid 添加到结果数组 $childUid['contribute_sum'] = bcadd($childUid['contribute'], $childUid['per_contribute'], 2); $result[] = $childUid; // 递归查询子级的子级 $recursion($childUid['uid'], $number, $num); } }; // 从初始父级开始递归查询 $recursion($parentUid, $number, $num); return $result; // 返回结果数组,并去重 } // 贡献值 public function gongxian_info(){ log::info("============gongxianinfo"); $user = $this->request->userInfo(); if($user->uid>0){ // 先去更新一下用户身份 $number = Db::name("system_config_value")->where(["config_key" => "team_commission_recursion_depth"])->value("value"); $this->repository->setUserIdentity($user->uid); $result = $this->repository->getUserContributeInfoByDepth($user->uid, 0); $con = DB::name('user')->where('uid', $user->uid)->find(); $isNormalUser = false; if ($con['user_group'] == 1) { $isNormalUser = true; } $data = [ 'no_total_source' => Db::name('user_sign_gongxian')->where('status', -1)->where('uid', $user->uid)->sum('number'), 'team_gongxian_num' => $result['arriveNumTeam'], 'zhitui' => $result['perContribute'], 'total_source' => $result['contribute'], 'largeContribute' => $result['largeContribute'], 'subordinate' => $result['subordinate'], 'isNormalUser' => $isNormalUser ]; return app('json')->success($data); // $dateObj=DB::name('user_sign_gongxian')->where('uid', $user->uid)->where("status",1)->select(); $con = DB::name('user')->where('uid', $user->uid)->find(); // $totalcon = 0; // foreach($dateObj as $k=>$v){ // $totalcon += $v['number']; // } // 已经入账贡献值 // if( $con['user_group'] <= 2 ){ // $data['total_source'] = $con['contribute'] + $con['per_contribute']; // }else{ $data['total_source'] = $con['contribute']; $data['zhitui'] = $con['per_contribute']; // } // $getteamscon = $this->getPerformance($user->uid); //$getcon = $this->getPerformance_getcon( $user->uid); // $team_userinfo_old_jbp22 = $this->getPerformance22($user->uid); $user_id = $con['uid']; $user_group = $con['user_group']; $number = 10; if($user_group <= 1){ $number = 1; } // 如果下级团队只有一个人 那就不用再查了 为0 // 如果用户等级为用户身份 只查一级直推 // 去除掉贡献值最大的下级 $child_nums = $this->getRecursiveChildrenChengji($user_id, $number); $child_nums_Tree = $this->buildTreeContribute($child_nums, $con['spread_uid']); if (empty($child_nums_Tree)){ $child_nums_Tree = $child_nums; $total_contribute = $child_nums_Tree[0]['per_contribute']; }else{ // 找到贡献值最大的用户的索引 if(count($child_nums_Tree[0]['children'])){ $maxBalanceIndex = array_search(max(array_column($child_nums_Tree[0]['children'], 'total_contribute')), array_column($child_nums_Tree, 'total_contribute')); // 减去该用户的贡献值 $total_contribute = bcsub($child_nums_Tree[0]['total_contribute'], $child_nums_Tree[0]['children'][$maxBalanceIndex]['total_contribute'], 2); }else{ $total_contribute = $child_nums_Tree[0]['total_contribute']; } } $data['team_gongxian_num'] = $total_contribute; // 我的团队贡献值 // if( $con['user_group'] <= 2 ){ // $data['team_gongxian_num'] = $team_userinfo_old_jbp22['person_nums_pv'] - $con['per_contribute']; // }else{ // $data['team_gongxian_num'] = $team_userinfo_old_jbp22['person_nums_pv']; // } // 未生效贡献值 $data['no_total_source']=Db::name('user_sign_gongxian')->where('status', -1)->where('uid', $user->uid)->sum('number'); log::info("====spread_info_yhc=={$data['total_source']}======={$data['no_total_source']}"); return app('json')->success($data); } } // 获取团队贡献值 public function gettemasconvalue($user_id) { //$user_id = 17; $children = Db::name("user") ->where("spread_uid", $user_id) ->select(); // 获取子级的 uid 列表 $total_pv = 0; foreach($children as $k=>$v){ //$children_pv = Db::name("store_order")->where("uid", $v['uid'])->whereIn("status",[0,1,2,3])->select(); $children_pv = Db::name("user_sign_gongxian")->where("uid", $v['uid'])->where("status",1)->select(); foreach($children_pv as $k1=>$v1){ $total_pv += $v1['number']; } } } public function gongxian_list(){ $pm = $this->request->param('pm'); [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); log::info("green_integral_list==={$uid}"); $where['uid'] = $uid; if ($pm==0){ $data = DB::name('user_sign_gongxian')->where($where)->where('status',1)->where('number', '<>',0)->field('id,mark,number,addtime,order_id,status')->page($page, $limit)->order("addtime DESC,id desc")->select(); } // if($pm==1){ // $data = DB::name('user_sign_gongxian')->where($where)->where('pm', 2)->field('id,mark,number,pm,addtime,order_id')->page($page, $limit)->order("id desc")->select(); // // } if($pm==2){ $data = DB::name('user_sign_gongxian')->where($where)->where('number', '<>',0)->where([['status','in','-1,0']])->field('id,mark,number,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); if($data){ $data = $data->toArray(); foreach ($data as $k=>$v){ if($v['status'] == 0){ $data[$k]['mark'] = '(失效)' . $v['mark']; } } } } return app("json")->success($data); } // 京豆 public function jingdou_info(){ log::info("============hongbao"); $user = $this->request->userInfo(); if($user->uid>0){ // 已经入账京豆 //$data['total_source']=$user->vr;//原件 $data['total_source'] = $user->jingdou;// 临时使用 // 为生效京豆 $data['no_total_source']=Db::name('user_sign_jingdou')->where('status', -1)->where('uid', $user->uid)->sum('number');; log::info("====spread_info_yhc=={$data['total_source']}======={$data['no_total_source']}"); return app('json')->success($data); } } public function jingdou_list(){ $pm = $this->request->param('pm'); [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); log::info("jingdou_list==={$uid}"); $where['uid'] = $uid; if ($pm==0){ $data = DB::name('user_sign_jingdou')->where($where)->where('type', 1)->where('status',1)->field('id,mark,number,type,addtime,order_id')->page($page, $limit)->order("id desc")->select(); } if($pm==1){ $data = DB::name('user_sign_jingdou')->where($where)->where('type', 2)->field('id,mark,number,type,addtime,order_id')->page($page, $limit)->order("id desc")->select(); } if($pm==2){ $data = DB::name('user_sign_jingdou')->where($where)->where([['status','in','-1,0']])->field('id,mark,number,type,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); if($data){ $data = $data->toArray(); foreach ($data as $k=>$v){ if($v['status'] == 0){ $data[$k]['mark'] = '(失效)' . $v['mark']; } } } } // $data['total'] =111; return app("json")->success($data); } // 复购金 public function fugou_info(){ log::info("============fugou"); $user = $this->request->userInfo(); if($user->uid>0){ // 已经入账京豆 $data['total_source']=$user->fugou; // 为生效京豆 $data['no_total_source']=Db::name('user_sign_fugou')->where('status', -1)->where('uid', $user->uid)->sum('number');; log::info("====spread_info_yhc=={$data['total_source']}======={$data['no_total_source']}"); return app('json')->success($data); } } public function fugou_list(){ $pm = $this->request->param('pm'); [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); log::info("fugou_list==={$uid}"); $where['uid'] = $uid; if ($pm==0){ $data = DB::name('user_sign_fugou')->where($where)->where('type', 1)->where('status',1)->field('id,mark,number,type,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); } if($pm==1){ $data = DB::name('user_sign_fugou')->where($where)->where('type', 2)->field('id,mark,number,type,addtime,order_id')->page($page, $limit)->order("id desc")->select(); } if($pm==2){ $data = DB::name('user_sign_fugou')->where($where)->where('type', 1)->where([['status','in','-1,0']])->field('id,mark,number,type,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); if($data){ $data = $data->toArray(); foreach ($data as $k=>$v){ if($v['status'] == 0){ $data[$k]['mark'] = '(失效)' . $v['mark']; } } } } return app("json")->success($data); } // VR 购物金 public function vr_info(){ log::info("============vr"); $user = $this->request->userInfo(); if($user->uid>0){ // 已经入账京豆 $data['total_source'] = $user->vr; // 为生效京豆 $data['no_total_source']=0; //$data['no_total_source']=Db::name('user_sign_vr')->where('status', -1)->where('uid', $user->uid)->sum('number');; log::info("====spread_info_yhc=={$data['total_source']}======={$data['no_total_source']}"); return app('json')->success($data); } } public function vr_list(){ $pm = $this->request->param('pm'); [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); log::info("vr_list==={$uid}"); $where['uid'] = $uid; $data = DB::name('user_sign_vr')->page($page, $limit)->order("id desc")->select(); if ($pm==0){ $data = DB::name('user_sign_vr')->where($where)->where('type', 1)->page($page, $limit)->order("id desc")->select(); } if($pm==2){ $data = DB::name('user_sign_vr')->where($where)->where('type', 2)->page($page, $limit)->order("id desc")->select(); } // if($pm==2){ // $data = DB::name('user_sign_vr')->where($where)->where('status', -1)->field('id,mark,number,pm,addtime,order_id')->page($page, $limit)->order("id desc")->select(); // // } log::info("=======date==={$data}"); return app("json")->success($data); } public function spread_info_yhc() { log::info("============ddddddddd"); $user = $this->request->userInfo(); if($user->uid>0){ // 已经入账积分 $data['total_source']=$user->score; // 为生效积分 $data['no_total_source']=Db::name('user_sign_score')->where('status', -1)->where('uid', $user->uid)->sum('reward_socre');; log::info("====spread_info_yhc=={$data['total_source']}======={$data['no_total_source']}"); return app('json')->success($data); } // if ($this->source == 'yhc' && $this->merId) { // $where['mer_id'] = $this->merId; // $where['uid'] = $user->uid; // $enterprise_user = Db::name('enterprise_user')->where($where)->find(); // if ($enterprise_user) { // $data['current_balance'] = set_price_rtrim($enterprise_user['commission']);//收益余额 // $data['unsettled_balance'] = 0;//未结算 // $extract_price = Db::name('user_extract')->where($where)->whereIn('status', [0, 1])->sum('extract_price'); // $data['withdrawn_balance'] = set_price_rtrim($extract_price); //已提现 // $data['total_balance'] = set_price_rtrim($enterprise_user['commission'] + $data['withdrawn_balance']);//总收益=收益余额+已提现 // $data['identity'] = $enterprise_user['identity']; // $data['level'] = $enterprise_user['level']; // $data['partnership'] = $enterprise_user['partnership']; // $data['green_integral'] = $enterprise_user['green_integral']; // $data['green_integral_is'] = $enterprise_user['green_integral_is']; // $data['operate'] = $enterprise_user['operate']; // $data['operate_icon'] = ''; // $data['operate_text'] = ''; // $member_settings = merchantConfig($this->merId, 'member_settings'); // if ($data['operate'] == 101) { // $data['operate_icon'] = $member_settings['yy_one_img']; // $data['operate_text'] = $member_settings['yy_one_text']; // } // if ($data['operate'] == 102) { // $data['operate_icon'] = $member_settings['yy_two_img']; // $data['operate_text'] = $member_settings['yy_two_text']; // } // // // $data['nickname'] = $user->nickname; // $data['avatar'] = $enterprise_user['avatar']; // // $arr = $this->jisuan_fans($user->uid); // $data['fans_num'] = count($arr);//粉丝总数 // // $yanglao = 0; // $offLinewhere = ['mer_id' => $this->merId, 'uid' => $user->uid, 'commission_type' => '5', 'type_shop' => 0]; // $offLine1 = Db::name('user_bill')->where($offLinewhere)->where('source', 1)->where('status', 1)->sum('number'); // $yanglao += $offLine1; // $offLine2 = Db::name('user_bill')->where($offLinewhere)->where('source', 0)->whereIn('status', [0, 1])->sum('number'); // $yanglao += $offLine2; // // // $data['ylj'] = set_price_rtrim($yanglao); // // $data['yhc_withdrawal_money'] = merchantConfig($this->merId, 'yhc_withdrawal_money'); // // // $data['uid'] = $enterprise_user['uid']; // if ($enterprise_user['identity'] > 100) { // $data['identity_data'] = Db::name('enterprise_performance_divvy')->field('name,img,content')->where('state', 1)->where('id', $enterprise_user['identity'])->find(); // if (!$data['identity_data']) { // $data['identity_data'] = null; // $data['identity'] = '100'; // } // } else { // $data['identity_data'] = null; // } // // $data['level_data'] = Db::name('enterprise_agent_divvy')->field('name,img,content')->where('state', 1)->where('id', $enterprise_user['level'])->find(); // // // return app('json')->success($data); // } // } return app('json')->fail('用户不存在'); } /** * @param UserBillRepository $billRepository * @return mixed * @author xaboy * @day 2020/6/22 */ public function bill(UserBillRepository $billRepository) { [$page, $limit] = $this->getPage(); $where = [ // 'now_money' => $this->request->param('type', 0), 'status' => $this->request->param('status'), ]; if ($this->request->param('is_red') == true) { $where['is_red_brokerage'] = 1; } return app('json')->success($billRepository->userList($where, $this->request->uid(), $page, $limit)); } /** * @param UserBillRepository $billRepository * @return mixed * @author xaboy * @day 2020/6/22 */ public function brokerage_list(UserBillRepository $billRepository) { [$page, $limit] = $this->getPage(); return app('json')->success($billRepository->userList([ 'category' => 'brokerage', ], $this->request->uid(), $page, $limit)); } /** * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author xaboy * @day 2020/6/22 */ public function spread_order() { [$page, $limit] = $this->getPage(); return app('json')->success($this->repository->subOrder($this->request->uid(), $page, $limit)); } /** * TODO * @return mixed * @author Qinii * @day 2020-06-18 */ public function binding() { $data = $this->request->params(['phone', 'sms_code']); if (!$data['sms_code'] || !$this->checkSmsCode($data['phone'], $data['sms_code'])) return app('json')->fail('验证码不正确'); $user = $this->repository->accountByUser($data['phone']); if ($user) { $data = ['phone' => $data['phone']]; } else { $data = ['account' => $data['phone'], 'phone' => $data['phone']]; } $this->repository->update($this->request->uid(), $data); return app('json')->success('绑定成功'); } /** * TODO * @return mixed * @author Qinii * @day 2020-06-18 */ public function binding_verify() { $data = $this->request->params(['user_id', 'captcha']); $data['phone'] = \think\facade\Db::name("user")->where(["uid" => $data['user_id']])->value("phone"); $data['sms_code'] = $data['captcha']; if (!$data['sms_code'] || !$this->checkSmsCode($data['phone'], $data['sms_code'])) return app('json')->fail('验证码不正确'); return app('json')->success('验证成功'); } public function checkSmsCode($phone, $code) { $sms_key = 'api.auth.sms.' . $phone; if (!$cache_code = Cache::get($sms_key)) return false; if ($code != $cache_code) return false; Cache::delete($sms_key); return true; } /** * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author xaboy * @day 2020/6/22 */ public function spread_list() { [$level, $sort, $nickname] = $this->request->params(['level', 'sort', 'keyword'], true); $uid = $this->request->uid(); [$page, $limit] = $this->getPage(); return app('json')->success($level == 2 ? $this->repository->getTwoLevelList($uid, $nickname, $sort, $page, $limit) : $this->repository->getOneLevelList($uid, $nickname, $sort, $page, $limit)); } /** * @return mixed * @author xaboy * @day 2020/6/22 */ public function spread_top() { [$page, $limit] = $this->getPage(); $type = $this->request->param('type', 0); return app('json')->success($type == 1 ? $this->repository->spreadMonthTop($page, $limit) : $this->repository->spreadWeekTop($page, $limit)); } /** * @return mixed * @author xaboy * @day 2020/6/22 */ public function brokerage_top() { [$page, $limit] = $this->getPage(); $type = $this->request->param('type', 0); return app('json')->success($type == 1 ? $this->repository->brokerageMonthTop($page, $limit) : $this->repository->brokerageWeekTop($page, $limit)); } public function history(UserVisitRepository $repository) { $uid = $this->request->uid(); [$page, $limit] = $this->getPage(); return app('json')->success($repository->getHistory($uid, $page, $limit)); } public function deleteHistory($id, UserVisitRepository $repository) { $uid = $this->request->uid(); if (!$repository->getWhereCount(['user_visit_id' => $id, 'uid' => $uid])) return app('json')->fail('数据不存在'); $repository->delete($id); return app('json')->success('删除成功'); } public function account() { $user = $this->request->userInfo(); if (!$user->phone) return app('json')->fail('请绑定手机号'); return app('json')->success($this->repository->selfUserList($user->phone)); } public function switchUser() { $uid = (int)$this->request->param('uid'); if (!$uid) return app('json')->fail('用户不存在'); $userInfo = $this->request->userInfo(); if (!$userInfo->phone) return app('json')->fail('请绑定手机号'); $user = $this->repository->switchUser($userInfo, $uid); $tokenInfo = $this->repository->createToken($user); $this->repository->loginAfter($user); return app('json')->success($this->repository->returnToken($user, $tokenInfo)); } /** * 查询商品浏览记录以及删除 */ public function productHistory(){ $uid = $this->request->uid(); $list = Db::name('third_history')->where('uid', $uid)->order('create_time', 'desc')->limit(20)->column('keyword','id'); return app('json')->success(['count' => count($list), 'list' => $list]); } public function deleteProductHistory(){ $uid = $this->request->uid(); $id = $this->request->post('id'); $deleted = Db::name('third_history') ->where('id', $id) ->where('uid', $uid) ->delete(); if ($deleted) { return app('json')->success('删除成功'); } else { return app('json')->fail('删除失败'); } } /** * 签到 获取积分 * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function sub_signin() { $member_id = $this->request->uid(); if (!$member_id) return app('json')->fail('用户不存在'); $res = $this->repository->sub_signin($member_id); return app('json')->success($res); } /** * 获取用户签到记录 * data1 开始时间 * data2 结束时间 * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function get_signin() { $member_id = $this->request->uid(); if (!$member_id) return app('json')->fail('用户不存在'); $where = []; $data1 = input('data1'); $data2 = input('data2'); if ($data1 && $data2) { $where["data1"] = $data1; $where["data2"] = $data2; } $res = $this->repository->get_signin($member_id, $where); return app('json')->success($res); } /** * 提交实名认证 * * @return void */ public function add_certification() { $member_id = $this->request->uid(); $type = input("type", 0); if ($type == 1) { $data = $this->repository->get_cer(["uid" => $member_id]); return app('json')->success($data); } if (!$member_id) return app('json')->fail('用户不存在'); $params = $this->request->params([ 'user_name', 'mobile', 'user_card', 'card_positive', 'card_reverse', ]); $params['create_time'] = time(); $params['uid'] = $member_id; $baidu = new Ocr(); $image = file_get_contents($params['card_positive']); $idCardSide = "front"; $result = $baidu->idcard($image, $idCardSide); $real_user_name = $result['words_result']['姓名']['words'] ?? ''; $real_user_card = $result['words_result']['公民身份号码']['words'] ?? ''; if ($real_user_name != $params['user_name']) { return app('json')->fail('姓名或身份证号输入有误~'); } if ($real_user_card != $params['user_card']) { return app('json')->fail('姓名或身份证号输入有误~'); } if ($result['image_status'] == "normal" && $result['idcard_number_type'] == 1) { $params['status'] = 1; $res = $this->repository->add_cer($params, $member_id); if ($res) { $userRepository = app()->make(UserRepository::class); // 赠送积分 完善实名送90个积分,同时送邀请人50个积分 $userRepository->sign_add($member_id, 90,1,'完善实名系统赠送90个积分','','', '', 1, '', 1); $member_info = Db::name('user')->where( array('uid' => $member_id) )->find(); Db::name('user') ->where('uid', $member_id) ->update(['real_name' => $params['user_name'], 'nickname' => $params['user_name']]); if($member_info['spread_uid']){ // 好友完善实名系统赠送50个积分 $spreadUid = $member_info['spread_uid']; $userRepository->sign_add($spreadUid, 50,1,'好友完善实名系统赠送50个积分','','', '', 1, '', 1); } return app('json')->success($res); } else { return app('json')->fail('认证失败'); } } else { return app('json')->fail('认证失败,请重新认证'); } } /** * 申请代理 * name:公司名称 * identity:身份 * license:营业执照 */ public function apply_agent() { $name = input("name", ""); $identity = input("identity", 1); $license = input("license", ""); $province_id = input("province_id", ""); $city_id = input("city_id", ""); $area_id = input("area_id", ""); $street_id = input("street_id", ""); $spread_account = input("spread_account", ""); $member_id = $this->request->uid(); if ($identity != 6 && (!$name || !$identity || !$license)) { return app('json')->fail('请检查参数'); } if ($identity == 6 && (!$name || !$identity)) { return app('json')->fail('请检查参数'); } $data = [ "name" => $name, "identity" => $identity, "license" => $license, "user_id" => $member_id, "province_id" => $province_id, "city_id" => $city_id, "area_id" => $area_id, "street_id" => $street_id, 'spread_account' => $spread_account, "add_time" => time(), "update_time" => time() ]; $res = $this->repository->agent($data); if ($res['code'] == 400) { return app('json')->fail($res['msg']); } return app('json')->success("申请成功", $res); } /*查询是否有已申请或者审核中的代理信息*/ public function isAgent() { $uid = $this->request->uid(); $data = $this->repository->isAgent($uid); return app("json")->success($data); } /*查询是否有审核成功的未支付或支付失败的订单*/ public function AgentPayDetail() { $uid = $this->request->uid(); if (!$uid) { return app('json')->fail('请检查参数'); } $where = ['status' => 1, 'pay_status' => ['0', '2'], 'user_id' => $uid]; $data = $this->repository->getAgentPayDetail($where); return app('json')->success("成功", $data); } /** * 获取信息 全民营销首页 * @return mixed */ public function get_agent_info() { $member_id = $this->request->uid(); $res = $this->repository->get_agent_info($member_id); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /** * 推广统计 * search 搜索 * @return mixed */ public function get_extension_info() { $search = input("search", ""); $where = $this->request->params(["identity"]); $member_id = $this->request->uid(); $res = $this->repository->get_extension_info($member_id, $search, $where); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /** * 收益统计 * type 搜索 * @return mixed */ public function get_profit_info() { $where = $this->request->params([ 'commission_type', 'date_on', 'date_off', 'order' ]); $member_id = $this->request->uid(); $res = $this->repository->get_profit_info($member_id, $where); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /** * 订单统计 * search 搜索 * @return mixed */ public function get_tuiguang_order() { $member_id = $this->request->uid(); $res = $this->repository->get_tuiguang_order($member_id); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /* * 攒金明细统计 * */ public function get_commission_all() { $uid = $this->request->uid(); $where['date_on'] = 1; $where['date_off'] = 0; // $where['commission_type'] = ''; $date = $this->request->params(['date']);//"today","yesterday","week","month","year" $where['order'] = $date['date']; $res = $this->repository->get_profit_info($uid, $where); return app('json')->success($res); } /* * 攒金明细列表 * */ public function get_commission_list() { $uid = $this->request->uid(); [$where['page'], $where['limit']] = $this->getPage(); $data = $this->request->params(['type', 'date']);//"today","yesterday","week","month","year" $where['type'] = $data['type'];// 0线上;1线下 $where['order'] = $data['date'];//"today","yesterday","week","month","year" $res = $this->repository->get_tuiguang_list($uid, $where); return app('json')->success($res); } /* * 越攒越多佣金 * */ public function get_com_list() { $uid = $this->request->uid(); [$where['page'], $where['limit']] = $this->getPage(); $data = $this->request->params(['date']);//"today","yesterday","week","month","year" $where['order'] = $data['date'];//"today","yesterday","week","month","year" $res = $this->repository->get_com_list($uid, $where); return app('json')->success($res); } /* * 越攒越多统计 * */ public function get_com_all() { $uid = $this->request->uid(); $data = $this->request->params(['date']);//"today","yesterday","week","month","year" $where['order'] = $data['date'];//"today","yesterday","week","month","year" $res = $this->repository->get_com_all($uid, $where); return app('json')->success($res); } /** * 养老金详情 * @return mixed */ public function get_yanglao() { $member_id = $this->request->uid(); $res = $this->repository->get_yanglao($member_id); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /** * 养老金明细 */ public function yanglaolog() { $member_id = $this->request->uid(); [$page, $limit] = $this->getPage(); $where = ["uid" => $member_id, "type" => "commission", "commission_type" => 5]; if ($this->source == 'yhc' && $this->merId) { $where['mer_id'] = $this->merId; } $month = $this->request->param('month', '');// 年月搜索 $status = $this->request->param('status', 1); // 1-全部 2-已结算 3-未结算 4-已取消 if ($status == 2) { $where['status'] = 1; } else if ($status == 3) { // $where['gzc']=0; $where['status'] = 0; } else if ($status == 4) { $where['status'] = -1; } $source = $this->request->param('source', -1); if ($source > -1) { $where['source'] = $source; } if($source == 1) { $where['type_shop'] = 10; }else{ $where['type_shop'] = 0; } $res = $this->repository->yanglaolog($where, $page, $limit, $month,1); if ($res) { $res['list'] = $res['list']->toArray(); if($res['list']){ foreach ($res['list'] as $k=>$v){ if($v['status'] == -1){ $res['list'][$k]['mer_name'] = $v['mer_name'] . '(失效)'; } } } return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /*养老金详情*/ public function YangLaoDetail($id) { $member_id = $this->request->uid(); $data = $this->request->params([ 'type', ]); $where = ["uid" => $member_id, "type" => "commission", "commission_type" => $data['type'], 'bill_id' => $id]; $res = $this->repository->yanglaoDetail($where); return app('json')->success($res); } /** * 消费明细 * @return mixed */ public function tripartite() { $member_id = $this->request->uid(); $where = ["uid" => $member_id, "type" => "commission", "commission_type" => 5, "tripartite" => ["<>", 0]]; $res = $this->repository->yanglaolog($where); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /** * 提现明细 * @return mixed */ public function withdrawal() { $member_id = $this->request->uid(); $data = $this->request->params([ 'type', ]); $where = ["uid" => $member_id, "type" => $data['type'] ? $data['type'] : 2]; if ($this->source == 'yhc') { $where['mer_id'] = $this->merId; } $res = $this->repository->withdrawal_user($where); if ($res) { return app('json')->success($res); } else { return app('json')->fail('获取失败'); } } /** * 提现详情 * @return mixed * @author cabbage * @day 2020/10/31 */ public function withdrawalDetail() { $member_id = $this->request->uid(); $extract_id = input("extract_id", 0); return app('json')->success($this->repository->withdrawalDetail($extract_id, $member_id)); } /* * 修改个人信息*/ public function updateUser() { $uid = $this->request->uid(); $data['nickname'] = $this->request->param('nickname', null); $data['avatar'] = $this->request->param('avatar', null); $data['sex'] = $this->request->param('sex', null); $data['birthday'] = $this->request->param('birthday', null); $data['addres'] = $this->request->param('addres', null); $data['mark'] = $this->request->param('mark', null); // 新加更换用户手机号逻辑,更换手机号时需验证 当前使用手机号收到的验证码,以确认本人操作 // 需求描述说:更换用户手机号时,同步更新 商户申请表、商户表、商户管理员表 $data['phone'] = $this->request->param('phone', null); $sms_code = $this->request->param('sms_code', null); $data = array_filter($data, function ($value) { return !is_null($value); }); if (!empty($data['phone'])) { $changeUserData = $this->repository->getOne(['phone' => $data['phone']]); if (!empty($changeUserData)) { return app("json")->fail("该手机号已被用户绑定"); } if (empty($sms_code)) { return app("json")->fail("请输入验证码"); } $userData = $this->repository->get($uid)->toArray(); if (!$this->checkSmsCode($userData['phone'], $sms_code)) { return app('json')->fail('验证码不正确'); } // 商户申请表 Db::name("merchant_intention") ->where('uid', $uid) ->where('phone', $userData['phone']) ->update(['phone' => $data['phone']]); // 商户表 Db::name("merchant") ->where('uid', $uid) ->where('mer_phone', $userData['phone']) ->update(['mer_phone' => $data['phone']]); // 商户管理员表 Db::name("merchant_admin") ->where('uid', $uid) ->where('account', $userData['phone']) ->update(['account' => $data['phone']]); } if (!empty($data['phone'])) { $data['account'] = $data['phone']; } $data = array_filter($data, function($value) { return $value !== null; }); $res = ''; if ($this->source == 'yhc') { $res = Db::name('enterprise_user')->where('mer_id', $this->merId)->where('uid', $uid)->update(['avatar' => $data['avatar']]); unset($data['avatar']); } $data = $this->repository->updateUser($uid, $data); if ($data || $res) { return app("json")->success("修改成功", $data); } return app("json")->fail("未做任何修改"); } /*积分记录*/ public function socreList() { [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); $data = $this->repository->socreList($uid, $page, $limit); return app("json")->success($data); } function jisuan_fans($uid) { $where22['node_uid'] = $uid; $where22['mer_id'] = $this->merId; $arr = $this->jisuantuandui($where22); $where['puid'] = $uid; $where['mer_id'] = $this->merId; $direct_fans = Db::name('enterprise_user')->where($where)->column('uid');// 直属粉丝数量 $result = array_unique(array_merge($arr, $direct_fans)); return $result; } function jisuantuandui($where, $data = []) { $enterprise_user_team = DB::name('enterprise_user')->where($where)->column('uid'); $arr = array_merge($data, $enterprise_user_team); foreach ($enterprise_user_team as $v) { $where['node_uid'] = $v; $arr = $this->jisuantuandui($where, $arr); } return $arr; } /** * 一壶茶-团队列表 */ public function team_list_1() { $teamid = $this->request->uid(); //$teamid = $this->request->param('teamid');//测试ID $teamid = 17; $datas_jbp = Db::name('old_user_jbp')->where("id",$teamid)->find();// 查询旧系统是否有当前会员 $type = $this->request->param('type',0);// 1:大部门,0:小部门,2:直推 if(!empty($datas_jbp)){ $team_userinfo_old_jbp1 = $this->getPerformance($teamid); // 判断大小团队(业绩多的是大部门,业绩小的是小部门) $tes = $this->teamPeople($teamid,$type);// 1:团队,2:个人 // 获取分页参数 $data1= [ "total"=>100, "per_page"=> 10, "current_page"=> 1, "last_page"=> 1, ]; if($type != 2){ // 小部门和大部门列表数据 foreach($tes as $k=>$v){ $curr_pv = ''; if($v['curr_type']==0){ $curr_pv = $team_userinfo_old_jbp1['person_nums_pv']; }else if($v['curr_type']==1){ $curr_pv = $team_userinfo_old_jbp1['common_nums_pv']; }else{ $curr_pv = 0; } $data1['data'][$k] = [ "uid"=>$v["id"], "nickname"=> $v['user_name'] . $curr_pv, "phone"=> "137****3315", "avatar"=>"https://cdn.bjtdba.com/vod/image/2025-01-20/20250120125206881.png", "create_time"=>"2025-01-25 11:00:18", "identity"=>"11", "level"=> "40002", "partnership"=>"22", "total_performance"=> $curr_pv,//$v["performance"]['sum_nums_pv'],//总业绩 "new_performance"=> 0,// 新增业绩 "team_count"=> $v["performance"]['common_nums'] + $v["performance"]['person_nums'] + 1,// 团购人数(加的这个1 是当前用户的数) ]; } }else{ // 直推列表 foreach($tes as $k=>$v){ $data1['data'][$k] = [ "uid"=>$v["uid"], "nickname"=> $v['nickname'], "avatar"=>$v['avatar'], "create_time"=>"2025-01-25 11:00:18", ]; } } $data['team_list'] = $data1; $data['fans_num'] = $team_userinfo_old_jbp1['person_nums'] + $team_userinfo_old_jbp1['common_nums'] ;// 粉丝数 $data['new_performance'] = 0;// 新增业绩 $data['total_performance']= $team_userinfo_old_jbp1['sum_nums_pv'];// 总业绩 $data['person_nums'] = $team_userinfo_old_jbp1['person_nums'];// 个人联盟 $data['common_nums'] = $team_userinfo_old_jbp1['common_nums'];// 共建联盟 $data['common_nums_pv'] =max( $team_userinfo_old_jbp1['common_nums_pv'],$team_userinfo_old_jbp1['person_nums_pv']);// 公共联盟PV $data['person_nums_pv'] = min( $team_userinfo_old_jbp1['common_nums_pv'],$team_userinfo_old_jbp1['person_nums_pv']);// 个人联盟PV // $data['effective_fans_num'] = DB::name('enterprise_user') } // var_dump($data); // 把新表中的新增邀请用户加到数组中 //$spread_usersdata = Db::name('user')->where("spread_uid",$teamid)->select();//查询旗下会员 // 查询当前会员旗下的会员数据 // 获取分页参数 [$page, $limit] = $this->getPage(); // 查询当前会员旗下的会员数据(分页) $subordinate_members = Db::name('user') ->alias('u') ->join('store_order so', 'u.uid = so.uid', 'LEFT') ->where("u.spread_uid", $teamid) // 查询旗下会员 ->where("so.mer_id", 496) // ->where("so.douhuomall", 1) // ->where("so.douhuomall_status", 9) // ->where("so.status", 0) ->group('u.uid') // 确保每个用户只出现一次 ->page($page, $limit) // 分页查询 ->select(); // 获取分页数据 // 计算团队总业绩 // $total_amount=0; // foreach($subordinate_members as $k=>$v){ // } // 获取总会员数 $total_members = Db::name('user') ->alias('u') ->join('store_order so', 'u.uid = so.uid', 'LEFT') ->where("u.spread_uid", $teamid) // 查询旗下会员 ->where("so.mer_id", 496) // ->where("so.douhuomall", 1) // ->where("so.douhuomall_status", 9) // ->where("so.status", 0) ->group('u.uid') // 确保每个用户只出现一次 ->page($page, $limit) // 分页查询 ->count(); // 获取分页数据 // 构造分页信息 $data1 = [ "total" => $total_members, "per_page" => $limit, "current_page" => $page, "last_page" => ceil($total_members / $limit), "data" => [] ]; $total_amount_pv_team = 0;// 计算总业绩 // 获取团队总数量 $team_count_total = 0; $small_count = 0;// 小部门人数 // var_dump($this->calculatePerformance($subordinate_members)); // 获取大小部门数据(新表) $get_big_small_datas = $this->getbig_samll_datas($subordinate_members);// 下标0是大部门 // var_dump( $get_big_small_datas); // 判断大小部门的人数(根据业绩多的就是大部门,业绩小的就是小部门来计算展示的部门人数); $big_team_count = $get_big_small_datas[0]['team_count']; $smallteam_count = $get_big_small_datas[1]['team_count']; // end // 遍历分页数据,构造每个会员的详细信息 foreach ($subordinate_members as $k => $v) { // 计算自己和旗下的业绩 $t_teams_pv = $this->calculatePerformance($v['uid']); $total_amount_pv_team += $t_teams_pv['total_performance']; $data1['data'][$k] = [ "uid" => $v["uid"], "nickname" => $v['nickname'], // 假设昵称字段为 nickname "phone" => substr_replace($v['phone'], '****', 3, 4), // 隐藏手机号中间四位 "avatar" => $v['avatar'], // 假设头像字段为 avatar "create_time" => $v['create_time'], // 假设创建时间为 create_time "total_performance" => $t_teams_pv['total_performance'], // 假设总业绩字段需要额外计算 "new_performance" => $t_teams_pv['total_performance'], // 假设新增业绩字段需要额外计算 "team_count" => $t_teams_pv['team_count'], // 假设团购人数需要额外计算 ]; } // 根据 type 参数处理数据 if ($type == 1) { // 大部门:取 total_performance 最大的一个数组 usort($data1['data'], function ($a, $b) { return $b['total_performance'] <=> $a['total_performance']; }); $data1['data'] = array_slice($data1['data'], 0, 1); // 只保留最大的一个 } elseif ($type == 0) { // 小部门:去掉 total_performance 最大的一个数组 usort($data1['data'], function ($a, $b) { return $b['total_performance'] <=> $a['total_performance']; }); $data1['data'] = array_slice($data1['data'], 1); // 去掉第一个 } elseif ($type == 2) { // 直推:不做任何处理 } // 构造最终返回的数据 $data = [ 'team_list' => $data1, 'fans_num' => $get_big_small_datas[0]['team_count'] + $get_big_small_datas[1]['team_count'], // 粉丝数 'new_performance' => $get_big_small_datas[0]['total_performance'] + $get_big_small_datas[1]['total_performance'], // 新增业绩 'total_performance' => $get_big_small_datas[0]['total_performance'] + $get_big_small_datas[1]['total_performance'], // 总业绩 'person_nums' => $big_team_count, // 大部门人数 'common_nums' => $smallteam_count, // 小部门人数 'common_nums_pv' => $get_big_small_datas[0]['total_performance'], // 公共联盟PV 'person_nums_pv' => $get_big_small_datas[1]['total_performance'], // 个人联盟PV ]; return app("json")->success($data); } public function buildTreePv($users, $parentId = 0, $keyword = 'level_id' , $is_b = 1) { $branch = array(); foreach ($users as $user) { if ($user[$keyword] == $parentId) { if($keyword == 'spread_uid' && $is_b == 1) { $children = $this->buildTreePv($users, $user['uid'], 'spread_uid', $is_b+1); // 递归查找子节点 } else { $children = $this->buildTreePv($users, $user['uid'], 'level_id', $is_b+1); // 递归查找子节点 } if ($children) { $user['children'] = $children; // 如果有子节点,添加到当前节点 }else{ $user['children'] = []; } $user['team_count'] = count($children); $user['total_pv'] = $user['pv']; // 初始化当前节点的总余额为自身余额 if ($children) { // 如果存在子节点,计算总余额 foreach ($children as $child) { $user['total_pv'] += $child['total_pv']; // 累加子节点的总余额 $user['team_count'] += $child['team_count']; } } $branch[] = $user; // 将当前节点添加到树中 } } return $branch; // 返回当前分支的所有节点 } // 根据父级uid,递归获取所有子级UID数组 默认深度10级 public function getdepartmentStatistics($parentUid, $keyword = 'level_id') { $user = Db::name('user')->where('uid', $parentUid)->field('uid,nickname,avatar,spread_uid,pv,create_time,level_id')->find(); $user['pv'] = 0; $uids = [];// 用于存储符合条件的子级 uid $result = [$user]; // 用于存储符合条件的子级数据 // 定义递归函数 $is_a = true; $recursion = function ($parentUid) use (&$uids, &$result, &$recursion, &$keyword, &$is_a) { if ($keyword == 'spread_uid' && $is_a) { $children = Db::name('user')->field('uid,nickname,avatar,spread_uid,pv,create_time,level_id')->where($keyword, $parentUid)->select()->toArray(); $is_a = false; } else { $children = Db::name('user')->field('uid,nickname,avatar,spread_uid,pv,create_time,level_id')->where('level_id', $parentUid)->select()->toArray(); } // 查询当前父级的所有直接子级 // 如果没有子级,直接返回 if (!count($children) && count($children) < 1) { return; } // 遍历每个子级 foreach ($children as $childUid) { // 如果有重复的就跳过 防止死循环 if(in_array($childUid['uid'], $uids)){ continue; } // 将符合条件的子级 uid 添加到结果数组 $uids[] = $childUid['uid']; $result[] = $childUid; // 递归查询子级的子级 $recursion($childUid['uid']); } }; // 从初始父级开始递归查询 $recursion($parentUid); return $result; // 返回结果数组,并去重 } /** * 一壶茶-团队列表 */ public function team_list() { $teamid = $this->request->uid(); [$page, $limit] = $this->getPage(); // 小夏重写部分 $user_id = $teamid; // 如果下级团队只有一个人 那就不用再查了 为0 // 如果用户等级为用户身份 只查一级直推 // 去除掉贡献值最大的下级 $user = Db::name('user')->where('uid', $user_id)->field('uid,nickname,avatar,spread_uid,pv,create_time,level_id')->find(); $child_nums = $this->getdepartmentStatistics($user_id, 'level_id'); $child_nums_Tree = $this->buildTreePv($child_nums, $user['level_id'], 'level_id'); $new_performance = 0; // 一周内新增总业绩 // 这周的时间区间 // $end_time = date('Y-m-d ' . '00:00:00', strtotime('-7 days')); $now = time(); $startTime = date('Y-m-d 00:00:00', strtotime('monday this week', $now)); // 这周星期一的开始时间 $endTime = date('Y-m-d 23:59:59', strtotime('sunday this week', $now)); // 这周星期日的结束时间 $person_nums_pv = 0;// 大部门业绩 $common_nums_pv = 0;// 小部门业绩 $aLL_list = [];// 直推数据 $person_list = [];// 大部门数据 $common_list = [];// 小部门数据 if (count($child_nums_Tree) && isset($child_nums_Tree[0]['children']) && count($child_nums_Tree[0]['children'])) { // 计算总新增业绩 $uid_list = array_column($child_nums, 'uid'); $uid_list = array_diff($uid_list, [$user_id]); $new_performance = Db::name("user_pv_log") ->whereIn('uid', $uid_list) ->whereBetween('settlement_time', [$startTime, $endTime]) ->sum('pv'); // 获取大部门的key $maxBalanceIndex = array_search(max(array_column($child_nums_Tree[0]['children'], 'total_pv')), array_column($child_nums_Tree[0]['children'], 'total_pv')); foreach ($child_nums_Tree[0]['children'] as $k => $v) { $child_nums = $this->getdepartmentStatistics($v['uid'], 'level_id'); $uid_list = array_column($child_nums, 'uid'); array_push($uid_list, $v['uid']); $new_performance_child = Db::name("user_pv_log") ->whereIn('uid', $uid_list) ->whereBetween('settlement_time', [$startTime, $endTime]) ->sum('pv'); if ($k == $maxBalanceIndex) { $person_list[] = [ "uid" => $v["uid"], "spread_uid" => $v['spread_uid'], "level_id" => $v['level_id'], "nickname" => $v['nickname'], "avatar" => $v['avatar'], "pv" =>round( $v['pv'],2), "total_performance" => round($v['total_pv'],2), "create_time" => $v['create_time'], 'team_count' => $v['team_count'], 'new_performance' => $new_performance_child ]; $person_nums_pv = bcadd($person_nums_pv, $v['total_pv'],2); } else { $common_list[] = [ "uid" => $v["uid"], "spread_uid" => $v['spread_uid'], "level_id" => $v['level_id'], "nickname" => $v['nickname'], "avatar" => $v['avatar'], "pv" => round($v['pv'],2), "total_performance" => round($v['total_pv'],2), "create_time" => $v['create_time'], 'team_count' => $v['team_count'], 'new_performance' => $new_performance_child ]; $common_nums_pv = bcadd($common_nums_pv, $v['total_pv'],2); } // 我的直推 不是大小团队 加起来 // $aLL_list[] = [ // "uid" => $v["uid"], // "spread_uid" => $v['spread_uid'], // "nickname" => $v['nickname'], // "avatar" => $v['avatar'], // "pv" => $v['pv'], // "total_performance" => (int)$v['total_pv'], // "create_time" => $v['create_time'], // 'team_count'=> $v['team_count'], // 'new_performance' => $new_performance_child // ]; } } $type = $this->request->param('type', 0);// 1:大部门,0:小部门,2:直推 // 初始化最终返回的数据 $data = [ 'team_list' => [], 'fans_num' => 0, // 粉丝数 'new_performance' => 0, // 新增业绩 'total_performance' => 0, // 总业绩 'person_nums' => 0, // 个人联盟人数 'common_nums' => 0, // 公共联盟人数 'common_nums_pv' => 0, // 公共联盟PV 'person_nums_pv' => 0, // 个人联盟PV ]; if ($type != 2) { if ($type == 1) { $data1 = [ "total" => count($person_list), "per_page" => (int)$limit, "current_page" => $page, "last_page" => ceil(count($person_list) / $limit), "data" => array_slice($person_list, ($page - 1) * $limit, $limit) ]; } else { $data1 = [ "total" => count($common_list), "per_page" => (int)$limit, "current_page" => $page, "last_page" => ceil(count($common_list) / $limit), "data" => array_slice($common_list, ($page - 1) * $limit, $limit) ]; } } else { $child_nums = $this->getdepartmentStatistics($user_id, 'spread_uid'); $child_nums_Tree_spread = $this->buildTreePv($child_nums, $user['spread_uid'], 'spread_uid'); if (count($child_nums_Tree_spread) && isset($child_nums_Tree_spread[0]['children']) && count($child_nums_Tree_spread[0]['children'])) { // 计算总新增业绩 $uid_list = array_column($child_nums, 'uid'); $uid_list = array_diff($uid_list, [$user_id]); foreach ($child_nums_Tree_spread[0]['children'] as $k => $v) { $child_nums = $this->getdepartmentStatistics($v['uid']); $uid_list = array_column($child_nums, 'uid'); array_push($uid_list, $v['uid']); $new_performance_child = Db::name("user_pv_log") ->whereIn('uid', $uid_list) ->whereBetween('settlement_time', [$startTime, $endTime]) ->sum('pv'); $aLL_list[] = [ "uid" => $v["uid"], "spread_uid" => $v['spread_uid'], "level_id" => $v['level_id'], "nickname" => $v['nickname'], "avatar" => $v['avatar'], "pv" => round($v['pv'],2), "total_performance" => round($v['total_pv'], 2), "create_time" => $v['create_time'], 'team_count'=> $v['team_count'], 'new_performance' => $new_performance_child ]; } } $data1 = [ "total" => count($aLL_list), "per_page" => (int)$limit, "current_page" => $page, "last_page" => ceil(count($aLL_list) / $limit), "data" => array_slice($aLL_list, ($page - 1) * $limit, $limit) ]; } // 旧系统中的公共部分数据 $data['teamid'] = $teamid; $data['team_list'] = $data1; $data['fans_num'] = $child_nums_Tree[0]['team_count'];// 总人数 $data['new_performance'] = $new_performance;// 新增总业绩 $data['total_performance'] = bcadd($child_nums_Tree[0]['total_pv'] ?? 0, 0, 2);// 总业绩 $data['person_nums'] = count($person_list);// 大部门人数 $data['common_nums'] = count($common_list);// 小部门人数 $data['common_nums_pv'] = $person_nums_pv;// 大部门业绩 $data['person_nums_pv'] = $common_nums_pv;// 小部门业绩 return app("json")->success($data); // // 查询当前会员旗下的会员数据(分页) // [$page, $limit] = $this->getPage(); // $subordinate_members = Db::name('user') // // ->alias('u') // // ->join('store_order so', 'u.uid = so.uid', 'LEFT') // ->where("spread_uid", $teamid) // // ->where("so.mer_id", 496) // // ->group('u.uid') // ->page($page, $limit) // ->select(); // $total_members = Db::name('user') // // ->alias('u') // // ->join('store_order so', 'u.uid = so.uid', 'LEFT') // ->where("spread_uid", $teamid) // // ->where("so.mer_id", 496) // // ->group('u.uid') // ->count(); // $data1 = [ // "total" => $total_members, // "per_page" => $limit, // "current_page" => $page, // "last_page" => ceil($total_members / $limit), // "data" => [] // ]; // $total_amount_pv_team = 0; // $team_count_total = 0; // foreach ($subordinate_members as $k => $v) { // $t_teams_pv = $this->calculatePerformance($v['uid']); // $total_amount_pv_team += $t_teams_pv['total_performance']; // $team_count_total += $t_teams_pv['team_count']; // $data1['data'][$k] = [ // "uid" => $v["uid"], // "nickname" => $v['nickname'], // "phone" => substr_replace($v['phone'], '****', 3, 4), // "avatar" => $v['avatar'], // "create_time" => $v['create_time'], // "total_performance" => $t_teams_pv['total_performance'], // "new_performance" => $t_teams_pv['total_performance'], // "team_count" => $t_teams_pv['team_count'], // ]; // } // // 获取大小部门数据 // $get_big_small_datas = $this->getbig_samll_datas($subordinate_members); // // 判断大小部门的人数 // $big_team_count = $get_big_small_datas[0]['team_count']; // $small_team_count = $get_big_small_datas[1]['team_count']; // // 根据 type 参数处理数据 // if ($type == 1) { // usort($data1['data'], function ($a, $b) { // return $b['total_performance'] <=> $a['total_performance']; // }); // $data1['data'] = array_slice($data1['data'], 0, 1); // } elseif ($type == 0) { // usort($data1['data'], function ($a, $b) { // return $b['total_performance'] <=> $a['total_performance']; // }); // $data1['data'] = array_slice($data1['data'], 1); // } // // 合并数据 // if (!empty($datas_jbp)) { // // 如果旧系统中有数据,合并新旧数据 // $data['team_list']['data'] = array_merge($data['team_list']['data'], $data1['data']); // $data['fans_num'] += $team_count_total; // $data['new_performance'] += $total_amount_pv_team; // $data['total_performance'] += $total_amount_pv_team; // $data['person_nums'] += $big_team_count; // $data['common_nums'] += $small_team_count; // $data['common_nums_pv'] += $get_big_small_datas[0]['total_performance']; // $data['person_nums_pv'] += $get_big_small_datas[1]['total_performance']; // } else { // // 如果旧系统中没有数据,直接使用新数据 // $data['team_list'] = $data1; // $data['fans_num'] = $team_count_total; // $data['new_performance'] = $total_amount_pv_team; // $data['total_performance'] = $total_amount_pv_team; // $data['person_nums'] = $big_team_count; // $data['common_nums'] = $small_team_count; // $data['common_nums_pv'] = $get_big_small_datas[0]['total_performance']; // $data['person_nums_pv'] = $get_big_small_datas[1]['total_performance']; // } // return app("json")->success($data); } // 计算自己和自己团队下面的业绩。新表 // 计算自己和自己团队下面的业绩。新表 public function calculatePerformance($uid) { // 初始化业绩数组 $performance = [ 'personal_performance' => 0, // 个人业绩 'team_performance' => 0, // 团队业绩 'total_performance' => 0, // 总业绩 'team_count' => 0, // 加上自己的团队数量 ]; // 定义业绩换算规则 $performanceMapping = [ 1180 => 700, 10620 => 6300, 11800 => 7000 ]; // 计算个人业绩 $personalOrder = Db::name('store_order')->where("uid", $uid)->find(); if ($personalOrder) { // 将浮点数转换为整数 $totalPrice = (int)$personalOrder['total_price']; if (isset($performanceMapping[$totalPrice])) { $performance['personal_performance'] = $performanceMapping[$totalPrice]; } } if($uid <= 611){ // 计算旗下团队成员的业绩 $teamOrders = Db::name('user') ->alias('u') ->join('store_order so', 'u.uid = so.uid', 'LEFT') ->where("u.spread_uid", $uid) // 查询旗下会员 ->where("so.mer_id", 496) // ->where("so.douhuomall", 1) // ->where("so.douhuomall_status", 9) // ->where("so.status", 0) ->select(); $teamOrders_count = Db::name('user') ->alias('u') ->join('store_order so', 'u.uid = so.uid', 'LEFT') ->where("u.spread_uid", $uid) // 查询旗下会员 ->where("so.mer_id", 496) // ->where("so.douhuomall", 1) // ->where("so.douhuomall_status", 9) // ->where("so.status", 0) ->count(); $performance['team_count'] = $teamOrders_count + 1; // 赋值团队数量 foreach ($teamOrders as $order) { if ($order['total_price']) { // 将浮点数转换为整数 $totalPrice = (int)$order['total_price']; if (isset($performanceMapping[$totalPrice])) { $performance['team_performance'] += $performanceMapping[$totalPrice]; } } } // 计算总业绩 $performance['total_performance'] = $performance['personal_performance'] + $performance['team_performance']; // 假设总业绩最大值需要通过后续逻辑判断,这里暂时设置为 false return $performance; } } // 获取大小部门业绩(新表) public function getbig_samll_datas($subordinate_members){ // 单独写一个方法获取大小部门的数据 $arr_team = []; foreach ($subordinate_members as $k => $v) { // 计算自己和旗下的业绩 $arr_team[] = $this->calculatePerformance($v['uid']); } // 初始化变量 $maxPerformance = 0; $maxIndex = -1; // 找出 total_performance 最高的记录 foreach ($arr_team as $index => $item) { if ($item['total_performance'] > $maxPerformance) { $maxPerformance = $item['total_performance']; $maxIndex = $index; } } // 如果找到了最高记录 if ($maxIndex !== -1) { // 提取最高记录 $maxRecord = $arr_team[$maxIndex]; // 从原数组中移除该记录 unset($arr_team[$maxIndex]); // 重新索引数组 $arr_team = array_values($arr_team); } else { // 如果没有找到记录,可以设置一个默认值 $maxRecord = null; } // 计算大部门和小部门的汇总信息 $majorDepartmentSummary = [ "total_person_performance" => $maxRecord ? $maxRecord['personal_performance'] : 0, "total_team_performance" => $maxRecord ? $maxRecord['team_performance'] : 0, "total_performance" => $maxRecord ? $maxRecord['total_performance'] : 0, "team_count" => $maxRecord ? $maxRecord['team_count'] : 0, "data" => $maxRecord ? [$maxRecord] : [] ]; $minorDepartmentSummary = [ "total_person_performance" => array_sum(array_column($arr_team, 'personal_performance')), "total_team_performance" => array_sum(array_column($arr_team, 'team_performance')), "total_performance" => array_sum(array_column($arr_team, 'total_performance')), "team_count" => array_sum(array_column($arr_team, 'team_count')), "data" => $arr_team ]; // 输出结果 // echo "大部门汇总信息:\n"; // print_r($majorDepartmentSummary); // echo "小部门汇总信息:\n"; // print_r($minorDepartmentSummary); return array($majorDepartmentSummary,$minorDepartmentSummary); } // 计算自己和自己团队下面的业绩。新表 public function calculatePerformance_copy($uid) { // 初始化业绩数组 $performance = [ 'personal_performance' => 0, // 个人业绩 'team_performance' => 0, // 团队业绩 'total_performance' => 0, // 总业绩 'team_count' =>0, // 加上自己的团队数量 //'team_count_pr'=>0,//实际团队数量(没有加上自己) ]; // 定义业绩换算规则 $performanceMapping = [ 1180 => 700, 10620 => 6300, 11800 => 7000 ]; // 计算个人业绩 $personalOrder = Db::name('store_order')->where("uid", $uid)->find(); if ($personalOrder) { // 将浮点数转换为整数 $totalPrice = (int)$personalOrder['total_price']; if (isset($performanceMapping[$totalPrice])) { $performance['personal_performance'] = $performanceMapping[$totalPrice]; } } // 计算旗下团队成员的业绩 $teamOrders = Db::name('user') ->alias('u') ->join('store_order so', 'u.uid = so.uid', 'LEFT') ->where("u.spread_uid", $uid) // 查询旗下会员 ->where("so.mer_id", 496) // ->where("so.douhuomall", 1) // ->where("so.douhuomall_status", 9) // ->where("so.status", 0) ->select(); $teamOrders_count = Db::name('user') ->alias('u') ->join('store_order so', 'u.uid = so.uid', 'LEFT') ->where("u.spread_uid", $uid) // 查询旗下会员 ->where("so.mer_id", 496) // ->where("so.douhuomall", 1) // ->where("so.douhuomall_status", 9) // ->where("so.status", 0) ->count(); $performance['team_count'] = $teamOrders_count+1;// 赋值团队数量 //$performance['team_count_pr'] = $teamOrders_count;//没有加上父级赋值团队数量 foreach ($teamOrders as $order) { if ($order['total_price']) { // 将浮点数转换为整数 $totalPrice = (int)$order['total_price']; if (isset($performanceMapping[$totalPrice])) { $performance['team_performance'] += $performanceMapping[$totalPrice]; } } } // 计算总业绩 $performance['total_performance'] = $performance['personal_performance'] + $performance['team_performance']; return $performance; } public function team_list_copy旧表使用() { $teamid = $this->request->uid(); //$teamid = $this->request->param('teamid');//测试ID $teamid = 17; $type = $this->request->param('type',0);// 1:大部门,0:小部门,2:直推 $team_userinfo_old_jbp1= $this->getPerformance($teamid); // 判断大小团队(业绩多的是大部门,业绩小的是小部门) $tes = $this->teamPeople($teamid,$type);// 1:团队,2:个人 $data1= [ "total"=>100, "per_page"=> 10, "current_page"=> 1, "last_page"=> 1, ]; if($type != 2){ // 小部门和大部门列表数据 foreach($tes as $k=>$v){ $curr_pv = ''; if($v['curr_type']==0){ $curr_pv = $team_userinfo_old_jbp1['person_nums_pv']; }else if($v['curr_type']==1){ $curr_pv = $team_userinfo_old_jbp1['common_nums_pv']; }else{ $curr_pv = 0; } $data1['data'][$k] = [ "uid"=>$v["id"], "nickname"=> $v['user_name'] . $curr_pv, "phone"=> "137****3315", "avatar"=>"https://cdn.bjtdba.com/vod/image/2025-01-20/20250120125206881.png", "create_time"=>"2025-01-25 11:00:18", "identity"=>"11", "level"=> "40002", "partnership"=>"22", "total_performance"=> $curr_pv,//$v["performance"]['sum_nums_pv'],//总业绩 "new_performance"=> 0,// 新增业绩 "team_count"=> $v["performance"]['common_nums'] + $v["performance"]['person_nums'] + 1,// 团购人数(加的这个1 是当前用户的数) ]; } }else{ // 直推列表 foreach($tes as $k=>$v){ $data1['data'][$k] = [ "uid"=>$v["uid"], "nickname"=> $v['nickname'], "avatar"=>$v['avatar'], "create_time"=>"2025-01-25 11:00:18", ]; } } $data['team_list'] = $data1; $data['fans_num'] = $team_userinfo_old_jbp1['person_nums'] + $team_userinfo_old_jbp1['common_nums'] ;// 粉丝数 $data['new_performance'] = 0;// 新增业绩 $data['total_performance']= $team_userinfo_old_jbp1['sum_nums_pv'];// 总业绩 $data['person_nums'] = $team_userinfo_old_jbp1['person_nums'];// 个人联盟 $data['common_nums'] = $team_userinfo_old_jbp1['common_nums'];// 共建联盟 $data['common_nums_pv'] =max( $team_userinfo_old_jbp1['common_nums_pv'],$team_userinfo_old_jbp1['person_nums_pv']);// 公共联盟PV $data['person_nums_pv'] = min( $team_userinfo_old_jbp1['common_nums_pv'],$team_userinfo_old_jbp1['person_nums_pv']);// 个人联盟PV // $data['effective_fans_num'] = DB::name('enterprise_user') // 把新表中的新增邀请用户加到数组中 return app("json")->success($data); } /** * 一壶茶-团队列表 */ public function team_list_copy() { $uid = $this->request->uid(); $where['puid'] = $uid; $where['mer_id'] = $this->merId; $data['direct_fans_num'] = Db::name('enterprise_user')->where($where)->count();// 直属粉丝数量 // var_dump($uid); $arr = $this->jisuan_fans($uid); $data['fans_num'] = count($arr);// 粉丝总数 $data['total_performance'] = 12555;// 总业绩 $data['new_performance'] = 15;// 新增业绩 [$page, $limit] = $this->getPage(); $where2['eu.mer_id'] = $this->merId; $type = $this->request->param('type', 0);// 1:大部门,0:小部门 // var_dump($where2); $enterprise_user_team = DB::name('enterprise_user') ->alias('eu') ->join('user u', 'eu.uid=u.uid') ->where($where2) ->when($type < 1 || $type == 2, function ($q) use ($arr) { $q->whereIn('eu.uid', $arr); }) ->when($type == 1, function ($q) use ($uid) { $q->whereIn('eu.puid', $uid); }) ->when($type == 2, function ($q) use ($uid) { $q->whereIn('eu.identity', [100, 101, 102, 103, 104, 105]); }) ->field('eu.uid,u.nickname,u.phone,eu.avatar,eu.create_time,eu.identity,eu.level,eu.partnership') ->order('eu.enterprise_user_id desc') ->paginate($limit) ->each(function ($item) { $item['phone'] = substr_replace($item['phone'], '****', 3, 4); return $item; }); // var_dump($enterprise_user_team); $data['team_list'] = $enterprise_user_team; $data['effective_fans_num'] = DB::name('enterprise_user') ->alias('eu') ->join('user u', 'eu.uid=u.uid') ->where($where2) ->whereIn('eu.uid', $arr) ->whereIn('eu.identity', [100, 101, 102, 103, 104, 105]) ->count();// 有效粉丝数量 return app("json")->success($data); } public function team_details() { $uid = $this->request->param('uid', 0); $where2['eu.uid'] = $uid; $where2['eu.mer_id'] = $this->merId; $enterprise_user_team = DB::name('enterprise_user') ->alias('eu') ->join('user u', 'eu.uid=u.uid') ->where($where2) ->field('eu.uid,u.nickname,u.phone,u.avatar,eu.create_time,eu.identity,eu.level,eu.partnership,eu.puid') ->find();; if ($enterprise_user_team) { $enterprise_user_team['phone'] = substr_replace($enterprise_user_team['phone'], '****', 3, 4); $enterprise_user_team['p_nickname'] = ''; $enterprise_user_team['p_phone'] = ''; $yanglao = 0; $offLinewhere = ['mer_id' => $this->merId, 'uid' => $uid, 'commission_type' => '5', 'type_shop' => 0]; $offLine1 = Db::name('user_bill')->where($offLinewhere)->where('source', 1)->where('status', 1)->sum('number'); $yanglao += $offLine1; $offLine2 = Db::name('user_bill')->where($offLinewhere)->where('source', 0)->whereIn('status', [0, 1])->sum('number'); $yanglao += $offLine2; $enterprise_user_team['ylj'] = set_price_rtrim($yanglao); if ($enterprise_user_team['puid'] > 0) { $user = Db::name('user')->where('uid', $enterprise_user_team['puid'])->find(); if ($user) { $enterprise_user_team['p_nickname'] = $user['nickname']; $enterprise_user_team['p_phone'] = substr_replace($user['phone'], '****', 3, 4); } } } return app("json")->success($enterprise_user_team); } /** * 率积分明细 */ public function green_integral_list() { $pm = $this->request->param('pm'); $status = $this->request->param('status'); [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); log::info("green_integral_list==={$uid}"); $where['uid'] = $uid; // $where['mer_id'] = $this->merId; // if ($pm == 1) { // $pm_arr = [1, 3]; // } else { // $pm_arr = [2, 4]; // } if ($pm==0){ $data = DB::name('user_sign_score')->where($where)->where('pm', 1)->where('status',1)->field('id,mark,reward_socre,pm,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); } if($pm==1){ $data = DB::name('user_sign_score')->where($where)->where('pm', 2)->where('status', 1)->field('id,mark,reward_socre,pm,addtime,order_id')->page($page, $limit)->order("id desc")->select(); } if($pm==2){ $data = DB::name('user_sign_score')->where($where)->where([['status','in','-1,0']])->field('id,mark,reward_socre,pm,addtime,order_id,status')->page($page, $limit)->order("id desc")->select(); if($data){ $data = $data->toArray(); foreach ($data as $k=>$v){ if($v['status'] == 0){ $data[$k]['mark'] = '(失效)' . $v['mark']; } } } } return app("json")->success($data); } public function user_invite_profit_list() { $uid = $this->request->uid(); [$page, $limit] = $this->getPage(); $commission_type = $this->request->param('commission_type', 0); if ($commission_type) { $where['commission_type'] = $commission_type; } $month = $this->request->param('month', '') ?: date('Y-m'); $startMonth = date('Y-m-01 00:00:00', strtotime($month)); $endMonth = date("Y-m-d 00:00:00", strtotime("first day of next month", strtotime($month))); $data['yanglao_clear_all'] = Db::name('user_bill') ->where('uid', $uid) ->whereBetween('create_time', [$startMonth, $endMonth]) ->where('commission_type', 5) ->where('pm', 1) ->where('status', 1) ->sum('number'); $data['yanglao_nclear_all'] = Db::name('user_bill') ->where('uid', $uid) ->whereBetween('create_time', [$startMonth, $endMonth]) ->where('commission_type', 5) ->where('pm', 1) ->where('status', 0) ->sum('number'); $data['yanglao_yugu_all'] = $data['yanglao_clear_all'] + $data['yanglao_nclear_all']; $where['uid'] = $uid; $data['totel_money'] = Db::name('user_bill')->where($where) ->whereNotIn('commission_type', [0, 5, 17, 19]) ->when($commission_type == 5, function ($query) use ($where, $startMonth, $endMonth) { $query->whereBetween('create_time', [$startMonth, $endMonth]); }, function ($query) use ($where, $month, $startMonth, $endMonth) { $query->where('commission_type', '<>', 5) ->whereBetween('create_time', [$startMonth, $endMonth]); }) ->sum('number'); $pageInfo = Db::name('user_bill') ->where($where) ->whereNotIn('commission_type', [0, 5, 17, 19]) ->when($commission_type == 5, function ($query) use ($where, $startMonth, $endMonth) { $query->whereBetween('create_time', [$startMonth, $endMonth]); }, function ($query) use ($where, $month, $startMonth, $endMonth) { $query->where('commission_type', '<>', 5) ->whereBetween('create_time', [$startMonth, $endMonth]); }) ->order('bill_id desc') ->paginate($limit); $data_arr = []; foreach ($pageInfo->items() as $k => $v) { $v['money'] = set_price_rtrim($v['number']); $v['order_money'] = set_price_rtrim(0); $v['commission_rate'] = set_price_rtrim(0); $order = Db::name('store_order')->where('order_sn', $v['order_sn'])->find(); if (!empty($order)) { $v['order_money'] = set_price_rtrim($order['total_price']); $v['commission_rate'] = set_price_rtrim(bcdiv($v['money'], $v['order_money'], 2)); } if ($v['status'] == 0) { // $v['create_time'] = '--'; } if ($v['status'] == 1) { // $v['create_time'] = $v['take_time']; $v['sett_time'] = date('Y-m-d H:i:s',$v['take_time']); } if ($v['status'] == -1) { $v['mark'] = '(失效)' . $v['mark']; // $v['status'] = 0; } $v['status_name'] = $this->statusName[$v['status']]; $data_arr[] = $v; } $data['pageInfo']['current_page'] = $pageInfo->currentPage(); $data['pageInfo']['data'] = $data_arr; $data['pageInfo']['last_page'] = $pageInfo->lastPage(); return app("json")->success($data); } /*导航转链-用于用户下单绑定*/ public function changeLink() { $uid = $this->request->uid(); if (!$uid) { return app("json")->error("请登录"); } $data = $data = $this->request->params([ 'url', 'name' ]); $data['url'] = urldecode($data['url']); $data['name'] = urldecode($data['name']); if (in_array($data['name'], ['京东', '苏宁易购', '饿了么', '唯品会', '拼多多'])) { if ($data['name'] == '京东') { $url = app()->make(Jd::class)->linkChange($data['url'], $uid); } if ($data['name'] == '拼多多') { $url = app()->make(TaoKe::class)->changeLink($data['url'], $uid); } if ($data['name'] == '唯品会') { $url = app()->make(Vip::class)->changeLink($data['url'], $uid); } if ($data['name'] == '苏宁易购') { $url = $data['url']; //$url = app()->make(Su::class)->changeLink($data['url'],$uid); } if ($data['name'] == '饿了么') {// 获取饿了么官方活动链接 // 如果用户没有拉取relation_id, $where = ['uid' => $uid, 'type' => 5]; $isRelation = UserThirdModel::where($where)->find(); if ($isRelation) { $result = DaTaoKe::activityChangeLink('20150318020002597', $uid); if ($result['code'] == 0) { return \app('json')->fail("获取饿了么链接出错", $result['raw']); } $url = $result['link']; } else {// 如果还没有获取用户的relation_id还需要拉淘宝授权 $state = "{$uid}_h5"; $url = \app()->make(TaoBao::class)->getAuthUrl($state); } } } return app("json")->success($url); } /*获取协议*/ public function xieyi() { $data = $this->request->params([ 'type' ]); $data = app()->make(\app\common\repositories\agreement\AgreementRepository::class)->getTypeDetail($data['type']); return app("json")->success($data); } /*获取规则文章*/ public function guize() { $id = $this->request->param('id'); $data = app()->make(\app\common\repositories\agreement\AgreementRepository::class)->getTypeDetail($id); if(!$data){ $data['title']=''; $data['content']=''; } $html=' '.$data['title'].'
'.$data['content'].'
request->param('code'); $type = $this->request->param('type', 'h5'); $paramStr = $userRepository->getTokenByCode($authorization_code, false, $type); return app("json")->success($paramStr); } /** * 微信获取授权 * @return mixed * @author php迷途小书童 * @created 2021/1/16 19:08 */ public function wechatAuthorization() { $request = $this->request; $wxConfig = [ "appid" => "wx66f5f8def2b755da", "appsecret" => "891572d83222105a635cf9f502363ff8" ]; $oauth = WechatService::create()->getApplication()->oauth; // dump($oauth); $oauth->setRequest(new Request($request->get(), $request->post(), [], [], [], $request->server(), $request->getContent())); try { $wechatInfo = $oauth->user()->getOriginal(); } catch (\Exception $e) { return app('json')->fail('授权失败[001]', ['message' => $e->getMessage()]); } if (!isset($wechatInfo['nickname'])) { return app('json')->fail('授权失败[002]'); } return app("json")->success($wechatInfo); } /** * 解绑微信 支付宝账号 * 严格来说 应该给 user_account 加一个的字段来表明生效失效,但增加后 需要调整的模块较多,又不能直接删除(担心直接删除后,出问题没地方查) * @param UserRepository $userRepository * @return mixed */ public function unbindAccount(UserRepository $userRepository) { $type = $this->request->param('type'); $uid = $this->request->uid(); makeLock()->lock(); Db::startTrans(); try { $user = Db::name("user")->where(['uid' => $uid])->find(); if (empty($user)) { throw new \Exception('未查询到用户信息'); } if ($type == 1) { $user_extract_openid = Db::name('user_extract_openid')->where('uid', $uid)->find(); if (!empty($user_extract_openid)) { Db::name('log')->insert(['data' => '三方授权解绑(' . $uid . ')' . json_encode($user_extract_openid)]); Db::name('user_extract_openid')->where('uid', $uid)->delete(); // 使用 Db 对象删除 } if (!empty($user['wechat_user_id'])) { $user_extract_openid = Db::name('user_extract_openid')->where('openid', $user['wechat_user_id'])->find(); if (!empty($user_extract_openid)) { Db::name('log')->insert(['data' => '三方授权解绑(' . $uid . ')' . json_encode($user_extract_openid)]); Db::name('user_extract_openid')->where('openid', $user['wechat_user_id'])->delete(); // 使用 Db 对象删除 } } Db::name("user")->where(['uid' => $uid])->update(["wechat_user_id" => 0]); Db::name('user_account')->where('uid', $uid)->where('type', 1)->delete(); } else { Db::name("user")->where(['uid' => $uid])->update(["ali_user_id" => 0]); Db::name('user_account')->where('uid', $uid)->where('type', 2)->delete(); } } catch (\Throwable $e) { Db::rollback(); makeLock()->unlock(); return app("json")->fail("失败" . $e->getMessage()); } Db::commit(); makeLock()->unlock(); return app("json")->success("解绑成功", []); } /** * 更新绑定微信支付宝账号 * type=1 微信 2 支付宝 * openid openid */ public function updateAccount(UserRepository $userRepository) { $type = $this->request->param('type'); $openid = $this->request->param('openid');// 前端传的是unionid $nickname = $this->request->param('nickname'); $avater = $this->request->param('avater'); $alinfo = $this->request->param('alinfo'); $uid = $this->request->uid(); $user = $this->request->userInfo(); if (!$type) { return app("json")->fail("失败"); } makeLock()->lock(); try { if ($type == 1) { $data = ["wechat_user_id" => $openid]; $unionId = $openid; $userDataList = Db::name("user")->where(['wechat_user_id' => $unionId])->select()->toArray(); $normalUserDataList = []; $normalUserData = []; if (!empty($userDataList)) { $resetWechatUserIdList = []; foreach ($userDataList as $userdata) { if ($userdata['is_del'] == 1) { $resetWechatUserIdList[] = $userdata['uid']; } else { $normalUserDataList[] = $userdata; } } if (!empty($resetWechatUserIdList)) { Db::name("user")->whereIn('uid', $resetWechatUserIdList)->update(["wechat_user_id" => 0]); Db::name("user_extract_openid")->whereIn('uid', $resetWechatUserIdList)->delete(); Db::name("user_account")->whereIn('uid', $resetWechatUserIdList)->delete(); } if (count($normalUserDataList) > 1) { throw new \Exception("当前微信号异常,请联系客服!"); } else if (count($normalUserDataList) == 1) { $normalUserData = array_shift($normalUserDataList); if ($normalUserData['uid'] != $uid) { throw new \Exception("此微信号已被绑定"); } } } $check = Db::name('user_extract_openid')->where('uid',$uid)->value('openid'); if (!empty($check)){ if ($check != $unionId) throw new \Exception("当前用户已绑定其他微信号"); } else { Db::name("user_extract_openid")->insert([ 'uid' => $uid, 'openid' => $unionId, 'type' => 1 ]); } } else { $alinfo = json_decode($alinfo, true); if (!$alinfo) throw new \Exception("参数异常"); $data = ["ali_user_id" => $alinfo["userId"]]; $unionId = $alinfo["userId"]; $check = Db::name("user")->where("ali_user_id", $unionId)->find(); if ($check) throw new \Exception("此支付宝号已被绑定"); // $paramStr = $userRepository->getTokenByCode($alinfo["authCode"], true); $paramStr = $userRepository->getTokenByCodeWithCert($alinfo["authCode"], true); $nickname = empty($paramStr["nick_name"]) ? "al" . $alinfo["userId"] : $paramStr["nick_name"]; $avater = empty($paramStr["avatar"]) ? "https://cdn.bjtdba.com/vod/image/2025-01-21/20250121180855764.png" : $paramStr["avatar"]; } $data2 = [ "type" => $type, "uid" => $uid, "nickname" => $nickname, "avater" => $avater, ]; $result = $this->repository->updateUser($uid, $data, $data2); if (!$result) throw new \Exception("修改失败"); $userRepository = app()->make(UserRepository::class); $userInfo = $userRepository->getOne(['uid' => $uid]); // 绑定线下充值金额 $unionUsersRepository = app()->make(UnionUsersRepository::class); $orderMerchantRepository = app()->make(OrderMerchantRepository::class); $notBind = $unionUsersRepository->getAllNotBind($unionId); if ($notBind) { $orderMerchantRepository->doBindUser($userInfo, $type); } } catch (\Throwable $e) { makeLock()->unlock(); return app("json")->fail("失败" . $e->getMessage()); } makeLock()->unlock(); return app("json")->success("修改成功", $data); } /** * 获取账号绑定信息 * @return mixed */ public function getAccount() { $uid = $this->request->uid(); // $data = $this->repository->getUser($uid, "wechat_user_id,ali_user_id"); $data = $this->repository->getAccount($uid); if ($data) { return app("json")->success("查询成功", $data); } return app("json")->fail("未绑定"); } // /* // * 养老金统计 // * */ // public function get_yanglao_statistics() // { // $uid = $this->request->uid(); // //线下数量 // // 查询未结算 // // $gzc_order_list = Db::name('gzc_logs')->where('uid', $uid)->column('out_trade_no'); // // $onlineYanglaoUserBill = Db::name('user_bill')->where('commission_type', 5)->whereNotIn('order_sn',$gzc_order_list)->where('status', 0)->where('uid', $uid)->sum('number'); // $onlineYanglaoGzc = Db::name('gzc_logs')->where('success', 0)->where('uid', $uid)->sum('pension'); // $clearYanglao = Db::name('gzc_logs')->where('success', 1)->where('uid', $uid)->sum('pension'); // // $userInfo = Db::name('UserCertification')->where('uid', $uid)->field('user_name,user_card')->find(); // $res = GzcApiRequest::checkAmount($userInfo); // $gzc = $res['extendData']['amount'] * 0.01; // // PCPC-中信公证处 // $data['all_gzc'] = set_price_rtrim(sprintf("%01.2f", $gzc)); // // 总养老金 // $data['all_yanglao'] = set_price_rtrim($onlineYanglaoUserBill + $onlineYanglaoGzc + $clearYanglao + $gzc); // // 平台养老金 // $data['all_yanglao_yhc'] = set_price_rtrim($onlineYanglaoUserBill + $onlineYanglaoGzc + $clearYanglao); // // 未结算养老金=预估养老金,不能包含进入公证处未成功的记录(这部分是已结算的) // $data['all_yanglao_yugu'] = set_price_rtrim(round($onlineYanglaoUserBill, 2)); // // 已结算养老金 已入账 // $data['all_yanglao_clear'] = set_price_rtrim(round($onlineYanglaoGzc+$clearYanglao, 2)); // // 已入账养老金 // $data['all_yanglao_in'] = set_price_rtrim(round($clearYanglao, 2)); // // 平台未入账养老金 // $data['all_yanglao_nclear'] = set_price_rtrim(round($onlineYanglaoGzc + $onlineYanglaoUserBill, 2)); // // 待发起 // $data['all_yanglao_wait'] = set_price_rtrim(round($onlineYanglaoGzc, 2)); // // return app("json")->success("查询成功", $data); // } /* * 养老金统计 * */ public function get_yanglao_statistics() { $uid = $this->request->uid(); // 线下数量 $offLine = \think\facade\Db::name('order_merchant')->where('uid', $uid)->where('status', 1)->field('pension yanglao')->select()->toArray(); $data['offLine'] = array( 'num' => count($offLine), 'yanglao' => round($this->num($offLine, 'yanglao'), 2) ); $offLinewhere=['uid'=>$uid,'status'=>'1','commission_type' => '5','source'=>1,'type_shop'=>10]; if($this->source=='yhc' && $this->merId){ $offLinewhere['mer_id']=$this->merId; } $offLine= \think\facade\Db::name('user_bill')->where($offLinewhere)->select()->toArray(); $data['offLine'] = array( 'num' => count($offLine), 'yanglao' => round($this->num($offLine, 'number'), 2) ); // $offLinewhere=['uid'=>$uid,'status'=>'1','commission_type' => '5','source'=>0,'type_shop'=>0]; // $offLine= \think\facade\Db::name('user_bill')->where($offLinewhere)->select()->toArray(); // $data['offLine'] = array( // 'num' => count($offLine), // 'yanglao' => round($this->num($offLine, 'number'), 2) // ); // 线上已确认收货 // $onLine = \think\facade\Db::name('store_order')->where('uid', $uid)->where('paid', 1)->where('status', 'in', '2,3')->select() // ->each(function ($item) { // //查询养老金金额 // $UserBillRepository = app()->make(UserBillRepository::class); // $bill = $UserBillRepository->getWhere(['uid' => $item['uid'], 'link_id' => $item['order_id'], 'order_sn' => $item['order_sn'], 'title' => '养老金']); // $pension = $bill->number ?? 0; // $item['yanglao'] = $pension; // return $item; // }) // ->toArray(); $onLinewhere=['uid'=>$uid,'status'=>'1','commission_type' => '5','source'=>0,'type_shop'=>0]; if($this->source=='yhc' && $this->merId){ $onLinewhere['mer_id']=$this->merId; } $onLine= \think\facade\Db::name('user_bill')->where($onLinewhere)->select()->toArray(); $data['onLine'] = array( 'num' => count($onLine), 'yanglao' => round($this->num($onLine, 'number'), 2) ); // 线上未确认收货 // $onLine = \think\facade\Db::name('store_order')->where('uid', $uid)->where('paid', 1)->where('status', 'in', '0,1')->select() // ->each(function ($item) { // //查询养老金金额 // $UserBillRepository = app()->make(UserBillRepository::class); // $bill = $UserBillRepository->getWhere(['uid' => $item['uid'], 'link_id' => $item['order_id'], 'order_sn' => $item['order_sn'], 'title' => '养老金']); // $pension = $bill->number ?? 0; // $item['yanglao'] = $pension; // return $item; // }) // ->toArray(); $onLine_take_nowhere=['uid'=>$uid,'status'=>'0','commission_type' => '5','source'=>0,'type_shop'=>0]; if($this->source=='yhc' && $this->merId){ $onLine_take_nowhere['mer_id']=$this->merId; } $onLine_take_no=\think\facade\Db::name('user_bill')->where($onLine_take_nowhere)->select()->toArray(); $data['onLine_take_no'] = array( 'num' => count($onLine_take_no), 'yanglao' => round($this->num($onLine_take_no, 'number'), 2) ); if($this->source=='yhc' && $this->merId){ $data['all_num'] = $data['offLine']['num'] +$data['onLine_take_no']['num'] + $data['onLine']['num']; $data['all_yanglao_yhc'] = set_price_rtrim(round($data['offLine']['yanglao']+$data['onLine']['yanglao'] + $data['onLine_take_no']['yanglao'] , 2));// 总养老金 $data['all_yanglao_a'] = set_price_rtrim(round($data['offLine']['yanglao'] + $data['onLine']['yanglao'], 2));// 已结算养老金 $data['all_yanglao_yugu'] = set_price_rtrim(round($data['all_yanglao_yhc']-$data['all_yanglao_a'],2));// 预估养老金 $userInfo = Db::name('UserCertification') -> where('uid',$uid) -> field('user_name,user_card') -> find(); $res = GzcApiRequest::checkAmount($userInfo); $data['all_gzc']=set_price_rtrim(sprintf("%01.2f", $res['extendData']['amount'] * 0.01)); $data['all_yanglao']=set_price_rtrim( $data['all_yanglao_yhc'] + $data['all_gzc']); return app("json")->success("查询成功", $data); } // 淘宝 $tb_a = 0; $tb_where=['uid'=>$uid,'commission_type' => '5','source'=>0,'type_shop'=>5]; $tb = \think\facade\Db::name('user_bill')->where('uid', $uid)->where($tb_where)->where('status','<>','-1')->select()->each(function ($value) use (&$tb_a) { $value['yanglao'] = 0; $value['yanglao'] = $value['number']; $value['yanglao_a'] = 0; if ($value['status'] == 1) { $value['yanglao_a'] = $value['yanglao']; $tb_a++; } return $value; })->toArray(); $data['tb'] = array( 'num' => count($tb), 'num_a' => $tb_a, 'yanglao' => round($this->num($tb, 'yanglao'), 2), 'yanglao_a' => round($this->num($tb, 'yanglao_a'), 2), ); // 京东 $jd_a = 0; $jd_where=['uid'=>$uid,'commission_type' => '5','source'=>0,'type_shop'=>6]; $jd = \think\facade\Db::name('user_bill')->where('uid', $uid)->where($jd_where)->where('status','<>','-1')->select()->each(function ($value) use (&$jd_a) { $value['yanglao'] = 0; $value['yanglao'] = $value['number']; $value['yanglao_a'] = 0; if ($value['status'] == 1) { $value['yanglao_a'] = $value['yanglao']; $jd_a++; } return $value; })->toArray(); $data['jd'] = array( 'num' => count($jd), 'num_a' => $jd_a, 'yanglao' => round($this->num($jd, 'yanglao'), 2), 'yanglao_a' => round($this->num($jd, 'yanglao_a'), 2), ); // 苏宁 $su_a = 0; $su_where=['uid'=>$uid,'commission_type' => '5','source'=>0,'type_shop'=>3]; $su = \think\facade\Db::name('user_bill')->where('uid', $uid)->where($su_where)->where('status','<>','-1')->select()->each(function ($value) use (&$su_a) { $value['yanglao'] = 0; $value['yanglao'] = $value['number']; $value['yanglao_a'] = 0; if ($value['status'] == 1) { $value['yanglao_a'] = $value['yanglao']; $su_a++; } return $value; })->toArray(); $data['su'] = array( 'num' => count($su), 'num_a' => $su_a, 'yanglao' => round($this->num($su, 'yanglao'), 2), 'yanglao_a' => round($this->num($su, 'yanglao_a'), 2), ); // 拼多多 $pdd_a = 0; $pdd_where=['uid'=>$uid,'commission_type' => '5','source'=>0,'type_shop'=>1]; $pdd = \think\facade\Db::name('user_bill')->where('uid', $uid)->where($pdd_where)->where('status','<>','-1')->select()->each(function ($value) use (&$pdd_a) { $value['yanglao'] = 0; $value['yanglao'] = $value['number']; $value['yanglao_a'] = 0; if ($value['status'] == 1) { $value['yanglao_a'] = $value['yanglao']; $pdd_a++; } return $value; })->toArray(); $data['pdd'] = array( 'num' => count($pdd), 'num_a' => $pdd_a, 'yanglao' => round($this->num($pdd, 'yanglao'), 2), 'yanglao_a' => round($this->num($pdd, 'yanglao_a'), 2), ); // 唯品会 $vip_a = 0; $vip_where=['uid'=>$uid,'commission_type' => '5','source'=>0,'type_shop'=>2]; $vip = \think\facade\Db::name('user_bill')->where($vip_where)->where('uid', $uid)->where('status','<>','-1')->select()->each(function ($value) use (&$vip_a) { $value['yanglao'] = 0; $value['yanglao'] = $value['number']; $value['yanglao_a'] = 0; if ($value['status'] == 1) { $value['yanglao_a'] = $value['yanglao']; $vip_a++; } return $value; })->toArray(); $data['vip'] = array( 'num' => count($vip), 'num_a' => $vip_a, 'yanglao' => round($this->num($vip, 'yanglao'), 2), 'yanglao_a' => round($this->num($vip, 'yanglao_a'), 2), ); // 抖音 $dy_a = 0; $dy_where=['uid'=>$uid,'commission_type' => '5','source'=>0,'type_shop'=>9]; $dy = \think\facade\Db::name('user_bill')->where('uid', $uid)->where($dy_where)->where('status','<>','-1')->select()->each(function ($value) use (&$dy_a) { $value['yanglao'] = 0; $value['yanglao'] = $value['number']; $value['yanglao_a'] = 0; if ($value['status'] == 1) { $value['yanglao_a'] = $value['yanglao']; $dy_a++; } return $value; })->toArray(); $data['dy'] = array( 'num' => count($dy), 'num_a' => $dy_a, 'yanglao' => round($this->num($dy, 'yanglao'), 2), 'yanglao_a' => round($this->num($dy, 'yanglao_a'), 2), ); // 扣减 $kouchu = \think\facade\Db::name('user_bill') ->where('pm', '=', 0) ->where('status', '<>', '-1') ->where(['uid' => $uid, 'commission_type' => '5', 'source' => 0]) ->sum('number'); $data['all_num'] = $data['offLine']['num'] +$data['onLine_take_no']['num'] + $data['onLine']['num'] + $data['tb']['num'] + $data['jd']['num'] + $data['su']['num'] + $data['pdd']['num'] + $data['vip']['num'] + $data['dy']['num']; $data['all_yanglao'] = round($data['offLine']['yanglao']+$data['onLine']['yanglao'] + $data['onLine_take_no']['yanglao'] + $data['tb']['yanglao'] + $data['jd']['yanglao'] + $data['su']['yanglao'] + $data['pdd']['yanglao'] + $data['vip']['yanglao'] + $data['dy']['yanglao'], 2); $data['all_yanglao'] -= $kouchu; $data['all_yanglao_a'] = round($data['offLine']['yanglao'] + $data['onLine']['yanglao'] + $data['tb']['yanglao_a'] + $data['jd']['yanglao_a'] + $data['su']['yanglao_a'] + $data['pdd']['yanglao_a'] + $data['vip']['yanglao_a'] + $data['dy']['yanglao_a'], 2); $data['all_yanglao_a'] -= $kouchu; $data['third_party_num']=['all_num'=>$data['tb']['num']+$data['jd']['num']+$data['su']['num']+ $data['pdd']['num'] + $data['vip']['num']+ $data['dy']['num']]; $data['third_party_num_a']=['all_num_a'=>$data['tb']['num_a']+$data['jd']['num_a']+$data['su']['num_a']+ $data['pdd']['num_a'] + $data['vip']['num_a']+ $data['dy']['num_a']]; $data['third_party_num_n']=['all_num_n'=>$data['third_party_num']['all_num']-$data['third_party_num_a']['all_num_a']]; return app("json")->success("查询成功", $data); } public function num($data, $field) { $sum = 0; foreach ($data as $item) { $sum += $item[$field]; } return $sum; } // 志愿者升级 public function changeVolunteer() { $uid = $this->request->uid(); // 志愿者条件 $volunteer_achievement = systemConfig("volunteer_achievement");// volunteer_achievement:用户本人满足养老金要求可升级为志愿者 $volunteer_class = new Volunteer(); $volunteer = $volunteer_class->volunteer($uid); if ($volunteer['self_yanglao'] < $volunteer_achievement) { $data['grade'] = 0; $data['self_yanglao'] = $volunteer['self_yanglao']; $data['condition_one'] = systemConfig("volunteer_achievement");// 用户本人满足养老金要求可升级为志愿者 return app('json')->success($data); } $volunteer_class->grade($uid, 1, $volunteer); return app('json')->success('申请成功'); } public function GZC($uid) { $OrderMerchantRepository = app()->make(OrderMerchantRepository::class); $orderId = $OrderMerchantRepository->getNewOrderId('IN10'); $OrderGzcRepository = app()->make(OrderGzcRepository::class); $where = [ 'uid' => $uid, 'pm' => 1, 'status' => 1, 'type' => 'commission' ]; $user_data = \think\facade\Db::name('user')->where('uid', $uid)->find(); $certification = ['user_name' => $user_data['real_name'], 'mobile' => $user_data['account'], 'user_card' => $user_data['card_id']]; $user_data['real_name'] = Db::name('user_certification')->where('status', 1)->where('uid', $user_data['uid'])->value('user_name'); $user_data['account'] = Db::name('user_certification')->where('status', 1)->where('uid', $user_data['uid'])->value('mobile'); $user_data['card_id'] = Db::name('user_certification')->where('status', 1)->where('uid', $user_data['uid'])->value('user_card'); Db::name('user_bill')->where($where)->select()->each(function ($item) use ($uid, $orderId, $OrderGzcRepository, $user_data, $certification) { $is_implement = 1; if ($item['source'] == 0) { $order_data = \think\facade\Db::name('store_order')->where('order_sn', $item['order_sn'])->value('uid'); if ($order_data['uid'] == $item['uid']) { $is_implement = 0; } else { $is_implement = 1; } } else { $order_data = \think\facade\Db::name('order_merchant')->where('out_trade_no', $item['order_sn'])->value('uid'); if ($order_data['uid'] == $item['uid']) { $is_implement = 0; } else { $is_implement = 1; } } if ($is_implement == 1) { $online = ['uid' => $uid, 'pay_type' => '1', 'order_sn' => $item['order_sn'], 'order_id' => $item['link_id']]; $create = [ 'uid' => $online['uid'], 'platform_no' => $orderId, 'account_type' => $online['pay_type'] == 1 ? 3 : 2, 'user_name' => $certification['user_name'], 'mobile' => $certification['mobile'], 'user_card' => $certification['user_card'], 'pension' => $item['number'], 'order_type' => 2, 'out_trade_no' => $online['order_sn'] ]; $OrderGzcRepository->create($create); } }); } // 20220712版签到 public function new_sign() { // return app('json')->fail('不允许签到'); $uid = $this->request->uid();// 签到用户 $user = Db::name('user')->where('uid', $uid)->field("spread_uid,first_sign")->find();// 上级用户 // 第一天签到获得2积分,第二天获得4积分,第三天获得6积分,第四天获得 10 积分,第五天获得 14积分第六天获得 20积分, // 连续签到从第七天开始,每日签到获得3积分,第七天连续签到额外奖励 38积分,第 14 天连续签到额外奖励 68 积分,第 21天连续签到额外奖励 128 积分第 30 天连续签到额外奖励 188 积分 // 前6天积分 $score = [ 2,// 1 4,// 2 6,// 3 10,// 4 14,// 5 20// 6 ]; // 7-30天积分 $scoreS = 3; // 额外积分 $scoreExtra = [ 7 => 38, 14 => 68, 21 => 128, 30 => 188 ]; $today_signintime = strtotime(date('Y-m-d', time())); $today_signin_info = Db::name('user_sign_score')->where(array('uid' => $uid))->whereDay('signin_time')->find(); if (!empty($today_signin_info)) { return app('json')->fail('今天已经签到过了'); } else { // 查询昨天是否已经签到了 $yes_signintime = strtotime(date('Y-m-d')) - 86400; $yes_signin_info = Db::name('user_sign_score')->where(array('uid' => $uid, 'signin_time' => $yes_signintime))->find(); $has_qian = 1; if (!empty($yes_signin_info)) { $has_qian = $yes_signin_info['continuity_day'] + 1; $has_qian = $has_qian > 30 ? 1 : $has_qian; } $get_score = 0; $get_gw_score = 0; if ($has_qian <= 6) { $get_score = $score[$has_qian - 1]; } else { $get_score = $scoreS; if (isset($scoreExtra[$has_qian])) { $get_gw_score = $scoreExtra[$has_qian]; } } $userRepository = app()->make(UserRepository::class); $userRepository->sign_add($uid, $get_score, 1, '签到赠送积分', $has_qian, $today_signintime, '', 1, '', 1); if($get_gw_score > 0){ $userRepository->sign_add($uid, $get_gw_score,1,'连续签到赠送额外奖励积分', $has_qian, $today_signintime, '', 1, '', 1); } // 首次签到 if ($user['first_sign'] == 0) { // //首次签到送30积分,同时赠送邀请人30积分 // $userRepository->sign_add($uid, 30,1,'首次签到送30积分','','', '', 1, '', 1); // $member_info = Db::name('user')->where( array('uid' => $uid) )->find(); // if($member_info['spread_uid']){ // $spreadUid = $member_info['spread_uid']; // $userRepository->sign_add($spreadUid, 30,1,'邀请人首次签到送30积分','','', '', 1, '', 1); // } Db::name('user')->where('uid', $uid)->update(['first_sign' => 1]); } elseif ($user['first_sign'] == 1 && $has_qian == 1) { Db::name('user')->where('uid', $uid)->update(['first_sign' => 2]); } // //非首次签到,第一天,断签 // //好友连续签到3天 奖励50 // //好友连续签到14天 奖励100 // //好友联系签到30天 奖励300 // if ($user['first_sign'] < 2) { // if ($has_qian == 3) { // $userRepository->sign_add($user['spread_uid'], 50, 1, '好友签到赠送积分', '', $today_signintime, ''); // } elseif ($has_qian == 14) { // $userRepository->sign_add($user['spread_uid'], 100, 1, '好友签到赠送积分', '', $today_signintime, ''); // } elseif ($has_qian == 30) { // $userRepository->sign_add($user['spread_uid'], 300, 1, '好友签到赠送积分', '', $today_signintime, ''); // Db::name('user')->where('uid', $uid)->update(['first_sign' => 3]); // } // } return app('json')->success('签到成功', ['score' => $get_score]); } } public function new_sign_info() { $uid = $this->request->uid(); // 查询今天是否已经签到 $today_signin_info = Db::name('user_sign_score')->where(array('uid' => $uid))->whereDay('signin_time')->find(); // 查询昨天是否已经签到了 $yes_signintime = strtotime(date('Y-m-d')) - 86400; $yes_signin_info = Db::name('user_sign_score')->where(array('uid' => $uid, 'signin_time' => $yes_signintime))->find(); $data = [ 'today' => 0, 'day' => 0 ]; if ($yes_signin_info) $data['day'] = (int)$yes_signin_info['continuity_day']; if ($yes_signin_info['continuity_day'] >= 30) $data['day'] = 0; if ($today_signin_info) { $data['today'] = 1; $data['day'] = $data['day'] + 1; } return app('json')->success($data); } /** * 积分列表 * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function sign_list() { [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); $month = $this->request->param('month', '') ?: date('Y-m'); $status = $this->request->param('status'); $pm = $this->request->param('pm'); $startMonth = strtotime(date('Y-m-01 00:00:00', strtotime($month))); $endMonth = strtotime(date("Y-m-d 00:00:00", strtotime("first day of next month", strtotime($month)))); $count = Db::name('user_sign_score') ->whereBetween('addtime', [$startMonth, $endMonth]) ->when(isset($status) && $status !== '', function ($query) use ($status) { $query->where('status', $status); }) ->when(isset($pm) && $pm !== '', function ($query) use ($pm) { $query->where('pm', $pm); }) ->where('uid', $uid)->count(); $list = Db::name('user_sign_score') ->whereBetween('addtime', [$startMonth, $endMonth]) ->where('uid', $uid) ->when(isset($status) && $status !== '', function ($query) use ($status) { $query->where('status', $status); }) ->when(isset($pm) && $pm !== '', function ($query) use ($pm) { $query->where('pm', $pm); }) ->page($page, $limit)->order('id DESC')->select()->each(function ($item) { $item['signin_time'] = date('Y-m-d', $item['signin_time']); $item['addtime'] = date('Y-m-d H:i:s', $item['addtime']); if (!empty($item['order_id'])) { // 线上订单 if ($item['order_type'] == 'store_order' || $item['order_type'] == 'store_order_beishengtang') { $item['order_sn'] = Db::name("store_order")->where("order_id", $item['order_id'])->value("order_sn"); } elseif ($item['order_type'] == 'order_merchant') { $item['order_sn'] = Db::name("order_merchant")->where("id", $item['order_id'])->value("out_trade_no"); } elseif ($item['order_type'] == 'extract') { $item['order_sn'] = Db::name("user_extract")->where("extract_id", $item['order_id'])->value("order_sn"); } else { $item['order_sn'] = ''; } } else { $item['order_sn'] = ''; } return $item; }); $data['list'] = $list; $data['count'] = $count; return app('json')->success($data); } public function getAmountFromGzc() { $uid = $this->request->uid(); $userInfo = Db::name('UserCertification')->where('uid', $uid)->field('user_name,user_card')->find(); $res = GzcApiRequest::checkAmount($userInfo); return app('json')->success(['amount' => sprintf("%01.2f", $res['extendData']['amount'] * 0.01)]); } public function check_user_annual_fee() { // INSERT INTO rrx_user_pension_account (uid) SELECT uid FROM rrx_user; // UPDATE `renrenxiang`.`rrx_user_pension_account` SET `start_time` = '2023-04-07 00:00:00', `end_time` = '2024-04-07 23:59:59', `status` = 1, `give` = 1 WHERE `id` > 0; $uid = $this->request->uid(); $check = Db::name("user_pension_account")->where("uid", $uid)->find(); $data = [ "status" => 3,// 0:未交年费,1:年费到期。2:未实名认证,3:正常 ]; // //未交年费 // if (!$check || $check["status"] == 0) { // $data["status"] = 0; // return app('json')->success($data); // } // //到期时间小于当前时间。年费到期 // if (strtotime($check['end_time']) < time()){ // $data["status"] = 1; // return app('json')->success($data); // } // $data["start_time"] = $check['start_time']; // $data["end_time"] = $check['end_time']; // // //检查实名认证 // $checkCertification = Db::name("user_certification") -> where("uid",$uid) -> find(); // if (!$checkCertification){ // $data["status"] = 2; // return app('json')->success($data); // } return app('json')->success($data); } /** * * @remarks 创建年费订单 * @author 小菜菜 * @created 2023/04/10 14:37 */ public function create_annual_order() { $uid = $this->request->uid(); $type = $this->request->param('type', 1); $OrderMerchantRepository = app()->make(OrderMerchantRepository::class); if ($type == 1) $price = "12.00"; elseif ($type == 2) $price = systemConfig('offline_a'); elseif ($type == 3) $price = systemConfig('offline_b'); elseif ($type == 4) $price = systemConfig('offline_c'); else return app('json')->fail("参数错误"); $check = Db::name("user_pension_account")->where("uid", $uid)->find(); // 到期时间小于当前时间。年费到期 if (strtotime($check['end_time']) > time() && $check['status'] == 1) { return app('json')->fail("账户已开通,不可重复开通账户"); } $insertData = [ 'pay_price' => $price, 'status' => 0, 'order_no' => $OrderMerchantRepository->getNewOrderId("mt"), 'uid' => $uid, 'type' => $type, ]; $order_id = Db::name('user_pension_account_order')->insertGetId($insertData); try { return app('json')->success(['order_id' => $order_id]); } catch (\Exception $e) { return app('json')->status('error', $e->getMessage(), ['order_id' => $order_id]); } } /** * @remarks 会员支付 * @author Tang * @created 2021/8/27 9:18 */ public function pay_user_annual() { try { $oid = r::param('oid', ''); $code = r::param('code', ''); $payType = r::param('type', '');// wx.ALI if ($oid == '') return app('json')->fail("请检查参数是否正确"); $groupOrder = Db::name('user_pension_account_order')->where('id', $oid)->where('status', 0)->find(); if (!$groupOrder) return app('json')->fail('订单不存在或已支付'); $access = new Access(); $res = $access->pay_huifu($payType, $code, $groupOrder, "年费", env('APP_URL') . "/api/hf_notify/pay_user_annual"); Db::name('log')->insert(['data' => '汇付用户年费支付---' . json_encode($res)]); Db::name('user_pension_account_order')->where('id', $oid)->update(['hf_pay_id' => $res['id']]); return app('json')->success($res); } catch (\Exception $exception) { return app('json')->fail(); } } /** * @remarks 会员支付 线下 * @author Tang * @created 2021/8/27 9:18 */ public function pay_user_annual_offline() { try { $oid = r::param('oid', ''); $payType = r::param('type', '');// WX.ALI $pay_user_id = r::param('pay_user_id', '');// 如果是微信。传open_id 如果是支付宝。传user_id if ($oid == '') return app('json')->fail("请检查参数是否正确"); if ($pay_user_id == '') return app('json')->fail("请检查参数是否正确"); $order = Db::name('user_pension_account_order')->where('id', $oid)->where('status', 0)->find(); if (!$order) return app('json')->fail('订单不存在或已支付'); if ($order['type'] == 1) { $title = "开通账户"; } elseif ($order['type'] == 2) { $title = "大礼包1"; } elseif ($order['type'] == 3) { $title = "大礼包2"; } elseif ($order['type'] == 4) { $title = "大礼包3"; } else { return app('json')->fail('订单异常'); } if ($order['type'] > 1) { // 本人给养老金10% $ylj = sprintf("%01.2f", bcmul($order['pay_price'], '0.1', 5));// 10%的养老金 $commission = 0; // 上级给佣金10% $order_user = Db::name("user")->where("uid", $order["uid"])->field("spread_uid")->find(); // 推广员id $spread_uid = $order_user["spread_uid"]; if (!empty($spread_uid)) { $commission = sprintf("%01.2f", bcmul($order['pay_price'], '0.1', 5));// 10%的佣金 } $pt = sprintf("%01.2f", 12 + $ylj + $commission); $merchant_money = sprintf("%01.2f", $order['pay_price'] - $pt); } else { $pt = "12.00"; $merchant_money = "0.00"; } if ($payType == 'WX') { $pay_wx = systemConfig('pay_wx'); // 微信 if ($pay_wx == 3) { $member_id = Db::name('merchant_member')->where('mer_id', 429)->where("type", 3)->value('member_id'); $key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871'; $app_id = 'app_383a75dd-c03d-44ab-8f58-92c60fe9b9d0'; } else { $member_id = Db::name('merchant_member')->where('mer_id', 429)->where("type", 2)->value('member_id'); $key = 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f'; $app_id = 'app_0827b960-b932-45ec-b800-4e850091b419'; } $type = '2'; $pay_channel = 'wx_pub'; $expend = [ 'open_id' => $pay_user_id ]; } elseif ($payType == 'ALI') { $member_id = Db::name('merchant_member')->where('mer_id', 429)->where("type", 1)->value('member_id'); $app_id = 'app_44108546-d27a-48ee-88c1-84b45b75114f'; $type = '1'; $pay_channel = 'alipay_pub'; $expend = [ 'buyer_id' => $pay_user_id ]; $key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9'; } if ($merchant_money == '0.00') { $div_members = [ [ 'member_id' => 0, 'amount' => $pt, 'fee_flag' => 'Y' ] ]; } else { $div_members = [ [ 'member_id' => $member_id, 'amount' => $merchant_money, 'fee_flag' => 'Y' ], [ 'member_id' => 0, 'amount' => $pt, 'fee_flag' => 'N' ] ]; } $params = [ 'order_no' => $order['order_no'] . '_' . rand(000, 999), 'app_id' => $app_id, 'pay_channel' => $pay_channel, 'pay_amt' => (string)$order['pay_price'], 'goods_title' => "幸福宝", 'goods_desc' => $title, 'device_info' => [ 'device_ip' => app('request')->ip() // 'device_ip'=>'115.171.134.68' ], 'expend' => json_encode($expend), 'div_members' => json_encode($div_members), 'fee_mode' => 'I', 'notify_url' => env('APP_URL') . "/api/jsapiPay/notify/HF_pay_user_annual" ]; $res = $this->Payment_create_traits($params, $type, $key); if (!empty($res['error_code'])) { return app('json')->fail($res['return_msg']); } else { Db::name('user_pension_account_order')->where('id', $oid)->update(['hf_pay_id' => $res['id']]); return app('json')->success($res); } } catch (\Exception $exception) { Db::name('log')->insert(['data' => '大礼包支付error:' . $exception->getFile() . ':' . $exception->getLine() . '【' . $exception->getMessage() . '】']); return app('json')->fail(); } } public function red_log() { $uid = $this->request->uid(); [$page, $limit] = $this->getPage(); $user_rich_log = Db::name('user_rich_log')->where('uid', $uid)->field('uid,red,pm,time,mark')->page($page, $limit)->order('id DESC')->select()->each(function ($item) { $item['create_time'] = date('Y-m-d H:i:s', $item['time']); $item['red'] = set_price_rtrim($item['red']); return $item; }); return app('json')->success($user_rich_log); } public function apply_bang_fu() { $uid = $this->request->uid(); $check = Db::name('user_rich')->where('uid', $uid)->find(); if ($check['type'] < 3) { return app('json')->fail("不满足申请条件"); } $check = Db::name('user_bangfu')->where('uid', $uid)->value('status'); if ($check == 0) { return app('json')->fail("审核中"); } if ($check == 1) { return app('json')->fail("已是帮扶中心"); } if ($check == 2) { return app('json')->fail("审核被拒绝"); } $bang_fu_number = systemConfig("bang_fu_number"); // 检测用户是否满足条件 $number = $this->getNumber($uid, $bang_fu_number) - 1;// 满足条件人数 减去自己 // 条件 if ($number >= $bang_fu_number) { // echo '满足'; Db::name('user_bangfu')->insert([ 'uid' => $uid, 'time' => time(), 'status' => 0 ]); return app('json')->success("提交申请成功"); } return app('json')->fail("不满足申请条件"); // echo '不满足'; } // 获得满足 1+5 的下级数量 public function getNumber($uid, $bang_fu_number): int { $number = 0; $getUid = Db::name('user')->where('level_id', $uid)->field('uid')->select(); $count = count($getUid); if ($count >= 5) { $number = 1; foreach ($getUid as $value) { $number += $this->getNumber($value['uid'], $bang_fu_number); if ($number >= $bang_fu_number) { break; } } } return $number; } /** * 积分明细 * @return mixed */ public function score_info() { $uid = $this->request->uid();; $data['score'] = decimal2(Db::name('user_sign_score') ->where('uid', $uid) ->where('status', 1) ->where('pm', 1) ->sum('reward_socre'));; $data['no_clear_score'] = decimal2(Db::name('user_sign_score') ->where('uid', $uid) ->where('status', -1) ->where('pm', 1) ->sum('reward_socre')); $data['lose_score'] = decimal2(Db::name('user_sign_score') ->where('uid', $uid) ->where('pm', 2) ->sum('reward_socre')); $data['clear_score'] = $score = decimal2($data['score'] - $data['lose_score']); $data['score'] = $data['clear_score'] + $data['no_clear_score'] + $data['lose_score']; $data['score'] = decimal2($data['score']); Db::name('user')->where('uid', $uid)->update([ 'score' => $score ]); // clear_score 可用积分,score 积分总数 lose_score 已使用积分 no_clear_score 未结算积分 return app('json')->success($data); } /** * 新版我的团队 */ public function get_team_list() { $data = []; [$page, $limit] = $this->getPage(); $uid = $this->request->uid(); $type = intval($this->request->param('type')); // 查询团队列表 $userRepository = app()->make(UserRepository::class); $chilid_userids = $userRepository->getSpreadUidBreak($uid); $data['fans_count'] = count($chilid_userids); $direct_uid_list = Db::name('user')->where('spread_uid', $uid)->where('is_del', 0)->column('uid'); $data['direct_count'] = count($direct_uid_list); $valid_uid_list = Db::name('store_order') ->whereIn('uid', $chilid_userids) ->where('paid', 1) ->group('uid') ->column('uid'); $data['valid_count'] = count($valid_uid_list); $data['count'] = Db::name('user') ->whereIn('uid', $chilid_userids) ->count(); $data['list'] = Db::name('user') ->field('uid,phone,nickname,user_group,create_time,avatar as picture') ->page($page, $limit) ->whereIn('uid', $chilid_userids) ->when($type == 1, function ($query) use ($direct_uid_list) { return $query->whereIn('uid', $direct_uid_list); }) ->when($type == 2, function ($query) use ($valid_uid_list) { return $query->whereIn('uid', $valid_uid_list); }) ->order('uid DESC') ->select() ->toArray(); foreach ($data['list'] as &$user) { $user ['phone'] = substr_replace($user['phone'], '****', 3, 4); } return app('json')->success($data); } /** * 我的粉丝详情 */ public function get_team_info() { $uid = $this->request->param('uid', ''); if (!$uid) return app('json')->fail("uid不正确"); $userRepository = app()->make(UserRepository::class); $chilid_userids = $userRepository->getSpreadUidBreak($this->request->uid()); if (!in_array($uid, $chilid_userids)) return app('json')->fail("该用户不在所属团队内"); $data = Db::name('user') ->field('uid,phone,nickname,spread_uid,user_group,create_time,manage_address') ->where('uid', $uid) ->find(); $data['regimental_commander_count'] = Db::name('user') ->where('spread_uid', $uid) ->where('user_group', 2) ->count(); $data['clear_order_amount'] = Db::name('store_order') ->where('uid', $uid) ->where('is_settlement', 1) ->sum('pay_price'); $data['mybuy_order_amount'] = Db::name('store_order') ->where('uid', $uid) ->where('paid', 1) ->sum('pay_price'); $spread_user = Db::name('user') ->field('nickname as spread_nickname,phone as spread_phone') ->where('uid', $data['spread_uid']) ->find(); $spread_user ['spread_phone'] = substr_replace($spread_user['spread_phone'], '****', 3, 4); $spread_user ['spread_nick_name'] = $spread_user['spread_nickname'] ?? ''; $data ['phone'] = substr_replace($data['phone'], '****', 3, 4); $data = array_merge($data, $spread_user); if (in_array($data['user_group'], [5, 6])) { $data['area_name'] = Db::name('regions')->field('type,code_list')->where('id', 'in', $data['manage_address'])->cache('code:' . $data['manage_address'], 7200)->column('name'); $data['area_name'] = join($data['area_name']); $data['area_bonus_money'] = Db::name('user_bill') ->where('uid', $uid) ->sum('number'); } unset($data['manage_address']); if (in_array($data['user_group'], [4])) { $merchant = Db::name('merchant')->where('uid', $uid)->field('mer_id,mer_name')->find(); $data['mer_id'] = $merchant['mer_id'] ?? 0; $data['mer_name'] = $merchant['mer_name'] ?? ''; } return app('json')->success($data); } /** * 我的佣金 */ public function get_brokerage_info() { $uid = $this->request->uid(); // 佣金余额 $data['brokerage_price'] = Db::name('user')->where('uid', $uid)->value('brokerage_price'); // 总收益 $data['sum_amount'] = Db::name('user_bill') ->where('uid', $uid) ->where('commission_type', '<>', 5) ->where('commission_type', '<>', 0) ->where('pm', 1) ->sum('number'); // 未结算 $data['no_clear_amount'] = Db::name('user_bill') ->where('uid', $uid) ->where('commission_type', '<>', 5) ->where('commission_type', '<>', 0) ->where('pm', 1) ->where('status', 0) ->sum('number'); // 已提现 $data['withdraw_amount'] = Db::name('user_extract') ->where('uid', $uid) ->whereIn('status', [0, 1]) ->sum('extract_price'); // 转VR $data['transition_vr_amount'] = Db::name('user_transition_vr') ->where('uid', $uid) ->where('type', 1) ->sum('number'); // 最终 总收益是 = 佣金余额 + 已提现 + 已转VR // $data['sum_amount'] = $data['sum_amount'] + $data['transition_vr_amount']; $data['sum_amount'] = set_price_rtrim($data['sum_amount']); return app('json')->success($data); } public function get_token_by_phone(UserRepository $repository){ $user = $repository->accountByUser($this->request->param('phone')); $tokenInfo = $repository->createToken($user); return app('json')->success($repository->returnToken($user, $tokenInfo)); } /** * 转VR */ public function transition_vr() { $uid = $this->request->uid(); $user = $this->request->userInfo(); $type = $this->request->param('type', 'brokerage'); $extract_amount = $this->request->param('extract_amount', 0); if ($type == 'brokerage') { $brokerage_price = Db::name('user')->where('uid', $uid)->value('brokerage_price'); // 参考结算任务中的代码片段, 余额中 应不包含未结算余额 // $no_clear_amount = Db::name('user_bill') // ->where('uid', $uid) // ->where('commission_type', '<>', 5) // ->where('pm', 1) // ->where('status', 0) // ->sum('number'); // $clear_amount = $brokerage_price - $no_clear_amount; $clear_amount = $brokerage_price; // if ($user['brokerage_price'] < (systemConfig('withdrawal_money'))){ // return app('json')->fail('未到达提现最低额度'); // } if($extract_amount > $clear_amount){ return app('json')->fail("可用金额不足提现"); } $brokerage_price = bcsub($user['brokerage_price'], $extract_amount,2); $user->brokerage_price = $brokerage_price; $vr = bcadd($user['vr'], $extract_amount, 2); $user->vr = $vr; $res = $user->save(); if ($res){ // 加入转VR记录 $insertdata = [ 'uid'=> $uid, 'number' => $extract_amount, 'surplus' => $vr, 'mark' => '佣金转VR', 'type' => 1, 'create_time' => time(), ]; Db::name('user_transition_vr')->insertGetId($insertdata); // VR入账 $insertdata = [ 'uid'=> $uid, 'number' => $extract_amount, 'surplus' => $vr, 'mark' => '佣金转VR', 'order_id'=> 0, 'type' => 1, 'addtime' => time(), 'settlement_time'=> date('Y-m-d H:i:s', time()) ]; Db::name('user_sign_vr')->insertGetId($insertdata); return app('json')->success('转VR成功'); }else{ return app('json')->fail('转VR失败'); } } if ($type == 'hongbao') { $hongbao = Db::name('user')->where('uid', $uid)->value('hongbao'); $no_clear_amount = Db::name('user_sign_hongbao') ->where('uid', $uid) ->where('type', 1) ->where('status', -1) ->sum('number'); $clear_amount = $hongbao - $no_clear_amount; // if ($user['hongbao'] < (systemConfig('withdrawal_money'))){ // return app('json')->fail('未到达提现最低额度'); // } if($extract_amount > $clear_amount){ return app('json')->fail("可用金额不足提现"); } $hongbao = bcsub($user['hongbao'], $extract_amount,2); $user->hongbao = $hongbao; $vr = bcadd($user['vr'], $extract_amount, 2); $user->vr = $vr; $res = $user->save(); if ($res){ // 加入转VR记录 $insertdata = [ 'uid'=> $uid, 'number' => $extract_amount, 'surplus' => $vr, 'mark' => '红包转VR', 'type' => 2, 'status' => 1, 'addtime' => time(), ]; Db::name('user_sign_hongbao')->insertGetId($insertdata); // VR入账 $insertdata = [ 'uid'=> $uid, 'number' => $extract_amount, 'surplus' => $vr, 'mark' => '红包转VR', 'order_id'=> 0, 'type' => 1, 'addtime' => time(), 'settlement_time'=> date('Y-m-d H:i:s', time()) ]; Db::name('user_sign_vr')->insertGetId($insertdata); return app('json')->success('转VR成功'); }else{ return app('json')->fail('转VR失败'); } } return app('json')->fail('转VR失败'); } /** * 转VR记录 */ public function transition_vr_log() { $uid = $this->request->uid(); $type = $this->request->param('type', 1); [$page, $limit] = $this->getPage(); $where = []; $where[] = ['uid', '=', $uid]; $where[] = ['type', '=', $type]; $query = Db::name("user_transition_vr"); $count = $query->where($where)->count(); $list = $query->page($page, $limit)->where($where)->order('id desc')->select()->each(function ($item){ $item['create_time'] = date("Y-m-d H:i:s", $item['create_time']); return $item; }); return app('json')->success('获取转VR记录成功', ['list'=>$list, 'count'=>$count]); } // 根据父级uid,递归获取所有子级UID数组 public function getRecursiveChildren($parentUid) { $result = []; // 用于存储符合条件的子级 uid // 定义递归函数 $recursion = function ($parentUid) use (&$result, &$recursion) { // 查询当前父级的所有直接子级 $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); // 获取子级的 uid 列表 // 如果没有子级,直接返回 if (empty($children)) { return; } // 遍历每个子级 foreach ($children as $childUid) { // 如果子级的 uid 小于或等于 611,跳过该子级及其所有子级 if ($childUid <= 611) { continue; } // 将符合条件的子级 uid 添加到结果数组 $result[] = $childUid; // 递归查询子级的子级 $recursion($childUid); } }; // 从初始父级开始递归查询 $recursion($parentUid); return array_unique($result); // 返回结果数组,并去重 } // 2.0 根据父级uid,找到当前用户下面的UID public function getChildren($parentUid) { $result = []; // 用于存储所有子级的 uid $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); // 获取子级的 uid 列表 return $children; // 返回结果数组,并去重 } public function getNewTeamPv($common_nums) { // 初始化结果数组 $result = [ 'max_value' => null, 'max_uid' => null, 'remaining_values' => 0, // 剩余值的总和 'remaining_uids' => [] // 剩余值对应的 UID ]; // 递归获取所有子级 UID 的函数 $getRecursiveChildren = function ($parentUid) use (&$getRecursiveChildren) { $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); $allChildren = []; foreach ($children as $childUid) { $allChildren[] = $childUid; $allChildren = array_merge($allChildren, $getRecursiveChildren($childUid)); } return $allChildren; }; // 获取每个用户的总业绩,包括子级的业绩 $userTotalPv = []; foreach ($common_nums as $uid) { // 获取当前用户及其所有子级的 UID $allUids = array_merge([$uid], $getRecursiveChildren($uid)); // 查询当前用户及其子级的所有订单 $orders = Db::name("store_order") ->whereIn('status', [0, 1, 2, 3]) ->whereIn("uid", $allUids) ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440]) ->select(); // 计算总业绩 $totalPv = 0; foreach ($orders as $order) { if ($order['total_price'] == 1180) { $totalPv += 700; } else if ($order['total_price'] == 11800) { $totalPv += 7000; } else if ($order['total_price'] == 10620) { $totalPv += 6300; } else if ($order['total_price'] == 2360) { $totalPv += 1400; } else if ($order['total_price'] == 9440) { $totalPv += 5600; } } // 将当前用户的总业绩和 UID 存入数组 $userTotalPv[] = ['uid' => $uid, 'totalPv' => $totalPv]; } // 如果没有符合条件的订单,直接返回空数组 if (empty($userTotalPv)) { return []; } // 找到最大值及其对应的 UID usort($userTotalPv, function($a, $b) { return $b['totalPv'] <=> $a['totalPv']; // 按 totalPv 降序排序 }); // 获取最大值及其 UID $result['max_value'] = $userTotalPv[0]['totalPv']; $result['max_uid'] = $userTotalPv[0]['uid']; // 计算剩余值的总和和对应的 UID foreach ($userTotalPv as $index => $user) { if ($index > 0) { // 跳过第一个(最大值) $result['remaining_values'] += $user['totalPv']; $result['remaining_uids'][] = $user['uid']; } } return $result; } // 只获取数组中的业绩 public function getteampv($common_nums) { // 查询当前用户及其子级的所有订单 $orders = Db::name("store_order") ->whereIn('status', [0, 1, 2, 3]) ->whereIn("uid", $common_nums) ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440]) ->select(); // 初始化业绩和人数 $totalPv = 0; $totalUsers = count($common_nums); // 初始化人数为子级总数 // 遍历订单计算业绩 foreach ($orders as $order) { if ($order['total_price'] == 1180) { $totalPv += 700; } else if ($order['total_price'] == 11800) { $totalPv += 7000; } else if ($order['total_price'] == 10620) { $totalPv += 6300; } else if ($order['total_price'] == 2360) { $totalPv += 1400; } else if ($order['total_price'] == 9440) { $totalPv += 5600; } } // 返回业绩和人数 return [ 'totalPv' => $totalPv, 'totalUsers' => $totalUsers ]; } // 递归获取所有子级 UID 的业绩 public function getTeamPv11($parentUid) { $getRecursiveChildren = function ($parentUid) use (&$getRecursiveChildren) { $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); $allChildren = []; foreach ($children as $childUid) { $allChildren[] = $childUid; $allChildren = array_merge($allChildren, $getRecursiveChildren($childUid)); } return $allChildren; }; // 获取当前用户及其所有子级的 UID $allUids = array_merge([$parentUid], $getRecursiveChildren($parentUid)); // 查询当前用户及其子级的所有订单 $orders = Db::name("store_order") ->whereIn('status', [0, 1, 2, 3]) ->whereIn("uid", $allUids) ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440]) ->select(); // 计算总业绩 $totalPv = 0; foreach ($orders as $order) { switch ($order['total_price']) { case 1180: $totalPv += 700; break; case 11800: $totalPv += 7000; break; case 10620: $totalPv += 6300; break; case 2360: $totalPv += 1400; break; case 9440: $totalPv += 5600; break; } } return $totalPv; } // 根据传递的父级数组,返回他的对应子级的个数 public function getTeamSize($parentUids) { // 初始化结果数组 $result = []; // 遍历每个父级ID foreach ($parentUids as $parentUid) { // 递归获取所有子级 UID $getRecursiveChildren = function ($parentUid) use (&$getRecursiveChildren) { $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); // 确保返回的是数组 if (!is_array($children)) { return []; } $allChildren = []; foreach ($children as $childUid) { $allChildren[] = $childUid; $allChildren = array_merge($allChildren, $getRecursiveChildren($childUid)); } return $allChildren; }; // 获取当前父级及其所有子级的 UID $allUids = array_merge([$parentUid], $getRecursiveChildren($parentUid)); // 计算总个数(包括父级自身) $totalUids = count($allUids); // 将结果存入数组 $result[] = [ 'parent_uid' => $parentUid, 'total_count' => $totalUids ]; } return $result; } public function processArray($array) { // 初始化结果数组 $result = [ 'max_value' => null, // 最大值 'max_index' => null, // 最大值的下标 'remaining_sum' => 0 // 剩余值的总和 ]; // 检查数组是否为空 if (empty($array)) { return $result; } // 找出最大值及其下标 $maxValue = $array[0]; $maxIndex = 0; for ($i = 1; $i < count($array); $i++) { if ($array[$i] > $maxValue) { $maxValue = $array[$i]; $maxIndex = $i; } } // 计算剩余值的总和 $remainingSum = 0; for ($i = 0; $i < count($array); $i++) { if ($i != $maxIndex) { $remainingSum += $array[$i]; } } // 将结果存入数组 $result['max_value'] = $maxValue; $result['max_index'] = $maxIndex; $result['remaining_sum'] = $remainingSum; return $result; } // 获取当前uesr_id下面在2.0中是否还有直接下级,并计算她的大部门和小部门 public function getparents_child_pv($user_id){ // 获取直接下级的 UID 列表 $get_childs = Db::name("user") ->where("spread_uid", $user_id) ->column("uid"); // var_dump($get_childs); // 初始化总业绩和总人数 $total_value = 0; $total_count = 0; $max_value = 0; $max_count = 0; // 遍历每个直接下级 foreach ($get_childs as $child) { // echo $child; // 获取当前下级及其子级 $child_group = [$child]; $recursive_children = $this->getRecursiveChildren($child); $child_group = array_merge($child_group, $recursive_children); // var_dump($child_group ); // 获取当前分组的业绩和人数 $result = $this->getteampv($child_group); // var_dump($result); $group_pv = $result['totalPv']; $group_count = $result['totalUsers']; // 累加总业绩和总人数 $total_value += $group_pv; $total_count += $group_count; // 更新最大业绩及其对应的人数 if ($group_pv > $max_value) { $max_value = $group_pv; $max_count = $group_count; } } // 计算小部门的业绩和人数 $small_department_value = $total_value - $max_value; $small_department_count = $total_count - $max_count; // 返回结果 return [ 'team_pv' => $max_value, 'team_num' => $max_count, 'per_pv' => $small_department_value, 'per_num' => $small_department_count ]; } // 1.0用户直属的部门和2.0直属的部门,进行比较,获取大部门和小部门数据 public function getparents_child_pv11($user_id, $bigamount, $smallamount, $common_nums, $person_nums) { // 获取直接下级的 UID 列表 $get_childs = Db::name("user") ->where("spread_uid", $user_id) ->column("uid"); // 初始化变量 $all_departments = []; // 用于存储所有直属下级的业绩和人数 // 遍历每个直属下级 foreach ($get_childs as $child) { // 获取当前下级及其子级 $child_group = [$child]; $recursive_children = $this->getRecursiveChildren($child); $child_group = array_merge($child_group, $recursive_children); // 获取当前分组的业绩和人数 $result = $this->getteampv($child_group); // if($user_id == 593){ // var_dump($result); // } // 将直属下级的业绩和人数加入数组 $all_departments[] = [ 'value' => $result['totalPv'], 'count' => $result['totalUsers'] ]; } // 将传入的 $bigamount 和 $smallamount 以及对应的人数加入数组 $all_departments[] = [ 'value' => $bigamount, 'count' => $common_nums // 大部门的人数 ]; $all_departments[] = [ 'value' => $smallamount, 'count' => $person_nums // 小部门的人数 ]; // 初始化最大部门和小部门 $max_department = null; $small_department = [ 'value' => 0, 'count' => 0 ]; // 遍历 $all_departments,找出最大值并累加小部门的值 foreach ($all_departments as $department) { if ($max_department === null || $department['value'] > $max_department['value']) { // 如果当前部门的业绩大于最大部门的业绩,更新最大部门 $small_department['value'] += $max_department['value'] ?? 0; // 将旧的最大值累加到小部门 $small_department['count'] += $max_department['count'] ?? 0; $max_department = $department; // 更新最大部门 } else { // 如果当前部门的业绩小于或等于最大部门的业绩,累加到小部门 $small_department['value'] += $department['value']; $small_department['count'] += $department['count']; } } // 返回结果 return [ 'big_department' => $max_department, 'small_department' => $small_department ]; } // 根据父级IDS获取伞下的所有子级ID public function getRecursiveChildren_s($parentUid) { $result = []; // 用于存储所有子级的 uid // 定义递归函数 $recursion = function ($currentUid) use (&$result, &$recursion) { // 查询当前父级的所有直接子级 $children = Db::name("user") ->where("spread_uid", $currentUid) ->column("uid"); // 获取子级的 uid 列表 // 如果没有子级,直接返回 if (empty($children)) { return; } // 遍历每个子级 foreach ($children as $childUid) { $result[] = $childUid; // 将子级的 uid 添加到结果数组 $recursion($childUid); // 递归查询子级的子级 } }; // 从初始父级开始递归查询 $recursion($parentUid); return array_unique($result); // 返回结果数组,并去重 } /** * 获取当前用户业绩 */ public function userupdates($user_id) { //$user_id = 17; $children = Db::name("user") ->where("spread_uid", $user_id) ->select(); // 获取子级的 uid 列表 $total_pv = 0; foreach($children as $k=>$v){ //$children_pv = Db::name("store_order")->where("uid", $v['uid'])->whereIn("status",[0,1,2,3])->select(); $children_pv = Db::name("user_sign_gongxian")->where("uid", $v['uid'])->where("status",1)->select(); foreach($children_pv as $k1=>$v1){ $total_pv += $v1['number']; } } return $total_pv; $userdatas = Db::name("user")->where("uid", $user_id)->find(); // var_dump($userdatas['user_group']); // 如果当前用户是普通消费者的情况下 if($userdatas['user_group'] == 1){ if($total_pv != 0){ if($total_pv >= 1180 && $total_pv < 11800){ Db::name("user")->where("uid", $user_id)->update(['user_group',2]); } } } // 如果当前用户是业务员消费者的情况下 if($userdatas['user_group'] <= 2){ if($total_pv != 0){ if(11800 <= $total_pv){ Db::name("user")->where("uid", $user_id)->update(['user_group',3]); } } } } /** * 获取当前用户业绩 */ public function getPerformance22($user_id) { $team_amount = 0; $person_amount = 0; // $user_id = 17; //598 523 536 $result_big_team_arr = []; $get_teams_comm_datas = [];// 在2.0中获取父级下面的所有团队数据 // 共建联盟业绩 个人联盟业绩 共建联盟总pv 个人联盟业绩pv $common_nums = $this->getCommonNums($user_id); // var_dump( $common_nums); $get_teams_comm_num = 0; $get_teams_comm_pv = 0; $get_teams_per_num = 0;// 小部门人数 // 1.0系统中有下级,需要在2.0中再加下级数据 if($user_id < 611){ // 梅红在2.0中的ID是780 // 用户三峡所有在2.0系统下面的业绩和人数 start $child_nums = []; // 获取当前用户 foreach($common_nums as $v){ $child_nums[] = $this->getRecursiveChildren($v); } // var_dump($child_nums); // 去除空数组,并重新组合有数据的数组 $filteredData = array_filter($child_nums, function($array) { return !empty($array); // 如果数组不为空,则保留 }); // 合并所有非空数组 foreach ($filteredData as $array) { $result_big_team_arr = array_merge($result_big_team_arr, $array); } // var_dump($result_big_team_arr); // 获取当前用户下面在2.0中的下级所有PV //$get_teams_comm_pv = $this->getteampv($result_big_team_arr); $t_pv = $this->getteampv($result_big_team_arr); $get_teams_comm_pv =$t_pv['totalPv']; // var_dump($t_pv);echo "ttt"; // 获取当前用户下面在2.0中的下级所有人数 $get_teams_comm_num = count($result_big_team_arr); // 用户伞下小部门所有在2.0系统下面的业绩和人数 end }else{ // 当前用户在1.0没有下级,那直接在新系统2.0找下级获取数据,并区分大小部门 $child_nums = $this->getChildren($user_id); // 获取父级子级下面的个人 $num_teams = $this->getTeamSize($child_nums); // var_dump($num_teams); foreach($child_nums as $v){ $get_teams_comm_datas[] = $this->getTeamPv11($v);// 如果有多个父级ID,需要获取他们伞下的子级,所有的业绩进行 } //$s = $this->getparents_child_pv($user_id); // var_dump($get_teams_comm_datas); // 如果只有一个部门,就是默认大部门 if( count($get_teams_comm_datas) ==1 ){ $get_teams_comm_pv =$get_teams_comm_datas[0]; $get_teams_comm_num = $num_teams[0]['total_count']; }else if(count($get_teams_comm_datas) >1){ // var_dump( $get_teams_comm_datas); // 获取一个最大值,设为大部门,其他的加载一块是小部门 $getss = $this->processArray($get_teams_comm_datas); $max_value_count = $num_teams[$getss['max_index']]['total_count']; unset($num_teams[$getss['max_index']]); // 获取小部门的人数 $per_num = 0; foreach($num_teams as $k=>$v){ $per_num +=$v['total_count']; } // 找到最大值的(大部门) $get_teams_comm_num = $max_value_count; // 小部门的数量 $get_teams_per_num = $per_num; // var_dump($getss['max_value']); $person_amount = $getss['remaining_sum']; $get_teams_comm_pv = $getss['max_value']; } } // var_dump($get_teams_comm_pv); // 合并业绩和人数 $team_amount += $get_teams_comm_pv; // var_dump($team_amount); // 1.0获取小区业绩 $person_nums = $this->getPersonageNums($user_id); // var_dump($person_nums); $result_small_team_arr = []; // 1.0系统中有下级,需要在2.0中再加下级数据 // 用户三峡所有在2.0系统下面的业绩和人数 start $child_nums_mix = []; // 获取当前用户 foreach($person_nums as $v){ $child_nums_mix[] = $this->getRecursiveChildren($v); } // 去除空数组,并重新组合有数据的数组 $filteredData_1 = array_filter($child_nums_mix, function($array) { return !empty($array); // 如果数组不为空,则保留 }); // 合并所有非空数组 $result_small_team_arr = []; foreach ($filteredData_1 as $array) { $result_small_team_arr = array_merge($result_small_team_arr, $array); } // var_dump($result_small_team_arr); // 获取当前用户下面在2.0中的下级所有PV // $get_teams_per_pv = $this->getteampv($result_small_team_arr); $t_pv = $this->getteampv($result_small_team_arr); $get_teams_per_pv =$t_pv['totalPv']; // var_dump( $get_teams_per_pv); // 获取当前用户下面在2.0中的下级所有人数 $get_teams_per_num += count($result_small_team_arr); // 合并业绩和人数 $person_amount += $get_teams_per_pv; // if($user_id == 593){ // $person_amount = 2800; // } // var_dump($person_amount); // 用户小部门所有在2.0系统下面的业绩和人数 end // var_dump($team_amount); // $common_nums[] = $user_id; foreach ($common_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $team_amount += $amount; } foreach ($person_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $person_amount += $amount; } // var_dump($team_amount); // var_dump($person_amount); // // var_dump($team_amount); $user_team_amount = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 1180)->select(); //$money1180Records = $this->old_user_of_goods->where('status', 1)->where('money', 1180)->select(); // 计算 status 为 1 且 money 为 1180 的记录总和(减去相应值后) $money1180Sum = 0; foreach ($user_team_amount as $record) { $money1180Sum += $record['money'] - 300 - 180; } // var_dump($money1180Sum ); // 获取 status 为 1 且 money 为 11800 的记录集合 $money11800Records = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 11800)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } // var_dump($money11800Sum ); $money10620Records = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 10620)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // var_dump($money10620Sum ); // 计算除去特定值后的总和 //$otherMoneyRecords = $this->old_user_of_goods->where('status', 1)->whereNotIn('money', [1180, 11800])->select(); $otherMoneyRecords = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $all_record_nums = $money1180Sum + $money11800Sum + $money10620Sum + round($otherMoneySum * 0.7,2); // var_dump($all_record_nums); $team_amount += $all_record_nums; // var_dump($team_amount); // 计算自己的个人联盟总流水 // // //计算自己的个人联盟总流水 // $user_person_amount = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where('status',1)->sum("money"); // $user_person_amount = empty($user_person_amount) ? 0 : round($user_person_amount * 0.7,2); // $person_amount += $user_person_amount; // 计算个人的1180单价的业绩 集合 $money1180Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",1180)->select(); $money1180Sum = 0; foreach ($money1180Records as $record) { $money1180Sum += $record['money'] - 300 - 180; } $money11800Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",11800)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",10620)->select(); // var_dump($person_nums); // 计算个人的10620单价的业绩 集合 $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 $otherMoneyRecords = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $user_person_amount = $money1180Sum + $money11800Sum +$money10620Sum + round($otherMoneySum * 0.7,2); $person_amount += $user_person_amount; // 大部门人数 $teams_num = count($common_nums) + $get_teams_comm_num; // 小部门人数 $per_num = count($person_nums) + $get_teams_per_num; // var_dump($team_amount); // var_dump($person_amount); // 如果当前用户是1.0用户,找到其直推所有的业绩,根据业绩找到大小部门的同时,还要比对1.0中大小部门的业绩,摘出一个最大业绩的部门是大部门,其余都是小部门() if($user_id < 611){ // var_dump($team_amount); // var_dump($person_amount); // 获取当前用户直属下级(查询在2.0中直接推荐人和伞下的业绩。并比对大小部门) // 例子:17所有下面uid是speard_uid都是17的,和所有伞下的业绩。分出大小部门,加到1.0的大小部门中 $b_s = $this->getparents_child_pv11($user_id,$team_amount,$person_amount,count($common_nums)+ $get_teams_comm_num,count($person_nums)+ $get_teams_per_num); // var_dump($b_s); // var_dump($team_amount,$person_amount); // var_dump(count($common_nums)+ $get_teams_comm_num,count($person_nums)+ $get_teams_per_num); // var_dump( $b_s);echo "yyyyyyyyyyyyy"; $team_amount = $b_s['big_department']['value']; $teams_num = $b_s['big_department']['count']; // var_dump($b_s['team_pv']); // var_dump($b_s['per_pv']); $person_amount = $b_s['small_department']['value']; $per_num = $b_s['small_department']['count'];// 小部门人数 // var_dump( $b_s['team_num'],$b_s['per_num']); } // 级别信息 $userInfo = Db::name("user")->find($user_id);// $zk_level = 4; $is_zk = false; if($userInfo['user_level_id_old'] == $zk_level) { $is_zk = true; $sales_incentive_info = $this->getStarLevel($user_id,$team_amount,$person_amount); $sales_incentive = isset($sales_incentive_info['title']) ? $sales_incentive_info['title'] : ''; } else{ $sales_incentive = 0; } $return_data = [ 'common_nums'=>$teams_num, 'person_nums'=>$per_num, 'common_nums_pv'=> $team_amount, 'person_nums_pv'=> $person_amount, 'sum_nums_pv' =>$team_amount + $person_amount, 'sales_incentive' => $sales_incentive, "is_zk"=>$is_zk ]; return $return_data; } /** * 获取当前用户业绩 */ public function getPerformance($user_id) { $team_amount = 0; $person_amount = 0; $result_big_team_arr = []; $get_teams_comm_datas = [];// 在2.0中获取父级下面的所有团队数据 // 共建联盟业绩 个人联盟业绩 共建联盟总pv 个人联盟业绩pv $common_nums = $this->getCommonNums($user_id); // var_dump($user_id); $get_teams_comm_num = 0; $get_teams_comm_pv = 0; $get_teams_per_num = 0;// 小部门人数 // 1.0系统中有下级,需要在2.0中再加下级数据 if($user_id < 611){ // 梅红在2.0中的ID是780 // if($user_id == 593){ // $common_nums[] = 780; // unset($common_nums[0]); // } // var_dump($common_nums); // 用户三峡所有在2.0系统下面的业绩和人数 start $child_nums = []; // 再加上当前用户直属的子级 $common_ns = $common_nums; $common_ns[] = $user_id; // var_dump($common_ns);return; // 获取当前用户 foreach($common_nums as $v){ $child_nums[] = $this->getRecursiveChildren($v); } // 梅红在2.0中的ID是780 // if($user_id == 593){ // $child_nums[0][] = 780; // } // 去除空数组,并重新组合有数据的数组 $filteredData = array_filter($child_nums, function($array) { return !empty($array); // 如果数组不为空,则保留 }); // 合并所有非空数组 foreach ($filteredData as $array) { $result_big_team_arr = array_merge($result_big_team_arr, $array); } // var_dump($result_big_team_arr);echo "ppppppppppppppppp"; // 获取当前用户下面在2.0中的下级所有PV $t_pv = $this->getteampv($result_big_team_arr); $get_teams_comm_pv =$t_pv['totalPv']; // if($user_id == 593){ // $get_teams_comm_pv = 7000; // } // var_dump($get_teams_comm_pv); // 获取当前用户下面在2.0中的下级所有人数 $get_teams_comm_num = count($result_big_team_arr); // 用户伞下小部门所有在2.0系统下面的业绩和人数 end }else{ // 当前用户在1.0没有下级,那直接在新系统2.0找下级获取数据,并区分大小部门 $child_nums = $this->getChildren($user_id); // 获取父级子级下面的个人 $num_teams = $this->getTeamSize($child_nums); foreach($child_nums as $v){ $get_teams_comm_datas[] = $this->getTeamPv11($v);// 如果有多个父级ID,需要获取他们伞下的子级,所有的业绩进行 } if( count($get_teams_comm_datas) ==1 ){ $get_teams_comm_pv =$get_teams_comm_datas[0]; $get_teams_comm_num = $num_teams[0]['total_count']; }else if(count($get_teams_comm_datas) >1){ // $getss = $this->processArray($get_teams_comm_datas); // $team_datas = $num_teams[$getss['max_index']]; // var_dump( $get_teams_comm_datas); // 获取一个最大值,设为大部门,其他的加载一块是小部门 $getss = $this->processArray($get_teams_comm_datas); $max_value_count = $num_teams[$getss['max_index']]['total_count']; unset($num_teams[$getss['max_index']]); // 获取小部门的人数 $per_num = 0; foreach($num_teams as $k=>$v){ $per_num +=$v['total_count']; } // 找到最大值的(大部门) $get_teams_comm_num = $max_value_count; // 小部门的数量 $get_teams_per_num = $per_num; // var_dump($getss['max_value']); $person_amount = $getss['remaining_sum']; $get_teams_comm_pv = $getss['max_value']; } } // 合并业绩和人数 $team_amount += $get_teams_comm_pv; // var_dump($team_amount); // 1.0获取小区业绩 $person_nums = $this->getPersonageNums($user_id); // var_dump($person_nums); $result_small_team_arr = []; // 1.0系统中有下级,需要在2.0中再加下级数据 // 用户三峡所有在2.0系统下面的业绩和人数 start $child_nums_mix = []; // 再加上当前用户直属的子级 $common_ns1 = $person_nums; $common_ns1[] = $user_id; // 获取当前用户 foreach($person_nums as $v){ $child_nums_mix[] = $this->getRecursiveChildren($v); } // 去除空数组,并重新组合有数据的数组 $filteredData_1 = array_filter($child_nums_mix, function($array) { return !empty($array); // 如果数组不为空,则保留 }); // 合并所有非空数组 $result_small_team_arr = []; foreach ($filteredData_1 as $array) { $result_small_team_arr = array_merge($result_small_team_arr, $array); } // 获取当前用户下面在2.0中的下级所有PV // $get_teams_per_pv = $this->getteampv($result_small_team_arr); $t_pv = $this->getteampv($result_small_team_arr); $get_teams_per_pv =$t_pv['totalPv']; // 获取当前用户下面在2.0中的下级所有人数 $get_teams_per_num += count($result_small_team_arr); // 合并业绩和人数 $person_amount += $get_teams_per_pv; // if($user_id == 593){ // $person_amount = 2800; // } // var_dump($person_amount); // 用户小部门所有在2.0系统下面的业绩和人数 end // $common_nums[] = $user_id; foreach ($common_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $team_amount += $amount; } foreach ($person_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $person_amount += $amount; } // var_dump($team_amount); // if($user_id < 611){ // //获取当前用户直属下级(查询在2.0中直接推荐人和伞下的业绩。并比对大小部门) // //例子:17所有下面uid是speard_uid都是17的,和所有伞下的业绩。分出大小部门,加到1.0的大小部门中 // $b_s = $this->getparents_child_pv($user_id); // //var_dump( $b_s);echo "yyyyyyyyyyyyy"; // $team_amount += $b_s['team_pv']; // $get_teams_comm_num += $b_s['team_num']; // $person_amount += $b_s['per_pv']; // $get_teams_per_num += $b_s['per_num'];//小部门人数 // //var_dump($team_amount,$person_amount ); // } $user_team_amount = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 1180)->select(); //$money1180Records = $this->old_user_of_goods->where('status', 1)->where('money', 1180)->select(); // 计算 status 为 1 且 money 为 1180 的记录总和(减去相应值后) $money1180Sum = 0; foreach ($user_team_amount as $record) { $money1180Sum += $record['money'] - 300 - 180; } if($user_id == 593){ $money1180Sum -= 700; } // 获取 status 为 1 且 money 为 11800 的记录集合 $money11800Records = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 11800)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 10620)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 //$otherMoneyRecords = $this->old_user_of_goods->where('status', 1)->whereNotIn('money', [1180, 11800])->select(); $otherMoneyRecords = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $all_record_nums = $money1180Sum + $money11800Sum + $money10620Sum + round($otherMoneySum * 0.7,2); // var_dump($all_record_nums); $team_amount += $all_record_nums; // var_dump($user_team_amount); // 计算自己的个人联盟总流水 // // //计算自己的个人联盟总流水 // $user_person_amount = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where('status',1)->sum("money"); // $user_person_amount = empty($user_person_amount) ? 0 : round($user_person_amount * 0.7,2); // $person_amount += $user_person_amount; // 计算个人的1180单价的业绩 集合 $money1180Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",1180)->select(); $money1180Sum = 0; foreach ($money1180Records as $record) { $money1180Sum += $record['money'] - 300 - 180; } $money11800Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",11800)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",10620)->select(); // var_dump($person_nums); // 计算个人的10620单价的业绩 集合 $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 $otherMoneyRecords = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $user_person_amount = $money1180Sum + $money11800Sum +$money10620Sum + round($otherMoneySum * 0.7,2); $person_amount += $user_person_amount; // //临时设置 // if($user_id == 536){ // $person_amount = 2800; // $team_amount = 7000; // } // //临时设置 // if($user_id == 222){ // $person_amount = 2800; // $team_amount = 11900; // } // 大部门人数 $teams_num = count($common_nums) + $get_teams_comm_num; // 小部门人数 $per_num = count($person_nums) + $get_teams_per_num; // 如果当前用户是1.0用户,找到其直推所有的业绩,根据业绩找到大小部门的同时,还要比对1.0中大小部门的业绩,摘出一个最大业绩的部门是大部门,其余都是小部门() if($user_id < 611){ // var_dump($team_amount); // var_dump($person_amount); // 获取当前用户直属下级(查询在2.0中直接推荐人和伞下的业绩。并比对大小部门) // 例子:17所有下面uid是speard_uid都是17的,和所有伞下的业绩。分出大小部门,加到1.0的大小部门中 $b_s = $this->getparents_child_pv11($user_id,$team_amount,$person_amount,count($common_nums)+ $get_teams_comm_num,count($person_nums)+ $get_teams_per_num); // var_dump($b_s); // var_dump($team_amount,$person_amount); // var_dump(count($common_nums)+ $get_teams_comm_num,count($person_nums)+ $get_teams_per_num); // var_dump( $b_s);echo "yyyyyyyyyyyyy"; $team_amount = $b_s['big_department']['value']; $teams_num = $b_s['big_department']['count']; // var_dump($b_s['team_pv']); // var_dump($b_s['per_pv']); $person_amount = $b_s['small_department']['value']; $per_num = $b_s['small_department']['count'];// 小部门人数 // var_dump( $b_s['team_num'],$b_s['per_num']); } // 级别信息 $userInfo = Db::name("user")->find($user_id);// $zk_level = 4; $is_zk = false; if($userInfo['user_level_id_old'] == $zk_level) { $is_zk = true; $sales_incentive_info = $this->getStarLevel($user_id,$team_amount,$person_amount); $sales_incentive = isset($sales_incentive_info['title']) ? $sales_incentive_info['title'] : ''; } else{ $sales_incentive = 0; } $return_data = [ 'common_nums' => $teams_num, 'person_nums' => $per_num, 'common_nums_pv'=> $team_amount, 'person_nums_pv'=> $person_amount, 'sum_nums_pv' =>$team_amount + $person_amount, 'sales_incentive' => $sales_incentive, "is_zk"=>$is_zk ]; return $return_data; } /** * 获取当前用户业绩 */ public function getPerformance_copy($user_id) { // $user_id = $this->request->post("user_id"); // 共建联盟业绩 个人联盟业绩 共建联盟总pv 个人联盟业绩pv $common_nums = $this->getCommonNums($user_id); // 1.0获取小区业绩 $person_nums = $this->getPersonageNums($user_id); // return $person_nums; // var_dump( $common_nums); $team_amount = 0; $person_amount = 0; // $common_nums[] = $user_id; foreach ($common_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $team_amount += $amount; } foreach ($person_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $person_amount += $amount; } // var_dump($team_amount); $user_team_amount = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 1180)->select(); //$money1180Records = $this->old_user_of_goods->where('status', 1)->where('money', 1180)->select(); // 计算 status 为 1 且 money 为 1180 的记录总和(减去相应值后) $money1180Sum = 0; foreach ($user_team_amount as $record) { $money1180Sum += $record['money'] - 300 - 180; } // 获取 status 为 1 且 money 为 11800 的记录集合 $money11800Records = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 11800)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where('money', 10620)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 //$otherMoneyRecords = $this->old_user_of_goods->where('status', 1)->whereNotIn('money', [1180, 11800])->select(); $otherMoneyRecords = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $all_record_nums = $money1180Sum + $money11800Sum + $money10620Sum + round($otherMoneySum * 0.7,2); // var_dump($all_record_nums); $team_amount += $all_record_nums; // 计算自己的个人联盟总流水 // // //计算自己的个人联盟总流水 // $user_person_amount = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where('status',1)->sum("money"); // $user_person_amount = empty($user_person_amount) ? 0 : round($user_person_amount * 0.7,2); // $person_amount += $user_person_amount; // 计算个人的1180单价的业绩 集合 $money1180Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",1180)->select(); $money1180Sum = 0; foreach ($money1180Records as $record) { $money1180Sum += $record['money'] - 300 - 180; } $money11800Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",11800)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("money",10620)->select(); // var_dump($person_nums); // 计算个人的10620单价的业绩 集合 $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 $otherMoneyRecords = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $user_person_amount = $money1180Sum + $money11800Sum +$money10620Sum + round($otherMoneySum * 0.7,2); $person_amount += $user_person_amount; // 级别信息 $userInfo = Db::name("user")->find($user_id);// $zk_level = 4; $is_zk = false; if($userInfo['user_level_id_old'] == $zk_level) { $is_zk = true; $sales_incentive_info = $this->getStarLevel($user_id,$team_amount,$person_amount); $sales_incentive = isset($sales_incentive_info['title']) ? $sales_incentive_info['title'] : ''; } else{ $sales_incentive = 0; } $return_data = [ 'common_nums'=>count($common_nums), 'person_nums'=>count($person_nums), 'common_nums_pv'=> $team_amount, 'person_nums_pv'=> $person_amount, 'sum_nums_pv' =>$team_amount + $person_amount, 'sales_incentive' => $sales_incentive, "is_zk"=>$is_zk ]; return $return_data; } /** * 获取指定用户业绩 */ public function getPerformanceOf($user_id) { // 共建联盟业绩 个人联盟业绩 共建联盟总pv 个人联盟业绩pv $common_nums = $this->getCommonNums($user_id); $person_nums = $this->getPersonageNums($user_id); $team_amount = 0; $person_amount = 0; // $common_nums[] = $user_id; foreach ($common_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $team_amount += $amount; } foreach ($person_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $person_amount += $amount; } // return $person_nums; // 添加自己共建联盟的流水 $user_team_amount = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("spread_id",$user_id)->sum("money"); $user_team_amount = empty($user_team_amount) ? 0 : round($user_team_amount * 0.7,2); $team_amount += $user_team_amount; // //计算自己的个人联盟总流水 $user_person_amount = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("spread_id",$user_id)->sum("money"); $user_person_amount = empty($user_person_amount) ? 0 : round($user_person_amount * 0.7,2); $person_amount += $user_person_amount; $sum_nums_pv = $team_amount + $person_amount; $sum_nums_pv = isset($sum_nums_pv) ? $sum_nums_pv :0; return $sum_nums_pv; } /** * 获取用户星级 */ public function getStarLevel($user_id,$team_money=0,$person_money=0) { if(empty($team_money)) { $common_nums = $this->getCommonNums($user_id); $team_money = 0; foreach ($common_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $team_money += $amount; } // 计算自己的共建联盟流水 $user_team_amount = Db::name("old_user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->sum("money"); $user_team_amount = empty($user_team_amount) ? 0 : round($user_team_amount * 0.7,2); $team_money += $user_team_amount; }else{ $common_nums = $this->getCommonNums($user_id); } if(empty($person_money)) { $person_nums = $this->getPersonageNums($user_id); $person_amount = 0; foreach ($person_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $person_amount += $amount; } $person_money = $person_amount; // 计算自己的个人联盟总流水 $user_person_amount = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->sum("money"); $user_person_amount = empty($user_person_amount) ? 0 : round($user_person_amount * 0.7,2); $person_money += $user_person_amount; }else{ $person_nums = $this->getPersonageNums($user_id); } $slow = $person_money; if($team_money < $person_money) { $slow = $team_money; } $sum_money = $team_money + $person_money; // $data = ['sum_money'=>$sum_money,"team_money"=>$team_money,"person_money"=>$person_money]; // $this->error(0,$data); $star_list = Db::name("old_user_star")->order("statement_all_num desc")->select(); $start_level = ""; foreach ($star_list as $key => $value) { # code... if( $sum_money>=$value['statement_all_num'] && $slow >= $value['person_statement']) { return $value; } } return $start_level; } /** * 获取流水信息 */ public function getPerformance1($user_id) { // $amount = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("status",1)->sum("money"); // $amount = isset($amount) ? round($amount*0.7,2) : 0; // return $amount; $money1180Records = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("money",1180)->where("status",1)->select(); $money1180Sum = 0; foreach ($money1180Records as $record) { $money1180Sum += $record['money'] - 300 - 180; } // var_dump($money1180Sum); $money11800Records = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("money",11800)->where("status",1)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("money",10620)->where("status",1)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 $otherMoneyRecords = Db::name("old_user_of_goods")->where("node_id",$user_id)->where('status', 1)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $user_person_amount = $money1180Sum + $money11800Sum + $money10620Sum + round($otherMoneySum * 0.7,2); return $user_person_amount; } /** * 获取个人业绩统计信息 */ public function getPerformanceOfId($user_id) { // var_dump($user_id); // 联盟总人数 共建联盟人数 个人联盟人数 总流水 共建联盟流水 个人联盟流水 所属星级(钻卡专属) $common_nums = $this->getCommonNums($user_id); $person_nums = $this->getPersonageNums($user_id); // 联盟业绩 查询 共建联盟业绩 个人联盟业绩 $team_amount = 0; $person_amount = 0; // $common_nums[] = $user_id; foreach ($common_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $team_amount += $amount; } // 计算自己的共建联盟流水 //$user_team_amount = Db::name("user_of_goods")->whereIn("user_id",$common_nums)->where("node_id",$user_id)->where("status",1)->sum("money"); // $this->error(0,$team_amount); //$user_team_amount = empty($user_team_amount) ? 0 : round($user_team_amount * 0.7,2); $money1180Records = Db::name("old_user_of_goods")->where('status', 1)->whereIn("user_id",$common_nums)->where('money', 1180)->select(); // 计算 status 为 1 且 money 为 1180 的记录总和(减去相应值后) $money1180Sum = 0; foreach ($money1180Records as $record) { $money1180Sum += $record['money'] - 300 - 180; } // 获取 status 为 1 且 money 为 11800 的记录集合 $money11800Records = Db::name("old_user_of_goods")->where('status', 1)->whereIn("user_id",$common_nums)->where('money', 11800)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } // 获取 status 为 1 且 money 为 11800 的记录集合 $money10620Records = Db::name("old_user_of_goods")->where('status', 1)->whereIn("user_id",$common_nums)->where('money', 10620)->select(); // 计算 status 为 1 且 money 为 11800 的记录总和(减去相应值后) $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 $otherMoneyRecords = Db::name("old_user_of_goods")->where('status', 1)->whereIn("user_id",$common_nums)->whereNotIn('money', [1180, 11800,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $user_team_amount = $money1180Sum + $money11800Sum + $money10620Sum + round($otherMoneySum * 0.7,2); $team_amount += $user_team_amount; foreach ($person_nums as $key => $value) { # code... $amount = $this->getPerformance1($value); $person_amount += $amount; } // //计算自己的个人联盟总流水 $user_person_amount = Db::name("old_user_of_goods")->whereIn("user_id",$person_nums)->where("node_id",$user_id)->where("status",1)->sum("money"); $user_person_amount = empty($user_person_amount) ? 0 : round($user_person_amount * 0.7,2); $person_amount += $user_person_amount; // $this->error(0,$common_nums); return $team_amount + $person_amount; } /** * 获取该用户共建联盟 */ public function getCommonNums($user_id){ // 先获取共建联盟下用户的id $son_ids = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",1)->select()->toArray(); $new_array_ids =[]; foreach ($son_ids as $key => $value) { # code... $son_id = $value['id']; $new_array_ids = array_merge($new_array_ids,[$son_id]); $son_value_ids = Db::name("old_user_jbp")->whereRaw("FIND_IN_SET('$son_id',parent_ids)")->field("id")->select()->toArray(); if(count($son_value_ids) > 0) { $son_value_ids = array_column($son_value_ids,"id"); $new_array_ids = array_merge($new_array_ids,$son_value_ids); } } return $new_array_ids; } /** * 获取该用户个人联盟 */ public function getPersonageNums($user_id){ $son_ids = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",0)->field("id")->select(); $new_array_ids =[]; // return 3343; foreach ($son_ids as $key => $value) { # code... $son_id = $value['id']; $new_array_ids = array_merge($new_array_ids,[$son_id]); $son_value_ids = Db::name("old_user_jbp")->whereRaw("FIND_IN_SET('$son_id',parent_ids)")->field("id")->select()->toArray(); if(count($son_value_ids) > 0) { $son_value_ids = array_column($son_value_ids,"id"); $new_array_ids = array_merge($new_array_ids,$son_value_ids); } } return $new_array_ids; } // 获取团队递归聚宝盆1 public function teamPeople( $user_id,$type){ // var_dump($type); //$ftype = 1:大部门,0:小部门 // 业绩小是小部门,业绩大是大部门 if($type == 1) { $list = Db::name("old_user_jbp") ->where("spread", $user_id) ->where("is_team", 1) ->field("user_name, id") ->select() ->toArray(); $list = $this->get_yj_amount($list,1); $list1 = Db::name("old_user_jbp") ->where("spread", $user_id) ->where("is_team", 0) ->field("user_name, id") ->select() ->toArray(); $list1 = $this->get_yj_amount($list1, 0); // 检查数组和字段是否存在 if (isset($list[0]['performance']['common_nums_pv']) && isset($list1[0]['performance']['common_nums_pv'])) { // 如果$list的值小于或等于$list1的值,选择$list if ($list[0]['performance']['common_nums_pv'] <= $list1[0]['performance']['common_nums_pv']) { return $list1; } else { return $list; } } elseif (isset($list[0]['performance']['common_nums_pv'])) { // 如果只有$list有值,返回$list return $list; } elseif (isset($list1[0]['performance']['common_nums_pv'])) { // 如果只有$list1有值,返回$list1 return $list1; } else { // 如果两个数组都没有该字段,返回空数组 return []; } }else if($type == 0) { $list = Db::name("old_user_jbp") ->where("spread", $user_id) ->where("is_team", 1) ->field("user_name, id") ->select() ->toArray(); $list = $this->get_yj_amount($list,1); $list1 = Db::name("old_user_jbp") ->where("spread", $user_id) ->where("is_team", 0) ->field("user_name, id") ->select() ->toArray(); $list1 = $this->get_yj_amount($list1, 0); // 检查数组和字段是否存在 if (isset($list[0]['performance']['common_nums_pv']) && isset($list1[0]['performance']['common_nums_pv'])) { // 如果$list的值小于或等于$list1的值,选择$list if ($list[0]['performance']['common_nums_pv'] <= $list1[0]['performance']['common_nums_pv']) { return $list; } else { return $list1; } } elseif (isset($list[0]['performance']['common_nums_pv'])) { // 如果只有$list有值,返回$list return $list; } elseif (isset($list1[0]['performance']['common_nums_pv'])) { // 如果只有$list1有值,返回$list1 return $list1; } else { // 如果两个数组都没有该字段,返回空数组 return []; } }else if($type == 2){ $list = Db::name("user")->where("spread_uid",$user_id)->field("nickname,uid,avatar")->select()->toArray(); return $list; } // foreach ($list as $key => $value) { // $list[$key]['user_name'] = $value['user_name'] . "业绩"; // $list[$key]['performance'] = $this->getPerformance($value['id']); // //辨别当前是大部门还是小部门。用于显示大小业绩展示 // $list[$key]['curr_type'] = ''; // if($type == 1){ // $list[$key]['curr_type'] = 1; // }else if($type == 0){ // $list[$key]['curr_type'] = 0; // }else{ // $list[$key]['curr_type'] = ''; // } // } return $list; } public function get_yj_amount($list,$type){ foreach ($list as $key => $value) { # code... // $amount = $this->getPerformanceOfId($value['id']); $list[$key]['user_name'] = $value['user_name'] . "业绩"; //$list[$key]['total_performance'] = $amount; //$performance = $this->getPerformanceOfId($search_name['id']); $list[$key]['performance'] = $this->getPerformance($value['id']); // 辨别当前是大部门还是小部门。用于显示大小业绩展示 $list[$key]['curr_type'] = ''; if($type == 1){ $list[$key]['curr_type'] = 1; }else if($type == 0){ $list[$key]['curr_type'] = 0; }else{ $list[$key]['curr_type'] = ''; } } return $list; } // 获取团队递归聚宝盆1 public function teamPeople_copy( $user_id,$type){ // var_dump($type); //$ftype = 1:大部门,0:小部门 //$user_id = $this->request->post("user_id"); //$type = $this->request->post("type",0); // 查找当前用户id下节点 if($type == 1) { // echo 33; $list = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",1)->field("user_name,id")->select()->toArray(); }else if($type == 0) { // echo 44; $list = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",0)->field("user_name,id")->select()->toArray(); }else if($type == 2){ $list = Db::name("user")->where("spread_uid",$user_id)->field("nickname,uid")->select()->toArray(); return $list; }else { // echo 55; $list = Db::name("old_user_jbp")->where("spread",$user_id)->field("user_name,id")->select()->toArray(); } foreach ($list as $key => $value) { # code... // $amount = $this->getPerformanceOfId($value['id']); $list[$key]['user_name'] = $value['user_name'] . "业绩"; //$list[$key]['total_performance'] = $amount; //$performance = $this->getPerformanceOfId($search_name['id']); $list[$key]['performance'] = $this->getPerformance($value['id']); // 辨别当前是大部门还是小部门。用于显示大小业绩展示 $list[$key]['curr_type'] = ''; if($type == 1){ $list[$key]['curr_type'] = 1; }else if($type == 0){ $list[$key]['curr_type'] = 0; }else{ $list[$key]['curr_type'] = ''; } } return $list; } // //获取团队递归聚宝盆1 // public function teamPeople( $user_id,$type){ // //$user_id = $this->request->post("user_id"); // //$type = $this->request->post("type",0); // //查找当前用户id下节点 // if($type == 1) { // $list = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",1)->field("user_name,id")->select()->toArray(); // }else if($type == 2) { // $list = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",0)->field("user_name,id")->select()->toArray(); // }else { // $list = Db::name("old_user_jbp")->where("spread",$user_id)->field("user_name,id")->select()->toArray(); // } // foreach ($list as $key => $value) { // # code... // $amount = $this->getPerformanceOfId($value['id']); // $list[$key]['user_name'] = $value['user_name'] . "-----业绩" . $amount; // } // return $list; // } // 获取大小部门贡献值 /** * 获取当前用户大小部门贡献值 */ public function getPerformance_getcon($user_id) { $team_amount = 0; $person_amount = 0; // $user_id = 593; //598 523 536 $result_big_team_arr = []; $get_teams_comm_datas = [];// 在2.0中获取父级下面的所有团队数据 // 共建联盟业绩 个人联盟业绩 共建联盟总pv 个人联盟业绩pv $common_nums = $this->getCommonNums_getcon($user_id); // var_dump($common_nums); $get_teams_comm_num = 0; $get_teams_comm_pv = 0; $get_teams_per_num = 0;// 小部门人数 // 1.0系统中有下级,需要在2.0中再加下级数据 if($user_id < 611){ // 梅红在2.0中的ID是780 // var_dump( $common_nums); // 用户三峡所有在2.0系统下面的业绩和人数 start $child_nums = []; // 获取当前用户 foreach($common_nums as $v){ $child_nums[] = $this->getRecursiveChildren_getcon($v); } // 去除空数组,并重新组合有数据的数组 $filteredData = array_filter($child_nums, function($array) { return !empty($array); // 如果数组不为空,则保留 }); // 合并所有非空数组 foreach ($filteredData as $array) { $result_big_team_arr = array_merge($result_big_team_arr, $array); } // var_dump($result_big_team_arr); // 获取当前用户下面在2.0中的下级所有PV //$get_teams_comm_pv = $this->getteampv($result_big_team_arr); $t_pv = $this->getteampv_getcon($result_big_team_arr); $get_teams_comm_pv = $t_pv; // var_dump($get_teams_comm_pv);echo "ttt"; // 用户伞下小部门所有在2.0系统下面的业绩和人数 end }else{ // 当前用户在1.0没有下级,那直接在新系统2.0找下级获取数据,并区分大小部门 $child_nums = $this->getChildren_getcon($user_id); // 获取父级子级下面的个人 $num_teams = $this->getTeamSize_getcon($child_nums); // var_dump($num_teams); foreach($child_nums as $v){ $get_teams_comm_datas[] = $this->getTeamPv11_getcon($v);// 如果有多个父级ID,需要获取他们伞下的子级,所有的业绩进行 } //$s = $this->getparents_child_pv($user_id); // var_dump($get_teams_comm_datas); // 如果只有一个部门,就是默认大部门 if( count($get_teams_comm_datas) ==1 ){ $get_teams_comm_pv =$get_teams_comm_datas[0]; $get_teams_comm_num = $num_teams[0]['total_count']; }else if(count($get_teams_comm_datas) >1){ // var_dump( $get_teams_comm_datas); // 获取一个最大值,设为大部门,其他的加载一块是小部门 $getss = $this->processArray_getcon($get_teams_comm_datas); // var_dump($getss); $max_value_count = $num_teams[$getss['max_index']]['total_count']; unset($num_teams[$getss['max_index']]); // 获取小部门的人数 $per_num = 0; foreach($num_teams as $k=>$v){ $per_num +=$v['total_count']; } // 找到最大值的(大部门) //$get_teams_comm_num = $max_value_count; // 小部门的数量 // $get_teams_per_num = $per_num; // var_dump($getss['max_value']); $person_amount = $getss['remaining_sum']; $get_teams_comm_pv = $getss['max_value']; } } // var_dump($get_teams_comm_pv); // 合并业绩和人数 $team_amount += $get_teams_comm_pv; // var_dump($team_amount); // 1.0获取小区业绩 $person_nums = $this->getPersonageNums_getcon($user_id); // var_dump($person_nums); $result_small_team_arr = []; // 1.0系统中有下级,需要在2.0中再加下级数据 // 用户三峡所有在2.0系统下面的业绩和人数 start $child_nums_mix = []; // 获取当前用户 foreach($person_nums as $v){ $child_nums_mix[] = $this->getRecursiveChildren_getcon($v); } // 去除空数组,并重新组合有数据的数组 $filteredData_1 = array_filter($child_nums_mix, function($array) { return !empty($array); // 如果数组不为空,则保留 }); // 合并所有非空数组 $result_small_team_arr = []; foreach ($filteredData_1 as $array) { $result_small_team_arr = array_merge($result_small_team_arr, $array); } // var_dump($result_small_team_arr); // 获取当前用户下面在2.0中的下级所有PV // $get_teams_per_pv = $this->getteampv($result_small_team_arr); $t_pv = $this->getteampv_getcon($result_small_team_arr); $get_teams_per_pv =$t_pv; // var_dump( $get_teams_per_pv); // 获取当前用户下面在2.0中的下级所有人数 // $get_teams_per_num += count($result_small_team_arr); // 合并业绩和人数 $person_amount += $get_teams_per_pv; // 当前会员直属的业绩(1.0大部门) $t_pv = $this->getteampv_getcon($common_nums); $team_amount += $t_pv; // 当前会员直属的业绩(1.0大部门) $p_pv = $this->getteampv_getcon($person_nums); $person_amount += $p_pv; // var_dump($team_amount,$person_amount); // 如果当前用户是1.0用户,找到其直推所有的业绩,根据业绩找到大小部门的同时,还要比对1.0中大小部门的业绩,摘出一个最大业绩的部门是大部门,其余都是小部门() if($user_id < 611){ // 获取当前用户直属下级(查询在2.0中直接推荐人和伞下的业绩。并比对大小部门) // 例子:17所有下面uid是speard_uid都是17的,和所有伞下的业绩。分出大小部门,加到1.0的大小部门中 $b_s = $this->getparents_child_pv11_getcon($user_id,$team_amount,$person_amount); $team_amount = $b_s[0]; $person_amount = $b_s[1]; } $return_data = [ 'common_nums_pv'=> $team_amount, 'person_nums_pv'=> $person_amount, ]; return $return_data; } /** * 获取该用户共建联盟 */ public function getCommonNums_getcon($user_id){ // 先获取共建联盟下用户的id $son_ids = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",1)->select()->toArray(); $new_array_ids =[]; foreach ($son_ids as $key => $value) { # code... $son_id = $value['id']; $new_array_ids = array_merge($new_array_ids,[$son_id]); $son_value_ids = Db::name("old_user_jbp")->whereRaw("FIND_IN_SET('$son_id',parent_ids)")->field("id")->select()->toArray(); if(count($son_value_ids) > 0) { $son_value_ids = array_column($son_value_ids,"id"); $new_array_ids = array_merge($new_array_ids,$son_value_ids); } } return $new_array_ids; } /** * 获取该用户个人联盟 */ public function getPersonageNums_getcon($user_id){ $son_ids = Db::name("old_user_jbp")->where("spread",$user_id)->where("is_team",0)->field("id")->select(); $new_array_ids =[]; // return 3343; foreach ($son_ids as $key => $value) { # code... $son_id = $value['id']; $new_array_ids = array_merge($new_array_ids,[$son_id]); $son_value_ids = Db::name("old_user_jbp")->whereRaw("FIND_IN_SET('$son_id',parent_ids)")->field("id")->select()->toArray(); if(count($son_value_ids) > 0) { $son_value_ids = array_column($son_value_ids,"id"); $new_array_ids = array_merge($new_array_ids,$son_value_ids); } } return $new_array_ids; } // 根据父级uid,递归获取所有子级UID数组 public function getRecursiveChildren_getcon($parentUid) { $result = []; // 用于存储所有子级的 uid // 定义递归函数 $recursion = function ($parentUid) use (&$result, &$recursion) { // 查询当前父级的所有直接子级 $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); // 获取子级的 uid 列表 // 如果没有子级,直接返回 if (empty($children)) { return; } // 遍历每个子级 foreach ($children as $childUid) { $result[] = $childUid; // 将子级的 uid 添加到结果数组 $recursion($childUid); // 递归查询子级的子级 } }; // 从初始父级开始递归查询 $recursion($parentUid); return array_unique($result); // 返回结果数组,并去重 } // 只获取数组中的业绩 public function getteampv_getcon($common_nums) { // // 查询当前用户及其子级的所有订单 $orders_gongxian = Db::name("user_sign_gongxian") ->whereIn('status', [1]) ->whereIn("uid", $common_nums) ->select(); // var_dump( $common_nums); $total_gongxian = 0; // // 遍历订单计算业绩 foreach ($orders_gongxian as $order) { if (strpos($order['mark'], "购买") !== false) { $total_gongxian += $order['number']; } } return $total_gongxian; // // // 查询当前用户及其子级的所有订单 // $orders = Db::name("store_order") // ->whereIn('status', [0, 1, 2, 3]) // ->whereIn("uid", $common_nums) // ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440]) // ->select(); // // 初始化业绩和人数 // $totalPv = 0; // $totalUsers = count($common_nums); // 初始化人数为子级总数 // // 遍历订单计算业绩 // foreach ($orders as $order) { // if ($order['total_price'] == 1180) { // $totalPv += 700; // } else if ($order['total_price'] == 11800) { // $totalPv += 7000; // } else if ($order['total_price'] == 10620) { // $totalPv += 6300; // } else if ($order['total_price'] == 2360) { // $totalPv += 1400; // } else if ($order['total_price'] == 9440) { // $totalPv += 5600; // } // } // // 返回业绩和人数 // return [ // 'totalPv' => $totalPv, // 'totalUsers' => $totalUsers // ]; } // 2.0 根据父级uid,找到当前用户下面的UID public function getChildren_getcon($parentUid) { $result = []; // 用于存储所有子级的 uid $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); // 获取子级的 uid 列表 return $children; // 返回结果数组,并去重 } // 递归获取所有子级 UID 的业绩 public function getTeamPv11_getcon($parentUid) { $getRecursiveChildren = function ($parentUid) use (&$getRecursiveChildren) { $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); $allChildren = []; foreach ($children as $childUid) { $allChildren[] = $childUid; $allChildren = array_merge($allChildren, $getRecursiveChildren($childUid)); } return $allChildren; }; // 获取当前用户及其所有子级的 UID $allUids = array_merge([$parentUid], $getRecursiveChildren($parentUid)); $orders_gongxian = Db::name("user_sign_gongxian") ->whereIn('status', [1]) ->whereIn("uid", $allUids) ->select(); $total_gongxian = 0; // // 遍历订单计算业绩 foreach ($orders_gongxian as $order) { if (strpos($order['mark'], "购买") !== false) { $total_gongxian += $order['number']; } } return $total_gongxian; // // 查询当前用户及其子级的所有订单 // $orders = Db::name("store_order") // ->whereIn('status', [0, 1, 2, 3]) // ->whereIn("uid", $allUids) // ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440]) // ->select(); // // 计算总业绩 // $totalPv = 0; // foreach ($orders as $order) { // switch ($order['total_price']) { // case 1180: // $totalPv += 700; // break; // case 11800: // $totalPv += 7000; // break; // case 10620: // $totalPv += 6300; // break; // case 2360: // $totalPv += 1400; // break; // case 9440: // $totalPv += 5600; // break; // } // } // return $totalPv; } // 根据传递的父级数组,返回他的对应子级的个数 public function getTeamSize_getcon($parentUids) { // 初始化结果数组 $result = []; // 遍历每个父级ID foreach ($parentUids as $parentUid) { // 递归获取所有子级 UID $getRecursiveChildren = function ($parentUid) use (&$getRecursiveChildren) { $children = Db::name("user") ->where("spread_uid", $parentUid) ->column("uid"); // 确保返回的是数组 if (!is_array($children)) { return []; } $allChildren = []; foreach ($children as $childUid) { $allChildren[] = $childUid; $allChildren = array_merge($allChildren, $getRecursiveChildren($childUid)); } return $allChildren; }; // 获取当前父级及其所有子级的 UID $allUids = array_merge([$parentUid], $getRecursiveChildren($parentUid)); // 计算总个数(包括父级自身) $totalUids = count($allUids); // 将结果存入数组 $result[] = [ 'parent_uid' => $parentUid, 'total_count' => $totalUids ]; } return $result; } public function processArray_getcon($array) { // 初始化结果数组 $result = [ 'max_value' => null, // 最大值 'max_index' => null, // 最大值的下标 'remaining_sum' => 0 // 剩余值的总和 ]; // 检查数组是否为空 if (empty($array)) { return $result; } // 找出最大值及其下标 $maxValue = $array[0]; $maxIndex = 0; for ($i = 1; $i < count($array); $i++) { if ($array[$i] > $maxValue) { $maxValue = $array[$i]; $maxIndex = $i; } } // 计算剩余值的总和 $remainingSum = 0; for ($i = 0; $i < count($array); $i++) { if ($i != $maxIndex) { $remainingSum += $array[$i]; } } // 将结果存入数组 $result['max_value'] = $maxValue; $result['max_index'] = $maxIndex; $result['remaining_sum'] = $remainingSum; return $result; } /** * 获取流水信息 */ public function getPerformance1_getcon($user_id) { // $amount = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("status",1)->sum("money"); // $amount = isset($amount) ? round($amount*0.7,2) : 0; // return $amount; $money1180Records = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("money",1180)->where("status",1)->select(); $money1180Sum = 0; foreach ($money1180Records as $record) { $money1180Sum += $record['money'] - 300 - 180; } // var_dump($money1180Sum); $money11800Records = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("money",11800)->where("status",1)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money11800Sum = 0; foreach ($money11800Records as $record) { $money11800Sum += $record['money'] - 3000 - 1800; } $money10620Records = Db::name("old_user_of_goods")->where("node_id",$user_id)->where("money",10620)->where("status",1)->select(); // var_dump($person_nums); // 计算个人的11800单价的业绩 集合 $money10620Sum = 0; foreach ($money10620Records as $record) { $money10620Sum += $record['money'] - 2700 - 1620; } // 计算除去特定值后的总和 $otherMoneyRecords = Db::name("old_user_of_goods")->where("node_id",$user_id)->where('status', 1)->whereNotIn('money', [1180, 11800 ,10620])->select(); $otherMoneySum = 0; foreach ($otherMoneyRecords as $record) { $otherMoneySum += $record['money']; } // 分别处理特定值的情况并加上其他值的总和 $user_person_amount = $money1180Sum + $money11800Sum + $money10620Sum + round($otherMoneySum * 0.7,2); return $user_person_amount; } // 1.0用户直属的部门和2.0直属的部门,进行比较,获取大部门和小部门数据 public function getparents_child_pv11_getcon($user_id, $bigamount, $smallamount) { // 获取直接下级的 UID 列表 $get_childs = Db::name("user") ->where("spread_uid", $user_id) ->column("uid"); // 初始化变量 $all_departments = []; // 用于存储所有直属下级的业绩 // 遍历每个直属下级 foreach ($get_childs as $child) { // 获取当前下级及其子级 $child_group = [$child]; $recursive_children = $this->getRecursiveChildren_getcon($child); $child_group = array_merge($child_group, $recursive_children); // 获取当前分组的业绩 $result = $this->getteampv_getcon($child_group); // 将直属下级的业绩加入数组 $all_departments[] = $result; } // 将传入的 $bigamount 和 $smallamount 加入数组 $all_departments[] = $bigamount; $all_departments[] = $smallamount; // 检查是否所有业绩都是 0 if (count(array_filter($all_departments, function($value) { return $value != 0; })) == 0) { return [0, 0]; } // 初始化最大部门和小部门 $max_department = 0; $small_department = 0; // 遍历 $all_departments,找出最大值并累加小部门的值 foreach ($all_departments as $department) { if ($department > $max_department) { // 如果当前部门的业绩大于最大部门的业绩,更新最大部门 if ($max_department != 0) { $small_department += $max_department; // 将旧的最大值累加到小部门 } $max_department = $department; // 更新最大部门 } else { // 如果当前部门的业绩小于或等于最大部门的业绩,累加到小部门 $small_department += $department; } } // 返回结果 return [ $max_department, // 大部门业绩 $small_department // 小部门业绩 ]; // 拿$bigamount, $smallamount业绩和get_childs产生的result业绩去对比。如果都是0.说明没有大小部门了,直接返回0,0如果只有一个数组有数据, // 说明只有大部门,默认返回大部门数据,小部门返回0,如果有多条数组数据是一样的,那么就是选一个,设为大部门。剩下的数据叠加设为小部门 } // 获取当前uesr_id下面在2.0中是否还有直接下级,并计算她的大部门和小部门 public function getparents_child_pv_getcon($user_id){ // 获取直接下级的 UID 列表 //$user_id = 593; // $get_childs = $this->getRecursiveChildren($user_id); $get_childs = Db::name("user") ->where("spread_uid", $user_id) ->column("uid"); // 获取子级的 uid 列表 // 根据获得的直接推荐下级2.0,来获取他们和她伞下的子级PV。对比拿一个最大的值,设为大部门,其余的是小部门 // 获取直接下级 $children_group = []; // 用于存储每个直接下级及其子级的分组 // 遍历每个直接下级 foreach ($get_childs as $child) { $child_group = [$child]; // 将直接下级加入分组 $recursive_children = $this->getRecursiveChildren($child); // 获取直接下级的所有子级 $child_group = array_merge($child_group, $recursive_children); // 将子级加入分组 $children_group[] = $child_group; // 将分组加入最终结果 } $get_teams_comm_datas = []; foreach($children_group as $v){ $get_teams_comm_datas[] = $this->getteampv($v);// 如果有多个父级ID,需要获取他们伞下的子级,所有的业绩进行 } if(count($get_teams_comm_datas) > 0){ // 找到最大值作为大部门 $max_value = max($get_teams_comm_datas); $total_sum = array_sum($get_teams_comm_datas); // 计算数组的总和 // 小部门为总和减去最大值 $small_department = $total_sum - $max_value; // 返回大部门和小部门 return [ $max_value, $small_department ]; }else{ return [ 0, 0 ]; } } /** * 解绑微信或支付宝 * @return void */ public function unBindVxOrAli() { $uid = $this->request->uid(); $type = request()->param('type',''); if(!$type) return app('json')->fail('请选择解绑类型'); if(!$uid) return app('json')->fail('请登录'); // 1 = 微信 2 = 支付宝 3 = 全部 if($type == 1){ Db::name('user')->where('uid',$uid)->update(['wechat_user_id' => 0]); }else if ($type == 2){ Db::name('user')->where('uid',$uid)->update(['ali_user_id' => 0]); }else{ Db::name('user')->where('uid',$uid)->update(['wechat_user_id' => 0,'ali_user_id' => 0]); } Db::name('log')->insert(['data' => '用户uid:' . $uid . '进行解绑操作type类型为' . $type]); return app('json')->success('解绑成功'); } }