'use strict'; var https = require('https'); var http = require('http'); var md5 = require('md5'); var hallLogic = require('./hallLogic'); var util = require('util'); var quick = require('quick-pomelo'); var P = quick.Promise; var _ = require('lodash'); var uuid = require('node-uuid'); var C = require('../../../../share/constant'); var confHall = require('../../../config/hallConfig') || {}; var configCommon = require('../../../../share/configCommon');//////TL++配置相关的公共方法 // var compateDate = require('../../../../share/compateDate'); var logger = quick.logger.getLogger('fhmj', __filename); // var confActive = require('../../../config/hallConfig').active || {}; var Handler = function (app) { // console.warn("????? Handler=============="); this.app = app; this.users = {}; ////文字验证码的文库 this.wordList = "当时记得这篇桂林山水也是在小学二年级出现要求通会背有一次因为不还被老师罚站后来对甲天下印象特别深刻太理解描写景的那些词准确意思只听讲美所以候就想着长大了定去看体作者述种可惜已过而立之我欣赏愿望直没能实但" // console.warn("活动配置内容 ??? Handler() "+typeof require.cache[require.resolve('./hallHandler')]); this.hallLogic = new hallLogic(this.app); this.lconfigCommon = new configCommon(this.app); // this.lcompateDate = new compateDate(); }; module.exports = function (app) { // setInterval(() => checkVersion(), 5000); // console.warn("活动配置内容 ??? exports() "+typeof require.cache[require.resolve('./hallHandler')]); return new Handler(app); }; var proto = Handler.prototype; proto.checkVersion2 = P.coroutine(function* () { // let confCodeVer = require('../../../config/VersionConfig').codeVer || {}; // console.warn("检查版本bbb "+JSON.stringify(confCodeVer)); // delete require.cache[require.resolve('../../../config/VersionConfig')]; // let confCodeVer2 = require('../../../config/VersionConfig').codeVer || {}; // if(confCodeVer.hallConfig && confCodeVer2.hallConfig && confCodeVer.hallConfig != confCodeVer2.hallConfig){ // delete require.cache[require.resolve('../../../config/hallConfig')]; // confHall = require('../../../config/hallConfig') || {}; // console.warn("hallConfig 已经更新了") // } // if(confCodeVer.hallLogic && confCodeVer2.hallLogic && confCodeVer.hallLogic != confCodeVer2.hallLogic){ // delete require.cache[require.resolve('./hallLogic')]; // hallLogic = require('./hallLogic'); // this.hallLogic = new hallLogic(this.app); // console.warn("hallLogic 已经更新了 ") // } // if(confCodeVer.configCommon && confCodeVer2.configCommon && confCodeVer.configCommon != confCodeVer2.configCommon){ // delete require.cache[require.resolve('../../../../share/configCommon')]; // configCommon = require('../../../../share/configCommon'); // this.lconfigCommon = new configCommon(this.app); // console.warn("configCommon 已经更新了 ") // } // if(confCodeVer.pdkLogic && confCodeVer2.pdkLogic && confCodeVer.pdkLogic != confCodeVer2.pdkLogic){ // // delete require.cache[require.resolve('../../../paodekuai/logic')]; // // require('../../../paodekuai/logic') // // delete require.cache[require.resolve('./logic')]; // // require('./logic') // // delete require.cache[require.resolve('../../game/handler/paodekuaiHandler')]; // // require('../../game/handler/paodekuaiHandler') // // console.warn("pdkLogic 已经更新了 ") // } }); // proto.xxxxx = P.coroutine(function* (c1,c2,c3,c4) { // console.error("开始给玩家发送消息 ",c1,c2,c3,c4); // let tempData = { // userId: c1, // account: c2, // longitude: c3, // latitude: c4 // } // console.error("开始给玩家发送消息 222") // //////向其他玩家广播该玩家位置 // //yield this.pushMsgAsync(-1, 'paodekuai_event', { type: M.COAST_PLAYERLOCATION, data: tempData }); // yield this.app.controllers.push.broadcastAsync('broadcast', tempData); // console.error("给玩家发送消息完成 ",c1,c2,c3,c4); // return { code: C.OK, data: tempData }; // }); // // 发送消息 // proto.pushMsgAsync = P.coroutine(function* (cidOrIds, route, msg) { // var playerIds = []; // if (Array.isArray(cidOrIds)) playerIds = cidOrIds; // else { // if (cidOrIds < 0 || cidOrIds >= this.users.length) { // for (let user of this.users) { // // console.warn("大厅给前端主动发消息 user.id "+user.data.id); // if (user) playerIds.push(user.id); // } // } else { // let user = this.users[cidOrIds]; // if (user) playerIds.push(user.id); // } // } // if (playerIds.length > 0) { // let channelId = 'xct:' + this.id; // return this.app.controllers.push._pushAsync(channelId, playerIds, route, msg); // } // }); // 玩家信息 proto.userInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var nowTime = Date.now(); var uid = session.uid; var user = this.users[uid]; if (user && nowTime - user.utime < 5000) { return next(null, { code: C.OK, data: user.data }); } return this.app.models.Player.findByIdReadOnlyAsync(uid, 'diamond') .then(player => { var data = user ? user.data : { diamond: 0 }; if (player) { data.diamond = player.diamond; if (user) user.utime = nowTime; else this.users[uid] = { utime: nowTime, data: data }; } return { code: C.OK, data: data }; }).nodeify(next); }); //////TL++,得到用户钻石,充值完成之后前端访问这个用于更新前端的钻石显示 proto.getUserDiamond = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond '); if (player) { return next(null, { code: C.OK, data: {diamond:player.diamond} }); } return next(null, { code: C.OK, data: {diamond:-1} }); }); //////TL++,得到服务器的当前时间戳 大厅的方法不能在游戏中访问 proto.getNowTime = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let nowTime = Date.now(); // console.warn("得到服务器的当前时间戳"); return next(null, { code: C.OK, data: {nowTime:nowTime} }); }); //////TL++,得到用户同步的信息 proto.getUserTongBuInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var toplayerID = ""; var toplayer = yield this.app.models.Player.findByIdAsync(session.uid, 'synPlayer'); if (toplayer) { if(toplayer.synPlayer) toplayerID = toplayer.synPlayer; else return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_FOUND });/////玩家未找到 } else{ return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_FOUND });/////玩家未找到 } var player = yield this.app.models.Player.findByIdAsync(toplayerID, 'diamond userId name headurl synPlayer formId'); if (player ) { if(player.synPlayer == session.uid){ return next(null, { code: C.OK, data: {diamond:player.diamond,userId:player.userId,name:player.name,headurl:player.headurl,formId:player.formId} }); } else{ /////校验失败 player.synPlayer = ""; yield player.saveAsync(); return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_FOUND }); } } return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_FOUND }); }); //////TL++,钻石同步操作(同步到微信和同步到闲聊都用这个) proto.opZSTB = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var outplayerID = "";/////钻石转出人的ID var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond synPlayer'); if (player) { outplayerID = player.synPlayer; } else { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN});/////玩家未找到 } if(outplayerID == '') { return next(null, { code: C.ERROR, msg: C.HTTP_NOTSAME_BINDPLAYER});/////玩家未找到 } var outplayer = yield this.app.models.Player.findByIdAsync(outplayerID, 'diamond synPlayer'); if (outplayer) { if(outplayer.synPlayer != session.uid) { return next(null, { code: C.ERROR, msg: C.HTTP_NOTSAME_BINDPLAYER});/////玩家未找到 } if(outplayer.diamond <= 0) { return next(null, { code: C.OK, data: {opdiamond:0,newdiamond:player.diamond} }); } let ylzs = outplayer.diamond;/////原来钻石 let ylzs2 = player.diamond;/////原来钻石 let opDiamondCount=outplayer.diamond; outplayer.diamond = 0; yield outplayer.saveAsync(); // 钻石记录 var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: outplayerID, dType: 8,//8同步转出 9同步转入 dSource: ylzs, dSwap: -1*opDiamondCount, dNow: 0, tableId: session.uid });c yield diamondrecord.saveAsync(); player.diamond += opDiamondCount; yield player.saveAsync(); var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: session.uid, dType: 9,//8同步转出 9同步转入 dSource: ylzs2, dSwap: opDiamondCount, dNow: player.diamond, tableId: outplayerID }); yield diamondrecord.saveAsync(); return next(null, { code: C.OK, data: {opdiamond:opDiamondCount,newdiamond:player.diamond} }); } else { return next(null, { code: C.ERROR, msg: C.HTTP_NOTSAME_BINDPLAYER});/////玩家未找到 } }); // 修改资料 proto.modifyInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.name && !msg.headurl) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } var player = yield this.app.models.Player.findByIdAsync(session.uid, 'name headurl'); if (player) { if (msg.name && msg.name != player.name) player.name = msg.name; //if (msg.headurl && msg.headurl != player.headurl) player.headurl = msg.headurl; if (player.isModified()) yield player.saveAsync(); } return next(null, { code: C.OK }); }); ////设置用户信息 proto.setUserInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let msg2 = ""; var player = yield this.app.models.Player.findByIdAsync(session.uid, 'name headurl sex'); if (player) { let isNeedSet = false; if (msg.sex && msg.sex != player.sex){ player.sex = msg.sex; isNeedSet = true; } if(isNeedSet){ yield player.saveAsync(); msg2 = "修改成功"; } } let resData = { sex : player.sex } return next(null, { code: C.OK, msg:msg2,data: resData }); }); // ts++请求得到外接小游戏的钻石 proto.getSmallGameCoin = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let result = { code:C.FAILD, userid:0, diamond:0 } // var player = yield this.app.models.Player.findByIdAsync(session.uid, 'account userId diamond'); // if (player) { // let account = player.account; // let pid = session.uid; // let uid = player.userId; // console.warn("请求得到外接小游戏的钻石 "+session.uid); // let url = "http://aa.bb.cc.com/StartGame/CalculateRateByPoint.aspx?action=xxxx&userid="+uid+"&pwd="+account+"&pid="+pid; // http.get(url, (res) => { // res.setEncoding('utf8'); // let data = ''; // res.on('data', (chunk) => { // console.warn("res.on('data' "+JSON.stringify(data)+" chunk "+JSON.stringify(chunk)); // data += chunk; // let data2 = JSON.stringify(chunk); // console.warn("res.on('data222 ' "+data2); // let resJson = JSON.parse(chunk); // result.code = C.OK; // result.userid = resJson.userid; // console.warn("res.on('data333 ' "+JSON.stringify(result)); // }); // res.on('end', () => { // console.warn("res.on('end' "+JSON.stringify(data)); // console.warn("res.on('end' result "+JSON.stringify(result)); // }); // }).on('error', (err) => { // console.warn(`Error: ${err.message}`); // }); // player.diamond += 10; // yield player.saveAsync(); // result.diamond = player.diamond; // } // console.warn("res.on('end' result "+JSON.stringify(result)); return next(null, { code: C.OK, data: result}); }); // ts++得到绑定手机信息 proto.getBindPhoneInfo = P.coroutine(function* (msg, session, next) { this.checkVersion2() // console.warn("???????????????????????/"); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let tel = ""; let pwd = ""; var player = yield this.app.models.Player.findByIdAsync(session.uid, 'tel pwd'); if (player) { tel = player.tel; pwd = player.pwd; } let list1 = []; for (var i = 0; i < this.wordList.length; i++) { list1[i] = i; } let list2 = _.shuffle(list1); let list3 = list2.splice(0, 6) let list4 = _.shuffle(list3); let list5 = list4.splice(0, 3) let allWords = ""; for (var i = 0; i < list3.length; i++) { let ri = list3[i]; allWords += this.wordList[ri]; } let targetWords = ""; for (var i = 0; i < list5.length; i++) { let ri = list5[i]; targetWords += this.wordList[ri]; } let data = { tel:tel, pwd:pwd, allWords:allWords, targetWords:targetWords } return next(null, { code: C.OK, data: data}); }); // ts++请求发送手机短信验证码 proto.sendSMSCode = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.phoneStr || msg.phoneStr.length != 11) { return next(null, { code: C.ERROR, msg: 111 });//"手机号参数错误" } let phoneStr = msg.phoneStr if (!msg.targetWords || msg.targetWords.length != 3) { return next(null, { code: C.ERROR, msg: 112 });//"目标文字参数错误" } if (!msg.cliekedWords || msg.cliekedWords.length != 3) { return next(null, { code: C.ERROR, msg: 113 });//"点击文字参数错误" } if(msg.targetWords != msg.cliekedWords){ return next(null, { code: C.ERROR, msg: 114 });//"点击文字和目标文字不匹配" } // 判断的是否是JSON字符串 let getIsAJsonStr22 = function (str) { // console.warn("判断的是否是JSON字符串。 "+str); if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeof obj == 'object' && obj) { return true; } else { //不是就返回false return false; } } catch (e) { return false; } } return false; } var player = yield this.app.models.Player.findByIdAsync(session.uid, 'tel pwd'); if (player) { //把生成的验证码存入用户的pwd字段,用于待用户输入的验证码提交上来之后进行正确性验证 let yzm = _.random(100000, 999999); player.pwd = ""+yzm; yield player.saveAsync(); //下面是请求java的发送短信接口 // console.warn("请求java的发送短信接口 ",phoneStr,yzm); let code = yzm; let phone = phoneStr; let key = "xxxxx" let time = Date.now(); let str1 = ""+phone+key+code; let md51 = md5(str1).toUpperCase(); let str2 = ""+md51+time; let md52 = md5(str2).toUpperCase(); let sign = md52; let post_data={ code: code, phone: phone, sign: sign, time: time };//请求数据 let reqdata = JSON.stringify(post_data); let options = { hostname: 'aa.bb.com', port: '', path: '/sms/sendSms', method: 'POST', rejectUnauthorized: false, requestCert: true, headers: { 'Content-Type': 'Application/json', "Content-Length":reqdata.length } }; var req = https.request(options, function (res) { }); req.write(reqdata); req.on('response', function (response2) { // console.warn("请求到这里了???222 response2.headers "+JSON.stringify(response2.headers) ); req.end(); let body2 = ""; response2.on('data', function (chunk) { body2 = chunk.toString(); // console.warn("请求到这里了???555 chunk "+body2); if(!getIsAJsonStr22(body2)){ console.error("接口返回值非json字符串。 "+body2); return next(null, { code: C.ERROR, msg: 115 });//"验证码发送失败" } let result = JSON.parse(body2) // console.warn("请求到这里了???56 chunk "+result.success); if(result.success){ console.warn("发送短信验证码成功 "+JSON.stringify(result) ); return next(null, { code: C.OK, data: result}); } else{ console.error("请求发送验证码出错了 "+body2); return next(null, { code: C.ERROR, msg: 115 });//"验证码发送失败" } // console.warn("这里都到返回值了222 ") }); // console.warn("请求到这里了???666 body2 "+body2) }); req.on('error', function (e) { req.end(); console.error(new Error('request YZM error: ' + e.message)); return next(null, { code: C.ERROR, msg: 116 });//"请求验证码失败" }); } }); // ts++设置绑定手机号 proto.setBindPhone = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.phoneStr || msg.phoneStr.length != 11) { return next(null, { code: C.ERROR, msg: 111 });//"手机号参数错误" } let phoneStr = msg.phoneStr if (!msg.yzm || msg.yzm.length != 6) { return next(null, { code: C.ERROR, msg: 112 });//"验证码参数错误" } let yzm = msg.yzm var yPlayers = yield this.app.models.Player.findMongoAsync({ tel: phoneStr },'_id userId tel pwd'); // console.warn("????? 设置绑定手机号 ",yPlayers.length,yPlayers[0]._id,session.uid); if (yPlayers.length > 1 || (yPlayers.length == 1 && yPlayers[0]._id != session.uid)){ return next(null, { code: C.ERROR, msg: 117 });//"手机号已被绑定过" } var player = yield this.app.models.Player.findByIdAsync(session.uid, 'userId tel pwd'); if (player) { if(yzm != player.pwd) return next(null, { code: C.ERROR, msg: 113 });//"验证码数据错误" player.tel = phoneStr; // player.pwd = ""; yield player.saveAsync(); } yield this.hallLogic.setBindPhone(msg, session, next,player.userId) let data = { phoneStr:phoneStr } return next(null, { code: C.OK, data: data}); }); ////上面3个方法是大厅绑定手机号所需的方法,下面是手机号登陆时验证所输入的手机号进行短信验证 // ts++得到绑定手机信息 proto.getBindPhoneInfo2 = P.coroutine(function* (msg, session, next) { let list1 = []; for (var i = 0; i < this.wordList.length; i++) { list1[i] = i; } let list2 = _.shuffle(list1); let list3 = list2.splice(0, 6) let list4 = _.shuffle(list3); let list5 = list4.splice(0, 3) let allWords = ""; for (var i = 0; i < list3.length; i++) { let ri = list3[i]; allWords += this.wordList[ri]; } let targetWords = ""; for (var i = 0; i < list5.length; i++) { let ri = list5[i]; targetWords += this.wordList[ri]; } let data = { allWords:allWords, targetWords:targetWords } return next(null, { code: C.OK, data: data}); }); // ts++请求发送手机短信验证码 proto.sendSMSCode2 = P.coroutine(function* (msg, session, next) { if (!msg.phoneStr || msg.phoneStr.length != 11) { return next(null, { code: C.ERROR, msg: 111 });//"手机号参数错误" } let phoneStr = msg.phoneStr if (!msg.targetWords || msg.targetWords.length != 3) { return next(null, { code: C.ERROR, msg: 112 });//"目标文字参数错误" } if (!msg.cliekedWords || msg.cliekedWords.length != 3) { return next(null, { code: C.ERROR, msg: 113 });//"点击文字参数错误" } if(msg.targetWords != msg.cliekedWords){ return next(null, { code: C.ERROR, msg: 114 });//"点击文字和目标文字不匹配" } // 判断的是否是JSON字符串 let getIsAJsonStr22 = function (str) { // if(1 == 1) return true; // console.warn("判断的是否是JSON字符串。 "+str); if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeof obj == 'object' && obj) { return true; } else { //不是就返回false return false; } } catch (e) { return false; } } return false; } //把生成的验证码存入用户的pwd字段,用于待用户输入的验证码提交上来之后进行正确性验证 let yzm = _.random(100000, 999999); var tel = yield this.app.models.Tel.findByIdAsync(phoneStr, 'tel pwd bindTime'); if (tel) { // if(tel.bindTime > 0) return next(null, { code: C.ERROR, msg: 117 });//"手机号已被绑定过" tel.pwd = ""+yzm; tel.bindTime = 0; yield tel.saveAsync(); } else{ // 手机号登录信息表,为了在登陆的时候带手机号参数上来 var newTel = new this.app.models.Tel({ _id: phoneStr, tel: phoneStr, pwd: ""+yzm,// bindTime: 0 }); yield newTel.saveAsync(); } //下面是请求java的发送短信接口 console.warn("请求java的发送短信接口1 ",phoneStr,yzm); let code = yzm; let phone = phoneStr; let key = "xxxxxxxx" let time = Date.now(); let str1 = ""+phone+key+code; let md51 = md5(str1).toUpperCase(); let str2 = ""+md51+time; let md52 = md5(str2).toUpperCase(); let sign = md52; let post_data={ code: code, phone: phone, sign: sign, time: time };//请求数据 let reqdata = JSON.stringify(post_data); let options = { hostname: 'aa.bb.com', port: '', path: '/sms/sendSms', method: 'POST', rejectUnauthorized: false, requestCert: true, headers: { 'Content-Type': 'Application/json', "Content-Length":reqdata.length } }; var req = https.request(options, function (res) { }); req.write(reqdata); req.on('response', function (response2) { // console.warn("请求到这里了???222 response2.headers "+JSON.stringify(response2.headers) ); req.end(); let body2 = ""; response2.on('data', function (chunk) { body2 = chunk.toString(); // console.warn("请求到这里了???555 chunk "+body2); if(!getIsAJsonStr22(body2)){ console.error("接口返回值非json字符串1。 "+body2); return next(null, { code: C.ERROR, msg: 115 });//"验证码发送失败" } let result = JSON.parse(body2) // console.warn("请求到这里了???56 chunk "+result.success); if(result.success){ console.warn("发送短信验证码成功1 "+JSON.stringify(result) ); return next(null, { code: C.OK, data: result}); } else{ console.error("请求发送验证码出错了1 "+body2); return next(null, { code: C.ERROR, msg: 115 });//"验证码发送失败" } // console.warn("这里都到返回值了222 ") }); // console.warn("请求到这里了???666 body2 "+body2) }); req.on('error', function (e) { req.end(); console.error(new Error('request YZM error1: ' + e.message)); return next(null, { code: C.ERROR, msg: 116 });//"请求验证码失败" }); }); // ts++设置绑定手机号 proto.setBindPhone2 = P.coroutine(function* (msg, session, next) { if (!msg.phoneStr || msg.phoneStr.length != 11) { return next(null, { code: C.ERROR, msg: 111 });//"手机号参数错误" } let phoneStr = msg.phoneStr if (!msg.yzm || msg.yzm.length != 6) { return next(null, { code: C.ERROR, msg: 112 });//"验证码参数错误" } let yzm = msg.yzm var tels = yield this.app.models.Tel.findMongoAsync({ tel: phoneStr },'_id tel pwd bindTime'); if (tels.length != 1){ return next(null, { code: C.ERROR, msg: 117 });//"手机号已被绑定过" } else{ if(yzm != tels[0].pwd) return next(null, { code: C.ERROR, msg: 113 });//"验证码数据错误" tels[0].bindTime = Date.now(); yield tels[0].saveAsync(); var yPlayers = yield this.app.models.Player.findMongoAsync({ tel: phoneStr },'_id userId tel pwd'); if (yPlayers.length == 1){ yPlayers[0].pwd = yzm; yield yPlayers[0].saveAsync(); } } //给用户发邮件送绑定手机的奖品 // yield this.hallLogic.setBindPhone(msg, session, next,player.userId) let data = { phoneStr:phoneStr, yzm:yzm } return next(null, { code: C.OK, data: data}); }); // ts++活动信息 proto.activityInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } // console.warn("require.cache "+require.cache.length+" " +require.cache.toString().replace("\r\n","")) // console.warn("require.cache000 "+typeof require.cache + " "+ typeof require.cache[require.resolve('../../../config/hallConfig')]); // delete require.cache[require.resolve('../../../config/hallConfig')]; // let confActive = require('../../../config/hallConfig').active || {}; // delete require.cache[require.resolve('./hallHandler')]; // require('./hallHandler') this.checkVersion2(); let confActive = confHall.active || {}; // console.warn("活动配置内容aaa "+JSON.stringify(confActive)); // console.warn("活动配置内容bbb "+typeof require.cache[require.resolve('./hallHandler')]); // console.warn("require.cache222 "+typeof require.cache + " "+ typeof require.cache[require.resolve('../../../config/hallConfig')]); // console.warn("require.cache333 "+require.cache[require.resolve('../../../config/hallConfig')]); // console.warn("require.cache333 "+JSON.stringify(require.cache[require.resolve('../../../config/hallConfig')])); // console.warn("require.cache222 "+JSON.stringify(require.cache)); let spreadCount = 0; let spreadRebate = 0; let spreadRebateOut = 0; let diamond = 0; var player = yield this.app.models.Player.findByIdReadOnlyAsync(session.uid, 'diamond spreadCount spreadRebate spreadRebateOut'); if (player) { spreadCount=player.spreadCount; spreadRebate=player.spreadRebate; spreadRebateOut=player.spreadRebateOut; diamond=player.diamond; } //人数 let s1=3; let s2=6; let s3=9; let s4=12; let s5=15; //对就返利 let r1=300; let r2=600; let r3=900; let r4=1200; let r5=1500; let activeInfoList = confActive.list || []; let xzdsjc = Date.now(); let hdqjcz = 0;//活动期间充值 let hdqjdj = 0;//活动期间完成对局数 // let lcIsOpen = false;//累充送钻石活动是否开启 // let ljdjIsOpen = false;//累计对局送钻石活动是否开启 for (var i = 0; i < activeInfoList.length; i++) { let yxhdxx = activeInfoList[i]; if(yxhdxx && yxhdxx.open && yxhdxx.startTime && yxhdxx.endTime) { if(xzdsjc >= yxhdxx.startTime && xzdsjc < yxhdxx.endTime){ if(yxhdxx.type == 1) { s1 = yxhdxx.reachAndRewardInfo[0].reachCount; r1 = yxhdxx.reachAndRewardInfo[0].rewardCount; s2 = yxhdxx.reachAndRewardInfo[1].reachCount; r2 = yxhdxx.reachAndRewardInfo[1].rewardCount; s3 = yxhdxx.reachAndRewardInfo[2].reachCount; r3 = yxhdxx.reachAndRewardInfo[2].rewardCount; s4 = yxhdxx.reachAndRewardInfo[3].reachCount; r4 = yxhdxx.reachAndRewardInfo[3].rewardCount; s5 = yxhdxx.reachAndRewardInfo[4].reachCount; r5 = yxhdxx.reachAndRewardInfo[4].rewardCount; } if(yxhdxx.type == 2) { // lcIsOpen = true; var opts = { paystate: 1,//支付状态 0未支付 1成功 playerId: session.uid, time: { $gte: yxhdxx.startTime, $lt: yxhdxx.endTime } }; var list = yield this.app.models.PayRecord.findMongoAsync(opts, 'paydiamond payreward total_fee');// for (var j = 0; j < list.length; j++) { // hdqjcz += list[i].paydiamond; // hdqjcz += list[i].payreward; hdqjcz += list[j].total_fee/100; } //下面是从钻石变更记录数据表中读取任务的是否已领取的情况 var cxlqopts = { playerId: session.uid, dType: 13,//活动类型 registerTime: { $gte: yxhdxx.startTime, $lt: yxhdxx.endTime } }; var lqqklist = yield this.app.models.DiamondRecord.findMongoAsync(cxlqopts, 'dType dSwap tableId ');// let lcszylqxbs = [];//13活动期间累充送钻石已经领取下标数组 for (var z = 0; z < lqqklist.length; z++) { lcszylqxbs[lcszylqxbs.length] = Number(lqqklist[z].tableId) } // console.warn("活动领取情况lc "+JSON.stringify(lqqklist)+" 活动累充已领下标 "+JSON.stringify(lcszylqxbs)); for (var j = 0; j < activeInfoList[i].reachAndRewardInfo.length; j++) { activeInfoList[i].reachAndRewardInfo[j].isylq = lcszylqxbs.indexOf(j) != -1; } } if(yxhdxx.type == 3) { // ljdjIsOpen = true; var opts = { "users._id": session.uid, stime: { $gte: yxhdxx.startTime, $lt: yxhdxx.endTime } }; // logger.warn("hall countMongoAsync users._id111--------" + session.uid ); hdqjdj = yield this.app.models.FHMJTables.countMongoAsync(opts); //下面是从钻石变更记录数据表中读取任务的是否已领取的情况 var cxlqopts = { playerId: session.uid, dType: 14,//活动类型 registerTime: { $gte: yxhdxx.startTime, $lt: yxhdxx.endTime } }; var lqqklist = yield this.app.models.DiamondRecord.findMongoAsync(cxlqopts, 'dType dSwap tableId ');// let zjszylqxbs = [];//14活动期间组局领钻石已经领取下标数组 for (var z = 0; z < lqqklist.length; z++) { zjszylqxbs[zjszylqxbs.length] = Number(lqqklist[z].tableId) } // console.warn("活动领取情况zj "+JSON.stringify(lqqklist)+" 活动组局已领下标 "+JSON.stringify(zjszylqxbs)); for (var j = 0; j < activeInfoList[i].reachAndRewardInfo.length; j++) { activeInfoList[i].reachAndRewardInfo[j].isylq = zjszylqxbs.indexOf(j) != -1; } } } } } // if(lcIsOpen){ // var opts = { // paystate: 0,//支付状态 0未支付 1成功 // playerId: session.uid, // time: { $gte: 1, $lt: 9999999 } // }; // var onlineCount = yield app.models.Player.countMongoAsync(opts); // } let data = { hdqjcz: hdqjcz, hdqjdj: hdqjdj, nowTime: xzdsjc, activeInfoList:activeInfoList, diamond: diamond, spreadCount: spreadCount, spreadRebate: spreadRebate, spreadRebateOut: spreadRebateOut, s1:s1, s2:s2, s3:s3, s4:s4, s5:s5, r1:r1, r2:r2, r3:r3, r4:r4, r5:r5 } return next(null, { code: C.OK, data: data}); }); // ts++活动领取处理 proto.activityIn = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let spreadCount = 0; let spreadRebate = 0; let spreadRebateOut = 0; let diamond = 0; var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond spreadCount spreadRebate spreadRebateOut'); if (player) { spreadCount=player.spreadCount; spreadRebate=player.spreadRebate; spreadRebateOut=player.spreadRebateOut; diamond = player.diamond; if (spreadRebate>0) { let diamondSource = diamond; let diamondNew = diamond+spreadRebate; player.spreadRebate = 0; player.spreadRebateOut += spreadRebate; player.diamond += spreadRebate; yield player.saveAsync(); // 钻石记录 var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: session.uid, dType: 6,//活动奖励 dSource: diamondSource, dSwap: spreadRebate, dNow: diamondNew }); yield diamondrecord.saveAsync(); diamond += spreadRebate; spreadRebateOut += spreadRebate; spreadRebate=0; } } return next(null, { code: C.OK, data: { diamond: diamond, spreadCount: spreadCount, spreadRebate: spreadRebate, spreadRebateOut: spreadRebateOut } }); }); // ts++其他活动领取处理(比如活动期间的,累充,累计对局,回归用户每日免费领取,回归用户充值送钻等等) proto.otherActivityIn = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let type = Number(msg.type) || 0; if(!(type && type > 0) ){ return next(null, { code: C.ERROR, msg: "type参数错误"+type }); } let index = Number(msg.index) if(type == 2 || type == 3){ if(!(index >= 0 )){ return next(null, { code: C.ERROR, msg: "index参数错误"+index }); } } let xzdsjc = Date.now(); let confActive = confHall.active || {}; let activeInfoList = confActive.list || []; // console.warn("其他活动领取处理 活动配置内容 "+JSON.stringify(confActive)); let activeData = null; // console.warn("其他活动领取处理 activeInfoList.length "+activeInfoList.length+" type "+type+" index "+index); for (var i = 0; i < activeInfoList.length; i++) { let yxhdxx = activeInfoList[i]; if(yxhdxx && yxhdxx.open && yxhdxx.startTime && yxhdxx.endTime) { if(xzdsjc >= yxhdxx.startTime && xzdsjc < yxhdxx.endTime){ if(yxhdxx.type == type) { activeData = yxhdxx; break; } } } } if(!activeData){ return next(null, { code: C.ERROR, msg: "目前不在活动期间内"+type }); } let lzType = 0;//领钻类型 if(type == 2) lzType = 13;//13活动期间累充送钻石 else if(type == 3) lzType = 14;//14活动期间组局领钻 if(lzType > 0 && index != 10000){//单项领取,一键领取不在这里进行处理 var opts = { playerId: session.uid, dType: lzType,//活动类型 tableId: index+"",//活动下标 registerTime: { $gte: activeData.startTime, $lt: activeData.endTime } }; var lqcs = yield this.app.models.DiamondRecord.countMongoAsync(opts); // console.warn("该活动的领取次数 "+lqcs) if(lqcs > 0) return next(null, { code: C.ERROR, msg: "已经领取过" }); } let klqList = [];//可领取列表 let addDimand = 0; if(type == 1){ //领取活动期间邀新送钻 } else if(type == 2){ //领取活动期间累充送钻 var opts = { paystate: 1,//支付状态 0未支付 1成功 playerId: session.uid, time: { $gte: activeData.startTime, $lt: activeData.endTime } }; let hdqjcz = 0; var list = yield this.app.models.PayRecord.findMongoAsync(opts, 'paydiamond payreward ');// for (var i = 0; i < list.length; i++) { // hdqjcz += list[i].paydiamond; // hdqjcz += list[i].payreward; hdqjcz += list[i].total_fee/100; } if(index == 10000){ //下面是从钻石变更记录数据表中读取任务的是否已领取的情况 var cxlqopts = { playerId: session.uid, dType: 13,//活动类型 registerTime: { $gte: activeData.startTime, $lt: activeData.endTime } }; var lqqklist = yield this.app.models.DiamondRecord.findMongoAsync(cxlqopts, 'dType dSwap tableId ');// let lcszylqxbs = [];//13活动期间累充送钻石已经领取下标数组 for (var z = 0; z < lqqklist.length; z++) { lcszylqxbs[lcszylqxbs.length] = Number(lqqklist[z].tableId) } for (var i = 0; i < activeData.reachAndRewardInfo.length; i++) { let targetCount = activeData.reachAndRewardInfo[i].reachCount;//任务的目标值 // console.warn("活动期间累计充值: 一键领取 "+hdqjcz + " 要求充值 "+targetCount); let iswlq = lcszylqxbs.indexOf(i) == -1;//是否未领取 if(iswlq && hdqjcz >= targetCount){//已达成而且未领取 let rewardType = activeData.reachAndRewardInfo[i].rewardType if(rewardType == 1){ addDimand += activeData.reachAndRewardInfo[i].rewardCount klqList[klqList.length] = { dSwap: activeData.reachAndRewardInfo[i].rewardCount, tableId: i+"", } } } } } else{ let targetCount = activeData.reachAndRewardInfo[index].reachCount;//任务的目标值 // console.warn("活动期间累计充值: "+hdqjcz + " 要求充值 "+targetCount); if(hdqjcz >= targetCount){ let rewardType = activeData.reachAndRewardInfo[index].rewardType if(rewardType == 1){ addDimand = activeData.reachAndRewardInfo[index].rewardCount } } else{ return next(null, { code: C.ERROR, msg: "该项任务未达成2" }); } } } else if(type == 3){ //领取活动期间累计组局领钻 let hdqjdj = 0; var opts = { "users._id": session.uid, stime: { $gte: activeData.startTime, $lt: activeData.endTime } }; // logger.warn("hall countMongoAsync users._id222--------" + session.uid ); hdqjdj = yield this.app.models.FHMJTables.countMongoAsync(opts); if(index == 10000){ //下面是从钻石变更记录数据表中读取任务的是否已领取的情况 var cxlqopts = { playerId: session.uid, dType: 14,//活动类型 registerTime: { $gte: activeData.startTime, $lt: activeData.endTime } }; var lqqklist = yield this.app.models.DiamondRecord.findMongoAsync(cxlqopts, 'dType dSwap tableId ');// let zjszylqxbs = [];//14活动期间组局领钻石已经领取下标数组 for (var z = 0; z < lqqklist.length; z++) { zjszylqxbs[zjszylqxbs.length] = Number(lqqklist[z].tableId) } // console.warn("活动期间累计对局数一键领取 hdqjdj "+hdqjdj + " zjszylqxbs "+JSON.stringify(zjszylqxbs)); for (var i = 0; i < activeData.reachAndRewardInfo.length; i++) { let iswlq = zjszylqxbs.indexOf(i) == -1;//是否未领取 let targetCount = activeData.reachAndRewardInfo[i].reachCount;//任务的目标值 // console.warn("活动期间累计对局数一键领取 iswlq "+iswlq + " targetCount "+targetCount ) if(iswlq && hdqjdj >= targetCount){ let rewardType = activeData.reachAndRewardInfo[i].rewardType if(rewardType == 1){ addDimand += activeData.reachAndRewardInfo[i].rewardCount klqList[klqList.length] = { dSwap: activeData.reachAndRewardInfo[i].rewardCount, tableId: i+"", } } } } // console.warn("活动期间累计对局数一键领取 : "+hdqjdj + " klqList "+JSON.stringify(klqList)); } else{ let targetCount = activeData.reachAndRewardInfo[index].reachCount;//任务的目标值 // console.warn("活动期间累计对局数: "+hdqjdj + " 要求对局数 "+targetCount); if(hdqjdj >= targetCount){ let rewardType = activeData.reachAndRewardInfo[index].rewardType if(rewardType == 1){ addDimand = activeData.reachAndRewardInfo[index].rewardCount } } else{ return next(null, { code: C.ERROR, msg: "该项任务未达成3" }); } } } else if(type == 4){ //领取活动期间回归每日免费领钻 } else if(type == 5){ //领取活动期间回归每日首充送钻 } let getGoodsList = []; // console.warn("活动期间 addDimand : "+addDimand) if(addDimand > 0){ var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond'); let yxzss = player.diamond;//原先钻石数 player.diamond += addDimand; yield player.saveAsync(); // 钻石记录 /* dType:类型 1为注册2为充值3坐下4退分5礼物6活动7后台 8同步转出 9同步转入10签到11每日奖励12分享赠送, 13活动期间累充送钻石,14活动期间组局领钻,15活动期间回归用户每日领钻, 16活动期间回归用户每日充值奖励钻石,只有11没有统计 */ if(index == 10000){ if(lzType > 0 && klqList.length > 0){ let dimandChangeList = []; let yxzss2 = yxzss; for (var i = 0; i < klqList.length; i++) { let zssItem = [yxzss2,yxzss2+klqList[i].dSwap] dimandChangeList[dimandChangeList.length] = zssItem; yxzss2 += klqList[i].dSwap } for (var i = 0; i < klqList.length; i++) { var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: session.uid, dType: lzType,//后台 dSource: dimandChangeList[i][0], dSwap: klqList[i].dSwap, dNow: dimandChangeList[i][1], tableId: klqList[i].tableId, }); yield diamondrecord.saveAsync(); } } } else{ if(lzType > 0){ var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: session.uid, dType: lzType,//后台 dSource: yxzss, dSwap: addDimand, dNow: player.diamond, tableId: index+"", }); yield diamondrecord.saveAsync(); } } getGoodsList[getGoodsList.length] = { rewardT: 1,//钻石 rewardC: addDimand } } let returndata = { type: type, index: index, getGoodsList: getGoodsList, } return next(null, { code: C.OK,data:returndata }); }); // 签到信息 proto.signInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } this.checkVersion2(); var today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0); var signinfo = yield this.app.models.SignInfo.findByIdAsync(session.uid); if (!signinfo) { signinfo = new this.app.models.SignInfo({ _id: session.uid }); yield signinfo.saveAsync(); } else if (signinfo.lastTime < today.getTime() - 86400000) { signinfo.keep = 0; yield signinfo.saveAsync(); } else if (signinfo.keep >= 7 && signinfo.lastTime < today.getTime()) { signinfo.keep = 0; yield signinfo.saveAsync(); } var hasSign = signinfo.lastTime < today.getTime() ? 0 : 1; var hasShare = signinfo.shareTime < today.getTime() ? 0 : 1; let signAwards = confHall.signAwards || {}; let data = { keep: signinfo.keep, signAwards:signAwards, hasSign: hasSign, hasShare: hasShare } return next(null, { code: C.OK, data:data }); }); // 签到处理 proto.signIn = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0); var signinfo = yield this.app.models.SignInfo.findByIdAsync(session.uid, '-shareTime'); if (!signinfo) { signinfo = new this.app.models.SignInfo({ _id: session.uid }); } else if (signinfo.lastTime < today.getTime() - 86400000) { signinfo.keep = 0; } else if (signinfo.keep >= 7 && signinfo.lastTime < today.getTime()) { signinfo.keep = 0; } if (signinfo.lastTime >= today.getTime()) { return next(null, { code: C.FAILD, msg: C.HALL_ALREADY_SIGN }); } signinfo.keep += 1; signinfo.lastTime = Date.now(); yield signinfo.saveAsync(); let signAwards = confHall.signAwards || {}; var diamond = signAwards[signinfo.keep] || 0; let diamondNew = 0; if (diamond > 0) { let player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond userId'); // player.diamond += diamond; // diamondNew = player.diamond+diamond; // yield player.saveAsync(); // // 钻石记录 // var diamondrecord = new this.app.models.DiamondRecord({ // _id: uuid.v1(), // playerId: session.uid, // dType: 10,//签到 // dSource: player.diamond - diamond, // dSwap: diamond, // dNow: player.diamond // }); // yield diamondrecord.saveAsync(); //上面是通过恭喜获得直接领取下面是签到之后钻石通过邮件给玩家发放 yield this.lconfigCommon.senMailToPlayer(session.uid,player.userId,13,13,1,1,diamond,"sign"); let signrecord = new this.app.models.SignRecord({ _id: uuid.v1(), uid: session.uid, diamond: diamond }); yield signrecord.saveAsync(); } return next(null, { code: C.OK, diamond: diamond,diamondNew:diamondNew }); }); // 实名认证 proto.shiMingRenZheng = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.name && !msg.cardId) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } if (msg.name.length <= 0 || msg.cardId.length <= 0) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } // console.warn("使命认证传上来的 name "+msg.name+" cardId "+msg.cardId); var player = yield this.app.models.Player.findByIdAsync(session.uid, 'smName smCardId'); if (player) { player.smName = msg.name; player.smCardId = msg.cardId; yield player.saveAsync(); } let data = { name: msg.name, cardId: msg.cardId } return next(null, { code: C.OK, data: data }); }); // 2020国庆签到和邀请新人任务完成信息 proto.activeSignInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var uid = session.uid; var acType = parseInt(msg.acType)||0; let startTime = 1601481600000;////20201001零点的时间戳,用来查询数据库 let endTime = startTime + 86400000*8;////20201001这天截止的时间戳 let wcqk = [];////活动期间完成情况 if(acType == 1) wcqk = [[0,2],[0,2],[0,2],[0,2],[0,2],[0,2],[0,2],[0,2]];//[已完成,任务总局数] if(acType == 2){ wcqk = [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]];//[完成任务人数,总奖励] uid = parseInt(msg.uid)||0 ;//+ ''; } var opts = { stime: { $gte: startTime, $lt: endTime },type: { $gte: acType, $lt: acType+1 }}; opts['rid'] = uid; var list = yield this.app.models.ActiveRewardRecord.findMongoAsync(opts, 'totalfee type gameCount stime succState', { sort: { stime: 1 } });// // console.warn("2020国庆签到和邀请新人任务完成信息------------------length",list.length,uid,acType,msg.acType); let startTime2 = 1601481600000;////20201001零点的时间戳,用来当天的完成情况 let endTime2 = startTime + 86400000;////20201001这天截止的时间戳 let rwzjl = 0;////任务总奖励 let index = 0; for (let i = 0; i < list.length; ++i) { if(acType == 1 && list[i].type == 1){////国庆签到 index = Math.floor((list[i].stime-startTime)/86400000);////今天是活动的第几天 wcqk[index][0] = list[i].gameCount; wcqk[index][1] = 2; if(list[i].succState){ rwzjl += list[i].totalfee; } } else if(acType == 2 && list[i].type == 2){////国庆邀请 if(list[i].succState){ index = Math.floor((list[i].stime-startTime)/86400000);////今天是活动的第几天 wcqk[index][0]++;////这天被自己邀请的人完成任务的人数 wcqk[index][1]+=list[i].totalfee;////这天被自己邀请的人完成任务的奖励总额 rwzjl += list[i].totalfee; } } } let jlffqk = 0;////0:未领取,1已领取,2已发放 var opts2 = {type: { $gte: acType, $lt: acType+1 }}; opts2['rid'] = session.uid; var list2 = yield this.app.models.ActiveReceiveRecord.findMongoAsync(opts2, 'type payState', { sort: { time: 1 } });// if(list2.length > 0){ if(list2[0].payState == 1) jlffqk = 1; else jlffqk = 2; } let jtshddjt = Math.ceil((Date.now()-startTime)/86400000);////今天是活动的第几天 let data = { rwzjl: rwzjl, wcqk: wcqk, acType: acType, jlffqk: jlffqk, jtshddjt: jtshddjt } return next(null, { code: C.OK, data: data }); }); // 得到该日2020国庆邀请新人该日任务的详细信息 proto.getActiveYQXQ = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var uid = session.uid; var acType = parseInt(msg.acType)||0; if(acType == 2){ uid = parseInt(msg.uid)||0 ; } var dayIndex = parseInt(msg.dayIndex)||0;////查询活动日期的下标 let startTime = 1601481600000 + 86400000*dayIndex;////20201001零点的时间戳,用来查询数据库 let endTime = startTime + 86400000;////20201001这天截止的时间戳 let wcqk = [];////活动期间完成情况 var opts = { stime: { $gte: startTime, $lt: endTime },type: { $gte: acType, $lt: acType+1 }}; opts['rid'] = uid; var list = yield this.app.models.ActiveRewardRecord.findMongoAsync(opts, 'rewardtype totalfee type sname suid gameCount succtime succState', { sort: { stime: 1 } });// // console.warn("2020国庆签到和邀请新人任务完成信息------------------length",list.length,uid,acType,msg.acType,dayIndex); for (let i = 0; i < list.length; ++i) { if(acType == 2 && list[i].type == 2){////国庆邀请 if(list[i].succState){ let item = { rewardtype: list[i].rewardtype, totalfee: list[i].totalfee, sname: list[i].sname, suid: list[i].suid, succtime: list[i].succtime } wcqk[wcqk.length] = item; } } } let jtshddjt = dayIndex + 1;//Math.ceil((Date.now()-startTime)/86400000);////今天是活动的第几天 let data = { wcqk: wcqk, acType: acType, jtshddjt: jtshddjt } return next(null, { code: C.OK, data: data }); }); // 2020国庆签到和邀请新人任务领取奖励 proto.activeSignLQJL = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var uid = session.uid; var acType = parseInt(msg.acType)||0; if(acType == 2){ uid = parseInt(msg.uid)||0 ;//+ ''; } let startTime = 1601481600000;////20201001零点的时间戳,用来查询数据库 let endTime = startTime + 86400000*8;////20201001这天截止的时间戳 if (Date.now() < endTime) { return next(null, { code: C.ERROR, msg: "请您活动结束之后统一领取。" }); } var opts2 = {type: { $gte: acType, $lt: acType+1 }}; opts2['rid'] = session.uid; var list2 = yield this.app.models.ActiveReceiveRecord.findMongoAsync(opts2, 'type payState', { sort: { time: 1 } });// // console.warn("2020国庆签到和邀请新人任务领取奖励------------------length",list2.length,uid,acType,msg.acType); if(list2.length > 0){ if(list2[0].payState == 1) return next(null, { code: C.ERROR, msg: "当前活动您的奖励正在等待发放" }); else return next(null, { code: C.ERROR, msg: "当前活动您的奖励已发放" }); } var opts = { stime: { $gte: startTime, $lt: endTime },type: { $gte: acType, $lt: acType+1 }}; opts['rid'] = uid; var list = yield this.app.models.ActiveRewardRecord.findMongoAsync(opts, 'rid suid rewardtype totalfee type succtime succState', { sort: { succtime: 1 } });// // console.warn("2020国庆签到和邀请新人任务领取奖励------------------length",list.length,uid,acType,msg.acType); if(list.length == 0) return next(null, { code: C.ERROR, msg: "当前活动您没有可领取的奖励" }); let rwzjl = 0;////任务总奖励 let retype = 0;// 奖励类型 let ruid = 0;// 此条奖励领取的玩家userId for (let i = 0; i < list.length; ++i) { if(list[i].succState && list[i].type == acType){////该活动的所有记录 rwzjl += list[i].totalfee; retype = list[i].rewardtype; if(ruid == 0){ if(acType == 1) ruid = list[i].suid;////国庆签到 else if(acType == 2) ruid = parseInt(list[i].rid);////国庆邀请 } } } var activereciverec = new this.app.models.ActiveReceiveRecord({ _id: uuid.v1(), // UUID rewardtype: retype, // 奖励类型,0红包 type: acType, //活动类型:1国庆签到2国庆邀请 rid: session.uid, // 此条奖励领取的玩家id ruid: ruid, // 此条奖励领取的玩家userId outSwap: rwzjl, // 领取金额 totalFee: 0, // 发放金额 payState: 1, // 支付状态 1为未支付 2人工支付 3支付成功 }); yield activereciverec.saveAsync(); let jtshddjt = Math.ceil((Date.now()-startTime)/86400000);////今天是活动的第几天 let jlffqk = 1;////0:未领取,1已领取,2已发放 let data = { acType: acType, jlffqk: jlffqk, jtshddjt: jtshddjt } return next(null, { code: C.OK, data: data }); }); // 查询钻石充值赠送 proto.getPayGiven = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var uid = session.uid; let total_fee = parseInt(msg.total_fee) || 0; // delete require.cache[require.resolve('../../../../http/conf.json')]; let conf2 = require('../../../../http/conf.json'); let giveList = conf2.give_diamonds || {}; let diamondsList = conf2.pay_diamonds || {}; let RMBData = conf2.pay_RMB_Fen || {}; let RMBList = []; for (let item in RMBData) { RMBList.push(RMBData[item]); } var value2 = giveList[total_fee]; //下面是玩家每日充值上限逻辑 // let wjsx0 = yield this.app.models.PayLimit.findByIdReadOnlyAsync("quanjutop", 'paytop paytotal dataTime'); // if (wjsx0){ // wjsx0.removeAsync(); // console.warn("删除quanjutop"); // } // let wjsx1 = yield this.app.models.PayLimit.findByIdReadOnlyAsync("2abnnnnnn12a@my2019", 'paytop paytotal dataTime'); // if (wjsx1){ // wjsx1.removeAsync(); // console.warn("删除12a"); // } // let wjsx2 = yield this.app.models.PayLimit.findByIdReadOnlyAsync("2abnnnnnn12b@my2019", 'paytop paytotal dataTime'); // if (wjsx2){ // wjsx2.removeAsync(); // console.warn("删除12b"); // } let jrzcz = 0;//今日总充值 let jrczsx = 50000;//今日充值上限 var startTime = this.lconfigCommon.getTodaySJC(); let wjsx = yield this.app.models.PayLimit.findByIdReadOnlyAsync(uid, 'paytop paytotal dataTime'); if (wjsx) { if (startTime == wjsx.dataTime) { jrzcz = wjsx.paytotal;//今日总充值 } if (wjsx.paytop >= 0) { jrczsx = wjsx.paytop;//玩家上限 } else{ let qjsx = yield this.app.models.PayLimit.findByIdReadOnlyAsync('quanjutop', 'paytop'); if (qjsx) { jrczsx = qjsx.paytop;//全局上限 } } } else{ var endTime = startTime + 86400000; var opts = { time: { $gte: startTime, $lt: endTime },playerId: uid, paystate: { $gte: 1 }}; var list = yield this.app.models.PayRecord.findMongoAsync(opts, 'total_fee'); for (let i = 0; i < list.length; ++i) { jrzcz += list[i].total_fee; } let qjsx = yield this.app.models.PayLimit.findByIdReadOnlyAsync('quanjutop', 'paytop'); if (qjsx) { jrczsx = qjsx.paytop;//全局上限 } else{ var newqjsx = new this.app.models.PayLimit({ _id: 'quanjutop', userId: 1, name: '全局充值上限', paytop: 50000, paytotal: 0, dataTime: startTime, }); yield newqjsx.saveAsync(); jrczsx = newqjsx.paytop; } var newwjsx = new this.app.models.PayLimit({ _id: uid, userId: 0, name: '', paytop: -1, paytotal: jrzcz, dataTime: startTime, }); yield newwjsx.saveAsync(); } // console.warn("查询钻石充值赠送 jrzcz "+jrzcz+" jrczsx "+jrczsx); let jpqsysj = 0;//记牌器剩余时间 let sfscjpq = 1;//是否首次充值记牌器,用于前端是否展示半价 let sfzsmfsy = 1;//是否展示免费试用 let jipaiqi = yield this.app.models.JiPaiQi.findByIdAsync(session.uid, 'times0 times1 times2 jpqdqsj lastBuyTime'); if (jipaiqi) { if(jipaiqi.jpqdqsj > 0) { jpqsysj = jipaiqi.jpqdqsj - Date.now(); sfzsmfsy = 0; } if(jipaiqi.times1 > 0 || jipaiqi.times2 > 0) sfscjpq = 0; } let data = { currtime: Date.now(), jrzcz: jrzcz, jrczsx: jrczsx, giveList: giveList, diamondsList: diamondsList, RMBList: RMBList, jpqsysj: jpqsysj, sfscjpq: sfscjpq, sfzsmfsy: sfzsmfsy, value2: value2 } return next(null, { code: C.OK, data: data }); }); ////推广员查询 proto.tgyInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var uid = session.uid; let tgState = 1;////未申请=1;正在审核=2;审核成功=3,审核失败=4 let myUrl = ""; var agenterList = yield this.app.models.Agenter.findMongoAsync({playerId:uid}, 'myUrl'); if (agenterList.length > 0) { myUrl = agenterList[0].myUrl + "/agent"; tgState = 3; } else{ var player = yield this.app.models.tgApply.findByIdReadOnlyAsync(uid, 'tgState'); if (player) { tgState = player.tgState; } } return next(null, { code: C.OK, tgState: tgState,myUrl:myUrl }); }); ////申请推广员 proto.applyTGY = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } ////所申请的推广员姓名 if(!msg.tgName || msg.tgName == ""){ return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } ////所申请的推广员手机号 if(!msg.tgPhone || msg.tgPhone == ""){ return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } ////所申请的推广员微信号 if(!msg.tgWXNumber || msg.tgWXNumber == ""){ return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } var uid = session.uid; let tgState = 2;////未申请=1;正在审核=2;审核成功=3,审核失败=4 // console.warn("申请推广员 tgName "+msg.tgName+" tgPhone "+msg.tgPhone+" tgWXNumber "+msg.tgWXNumber); var player = yield this.app.models.tgApply.findByIdReadOnlyAsync(uid); if (!player) { var tgapply = new this.app.models.tgApply({ _id: uid, applyType: 1, parenteId:"", tgName: msg.tgName, tgPhone: msg.tgPhone, tgWXNumber: msg.tgWXNumber, tgState: tgState }); yield tgapply.saveAsync(); } else{ return next(null, { code: C.FAILD, msg: C.HALL_ALREADY_BNCFTJ}); } return next(null, { code: C.OK, tgState: tgState }); }); // 分享处理 proto.share = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0); var signinfo = yield this.app.models.SignInfo.findByIdAsync(session.uid, 'shareTime'); if (!signinfo) { signinfo = new this.app.models.SignInfo({ _id: session.uid }); } var diamond = 0; let whdata = yield this.app.models.WHstate.findByIdReadOnlyAsync('wh', 'shareGive'); // console.warn("22检查是否维护状态",whdata); if (whdata) { if(whdata.shareGive || whdata.shareGive == 0){/// /////维护状态中 diamond = whdata.shareGive; } else{ let whdata2 = yield this.app.models.WHstate.findByIdAsync('wh', 'shareGive'); if (whdata2) { whdata2.shareGive = 50; yield whdata2.saveAsync(); diamond = 50; } } } if (signinfo.shareTime < today.getTime() && diamond > 0) { signinfo.shareTime = Date.now(); yield signinfo.saveAsync(); let player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond'); player.diamond += diamond; yield player.saveAsync(); // 钻石记录 var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: session.uid, dType: 12,//分享 dSource: player.diamond - diamond, dSwap: diamond, dNow: player.diamond }); yield diamondrecord.saveAsync(); } else{ diamond = 0; } return next(null, { code: C.OK, diamond: diamond }); }); // 统计信息 proto.gameInfo = P.coroutine(function* (msg, session, next) { // console.warn("统计信息gameInfo",session.uid,msg); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } //var time= new Date(); //var today= util.format('%d-%d-%d', time.getFullYear(), time.getMonth() + 1, time.getDate()); //var today = new Date(); // today.setHours(0); // today.setMinutes(0); // today.setSeconds(0); // today.setMilliseconds(0); //var uid = session.uid +'-'+today;//今天 //console.warn("ts+++++统计信息",uid); //var uid1 = session.uid +'-'+ new Date(new Date().getTime() - 86400000).Format("yyyy-MM-dd");//昨天 let ttCount=0; let winCount=0; // let gamer = yield this.app.models.SXGamer.findByIdReadOnlyAsync(uid, 'ttCount winCount'); // if (gamer) // { // ttCount+= gamer.ttCount; // winCount+= gamer.winCount; // } // let gamer1 = yield this.app.models.SXGamer.findByIdReadOnlyAsync(uid1, 'ttCount winCount'); // if (gamer1) // { // ttCount+= gamer1.ttCount; // winCount+= gamer1.winCount; // } var list = []; list.push({ gameId: 10007, ttCount: ttCount, winCount: winCount }); return next(null, { code: C.OK, list: list }); //uid = '85456dda-5119-a2bc-3c2d-f17f74a19fa6@my2016'/////TL++ // var uid = '12e3cf2b-4b54-f782-c041-9d959c0a0d25@my2016' // var list = []; // for (let gameId = 10001; gameId <= 10009; ++gameId) { // let gamer = null; // switch (gameId) { // case 10003: gamer = yield this.app.models.NNGamer.findByIdReadOnlyAsync(uid, 'ttCount winCount'); break; // case 10006: gamer = yield this.app.models.TWGamer.findByIdReadOnlyAsync(uid, 'ttCount winCount'); break; // case 10007: gamer = yield this.app.models.SXGamer.findByIdReadOnlyAsync(uid, 'ttCount winCount'); break; // } // if (gamer) list.push({ gameId: gameId, ttCount: gamer.ttCount, winCount: gamer.winCount }); // } // return next(null, { code: C.OK, list: list }); }); // 历史战绩 proto.getHistory = P.coroutine(function* (msg, session, next) { // console.warn("历史战绩getHistory"); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var data = { ttCount: '0', winCount: '0', winRate: '0', listCount: '0', list: [] }; //console.warn("2222历史记录getHistory",session.uid); var uid = session.uid; //uid = 'o79wPwCrz9fMdTg2vQ1PePqGB1es@my2019' //console.warn("历史战绩uid",uid); var today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0); let ttCount=0; let winCount=0; let winRate=0; let listCount=0; var startTime =today.getTime() - 86400000; var endTime =today.getTime() + 86400000; //console.warn("历史战绩Time",startTime,endTime); var opts = { time: { $gte: startTime, $lt: endTime },over: { $gte: 1 }}; opts['users._id'] = uid; // logger.warn("hall findMongoAsync users._id333--------" + uid ); var list = yield this.app.models.FHMJTables.findMongoAsync(opts, '_id gameId tableNo agentId type kind other playerCount round over ctime stime time endMode sszj users', { sort: { time: -1 } ,limit:10});//ownerId sszjFile // console.warn("战绩-------------------length",list.length); for (let i = 0; i < list.length; ++i) { let record = list[i]; ttCount++; let user = record.users.id(uid);//////词句报错所以 if(user) { if(user.score>0)winCount++; } if(i<10) { listCount++; let item = { _id:record._id, gameId: record.gameId, tableNo: record.tableNo, agentId: record.agentId, type: record.type, kind: record.kind, other: record.other, playerCount: record.playerCount, round: record.round, over: record.over, time: record.time, ctime: record.ctime, stime: record.stime, // sszjFile: record.sszjFile, sszj: record.sszj, users: record.users }; //console.warn("战绩-------------------",item); data.list.push(item); } } if(ttCount>0) { winRate=parseInt(winCount*100/ttCount); } data.ttCount=String(ttCount); data.winCount=String(winCount); data.winRate=String(winRate); data.listCount=String(listCount); return next(null, { code: C.OK, data: data }); }); ////得到玩家信息 参数为6位数的玩家ID proto.getPeopleInfo = P.coroutine(function* (msg, session, next) { // console.warn("得到玩家信息 参数为6位数的玩家ID",msg); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.userId) { return next(null, { code: C.ERROR, msg: C.HALL_NOT_PLAYER }); } let uid = "" + msg.userId; if (uid.length != 6) { return next(null, { code: C.ERROR, msg: C.HALL_NOT_PLAYER }); } uid = parseInt(uid); let player = yield this.app.models.Player.findMongoAsync({userId:uid}, 'userId name headurl'); if (player.length > 0) { let playerdata = player[0]; // console.warn("得到玩家信息 ",uid,playerdata); let jrzcz = 0;//今日总充值 let jrczsx = 50000;//今日充值上限 var startTime = this.lconfigCommon.getTodaySJC(); let wjsx = yield this.app.models.PayLimit.findByIdReadOnlyAsync(playerdata._id, 'paytop paytotal dataTime'); if (wjsx) { if (startTime == wjsx.dataTime) { jrzcz = wjsx.paytotal;//今日总充值 } if (wjsx.paytop >= 0) { jrczsx = wjsx.paytop;//玩家上限 } else{ let qjsx = yield this.app.models.PayLimit.findByIdReadOnlyAsync('quanjutop', 'paytop'); if (qjsx) { jrczsx = qjsx.paytop;//全局上限 } } } else{ var endTime = startTime + 86400000; var opts = { time: { $gte: startTime, $lt: endTime },playerId: uid, paystate: { $gte: 1 }}; var list = yield this.app.models.PayRecord.findMongoAsync(opts, 'total_fee'); for (let i = 0; i < list.length; ++i) { jrzcz += list[i].total_fee; } let qjsx = yield this.app.models.PayLimit.findByIdReadOnlyAsync('quanjutop', 'paytop'); if (qjsx) { jrczsx = qjsx.paytop;//全局上限 } } let sfscjpq = 1;//是否首次充值记牌器,用于前端是否展示半价 let jipaiqi = yield this.app.models.JiPaiQi.findByIdAsync(playerdata._id, 'times0 times1 times2 jpqdqsj lastBuyTime'); if (jipaiqi) { if(jipaiqi.times1 > 0 || jipaiqi.times2 > 0) sfscjpq = 0; } let data22 = { userId : playerdata.userId, jrzcz: jrzcz, jrczsx: jrczsx, sfscjpq: sfscjpq, name : playerdata.name, headurl : playerdata.headurl } return next(null, { code: C.OK, data : data22}); } return next(null, { code: C.ERROR, msg: C.HALL_NOT_PLAYER }); }); // 房间记录 proto.tableRecord = P.coroutine(function* (msg, session, next) { // console.warn("取数据酷读取战绩",msg.tid); if (!session.uid) { return next(null, { code: C.ERROR,tid:'', msg: C.PLAYER_NOT_LOGIN }); } if (!msg.tid) { return next(null, { code: C.FAILD, tid:'',msg: C.GAME_PARAM_ERROR }); } // logger.warn("hall findByIdReadOnlyAsync tid444--------" + msg.tid ); var record = yield this.app.models.FHMJTables.findByIdReadOnlyAsync(msg.tid); if (!record) { // console.warn("这个房间没有战绩",msg.tid); return next(null, { code: C.FAILD,tid:msg.tid, msg: C.TABLE_NOT_FOUND }); } let data = { _id:record._id, gameId: record.gameId, tableNo: record.tableNo, type: record.type, kind: record.kind, round: record.round, over: record.over, time: record.time, ctime: record.ctime, sszjFile: record.sszjFile, sszj: record.sszj, users: record.users }; // console.warn("这个房间de战绩shi",record); return next(null, { code: C.OK, data: data }); }); //ts++得到下一局的信息 proto.getTableNext = P.coroutine(function* (msg, session, next) { // console.warn("000得到下一局的信息-------------------",msg); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } // console.warn("得到下一局的信息-------------------",msg.tid); if (!msg.tid) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } // logger.warn("hall findByIdReadOnlyAsync tid555--------" + msg.tid ); var record = yield this.app.models.FHMJTables.findByIdReadOnlyAsync(msg.tid,'_id gameId tableNo type kind round over time playerCount other'); //console.warn("得到下一局的信息-------------------",(!record),record); if (!record) { // console.warn("得到下一局的信息查找桌子不存在"); return next(null, { code: C.FAILD, msg: C.TABLE_NOT_FOUND }); } let data = { _id:record._id, gameId: record.gameId, tableNo: record.tableNo, type: record.type, kind: record.kind, round: record.round, over: record.over, time: record.time }; //console.warn("xxx得到下一局的信息-------------------",data) return next(null, { code: C.OK, data: data }); }); // tl++得到比赛时间,在大厅里使用 proto.getBiSaiHall = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.aid) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); // console.warn("获取比赛信息 aidsub "+aidsub+" agentId "+agentId); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return next(null, { 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', { sort: { stime: 1 } }); let bsInfo = null; for (var i = 0; i < timelist.length; i++) { if(timelist[i].stime >= nowTime || (timelist[i].stime <= nowTime && timelist[i].etime > nowTime)){ bsInfo = timelist[i]; break; } } let data = { bsInfo:bsInfo, jrStart:jrStart, nowTime:nowTime } return next(null, { code: C.OK, data: data }); }); // tl++得到比赛信息 proto.getBiSaiInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.aid) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); // console.warn("获取比赛信息 aidsub "+aidsub+" agentId "+agentId); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return next(null, { 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', { sort: { stime: 1 } }); // if(timelist.length == 0){ // console.warn("没有数据,插入测试数据"); // var newRaceTime = this.app.models.RaceTimeInfos({ // _id: uuid.v1(), // UUID 标识 // aid: "promote_1001_hNzm6WDMfGLUFdSPFu", // 比赛代理的标识 // agentNo: 880003,// 比赛代理编号 // stime: 1681867800000, // 该次比赛的开始时间 // etime: 1681871400000, // 该次比赛的结束时间 // gameId: 10006, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快 // bigRound: 3, //本场比赛的大局数量,统计战绩时使用 // round: 12, // 该次比赛的游戏局数 // playerCount: 4, // 该次比赛的游戏人数 // other: 79 // 该次比赛的游戏规则 // }); // yield newRaceTime.saveAsync(); // var newRaceTime1 = this.app.models.RaceTimeInfos({ // _id: uuid.v1(), // UUID 标识 // aid: "promote_1001_hNzm6WDMfGLUFdSPFu", // 比赛代理的标识 // agentNo: 880003,// 比赛代理编号 // stime: 1681885800000, // 该次比赛的开始时间 // etime: 1681889400000, // 该次比赛的结束时间 // gameId: 10007, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快 // bigRound: 3, //本场比赛的大局数量,统计战绩时使用 // round: 16, // 该次比赛的游戏局数 // playerCount: 3, // 该次比赛的游戏人数 // other: 9 // 该次比赛的游戏规则 // }); // yield newRaceTime1.saveAsync(); // var newRaceTime2 = this.app.models.RaceTimeInfos({ // _id: uuid.v1(), // UUID 标识 // aid: "promote_1001_hNzm6WDMfGLUFdSPFu", // 比赛代理的标识 // agentNo: 880003,// 比赛代理编号 // stime: 1681896600000, // 该次比赛的开始时间 // etime: 1681900200000, // 该次比赛的结束时间 // gameId: 10008, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快 // bigRound: 3, //本场比赛的大局数量,统计战绩时使用 // round: 10, // 该次比赛的游戏局数 // playerCount: 3, // 该次比赛的游戏人数 // other: 74 // 该次比赛的游戏规则 // }); // yield newRaceTime2.saveAsync(); // var newRaceTime3 = this.app.models.RaceTimeInfos({ // _id: uuid.v1(), // UUID 标识 // aid: "promote_1001_hNzm6WDMfGLUFdSPFu", // 比赛代理的标识 // agentNo: 880003,// 比赛代理编号 // stime: 1681977600000, // 该次比赛的开始时间 // etime: 1681981200000, // 该次比赛的结束时间 // gameId: 10008, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快 // bigRound: 3, //本场比赛的大局数量,统计战绩时使用 // round: 10, // 该次比赛的游戏局数 // playerCount: 2, // 该次比赛的游戏人数 // other: 74 // 该次比赛的游戏规则 // }); // yield newRaceTime3.saveAsync(); // var newRaceTime4 = this.app.models.RaceTimeInfos({ // _id: uuid.v1(), // UUID 标识 // aid: "promote_1001_hNzm6WDMfGLUFdSPFu", // 比赛代理的标识 // agentNo: 880003,// 比赛代理编号 // stime: 1682150400000, // 该次比赛的开始时间 // etime: 1682154000000, // 该次比赛的结束时间 // gameId: 10008, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快 // bigRound: 3, //本场比赛的大局数量,统计战绩时使用 // round: 10, // 该次比赛的游戏局数 // playerCount: 3, // 该次比赛的游戏人数 // other: 74 // 该次比赛的游戏规则 // }); // yield newRaceTime4.saveAsync(); // } let xzsfcybs = false;//现在是否处于比赛时间 let ckszbsccxx = null;//此刻所处比赛场的比赛信息 for (var i = 0; i < timelist.length; i++) { if(timelist[i].stime <= nowTime && nowTime < timelist[i].outTime){ xzsfcybs = true; ckszbsccxx = timelist[i]; break; } } if(xzsfcybs){ // console.warn("现在是处于比赛时间 设置定时器检查人数变化"); } else{ this.app.controllers.bisai.clearPlayers(agentId); // console.warn("现在不是处于比赛时间 清空匹配列表"); } let wantBSUList = this.app.controllers.bisai.getPlayers(agentId) // console.warn("hallhander 得到列表 长度111 "+wantBSUList.length + JSON.stringify(wantBSUList)); let nowCount = wantBSUList.length;//目前正在匹配的玩家个数 let allScore = 0;//本场比赛该玩家目前的总分 let over = 0;////本场比赛该玩家完成的大局数 if(xzsfcybs && ckszbsccxx){ timelist = [ckszbsccxx]; var opts = { stime: { $gte: ckszbsccxx.stime, $lt: ckszbsccxx.etime }, over: { $gte: 1 } }; opts['agentId'] = agentId; opts['users._id'] = uid; var list = yield this.app.models.FHMJTables.findMongoAsync(opts, '_id gameId tableNo agentId type kind other playerCount round over ctime stime time endMode users', { sort: { stime: 1 } ,limit:xzsfcybs.bigRound}); // console.warn("战绩-------------------length",list.length); for (let i = 0; i < list.length; ++i) { let bjus = list[i].users; for (let j = 0; j < bjus.length; ++j) { if(bjus[j]._id == uid){ allScore += bjus[j].score; } } } over = list.length; } let data = { timelist:timelist, nowTime:nowTime, jrStart:jrStart, nowCount:nowCount, allScore:allScore, over:over, } return next(null, { code: C.OK, data: data }); }); // tl++得到是否禁赛 proto.getIsJinSai = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let uid = session.uid; var jinsai = yield this.app.models.JinSaiInfo.findByIdAsync(uid, '_id userId'); if (jinsai) return next(null, { code: C.FAILD, msg: "您已被禁赛。" }); return next(null, { code: C.OK, data: {} }); }); // tl++开始/继续比赛 proto.toBiSai = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.aid) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); // console.warn("开始/继续比赛 aidsub "+aidsub+" agentId "+agentId); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return next(null, { code: C.FAILD, msg: "is not compete aid" });//非比赛链接 let nowTime2 = Date.now(); // nowTime2 = 1681977609000; var opts = { stime: { $lte: nowTime2 }, etime: { $gt: nowTime2 }, outTime: {$gt: nowTime2}//过期时间大于当前时间 }; opts['aid'] = agentId; let timelist = yield this.app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime', { sort: { stime: 1 } }); // console.warn(">>>>>>>>>>>>>>>.. "+timelist.length); if(timelist.length == 0){ // setTimeout(() => this.dsqjcrsbh(null,-1,agentId),500); this.app.controllers.bisai.setNowBSInfo([],agentId); return next(null, { code: C.FAILD, msg: "current no compate"}); } else if(timelist.length > 1){ // setTimeout(() => this.dsqjcrsbh(null,-1,agentId),500); this.app.controllers.bisai.setNowBSInfo([],agentId); return next(null, { code: C.FAILD, msg: "current have more compate"}); } var notTogthers = yield this.app.models.NotGameTogther.findMongoAsync({ },'_id uidList pidList'); this.app.controllers.bisai.setNotGameTogther(notTogthers); // console.warn("不能同桌的玩家信息hhh "+JSON.stringify(notTogthers)); this.app.controllers.bisai.setNowBSInfo(timelist,agentId); this.app.controllers.bisai.addPlayer(uid,agentId); let wantBSUList = this.app.controllers.bisai.getPlayers(agentId); // console.warn("hallhander 得到列表 长度222 "+wantBSUList.length + JSON.stringify(wantBSUList)); let nowCount = wantBSUList.length;//目前正在匹配的玩家个数 let allCount = timelist[0].playerCount; let kxzz = this.app.controllers.bisai.getKXTables(agentId);//该比赛链接空闲桌子 // setTimeout(() => this.dsqjcrsbh(timelist[0],-1,agentId),500); if(kxzz.length < 1){ //匹配人数大于等于2时系统创房 // console.warn("匹配人数大于等于2时系统创房 "); // delete require.cache[require.resolve('../../../../share/configCommon')]; // configCommon = require('../../../../share/configCommon'); // this.lconfigCommon = new configCommon(this.app); // let data = yield this.lconfigCommon.toBiSai(msg, session,wantBSUList); //创建房间 let creatData = { playerId:"system_promote", round:timelist[0].round, type:1, gameKind:1, playerAllCount:timelist[0].playerCount, upId:"", other:timelist[0].other, agentId:msg.aid } this.app.rpc.game.paodekuaiRemote.creatTable.toServer("game-server-11", creatData, (fh) => { // console.warn("创建房间完成 ",fh); }); } else{ this.app.controllers.bisai.addTable(kxzz[0],agentId,allCount); } // setTimeout(() => this.dsqjcrsbh(timelist[0],-1,agentId),5000); let data = { aid:agentId, nowCount: wantBSUList.length, allCount: allCount } return next(null, { code: C.OK, data: data }); }); // // tl++取消匹配 // proto.cancelPiPei = P.coroutine(function* (msg, session, next) { // if (!session.uid) { // return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); // } // let uid = session.uid; // this.app.controllers.bisai.delPlayer(uid); // return next(null, { code: C.OK}); // }); // tl++获取比赛排名 proto.getBiSaiPaiMing = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.aid) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); // console.warn("获取比赛排名 aidsub "+aidsub+" agentId "+agentId); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return next(null, { 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', { sort: { stime: 1 } }); if(timelist.length == 0){ this.app.controllers.bisai.setNowBSInfo([],agentId); return next(null, { code: C.FAILD, msg: "today no compate"}); } let userid = msg.userid||1; let userList = [];//今日比赛所有参与的玩家uid let nameList = [];//今日比赛所有参与的玩家昵称 let scoreList = [];//今日比赛所有参与的玩家的分数 let ccList = [];//今日比赛所有参与的玩家已经统计分数的场次 let ckszbsccxx = timelist[0];//此刻所处比赛场的比赛信息 let iszzpm = false;//是否是最终排名(比赛过程中统计的排名并非本场比赛最终的排名) if(ckszbsccxx){ let jlbspmgbsj = (ckszbsccxx.etime + 15*60*1000) - nowTime;//距离比赛排名公布时间 if(jlbspmgbsj >= 0 && nowTime >= ckszbsccxx.etime){ //比赛结束时间15分钟之后才去统计比赛排名 let da = { aid:agentId, gbpmsjwd: true,//公布排名时间未到 jlbspmgbsj:jlbspmgbsj } // console.warn("还未到比赛公布战绩的时间 "+jlbspmgbsj); return next(null, { code: C.OK, data: da }); } if(jlbspmgbsj < 0) iszzpm = 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 } }); // 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;//今日比赛所有参与的玩家 nameList[xwjxb] = bjus[j].name;//今日比赛所有参与的玩家昵称 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] = { name:nameList[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 < scorersSort.length; ++i) { if(scorersSort[i] && scorersSort[i].uid == userid){ zjmcxx = scorersSort[i]; zjmcxx.mc = i; break; } } let data = { aid:agentId, infoList:qsmInfoList, zjmcxx:zjmcxx, iszzpm: iszzpm } return next(null, { code: C.OK, data: data }); }); // tl++获取比赛奖品 proto.getBiSaiJiangPin = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.aid) { return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } let uid = session.uid; let agentId = msg.aid; let aidsub = agentId.substr(0, 9); // console.warn("获取比赛排名 aidsub "+aidsub+" agentId "+agentId); let bsIndex = aidsub.indexOf("promote_"); if(bsIndex == -1) return next(null, { 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', { sort: { stime: 1 } }); if(timelist.length == 0){ this.app.controllers.bisai.setNowBSInfo([],agentId); let wbsdata = { aid:agentId, nowPlayerCount:0 } return next(null, { code: C.OK, wbsdata: data });//今日无比赛 } let userList = [];//今日比赛所有参与的玩家uid let ckszbsccxx = timelist[0];//此刻所处比赛场的比赛信息 if(ckszbsccxx){ 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;//今日比赛所有参与的玩家 } } } } let data = { aid:agentId, nowPlayerCount:userList.length } return next(null, { code: C.OK, data: data }); }); ////获得是否已领取比赛奖品(4~6名发钻石) proto.getIsTakeBSPrize = P.coroutine(function* (msg, session, next) { let res = yield this.hallLogic.getIsTakeBSPrize(msg, session); return next(null, res); }); ////领取比赛奖品(4~6名发钻石) proto.takeBSPrize = P.coroutine(function* (msg, session, next) { let res = yield this.hallLogic.takeBSPrize(msg, session); return next(null, res); }); // 得到排行榜信息(得到小游戏的排行榜信息) proto.getPaiHangInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let uid = session.uid; let limit = 10;//前10名上榜 var jrStart = this.lconfigCommon.getTodaySJC(); var opts = { time1: jrStart, quan1: { $gt: 0} }; let fields = 'name headurl userId cost1 quan1 time1'; var list = yield this.app.models.SGJPaiHang.findMongoAsync(opts, fields, { sort: { quan1: -1 } ,limit:limit}); let pmInfos = []; for (let i = 0; i < list.length; ++i) { // console.warn("排序之后 ",i,list[i]); let mc = i + 1;//名次=数组下标+1 let diamond = 0; if(mc == 1) diamond = 20000; else if(mc == 2) diamond = 10000; else if(mc == 3) diamond = 5000; else if(mc >= 4 && mc <= 5) diamond = 2000; else if(mc >= 6 && mc <= 10) diamond = 1000; let item = { name: list[i].name, headurl: list[i].headurl, userId: list[i].userId, cost1: list[i].cost1, quan1: list[i].quan1, pmjl: diamond//this.logic.getpmjl(i) } pmInfos[i] = item; } //var zjph = yield this.app.models.SGJPaiHang.findByIdAsync(uid, 'name headurl userId cost1 quan1 time1'); let player = yield this.app.models.Player.findByIdAsync(uid, '_id userId headurl name cost'); opts.userId = player.userId var zjph = yield this.app.models.SGJPaiHang.findMongoAsync(opts); var d = null if (zjph.length > 0) { d = zjph[0] console.warn("getpaihang self:",d) } var quan = 0 if (zjph.length > 0) { quan = zjph[0].quan1 } let data = { pmInfos: pmInfos, zjph: { userId: player.userId, headurl:player.headurl, name:player.name, quan1:quan }, } console.warn("得到排行榜信息(得到小游戏的排行榜信息) ",JSON.stringify(data)); return next(null, { code: C.OK, data : data}); }); ////TL++,反馈接口 前端提交bug用的 proto.feedback = P.coroutine(function* (msg, session, next) { // console.warn("反馈接口 前端提交bug用的",msg); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if(!msg.bugContent && !msg.bugFileName1 && !msg.bugFileName2 && !msg.bugFileName3){ ////bug内容和图片不能同时为空 return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR }); } let str = ""; if(msg.bugContent) str = String(msg.bugContent); if(str.includes(';') || str.includes('*')) { console.warn(str+" 中包含 ;或*"); return next(null, { code: C.FAILD, msg: "不能包含特殊字符" }); } // if(str.indexOf('bug') != -1) console.warn(str+" 中包含 bug"); let zdtjcs = str.length;//Math.floor(str.length/3+1);//最大添加次数 let sjss = [1]; for (var i = 0; i < zdtjcs; i++) { let sjs = Math.floor(Math.random()*4);////// 区间[0,3]取整数 let addIndex = sjss[i] + sjs; console.warn("随机数??? ",sjss[i],sjs,addIndex); if(addIndex > str.length) break; sjss.push(addIndex); } console.warn("最大添加次数 zdtjcs ",zdtjcs,sjss); let newStr = ""; for (var i = 0; i < str.length; i++) { newStr+=str[i]; if(sjss.indexOf(i) != -1) newStr+="?"; } console.warn("处理之后 ",str,newStr); //let playerId = md5(session.uid).toLowerCase()// 玩家ID let bugContent = "无内容";// bug内容 let bugFileName1 = "";// bug图片文件1 let bugFileName2 = "";// bug图片文件2 let bugFileName3 = "";// bug图片文件3 // if(msg.bugContent) bugContent = String(msg.bugContent); if(msg.bugContent) bugContent = newStr; if(msg.bugFileName1) bugFileName1 = String(msg.bugFileName1); if(msg.bugFileName2) bugFileName2 = String(msg.bugFileName2); if(msg.bugFileName3) bugFileName3 = String(msg.bugFileName3); // console.warn("111xxxxxxxxx反馈接口 前端提交bug用的",bugContent,bugFileName1,bugFileName2,bugFileName3); // console.warn("222xxxxxxxxx反馈接口 前端提交bug用的",msg.bugContent,msg.bugFileName1,msg.bugFileName2,msg.bugFileName3); var bugrecords = new this.app.models.BugRecords({ _id: uuid.v1(), playerId: session.uid, bugContent: bugContent, bugFileName1: bugFileName1, bugFileName2: bugFileName2, bugFileName3: bugFileName3 }); yield bugrecords.saveAsync(); return next(null, { code: C.OK }); }); ////TL++,反馈查询接口 前端查询自己提交历史用的 proto.feedbackInfo = P.coroutine(function* (msg, session, next) { // console.warn("反馈接口 前端提交bug用的",msg); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } var list = yield this.app.models.BugRecords.findMongoAsync({ playerId: session.uid}, 'bugContent answerStr bugState registerTime ', { sort: { time: -1 } }); for (var j = 0; j < list.length; j++) { let newStr = list[j].bugContent; let newStr2 = ""; for (var i = 0; i < newStr.length; i++) { if(newStr[i] != '?') newStr2 += newStr[i]; } // console.warn("处理之后222 ",newStr,newStr2); list[j].bugContent = newStr2; } // console.warn("反馈查询接口 ",JSON.stringify(list)); return next(null, { code: C.OK, data : list}); }); // tl++邮件信息 proto.mailInfo = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } console.warn("邮件信息 "+session.uid); let data = {}; data.nowTime = Date.now(); var mails = yield this.app.models.Mails.findByIdReadOnlyAsync(session.uid); console.warn("mails:",mails) /*var ms = new this.app.models.Mails({ _id: "dd2c0159-f2a8-8fd8-0ffb-ed5da82e803e22224444" }); ms.mailInfos = [{ "_id": "0qq3a07e-d3b6-099d-77ec-0ec09132ec1122224444", "sendTime": 1675652998058, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 20, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 0 }, { "_id": "", "sendTime": 1675666987672, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 0, "rewardT": 0, "reward": 0, "descT": 1, "tittleT": 1, "index": 1 }] yield ms.saveAsync()*/ if (mails) { data.userId = mails.userId; if(mails.mailInfos){ ////// 下面为增加测试数据 /*mails._id = "2e59676c-526f-ffc7-4c8a-b9cb6908e79c22224444" mails.mailInfos = []; mails.mailInfos = [{ "_id": "0wa3a07e-d3b6-099d-77ec-0ec09132ec1122224444", "sendTime": 1675652998058, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 0, "rewardT": 0, "reward": 0, "descT": 1, "tittleT": 1, "index": 0 }, { "_id": "", "sendTime": 1675666987672, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 20, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 1 }, { "_id": "", "sendTime": 1675665765806, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 30, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 2 }, { "_id": "", "sendTime": 1675666283405, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 40, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 3 }, { "_id": "", "sendTime": 1675666353074, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 50, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 4 }, { "_id": "", "sendTime": 1675666358314, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 60, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 5 }, { "_id": "", "sendTime": 1675666363857, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 70, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 6 }, { "_id": "", "sendTime": 1675666987672, "form": "hn3admingl", "read": 0, "receive": 0, "rewardC": 80, "rewardT": 1, "reward": 1, "descT": 3, "tittleT": 3, "index": 7 }] yield mails.saveAsync();*/ ////// 增加测试数据结束 console.warn("该玩家的邮件个数 "+mails.mailInfos.length); data.mailInfos = [] for (let i = 0; i < mails.mailInfos.length; ++i) { if(i < 60 && mails.mailInfos[i]){ data.mailInfos[data.mailInfos.length] = mails.mailInfos[i]; } } } if(data.mailInfos.length > 0){ data.confMail = confHall.mail || {}; } } else{ // console.warn("邮件数据库中没有该玩家"); // let player = yield this.app.models.Player.findByIdAsync(session.uid, '_id userId'); // if(player){ // console.warn("邮件数据库中没有该玩家 _id "+player._id+" userId "+player.userId); // ////// 下面是添加测试数据 // console.warn("下面是添加测试数据 "+Date.now()); // data.userId = player.userId; // let newItem = [{ // "_id": "63e06f865fae5350809be5e1", // "sendTime": 1675652998058, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 10, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 0 // }, { // "_id": "", // "sendTime": 1675666987672, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 20, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 1 // }, { // "_id": "", // "sendTime": 1675665765806, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 30, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 2 // }, { // "_id": "", // "sendTime": 1675666283405, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 40, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 3 // }, { // "_id": "", // "sendTime": 1675666353074, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 50, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 4 // }, { // "_id": "", // "sendTime": 1675666358314, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 60, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 5 // }, { // "_id": "", // "sendTime": 1675666363857, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 70, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 6 // }, { // "_id": "", // "sendTime": 1675666987672, // "form": "hn3admingl", // "read": 0, // "receive": 0, // "rewardC": 80, // "rewardT": 1, // "reward": 1, // "descT": 3, // "tittleT": 3, // "index": 7 // }] // var newMail = new this.app.models.Mails({ // _id: player._id, // 用户id(player表的主键) // userId: player.userId, // 用户的userId // mailInfos: newItem // 该活动的达成条件和奖励信息列表 mailInfos // }); // yield newMail.saveAsync(); // data.mailInfos = newItem; // // data.mailInfos = []; // let confMail = confHall.mail || {}; // // for (let i = 0; i < 12; ++i) { // // data.mailInfos[i] = {}; // // data.mailInfos[i].index = i; // // data.mailInfos[i].tittleT = i; // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 // // data.mailInfos[i].descT = i; // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 // // data.mailInfos[i].reward = i%2; // 有无奖励 0:无奖励 1:有奖励 // // data.mailInfos[i].rewardT = 1; // 奖励类型 0:未定义 1:钻石, // // data.mailInfos[i].rewardC = i; // 奖励数量 // // data.mailInfos[i].receive = i%4; // 是否领取 0:未领取 1:已领取 // // data.mailInfos[i].read = i%2; // 是否已读 0:未读 1:已读 // // let newTime = data.nowTime - 86400*i*1000//毫秒到秒 // // data.mailInfos[i].sendTime = newTime; // 发送日期 // // if(i == 1){ // // data.mailInfos[i].reward = 0; // 有无奖励 0:无奖励 1:有奖励 // // data.mailInfos[i].rewardT = 0; // 奖励类型 0:未定义 1:钻石, // // data.mailInfos[i].rewardC = 0; // 奖励数量 // // data.mailInfos[i].receive = 0; // 是否领取 0:未领取 1:已领取 // // data.mailInfos[i].read = 1; // 是否已读 0:未读 1:已读 // // } // // } // if(data.mailInfos.length > 0){ // data.confMail = confHall.mail || {}; // } // } //console.warn("该玩家的邮件个数 "+mails.mailInfos.length); } return next(null, { code: C.OK, data: data }); }); // tl++处理单个邮件 proto.dealMail = P.coroutine(function* (msg, session, next) { // console.warn("处理单个邮件111 "+session.uid + " msg.index "+msg.index); if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } let index = Number(msg.index) // let index = msg.index || -1; // console.warn("处理单个邮件222 index "+index); if((!(index >= 0 && index < 60)) && index != 10000 && index != 20000 ){ return next(null, { code: C.ERROR, msg: "参数错误"+index }); } // console.warn("处理单个邮件333 "+session.uid + " index "+index); let data = {}; data.nowTime = Date.now(); var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond userId'); var mails = yield this.app.models.Mails.findByIdReadOnlyAsync(session.uid, '_id userId mailInfos'); if (mails && player) { let dSource=player.diamond; let dNow=player.diamond; data.userId = mails.userId; let newMailList = []; let klqList = [];//可领取列表 if(mails.mailInfos){ // console.warn("该玩家的邮件个数 "+mails.mailInfos.length); for (let i = 0; i < mails.mailInfos.length; ++i) { let newItem = mails.mailInfos[i]; if(!newItem) { // console.warn("这个为空 i "+i); continue; } if(index < 60){ if(newItem.index == index){ if(newItem.reward == 1){ if(newItem.receive == 1){ newItem = null; } else{ newItem.receive = 1; newItem.read = 1; dSource = dNow; dNow = dSource + newItem.rewardC; klqList[klqList.length] = { tittleT:newItem.tittleT, descT:newItem.descT, rewardT:newItem.rewardT, rewardC:newItem.rewardC, dSource:dSource, dNow:dNow, form:newItem.form } } } else{ if(newItem.read == 1){ newItem = null; } else{ newItem.read = 1; } } } } else if(index == 10000){ //一键领取 if(newItem.reward == 1 && newItem.receive != 1){ newItem.receive = 1; newItem.read = 1; dSource = dNow; dNow = dSource + newItem.rewardC; klqList[klqList.length] = { tittleT:newItem.tittleT, descT:newItem.descT, rewardT:newItem.rewardT, rewardC:newItem.rewardC, dSource:dSource, dNow:dNow, form:newItem.form } } } else if(index == 20000){ //删除已读 if(newItem.read == 1){ newItem = null; } } newMailList[i] = newItem; } } // console.warn("newMailList的长度 "+newMailList.length); let newMailList2 = []; for (let i = 0; i < newMailList.length; ++i) { if(newMailList[i]) newMailList2[newMailList2.length] = newMailList[i] } for (let i = 0; i < newMailList2.length; ++i) { if(newMailList2[i]) newMailList2[i].index = i; } //写入数据库 mails.mailInfos = newMailList2; yield mails.saveAsync(); data.mailInfos = newMailList2; data.getGoodsList = []; if(klqList.length > 0){ let addDimand = 0;//增加的钻石数量 for (var i = 0; i < klqList.length; i++) { if(klqList[i].rewardT == 1) addDimand += klqList[i].rewardC; let dType = -1; if(klqList[i].tittleT == 3) dType = 7;//后台加钻石(补偿通知) else if(klqList[i].tittleT == 6) dType = 17;//绑定手机 else if(klqList[i].tittleT == 12) dType = 18;//邀新人按消耗比例返钻 else if(klqList[i].tittleT == 13) dType = 10;//邀新人按消耗比例返钻 else if(klqList[i].tittleT == 14) dType = 19;//比赛4~10名送钻 else if(klqList[i].tittleT == 15) dType = 21;//水果任务 else if(klqList[i].tittleT == 16) dType = 22;//水果排行榜奖励 if(dType == 7 || dType == 17 || dType == 18 || dType == 10 || dType == 19 || dType == 21 || dType == 22){ // 钻石记录 var diamondrecord = new this.app.models.DiamondRecord({ _id: uuid.v1(), playerId: mails._id, dType: dType,//后台 dSource: klqList[i].dSource, dSwap: klqList[i].rewardC, dNow: klqList[i].dNow, tableId: klqList[i].form, }); yield diamondrecord.saveAsync(); var SGJUserTongjis = yield this.app.models.SGJUserTongji.findMongoAsync({todaytime:this.getTodaySJC()}) var SGJUserTongji = null if (SGJUserTongjis.length == 0) { SGJUserTongji = this.app.models.SGJUserTongji({ _id: uuid.v1(), //userId: player.userId, //usdt: klqList[i].dNow, taskGetU: klqList[i].rewardC,//下注 todaytime: this.logic.getTodaySJC() }); yield SGJUserTongji.saveAsync() }else { SGJUserTongji = SGJUserTongjis[0] //SGJUserTongji.usdt = klqList[i].dNow SGJUserTongji.taskGetU = (Number(SGJUserTongji.taskGetU) +Number(klqList[i].rewardC)).toFixed(2)//下注 yield SGJUserTongji.saveAsync() } } } if(addDimand > 0){ player.diamond += addDimand; yield player.saveAsync(); data.getGoodsList[data.getGoodsList.length] = { rewardT: 1,//钻石 rewardC: addDimand } } } if(data.mailInfos.length > 0){ data.confMail = confHall.mail || {}; } } else{ } return next(null, { code: C.OK, data: data }); }); // tl++试用记牌器 proto.shiyongJPQ = P.coroutine(function* (msg, session, next) { if (!session.uid) { return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN }); } if (!msg.userId) { return next(null, { code: C.ERROR, msg: C.HALL_NOT_PLAYER }); } let uid = "" + msg.userId; if (uid.length != 6) { return next(null, { code: C.ERROR, msg: C.HALL_NOT_PLAYER }); } let userId = parseInt(uid); //下面是修改或创建记牌器购买信息记录 let currtime = Date.now(); let playerId = session.uid; let jipaiqi = yield this.app.models.JiPaiQi.findByIdAsync(playerId, 'times0 jpqdqsj'); if (jipaiqi) { if(jipaiqi.jpqdqsj > 0) currtime = jipaiqi.jpqdqsj; } let czts = 3;//充值天数,免费试用3天 let jpqdqsj = currtime + czts*86400000;//记牌器到期时间 if (jipaiqi) { //正常情况下不会走到这个if里面来 if(jipaiqi.times0 > 0){ return next(null, { code: C.FAILD, msg: C.HALL_ALREADY_BNCFTJ }); } jipaiqi.times0 += 1; jipaiqi.jpqdqsj = jpqdqsj; jipaiqi.lastBuyTime = Date.now(); yield jipaiqi.saveAsync(); } else{ // 记牌器购买信息 var newjpq = new this.app.models.JiPaiQi({ _id: playerId, userId: userId, times0: 1, times1: 0, times2: 0, jpqdqsj: jpqdqsj, lastBuyTime: Date.now(), }); yield newjpq.saveAsync(); } let data = {jpqsysj: czts*86400000} return next(null, { code: C.OK, data: data }); });