sendrewardtool.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. class ModelSendrewardtool {
  3. /**
  4. * Notes:异常发放流水入库
  5. * User: wsc
  6. * Time: 2022/3/23 23:38
  7. */
  8. public function sendErrLogIntoDb(){
  9. $key = okeys::sendErrLog();
  10. $len = oo::commonOprRedis('statistics')->lLen($key);
  11. if($len>0){
  12. if($len>10000){
  13. $len = 10000;
  14. }
  15. //{"uid":2537661,"rid":3,"reward":[{"propsId":14,"num":1200000000,"skin":0,"jokerCardExpireTime":0,"cards":null,"chestProps":null,"skinResourceId":0}],"msg":"攻击:100582,基础:800000000,宠物加成:0,vip加成:0,金币大爆炸加成:400000000","crateTime":1648049069}
  16. $tb = "crazygod_api_log.send_err_log";
  17. $list = oo::commonOprRedis('statistics')->lGetRange($key,0,$len-1);
  18. $fields = ["uid","rid","reward","msg","crateTime"];
  19. $sql = funs::db_intsertArrSQL($tb,$fields,$list,1);
  20. $res = oo::commonOprDb('api_log')->query($sql);
  21. oo::commonOprRedis('statistics')->lTrim($key,$len,-1);
  22. }
  23. }
  24. /**
  25. * Notes:通用发不发邮件
  26. * User: wsc
  27. * Time: 2022/3/23 18:26
  28. * @param $uid
  29. * @param $rewards
  30. * @param int $msgId 邮件模板 id
  31. * @param int $typ 0 试用于老版本php奖励结构 1 fox-prizeshow 结构
  32. * @return bool
  33. */
  34. public function sendRewardEmail($uid,$rewards,$msgId =131,$typ=1){
  35. $tb = otable::userSysMail($uid);
  36. $key = okeys::sysMsgGet($uid);
  37. $rewardNew = [];
  38. if($typ==1){
  39. foreach ($rewards as $k=>$v) {
  40. //go fox 结构体
  41. $one = [
  42. "propsId" => $v['propsId'],
  43. "num" => $v['num'],
  44. "jokerCardExpireTime" => 0,
  45. "cards" => null,
  46. "chestProps" => null,
  47. "skinResourceId" => 0,
  48. "skin" => 0,
  49. ];
  50. if ($v["propsId"] == 19) {
  51. $one["skin"] = $v["value"]['skin'];
  52. $one["skinResourceId"] = $one["skin"];
  53. }
  54. array_push($rewardNew, $one);
  55. }
  56. }else{
  57. $rewardNew = $rewards;
  58. }
  59. $data = [
  60. "uid"=>$uid,
  61. "msgid"=>$msgId,
  62. "got"=>0,
  63. "rewards"=>json_encode($rewardNew),
  64. "expire"=>time()+86400*16,
  65. "create_time"=>time(),
  66. ];
  67. $sql = funs::db_insertSQL($tb,$data);
  68. $ret = oo::commonOprDb('common')->query($sql,1);
  69. if($ret){
  70. $eid = oo::commonOprDb('common')->insertID();
  71. $data['id'] = $eid;
  72. $data['rewards'] = json_decode($data['rewards'],true);
  73. $field = "{$msgId}_{$eid}";
  74. oo::commonOprRedis('common')->hSet($key,$field,json_encode($data));
  75. oo::commonOprRedis('common')->expire($key,time()+86400*3);
  76. return true;
  77. }
  78. return false;
  79. }
  80. /**
  81. * Notes:通用获取 fox-prizeshow 结构
  82. * User: wsc
  83. * Time: 2022/2/26 14:17
  84. * @param $uid
  85. * @param $aid
  86. * @param $actType
  87. * @param $lv
  88. * @param $prizes ["id"=>1,"num"=>1,"type"=>1,"rtype"=>1,"skin"=>0]
  89. * @return array
  90. */
  91. public function getPropsShow($uid,$aid,$actType,$prizes){
  92. $propsId = $prizes['type'];
  93. $num = $prizes['num'];
  94. $jokerCardExpireTime = 0;
  95. $cards = null;
  96. switch ($prizes['type']){
  97. case 13:
  98. if($prizes['rtype'] == 1){//固定金卡处理
  99. }
  100. break;
  101. case 14://金币处理
  102. if ($prizes['rtype'] == 2) {
  103. $level = oo::commonOprModel('member')->getUserLevel($uid);
  104. $lv = intval($level['levelId'])>0?intval($level['levelId']):1;
  105. $betCoin =oo::commonOprModel('activitynew')->getCoinRewardByTypeAndLevel($actType,$lv);
  106. $num = intval($betCoin * $prizes['num']);
  107. }
  108. break;
  109. case 18://小丑卡
  110. $jokerCardExpireTime = time()+86400;
  111. break;
  112. case 19://皮肤宝箱
  113. default:
  114. break;
  115. }
  116. $propsShow =[
  117. "propsId"=>$propsId,
  118. "num"=>$num,
  119. "jokerCardExpireTime"=>$jokerCardExpireTime,
  120. "cards"=>$cards,
  121. "chestProps"=>null,
  122. "skinResourceId"=>$prizes["skin"],
  123. "skin"=>$prizes["skin"],
  124. ];
  125. return $propsShow;
  126. }
  127. //============锦标赛结算==================
  128. //锦标赛结算发奖补发--专用邮件
  129. public function sendRankEndRewardEmail($uid,$rewards,$msgId =131){
  130. $tb = otable::userSysMail($uid);
  131. $key = okeys::sysMsgGet($uid);
  132. $rewardNew = [];
  133. foreach ($rewards as $k=>$v){
  134. //go fox 结构体
  135. $one = [
  136. "propsId"=>$v['propsId'],
  137. "num"=>$v['num'],
  138. "jokerCardExpireTime"=>0,
  139. "cards"=>null,
  140. "chestProps"=>null,
  141. "skinResourceId"=>0,
  142. "skin"=>0,
  143. ];
  144. if($v["propsId"]==19){
  145. $one["skin"] = $v["value"]['skin'];
  146. $one["skinResourceId"] = $one["skin"];
  147. }
  148. array_push($rewardNew,$one);
  149. }
  150. $data = [
  151. "uid"=>$uid,
  152. "msgid"=>$msgId,
  153. "got"=>0,
  154. "rewards"=>json_encode($rewardNew),
  155. "expire"=>time()+86400*3,
  156. "create_time"=>time(),
  157. ];
  158. $sql = funs::db_insertSQL($tb,$data);
  159. $ret = oo::commonOprDb('common')->query($sql,1);
  160. if($ret){
  161. $eid = oo::commonOprDb('common')->insertID();
  162. $data['id'] = $eid;
  163. $data['rewards'] = json_decode($data['rewards'],true);
  164. $field = "{$msgId}_{$eid}";
  165. oo::commonOprRedis('common')->hSet($key,$field,json_encode($data));
  166. oo::commonOprRedis('common')->expire($key,time()+86400*16);
  167. }else{
  168. echo "err:{$uid},ret:{$ret}\r\n";
  169. }
  170. }
  171. public function checkRankReward($uid,$aid){
  172. $actInfo = oo::commonOprModel('activitynew')->getActivity($aid);
  173. $type =$actInfo['type'];
  174. $msgId = 131;
  175. $roomId = oo::commonOprModel('activitynew')->getUserRankRoomId($uid,$aid);
  176. $key = okeys::activityUserRankList($aid,$roomId);
  177. $ranking = intval(oo::commonOprRedis('activity')->zRevRank($key,$uid))+1;//排名
  178. $num = intval(oo::commonOprRedis('activity')->zScore($key,$uid));//分数
  179. if(!$roomId||$num<5){
  180. echo "uid:{$uid},num:{$num}\r\n";
  181. return false;
  182. }
  183. $cache = oo::commonOprRedis('common')->get(okeys::activityUserRankEndReward($uid,$type));
  184. if($cache){
  185. echo "uid:{$uid},cache:{$cache}\r\n";
  186. return false;
  187. }
  188. $reward = oo::commonOprModel('activitynew')->getRankRewardByLimit($uid,$aid,$ranking);//获取当前排行奖励
  189. // var_dump($reward);
  190. if(!empty($reward)){
  191. // sendRewardEmail2(3060095,$reward,$msgId);
  192. $this->sendRankEndRewardEmail($uid,$reward,$msgId);
  193. echo "sendSuccess:{$uid},type:{$type}\r\n";
  194. return false;
  195. }
  196. echo "rewardsErr:{$uid}\r\n";
  197. return $reward;
  198. }
  199. //===========金币老虎机任务=================
  200. public function getStageRewardsCfg($uid,$aid,$actType="a",$t=1){
  201. $key1 = "ACT_STAGE_REWARDS_KEY:{$aid}";
  202. $ukey = "USER:STAGE:{$aid}:{$uid}";
  203. $stageCfgStr = oo::commonOprRedis('common')->get($ukey);
  204. $conf = oo::commonOprRedis("common")->hGet($key1,$stageCfgStr);
  205. $arr =json_decode($conf,true);
  206. return array_column($arr,"prize","id");
  207. }
  208. /**
  209. * Notes:补发金币老虎机任务奖励
  210. * User: wsc
  211. * Time: 2022/3/23 18:30
  212. * @param $uid
  213. * @param $aid
  214. * @param $stage
  215. */
  216. public function checkTreasureReward($uid,$aid,$stage){
  217. $actType = "treasure";
  218. $msgId = 133;
  219. $rewardCfgArr = $this->getStageRewardsCfg($uid,$aid);
  220. $rewardOne = $rewardCfgArr[$stage];
  221. if(empty($rewardOne)){
  222. var_dump("sendErr,uid:{$uid},stage:{$stage}");
  223. oo::logs()->commlog("uid:{$uid},stage:{$stage}","sendErr.log");
  224. return ;
  225. }
  226. $rewards = [];
  227. foreach ($rewardOne as $row){
  228. if($stage==10&&$row['type']==18||$row['type']==14){
  229. continue;
  230. }
  231. $rewards[] = $this->getPropsShow($uid,$aid,$actType,$row);
  232. }
  233. // var_dump($rewards);
  234. $ret = $this->sendRewardEmail($uid,$rewards,$msgId);
  235. if(!$ret){
  236. var_dump("sendmsgErr:{$ret}");
  237. }
  238. }
  239. }