Plantask.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace app\index\controller;
  3. use think\Controller;
  4. use Redis;
  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. //最新方法
  14. public function auto_user_level_up(){
  15. Db::startTrans();
  16. $tasklist = Db::name('gift_user_party')->where('task_status',0)->order('id asc')->field('party_id')->select();
  17. if(empty($tasklist)){
  18. Db::rollback();
  19. echo 'empty';
  20. exit;
  21. }
  22. try {
  23. //redis
  24. $redis = new Redis();
  25. $redisconfig = config("redis");
  26. $redis->connect($redisconfig["host"], $redisconfig["port"]);
  27. if ($redisconfig['redis_pwd']) {
  28. $redis->auth($redisconfig['redis_pwd']);
  29. }
  30. if($redisconfig['redis_selectdb'] > 0){
  31. $redis->select($redisconfig['redis_selectdb']);
  32. }
  33. //开始
  34. $party_ids = array_column($tasklist,'party_id');
  35. $party_ids = array_flip($party_ids);
  36. $party_ids = array_flip($party_ids);
  37. //dump($party_ids);
  38. $partyInfo_arr = Db::name('party')->where('id','IN',$party_ids)->column('id,user_id,easemob_room_id');
  39. //dump($partyInfo_arr);exit;
  40. foreach($partyInfo_arr as $party_id => $partyInfo){
  41. //更新麦位魅力值
  42. $this->updateSeatCharm($partyInfo['easemob_room_id'],$partyInfo,$redis);
  43. }
  44. //结束
  45. $rs_up = Db::name('gift_user_party')->where('party_id','IN',$party_ids)->update(['task_status'=>1]);
  46. Db::commit();
  47. } catch (ValidateException $e) {
  48. Db::rollback();
  49. $this->error($e->getMessage());
  50. } catch (PDOException $e) {
  51. Db::rollback();
  52. $this->error($e->getMessage());
  53. } catch (Exception $e) {
  54. Db::rollback();
  55. $this->error($e->getMessage());
  56. }
  57. }
  58. /////////////////////////////////////////下面都是工具方法////////////////////////////////////////////////
  59. /**
  60. * 用户赠送礼物后房间内麦位魅力值增加,更新到麦位自定义信息
  61. * $seatnum 座位数字 1,不是键名 seat1
  62. */
  63. private function updateSeatCharm($easemob_room_id,$party_info,$redis) {
  64. //获取已有信息
  65. $easemob = new Easemob();
  66. $seatlist = $easemob->room_getRoomCustomAttribute($easemob_room_id,['seat0','seat1','seat2','seat3','seat4','seat5','seat6','seat7']);
  67. if(empty($seatlist)){
  68. return true;
  69. }
  70. $matedata = [];
  71. // 获取用户魅力值
  72. $users = $redis->zRevRange("hourCharm_".$party_info['id'],0,-1,true);
  73. //轮询麦位
  74. foreach($seatlist as $seatnum => $seatdata){
  75. $seatdata = json_decode($seatdata,true);
  76. if($users) {
  77. foreach($users as $user_id => $charm){
  78. if(isset($seatdata['userNo']) && $seatdata['userNo'] == $user_id){
  79. $seatdata['charm'] = changeW($charm);
  80. }
  81. }
  82. }
  83. $seatdata = json_encode($seatdata);
  84. $matedata[$seatnum] = $seatdata;
  85. }
  86. //重新设置麦位小红心
  87. //获取房间用户周前三名 getPartyUserTop里面摘出来的一部分
  88. //[环信]更新财富榜前3。
  89. $avatarArr = $redis->hGet("user_jewel_top3",$party_info['id']);
  90. $matedata['wealth_top3_userlist'] = $avatarArr;
  91. $easemob->room_setRoomCustomAttributeForced($easemob_room_id,$party_info['user_id'],$matedata);
  92. return true;
  93. }
  94. }