agent.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  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 logger = quick.logger.getLogger('agent', __filename);
  13. // 构造方法
  14. var Controller = function (app) {
  15. this.app = app;
  16. this.uptime = Date.now();
  17. this.port = app.getCurServer().httpPort;
  18. this.server = http.createServer((req, res) => this.handleAsync(req, res));
  19. this.server.listen(this.port);
  20. };
  21. // 导出方法
  22. module.exports = function (app) {
  23. return new Controller(app);
  24. };
  25. // 原型对象
  26. var proto = Controller.prototype;
  27. // 路由函数
  28. proto.route = function (pathname) {
  29. switch (pathname) {
  30. case '/setagent.nd': return (query, method, res) => this.setAgentAsync(query, method, res);//设置代理
  31. case '/freebind.nd': return (query, method, res) => this.freeBindAsync(query, method, res);//清除绑定
  32. case '/outverify.nd': return (query, method, res) => this.outVerifyAsync(query, method, res);//每日结算
  33. case '/outrebate.nd': return (query, method, res) => this.outRebateAsync(query, method, res);//提现申请
  34. //case '/setagenturl.nd': return (query, method, res) => this.setAgentUrlAsync(query, method, res);//设置 url
  35. case '/operateAgree.nd': return (query, method, res) => this.operateAgreeAsync(query, method, res);//操作白名单
  36. case '/inviteChird.nd': return (query, method, res) => this.inviteChirdAsync(query, method, res);//邀请小组成员
  37. }
  38. };
  39. // 写出数据
  40. proto.writeOut = function (query, res) {
  41. if (typeof query != 'object') {
  42. return res.end(String(query));
  43. }
  44. return res.end(JSON.stringify(query));
  45. };
  46. // 跨域选项
  47. const ACCESS = {
  48. "Content-Type": "text/plain;charset=utf-8",
  49. "Access-Control-Allow-Origin": "*",
  50. "Access-Control-Allow-Headers": "X-Requested-With",
  51. "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS"
  52. };
  53. // 入口函数
  54. proto.handleAsync = P.coroutine(function* (req, res) {
  55. var pathname = url.parse(req.url).pathname;
  56. var phandler = this.route(pathname);
  57. if (!phandler) {
  58. res.writeHead(404, ACCESS);
  59. return res.end('WARNING: Not Found!');
  60. }
  61. else {
  62. res.writeHead(200, ACCESS);
  63. if (req.method.toLowerCase() == 'get') {
  64. let query = url.parse(req.url, true).query;
  65. return phandler(query, req.method, res);
  66. }
  67. else if (req.method.toLowerCase() == 'post') {
  68. let data = '';
  69. req.on('data', (d) => { data += d; });
  70. req.on('end', () => {
  71. let query = { __post__: data };
  72. let regexp = /^\s*{(\s*?".*?":.*\s*)*}\s*$/;
  73. if (regexp.test(data)) try { query = JSON.parse(data); } catch (e) { }
  74. else if (data.indexOf('=') != -1) query = qs.parse(data);
  75. return phandler(query, req.method, res);
  76. });
  77. }
  78. }
  79. });
  80. //ts++ 设置代理
  81. proto.setAgentAsync = P.coroutine(function* (query, method, res) {
  82. // console.warn("设置代理-------------------");
  83. var agentId = query['agentid'];
  84. //console.warn("设置代理-------------------agenterId:",agentId);
  85. if (!agentId) {
  86. return this.writeOut('fail: agentId error!', res);
  87. }
  88. var rewardRate = query['rate'];
  89. var agentName = query['agentname'];
  90. if (!agentName) {
  91. return this.writeOut('fail: agentName error!', res);
  92. }
  93. var myUrl = query['myurl'];
  94. // console.warn("设置代理-------------------myUrl:",myUrl);
  95. var sign = query['sign'];
  96. if (!sign) {
  97. return this.writeOut('fail: sign error!', res);
  98. }
  99. //console.warn("设置代理-------------------sign:",sign);
  100. if (!checkSign(sign)) {
  101. return this.writeOut('fail: sign error!', res);
  102. }
  103. var self = this;
  104. var app = this.app;
  105. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  106. var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'agentName myUrl rewardRate');//agentNo playerId myGrade
  107. if (agenter) {
  108. var upd=false;
  109. if(rewardRate)
  110. {
  111. upd=true;
  112. agenter.rewardRate = parseInt(rewardRate);
  113. }
  114. if(agentName!='' && agenter.agentName!=agentName)
  115. {
  116. upd=true;
  117. agenter.agentName = agentName;
  118. }
  119. if(myUrl!='' && agenter.myUrl!=myUrl)
  120. {
  121. upd=true;
  122. agenter.myUrl = myUrl;
  123. }
  124. if(upd)
  125. {
  126. yield agenter.saveAsync();
  127. // console.warn("设置代理-------------------成功");
  128. }
  129. else
  130. {
  131. // console.warn("设置代理-------------------无修改");
  132. }
  133. }
  134. return self.writeOut('999999', res);
  135. }), app.getServerId())
  136. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  137. });
  138. //ts++ 推广操作白名单
  139. proto.operateAgreeAsync = P.coroutine(function* (query, method, res) {
  140. var agentId = query['agentid'];
  141. if (!agentId) {
  142. return this.writeOut('fail: agentId error!', res);
  143. }
  144. var operate = Number(query['operate']);
  145. if (!operate || (operate != 3 && operate != 4 && operate != 5)) {
  146. return this.writeOut('fail: operate error!', res);
  147. }
  148. var userId = query['userId'];
  149. if (!userId && (operate || 4 && operate || 5)) {
  150. return this.writeOut('fail: userId error!', res);
  151. }
  152. var sign = query['sign'];
  153. if (!sign) {
  154. return this.writeOut('fail: sign error!', res);
  155. }
  156. if (!checkSign(sign)) {
  157. return this.writeOut('fail: sign error!', res);
  158. }
  159. var self = this;
  160. var app = this.app;
  161. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  162. var agreeInfo = yield app.models.AgenterAgree.findByIdAsync(agentId, '_id isOpenAgree infoList');
  163. if (agreeInfo) {
  164. if (operate == 3){//设置白名单功能是否开启
  165. //推广有白名单记录则修改白名单开关
  166. let _isOpenAgree = "0";
  167. if (agreeInfo.isOpenAgree == "0")
  168. {
  169. _isOpenAgree = "1";
  170. }
  171. agreeInfo.isOpenAgree = _isOpenAgree;
  172. yield agreeInfo.saveAsync();
  173. }
  174. else if (operate == 4 || operate == 5){//设置玩家为同意或拒绝
  175. var isExit = false;
  176. for (let i = 0; i < agreeInfo.infoList.length; i++){
  177. if(agreeInfo.infoList[i].userId == userId){
  178. var state = "0";
  179. if (operate == 4) state = "1";
  180. else if (operate == 5) state = "2";
  181. agreeInfo.infoList[i].agreeState = state;
  182. isExit = true;
  183. break;
  184. }
  185. }
  186. if(isExit){
  187. yield agreeInfo.saveAsync();
  188. }
  189. else
  190. {
  191. //console.warn("推广操作白名单-------------------不存在用户");
  192. }
  193. }
  194. }
  195. else{
  196. // console.warn("推广操作白名单-------------------没有白名单 创建默认白名单");
  197. var agenteragree = new app.models.AgenterAgree({
  198. _id: agentId,//记录
  199. isOpenAgree: "0",
  200. infoList: []
  201. });
  202. yield agenteragree.saveAsync();
  203. }
  204. return self.writeOut('999999', res);
  205. }), app.getServerId())
  206. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  207. });
  208. //金牌推广员给自己添加下级(组员)
  209. proto.inviteChirdAsync = P.coroutine(function* (query, method, res) {
  210. var agentId = query['agentid'];
  211. if (!agentId) {
  212. return this.writeOut(-3, res);
  213. }
  214. var userId = query['userId'];
  215. if (!userId) {
  216. return this.writeOut(-4, res);
  217. }
  218. var contact = query['contact'];
  219. if (!contact) {
  220. return this.writeOut(-5, res);
  221. }
  222. var tel = query['tel'];
  223. if (!tel) {
  224. return this.writeOut(-6, res);
  225. }
  226. var sign = query['sign'];
  227. if (!sign) {
  228. return this.writeOut(-7, res);
  229. }
  230. if (!checkSign(sign)) {
  231. return this.writeOut(-8, res);
  232. }
  233. var self = this;
  234. var app = this.app;
  235. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  236. let outstate = -2;
  237. var yPlayers = yield app.models.Player.findMongoAsync({ userId: userId },'_id userId');
  238. if (yPlayers.length == 1){
  239. let uid = yPlayers[0]._id;
  240. let tgState = 2;////未申请=1;正在审核=2;审核成功=3,审核失败=4
  241. var apply = yield app.models.tgApply.findByIdReadOnlyAsync(uid);
  242. if (!apply) {
  243. var tgapply = new app.models.tgApply({
  244. _id: uid,
  245. applyType: 2,
  246. parenteId:agentId,
  247. tgName: contact,
  248. tgPhone: tel,
  249. tgWXNumber: "",
  250. tgState: tgState
  251. });
  252. yield tgapply.saveAsync();
  253. outstate = 999999;
  254. }
  255. else{
  256. outstate = -1;
  257. }
  258. }
  259. else{
  260. outstate = 0;
  261. }
  262. return self.writeOut(outstate, res);
  263. }), app.getServerId())
  264. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  265. });
  266. //ts++ 清除代理绑定
  267. proto.freeBindAsync = P.coroutine(function* (query, method, res) {
  268. // console.warn("清除代理-------------------");
  269. var agentId = query['agentid'];
  270. if (!agentId) {
  271. return this.writeOut('fail: agentid error!', res);
  272. }
  273. //console.warn("清除代理-------------------playerId:",agentId);
  274. var sign = query['sign'];
  275. if (!sign) {
  276. return this.writeOut('fail: sign error!', res);
  277. }
  278. //console.warn("清除代理-------------------sign:",sign);
  279. if (!checkSign(sign)) {
  280. return this.writeOut('fail: sign error!', res);
  281. }
  282. var self = this;
  283. var app = this.app;
  284. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  285. var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'playerId');
  286. if (agenter) {
  287. agenter.playerId = '';
  288. yield agenter.saveAsync();
  289. // console.warn("清除代理-------------------成功");
  290. }
  291. return self.writeOut('999999', res);
  292. }), app.getServerId())
  293. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  294. });
  295. //ts++ 解除锁定返利
  296. proto.outVerifyAsync = P.coroutine(function* (query, method, res) {
  297. // console.warn("结算前日返利-------------------",query['agentid']);
  298. var agentId = query['agentid'];
  299. if (!agentId) {
  300. return this.writeOut('fail: agentId error!', res);
  301. }
  302. // console.warn("解除锁定返利-------------------agenterId:",agentId);
  303. var sign = query['sign'];
  304. if (!sign) {
  305. return this.writeOut('fail: sign error!', res);
  306. }
  307. if (!checkSign(sign)) {
  308. return this.writeOut('fail: sign error!', res);
  309. }
  310. var today = new Date();
  311. today.setHours(0);
  312. today.setMinutes(0);
  313. today.setSeconds(0);
  314. today.setMilliseconds(0);
  315. let nowverifyDate=today.getTime();
  316. var self = this;
  317. var app = this.app;
  318. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  319. let outstate=-1;
  320. // var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'rebateOther rebateCount rebateAll rebateNow rebateOut verifyDate verifyRebate dateGameTimes02 dateGameTimes03 dateGameTimes0 dateGameTimes42 dateGameTimes43 dateGameTimes4 dateGameTimes82 dateGameTimes83 dateGameTimes8 dateGameTimes162 dateGameTimes163 dateGameTimes16 dateGameCost0 dateGameCost4 dateGameCost8 dateGameCost16 agentRate');
  321. var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'levelFlag rewardRate rebateAll2 rebateNow2 rebateOut2 verifyDate2 verifyRebate2 rebateOther rebateCount rebateAll rebateNow rebateOut verifyDate verifyRebate agentRate');
  322. if (agenter)
  323. {
  324. if(agenter.verifyDate==nowverifyDate)
  325. {
  326. return self.writeOut('fail: verifyDate error!', res);
  327. }
  328. let rewardRate = agenter.rewardRate;
  329. let parentId = agenter.parentAgenterId;
  330. let parentRate = agenter.parentRate;
  331. let verifyDate=0;
  332. let verifyRebate=0;
  333. //日奖励
  334. let dateAgentRate=0;
  335. let dateRebate=0;//额外奖励数值(=额外比例*本局消耗),目前没有额外返利所以这个数值没有计算
  336. let levelFlag = agenter.levelFlag;
  337. let verifyDate2=0;
  338. let verifyRebate2=0;
  339. let dateAgentRate2=0;
  340. let dateRebate2=0;
  341. if(agenter.verifyRebate>0 || agenter.verifyRebate2>0)
  342. {
  343. verifyDate=agenter.verifyDate;
  344. verifyRebate=agenter.verifyRebate;
  345. dateAgentRate=agenter.agentRate;
  346. agenter.rebateNow += verifyRebate;
  347. agenter.rebateNow += dateRebate;
  348. agenter.rebateOther += dateRebate;
  349. agenter.verifyRebate=0;
  350. //上面是对自己的进行日结,下面是对小组的日结
  351. verifyDate2=agenter.verifyDate2;
  352. verifyRebate2=agenter.verifyRebate2;
  353. agenter.rebateNow2 += verifyRebate2;
  354. agenter.verifyRebate2=0;
  355. //审核的返利转到可提现
  356. if(agenter.levelFlag == 0){
  357. if(agenter.rebateNow > 500) {
  358. agenter.levelFlag = 1;//从实习变为转正
  359. }
  360. }
  361. }
  362. agenter.verifyDate=nowverifyDate;
  363. agenter.verifyDate2=nowverifyDate;
  364. let rCount=agenter.rebateCount;
  365. let rOther=agenter.rebateOther;
  366. let rAll=agenter.rebateAll;
  367. let rNow=agenter.rebateNow;
  368. let rOut=agenter.rebateOut;
  369. let rAll2=agenter.rebateAll2;
  370. let rNow2=agenter.rebateNow2;
  371. let rOut2=agenter.rebateOut2;
  372. yield agenter.saveAsync();
  373. // console.warn("结算前日返利-------------------成功");
  374. if(verifyRebate>0)
  375. {
  376. // 退费 钻石记录
  377. var rebateRecord = new app.models.RebateRecord({
  378. _id: uuid.v1(),
  379. agentId:agentId,
  380. tableId: '',
  381. rType: 3,
  382. rCount: rCount,
  383. rOther: rOther,
  384. rAll: rAll,
  385. rNow: rNow,
  386. rOut: rOut,
  387. rSwap: verifyRebate,
  388. rDateSwap: dateRebate,
  389. rVerifyDate: verifyDate,
  390. rVerifyRebate: 0
  391. });
  392. yield rebateRecord.saveAsync();
  393. // console.warn("结算前日返利-------------------rebateRecord.saveAsync()");
  394. // let parentRebate = 0; // 该日期 该推广上级的返利金额
  395. // let allGameCost = 0; // 该日期该推广产生的总游戏消耗
  396. // let allGiftCost = 0; // 该日期该推广产生的总礼物消耗
  397. // let allGameTimes1 = 0; // 该日期该推广产生的总游戏次数
  398. // let allGameTimes2 = 0; // 该日期该推广产生的总游戏次数
  399. // let allGameTimes3 = 0; // 该日期该推广产生的总游戏次数
  400. // let allGameTimes4 = 0; // 该日期该推广产生的总游戏次数
  401. // let allPlayerCount = 0;// 该日期该推广活跃玩家个数
  402. // let opts1 = {
  403. // agentId: agentId,
  404. // time: { $gte: verifyDate, $lt: verifyDate+86400000}
  405. // };
  406. // var jrList1 = yield this.app.models.FHMJTables.findMongoAsync(opts1, 'gameId gameCost giftCost');
  407. // for (let i = 0; i < jrList1.length; i++){
  408. // allGameCost += jrList1[i].gameCost; // 该日期该推广产生的总游戏消耗
  409. // allGiftCost += jrList1[i].giftCost; // 该日期该推广产生的总礼物消耗
  410. // if(jrList1[i].gameId == 10006) allGameTimes1+=1;// 湖南长沙
  411. // else if(jrList1[i].gameId == 10007) allGameTimes2+=1;// 湖南红中
  412. // else if(jrList1[i].gameId == 10008) allGameTimes3+=1; // 湖南跑得快
  413. // else if(jrList1[i].gameId == 10009) allGameTimes4+=1; // 湖南跑胡子
  414. // }
  415. // let opts = {agentId: agentId,date: verifyDate};
  416. // allPlayerCount = yield this.app.models.PlayerCount.countMongoAsync(opts)
  417. // let opts2 = {
  418. // agentId: parentId,
  419. // rType: 4,
  420. // tableId: agentId,
  421. // rVerifyDate: { $gte: verifyDate, $lt: verifyDate+86400000}
  422. // };
  423. // var jrList2 = yield this.app.models.RebateRecord.findMongoAsync(opts2, 'gameId gameCost giftCost');
  424. // for (let i = 0; i < jrList2.length; i++){
  425. // parentRebate += jrList2[i].rSwap; // 该日期该推广给上级产生的贡献
  426. // }
  427. // var daterebateRecord = new app.models.DateRebateRecord({
  428. // _id: uuid.v1(),
  429. // agentId:agentId,
  430. // verifyDate: verifyDate,
  431. // verifyRebate: verifyRebate,
  432. // dateAgentRate: dateAgentRate,
  433. // dateRebate: dateRebate,
  434. // dateRewardRate: rewardRate, // 进行日结当日该推广自己的返利的比例
  435. // parentaId: parentId, // 代理上级的标识
  436. // dateParentRate: parentRate, // 进行日结当日该推广上级的返利的比例
  437. // parentRebate: parentRebate, // 该日期 该推广上级的返利金额
  438. // allGameCost: allGameCost, // 该日期该推广产生的总游戏消耗
  439. // allGiftCost: allGiftCost, // 该日期该推广产生的总礼物消耗
  440. // allGameTimes1: allGameTimes1, // 该日期该推广产生的总游戏1次数
  441. // allGameTimes2: allGameTimes2, // 该日期该推广产生的总游戏2次数
  442. // allGameTimes3: allGameTimes3, // 该日期该推广产生的总游戏3次数
  443. // allGameTimes4: allGameTimes4, // 该日期该推广产生的总游戏4次数
  444. // allPlayerCount: allPlayerCount, // 该日期该推广活跃玩家个数
  445. // });
  446. // yield daterebateRecord.saveAsync();
  447. // // console.warn("结算前日返利-------------------daterebateRecord.saveAsync()");
  448. }
  449. if(verifyRebate2>0)
  450. {
  451. //对上级的奖励进行日结
  452. var rebateRecord = new app.models.RebateRecord({
  453. _id: uuid.v1(),
  454. agentId:parentId,
  455. tableId: '',
  456. rType: 5,
  457. rCount: rCount,
  458. rOther: rOther,
  459. rAll: rAll2,
  460. rNow: rNow2,
  461. rOut: rOut2,
  462. rSwap: verifyRebate2,
  463. rDateSwap: dateRebate,
  464. rVerifyDate: verifyDate2,
  465. rVerifyRebate: 0
  466. });
  467. yield rebateRecord.saveAsync();
  468. }
  469. outstate=999999;
  470. // console.warn("结算前日返利 成功了-------------------",query['agentid']);
  471. }
  472. return self.writeOut(outstate, res);
  473. }), app.getServerId())
  474. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  475. });
  476. //ts++ 提现申请
  477. proto.outRebateAsync = P.coroutine(function* (query, method, res) {
  478. //console.warn("提现申请-------------------",query['agentid'] + " query['out'] " + query['out'] );
  479. var agentId = query['agentid'];
  480. if (!agentId) {
  481. return this.writeOut('fail: agentId error!', res);
  482. }
  483. var out_rebate = Number(query['out']);//金额
  484. if (!query['out']) {
  485. return this.writeOut('fail: out error!', res);
  486. }
  487. var outType = Number(query['outType']) || 0;//提现类型:1为提取自己的,2为提取自己下级的
  488. if (!outType) {
  489. return this.writeOut('fail: outType error!', res);
  490. }
  491. var sign = query['sign'];
  492. if (!sign) {
  493. return this.writeOut('fail: sign error!', res);
  494. }
  495. if (!checkSign(sign)) {
  496. return this.writeOut('fail: sign error!', res);
  497. }
  498. var self = this;
  499. var app = this.app;
  500. return app.memdb.goose.transactionAsync(P.coroutine(function* () {
  501. let outstate=-1;
  502. var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'rewardRate rebateOther rebateCount rebateAll rebateAll2 rebateNow rebateNow2 rebateOut rebateOut2 verifyDate verifyDate2 verifyRebate verifyRebate2');
  503. if (agenter)
  504. {
  505. outstate=0;
  506. // console.warn("111提现申请-------------------成功",agenter.rebateNow,out_rebate);
  507. if((outType == 1 && agenter.rebateNow>=out_rebate && out_rebate > 0) || (outType == 2 && agenter.rebateNow2>=out_rebate && out_rebate > 0))
  508. {
  509. let rType = 2;
  510. if(outType == 1) {//提取自己的
  511. agenter.rebateOut += out_rebate;
  512. agenter.rebateNow -= out_rebate;
  513. }
  514. else if(outType == 2) {//提取小组(下级)的
  515. rType = 6;
  516. agenter.rebateOut2 += out_rebate;
  517. agenter.rebateNow2 -= out_rebate;
  518. }
  519. let rCount=agenter.rebateCount;
  520. let rOther=agenter.rebateOther;
  521. let rAll=agenter.rebateAll;
  522. let rNow=agenter.rebateNow;
  523. let rOut=agenter.rebateOut;
  524. let rVerifyDate=agenter.verifyDate;
  525. let rVerifyRebate=agenter.verifyRebate;
  526. if(outType == 2) {//提取小组(下级)的
  527. rAll=agenter.rebateAll2;
  528. rNow=agenter.rebateNow2;
  529. rOut=agenter.rebateOut2;
  530. rVerifyDate=agenter.verifyDate2;
  531. rVerifyRebate=agenter.verifyRebate2;
  532. }
  533. yield agenter.saveAsync();
  534. // console.warn("提现申请-------------------成功");
  535. let vid=uuid.v1();
  536. // 奖励记录
  537. var rebateRecord = new app.models.RebateRecord({
  538. _id: vid,
  539. agentId:agentId,
  540. tableId: '',
  541. rType: rType,
  542. rCount: rCount,
  543. rOther: rOther,
  544. rAll: rAll,
  545. rNow: rNow,
  546. rOut: rOut,
  547. rSwap: -1*out_rebate,
  548. rKouZuan: -1*out_rebate,
  549. rDateSwap: 0,
  550. rVerifyDate: rVerifyDate,
  551. rVerifyRebate: rVerifyRebate
  552. });
  553. yield rebateRecord.saveAsync();
  554. // 提现申请
  555. var outRebate = new app.models.OutRebate({
  556. _id: vid,
  557. agentId:agentId,
  558. outType:outType,
  559. outSwap: -1*out_rebate,
  560. kouZuan: -1*out_rebate
  561. });
  562. yield outRebate.saveAsync();
  563. outstate=999999;
  564. }
  565. }
  566. return self.writeOut(outstate, res);
  567. }), app.getServerId())
  568. .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
  569. });
  570. //ts++签名验证
  571. function checkSign(sign) {
  572. var signKey = 'defe6d21422c8b770767f74fcea95';
  573. if (sign!=signKey) return false;
  574. return true;
  575. };