| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- 'use strict';
- // var https = require('https');
- // var md5 = require('md5');
- var quick = require('quick-pomelo');
- var P = quick.Promise;
- var _ = require('lodash');
- var uuid = require('node-uuid');
- var C = require('../../../../share/constant');
- var configCommon = require('../../../../share/configCommon');//////TL++配置相关的公共方法
- // 构造方法
- var hallLogic = function (app) {
- // this.app = table.game.app;
- console.warn("hallLogic 这里是构造方法111 "+(typeof app));
- this.app = app;
- this.lconfigCommon = new configCommon(this.app);
- };
- // 导出类
- // module.exports = hallLogic;
- module.exports = function (app) {
- // setInterval(() => checkVersion(), 5000);
- // console.warn("活动配置内容 ??? exports() "+typeof require.cache[require.resolve('./hallHandler')]);
- return new hallLogic(app);
- };
- // 原型对象
- var proto = hallLogic.prototype;
- // ts++绑定手机号之后给用户发邮件
- proto.setBindPhone = P.coroutine(function* (msg, session, next,userId) {
- let diamond = 200;
- let form = "bindPhone";
- // console.warn("hallLogic 给用户发邮件 "+session.uid+" diamond "+diamond);
- var mail = yield this.app.models.Mails.findByIdAsync(session.uid, 'mailInfos');
- if (mail) {
- let item = {
- _id: "",
- index: mail.mailInfos.length, // 邮件下标
- tittleT: 6, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
- descT: 6, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
- reward: 1, // 有无奖励 0:无奖励 1:有奖励
- rewardT: 1, // 奖励类型 0:未定义 1:钻石,
- rewardC: diamond, // 奖励数量
- receive: 0, // 是否领取 0:未领取 1:已领取
- read: 0, // 是否已读 0:未读 1:已读
- form:form, //邮件来源
- sendTime: Date.now() // 发送日期
- }
- let newItem = _.clone(mail.mailInfos);
- let newItem2 = [0].concat(newItem);
- newItem2[0] = item;
- if(newItem2.length > 60){
- newItem2 = newItem2.slice(0,60)
- }
- mail.mailInfos = [];
- mail.mailInfos = _.clone(newItem2);
- yield mail.saveAsync();
- }
- else{
- let item = {
- _id: "",
- index: 0, // 邮件下标
- tittleT: 6, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
- descT: 6, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
- reward: 1, // 有无奖励 0:无奖励 1:有奖励
- rewardT: 1, // 奖励类型 0:未定义 1:钻石,
- rewardC: diamond, // 奖励数量
- receive: 0, // 是否领取 0:未领取 1:已领取
- read: 0, // 是否已读 0:未读 1:已读
- form:form, //邮件来源
- sendTime: Date.now() // 发送日期
- }
- let newItem = [];
- newItem[0] = item;
- var newMail = new this.app.models.Mails({
- _id: session.uid, // 用户id(player表的主键)
- userId: userId, // 用户的userId
- mailInfos: newItem // 该活动的达成条件和奖励信息列表
- });
- yield newMail.saveAsync();
- }
- return next(null, { code: C.OK, data: {}});
- });
- ////获得是否已领取比赛奖品(4~6名发钻石)
- proto.getIsTakeBSPrize = P.coroutine(function* (msg, session) {
- if (!session.uid) {
- return { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN };
- }
- if (!msg.aid) {
- return { code: C.FAILD, msg: C.GAME_PARAM_ERROR };
- }
- let uid = session.uid;
- let agentId = msg.aid;
- let aidsub = agentId.substr(0, 9);
- let bsIndex = aidsub.indexOf("promote_");
- if(bsIndex == -1) return { code: C.FAILD, msg: "is not compete aid" };//非比赛链接
- let nowTime = Date.now();
- let jrStart = this.lconfigCommon.getTodaySJC();
- // nowTime = 1684925400000;
- // jrStart = 1681920000000;
- var opts = {
- stime: { $gte: jrStart },
- outTime: {$gt: nowTime}//过期时间大于当前时间
- };
- opts['aid'] = agentId;
- let timelist = yield this.app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime yljList', { sort: { stime: 1 } });
- if(timelist.length == 0){
- this.app.controllers.bisai.setNowBSInfo([],agentId);
- return { code: C.FAILD, msg: "today no compate"};
- }
- let userid = 1;
- var player = yield this.app.models.Player.findByIdAsync(uid, 'userId');
- if (player) {
- if(player.userId) userid = player.userId;
- }
- let userList = [];//今日比赛所有参与的玩家uid
- let scoreList = [];//今日比赛所有参与的玩家的分数
- let ccList = [];//今日比赛所有参与的玩家已经统计分数的场次
- let ckszbsccxx = timelist[0];//此刻所处比赛场的比赛信息
- let iszzpm = false;//是否是最终排名(比赛过程中统计的排名并非本场比赛最终的排名)
- let yljList = [];
- if(ckszbsccxx){
- // console.warn("获得是否已领取比赛奖品 ckszbsccxx "+JSON.stringify(ckszbsccxx));
- let jlbspmgbsj = (ckszbsccxx.etime + 15*60*1000) - nowTime;//距离比赛排名公布时间
- if(jlbspmgbsj < 0) iszzpm = true;
- if(!iszzpm) return { code: C.FAILD, msg: "距离比赛最终排名仅剩 "+jlbspmgbsj+" 秒"};
- if(ckszbsccxx.yljList && ckszbsccxx.yljList.length >= 0){
- yljList = _.cloneDeep(ckszbsccxx.yljList);
- if(yljList.indexOf(userid) != -1){
- return { code: C.OK, data: {bsjlsfylq:true}}
- }
- }
- var opts = {
- stime: { $gte: ckszbsccxx.stime, $lt: ckszbsccxx.etime },
- over: { $gte: 1 }
- };
- opts['agentId'] = agentId;
- var list = yield this.app.models.FHMJTables.findMongoAsync(opts, 'tableNo users', { sort: { stime: 1 } });
- for (let i = 0; i < list.length; ++i) {
- let bjus = list[i].users;//本局users
- for (let j = 0; j < bjus.length; ++j) {
- let wjszxb = userList.indexOf(bjus[j].userId);//玩家所在下标
- if(wjszxb == -1){
- let xwjxb = userList.length;//新玩家下标
- userList[xwjxb] = bjus[j].userId;//今日比赛所有参与的玩家
- scoreList[xwjxb] = bjus[j].score;//今日比赛所有参与的玩家的分数
- ccList[xwjxb] = 1;//今日比赛所有参与的玩家已经统计分数的场次
- }
- else{
- if(ccList[wjszxb] < ckszbsccxx.bigRound){//每个玩家止统计今日的前三场战绩
- scoreList[wjszxb] += bjus[j].score;//今日比赛所有参与的玩家的分数
- ccList[wjszxb] += 1;//今日比赛所有参与的玩家已经统计分数的场次
- }
- }
- }
- }
- }
- let infoList = [];
- for (let i = 0; i < userList.length; ++i) {
- infoList[i] = {
- score:scoreList[i],
- uid:userList[i]
- }
- }
- var scorersSort = _.sortBy(infoList, (i) => i.score);
- // let qsmInfoList = [];//分数前十名
- // _.reverse(scorersSort);
- // for (let i = 0; i < 10; ++i) {
- // qsmInfoList[i] = scorersSort[i];
- // }
- // let zjmcxx = null;//自己的分数信息
- // for (let i = 0; i < qsmInfoList.length; ++i) {
- // if(qsmInfoList[i] && qsmInfoList[i].uid == userid){
- // zjmcxx = qsmInfoList[i];
- // zjmcxx.mc = i;
- // }
- // }
- // if(!zjmcxx) return { code: C.FAILD, msg: "no prize"};
- // let zjmc = -2;
- // if(zjmcxx) zjmc = zjmcxx.mc || -1;
- // zjmc++
- // let bsjlsfylq = false;//比赛奖励是否已领取
- // if(zjmc < 4 || zjmc > 10) return { code: C.FAILD, msg: "ranking error"};
- // if(yljList.indexOf(userid) != -1){
- // console.warn("此人没有领取过奖励了 ");
- // bsjlsfylq = true;
- // }
-
- //上面是4~10名可以领取钻石,下面是前10名联系客服10名之后所有参与比赛的玩家都可以领取参与奖送的钻石
- _.reverse(scorersSort);
- let zjmcxx = null;//自己的分数信息
- for (let i = 0; i < scorersSort.length; ++i) {
- if(scorersSort[i] && scorersSort[i].uid == userid){
- zjmcxx = scorersSort[i];
- zjmcxx.mc = i;
- break;
- }
- }
- if(!zjmcxx) return { code: C.FAILD, msg: "您未参与该场比赛"};
- let zjmc = -2;
- if(zjmcxx) zjmc = zjmcxx.mc || -1;
- zjmc++
- let bsjlsfylq = false;//比赛奖励是否已领取
- if(zjmc < 11) return { code: C.FAILD, msg: "ranking error"};
- if(yljList.indexOf(userid) != -1){
- // console.warn("此人没有领取过奖励了 ");
- bsjlsfylq = true;
- }
- return { code: C.OK, data: {bsjlsfylq:bsjlsfylq}}
- });
- //// 领取比赛奖品
- proto.takeBSPrize = P.coroutine(function* (msg, session) {
- if (!session.uid) {
- return { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN };
- }
- if (!msg.aid) {
- return { code: C.FAILD, msg: C.GAME_PARAM_ERROR };
- }
- let uid = session.uid;
- let agentId = msg.aid;
- let aidsub = agentId.substr(0, 9);
- let bsIndex = aidsub.indexOf("promote_");
- if(bsIndex == -1) return { code: C.FAILD, msg: "is not compete aid" };//非比赛链接
- let nowTime = Date.now();
- let jrStart = this.lconfigCommon.getTodaySJC();
- // nowTime = 1684925400000;
- // jrStart = 1681920000000;
- var opts = {
- stime: { $gte: jrStart },
- outTime: {$gt: nowTime}//过期时间大于当前时间
- };
- opts['aid'] = agentId;
- let timelist = yield this.app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime yljList', { sort: { stime: 1 } });
- if(timelist.length == 0){
- this.app.controllers.bisai.setNowBSInfo([],agentId);
- return { code: C.FAILD, msg: "today no compate"};
- }
- let userid = 1;
- var player = yield this.app.models.Player.findByIdAsync(uid, 'userId');
- if (player) {
- if(player.userId) userid = player.userId;
- }
- let userList = [];//今日比赛所有参与的玩家uid
- let scoreList = [];//今日比赛所有参与的玩家的分数
- let ccList = [];//今日比赛所有参与的玩家已经统计分数的场次
- let ckszbsccxx = timelist[0];//此刻所处比赛场的比赛信息
- let iszzpm = false;//是否是最终排名(比赛过程中统计的排名并非本场比赛最终的排名)
- let yljList = [];
- if(ckszbsccxx){
- let jlbspmgbsj = (ckszbsccxx.etime + 15*60*1000) - nowTime;//距离比赛排名公布时间
- if(jlbspmgbsj < 0) iszzpm = true;
- if(!iszzpm) return { code: C.FAILD, msg: "距离比赛最终排名仅剩 "+jlbspmgbsj+" 秒"};
- if(ckszbsccxx.yljList && ckszbsccxx.yljList.length >= 0){
- yljList = _.cloneDeep(ckszbsccxx.yljList);
- // console.warn("已领奖人数 "+yljList.length);
- if(yljList.indexOf(userid) != -1){
- return {code: C.FAILD, msg: "本场比赛奖励已领取了。"}
- }
- }
- var opts = {
- stime: { $gte: ckszbsccxx.stime, $lt: ckszbsccxx.etime },
- over: { $gte: 1 }
- };
- opts['agentId'] = agentId;
- var list = yield this.app.models.FHMJTables.findMongoAsync(opts, 'tableNo users', { sort: { stime: 1 } });
- // console.warn("战绩-------------------length",list.length);
- for (let i = 0; i < list.length; ++i) {
- let bjus = list[i].users;//本局users
- for (let j = 0; j < bjus.length; ++j) {
- let wjszxb = userList.indexOf(bjus[j].userId);//玩家所在下标
- if(wjszxb == -1){
- let xwjxb = userList.length;//新玩家下标
- userList[xwjxb] = bjus[j].userId;//今日比赛所有参与的玩家
- scoreList[xwjxb] = bjus[j].score;//今日比赛所有参与的玩家的分数
- ccList[xwjxb] = 1;//今日比赛所有参与的玩家已经统计分数的场次
- }
- else{
- if(ccList[wjszxb] < ckszbsccxx.bigRound){//每个玩家止统计今日的前三场战绩
- scoreList[wjszxb] += bjus[j].score;//今日比赛所有参与的玩家的分数
- ccList[wjszxb] += 1;//今日比赛所有参与的玩家已经统计分数的场次
- }
- }
- }
- }
- }
- let infoList = [];
- for (let i = 0; i < userList.length; ++i) {
- infoList[i] = {
- score:scoreList[i],
- uid:userList[i]
- }
- }
- var scorersSort = _.sortBy(infoList, (i) => i.score);
- // let qsmInfoList = [];//分数前十名
- // _.reverse(scorersSort);
- // for (let i = 0; i < 10; ++i) {
- // qsmInfoList[i] = scorersSort[i];
- // }
- // let zjmcxx = null;//自己的分数信息
- // for (let i = 0; i < qsmInfoList.length; ++i) {
- // if(qsmInfoList[i] && qsmInfoList[i].uid == userid){
- // zjmcxx = qsmInfoList[i];
- // zjmcxx.mc = i;
- // }
- // }
- // if(!zjmcxx) return { code: C.FAILD, msg: "no prize"};
- // let zjmc = -2;
- // if(zjmcxx) zjmc = zjmcxx.mc || -1;
- // zjmc++
-
- // let diamond = 0;
- // let bsrslevel = [0,200,400];//比赛人数等级
- // let bsszlevel1 = [888,588];//比赛送钻等级1
- // let bsszlevel2 = [2888,1888];//比赛送钻等级2
- // let bsszlevel3 = [8888,3888];//比赛送钻等级3
- // let nowLevel = -1;
- // for (var i = 0; i < bsrslevel.length; i++) {
- // if(scorersSort.length >= bsrslevel[i]) nowLevel = i;
- // else break;
- // }
- // let szList = [];//送钻列表
- // if(nowLevel+1 == 1) szList = szList = bsszlevel1;
- // else if(nowLevel+1 == 2) szList = szList = bsszlevel2;
- // else if(nowLevel+1 >= 3) szList = szList = bsszlevel3;
- // if(zjmc <= 3) return { code: C.FAILD, msg: "no prize!"};
- // else if(zjmc <= 6) diamond = szList[0];//888;
- // else diamond = szList[1];//588;
-
- //上面是4~10名可以领取钻石,下面是前10名联系客服10名之后所有参与比赛的玩家都可以领取参与奖送的钻石
- _.reverse(scorersSort);
- let zjmcxx = null;//自己的分数信息
- for (let i = 0; i < scorersSort.length; ++i) {
- if(scorersSort[i] && scorersSort[i].uid == userid){
- zjmcxx = scorersSort[i];
- zjmcxx.mc = i;
- }
- }
- if(!zjmcxx) return { code: C.FAILD, msg: "no prize"};
- let zjmc = -2;
- if(zjmcxx) zjmc = zjmcxx.mc || -1;
- zjmc++
- if(zjmc <= 10) return { code: C.FAILD, msg: "no prize!"};
- let diamond = 88;
-
- if(diamond > 0){
- let bsjlsfylq = false;//比赛奖励是否已领取
- if(yljList.indexOf(userid) != -1){
- bsjlsfylq = true;
- }
- if(bsjlsfylq) return {code: C.FAILD, msg: "本场比赛奖励已领取"}
- let form = "bisaiSys";
- yield this.lconfigCommon.senMailToPlayer(session.uid,userid,14,14,1,1,diamond,form);
- if(timelist[0].yljList){
- let newylq = [];
- for (var i = 0; i < timelist[0].yljList.length; i++) {
- newylq[i] = timelist[0].yljList[i];
- }
- newylq[newylq.length] = userid;
- timelist[0].yljList = _.cloneDeep(newylq);
- yield timelist[0].saveAsync();
- }
- return { code: C.OK, data: {diamond:diamond,bsid:timelist[0]._id,userid:userid}}
- }
- return { code: C.FAILD, msg: "您没有可领取的奖励"};
- });
|