'use strict'; var quick = require('quick-pomelo'); var P = quick.Promise; var _ = require('lodash'); var url = require('url'); var md5 = require('md5'); var http = require('http'); var uuid = require('node-uuid'); var qs = require('querystring'); var conf = require('./conf.json'); var C = require('../share/constant'); var configCommon = require('../share/configCommon');//////TL++配置相关的公共方法 var logger = quick.logger.getLogger('fhmj', __filename); // 构造方法 var Controller = function (app) { this.app = app; this.uptime = Date.now(); this.port = app.getCurServer().httpPort; this.server = http.createServer((req, res) => this.handleAsync(req, res)); this.server.listen(this.port); this.lconfigCommon = new configCommon(this.app); }; // 导出方法 module.exports = function (app) { return new Controller(app); }; // 原型对象 var proto = Controller.prototype; // 路由函数 proto.route = function (pathname) { switch (pathname) { case '/setmyurl.nd': return (query, method, res) => this.setMyUrlAsync(query, method, res);//设置Grade url case '/setAllAgenterMyurl.nd': return (query, method, res) => this.setAllAgenterMyurlAsync(query, method, res);//设置所有推广的地址 case '/setAgenterMyurl.nd': return (query, method, res) => this.setAgenterMyurlAsync(query, method, res);//设置单个推广的地址 case '/setAgentOther.nd': return (query, method, res) => this.setAgentOtherAsync(query, method, res);//设置单个推广的其他信息 case '/adddiamond.nd': return (query, method, res) => this.addDiamondAsync(query, method, res);//后台加钻石 case '/clearUser.nd': return (query, method, res) => this.clearUserAsync(query, method, res);//删除用户 case '/freetable.nd': return (query, method, res) => this.freeTableAsync(query, method, res);//清空房间 case '/setPlayerPayTop.nd': return (query, method, res) => this.setPlayerPayTopAsync(query, method, res);//设置玩家充值上限 case '/setWeiHu.nd': return (query, method, res) => this.setWeiHuAsync(query, method, res);//设置维护 case '/setPlayerEnable.nd': return (query, method, res) => this.setPlayerEnableAsync(query, method, res);//设置用户是否冻结 case '/setAgentInfo.nd': return (query, method, res) => this.setAgentInfoAsync(query, method, res);//设置推广信息(java后台用) case '/addMail.nd': return (query, method, res) => this.addMailAsync(query, method, res);//后台给玩家发邮件 case '/sidAridChange.nd': return (query, method, res) => this.sidAridChangeAsync(query, method, res);//显示uid和实际uid互相转换 case '/addRaceTime.nd': return (query, method, res) => this.addRaceTimeAsync(query, method, res);//后台增加比赛的开始和结束时间 case '/setRaceTimeOut.nd': return (query, method, res) => this.setRaceTimeOutAsync(query, method, res);//后台设置比赛是否过期 case '/setNotGameTogther.nd': return (query, method, res) => this.setNotGameTogtherAsync(query, method, res);//后台增设置不能在同一桌游戏的玩家 case '/setJinSai.nd': return (query, method, res) => this.setJinSaiAsync(query, method, res);//设置禁赛玩家 case '/setSGJiangChi.nd': return (query, method, res) => this.setSGJiangChiAsync(query, method, res);//设置水果机奖池信息 case '/getSGATypeAll.nd': return (query, method, res) => this.getSGATypeAllAsync(query, method, res);//得到水果机某个字段的总和 case '/sgjRWFJOver.nd': return (query, method, res) => this.sgjRWFJOverAsync(query, method, res);//水果机任务发奖完成 } }; // 写出数据 proto.writeOut = function (query, res) { if (typeof query != 'object') { return res.end(String(query)); } return res.end(JSON.stringify(query)); }; // 跨域选项 const ACCESS = { "Content-Type": "text/plain;charset=utf-8", "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "X-Requested-With", "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS" }; // 入口函数 proto.handleAsync = P.coroutine(function* (req, res) { var pathname = url.parse(req.url).pathname; var phandler = this.route(pathname); if (!phandler) { res.writeHead(404, ACCESS); return res.end('WARNING: Not Found!'); } else { res.writeHead(200, ACCESS); if (req.method.toLowerCase() == 'get') { let query = url.parse(req.url, true).query; return phandler(query, req.method, res); } else if (req.method.toLowerCase() == 'post') { let data = ''; req.on('data', (d) => { data += d; }); req.on('end', () => { let query = { __post__: data }; let regexp = /^\s*{(\s*?".*?":.*\s*)*}\s*$/; if (regexp.test(data)) try { query = JSON.parse(data); } catch (e) { } else if (data.indexOf('=') != -1) query = qs.parse(data); return phandler(query, req.method, res); }); } } }); //ts++ 设置 grade myurl proto.setMyUrlAsync = P.coroutine(function* (query, method, res) { var playerId = query['playerid']; if (!playerId) { return this.writeOut('fail: userid error!', res); } var grade = Number(query['grade']); if (!grade) { return this.writeOut('fail: grade error!', res); } var myurl = query['myurl']; if (!myurl) { return this.writeOut('fail: myurl error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var player = yield app.models.Player.findByIdAsync(playerId, 'grade myurl'); if (player) { player.grade = grade; player.myurl = myurl; yield player.saveAsync(); console.warn("设置设置 grade -------------------修改"); } return self.writeOut('vvvvvv', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //设置所有推广的地址 proto.setAllAgenterMyurlAsync = P.coroutine(function* (query, method, res) { console.warn("设置所有推广的地址 "); var playerId = query['mid']; if (!playerId) { return this.writeOut('fail: userid error!', res); } var myurl = query['myurl']; if (!myurl) { return this.writeOut('fail: myurl error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } console.warn("设置所有推广的地址222 "+" playerId "+playerId+" myurl "+myurl); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let msg = '999999' console.warn("设置所有推广的地址222 ") // //yield app.models.Agenter.updateMany({update: {$set: {myGrade:2}}, upsert:true}) // let agentArr = yield app.models.Agenter.findMongoAsync({"myGrade" :{$ne :1}}); // console.warn("设置所有推广的地址3 "+JSON.stringify(agentArr)); // console.warn("设置所有推广的地址333 "+agentArr.length); let agentArr = yield app.models.Agenter.findMongoAsync({"myUrl" :{$ne :myurl}}); // console.warn("设置所有推广的地址31 "+JSON.stringify(agentArr)); // console.warn("设置所有推广的地址3331 "+agentArr.length); for (var i = 0; i < agentArr.length; i++) { let agenter = agentArr[i]; if (agenter) { // agenter.grade = grade; let isChange = (agenter.myUrl != myurl) if(isChange){ agenter.myUrl = myurl; yield agenter.saveAsync(); } console.warn("设置所有推广的地址444 isChange "+isChange+" agenter.myUrl "+agenter.myUrl); } } if(agentArr.length == 0) msg = 'no need change'; console.warn("设置所有推广的地址555 "); return self.writeOut(msg, res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //设置单个推广的地址 proto.setAgenterMyurlAsync = P.coroutine(function* (query, method, res) { // console.warn("设置单个推广的地址 "); var playerId = query['aid']; if (!playerId) { return this.writeOut('fail: userid error!', res); } var type = Number(query['type']); if (!type) { return this.writeOut('fail: type error!', res); } var myurl = query['myurl']; if (type == 1 && !myurl) { return this.writeOut('fail: myurl error!', res); } var level = query['level']; if (type == 2 && !level) { return this.writeOut('fail: level error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } // console.warn("设置单个推广的地址222 "+" playerId "+playerId+" type "+type+" myurl "+myurl+" level "+level); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let msg = '' // console.warn("设置单个推广的地址333 ");//Agenter var player = yield app.models.Agenter.findByIdAsync(playerId, 'myUrl'); if (player) { // player.grade = grade; let isChange = false; if(type == 1) { isChange = (player.myUrl != myurl) player.myUrl = myurl; } if(isChange) yield player.saveAsync(); msg = '999999' // console.warn("设置单个推广的地址444 isChange "+isChange+" player.myUrl "+player.myUrl); } else msg = 'agent not find' // console.warn("设置单个推广的地址555 "); return self.writeOut(msg, res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //设置单个推广的其他信息 proto.setAgentOtherAsync = P.coroutine(function* (query, method, res) { // console.warn("设置单个推广的信息 ",query); var playerId = query['aid']; if (!playerId) { return this.writeOut('fail: userid error!', res); } var change = query['change']; if (!change) { return this.writeOut('fail: change error!', res); } var value = query['value']; if(change != "parentAgenterId" && change != "playerId"){ value = Number(value); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } // console.warn("设置单个推广的地址222 "+" playerId "+playerId+" change "+change+" value "+value); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let msg = '' // console.warn("设置单个推广的地址333 ");//Agenter var player = yield app.models.Agenter.findByIdAsync(playerId, 'levelFlag'); if (player) { let isChange = false; if(change == "levelFlag" && player.levelFlag != value) { isChange=true; player.levelFlag = value; } if(change == "enabled" && (value == 0 || value == 1 ) && player.enabled!=value) { isChange=true; player.enabled = value; } if(change == "parentAgenterId") { if(!value){ if(player.parentAgenterId != ""){ player.parentAgenterId = ""; yield player.saveAsync(); return self.writeOut('999999', res); } else{ return self.writeOut('no need change.', res); } } let agenterList = yield app.models.Agenter.findMongoAsync({agentNo:value}, '_id agenterNo levelFlag enabled parentAgenterId'); if (agenterList.length == 1) { if(agenterList[0].levelFlag != 2 || agenterList[0].enabled == 0){ return self.writeOut('cant add the agent because unenable or level error!', res); } if(player.parentAgenterId != agenterList[0]._id){ isChange=true; player.parentAgenterId = agenterList[0]._id; } else{ return self.writeOut('parent no change !', res); } } else{ return self.writeOut('agentNo Error!', res); } } if(isChange) yield player.saveAsync(); msg = '999999' // console.warn("设置单个推广的地址444 isChange "+isChange+" player.myUrl "+player.myUrl); } else msg = 'agent not find' // console.warn("设置单个推广的地址555 "); return self.writeOut(msg, res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++ 删除玩家 proto.clearUserAsync = P.coroutine(function* (query, method, res) { console.warn("删除玩家-------------------"); var playerId = query['playerid']; if (!playerId) { return this.writeOut('', res);//fail: userid error! } //console.warn("删除玩家-------------------playerId:",playerId); var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var player = yield app.models.Player.findByIdAsync(playerId); if (player) { yield player.removeAsync(); console.warn("删除玩家-------------------成功"); return self.writeOut('999999', res); } return self.writeOut('fail: no object !', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++ 清空房间 proto.freeTableAsync = P.coroutine(function* (query, method, res) { // console.warn("清空房间-------------------"); var playerId = query['playerId']; if (!playerId) { return this.writeOut('fail: playerId error!', res);//fail: userid error! } var change = query['change']; if (!change) { return this.writeOut('fail: change error!', res); } console.warn("清空房间-------------------playerId:",playerId,change); var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } //console.warn("清空房间-------------------sign:",sign); if (!checkSign(sign)) { return this.writeOut('', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var player = yield app.models.Player.findByIdAsync(playerId, 'tableId rTableId gameId gameServerId tel pwd'); if (player) { if(change == "freeTable"){ player.rTableId = 0; player.tableId = ""; player.gameId = 0; player.gameServerId = ""; } else if(change == "unbindTel"){ player.tel = ''; player.pwd = ''; } yield player.saveAsync(); console.warn("清空房间-------------------修改成功"); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //////TL++,设置玩家充值上限 proto.setPlayerPayTopAsync = P.coroutine(function* (query, method, res) { console.warn("设置玩家充值上限-------------------",query); var uppid = query['uppid']; if (!uppid) { return this.writeOut('fail: uppid error!', res); } var value = Number(query['value']) || -10; if(query['value'] == "0") value = 0; if (value < -1) { return this.writeOut('fail: value error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!!!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let wjsx = yield app.models.PayLimit.findByIdAsync(uppid, 'paytop registerTime'); if (wjsx) { wjsx.paytop = value; wjsx.registerTime = Date.now(); yield wjsx.saveAsync(); console.warn("设置玩家充值上限成功-------------------uppid:",uppid,value); } else { var player = yield app.models.Player.findByIdAsync(uppid, 'userId name'); if (!player) { return this.writeOut('fail: no object !', res); } let startTime = self.getzdLDSJC(Date.now()); let jrzcz = 0; var endTime = startTime + 86400000; var opts = { time: { $gte: startTime, $lt: endTime },playerId: uppid, paystate: { $gte: 1 }}; var list = yield app.models.PayRecord.findMongoAsync(opts, 'total_fee'); for (let i = 0; i < list.length; ++i) { jrzcz += list[i].total_fee; } var newwjsx = new app.models.PayLimit({ _id: uppid, userId: player.userId, name: player.name, paytop: value, paytotal: jrzcz, dataTime: startTime, }); yield newwjsx.saveAsync(); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //////TL++,设置维护 proto.setWeiHuAsync = P.coroutine(function* (query, method, res) { console.warn("设置维护-------------------",query); // var playerId = query['playerid']; // if (!playerId) { // return this.writeOut('fail: userid error!', res); // } var updid = Number(query['updid']); var value = query['value']; if (!value) { return this.writeOut('fail: value error!', res); } if(updid==1) { let stateWH = Number(value)||0; if (stateWH!=0 && stateWH!=1 && stateWH!=2) { return this.writeOut('fail: stateWH error!!!', res); } } else if(updid==2) { } else if(updid==3) { let rebaterate = Number(value)||0 if (rebaterate < 0 || rebaterate > 100) { return this.writeOut('fail: rebaterate error!', res); } } else if(updid==4){ } else if(updid==5){ let yxndlbTime = Number(value)||0 if (yxndlbTime <= 0) { return this.writeOut('fail: yxndlbTime error!', res); } } else if(updid==6){ } else { return this.writeOut('fail: updid error!!!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } //console.warn("清空房间-------------------sign:",sign); if (!checkSign(sign)) { return this.writeOut('fail: sign error!!!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var dataSystemConfig = yield app.models.WHstate.findByIdAsync('wh', 'stateWH whTip rebaterate shareGive yxndlbTime yxndlbTip'); //console.warn("系统配置",dataSystemConfig); if (dataSystemConfig) { if(updid==1) { let stateWH = Number(value)||0; dataSystemConfig.stateWH = stateWH; } else if(updid==2) { dataSystemConfig.whTip = value; } else if(updid==3) { let rebaterate = Number(value)||0 dataSystemConfig.rebaterate = rebaterate; } else if(updid==4) { let shareGive = Number(value)||0 dataSystemConfig.shareGive = shareGive; } else if(updid==5) { let yxndlbTime = Number(value)||0 dataSystemConfig.yxndlbTime = yxndlbTime; } else if(updid==6) { dataSystemConfig.yxndlbTip = value; } // else if(updid==7) // { // dataSystemConfig.linkhall = value; // } // else if(updid==8) // { // var regDiamond = Number(value) ||100; // if (regDiamond<0) { // data.msg='注册赠送值为错误'; // return self.writeOut(data, res); // } // dataSystemConfig.regDiamond = regDiamond; // } //console.warn("修改系统配置",updid,value); yield dataSystemConfig.saveAsync(); } else { return this.writeOut('fail: no object !', res); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); // 后台增加钻石 proto.addDiamondAsync = P.coroutine(function* (query, method, res) { console.warn("590 query:",query) var playerId = query['playerid']; if (!playerId) { return this.writeOut('fail: userid error!', res); } // console.warn("后台增加钻石-------------------playerId:",playerId); var managerId = query['managerid']; var diamond = Number(query['diamond']); var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } console.warn("query:",query) // console.warn("后台增加钻石-------------------diamond:",diamond); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { //后台增加钻石的话给用户发邮件通知,用户在邮件里领取之后修改玩家钻石,后台扣钻则不发邮件 if(diamond < 0){ var player = yield app.models.Player.findByIdAsync(playerId, 'diamond'); if (player) { let dSource=player.diamond; let dNow=player.diamond+diamond; player.diamond += diamond; yield player.saveAsync(); // 钻石记录 var diamondrecord = new app.models.DiamondRecord({ _id: uuid.v1(), playerId: playerId, dType: 7,//后台 dSource: dSource, dSwap: diamond, dNow: dNow, tableId: managerId }); yield diamondrecord.saveAsync(); } } else if(diamond > 0){ console.warn("playerId:",playerId) var player = yield app.models.Player.findByIdAsync(playerId, 'userId'); if (player) { var mail = yield app.models.Mails.findByIdAsync(playerId, 'mailInfos'); if (mail) { console.warn("638") let item = { _id: "", index: mail.mailInfos.length, // 邮件下标 tittleT: 3, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 descT: 3, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 reward: 1, // 有无奖励 0:无奖励 1:有奖励 rewardT: 1, // 奖励类型 0:未定义 1:钻石, rewardC: diamond, // 奖励数量 receive: 0, // 是否领取 0:未领取 1:已领取 read: 0, // 是否已读 0:未读 1:已读 form:managerId, //邮件来源 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: 3, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 descT: 3, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 reward: 1, // 有无奖励 0:无奖励 1:有奖励 rewardT: 1, // 奖励类型 0:未定义 1:钻石, rewardC: diamond, // 奖励数量 receive: 0, // 是否领取 0:未领取 1:已领取 read: 0, // 是否已读 0:未读 1:已读 form:managerId, //邮件来源 sendTime: Date.now() // 发送日期 } let newItem = []; newItem[0] = item; var newMail = new app.models.Mails({ _id: playerId, // 用户id(player表的主键) userId: player.userId, // 用户的userId mailInfos: newItem // 该活动的达成条件和奖励信息列表 }); yield newMail.saveAsync(); } } } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); // 设置用户是否禁用 proto.setPlayerEnableAsync = P.coroutine(function* (query, method, res) { var playerId = query['playerId']; if (!playerId) { return this.writeOut('fail: userid error!', res); } var enable = parseInt(query.enable); if (enable != 0 && enable != 1) return this.writeOut('enable value error', res); var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } console.warn("设置用户是否禁用------- playerId: "+playerId +" enable: "+enable); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var player = yield app.models.Player.findByIdAsync(playerId, 'enable'); if (player) { player.enable = enable; yield player.saveAsync(); } else { let msg = 'player not find'; return self.writeOut(msg, res); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++ 设置代理 proto.setAgentInfoAsync = P.coroutine(function* (query, method, res) { // console.warn("设置代理-------------------"); logger.warn("setAgentInfoAsync000");////cssj var agentId = query['agentId']; if (!agentId) { return this.writeOut('fail: agentId error!', res); } var agentName = query['agentName']; var contact = query['contact']; if (!contact) { return this.writeOut('fail: contact error!', res); } var tel = query['tel']; if (!tel) { return this.writeOut('fail: tel error!', res); } var rewardRate = query['rewardRate']; var parentRate = query['parentRate']; var levelFlag = query['levelFlag']; var enabled = Number(query['enabled']) || 1; var pwd = query['pwd']; var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } //console.warn("设置代理-------------------sign:",sign); if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } // console.warn("设置代理-------------------222 agentId "+agentId); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'agentName myUrl rewardRate contact tel parentAgenterId parentRate levelFlag enabled pwd'); if (agenter) { let str0s = "setAgentInfoAsync old "+ JSON.stringify(agenter) logger.warn(str0s);////cssj var upd=false; if(agentName!='' && agenter.agentName!=agentName) { upd=true; agenter.agentName = agentName; } if(contact!='' && agenter.contact!=contact) { upd=true; agenter.contact = contact; } if(tel!='' && agenter.tel!=tel) { upd=true; agenter.tel = tel; } if(rewardRate || rewardRate == 0) { upd=true; agenter.rewardRate = parseInt(rewardRate); } if(parentRate || parentRate == 0) { upd=true; agenter.parentRate = parseInt(parentRate); } if((levelFlag || levelFlag == 0) && agenter.levelFlag != levelFlag){ if(levelFlag == 2){ if(agenter.parentAgenterId.length == 0 ){ upd=true; agenter.levelFlag = levelFlag; } } else{ upd=true; agenter.levelFlag = levelFlag; } } if((enabled == 0 || enabled == 1 ) && agenter.enabled!=enabled) { upd=true; agenter.enabled = enabled; } if(pwd!='' && agenter.pwd!=pwd) { upd=true; agenter.pwd = pwd; } // console.warn("设置代理-------------------333 upd "+upd+" agenter "+JSON.stringify(agenter)); if(upd) { let str1s = "setAgentInfoAsync new "+ JSON.stringify(agenter) logger.warn(str1s);////cssj yield agenter.saveAsync(); // console.warn("设置代理-------------------成功"); } else { // console.warn("设置代理-------------------无修改"); } } // console.warn("设置代理-------------------444 "); return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++ 设置水果机奖池信息,设置水果机配置 proto.setSGJiangChiAsync = P.coroutine(function* (query, method, res) { console.warn("manage设置水果机奖池信息-------------------",query); var type = Number(query['type']) || 0; if (!type) { return this.writeOut('fail: type error!', res); } var index = Number(query['index']) || 0; if (!index || index <= 0 || index > 3) { return this.writeOut('fail: index error!', res); } var dw = Number(query['dw']) || 0; if (!dw || dw <= 0 || dw > 3) { return this.writeOut('fail: dw error!', res); } var key = Number(query['key']) || 0; if (!key) { return this.writeOut('fail: key error!', res); } var value = Number(query['value']) || 0; if (value < 0) { return this.writeOut('fail: value error!'+value, res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } console.warn("manage设置水果机奖池信息-------------------",type,index,dw,key,value); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let jcPools = yield app.models.SGJJC.findByIdAsync('sgjjcs'); if (jcPools) { console.warn("修改之前",jcPools); let isUp = false; if(type == 1){//游戏奖池 if(key >= 1 && key <= 3){ let list = [jcPools.pools,jcPools.levels,jcPools.cspools] console.warn("list:",list) console.warn(" index:",index," key:",key) if(index > 0 && index <= list[key-1].length && list[key-1][index-1] != value){ list[key-1][index-1] = value; // ✅ 关键:告诉模型数组变了 console.warn("list:",list) console.warn("value:",value) console.warn("jcPools.pools:",jcPools.pools) isUp = true; } } else if((key >= 4 && key <= 9) && dw > 0 && dw <= 3){ let list = [jcPools.topLimits1,jcPools.topLimits2,jcPools.topLimits3]; if(key == 5) list = [jcPools.lowLimits1,jcPools.lowLimits2,jcPools.lowLimits3]; else if(key == 6) list = [jcPools.paiTopRate1,jcPools.paiTopRate2,jcPools.paiTopRate3]; else if(key == 7) list = [jcPools.paiLowRate1,jcPools.paiLowRate2,jcPools.paiLowRate3]; else if(key == 8) list = [jcPools.bsTopRate1,jcPools.bsTopRate2,jcPools.bsTopRate3]; else if(key == 9) list = [jcPools.bsLowRate1,jcPools.bsLowRate2,jcPools.bsLowRate3]; if(index > 0 && index <= list[dw-1].length && list[dw-1][index-1] != value){ list[dw-1][index-1] = value; isUp = true; } } } else if(type == 2){//押大小奖池 if(key >= 1 && key <= 3){ let list = [jcPools.ydxpools,jcPools.ydxlevels,jcPools.ydxcspools] if(index > 0 && index <= list[key-1].length && list[key-1][index-1] != value){ list[key-1][index-1] = value; isUp = true; } } else if((key >= 4 && key <= 11) && dw > 0 && dw <= 3){ if(key >= 6 && key <= 9) return self.writeOut('can not set '+key, res); let list = [jcPools.ydxtopLimits1,jcPools.ydxtopLimits2,jcPools.ydxtopLimits3]; if(key == 5) list = [jcPools.ydxlowLimits1,jcPools.ydxlowLimits2,jcPools.ydxlowLimits3]; else if(key == 10) list = [jcPools.ydxTopRate1,jcPools.ydxTopRate2,jcPools.ydxTopRate3]; else if(key == 11) list = [jcPools.ydxLowRate1,jcPools.ydxLowRate2,jcPools.ydxLowRate3]; if(index > 0 && index <= list[dw-1].length && list[dw-1][index-1] != value){ list[dw-1][index-1] = value; isUp = true; } } } if(isUp){ // jcPools.levels = _.cloneDeep(jcPools.levels)//这样写也不行 // yield jcPools.saveAsync(); let jcPools2 = yield app.models.SGJJC.findByIdAsync('sgjjcs'); if(type == 1){//游戏奖池 if(key >= 1 && key <= 3){ console.warn("935 jcpools.pools:",jcPools.pools) jcPools2.pools = _.cloneDeep(jcPools.pools); console.warn("jcPools:",jcPools) jcPools2.levels = _.cloneDeep(jcPools.levels); jcPools2.cspools = _.cloneDeep(jcPools.cspools); } else if(key >= 4 && key <= 9){ jcPools2.topLimits1 = _.cloneDeep(jcPools.topLimits1); jcPools2.topLimits2 = _.cloneDeep(jcPools.topLimits2); jcPools2.topLimits3 = _.cloneDeep(jcPools.topLimits3); jcPools2.lowLimits1 = _.cloneDeep(jcPools.lowLimits1); jcPools2.lowLimits2 = _.cloneDeep(jcPools.lowLimits2); jcPools2.lowLimits3 = _.cloneDeep(jcPools.lowLimits3); jcPools2.paiTopRate1 = _.cloneDeep(jcPools.paiTopRate1); jcPools2.paiTopRate2 = _.cloneDeep(jcPools.paiTopRate2); jcPools2.paiTopRate3 = _.cloneDeep(jcPools.paiTopRate3); jcPools2.paiLowRate1 = _.cloneDeep(jcPools.paiLowRate1); jcPools2.paiLowRate2 = _.cloneDeep(jcPools.paiLowRate2); jcPools2.paiLowRate3 = _.cloneDeep(jcPools.paiLowRate3); jcPools2.bsTopRate1 = _.cloneDeep(jcPools.bsTopRate1); jcPools2.bsTopRate2 = _.cloneDeep(jcPools.bsTopRate2); jcPools2.bsTopRate3 = _.cloneDeep(jcPools.bsTopRate3); jcPools2.bsLowRate1 = _.cloneDeep(jcPools.bsLowRate1); jcPools2.bsLowRate2 = _.cloneDeep(jcPools.bsLowRate2); jcPools2.bsLowRate3 = _.cloneDeep(jcPools.bsLowRate3); } } else if(type == 2){//押大小奖池 if(key >= 1 && key <= 3){ jcPools2.ydxpools = _.cloneDeep(jcPools.ydxpools); jcPools2.ydxlevels = _.cloneDeep(jcPools.ydxlevels); jcPools2.ydxcspools = _.cloneDeep(jcPools.ydxcspools); } else if(key >= 4 && key <= 11){ jcPools2.ydxtopLimits1 = _.cloneDeep(jcPools.ydxtopLimits1); jcPools2.ydxtopLimits2 = _.cloneDeep(jcPools.ydxtopLimits2); jcPools2.ydxtopLimits3 = _.cloneDeep(jcPools.ydxtopLimits3); jcPools2.ydxlowLimits1 = _.cloneDeep(jcPools.ydxlowLimits1); jcPools2.ydxlowLimits2 = _.cloneDeep(jcPools.ydxlowLimits2); jcPools2.ydxlowLimits3 = _.cloneDeep(jcPools.ydxlowLimits3); jcPools2.ydxTopRate1 = _.cloneDeep(jcPools.ydxTopRate1); jcPools2.ydxTopRate2 = _.cloneDeep(jcPools.ydxTopRate2); jcPools2.ydxTopRate3 = _.cloneDeep(jcPools.ydxTopRate3); jcPools2.ydxLowRate1 = _.cloneDeep(jcPools.ydxLowRate1); jcPools2.ydxLowRate2 = _.cloneDeep(jcPools.ydxLowRate2); jcPools2.ydxLowRate3 = _.cloneDeep(jcPools.ydxLowRate3); } } console.warn("修改之后 jcPools2:",jcPools2) yield jcPools2.saveAsync(); // console.warn("奖池更新了",jcPools); // console.warn("奖池更新了222 ",jcPools2); jcPools = null; } else{ return self.writeOut('value no change ', res); } } else{ return self.writeOut('no jcPools! ', res); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++ //得到水果机某个字段的总和 proto.getSGATypeAllAsync = P.coroutine(function* (query, method, res) { console.warn("manage得到水果机某个字段的总和-------------------"); var type = query['type']; if (!type) { return this.writeOut('fail: type error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } // let sjk = "SGJUser"; // var sgjUsers = yield this.app.models[sjk].aggregateAsync([ //像上面这样动态查询数据库也是可以的 var sgjUsers = yield this.app.models.SGJUser.aggregateAsync([ { $group: { _id: type, count: { $sum: '$'+type } } } ]); console.warn("聚合之后 ",type,JSON.stringify(sgjUsers)); let result = "error: nofind"; if(sgjUsers.length > 0) result = sgjUsers[0].count; return this.writeOut(result, res); // var startTime = 1710866910000; // var endTime = 1711007310000; // var opts = { registerTime: { $gte: startTime, $lt: endTime } }; // opts.playerId = "0ab@my2019";//new RegExp('.+@' + '0ab' + '$'); // var list = yield this.app.models.DiamondRecord.aggregateAsync([ // { $match: opts }, // { $group: { _id: opts.playerId, count: { $sum: '$dSwap' } } }, // { $sort: { registerTime: 1 } } // ]); // console.warn("聚合之后111 ",list.length,JSON.stringify(list)); // var startTime = 1710866910000; // var endTime = 1711007310000; // var opts = { registerTime: { $gte: startTime, $lt: endTime } }; // // opts.playerId = "0ab@my2019";//new RegExp('.+@' + '0ab' + '$'); // var list = yield this.app.models.SGJUser.aggregateAsync([ // { $match: opts }, // { $group: { _id: "xxxxx", count: { $sum: '$cost' } } }, // { $sort: { registerTime: 1 } } // ]); // console.warn("聚合之后111 ",list.length,JSON.stringify(list)); }); //ts++ 水果机任务发奖完成 proto.sgjRWFJOverAsync = P.coroutine(function* (query, method, res) { console.warn("manage水果机任务发奖完成-------------------"); // var fjinfo = query['fjinfo'] || ""; // console.warn("manage水果机任务发奖完成------------------- ",fjinfo); var pid = query['pid']; if (!pid) { return this.writeOut('fail: pid error!', res); } var type = Number(query['type']) || 0; if (!type) { return this.writeOut('fail: type error!', res); } var rwid = query['rwid']; if (type == 2 && !rwid) { return this.writeOut('fail: rwid error!', res); } var fqs = Number(query['fqs']) || 0; if (type == 2 && !fqs) { return this.writeOut('fail: fqs error!', res); } var fqtime = Number(query['fqtime']) || 0; if (!fqtime) { return this.writeOut('fail: fqtime error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } console.warn("manage水果机任务发奖完成-------------------",pid,type,rwid,fqs,fqtime); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { if(type == 1){ var sgjUser = yield app.models.SGJUser.findByIdAsync(pid, 'zfbAcc zfbName zfbBindTime'); if (sgjUser) { if(Date.now() - sgjUser.zfbBindTime < 86400000 ) return self.writeOut('one day no more once! ', res); console.warn("?????找到用户了 ",fqs,fqtime); if(fqs){ sgjUser.zfbBindTime = fqtime; } else{ sgjUser.zfbAcc = ""; sgjUser.zfbName = ""; } yield sgjUser.saveAsync(); } else{ return self.writeOut('pid value error! ', res); } } else if(type == 2){ var taskInfo = yield app.models.SGJTask.findByIdAsync(rwid, 'playerId rewards state fjTime'); if (taskInfo) { if(fqs != taskInfo.rewards){ return self.writeOut('fail: fqs value error!', res); } if(pid != taskInfo.playerId){ return self.writeOut('fail: pid value error!', res); } if(taskInfo.state != 2 || taskInfo.fjTime != 0){ return self.writeOut('fail: Cannot be claimed repeatedly!', res); } taskInfo.state = 3; //任务状态0:未完成,1:已完成,2:发奖中,3:已发奖 taskInfo.fjTime = fqtime; //发奖时间 console.warn("发奖成功之后更新任务状态 "); yield taskInfo.saveAsync(); var sgjUser = yield app.models.SGJUser.findByIdAsync(pid, 'taskReward jxzReward'); if (sgjUser) { sgjUser.jxzReward -= fqs; sgjUser.taskReward += fqs; yield sgjUser.saveAsync(); } } else{ logger.warn("rwjlzj(rwid) error");////cssj return self.writeOut('rwjlzj(rwid) error! :', res); } } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //ts++ 后台给玩家发邮件 proto.addMailAsync = P.coroutine(function* (query, method, res) { // console.warn("后台给玩家发邮件-------------------"); var playerId = query['playerid']; if (!playerId) { return this.writeOut('fail: playerid error!', res); } var userId = query['userid']; if (!userId) { return this.writeOut('fail: userid error!', res); } var tittleT = Number(query['tittleT']) || 0;; if (!tittleT) { return this.writeOut('fail: tittleT error!', res); } var descT = Number(query['descT']) || 0;; if (!descT) { return this.writeOut('fail: descT error!', res); } var reward = Number(query['reward']) || 0;; var rewardT = Number(query['rewardT']) || 0; var rewardC = Number(query['rewardC']) || 0; if (reward) { if(!rewardT || !rewardC){ return this.writeOut('fail: rewardT or rewardC error!', res); } } else{ if(rewardT){ return this.writeOut('fail: rewardT error!', res); } if(rewardC){ return this.writeOut('fail: rewardC error!', res); } } var form = query['form']; if (!form) { return this.writeOut('fail: form error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let receive = 1; if(reward) receive = 0; var mail = yield app.models.Mails.findByIdAsync(playerId, 'mailInfos'); if (mail) { let item = { _id: "", index: mail.mailInfos.length, // 邮件下标 tittleT: tittleT, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 descT: descT, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 reward: reward, // 有无奖励 0:无奖励 1:有奖励 rewardT: rewardT, // 奖励类型 0:未定义 1:钻石, rewardC: rewardC, // 奖励数量 receive: receive, // 是否领取 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: tittleT, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 descT: descT, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知 reward: reward, // 有无奖励 0:无奖励 1:有奖励 rewardT: rewardT, // 奖励类型 0:未定义 1:钻石, rewardC: rewardC, // 奖励数量 receive: receive, // 是否领取 0:未领取 1:已领取 read: 0, // 是否已读 0:未读 1:已读 form:form, //邮件来源 sendTime: Date.now() // 发送日期 } let newItem = []; newItem[0] = item; var newMail = new app.models.Mails({ _id: playerId, // 用户id(player表的主键) userId: userId, // 用户的userId mailInfos: newItem // 该活动的达成条件和奖励信息列表 }); yield newMail.saveAsync(); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); ////// ts++ 显示uid和实际uid互相转换 proto.sidAridChangeAsync = P.coroutine(function* (query, method, res) { // console.warn("显示uid和实际uid互相转换-------------------"); var type = Number(query['type']) || 0;; if (type != 1 && type != 2) { return this.writeOut('fail: type error!', res); } var id = Number(query['id']) || 0;; if (id < 100000 && id > 999999) { return this.writeOut('fail: id error!', res); } // console.warn("显示uid和实际uid互相转换 type "+type+" id "+id); var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } let result = ""; if(type == 1) result = this.jiami(id); else if(type == 2) result = ""+this.jiemi(id); var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let data = { code:201, newId:0 } if(result.length == 6){ data.code = 200; data.newId = result; } let dataStr = JSON.stringify(data) return self.writeOut(dataStr, res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); proto.jiami = function (_oldid) { let oldid = String(_oldid); // console.warn("111 加密参数 oldid "+oldid); let numList = []; for (var i = 0; i < oldid.length; i++) { // numList[i] = (parseInt(oldid[i])+i+1)%10; numList[i] = (parseInt(oldid[i])+i)%10; // console.warn("222 numList[i] "+numList[i]); } // console.warn("333 "+JSON.stringify(numList)); //这种交换方式会使加密后结果转换成数字之后是个小于6位数的数字,其中987654这个加密之后是0 // let jh1 = numList[0]; // numList[0] = numList[4]; // numList[4] = jh1; let jh1 = numList[1]; numList[1] = numList[3]; numList[3] = jh1; // console.warn("444 [0]和[4]交换 "+JSON.stringify(numList)); let jh2 = numList[2]; numList[2] = numList[5]; numList[5] = jh2; let newid = ""; // console.warn("555 [2]和[5]交换 "+JSON.stringify(numList)); for (var i = 0; i < numList.length; i++) { newid+=numList[i]; } // console.warn("666 加密最终的 "+newid); return newid; // return parseInt(newid); }; proto.jiemi = function (_oldid) { let oldid = String(_oldid); // console.warn("111 解密参数 oldid "+oldid); let numList = []; for (var i = 0; i < oldid.length; i++) { numList[i] = parseInt(oldid[i]); // console.warn("222 numList[i] "+numList[i]); } // console.warn("333 "+JSON.stringify(numList)); // let jh1 = numList[0]; // numList[0] = numList[4]; // numList[4] = jh1; let jh1 = numList[1]; numList[1] = numList[3]; numList[3] = jh1; // console.warn("444 [0]和[4]交换 "+JSON.stringify(numList)); let jh2 = numList[2]; numList[2] = numList[5]; numList[5] = jh2; let numList2 = [] for (var i = 0; i < oldid.length; i++) { // numList2[i] = (numList[i]+9-i)%10; numList2[i] = (numList[i]+10-i)%10; // console.warn("2 numList[i] "+numList[i]); } // console.warn("555 [2]和[5]交换 "+JSON.stringify(numList)); let newid = ""; for (var i = 0; i < numList2.length; i++) { newid+=numList2[i]; } // console.warn("666 解密最终的 "+newid); return parseInt(newid); }; //后台增加比赛的开始和结束时间 proto.addRaceTimeAsync = P.coroutine(function* (query, method, res) { console.warn("addRaceTimeAsync 后台增加比赛的开始和结束时间"); var aid = query['aid']; if (!aid) { return this.writeOut('fail: aid error!', res); } var anumber = parseInt(query['anumber']) || 0; if (!anumber) { return this.writeOut('fail: anumber error!', res); } var stime = Number(query['stime']) || 0;; if (!stime) { return this.writeOut('fail: stime error!', res); } var etime = Number(query['etime']) || 0;; if (!etime) { return this.writeOut('fail: etime error!', res); } if(stime >= etime) return this.writeOut('fail: stime or etime error!', res); var outTime = Number(query['outTime']) || (etime+90*60000);//默认90分钟之后过期 if (!outTime) { return this.writeOut('fail: outTime error!', res); } if (outTime < etime+40*60000) { return this.writeOut('过期时间必须为结束时间40分钟之后', res); } var bigRound = Number(query['bigRound']) || 3; if (!bigRound) { return this.writeOut('fail: bigRound error!', res); } var gameid = Number(query['gameid']) || 10008; if (!gameid) { return this.writeOut('fail: gameid error!', res); } var round = Number(query['round']) || 10; if (!round) { return this.writeOut('fail: round error!', res); } var player = Number(query['player']) || 3; if (!player) { return this.writeOut('fail: player error!', res); } var other = Number(query['other']) || 74; if (!other) { return this.writeOut('fail: other error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { let stimeSJC = self.getzdLDSJC(stime); var opts = { stime: { $gte: stimeSJC, $lt: stimeSJC+86400000}, }; opts['aid'] = aid; let timelist = yield app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime', { sort: { stime: 1 } }); for (var i = 0; i < timelist.length; i++) { if(timelist[i].outTime >= stime){ return self.writeOut('新开比赛场次开始时间不能小于现有场次的过期时间', res);//一个群推广目前一天只能开一场比赛 } } var newRaceTime = new app.models.RaceTimeInfos({ _id: uuid.v1(), // UUID 标识 aid: aid, // 比赛代理的标识 agentNo: anumber,// 比赛代理编号 stime: stime, // 该次比赛的开始时间 etime: etime, // 该次比赛的结束时间 bigRound: bigRound,// 该次比赛的大局数量,统计战绩时使用 gameId: gameid, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快 round: round, // 该次比赛的游戏局数 playerCount: player, // 该次比赛的游戏人数 other: other, // 该次比赛的游戏规则 outTime: outTime, //1:未过期,2已过期 yljList: [] // 该次比赛已领奖人员id数组 }); yield newRaceTime.saveAsync(); return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); ////后台设置比赛是否过期 proto.setRaceTimeOutAsync = P.coroutine(function* (query, method, res) { // console.warn("setRaceTimeOutAsync 后台设置比赛是否过期"); var id = query['id'] || "";//需要修改的比赛场次的id(主键) if (!id) { return this.writeOut('fail: id error!', res); } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var raceTime = yield app.models.RaceTimeInfos.findByIdAsync(id, '_id aid outTime stime etime yljList'); if (raceTime) { let outTime = Number(query['outTime']) || (raceTime.etime + 6000000);//默认60分钟之后过期 // console.warn("后台设置比赛是否过期 id "+id+" etime "+raceTime.etime+" outTime "+raceTime.outTime+" type "+type); if(raceTime.etime + 2400000 >= outTime){//结束40分钟之后才能设置为过期 return self.writeOut('过期时间必须为结束时间40分钟之后', res); } if(self.getzdLDSJC(raceTime.stime) != self.getzdLDSJC(outTime)){//结束40分钟之后才能设置为过期 return self.writeOut('过期时间和开始时间必须是同一天', res); } let stimeSJC = self.getzdLDSJC(raceTime.stime); var opts = { stime: { $gte: stimeSJC, $lt: stimeSJC+86400000}, }; opts['aid'] = raceTime.aid; let timelist = yield app.models.RaceTimeInfos.findMongoAsync(opts, '_id aid stime etime outTime', { sort: { stime: 1 } }); // console.warn(">>>>>>>>>>>>>>>.. "+timelist.length); for (var i = 0; i < timelist.length; i++) { if(raceTime.stime > timelist[i].stime) continue; if(raceTime._id == timelist[i]._id) continue; if(timelist[i].stime <= outTime){ return self.writeOut('本场过期时间不能和现有比赛场次的时间重合', res);//一个群推广目前一天只能开一场比赛 } } if(raceTime.outTime != outTime){ raceTime.outTime = outTime; yield raceTime.saveAsync(); // console.warn("设置设置 grade -------------------修改"); } return self.writeOut('999999', res); } else{ return self.writeOut('not fid raceTime by id : '+id, res); } }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //////后台增设置不能在同一桌游戏的玩家 proto.setNotGameTogtherAsync = P.coroutine(function* (query, method, res) { // console.warn("setNotGameTogtherAsync 后台增设置不能在同一桌游戏的玩家"); var type = Number(query['type']) || 0;//操作类型 var id = query['id'] || ""; var uid1 = Number(query['uid1']) || 0; var uid2 = Number(query['uid2']) || 0;//删除整条的时候此值可不传 // console.warn("后台增设置不能在同一桌游戏的玩家 type "+type+" id "+id+" uid1 "+uid1+" uid2 "+uid2); if (type == 1) {//1:增加,2:删除整条,3:删除某条中某一个 if (!uid1) return this.writeOut('fail: no uid1 !', res); if (!uid2) return this.writeOut('fail: no uid2 !', res); if (uid1 == uid2) return this.writeOut('fail: uid1 和 uid2 不能相同', res); } else if (type == 2) {//1:增加,2:删除整条,3:删除某条中某一个 if (!id) return this.writeOut('fail: no id !', res); } else if (type == 3) {//1:增加,2:删除整条,3:删除某条中某一个 if (!id) return this.writeOut('fail: no id。', res); if (!uid1) return this.writeOut('fail: no uid1。', res); } else return this.writeOut('fail: no type !', res); var sign = query['sign']||""; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { if(type == 1){ let pid1 = ""; var players1 = yield app.models.Player.findMongoAsync({ userId: uid1 },'_id userId name'); if (players1.length == 1) { pid1 = players1[0]._id; } else { return self.writeOut('fail: uid1 error!', res); } let pid2 = ""; var players2 = yield app.models.Player.findMongoAsync({ userId: uid2 },'_id userId name'); if (players2.length == 1) { pid2 = players2[0]._id; } else{ return self.writeOut('fail: uid2 error!', res); } let newList = []; let newPList = []; var notTogthers1 = yield app.models.NotGameTogther.findMongoAsync({ uidList: uid1 },'_id uidList pidList'); if(notTogthers1.length == 0) { newList[newList.length] = uid1; newPList[newPList.length] = pid1; } for (var i = 0; i < notTogthers1.length; i++) { // console.warn("包含uid1的数组 111 "+i+" "+JSON.stringify(notTogthers1[i].uidList)); for (var j = 0; j < notTogthers1[i].uidList.length; j++) { let item = notTogthers1[i].uidList[j]; let itemP = notTogthers1[i].pidList[j]; if(newList.indexOf(item) == -1){ newList[newList.length] = item; newPList[newPList.length] = itemP; } } yield notTogthers1[i].removeAsync(); } // console.warn("处理完uid1之后的newlist 111 "+JSON.stringify(newList)); var notTogthers2 = yield app.models.NotGameTogther.findMongoAsync({ uidList: uid2 },'_id uidList pidList'); if(notTogthers2.length == 0) { newList[newList.length] = uid2; newPList[newPList.length] = pid2; } for (var i = 0; i < notTogthers2.length; i++) { // console.warn("包含uid1的数组 111 "+i+" "+JSON.stringify(notTogthers2[i].uidList)); for (var j = 0; j < notTogthers2[i].uidList.length; j++) { let item = notTogthers2[i].uidList[j]; let itemP = notTogthers2[i].pidList[j]; if(newList.indexOf(item) == -1){ newList[newList.length] = item; newPList[newPList.length] = itemP; } } yield notTogthers2[i].removeAsync(); } // console.warn("处理完uid2之后的newlist 111 "+JSON.stringify(newList)); if(newList.length == 0) { newList = [uid1,uid2]; newPList = [pid1,pid2]; } var newNotTogther = new app.models.NotGameTogther({ _id: uuid.v1(), // UUID 标识 uidList: _.cloneDeep(newList), // 不能在同一桌游戏的玩家userid pidList: _.cloneDeep(newPList) // 不能在同一桌游戏的玩家_id }); yield newNotTogther.saveAsync(); // console.warn("?????????555 "); } else if(type == 2){ var notTogther = yield app.models.NotGameTogther.findByIdAsync(id, '_id uidList'); if (notTogther) { // console.warn("找到了"); yield notTogther.removeAsync(); } else{ return self.writeOut('fail: id error!', res); } } else if(type == 3){ var notTogther = yield app.models.NotGameTogther.findByIdAsync(id, '_id uidList pidList'); if (notTogther) { let newuidList = []; let newpidList = []; for (var i = 0; i < notTogther.uidList.length; i++) { if(notTogther.uidList[i] != uid1){ newuidList[newuidList.length] = notTogther.uidList[i]; newpidList[newpidList.length] = notTogther.pidList[i]; } } if(newuidList.length == notTogther.uidList.length){ return self.writeOut('fail: uid1 not find!', res); } else{ if(newuidList.length > 1){ notTogther.uidList = _.cloneDeep(newuidList); notTogther.pidList = _.cloneDeep(newpidList); yield notTogther.saveAsync(); } else{ yield notTogther.removeAsync(); } } } else{ return self.writeOut('fail: id error!', res); } } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //后台设置玩家禁赛 proto.setJinSaiAsync = P.coroutine(function* (query, method, res) { console.warn("setJinSaiAsync 后台设置玩家禁赛"); var pid = query['id']; if (!pid) { return this.writeOut('fail: pid error!', res); } var uid = parseInt(query['uid']) || 0; if (!uid) { return this.writeOut('fail: uid error!', res); } // var stime = Number(query['stime']) || 0;; // if (!stime) { // return this.writeOut('fail: stime error!', res); // } var sign = query['sign']; if (!sign) { return this.writeOut('fail: sign error!', res); } if (!checkSign(sign)) { return this.writeOut('fail: sign error!', res); } var self = this; var app = this.app; return app.memdb.goose.transactionAsync(P.coroutine(function* () { var jinsai = yield app.models.JinSaiInfo.findByIdAsync(pid, '_id userId'); if (jinsai) { yield jinsai.removeAsync(); } else{ var jinsaiinfo = new app.models.JinSaiInfo({ _id: pid, // UUID 标识 userId: uid // 比赛代理的标识 }); yield jinsaiinfo.saveAsync(); } return self.writeOut('999999', res); }), app.getServerId()) .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail')); }); //TL++,得到指定时间戳(_time)当日0点的时间戳 proto.getzdLDSJC = function (_time){ var today = new Date(_time); today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0); let jrsjc = today.getTime(); // console.warn("111得到今日0点的时间戳 ",jrsjc, typeof jrsjc); return jrsjc; }; //ts++签名验证 function checkSign(sign) { var signKey = 'defe6d21422c8b770767f74fcea95'; if (sign!=signKey) return false; return true; };