diff --git a/digital_doctor/application/api/controller/Users.php b/digital_doctor/application/api/controller/Users.php index 4ebf96f..6978dc4 100644 --- a/digital_doctor/application/api/controller/Users.php +++ b/digital_doctor/application/api/controller/Users.php @@ -110,29 +110,6 @@ class Users extends BaseHttpApi } } - /** - * desc:计算排名 - * author:wh - */ - private function countRank($openid){ - if(cache('user_rank_'.$openid)){ - return cache('user_rank_'.$openid); - } - $lists = Db::table(TabConf::$fa_users) - ->order('now_level desc') - ->field('openid,now_level') - ->select(); - - if($lists){ - foreach ($lists as $k=>$v){ - if($v['openid'] == $openid){ - cache('user_rank_'.$openid,$k+1,3600); - return $k+1; - } - } - } - return 0;//没有排名 - } /** * desc:授权,登录 * @@ -200,709 +177,4 @@ class Users extends BaseHttpApi } } - /** - * desc:修改用户昵称、头像 - * - * /api/users/updateuser - * - * 参数: - * openid 必传 - * nickname,headimage - */ - function updateuser(){ - return Mmodel::catchJson(function (){ - - $nickname = input('nickname',''); - $headimage = input('headimage',''); - - $data = []; - if($nickname){ - $data['nickname'] = $nickname; - } - if($headimage){ - $data['headimage'] = $headimage; - } - $openid = input('openid'); - if(empty($openid)){ - return Tools::set_fail('OPENID MUST'); - } - if(!empty($data)){ - Db::table(TabConf::$fa_users) - ->where('openid',$openid) - ->data($data) - ->update(); - } - - return Tools::set_ok(); - }); - } - - /** - * desc:更新最新关卡 - * api/users/updatenowlevel - * - * 参数: - * now_level 最新关卡 - * author:wh - */ - function updateNowLevel(){ - return Mmodel::catchJson(function (){ - $now_level = input('now_level'); - if(empty($now_level)){ - return Tools::set_fail('now_level 必须'); - } - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->update([ - 'now_level'=>$now_level, - ]); - return Tools::set_ok(); - }); - } - - /** - * desc:查询好友列表-计算离线奖励 - * /api/users/getFriendsOfflinePrizeList - * - * 离线奖励:从用户下线时刻开始,每3个小时奖励一瓶随机等级的肥料,只取整数,不四舍五入。离线时长除以3取整数。 - * 比如:离线 0-2.9 个小时 不奖励 - 离线 3-5.9 个小时 奖励 1瓶 - 离线 6-8.9 个小时 奖励 2瓶 - * - gameprop_id 道具奖品 - prize_all_num 总奖励数量 - self_got_num 自己保底所得数量(固定) - can_lose_num 可被偷取的数量(固定) - now_can_lose_num 已偷取(偷取后数值增加,数值大于可被偷取的总数量时,拒绝偷取) - * author:wh - */ - function getFriendsOfflinePrizeList(){ - return Mmodel::catchJson(function (){ - //查询我的离线好友 - $friends = Db::table(TabConf::$fa_gamefriend) - ->where('openid',api_user_openid()) - ->select(); - if(empty($friends)){ - return Tools::set_res(220,'没有好友'); - } - //可偷取的奖励部分每次允许偷取比例配置 - $lose_rate = SundryConfig::val('offline_prize_can_lose_per_times_lose_rate'); - - - foreach ($friends as &$list){ - $friend_openid = $list['friend_openid']; - $sql = " - select * from fa_user_offline_prize a left join - fa_user_offline_prize_got_record b - on a.id = b.user_offline_prizeid - where a.openid='{$friend_openid}' and b.user_offline_prizeid is null; - "; - //查询好友的离线奖励 - $friend_prize = Db::query($sql); - //统计我的已偷取数量 - //$my_already_lose_num = Db::table(TabConf::$fa_user_offline_prize_got_record) - // ->where('openid',api_user_openid()) - // ->whereIn('user_offline_prizeid',array_column($friend_prize,'id')) - // ->sum('num'); - //统计我的已偷取数量=$can_lose_num*$lose_rate,如果相等就设置偷取数量为0 - $can_lose_num_arr = array_column($friend_prize,'can_lose_num'); - //总的可偷取数量 - $can_lose_num = array_sum($can_lose_num_arr); - $already_lose_num_arr = array_column($friend_prize,'already_lose_num'); - //已偷取的总数量 - $already_lose_num = array_sum($already_lose_num_arr); - - $friend_prize['now_can_lose_num'] = floor(($can_lose_num-$already_lose_num)*$lose_rate); - $friend_prize['lose_rate'] = $lose_rate; - - $tmp_arr = []; - //查询好友的奖励 - $tmp_arr['friend_prize'] = $friend_prize; - $list = array_merge($list, $tmp_arr); - - - //$can_lose_num_arr = array_column($friend_prize,'can_lose_num'); - //$can_lose_num = array_sum($can_lose_num_arr);//总的可偷取数量 - //if($my_already_lose_num == $can_lose_num*$lose_rate){ - // //默认为0 - // $friend_prize['now_can_lose_num'] = 0; - // $friend_prize['lose_rate'] = 0; - // $tmp_arr = []; - // $tmp_arr['friend_prize'] = $friend_prize; - // $list = array_merge($list, $tmp_arr); - //}else{ - // //过滤已偷过的记录 - // //$already_lose_record = Db::table(TabConf::$fa_user_offline_prize_got_record) - // // ->where('openid',api_user_openid()) - // // ->whereIn('user_offline_prizeid',array_column($friend_prize,'id')) - // // ->select(); - // $friend_prize = Db::table(TabConf::$fa_user_offline_prize) - // ->where('openid',$list['friend_openid']) - // ->whereNotIn('id',array_column($already_lose_record,'id'))//剔除已偷过的记录 - // ->select(); - // - // $can_lose_num_arr = array_column($friend_prize,'can_lose_num'); - // //总的可偷取数量 - // $can_lose_num = array_sum($can_lose_num_arr); - // $already_lose_num_arr = array_column($friend_prize,'already_lose_num'); - // //已偷取的总数量 - // $already_lose_num = array_sum($already_lose_num_arr); - // - // $friend_prize['now_can_lose_num'] = floor(($can_lose_num-$already_lose_num)*$lose_rate); - // $friend_prize['lose_rate'] = $lose_rate; - // - // $tmp_arr = []; - // //查询好友的奖励 - // $tmp_arr['friend_prize'] = $friend_prize; - // $list = array_merge($list, $tmp_arr); - //} - } - return Tools::set_ok('ok',$friends); - }); - } - - /** - * desc:随机奖励 - */ - private function random_prop($key=''){ - $count = Db::table(TabConf::$fa_gameprop) - ->count('id'); - $id = mt_rand(1,$count); - - $p = Db::table(TabConf::$fa_gameprop)->where('id',$id)->find(); - if(empty($p)){ - $id = mt_rand(1,$count); - $p = Db::table(TabConf::$fa_gameprop)->where('id',$id)->find(); - } - if(empty($p)){ - throw new Exception('道具获取失败'); - } - return $key?$p[$key]:$p; - } - - /** - * desc:(偷取)领取好友离线奖励(领取多少根据后台配置领取比例而定),偷取后发邮件给用户 - * - * api/users/offlineprizegot - * 参数: - * friend_openid 好友 - * - * author:wh - */ - function offlinePrizeGot(){ - return Mmodel::catchTransJson(function (){ - $friend_openid = input('friend_openid'); - if(empty($friend_openid)){ - return Tools::set_fail('friend_openid 必须'); - } - //可偷取的奖励部分每次允许偷取比例配置 - $lose_rate = SundryConfig::val('offline_prize_can_lose_per_times_lose_rate'); - - $sql = " - select a.* from fa_user_offline_prize a left join - fa_user_offline_prize_got_record b - on a.id = b.user_offline_prizeid - where a.openid='{$friend_openid}' and b.user_offline_prizeid is null; - "; - //查询好友的离线奖励 - $prize_lists = Db::query($sql); - - $got_prize_arr = []; - foreach ($prize_lists as $prize){ - $gameprop_id = $prize['gameprop_id']; - //计算本次可领取奖励 - $num = floor($prize['can_lose_num'] * $lose_rate); - if($num<=0){ - //偷取数量为0 - $got_prize_arr[]=[ - 'num'=>0, - 'gameprop_id'=>0 - ]; - continue; - } - //查询用户已有道具 - $usergameprop = Db::table(TabConf::$fa_usergameprop) - ->where('openid',api_user_openid()) - ->where('gameprop_id',$gameprop_id) - ->find(); - //偷取时更新奖励 - if($usergameprop){ - //更新用户道具数量 - Db::table(TabConf::$fa_usergameprop) - ->where('openid',api_user_openid()) - ->where('gameprop_id',$gameprop_id) - ->setInc('num',$num); - }else{ - //查询道具 - $gameprop = Db::table(TabConf::$fa_gameprop) - ->where('id',$prize['gameprop_id']) - ->find(); - //新增用户道具 - Db::table(TabConf::$fa_usergameprop) - ->data([ - 'gameproptype_id'=>$gameprop['gameproptype_id'], - 'name'=>$gameprop['name'], - 'image'=>$gameprop['image'], - 'openid'=>api_user_openid(), - 'num'=>$num, - 'gameprop_id'=>$gameprop_id - ]) - ->insert(); - } - - //偷取时,增加已偷取数量 - Db::table(TabConf::$fa_user_offline_prize) - ->where('id',$prize['id']) - ->setInc('already_lose_num',$num); - - //写入(偷取)领取记录 - Db::table(TabConf::$fa_user_offline_prize_got_record) - ->data([ - 'openid'=>api_user_openid(), - 'friend_openid'=>$friend_openid, - 'num'=>$num, - 'gameprop_id'=>$gameprop_id, - 'user_offline_prizeid'=>$prize['id'],//记录id - ]) - ->insert(); - $got_prize_arr[]=[ - 'num'=>$num, - 'gameprop_id'=>$gameprop_id - ]; - - } - //添加一封邮件(不是真实的邮件,可以理解为消息) - Db::table(TabConf::$fa_user_email) - ->data([ - 'addresser_openid'=>api_user_openid(), - 'addressee_openid'=>$friend_openid,//收件人 - 'title'=>'好友偷取奖励', - 'content'=>'您的奖励已被好友偷取啦!', - ]) - ->insert(); - return Tools::set_ok('ok',$got_prize_arr); - }); - } - - /** - * 查询自己的离线奖励 - * - * 离线奖励:从用户下线时刻开始,每3个小时奖励一瓶随机等级的肥料,只取整数,不四舍五入。离线时长除以3取整数。 - * 比如:离线 0-2.9 个小时 不奖励 - 离线 3-5.9 个小时 奖励 1瓶 - 离线 6-8.9 个小时 奖励 2瓶 - * - * api/users/getselfofflineprize - */ - function getSelfOfflinePrize(){ - return Mmodel::catchJson(function (){ - $lists = Db::table(TabConf::$fa_user_offline_prize) - ->where('openid',api_user_openid()) - ->order('id asc')//客户端要取最早的那个时间 - ->select(); - if(empty($lists)){ - return Tools::set_res(220,'没有离线奖励'); - } - //可偷取的奖励部分每次允许偷取比例配置 - $lose_rate = SundryConfig::val('offline_prize_can_lose_per_times_lose_rate'); - $lists_data = []; - foreach ($lists as $list){ - if($list['self_got_num']==0){ - continue;//领取过的数据,不返回 - } - $record = Db::table(TabConf::$fa_user_offline_prize_got_record) - ->where('openid',api_user_openid())//当前登陆人 - ->where('user_offline_prizeid',$list['id']) - ->find(); - if(empty($record)){//为空说明未偷取 - $lists_data[] = array_merge($list, ['now_can_lose_num'=>floor($list['can_lose_num']*$lose_rate),'lose_rate'=>$lose_rate]); - }else{ - $lists_data[] = array_merge($list, ['now_can_lose_num'=>0]); - } - } - return Tools::set_ok('ok',$lists_data); - }); - } - /** - * desc:领取自己的离线奖励(一次性领取所有离线奖励,不能分批次领取,没有部分领取一说) - * api/users/receiveSelfOfflinePrize - * 参数: - * is_double 是否双倍奖励 1 一倍,2 二倍 - * author:wh - */ - function receiveSelfOfflinePrize(){ - return Mmodel::catchTransJson(function (){ - //查询我的离线奖励 - $prize_lists = Db::table(TabConf::$fa_user_offline_prize) - ->where('openid',api_user_openid()) - ->lock(true)//锁住 - ->select(); - - $got_prize_arr = []; - //是否双倍奖励 1 一倍,2 二倍 - $is_double = input('is_double',1); - foreach ($prize_lists as $item){ - //查询领取记录 - $offline_prize_got_record = Db::table(TabConf::$fa_user_offline_prize_got_record) - ->where('openid',api_user_openid()) - ->where('user_offline_prizeid',$item['id']) - ->find(); - if($offline_prize_got_record){ - continue;//领取过的数据,不能再次领取 - } - //道具id - $gameprop_id = $item['gameprop_id']; - //自己保底所得数量+可被偷取的数量-已被偷取的数量 - $prize_all_num = $item['self_got_num'] + $item['can_lose_num'] - $item['already_lose_num']; - //乘以倍数 - $num = $prize_all_num * $is_double; - - //查询道具 - $gameprop = Db::table(TabConf::$fa_gameprop) - ->where('id',$gameprop_id) - ->find(); - if(empty($gameprop)){ - //道具不应该不存在 - continue; - //return Tools::set_fail('道具不存在'); - } - //写入领取记录 - Db::table(TabConf::$fa_user_offline_prize_got_record) - ->data([ - 'openid'=>api_user_openid(), - 'num'=>$num, - 'gameprop_id'=>$gameprop_id, - 'is_double'=>$is_double, - 'user_offline_prizeid'=>$item['id'], - ]) - ->insert(); - //查询用户已有道具 - $usergameprop = Db::table(TabConf::$fa_usergameprop) - ->where('openid',api_user_openid()) - ->where('gameprop_id',$gameprop_id) - ->find(); - if($usergameprop){ - //更新道具数量 - Db::table(TabConf::$fa_usergameprop) - ->where('openid',api_user_openid()) - ->where('gameprop_id',$gameprop_id) - ->setInc('num',$num); - }else{ - //新增道具 - Db::table(TabConf::$fa_usergameprop) - ->data([ - 'gameproptype_id'=>$gameprop['gameproptype_id'], - 'name'=>$gameprop['name'], - 'image'=>$gameprop['image'], - 'openid'=>api_user_openid(), - 'num'=>$num, - 'gameprop_id'=>$gameprop_id - ]) - ->insert(); - } - - Db::table(TabConf::$fa_user_offline_prize) - ->where('id',$item['id']) - ->data([ - 'self_got_num'=>0, - 'can_lose_num'=>0, - ]) - ->update(); - $got_prize_arr[]=[ - 'num'=>$num, - 'gameprop_id'=>$gameprop_id - ]; - } - //领取之后删除离线奖励表 - UserOfflinePrizeLogic::deletedPrize(api_user_openid()); - return Tools::set_ok('领取成功',$got_prize_arr); - }); - } - - /** - * desc:查询我的好友列表 - * - * api/users/getMyFriends - * - * author:wh - */ - function getMyFriends(){ - return Mmodel::catchJson(function (){ - $lists = Db::table(TabConf::$fa_gamefriend) - ->where('openid',api_user_openid()) - ->select(); - return Tools::set_ok('ok',$lists); - }); - } - /** - * desc:添加好友 - * - * api/users/addFriend - * 参数: - * friend_openid 好友openid - * 注意:如果好友在线,会向好友发送申请消息 - * author:wh - */ - function addFriend(){ - return Mmodel::catchJson(function (){ - $friend_openid = input('friend_openid'); - if(empty($friend_openid)){ - return Tools::set_fail('请输入好友openid'); - } - $user_friend = Db::table(TabConf::$fa_users) - ->where('openid',$friend_openid) - ->find(); - if(empty($user_friend)){ - return Tools::set_fail('好友不存在'); - } - $uf = Db::table(TabConf::$fa_gamefriend) - ->where('openid',api_user_openid()) - ->where('friend_openid',$friend_openid) - ->find(); - if($uf){ - return Tools::set_fail('不能添加自己和自己的好友'); - } - if($friend_openid == api_user_openid()){ - return Tools::set_fail('不能添加自己'); - } - $data = [ - 'openid'=>api_user_openid(), - 'headimage'=>api_user_info('headimage'), - 'nickname'=>api_user_info('nickname'), - 'friend_openid'=>$friend_openid, - 'friend_nickname'=>$user_friend['nickname'] - ]; - //如果已经申请则不再申请 - $apply_record = Db::table(TabConf::$fa_friend_apply_record) - ->where('openid',api_user_openid()) - ->where('friend_openid',$friend_openid) - ->find(); - if($apply_record){ - return Tools::set_fail('你已申请过该好友'); - } - - Db::table(TabConf::$fa_friend_apply_record) - ->data($data) - ->insert(); - - //如果好友在线,则发送添加好友申请 - if($user_friend['clientid']){ - $json = BaseWssApi::json_wss('new-friend-apply', '有新的好友申请'); - Gateway::sendToClient($user_friend['clientid'], json_encode($json, JSON_UNESCAPED_UNICODE)); - } - - return Tools::set_ok('申请已发送'); - }); - } - - /** - * desc:查询我的好友申请列表 - * - * api/users/getFriendApplyList - * author:wh - */ - function getFriendApplyList(){ - return Mmodel::catchJson(function (){ - $friend_apply_record = Db::table(TabConf::$fa_friend_apply_record) - ->where('friend_openid',api_user_openid()) - ->select(); - return Tools::set_ok('ok',$friend_apply_record); - }); - } - - /** - * 同意好友申请 - * api/users/agreeFriendApply - * 参数: - * friend_openid 好友openid - */ - function agreeFriendApply(){ - return Mmodel::catchTransJson(function (){ - $friend_openid = input('friend_openid'); - if(empty($friend_openid)){ - return Tools::set_fail('请输入好友openid'); - } - $user_friend = Db::table(TabConf::$fa_users) - ->where('openid',$friend_openid) - ->find(); - if(empty($user_friend)){ - return Tools::set_fail('好友不存在.'); - } - //好友已存在 - $uf = Db::table(TabConf::$fa_gamefriend) - ->where('openid',api_user_openid()) - ->where('friend_openid',$friend_openid) - ->find(); - if($uf){ - return Tools::set_fail('好友已存在'); - } - //添加陌生人为好友 - Db::table(TabConf::$fa_gamefriend) - ->data([ - 'openid'=>api_user_openid(), - 'nickname'=>api_user_info('nickname'), - 'friend_openid'=>$friend_openid, - 'friend_nickname'=>$user_friend['nickname'], - 'friend_image'=>$user_friend['headimage'], - ]) - ->insert(); - //把自己添加为陌生人的好友 - Db::table(TabConf::$fa_gamefriend) - ->data([ - 'openid'=>$friend_openid, - 'nickname'=>$user_friend['nickname'], - 'friend_openid'=>api_user_openid(), - 'friend_nickname'=>api_user_info('nickname'), - 'friend_image'=>api_user_info('headimage'), - ]) - ->insert(); - - //删除好友申请记录 - Db::table(TabConf::$fa_friend_apply_record) - ->where('openid',$friend_openid) - //->where('friend_openid',$friend_openid) - ->delete(); - return Tools::set_ok('ok'); - }); - } - - /** - * 拒绝好友申请 - * - * api/users/refuseFriendApply - * 参数: - * friend_openid 好友openid - */ - function refuseFriendApply(){ - return Mmodel::catchTransJson(function (){ - $friend_openid = input('friend_openid'); - if(empty($friend_openid)){ - return Tools::set_fail('请输入好友openid'); - } - $users = Db::table(TabConf::$fa_users) - ->where('openid',$friend_openid) - ->find(); - if(empty($users)){ - return Tools::set_fail('用户不存在'); - } - //删除好友申请记录 - Db::table(TabConf::$fa_friend_apply_record) - ->where('openid',$friend_openid) - //->where('friend_openid',$friend_openid) - ->delete(); - return Tools::set_ok('ok'); - }); - } - - /** - * desc:增加金币,直接存用户信息里 - * author:wh - * 参数: - * coins 金币数量 - */ - function addCoins(){ - return Mmodel::catchTransJson(function (){ - $coins = input('coins'); - if(empty($coins)){ - return Tools::set_fail('请输入金币'); - } - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->setInc('coins',$coins); - - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->setInc('all_coins',$coins);//累计金币 - - return Tools::set_ok('ok'); - }); - } - /** - * desc:消耗金币 - * author:wh - * 参数: - * coins 金币数量 - */ - function cutCoins(){ - return Mmodel::catchJson(function (){ - $coins = input('coins'); - if(empty($coins)){ - return Tools::set_fail('请输入金币'); - } - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->setDec('coins',$coins); - return Tools::set_ok('ok'); - }); - } - - - - /** - * 消耗金币增加体力(消耗金币增加体力次数减一) - * 参数:无 - * api/users/cutCoinsAddStrength - */ - function cutCoinsAddStrength(){ - return Mmodel::catchTransJson(function (){ - //消耗金币增加体力的金币数值配置 - $cut_n_coins_add_power = SundryConfig::val('cut_n_coins_add_power'); - $user = Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->lock(true) - ->find(); - if($user['coin_power_times'] <= 0){ - return Tools::set_fail('金币增加体力次数不足'); - } - if($user['coins'] < $cut_n_coins_add_power){ - return Tools::set_fail('金币不足'); - } - //消耗金币 - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->setDec('coins',$cut_n_coins_add_power); - //增加体力 - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->setInc('power',1); - - //减少金币增加体力次数 - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->where('coin_power_times','>',0) - ->setDec('coin_power_times',1); - - return Tools::set_ok('ok'); - }); - } - - /** - * 看广告增加体力 (看广告增加体力次数减一) - * 参数:无 - * api/users/lookAdAddPower - */ - function lookAdAddPower(){ - return Mmodel::catchTransJson(function (){ - $user = Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->lock(true) - ->find(); - if($user['ad_power_times'] <= 0){ - return Tools::set_fail('看广告增加体力次数不足'); - } - //增加体力 - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->setInc('power',1); - - // - Db::table(TabConf::$fa_users) - ->where('openid',api_user_openid()) - ->where('ad_power_times','>',0) - ->setDec('ad_power_times',1); - - return Tools::set_ok('ok'); - }); - } - } \ No newline at end of file