manage.js 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765
  1. 'use strict';
  2. var quick = require('quick-pomelo');
  3. var P = quick.Promise;
  4. var _ = require('lodash');
  5. var url = require('url');
  6. var md5 = require('md5');
  7. var http = require('http');
  8. var uuid = require('node-uuid');
  9. var qs = require('querystring');
  10. var conf = require('./conf.json');
  11. var C = require('../share/constant');
  12. var configCommon = require('../share/configCommon');//////TL++配置相关的公共方法
  13. var logger = quick.logger.getLogger('fhmj', __filename);
  14. // 构造方法
  15. var Controller = function (app) {
  16. this.app = app;
  17. this.uptime = Date.now();
  18. this.port = app.getCurServer().httpPort;
  19. this.server = http.createServer((req, res) => this.handleAsync(req, res));
  20. this.server.listen(this.port);
  21. this.lconfigCommon = new configCommon(this.app);
  22. };
  23. // 导出方法
  24. module.exports = function (app) {
  25. return new Controller(app);
  26. };
  27. // 原型对象
  28. var proto = Controller.prototype;
  29. // 路由函数
  30. proto.route = function (pathname) {
  31. switch (pathname) {
  32. case '/setmyurl.nd': return (query, method, res) => this.setMyUrlAsync(query, method, res);//设置Grade url
  33. case '/setAllAgenterMyurl.nd': return (query, method, res) => this.setAllAgenterMyurlAsync(query, method, res);//设置所有推广的地址
  34. case '/setAgenterMyurl.nd': return (query, method, res) => this.setAgenterMyurlAsync(query, method, res);//设置单个推广的地址
  35. case '/setAgentOther.nd': return (query, method, res) => this.setAgentOtherAsync(query, method, res);//设置单个推广的其他信息
  36. case '/adddiamond.nd': return (query, method, res) => this.addDiamondAsync(query, method, res);//后台加钻石
  37. case '/clearUser.nd': return (query, method, res) => this.clearUserAsync(query, method, res);//删除用户
  38. case '/freetable.nd': return (query, method, res) => this.freeTableAsync(query, method, res);//清空房间
  39. case '/setPlayerPayTop.nd': return (query, method, res) => this.setPlayerPayTopAsync(query, method, res);//设置玩家充值上限
  40. case '/setWeiHu.nd': return (query, method, res) => this.setWeiHuAsync(query, method, res);//设置维护
  41. case '/setPlayerEnable.nd': return (query, method, res) => this.setPlayerEnableAsync(query, method, res);//设置用户是否冻结
  42. case '/setAgentInfo.nd': return (query, method, res) => this.setAgentInfoAsync(query, method, res);//设置推广信息(java后台用)
  43. case '/addMail.nd': return (query, method, res) => this.addMailAsync(query, method, res);//后台给玩家发邮件
  44. case '/sidAridChange.nd': return (query, method, res) => this.sidAridChangeAsync(query, method, res);//显示uid和实际uid互相转换
  45. case '/addRaceTime.nd': return (query, method, res) => this.addRaceTimeAsync(query, method, res);//后台增加比赛的开始和结束时间
  46. case '/setRaceTimeOut.nd': return (query, method, res) => this.setRaceTimeOutAsync(query, method, res);//后台设置比赛是否过期
  47. case '/setNotGameTogther.nd': return (query, method, res) => this.setNotGameTogtherAsync(query, method, res);//后台增设置不能在同一桌游戏的玩家
  48. case '/setJinSai.nd': return (query, method, res) => this.setJinSaiAsync(query, method, res);//设置禁赛玩家
  49. case '/setSGJiangChi.nd': return (query, method, res) => this.setSGJiangChiAsync(query, method, res);//设置水果机奖池信息
  50. case '/getSGATypeAll.nd': return (query, method, res) => this.getSGATypeAllAsync(query, method, res);//得到水果机某个字段的总和
  51. case '/sgjRWFJOver.nd': return (query, method, res) => this.sgjRWFJOverAsync(query, method, res);//水果机任务发奖完成
  52. }
  53. };
  54. // 写出数据
  55. proto.writeOut = function (query, res) {
  56. if (typeof query != 'object') {
  57. return res.end(String(query));
  58. }
  59. return res.end(JSON.stringify(query));
  60. };
  61. // 跨域选项
  62. const ACCESS = {
  63. "Content-Type": "text/plain;charset=utf-8",
  64. "Access-Control-Allow-Origin": "*",
  65. "Access-Control-Allow-Headers": "X-Requested-With",
  66. "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS"
  67. };
  68. // 入口函数
  69. proto.handleAsync = P.coroutine(function* (req, res) {
  70. var pathname = url.parse(req.url).pathname;
  71. var phandler = this.route(pathname);
  72. if (!phandler) {
  73. res.writeHead(404, ACCESS);
  74. return res.end('WARNING: Not Found!');
  75. }
  76. else {
  77. res.writeHead(200, ACCESS);
  78. if (req.method.toLowerCase() == 'get') {
  79. let query = url.parse(req.url, true).query;
  80. return phandler(query, req.method, res);
  81. }
  82. else if (req.method.toLowerCase() == 'post') {
  83. let data = '';
  84. req.on('data', (d) => { data += d; });
  85. req.on('end', () => {
  86. let query = { __post__: data };
  87. let regexp = /^\s*{(\s*?".*?":.*\s*)*}\s*$/;
  88. if (regexp.test(data)) try { query = JSON.parse(data); } catch (e) { }
  89. else if (data.indexOf('=') != -1) query = qs.parse(data);
  90. return phandler(query, req.method, res);
  91. });
  92. }
  93. }
  94. });
  95. //ts++ 设置 grade myurl
  96. proto.setMyUrlAsync = P.coroutine(function* (query, method, res) {
  97. var playerId = query['playerid'];
  98. if (!playerId) {
  99. return this.writeOut('fail: userid error!', res);
  100. }
  101. var grade = Number(query['grade']);
  102. if (!grade) {
  103. return this.writeOut('fail: grade error!', res);
  104. }
  105. var myurl = query['myurl'];
  106. if (!myurl) {
  107. return this.writeOut('fail: myurl error!', res);
  108. }
  109. var sign = query['sign'];
  110. if (!sign) {
  111. return this.writeOut('fail: sign error!', res);
  112. }
  113. if (!checkSign(sign)) {
  114. return this.writeOut('fail: sign error!', res);
  115. }
  116. var self = this;
  117. var app = this.app;
  118. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  119. var player = yield app.models.Player.findByIdAsync(playerId, 'grade myurl');
  120. if (player) {
  121. player.grade = grade;
  122. player.myurl = myurl;
  123. yield player.saveAsync();
  124. console.warn("设置设置 grade -------------------修改");
  125. }
  126. return self.writeOut('vvvvvv', res);
  127. }), app.getServerId())
  128. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  129. });
  130. //设置所有推广的地址
  131. proto.setAllAgenterMyurlAsync = P.coroutine(function* (query, method, res) {
  132. console.warn("设置所有推广的地址 ");
  133. var playerId = query['mid'];
  134. if (!playerId) {
  135. return this.writeOut('fail: userid error!', res);
  136. }
  137. var myurl = query['myurl'];
  138. if (!myurl) {
  139. return this.writeOut('fail: myurl error!', res);
  140. }
  141. var sign = query['sign'];
  142. if (!sign) {
  143. return this.writeOut('fail: sign error!', res);
  144. }
  145. if (!checkSign(sign)) {
  146. return this.writeOut('fail: sign error!', res);
  147. }
  148. console.warn("设置所有推广的地址222 "+" playerId "+playerId+" myurl "+myurl);
  149. var self = this;
  150. var app = this.app;
  151. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  152. let msg = '999999'
  153. console.warn("设置所有推广的地址222 ")
  154. // //yield app.models.Agenter.updateMany({update: {$set: {myGrade:2}}, upsert:true})
  155. // let agentArr = yield app.models.Agenter.findMongoAsync({"myGrade" :{$ne :1}});
  156. // console.warn("设置所有推广的地址3 "+JSON.stringify(agentArr));
  157. // console.warn("设置所有推广的地址333 "+agentArr.length);
  158. let agentArr = yield app.models.Agenter.findMongoAsync({"myUrl" :{$ne :myurl}});
  159. // console.warn("设置所有推广的地址31 "+JSON.stringify(agentArr));
  160. // console.warn("设置所有推广的地址3331 "+agentArr.length);
  161. for (var i = 0; i < agentArr.length; i++) {
  162. let agenter = agentArr[i];
  163. if (agenter) {
  164. // agenter.grade = grade;
  165. let isChange = (agenter.myUrl != myurl)
  166. if(isChange){
  167. agenter.myUrl = myurl;
  168. yield agenter.saveAsync();
  169. }
  170. console.warn("设置所有推广的地址444 isChange "+isChange+" agenter.myUrl "+agenter.myUrl);
  171. }
  172. }
  173. if(agentArr.length == 0) msg = 'no need change';
  174. console.warn("设置所有推广的地址555 ");
  175. return self.writeOut(msg, res);
  176. }), app.getServerId())
  177. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  178. });
  179. //设置单个推广的地址
  180. proto.setAgenterMyurlAsync = P.coroutine(function* (query, method, res) {
  181. // console.warn("设置单个推广的地址 ");
  182. var playerId = query['aid'];
  183. if (!playerId) {
  184. return this.writeOut('fail: userid error!', res);
  185. }
  186. var type = Number(query['type']);
  187. if (!type) {
  188. return this.writeOut('fail: type error!', res);
  189. }
  190. var myurl = query['myurl'];
  191. if (type == 1 && !myurl) {
  192. return this.writeOut('fail: myurl error!', res);
  193. }
  194. var level = query['level'];
  195. if (type == 2 && !level) {
  196. return this.writeOut('fail: level error!', res);
  197. }
  198. var sign = query['sign'];
  199. if (!sign) {
  200. return this.writeOut('fail: sign error!', res);
  201. }
  202. if (!checkSign(sign)) {
  203. return this.writeOut('fail: sign error!', res);
  204. }
  205. // console.warn("设置单个推广的地址222 "+" playerId "+playerId+" type "+type+" myurl "+myurl+" level "+level);
  206. var self = this;
  207. var app = this.app;
  208. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  209. let msg = ''
  210. // console.warn("设置单个推广的地址333 ");//Agenter
  211. var player = yield app.models.Agenter.findByIdAsync(playerId, 'myUrl');
  212. if (player) {
  213. // player.grade = grade;
  214. let isChange = false;
  215. if(type == 1) {
  216. isChange = (player.myUrl != myurl)
  217. player.myUrl = myurl;
  218. }
  219. if(isChange) yield player.saveAsync();
  220. msg = '999999'
  221. // console.warn("设置单个推广的地址444 isChange "+isChange+" player.myUrl "+player.myUrl);
  222. }
  223. else msg = 'agent not find'
  224. // console.warn("设置单个推广的地址555 ");
  225. return self.writeOut(msg, res);
  226. }), app.getServerId())
  227. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  228. });
  229. //设置单个推广的其他信息
  230. proto.setAgentOtherAsync = P.coroutine(function* (query, method, res) {
  231. // console.warn("设置单个推广的信息 ",query);
  232. var playerId = query['aid'];
  233. if (!playerId) {
  234. return this.writeOut('fail: userid error!', res);
  235. }
  236. var change = query['change'];
  237. if (!change) {
  238. return this.writeOut('fail: change error!', res);
  239. }
  240. var value = query['value'];
  241. if(change != "parentAgenterId" && change != "playerId"){
  242. value = Number(value);
  243. }
  244. var sign = query['sign'];
  245. if (!sign) {
  246. return this.writeOut('fail: sign error!', res);
  247. }
  248. if (!checkSign(sign)) {
  249. return this.writeOut('fail: sign error!', res);
  250. }
  251. // console.warn("设置单个推广的地址222 "+" playerId "+playerId+" change "+change+" value "+value);
  252. var self = this;
  253. var app = this.app;
  254. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  255. let msg = ''
  256. // console.warn("设置单个推广的地址333 ");//Agenter
  257. var player = yield app.models.Agenter.findByIdAsync(playerId, 'levelFlag');
  258. if (player) {
  259. let isChange = false;
  260. if(change == "levelFlag" && player.levelFlag != value)
  261. {
  262. isChange=true;
  263. player.levelFlag = value;
  264. }
  265. if(change == "enabled" && (value == 0 || value == 1 ) && player.enabled!=value)
  266. {
  267. isChange=true;
  268. player.enabled = value;
  269. }
  270. if(change == "parentAgenterId")
  271. {
  272. if(!value){
  273. if(player.parentAgenterId != ""){
  274. player.parentAgenterId = "";
  275. yield player.saveAsync();
  276. return self.writeOut('999999', res);
  277. }
  278. else{
  279. return self.writeOut('no need change.', res);
  280. }
  281. }
  282. let agenterList = yield app.models.Agenter.findMongoAsync({agentNo:value}, '_id agenterNo levelFlag enabled parentAgenterId');
  283. if (agenterList.length == 1) {
  284. if(agenterList[0].levelFlag != 2 || agenterList[0].enabled == 0){
  285. return self.writeOut('cant add the agent because unenable or level error!', res);
  286. }
  287. if(player.parentAgenterId != agenterList[0]._id){
  288. isChange=true;
  289. player.parentAgenterId = agenterList[0]._id;
  290. }
  291. else{
  292. return self.writeOut('parent no change !', res);
  293. }
  294. }
  295. else{
  296. return self.writeOut('agentNo Error!', res);
  297. }
  298. }
  299. if(isChange) yield player.saveAsync();
  300. msg = '999999'
  301. // console.warn("设置单个推广的地址444 isChange "+isChange+" player.myUrl "+player.myUrl);
  302. }
  303. else msg = 'agent not find'
  304. // console.warn("设置单个推广的地址555 ");
  305. return self.writeOut(msg, res);
  306. }), app.getServerId())
  307. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  308. });
  309. //ts++ 删除玩家
  310. proto.clearUserAsync = P.coroutine(function* (query, method, res) {
  311. console.warn("删除玩家-------------------");
  312. var playerId = query['playerid'];
  313. if (!playerId) {
  314. return this.writeOut('', res);//fail: userid error!
  315. }
  316. //console.warn("删除玩家-------------------playerId:",playerId);
  317. var sign = query['sign'];
  318. if (!sign) {
  319. return this.writeOut('fail: sign error!', res);
  320. }
  321. if (!checkSign(sign)) {
  322. return this.writeOut('', res);
  323. }
  324. var self = this;
  325. var app = this.app;
  326. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  327. var player = yield app.models.Player.findByIdAsync(playerId);
  328. if (player) {
  329. yield player.removeAsync();
  330. console.warn("删除玩家-------------------成功");
  331. return self.writeOut('999999', res);
  332. }
  333. return self.writeOut('fail: no object !', res);
  334. }), app.getServerId())
  335. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  336. });
  337. //ts++ 清空房间
  338. proto.freeTableAsync = P.coroutine(function* (query, method, res) {
  339. // console.warn("清空房间-------------------");
  340. var playerId = query['playerId'];
  341. if (!playerId) {
  342. return this.writeOut('fail: playerId error!', res);//fail: userid error!
  343. }
  344. var change = query['change'];
  345. if (!change) {
  346. return this.writeOut('fail: change error!', res);
  347. }
  348. console.warn("清空房间-------------------playerId:",playerId,change);
  349. var sign = query['sign'];
  350. if (!sign) {
  351. return this.writeOut('fail: sign error!', res);
  352. }
  353. //console.warn("清空房间-------------------sign:",sign);
  354. if (!checkSign(sign)) {
  355. return this.writeOut('', res);
  356. }
  357. var self = this;
  358. var app = this.app;
  359. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  360. var player = yield app.models.Player.findByIdAsync(playerId, 'tableId rTableId gameId gameServerId tel pwd');
  361. if (player) {
  362. if(change == "freeTable"){
  363. player.rTableId = 0;
  364. player.tableId = "";
  365. player.gameId = 0;
  366. player.gameServerId = "";
  367. }
  368. else if(change == "unbindTel"){
  369. player.tel = '';
  370. player.pwd = '';
  371. }
  372. yield player.saveAsync();
  373. console.warn("清空房间-------------------修改成功");
  374. }
  375. return self.writeOut('999999', res);
  376. }), app.getServerId())
  377. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  378. });
  379. //////TL++,设置玩家充值上限
  380. proto.setPlayerPayTopAsync = P.coroutine(function* (query, method, res) {
  381. console.warn("设置玩家充值上限-------------------",query);
  382. var uppid = query['uppid'];
  383. if (!uppid) {
  384. return this.writeOut('fail: uppid error!', res);
  385. }
  386. var value = Number(query['value']) || -10;
  387. if(query['value'] == "0") value = 0;
  388. if (value < -1) {
  389. return this.writeOut('fail: value error!', res);
  390. }
  391. var sign = query['sign'];
  392. if (!sign) {
  393. return this.writeOut('fail: sign error!', res);
  394. }
  395. if (!checkSign(sign)) {
  396. return this.writeOut('fail: sign error!!!', res);
  397. }
  398. var self = this;
  399. var app = this.app;
  400. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  401. let wjsx = yield app.models.PayLimit.findByIdAsync(uppid, 'paytop registerTime');
  402. if (wjsx) {
  403. wjsx.paytop = value;
  404. wjsx.registerTime = Date.now();
  405. yield wjsx.saveAsync();
  406. console.warn("设置玩家充值上限成功-------------------uppid:",uppid,value);
  407. }
  408. else
  409. {
  410. var player = yield app.models.Player.findByIdAsync(uppid, 'userId name');
  411. if (!player) {
  412. return this.writeOut('fail: no object !', res);
  413. }
  414. let startTime = self.getzdLDSJC(Date.now());
  415. let jrzcz = 0;
  416. var endTime = startTime + 86400000;
  417. var opts = { time: { $gte: startTime, $lt: endTime },playerId: uppid, paystate: { $gte: 1 }};
  418. var list = yield app.models.PayRecord.findMongoAsync(opts, 'total_fee');
  419. for (let i = 0; i < list.length; ++i) {
  420. jrzcz += list[i].total_fee;
  421. }
  422. var newwjsx = new app.models.PayLimit({
  423. _id: uppid,
  424. userId: player.userId,
  425. name: player.name,
  426. paytop: value,
  427. paytotal: jrzcz,
  428. dataTime: startTime,
  429. });
  430. yield newwjsx.saveAsync();
  431. }
  432. return self.writeOut('999999', res);
  433. }), app.getServerId())
  434. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  435. });
  436. //////TL++,设置维护
  437. proto.setWeiHuAsync = P.coroutine(function* (query, method, res) {
  438. console.warn("设置维护-------------------",query);
  439. // var playerId = query['playerid'];
  440. // if (!playerId) {
  441. // return this.writeOut('fail: userid error!', res);
  442. // }
  443. var updid = Number(query['updid']);
  444. var value = query['value'];
  445. if (!value) {
  446. return this.writeOut('fail: value error!', res);
  447. }
  448. if(updid==1)
  449. {
  450. let stateWH = Number(value)||0;
  451. if (stateWH!=0 && stateWH!=1 && stateWH!=2) {
  452. return this.writeOut('fail: stateWH error!!!', res);
  453. }
  454. }
  455. else if(updid==2)
  456. {
  457. }
  458. else if(updid==3)
  459. {
  460. let rebaterate = Number(value)||0
  461. if (rebaterate < 0 || rebaterate > 100) {
  462. return this.writeOut('fail: rebaterate error!', res);
  463. }
  464. }
  465. else if(updid==4){
  466. }
  467. else if(updid==5){
  468. let yxndlbTime = Number(value)||0
  469. if (yxndlbTime <= 0) {
  470. return this.writeOut('fail: yxndlbTime error!', res);
  471. }
  472. }
  473. else if(updid==6){
  474. }
  475. else
  476. {
  477. return this.writeOut('fail: updid error!!!', res);
  478. }
  479. var sign = query['sign'];
  480. if (!sign) {
  481. return this.writeOut('fail: sign error!', res);
  482. }
  483. //console.warn("清空房间-------------------sign:",sign);
  484. if (!checkSign(sign)) {
  485. return this.writeOut('fail: sign error!!!', res);
  486. }
  487. var self = this;
  488. var app = this.app;
  489. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  490. var dataSystemConfig = yield app.models.WHstate.findByIdAsync('wh', 'stateWH whTip rebaterate shareGive yxndlbTime yxndlbTip');
  491. //console.warn("系统配置",dataSystemConfig);
  492. if (dataSystemConfig) {
  493. if(updid==1)
  494. {
  495. let stateWH = Number(value)||0;
  496. dataSystemConfig.stateWH = stateWH;
  497. }
  498. else if(updid==2)
  499. {
  500. dataSystemConfig.whTip = value;
  501. }
  502. else if(updid==3)
  503. {
  504. let rebaterate = Number(value)||0
  505. dataSystemConfig.rebaterate = rebaterate;
  506. }
  507. else if(updid==4)
  508. {
  509. let shareGive = Number(value)||0
  510. dataSystemConfig.shareGive = shareGive;
  511. }
  512. else if(updid==5)
  513. {
  514. let yxndlbTime = Number(value)||0
  515. dataSystemConfig.yxndlbTime = yxndlbTime;
  516. }
  517. else if(updid==6)
  518. {
  519. dataSystemConfig.yxndlbTip = value;
  520. }
  521. // else if(updid==7)
  522. // {
  523. // dataSystemConfig.linkhall = value;
  524. // }
  525. // else if(updid==8)
  526. // {
  527. // var regDiamond = Number(value) ||100;
  528. // if (regDiamond<0) {
  529. // data.msg='注册赠送值为错误';
  530. // return self.writeOut(data, res);
  531. // }
  532. // dataSystemConfig.regDiamond = regDiamond;
  533. // }
  534. //console.warn("修改系统配置",updid,value);
  535. yield dataSystemConfig.saveAsync();
  536. }
  537. else
  538. {
  539. return this.writeOut('fail: no object !', res);
  540. }
  541. return self.writeOut('999999', res);
  542. }), app.getServerId())
  543. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  544. });
  545. // 后台增加钻石
  546. proto.addDiamondAsync = P.coroutine(function* (query, method, res) {
  547. console.warn("590 query:",query)
  548. var playerId = query['playerid'];
  549. if (!playerId) {
  550. return this.writeOut('fail: userid error!', res);
  551. }
  552. // console.warn("后台增加钻石-------------------playerId:",playerId);
  553. var managerId = query['managerid'];
  554. var diamond = Number(query['diamond']);
  555. var sign = query['sign'];
  556. if (!sign) {
  557. return this.writeOut('fail: sign error!', res);
  558. }
  559. if (!checkSign(sign)) {
  560. return this.writeOut('fail: sign error!', res);
  561. }
  562. console.warn("query:",query)
  563. // console.warn("后台增加钻石-------------------diamond:",diamond);
  564. var self = this;
  565. var app = this.app;
  566. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  567. //后台增加钻石的话给用户发邮件通知,用户在邮件里领取之后修改玩家钻石,后台扣钻则不发邮件
  568. if(diamond < 0){
  569. var player = yield app.models.Player.findByIdAsync(playerId, 'diamond');
  570. if (player) {
  571. let dSource=player.diamond;
  572. let dNow=player.diamond+diamond;
  573. player.diamond += diamond;
  574. yield player.saveAsync();
  575. // 钻石记录
  576. var diamondrecord = new app.models.DiamondRecord({
  577. _id: uuid.v1(),
  578. playerId: playerId,
  579. dType: 7,//后台
  580. dSource: dSource,
  581. dSwap: diamond,
  582. dNow: dNow,
  583. tableId: managerId
  584. });
  585. yield diamondrecord.saveAsync();
  586. }
  587. var SGJUserTongjis = yield app.models.SGJUserTongji.findMongoAsync({todaytime:self.getTodaySJC()})
  588. var SGJUserTongji = null
  589. if (SGJUserTongjis.length == 0) {
  590. SGJUserTongji = app.models.SGJUserTongji({
  591. _id: uuid.v1(),
  592. //userId: player.userId,
  593. houtaiU: diamond,
  594. todaytime: self.getTodaySJC()
  595. });
  596. yield SGJUserTongji.saveAsync()
  597. }else {
  598. SGJUserTongji = SGJUserTongjis[0]
  599. console.warn("SGJUserTongji:",SGJUserTongji)
  600. //SGJUserTongji.usdt = afterusdt
  601. SGJUserTongji.houtaiU = (Number(SGJUserTongji.houtaiU) +Number(diamond)).toFixed(2)//下注
  602. yield SGJUserTongji.saveAsync()
  603. }
  604. }
  605. else if(diamond > 0){
  606. console.warn("playerId:",playerId)
  607. var player = yield app.models.Player.findByIdAsync(playerId, 'userId');
  608. if (player) {
  609. var mail = yield app.models.Mails.findByIdAsync(playerId, 'mailInfos');
  610. if (mail) {
  611. console.warn("638")
  612. let item = {
  613. _id: "",
  614. index: mail.mailInfos.length, // 邮件下标
  615. tittleT: 3, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  616. descT: 3, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  617. reward: 1, // 有无奖励 0:无奖励 1:有奖励
  618. rewardT: 1, // 奖励类型 0:未定义 1:钻石,
  619. rewardC: diamond, // 奖励数量
  620. receive: 0, // 是否领取 0:未领取 1:已领取
  621. read: 0, // 是否已读 0:未读 1:已读
  622. form:managerId, //邮件来源
  623. sendTime: Date.now() // 发送日期
  624. }
  625. let newItem = _.clone(mail.mailInfos);
  626. let newItem2 = [0].concat(newItem);
  627. newItem2[0] = item;
  628. if(newItem2.length > 60){
  629. newItem2 = newItem2.slice(0,60)
  630. }
  631. mail.mailInfos = [];
  632. mail.mailInfos = _.clone(newItem2);
  633. yield mail.saveAsync();
  634. }
  635. else{
  636. let item = {
  637. _id: "",
  638. index: 0, // 邮件下标
  639. tittleT: 3, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  640. descT: 3, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  641. reward: 1, // 有无奖励 0:无奖励 1:有奖励
  642. rewardT: 1, // 奖励类型 0:未定义 1:钻石,
  643. rewardC: diamond, // 奖励数量
  644. receive: 0, // 是否领取 0:未领取 1:已领取
  645. read: 0, // 是否已读 0:未读 1:已读
  646. form:managerId, //邮件来源
  647. sendTime: Date.now() // 发送日期
  648. }
  649. let newItem = [];
  650. newItem[0] = item;
  651. var newMail = new app.models.Mails({
  652. _id: playerId, // 用户id(player表的主键)
  653. userId: player.userId, // 用户的userId
  654. mailInfos: newItem // 该活动的达成条件和奖励信息列表
  655. });
  656. yield newMail.saveAsync();
  657. }
  658. }
  659. }
  660. return self.writeOut('999999', res);
  661. }), app.getServerId())
  662. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  663. });
  664. // 设置用户是否禁用
  665. proto.setPlayerEnableAsync = P.coroutine(function* (query, method, res) {
  666. var playerId = query['playerId'];
  667. if (!playerId) {
  668. return this.writeOut('fail: userid error!', res);
  669. }
  670. var enable = parseInt(query.enable);
  671. if (enable != 0 && enable != 1) return this.writeOut('enable value error', res);
  672. var sign = query['sign'];
  673. if (!sign) {
  674. return this.writeOut('fail: sign error!', res);
  675. }
  676. if (!checkSign(sign)) {
  677. return this.writeOut('fail: sign error!', res);
  678. }
  679. console.warn("设置用户是否禁用------- playerId: "+playerId +" enable: "+enable);
  680. var self = this;
  681. var app = this.app;
  682. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  683. var player = yield app.models.Player.findByIdAsync(playerId, 'enable');
  684. if (player) {
  685. player.enable = enable;
  686. yield player.saveAsync();
  687. }
  688. else {
  689. let msg = 'player not find';
  690. return self.writeOut(msg, res);
  691. }
  692. return self.writeOut('999999', res);
  693. }), app.getServerId())
  694. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  695. });
  696. //ts++ 设置代理
  697. proto.setAgentInfoAsync = P.coroutine(function* (query, method, res) {
  698. // console.warn("设置代理-------------------");
  699. logger.warn("setAgentInfoAsync000");////cssj
  700. var agentId = query['agentId'];
  701. if (!agentId) {
  702. return this.writeOut('fail: agentId error!', res);
  703. }
  704. var agentName = query['agentName'];
  705. var contact = query['contact'];
  706. if (!contact) {
  707. return this.writeOut('fail: contact error!', res);
  708. }
  709. var tel = query['tel'];
  710. if (!tel) {
  711. return this.writeOut('fail: tel error!', res);
  712. }
  713. var rewardRate = query['rewardRate'];
  714. var parentRate = query['parentRate'];
  715. var levelFlag = query['levelFlag'];
  716. var enabled = Number(query['enabled']) || 1;
  717. var pwd = query['pwd'];
  718. var sign = query['sign'];
  719. if (!sign) {
  720. return this.writeOut('fail: sign error!', res);
  721. }
  722. //console.warn("设置代理-------------------sign:",sign);
  723. if (!checkSign(sign)) {
  724. return this.writeOut('fail: sign error!', res);
  725. }
  726. // console.warn("设置代理-------------------222 agentId "+agentId);
  727. var self = this;
  728. var app = this.app;
  729. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  730. var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'agentName myUrl rewardRate contact tel parentAgenterId parentRate levelFlag enabled pwd');
  731. if (agenter) {
  732. let str0s = "setAgentInfoAsync old "+ JSON.stringify(agenter)
  733. logger.warn(str0s);////cssj
  734. var upd=false;
  735. if(agentName!='' && agenter.agentName!=agentName)
  736. {
  737. upd=true;
  738. agenter.agentName = agentName;
  739. }
  740. if(contact!='' && agenter.contact!=contact)
  741. {
  742. upd=true;
  743. agenter.contact = contact;
  744. }
  745. if(tel!='' && agenter.tel!=tel)
  746. {
  747. upd=true;
  748. agenter.tel = tel;
  749. }
  750. if(rewardRate || rewardRate == 0)
  751. {
  752. upd=true;
  753. agenter.rewardRate = parseInt(rewardRate);
  754. }
  755. if(parentRate || parentRate == 0)
  756. {
  757. upd=true;
  758. agenter.parentRate = parseInt(parentRate);
  759. }
  760. if((levelFlag || levelFlag == 0) && agenter.levelFlag != levelFlag){
  761. if(levelFlag == 2){
  762. if(agenter.parentAgenterId.length == 0 ){
  763. upd=true;
  764. agenter.levelFlag = levelFlag;
  765. }
  766. }
  767. else{
  768. upd=true;
  769. agenter.levelFlag = levelFlag;
  770. }
  771. }
  772. if((enabled == 0 || enabled == 1 ) && agenter.enabled!=enabled)
  773. {
  774. upd=true;
  775. agenter.enabled = enabled;
  776. }
  777. if(pwd!='' && agenter.pwd!=pwd)
  778. {
  779. upd=true;
  780. agenter.pwd = pwd;
  781. }
  782. // console.warn("设置代理-------------------333 upd "+upd+" agenter "+JSON.stringify(agenter));
  783. if(upd)
  784. {
  785. let str1s = "setAgentInfoAsync new "+ JSON.stringify(agenter)
  786. logger.warn(str1s);////cssj
  787. yield agenter.saveAsync();
  788. // console.warn("设置代理-------------------成功");
  789. }
  790. else
  791. {
  792. // console.warn("设置代理-------------------无修改");
  793. }
  794. }
  795. // console.warn("设置代理-------------------444 ");
  796. return self.writeOut('999999', res);
  797. }), app.getServerId())
  798. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  799. });
  800. //ts++ 设置水果机奖池信息,设置水果机配置
  801. proto.setSGJiangChiAsync = P.coroutine(function* (query, method, res) {
  802. console.warn("manage设置水果机奖池信息-------------------",query);
  803. var type = Number(query['type']) || 0;
  804. if (!type) {
  805. return this.writeOut('fail: type error!', res);
  806. }
  807. var index = Number(query['index']) || 0;
  808. if (!index || index <= 0 || index > 3) {
  809. return this.writeOut('fail: index error!', res);
  810. }
  811. var dw = Number(query['dw']) || 0;
  812. if (!dw || dw <= 0 || dw > 3) {
  813. return this.writeOut('fail: dw error!', res);
  814. }
  815. var key = Number(query['key']) || 0;
  816. if (!key) {
  817. return this.writeOut('fail: key error!', res);
  818. }
  819. var value = Number(query['value']) || 0;
  820. if (value < 0) {
  821. return this.writeOut('fail: value error!'+value, res);
  822. }
  823. var sign = query['sign'];
  824. if (!sign) {
  825. return this.writeOut('fail: sign error!', res);
  826. }
  827. if (!checkSign(sign)) {
  828. return this.writeOut('fail: sign error!', res);
  829. }
  830. console.warn("manage设置水果机奖池信息-------------------",type,index,dw,key,value);
  831. var self = this;
  832. var app = this.app;
  833. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  834. let jcPools = yield app.models.SGJJC.findByIdAsync('sgjjcs');
  835. if (jcPools) {
  836. console.warn("修改之前",jcPools);
  837. let isUp = false;
  838. if(type == 1){//游戏奖池
  839. if(key >= 1 && key <= 3){
  840. let list = [jcPools.pools,jcPools.levels,jcPools.cspools]
  841. console.warn("list:",list)
  842. console.warn(" index:",index," key:",key)
  843. if(index > 0 && index <= list[key-1].length && list[key-1][index-1] != value){
  844. list[key-1][index-1] = value;
  845. // ✅ 关键:告诉模型数组变了
  846. console.warn("list:",list)
  847. console.warn("value:",value)
  848. console.warn("jcPools.pools:",jcPools.pools)
  849. isUp = true;
  850. }
  851. }
  852. else if((key >= 4 && key <= 9) && dw > 0 && dw <= 3){
  853. let list = [jcPools.topLimits1,jcPools.topLimits2,jcPools.topLimits3];
  854. if(key == 5) list = [jcPools.lowLimits1,jcPools.lowLimits2,jcPools.lowLimits3];
  855. else if(key == 6) list = [jcPools.paiTopRate1,jcPools.paiTopRate2,jcPools.paiTopRate3];
  856. else if(key == 7) list = [jcPools.paiLowRate1,jcPools.paiLowRate2,jcPools.paiLowRate3];
  857. else if(key == 8) list = [jcPools.bsTopRate1,jcPools.bsTopRate2,jcPools.bsTopRate3];
  858. else if(key == 9) list = [jcPools.bsLowRate1,jcPools.bsLowRate2,jcPools.bsLowRate3];
  859. if(index > 0 && index <= list[dw-1].length && list[dw-1][index-1] != value){
  860. list[dw-1][index-1] = value;
  861. isUp = true;
  862. }
  863. }
  864. }
  865. else if(type == 2){//押大小奖池
  866. if(key >= 1 && key <= 3){
  867. let list = [jcPools.ydxpools,jcPools.ydxlevels,jcPools.ydxcspools]
  868. if(index > 0 && index <= list[key-1].length && list[key-1][index-1] != value){
  869. list[key-1][index-1] = value;
  870. isUp = true;
  871. }
  872. }
  873. else if((key >= 4 && key <= 11) && dw > 0 && dw <= 3){
  874. if(key >= 6 && key <= 9) return self.writeOut('can not set '+key, res);
  875. let list = [jcPools.ydxtopLimits1,jcPools.ydxtopLimits2,jcPools.ydxtopLimits3];
  876. if(key == 5) list = [jcPools.ydxlowLimits1,jcPools.ydxlowLimits2,jcPools.ydxlowLimits3];
  877. else if(key == 10) list = [jcPools.ydxTopRate1,jcPools.ydxTopRate2,jcPools.ydxTopRate3];
  878. else if(key == 11) list = [jcPools.ydxLowRate1,jcPools.ydxLowRate2,jcPools.ydxLowRate3];
  879. if(index > 0 && index <= list[dw-1].length && list[dw-1][index-1] != value){
  880. list[dw-1][index-1] = value;
  881. isUp = true;
  882. }
  883. }
  884. }
  885. if(isUp){
  886. // jcPools.levels = _.cloneDeep(jcPools.levels)//这样写也不行
  887. // yield jcPools.saveAsync();
  888. let jcPools2 = yield app.models.SGJJC.findByIdAsync('sgjjcs');
  889. if(type == 1){//游戏奖池
  890. if(key >= 1 && key <= 3){
  891. console.warn("935 jcpools.pools:",jcPools.pools)
  892. jcPools2.pools = _.cloneDeep(jcPools.pools);
  893. console.warn("jcPools:",jcPools)
  894. jcPools2.levels = _.cloneDeep(jcPools.levels);
  895. jcPools2.cspools = _.cloneDeep(jcPools.cspools);
  896. }
  897. else if(key >= 4 && key <= 9){
  898. jcPools2.topLimits1 = _.cloneDeep(jcPools.topLimits1);
  899. jcPools2.topLimits2 = _.cloneDeep(jcPools.topLimits2);
  900. jcPools2.topLimits3 = _.cloneDeep(jcPools.topLimits3);
  901. jcPools2.lowLimits1 = _.cloneDeep(jcPools.lowLimits1);
  902. jcPools2.lowLimits2 = _.cloneDeep(jcPools.lowLimits2);
  903. jcPools2.lowLimits3 = _.cloneDeep(jcPools.lowLimits3);
  904. jcPools2.paiTopRate1 = _.cloneDeep(jcPools.paiTopRate1);
  905. jcPools2.paiTopRate2 = _.cloneDeep(jcPools.paiTopRate2);
  906. jcPools2.paiTopRate3 = _.cloneDeep(jcPools.paiTopRate3);
  907. jcPools2.paiLowRate1 = _.cloneDeep(jcPools.paiLowRate1);
  908. jcPools2.paiLowRate2 = _.cloneDeep(jcPools.paiLowRate2);
  909. jcPools2.paiLowRate3 = _.cloneDeep(jcPools.paiLowRate3);
  910. jcPools2.bsTopRate1 = _.cloneDeep(jcPools.bsTopRate1);
  911. jcPools2.bsTopRate2 = _.cloneDeep(jcPools.bsTopRate2);
  912. jcPools2.bsTopRate3 = _.cloneDeep(jcPools.bsTopRate3);
  913. jcPools2.bsLowRate1 = _.cloneDeep(jcPools.bsLowRate1);
  914. jcPools2.bsLowRate2 = _.cloneDeep(jcPools.bsLowRate2);
  915. jcPools2.bsLowRate3 = _.cloneDeep(jcPools.bsLowRate3);
  916. }
  917. }
  918. else if(type == 2){//押大小奖池
  919. if(key >= 1 && key <= 3){
  920. jcPools2.ydxpools = _.cloneDeep(jcPools.ydxpools);
  921. jcPools2.ydxlevels = _.cloneDeep(jcPools.ydxlevels);
  922. jcPools2.ydxcspools = _.cloneDeep(jcPools.ydxcspools);
  923. }
  924. else if(key >= 4 && key <= 11){
  925. jcPools2.ydxtopLimits1 = _.cloneDeep(jcPools.ydxtopLimits1);
  926. jcPools2.ydxtopLimits2 = _.cloneDeep(jcPools.ydxtopLimits2);
  927. jcPools2.ydxtopLimits3 = _.cloneDeep(jcPools.ydxtopLimits3);
  928. jcPools2.ydxlowLimits1 = _.cloneDeep(jcPools.ydxlowLimits1);
  929. jcPools2.ydxlowLimits2 = _.cloneDeep(jcPools.ydxlowLimits2);
  930. jcPools2.ydxlowLimits3 = _.cloneDeep(jcPools.ydxlowLimits3);
  931. jcPools2.ydxTopRate1 = _.cloneDeep(jcPools.ydxTopRate1);
  932. jcPools2.ydxTopRate2 = _.cloneDeep(jcPools.ydxTopRate2);
  933. jcPools2.ydxTopRate3 = _.cloneDeep(jcPools.ydxTopRate3);
  934. jcPools2.ydxLowRate1 = _.cloneDeep(jcPools.ydxLowRate1);
  935. jcPools2.ydxLowRate2 = _.cloneDeep(jcPools.ydxLowRate2);
  936. jcPools2.ydxLowRate3 = _.cloneDeep(jcPools.ydxLowRate3);
  937. }
  938. }
  939. console.warn("修改之后 jcPools2:",jcPools2)
  940. yield jcPools2.saveAsync();
  941. // console.warn("奖池更新了",jcPools);
  942. // console.warn("奖池更新了222 ",jcPools2);
  943. jcPools = null;
  944. }
  945. else{
  946. return self.writeOut('value no change ', res);
  947. }
  948. }
  949. else{
  950. return self.writeOut('no jcPools! ', res);
  951. }
  952. return self.writeOut('999999', res);
  953. }), app.getServerId())
  954. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  955. });
  956. //ts++ //得到水果机某个字段的总和
  957. proto.getSGATypeAllAsync = P.coroutine(function* (query, method, res) {
  958. console.warn("manage得到水果机某个字段的总和-------------------");
  959. var type = query['type'];
  960. if (!type) {
  961. return this.writeOut('fail: type error!', res);
  962. }
  963. var sign = query['sign'];
  964. if (!sign) {
  965. return this.writeOut('fail: sign error!', res);
  966. }
  967. if (!checkSign(sign)) {
  968. return this.writeOut('fail: sign error!', res);
  969. }
  970. // let sjk = "SGJUser";
  971. // var sgjUsers = yield this.app.models[sjk].aggregateAsync([
  972. //像上面这样动态查询数据库也是可以的
  973. var sgjUsers = yield this.app.models.SGJUser.aggregateAsync([
  974. { $group: { _id: type, count: { $sum: '$'+type } } }
  975. ]);
  976. console.warn("聚合之后 ",type,JSON.stringify(sgjUsers));
  977. let result = "error: nofind";
  978. if(sgjUsers.length > 0) result = sgjUsers[0].count;
  979. return this.writeOut(result, res);
  980. // var startTime = 1710866910000;
  981. // var endTime = 1711007310000;
  982. // var opts = { registerTime: { $gte: startTime, $lt: endTime } };
  983. // opts.playerId = "0ab@my2019";//new RegExp('.+@' + '0ab' + '$');
  984. // var list = yield this.app.models.DiamondRecord.aggregateAsync([
  985. // { $match: opts },
  986. // { $group: { _id: opts.playerId, count: { $sum: '$dSwap' } } },
  987. // { $sort: { registerTime: 1 } }
  988. // ]);
  989. // console.warn("聚合之后111 ",list.length,JSON.stringify(list));
  990. // var startTime = 1710866910000;
  991. // var endTime = 1711007310000;
  992. // var opts = { registerTime: { $gte: startTime, $lt: endTime } };
  993. // // opts.playerId = "0ab@my2019";//new RegExp('.+@' + '0ab' + '$');
  994. // var list = yield this.app.models.SGJUser.aggregateAsync([
  995. // { $match: opts },
  996. // { $group: { _id: "xxxxx", count: { $sum: '$cost' } } },
  997. // { $sort: { registerTime: 1 } }
  998. // ]);
  999. // console.warn("聚合之后111 ",list.length,JSON.stringify(list));
  1000. });
  1001. //ts++ 水果机任务发奖完成
  1002. proto.sgjRWFJOverAsync = P.coroutine(function* (query, method, res) {
  1003. console.warn("manage水果机任务发奖完成-------------------");
  1004. // var fjinfo = query['fjinfo'] || "";
  1005. // console.warn("manage水果机任务发奖完成------------------- ",fjinfo);
  1006. var pid = query['pid'];
  1007. if (!pid) {
  1008. return this.writeOut('fail: pid error!', res);
  1009. }
  1010. var type = Number(query['type']) || 0;
  1011. if (!type) {
  1012. return this.writeOut('fail: type error!', res);
  1013. }
  1014. var rwid = query['rwid'];
  1015. if (type == 2 && !rwid) {
  1016. return this.writeOut('fail: rwid error!', res);
  1017. }
  1018. var fqs = Number(query['fqs']) || 0;
  1019. if (type == 2 && !fqs) {
  1020. return this.writeOut('fail: fqs error!', res);
  1021. }
  1022. var fqtime = Number(query['fqtime']) || 0;
  1023. if (!fqtime) {
  1024. return this.writeOut('fail: fqtime error!', res);
  1025. }
  1026. var sign = query['sign'];
  1027. if (!sign) {
  1028. return this.writeOut('fail: sign error!', res);
  1029. }
  1030. if (!checkSign(sign)) {
  1031. return this.writeOut('fail: sign error!', res);
  1032. }
  1033. console.warn("manage水果机任务发奖完成-------------------",pid,type,rwid,fqs,fqtime);
  1034. var self = this;
  1035. var app = this.app;
  1036. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1037. if(type == 1){
  1038. var sgjUser = yield app.models.SGJUser.findByIdAsync(pid, 'zfbAcc zfbName zfbBindTime');
  1039. if (sgjUser) {
  1040. if(Date.now() - sgjUser.zfbBindTime < 86400000 ) return self.writeOut('one day no more once! ', res);
  1041. console.warn("?????找到用户了 ",fqs,fqtime);
  1042. if(fqs){
  1043. sgjUser.zfbBindTime = fqtime;
  1044. }
  1045. else{
  1046. sgjUser.zfbAcc = "";
  1047. sgjUser.zfbName = "";
  1048. }
  1049. yield sgjUser.saveAsync();
  1050. }
  1051. else{
  1052. return self.writeOut('pid value error! ', res);
  1053. }
  1054. }
  1055. else if(type == 2){
  1056. var taskInfo = yield app.models.SGJTask.findByIdAsync(rwid, 'playerId rewards state fjTime');
  1057. if (taskInfo) {
  1058. if(fqs != taskInfo.rewards){
  1059. return self.writeOut('fail: fqs value error!', res);
  1060. }
  1061. if(pid != taskInfo.playerId){
  1062. return self.writeOut('fail: pid value error!', res);
  1063. }
  1064. if(taskInfo.state != 2 || taskInfo.fjTime != 0){
  1065. return self.writeOut('fail: Cannot be claimed repeatedly!', res);
  1066. }
  1067. taskInfo.state = 3; //任务状态0:未完成,1:已完成,2:发奖中,3:已发奖
  1068. taskInfo.fjTime = fqtime; //发奖时间
  1069. console.warn("发奖成功之后更新任务状态 ");
  1070. yield taskInfo.saveAsync();
  1071. var sgjUser = yield app.models.SGJUser.findByIdAsync(pid, 'taskReward jxzReward');
  1072. if (sgjUser) {
  1073. sgjUser.jxzReward -= fqs;
  1074. sgjUser.taskReward += fqs;
  1075. yield sgjUser.saveAsync();
  1076. }
  1077. }
  1078. else{
  1079. logger.warn("rwjlzj(rwid) error");////cssj
  1080. return self.writeOut('rwjlzj(rwid) error! :', res);
  1081. }
  1082. }
  1083. return self.writeOut('999999', res);
  1084. }), app.getServerId())
  1085. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1086. });
  1087. //ts++ 后台给玩家发邮件
  1088. proto.addMailAsync = P.coroutine(function* (query, method, res) {
  1089. // console.warn("后台给玩家发邮件-------------------");
  1090. var playerId = query['playerid'];
  1091. if (!playerId) {
  1092. return this.writeOut('fail: playerid error!', res);
  1093. }
  1094. var userId = query['userid'];
  1095. if (!userId) {
  1096. return this.writeOut('fail: userid error!', res);
  1097. }
  1098. var tittleT = Number(query['tittleT']) || 0;;
  1099. if (!tittleT) {
  1100. return this.writeOut('fail: tittleT error!', res);
  1101. }
  1102. var descT = Number(query['descT']) || 0;;
  1103. if (!descT) {
  1104. return this.writeOut('fail: descT error!', res);
  1105. }
  1106. var reward = Number(query['reward']) || 0;;
  1107. var rewardT = Number(query['rewardT']) || 0;
  1108. var rewardC = Number(query['rewardC']) || 0;
  1109. if (reward) {
  1110. if(!rewardT || !rewardC){
  1111. return this.writeOut('fail: rewardT or rewardC error!', res);
  1112. }
  1113. }
  1114. else{
  1115. if(rewardT){
  1116. return this.writeOut('fail: rewardT error!', res);
  1117. }
  1118. if(rewardC){
  1119. return this.writeOut('fail: rewardC error!', res);
  1120. }
  1121. }
  1122. var form = query['form'];
  1123. if (!form) {
  1124. return this.writeOut('fail: form error!', res);
  1125. }
  1126. var sign = query['sign'];
  1127. if (!sign) {
  1128. return this.writeOut('fail: sign error!', res);
  1129. }
  1130. if (!checkSign(sign)) {
  1131. return this.writeOut('fail: sign error!', res);
  1132. }
  1133. var self = this;
  1134. var app = this.app;
  1135. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1136. let receive = 1;
  1137. if(reward) receive = 0;
  1138. var mail = yield app.models.Mails.findByIdAsync(playerId, 'mailInfos');
  1139. if (mail) {
  1140. let item = {
  1141. _id: "",
  1142. index: mail.mailInfos.length, // 邮件下标
  1143. tittleT: tittleT, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  1144. descT: descT, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  1145. reward: reward, // 有无奖励 0:无奖励 1:有奖励
  1146. rewardT: rewardT, // 奖励类型 0:未定义 1:钻石,
  1147. rewardC: rewardC, // 奖励数量
  1148. receive: receive, // 是否领取 0:未领取 1:已领取
  1149. read: 0, // 是否已读 0:未读 1:已读
  1150. form:form, //邮件来源
  1151. sendTime: Date.now() // 发送日期
  1152. }
  1153. let newItem = _.clone(mail.mailInfos);
  1154. let newItem2 = [0].concat(newItem);
  1155. newItem2[0] = item;
  1156. if(newItem2.length > 60){
  1157. newItem2 = newItem2.slice(0,60)
  1158. }
  1159. mail.mailInfos = [];
  1160. mail.mailInfos = _.clone(newItem2);
  1161. yield mail.saveAsync();
  1162. }
  1163. else{
  1164. let item = {
  1165. _id: "",
  1166. index: 0, // 邮件下标
  1167. tittleT: tittleT, // 邮件标题类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  1168. descT: descT, // 邮件内容类型 0:未定义 1:普通通知 2:有奖励通知 3:补偿通知 4:版本更新通知
  1169. reward: reward, // 有无奖励 0:无奖励 1:有奖励
  1170. rewardT: rewardT, // 奖励类型 0:未定义 1:钻石,
  1171. rewardC: rewardC, // 奖励数量
  1172. receive: receive, // 是否领取 0:未领取 1:已领取
  1173. read: 0, // 是否已读 0:未读 1:已读
  1174. form:form, //邮件来源
  1175. sendTime: Date.now() // 发送日期
  1176. }
  1177. let newItem = [];
  1178. newItem[0] = item;
  1179. var newMail = new app.models.Mails({
  1180. _id: playerId, // 用户id(player表的主键)
  1181. userId: userId, // 用户的userId
  1182. mailInfos: newItem // 该活动的达成条件和奖励信息列表
  1183. });
  1184. yield newMail.saveAsync();
  1185. }
  1186. return self.writeOut('999999', res);
  1187. }), app.getServerId())
  1188. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1189. });
  1190. ////// ts++ 显示uid和实际uid互相转换
  1191. proto.sidAridChangeAsync = P.coroutine(function* (query, method, res) {
  1192. // console.warn("显示uid和实际uid互相转换-------------------");
  1193. var type = Number(query['type']) || 0;;
  1194. if (type != 1 && type != 2) {
  1195. return this.writeOut('fail: type error!', res);
  1196. }
  1197. var id = Number(query['id']) || 0;;
  1198. if (id < 100000 && id > 999999) {
  1199. return this.writeOut('fail: id error!', res);
  1200. }
  1201. // console.warn("显示uid和实际uid互相转换 type "+type+" id "+id);
  1202. var sign = query['sign'];
  1203. if (!sign) {
  1204. return this.writeOut('fail: sign error!', res);
  1205. }
  1206. if (!checkSign(sign)) {
  1207. return this.writeOut('fail: sign error!', res);
  1208. }
  1209. let result = "";
  1210. if(type == 1) result = this.jiami(id);
  1211. else if(type == 2) result = ""+this.jiemi(id);
  1212. var self = this;
  1213. var app = this.app;
  1214. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1215. let data = {
  1216. code:201,
  1217. newId:0
  1218. }
  1219. if(result.length == 6){
  1220. data.code = 200;
  1221. data.newId = result;
  1222. }
  1223. let dataStr = JSON.stringify(data)
  1224. return self.writeOut(dataStr, res);
  1225. }), app.getServerId())
  1226. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1227. });
  1228. proto.jiami = function (_oldid) {
  1229. let oldid = String(_oldid);
  1230. // console.warn("111 加密参数 oldid "+oldid);
  1231. let numList = [];
  1232. for (var i = 0; i < oldid.length; i++) {
  1233. // numList[i] = (parseInt(oldid[i])+i+1)%10;
  1234. numList[i] = (parseInt(oldid[i])+i)%10;
  1235. // console.warn("222 numList[i] "+numList[i]);
  1236. }
  1237. // console.warn("333 "+JSON.stringify(numList));
  1238. //这种交换方式会使加密后结果转换成数字之后是个小于6位数的数字,其中987654这个加密之后是0
  1239. // let jh1 = numList[0];
  1240. // numList[0] = numList[4];
  1241. // numList[4] = jh1;
  1242. let jh1 = numList[1];
  1243. numList[1] = numList[3];
  1244. numList[3] = jh1;
  1245. // console.warn("444 [0]和[4]交换 "+JSON.stringify(numList));
  1246. let jh2 = numList[2];
  1247. numList[2] = numList[5];
  1248. numList[5] = jh2;
  1249. let newid = "";
  1250. // console.warn("555 [2]和[5]交换 "+JSON.stringify(numList));
  1251. for (var i = 0; i < numList.length; i++) {
  1252. newid+=numList[i];
  1253. }
  1254. // console.warn("666 加密最终的 "+newid);
  1255. return newid;
  1256. // return parseInt(newid);
  1257. };
  1258. proto.jiemi = function (_oldid) {
  1259. let oldid = String(_oldid);
  1260. // console.warn("111 解密参数 oldid "+oldid);
  1261. let numList = [];
  1262. for (var i = 0; i < oldid.length; i++) {
  1263. numList[i] = parseInt(oldid[i]);
  1264. // console.warn("222 numList[i] "+numList[i]);
  1265. }
  1266. // console.warn("333 "+JSON.stringify(numList));
  1267. // let jh1 = numList[0];
  1268. // numList[0] = numList[4];
  1269. // numList[4] = jh1;
  1270. let jh1 = numList[1];
  1271. numList[1] = numList[3];
  1272. numList[3] = jh1;
  1273. // console.warn("444 [0]和[4]交换 "+JSON.stringify(numList));
  1274. let jh2 = numList[2];
  1275. numList[2] = numList[5];
  1276. numList[5] = jh2;
  1277. let numList2 = []
  1278. for (var i = 0; i < oldid.length; i++) {
  1279. // numList2[i] = (numList[i]+9-i)%10;
  1280. numList2[i] = (numList[i]+10-i)%10;
  1281. // console.warn("2 numList[i] "+numList[i]);
  1282. }
  1283. // console.warn("555 [2]和[5]交换 "+JSON.stringify(numList));
  1284. let newid = "";
  1285. for (var i = 0; i < numList2.length; i++) {
  1286. newid+=numList2[i];
  1287. }
  1288. // console.warn("666 解密最终的 "+newid);
  1289. return parseInt(newid);
  1290. };
  1291. //后台增加比赛的开始和结束时间
  1292. proto.addRaceTimeAsync = P.coroutine(function* (query, method, res) {
  1293. console.warn("addRaceTimeAsync 后台增加比赛的开始和结束时间");
  1294. var aid = query['aid'];
  1295. if (!aid) {
  1296. return this.writeOut('fail: aid error!', res);
  1297. }
  1298. var anumber = parseInt(query['anumber']) || 0;
  1299. if (!anumber) {
  1300. return this.writeOut('fail: anumber error!', res);
  1301. }
  1302. var stime = Number(query['stime']) || 0;;
  1303. if (!stime) {
  1304. return this.writeOut('fail: stime error!', res);
  1305. }
  1306. var etime = Number(query['etime']) || 0;;
  1307. if (!etime) {
  1308. return this.writeOut('fail: etime error!', res);
  1309. }
  1310. if(stime >= etime) return this.writeOut('fail: stime or etime error!', res);
  1311. var outTime = Number(query['outTime']) || (etime+90*60000);//默认90分钟之后过期
  1312. if (!outTime) {
  1313. return this.writeOut('fail: outTime error!', res);
  1314. }
  1315. if (outTime < etime+40*60000) {
  1316. return this.writeOut('过期时间必须为结束时间40分钟之后', res);
  1317. }
  1318. var bigRound = Number(query['bigRound']) || 3;
  1319. if (!bigRound) {
  1320. return this.writeOut('fail: bigRound error!', res);
  1321. }
  1322. var gameid = Number(query['gameid']) || 10008;
  1323. if (!gameid) {
  1324. return this.writeOut('fail: gameid error!', res);
  1325. }
  1326. var round = Number(query['round']) || 10;
  1327. if (!round) {
  1328. return this.writeOut('fail: round error!', res);
  1329. }
  1330. var player = Number(query['player']) || 3;
  1331. if (!player) {
  1332. return this.writeOut('fail: player error!', res);
  1333. }
  1334. var other = Number(query['other']) || 74;
  1335. if (!other) {
  1336. return this.writeOut('fail: other error!', res);
  1337. }
  1338. var sign = query['sign'];
  1339. if (!sign) {
  1340. return this.writeOut('fail: sign error!', res);
  1341. }
  1342. if (!checkSign(sign)) {
  1343. return this.writeOut('fail: sign error!', res);
  1344. }
  1345. var self = this;
  1346. var app = this.app;
  1347. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1348. let stimeSJC = self.getzdLDSJC(stime);
  1349. var opts = {
  1350. stime: { $gte: stimeSJC, $lt: stimeSJC+86400000},
  1351. };
  1352. opts['aid'] = aid;
  1353. let timelist = yield app.models.RaceTimeInfos.findMongoAsync(opts, 'aid agentNo stime etime bigRound gameId round playerCount other outTime', { sort: { stime: 1 } });
  1354. for (var i = 0; i < timelist.length; i++) {
  1355. if(timelist[i].outTime >= stime){
  1356. return self.writeOut('新开比赛场次开始时间不能小于现有场次的过期时间', res);//一个群推广目前一天只能开一场比赛
  1357. }
  1358. }
  1359. var newRaceTime = new app.models.RaceTimeInfos({
  1360. _id: uuid.v1(), // UUID 标识
  1361. aid: aid, // 比赛代理的标识
  1362. agentNo: anumber,// 比赛代理编号
  1363. stime: stime, // 该次比赛的开始时间
  1364. etime: etime, // 该次比赛的结束时间
  1365. bigRound: bigRound,// 该次比赛的大局数量,统计战绩时使用
  1366. gameId: gameid, // 该次比赛的游戏id 10006为长沙麻将,10007为红中麻将,10008为跑得快
  1367. round: round, // 该次比赛的游戏局数
  1368. playerCount: player, // 该次比赛的游戏人数
  1369. other: other, // 该次比赛的游戏规则
  1370. outTime: outTime, //1:未过期,2已过期
  1371. yljList: [] // 该次比赛已领奖人员id数组
  1372. });
  1373. yield newRaceTime.saveAsync();
  1374. return self.writeOut('999999', res);
  1375. }), app.getServerId())
  1376. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1377. });
  1378. ////后台设置比赛是否过期
  1379. proto.setRaceTimeOutAsync = P.coroutine(function* (query, method, res) {
  1380. // console.warn("setRaceTimeOutAsync 后台设置比赛是否过期");
  1381. var id = query['id'] || "";//需要修改的比赛场次的id(主键)
  1382. if (!id) {
  1383. return this.writeOut('fail: id error!', res);
  1384. }
  1385. var sign = query['sign'];
  1386. if (!sign) {
  1387. return this.writeOut('fail: sign error!', res);
  1388. }
  1389. if (!checkSign(sign)) {
  1390. return this.writeOut('fail: sign error!', res);
  1391. }
  1392. var self = this;
  1393. var app = this.app;
  1394. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1395. var raceTime = yield app.models.RaceTimeInfos.findByIdAsync(id, '_id aid outTime stime etime yljList');
  1396. if (raceTime) {
  1397. let outTime = Number(query['outTime']) || (raceTime.etime + 6000000);//默认60分钟之后过期
  1398. // console.warn("后台设置比赛是否过期 id "+id+" etime "+raceTime.etime+" outTime "+raceTime.outTime+" type "+type);
  1399. if(raceTime.etime + 2400000 >= outTime){//结束40分钟之后才能设置为过期
  1400. return self.writeOut('过期时间必须为结束时间40分钟之后', res);
  1401. }
  1402. if(self.getzdLDSJC(raceTime.stime) != self.getzdLDSJC(outTime)){//结束40分钟之后才能设置为过期
  1403. return self.writeOut('过期时间和开始时间必须是同一天', res);
  1404. }
  1405. let stimeSJC = self.getzdLDSJC(raceTime.stime);
  1406. var opts = {
  1407. stime: { $gte: stimeSJC, $lt: stimeSJC+86400000},
  1408. };
  1409. opts['aid'] = raceTime.aid;
  1410. let timelist = yield app.models.RaceTimeInfos.findMongoAsync(opts, '_id aid stime etime outTime', { sort: { stime: 1 } });
  1411. // console.warn(">>>>>>>>>>>>>>>.. "+timelist.length);
  1412. for (var i = 0; i < timelist.length; i++) {
  1413. if(raceTime.stime > timelist[i].stime) continue;
  1414. if(raceTime._id == timelist[i]._id) continue;
  1415. if(timelist[i].stime <= outTime){
  1416. return self.writeOut('本场过期时间不能和现有比赛场次的时间重合', res);//一个群推广目前一天只能开一场比赛
  1417. }
  1418. }
  1419. if(raceTime.outTime != outTime){
  1420. raceTime.outTime = outTime;
  1421. yield raceTime.saveAsync();
  1422. // console.warn("设置设置 grade -------------------修改");
  1423. }
  1424. return self.writeOut('999999', res);
  1425. }
  1426. else{
  1427. return self.writeOut('not fid raceTime by id : '+id, res);
  1428. }
  1429. }), app.getServerId())
  1430. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1431. });
  1432. //////后台增设置不能在同一桌游戏的玩家
  1433. proto.setNotGameTogtherAsync = P.coroutine(function* (query, method, res) {
  1434. // console.warn("setNotGameTogtherAsync 后台增设置不能在同一桌游戏的玩家");
  1435. var type = Number(query['type']) || 0;//操作类型
  1436. var id = query['id'] || "";
  1437. var uid1 = Number(query['uid1']) || 0;
  1438. var uid2 = Number(query['uid2']) || 0;//删除整条的时候此值可不传
  1439. // console.warn("后台增设置不能在同一桌游戏的玩家 type "+type+" id "+id+" uid1 "+uid1+" uid2 "+uid2);
  1440. if (type == 1) {//1:增加,2:删除整条,3:删除某条中某一个
  1441. if (!uid1) return this.writeOut('fail: no uid1 !', res);
  1442. if (!uid2) return this.writeOut('fail: no uid2 !', res);
  1443. if (uid1 == uid2) return this.writeOut('fail: uid1 和 uid2 不能相同', res);
  1444. }
  1445. else if (type == 2) {//1:增加,2:删除整条,3:删除某条中某一个
  1446. if (!id) return this.writeOut('fail: no id !', res);
  1447. }
  1448. else if (type == 3) {//1:增加,2:删除整条,3:删除某条中某一个
  1449. if (!id) return this.writeOut('fail: no id。', res);
  1450. if (!uid1) return this.writeOut('fail: no uid1。', res);
  1451. }
  1452. else return this.writeOut('fail: no type !', res);
  1453. var sign = query['sign']||"";
  1454. if (!sign) {
  1455. return this.writeOut('fail: sign error!', res);
  1456. }
  1457. if (!checkSign(sign)) {
  1458. return this.writeOut('fail: sign error!', res);
  1459. }
  1460. var self = this;
  1461. var app = this.app;
  1462. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1463. if(type == 1){
  1464. let pid1 = "";
  1465. var players1 = yield app.models.Player.findMongoAsync({ userId: uid1 },'_id userId name');
  1466. if (players1.length == 1) {
  1467. pid1 = players1[0]._id;
  1468. }
  1469. else {
  1470. return self.writeOut('fail: uid1 error!', res);
  1471. }
  1472. let pid2 = "";
  1473. var players2 = yield app.models.Player.findMongoAsync({ userId: uid2 },'_id userId name');
  1474. if (players2.length == 1) {
  1475. pid2 = players2[0]._id;
  1476. }
  1477. else{
  1478. return self.writeOut('fail: uid2 error!', res);
  1479. }
  1480. let newList = [];
  1481. let newPList = [];
  1482. var notTogthers1 = yield app.models.NotGameTogther.findMongoAsync({ uidList: uid1 },'_id uidList pidList');
  1483. if(notTogthers1.length == 0) {
  1484. newList[newList.length] = uid1;
  1485. newPList[newPList.length] = pid1;
  1486. }
  1487. for (var i = 0; i < notTogthers1.length; i++) {
  1488. // console.warn("包含uid1的数组 111 "+i+" "+JSON.stringify(notTogthers1[i].uidList));
  1489. for (var j = 0; j < notTogthers1[i].uidList.length; j++) {
  1490. let item = notTogthers1[i].uidList[j];
  1491. let itemP = notTogthers1[i].pidList[j];
  1492. if(newList.indexOf(item) == -1){
  1493. newList[newList.length] = item;
  1494. newPList[newPList.length] = itemP;
  1495. }
  1496. }
  1497. yield notTogthers1[i].removeAsync();
  1498. }
  1499. // console.warn("处理完uid1之后的newlist 111 "+JSON.stringify(newList));
  1500. var notTogthers2 = yield app.models.NotGameTogther.findMongoAsync({ uidList: uid2 },'_id uidList pidList');
  1501. if(notTogthers2.length == 0) {
  1502. newList[newList.length] = uid2;
  1503. newPList[newPList.length] = pid2;
  1504. }
  1505. for (var i = 0; i < notTogthers2.length; i++) {
  1506. // console.warn("包含uid1的数组 111 "+i+" "+JSON.stringify(notTogthers2[i].uidList));
  1507. for (var j = 0; j < notTogthers2[i].uidList.length; j++) {
  1508. let item = notTogthers2[i].uidList[j];
  1509. let itemP = notTogthers2[i].pidList[j];
  1510. if(newList.indexOf(item) == -1){
  1511. newList[newList.length] = item;
  1512. newPList[newPList.length] = itemP;
  1513. }
  1514. }
  1515. yield notTogthers2[i].removeAsync();
  1516. }
  1517. // console.warn("处理完uid2之后的newlist 111 "+JSON.stringify(newList));
  1518. if(newList.length == 0) {
  1519. newList = [uid1,uid2];
  1520. newPList = [pid1,pid2];
  1521. }
  1522. var newNotTogther = new app.models.NotGameTogther({
  1523. _id: uuid.v1(), // UUID 标识
  1524. uidList: _.cloneDeep(newList), // 不能在同一桌游戏的玩家userid
  1525. pidList: _.cloneDeep(newPList) // 不能在同一桌游戏的玩家_id
  1526. });
  1527. yield newNotTogther.saveAsync();
  1528. // console.warn("?????????555 ");
  1529. }
  1530. else if(type == 2){
  1531. var notTogther = yield app.models.NotGameTogther.findByIdAsync(id, '_id uidList');
  1532. if (notTogther) {
  1533. // console.warn("找到了");
  1534. yield notTogther.removeAsync();
  1535. }
  1536. else{
  1537. return self.writeOut('fail: id error!', res);
  1538. }
  1539. }
  1540. else if(type == 3){
  1541. var notTogther = yield app.models.NotGameTogther.findByIdAsync(id, '_id uidList pidList');
  1542. if (notTogther) {
  1543. let newuidList = [];
  1544. let newpidList = [];
  1545. for (var i = 0; i < notTogther.uidList.length; i++) {
  1546. if(notTogther.uidList[i] != uid1){
  1547. newuidList[newuidList.length] = notTogther.uidList[i];
  1548. newpidList[newpidList.length] = notTogther.pidList[i];
  1549. }
  1550. }
  1551. if(newuidList.length == notTogther.uidList.length){
  1552. return self.writeOut('fail: uid1 not find!', res);
  1553. }
  1554. else{
  1555. if(newuidList.length > 1){
  1556. notTogther.uidList = _.cloneDeep(newuidList);
  1557. notTogther.pidList = _.cloneDeep(newpidList);
  1558. yield notTogther.saveAsync();
  1559. }
  1560. else{
  1561. yield notTogther.removeAsync();
  1562. }
  1563. }
  1564. }
  1565. else{
  1566. return self.writeOut('fail: id error!', res);
  1567. }
  1568. }
  1569. return self.writeOut('999999', res);
  1570. }), app.getServerId())
  1571. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1572. });
  1573. //后台设置玩家禁赛
  1574. proto.setJinSaiAsync = P.coroutine(function* (query, method, res) {
  1575. console.warn("setJinSaiAsync 后台设置玩家禁赛");
  1576. var pid = query['id'];
  1577. if (!pid) {
  1578. return this.writeOut('fail: pid error!', res);
  1579. }
  1580. var uid = parseInt(query['uid']) || 0;
  1581. if (!uid) {
  1582. return this.writeOut('fail: uid error!', res);
  1583. }
  1584. // var stime = Number(query['stime']) || 0;;
  1585. // if (!stime) {
  1586. // return this.writeOut('fail: stime error!', res);
  1587. // }
  1588. var sign = query['sign'];
  1589. if (!sign) {
  1590. return this.writeOut('fail: sign error!', res);
  1591. }
  1592. if (!checkSign(sign)) {
  1593. return this.writeOut('fail: sign error!', res);
  1594. }
  1595. var self = this;
  1596. var app = this.app;
  1597. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  1598. var jinsai = yield app.models.JinSaiInfo.findByIdAsync(pid, '_id userId');
  1599. if (jinsai) {
  1600. yield jinsai.removeAsync();
  1601. }
  1602. else{
  1603. var jinsaiinfo = new app.models.JinSaiInfo({
  1604. _id: pid, // UUID 标识
  1605. userId: uid // 比赛代理的标识
  1606. });
  1607. yield jinsaiinfo.saveAsync();
  1608. }
  1609. return self.writeOut('999999', res);
  1610. }), app.getServerId())
  1611. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  1612. });
  1613. //TL++,得到指定时间戳(_time)当日0点的时间戳
  1614. proto.getzdLDSJC = function (_time){
  1615. var today = new Date(_time);
  1616. today.setHours(0);
  1617. today.setMinutes(0);
  1618. today.setSeconds(0);
  1619. today.setMilliseconds(0);
  1620. let jrsjc = today.getTime();
  1621. // console.warn("111得到今日0点的时间戳 ",jrsjc, typeof jrsjc);
  1622. return jrsjc;
  1623. };
  1624. //ts++签名验证
  1625. function checkSign(sign) {
  1626. var signKey = 'defe6d21422c8b770767f74fcea95';
  1627. if (sign!=signKey) return false;
  1628. return true;
  1629. };
  1630. proto.getTodaySJC = function (){
  1631. var today = new Date();
  1632. today.setHours(0);
  1633. today.setMinutes(0);
  1634. today.setSeconds(0);
  1635. today.setMilliseconds(0);
  1636. let jrsjc = today.getTime();
  1637. // console.warn("111得到今日0点的时间戳 ",jrsjc, typeof jrsjc);
  1638. return jrsjc;
  1639. };