Plantask.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace app\index\controller;
  3. use think\Controller;
  4. use app\common\library\Tlssigapiv2;
  5. use think\Db;
  6. use app\common\library\Easemob;
  7. class Plantask extends Controller
  8. {
  9. //关于本文件里的计划任务
  10. //只有 public 方法,auto_开头的才是计划任务,其他private 方法都是工具方法
  11. ////////////////////////////////////////下面都是计划任务方法///////////////////////////////////////////////////////////////
  12. //送礼物(api/party/giveGiftToYou)拆分出来的异步用户升级方法,
  13. public function auto_user_level_up(){
  14. Db::startTrans();
  15. $tasklist = Db::name('gift_user_party')->where('task_status',0)->limit(20)->lock(true)->select();
  16. if(empty($tasklist)){
  17. Db::rollback();
  18. echo 'empty';
  19. exit;
  20. }
  21. try {
  22. $money_to_jewel = config('site.money_to_jewel') ?: 10; //余额兑换金币
  23. // $getempirical_conf = config("site.getempirical");
  24. foreach($tasklist as $key => $giftuserparty){
  25. echo $giftuserparty['id'].'<br>';
  26. $giftValue = $giftuserparty['value'];
  27. $hotValue = $giftValue;
  28. //用户信息
  29. $authuser_info = Db::name('user')->field('nickname')->where('id',$giftuserparty['user_id'])->find();
  30. $touserInfo = Db::name('user')->field('nickname')->where('id',$giftuserparty['user_to_id'])->find();
  31. $party_id = $giftuserparty['party_id'];
  32. //添加获赠用户余额
  33. $user_id = $giftuserparty['user_to_id'];
  34. if($giftuserparty['getvalue'] > 0){
  35. $getMoney = bcdiv($giftuserparty['getvalue'],$money_to_jewel,2);
  36. if($getMoney > 0){
  37. $rs_wallet = model('wallet')->lockChangeAccountRemain($user_id,$getMoney,'+',0,"{$authuser_info['nickname']}送你{$giftuserparty['gift_name']}x{$giftuserparty['number']}",101,'money');
  38. if($rs_wallet['status'] == false){
  39. Db::rollback();
  40. $this->error($rs_wallet['msg']);
  41. }
  42. }
  43. }
  44. $partyInfo = \app\common\model\Party::field("id,room_type,party_name,party_hot,user_id,platRate,guilderRate,easemob_room_id")->where(["id"=>$giftuserparty['party_id']])->find();
  45. //增加房主抽成
  46. if ($partyInfo && $giftuserparty['guildervalue'] > 0) {
  47. $guilderMoney = bcdiv($giftuserparty['guildervalue'],$money_to_jewel,2);
  48. if($guilderMoney > 0){
  49. $rs_wallet = model('wallet')->lockChangeAccountRemain($partyInfo->user_id,$guilderMoney,'+',0,"{$authuser_info['nickname']}送礼物{$giftuserparty['gift_name']}x{$giftuserparty['number']}给{$touserInfo['nickname']},房间礼物抽成",102,'money');
  50. if($rs_wallet['status'] == false){
  51. Db::rollback();
  52. $this->error($rs_wallet['msg']);
  53. }
  54. }
  55. }
  56. //更新麦位魅力值
  57. $this->updateSeatCharm($partyInfo['easemob_room_id'],$giftuserparty['seat_num'],$hotValue,$partyInfo);
  58. // 如果是主播,则添加魅力值记录做榜单统计,这个表和送礼物日志表重复了,无意义
  59. /*if($partyInfo) {
  60. $data = [];
  61. $data["user_id"] = $giftuserparty['user_to_id'];
  62. $data["party_id"] = $party_id;
  63. $data["charm"] = $hotValue;
  64. $data["createtime"] = time();
  65. \app\common\model\UserCharmRank::insert($data);
  66. }*/
  67. //用户经验升级
  68. //$getempirical = $getempirical_conf * $hotValue;
  69. // 获取用户贵族信息
  70. /*$noble = \app\common\model\User::getUserNoble($giftuserparty['user_id']);
  71. if(isset($noble["noble_on"]) && $noble["noble_on"] == 1) {
  72. $getempirical = $getempirical + $getempirical * ($noble["explain"]/100);
  73. }*/
  74. // 增加用户经验值
  75. //$res = \app\common\model\User::addEmpirical($giftuserparty['user_id'],$getempirical);
  76. /*if ($res){
  77. $this->auth->level = $res->level;
  78. }*/
  79. //增加被送礼物用户的魅力等级
  80. $res_charm = \app\common\model\User::add_charm_level($giftuserparty['user_to_id'],$giftValue);
  81. // +exp
  82. // \app\common\model\TaskLog::tofinish($giftuserparty['user_id'],"OBHqCX4g",$giftuserparty['number']);
  83. // +message
  84. \app\common\model\Message::addMessage($giftuserparty['user_to_id'],"礼物通知","收到 ".$authuser_info['nickname']." 赠送的".$giftuserparty['gift_name']." x".$giftuserparty['number']." 价值 ".$giftValue ." 金币");
  85. //增加送礼用户的财富等级
  86. $res_wealth = \app\common\model\User::add_wealth_level($giftuserparty['user_id'],$giftValue);
  87. $rs_up = Db::name('gift_user_party')->where('id',$giftuserparty['id'])->update(['task_status'=>1]);
  88. if($rs_up === false){
  89. Db::rollback();
  90. echo '更新错误'.$giftuserparty['id'];
  91. exit;
  92. }
  93. }
  94. Db::commit();
  95. } catch (ValidateException $e) {
  96. Db::rollback();
  97. $this->error($e->getMessage());
  98. } catch (PDOException $e) {
  99. Db::rollback();
  100. $this->error($e->getMessage());
  101. } catch (Exception $e) {
  102. Db::rollback();
  103. $this->error($e->getMessage());
  104. }
  105. }
  106. /////////////////////////////////////////下面都是工具方法////////////////////////////////////////////////
  107. /**
  108. * 用户赠送礼物后房间内麦位魅力值增加,更新到麦位自定义信息
  109. * $seatnum 座位数字 1,不是键名 seat1
  110. */
  111. private function updateSeatCharm($easemob_room_id,$seatnum,$giftValue,$party_info) {
  112. //获取已有信息
  113. $key = 'seat'.$seatnum;
  114. $easemob = new Easemob();
  115. $seatdata = $easemob->room_getRoomCustomAttribute($easemob_room_id,[$key]);
  116. if(empty($seatdata)){
  117. //默认为空
  118. $seatdata = [
  119. 'charm' => 0, //红心,魅力值
  120. 'isMaster' => false, // 是否是房主
  121. 'headUrl' => '', // 头像
  122. 'userNo' => '', // 座位上用户no
  123. 'rtcUid' => '', // 座位上用户id,与rtc的userId一致
  124. 'name' => '', // 座位上用户昵称
  125. 'seatIndex' => $seatnum, // 座位编号
  126. 'chorusSongCode' => '', // 是否合唱
  127. 'isAudioMuted' => 1, // 是否静音
  128. 'isVideoMuted' => 0, // 是否开启视频
  129. 'checked' => false, // 用于送礼物选择用户
  130. 'isUsed' => true, // 用于送礼物选择用户
  131. 'gender' => 1, //性别
  132. ];
  133. }else{
  134. $seatdata = json_decode($seatdata[$key],true);
  135. }
  136. //魅力值自增
  137. $seatdata['charm'] += $giftValue;
  138. //重新设置
  139. $matedata = [
  140. $key => json_encode($seatdata),
  141. ];
  142. $easemob->room_setRoomCustomAttributeForced($easemob_room_id,$party_info['user_id'],$matedata);
  143. return true;
  144. }
  145. }