| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637 |
- '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 logger = quick.logger.getLogger('agent', __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);
- };
- // 导出方法
- module.exports = function (app) {
- return new Controller(app);
- };
- // 原型对象
- var proto = Controller.prototype;
- // 路由函数
- proto.route = function (pathname) {
- switch (pathname) {
- case '/setagent.nd': return (query, method, res) => this.setAgentAsync(query, method, res);//设置代理
- case '/freebind.nd': return (query, method, res) => this.freeBindAsync(query, method, res);//清除绑定
- case '/outverify.nd': return (query, method, res) => this.outVerifyAsync(query, method, res);//每日结算
- case '/outrebate.nd': return (query, method, res) => this.outRebateAsync(query, method, res);//提现申请
- //case '/setagenturl.nd': return (query, method, res) => this.setAgentUrlAsync(query, method, res);//设置 url
- case '/operateAgree.nd': return (query, method, res) => this.operateAgreeAsync(query, method, res);//操作白名单
- case '/inviteChird.nd': return (query, method, res) => this.inviteChirdAsync(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++ 设置代理
- proto.setAgentAsync = P.coroutine(function* (query, method, res) {
- // console.warn("设置代理-------------------");
-
- var agentId = query['agentid'];
- //console.warn("设置代理-------------------agenterId:",agentId);
- if (!agentId) {
- return this.writeOut('fail: agentId error!', res);
- }
- var rewardRate = query['rate'];
- var agentName = query['agentname'];
- if (!agentName) {
- return this.writeOut('fail: agentName error!', res);
- }
- var myUrl = query['myurl'];
- // console.warn("设置代理-------------------myUrl:",myUrl);
- 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 agenter = yield app.models.Agenter.findByIdAsync(agentId, 'agentName myUrl rewardRate');//agentNo playerId myGrade
- if (agenter) {
- var upd=false;
- if(rewardRate)
- {
- upd=true;
- agenter.rewardRate = parseInt(rewardRate);
- }
- if(agentName!='' && agenter.agentName!=agentName)
- {
- upd=true;
- agenter.agentName = agentName;
- }
- if(myUrl!='' && agenter.myUrl!=myUrl)
- {
- upd=true;
- agenter.myUrl = myUrl;
- }
- if(upd)
- {
- yield agenter.saveAsync();
- // console.warn("设置代理-------------------成功");
- }
- else
- {
- // console.warn("设置代理-------------------无修改");
- }
- }
- return self.writeOut('999999', res);
- }), app.getServerId())
- .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
- });
- //ts++ 推广操作白名单
- proto.operateAgreeAsync = P.coroutine(function* (query, method, res) {
- var agentId = query['agentid'];
- if (!agentId) {
- return this.writeOut('fail: agentId error!', res);
- }
- var operate = Number(query['operate']);
- if (!operate || (operate != 3 && operate != 4 && operate != 5)) {
- return this.writeOut('fail: operate error!', res);
- }
- var userId = query['userId'];
- if (!userId && (operate || 4 && operate || 5)) {
- return this.writeOut('fail: userId 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 agreeInfo = yield app.models.AgenterAgree.findByIdAsync(agentId, '_id isOpenAgree infoList');
- if (agreeInfo) {
- if (operate == 3){//设置白名单功能是否开启
- //推广有白名单记录则修改白名单开关
- let _isOpenAgree = "0";
- if (agreeInfo.isOpenAgree == "0")
- {
- _isOpenAgree = "1";
- }
- agreeInfo.isOpenAgree = _isOpenAgree;
- yield agreeInfo.saveAsync();
-
- }
- else if (operate == 4 || operate == 5){//设置玩家为同意或拒绝
- var isExit = false;
- for (let i = 0; i < agreeInfo.infoList.length; i++){
- if(agreeInfo.infoList[i].userId == userId){
- var state = "0";
- if (operate == 4) state = "1";
- else if (operate == 5) state = "2";
- agreeInfo.infoList[i].agreeState = state;
- isExit = true;
- break;
- }
- }
- if(isExit){
- yield agreeInfo.saveAsync();
- }
- else
- {
- //console.warn("推广操作白名单-------------------不存在用户");
- }
- }
- }
- else{
- // console.warn("推广操作白名单-------------------没有白名单 创建默认白名单");
- var agenteragree = new app.models.AgenterAgree({
- _id: agentId,//记录
- isOpenAgree: "0",
- infoList: []
- });
- yield agenteragree.saveAsync();
- }
- return self.writeOut('999999', res);
- }), app.getServerId())
- .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
- });
- //金牌推广员给自己添加下级(组员)
- proto.inviteChirdAsync = P.coroutine(function* (query, method, res) {
- var agentId = query['agentid'];
- if (!agentId) {
- return this.writeOut(-3, res);
- }
- var userId = query['userId'];
- if (!userId) {
- return this.writeOut(-4, res);
- }
- var contact = query['contact'];
- if (!contact) {
- return this.writeOut(-5, res);
- }
- var tel = query['tel'];
- if (!tel) {
- return this.writeOut(-6, res);
- }
- var sign = query['sign'];
- if (!sign) {
- return this.writeOut(-7, res);
- }
- if (!checkSign(sign)) {
- return this.writeOut(-8, res);
- }
- var self = this;
- var app = this.app;
- return app.memdb.goose.transactionAsync(P.coroutine(function* () {
- let outstate = -2;
- var yPlayers = yield app.models.Player.findMongoAsync({ userId: userId },'_id userId');
- if (yPlayers.length == 1){
- let uid = yPlayers[0]._id;
- let tgState = 2;////未申请=1;正在审核=2;审核成功=3,审核失败=4
- var apply = yield app.models.tgApply.findByIdReadOnlyAsync(uid);
- if (!apply) {
-
- var tgapply = new app.models.tgApply({
- _id: uid,
- applyType: 2,
- parenteId:agentId,
- tgName: contact,
- tgPhone: tel,
- tgWXNumber: "",
- tgState: tgState
- });
- yield tgapply.saveAsync();
- outstate = 999999;
- }
- else{
- outstate = -1;
- }
- }
- else{
- outstate = 0;
- }
- return self.writeOut(outstate, res);
- }), app.getServerId())
- .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
- });
- //ts++ 清除代理绑定
- proto.freeBindAsync = P.coroutine(function* (query, method, res) {
- // console.warn("清除代理-------------------");
- var agentId = query['agentid'];
- if (!agentId) {
- return this.writeOut('fail: agentid error!', res);
- }
- //console.warn("清除代理-------------------playerId:",agentId);
- 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 agenter = yield app.models.Agenter.findByIdAsync(agentId, 'playerId');
- if (agenter) {
- agenter.playerId = '';
- yield agenter.saveAsync();
- // console.warn("清除代理-------------------成功");
- }
- return self.writeOut('999999', res);
- }), app.getServerId())
- .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
- });
- //ts++ 解除锁定返利
- proto.outVerifyAsync = P.coroutine(function* (query, method, res) {
- // console.warn("结算前日返利-------------------",query['agentid']);
- var agentId = query['agentid'];
- if (!agentId) {
- return this.writeOut('fail: agentId error!', res);
- }
- // console.warn("解除锁定返利-------------------agenterId:",agentId);
-
- var sign = query['sign'];
- if (!sign) {
- return this.writeOut('fail: sign error!', res);
- }
- if (!checkSign(sign)) {
- return this.writeOut('fail: sign error!', res);
- }
- var today = new Date();
- today.setHours(0);
- today.setMinutes(0);
- today.setSeconds(0);
- today.setMilliseconds(0);
- let nowverifyDate=today.getTime();
- var self = this;
- var app = this.app;
- return app.memdb.goose.transactionAsync(P.coroutine(function* () {
- let outstate=-1;
- // 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');
- var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'levelFlag rewardRate rebateAll2 rebateNow2 rebateOut2 verifyDate2 verifyRebate2 rebateOther rebateCount rebateAll rebateNow rebateOut verifyDate verifyRebate agentRate');
- if (agenter)
- {
- if(agenter.verifyDate==nowverifyDate)
- {
- return self.writeOut('fail: verifyDate error!', res);
- }
- let rewardRate = agenter.rewardRate;
- let parentId = agenter.parentAgenterId;
- let parentRate = agenter.parentRate;
- let verifyDate=0;
- let verifyRebate=0;
- //日奖励
- let dateAgentRate=0;
- let dateRebate=0;//额外奖励数值(=额外比例*本局消耗),目前没有额外返利所以这个数值没有计算
- let levelFlag = agenter.levelFlag;
- let verifyDate2=0;
- let verifyRebate2=0;
- let dateAgentRate2=0;
- let dateRebate2=0;
- if(agenter.verifyRebate>0 || agenter.verifyRebate2>0)
- {
- verifyDate=agenter.verifyDate;
- verifyRebate=agenter.verifyRebate;
- dateAgentRate=agenter.agentRate;
- agenter.rebateNow += verifyRebate;
- agenter.rebateNow += dateRebate;
- agenter.rebateOther += dateRebate;
- agenter.verifyRebate=0;
- //上面是对自己的进行日结,下面是对小组的日结
- verifyDate2=agenter.verifyDate2;
- verifyRebate2=agenter.verifyRebate2;
- agenter.rebateNow2 += verifyRebate2;
- agenter.verifyRebate2=0;
- //审核的返利转到可提现
- if(agenter.levelFlag == 0){
- if(agenter.rebateNow > 500) {
- agenter.levelFlag = 1;//从实习变为转正
- }
- }
-
- }
- agenter.verifyDate=nowverifyDate;
- agenter.verifyDate2=nowverifyDate;
- let rCount=agenter.rebateCount;
- let rOther=agenter.rebateOther;
- let rAll=agenter.rebateAll;
- let rNow=agenter.rebateNow;
- let rOut=agenter.rebateOut;
- let rAll2=agenter.rebateAll2;
- let rNow2=agenter.rebateNow2;
- let rOut2=agenter.rebateOut2;
- yield agenter.saveAsync();
- // console.warn("结算前日返利-------------------成功");
- if(verifyRebate>0)
- {
- // 退费 钻石记录
- var rebateRecord = new app.models.RebateRecord({
- _id: uuid.v1(),
- agentId:agentId,
- tableId: '',
- rType: 3,
- rCount: rCount,
- rOther: rOther,
- rAll: rAll,
- rNow: rNow,
- rOut: rOut,
- rSwap: verifyRebate,
- rDateSwap: dateRebate,
- rVerifyDate: verifyDate,
- rVerifyRebate: 0
- });
- yield rebateRecord.saveAsync();
- // console.warn("结算前日返利-------------------rebateRecord.saveAsync()");
- // let parentRebate = 0; // 该日期 该推广上级的返利金额
- // let allGameCost = 0; // 该日期该推广产生的总游戏消耗
- // let allGiftCost = 0; // 该日期该推广产生的总礼物消耗
- // let allGameTimes1 = 0; // 该日期该推广产生的总游戏次数
- // let allGameTimes2 = 0; // 该日期该推广产生的总游戏次数
- // let allGameTimes3 = 0; // 该日期该推广产生的总游戏次数
- // let allGameTimes4 = 0; // 该日期该推广产生的总游戏次数
- // let allPlayerCount = 0;// 该日期该推广活跃玩家个数
- // let opts1 = {
- // agentId: agentId,
- // time: { $gte: verifyDate, $lt: verifyDate+86400000}
- // };
- // var jrList1 = yield this.app.models.FHMJTables.findMongoAsync(opts1, 'gameId gameCost giftCost');
- // for (let i = 0; i < jrList1.length; i++){
- // allGameCost += jrList1[i].gameCost; // 该日期该推广产生的总游戏消耗
- // allGiftCost += jrList1[i].giftCost; // 该日期该推广产生的总礼物消耗
- // if(jrList1[i].gameId == 10006) allGameTimes1+=1;// 湖南长沙
- // else if(jrList1[i].gameId == 10007) allGameTimes2+=1;// 湖南红中
- // else if(jrList1[i].gameId == 10008) allGameTimes3+=1; // 湖南跑得快
- // else if(jrList1[i].gameId == 10009) allGameTimes4+=1; // 湖南跑胡子
- // }
- // let opts = {agentId: agentId,date: verifyDate};
- // allPlayerCount = yield this.app.models.PlayerCount.countMongoAsync(opts)
- // let opts2 = {
- // agentId: parentId,
- // rType: 4,
- // tableId: agentId,
- // rVerifyDate: { $gte: verifyDate, $lt: verifyDate+86400000}
- // };
- // var jrList2 = yield this.app.models.RebateRecord.findMongoAsync(opts2, 'gameId gameCost giftCost');
- // for (let i = 0; i < jrList2.length; i++){
- // parentRebate += jrList2[i].rSwap; // 该日期该推广给上级产生的贡献
- // }
- // var daterebateRecord = new app.models.DateRebateRecord({
- // _id: uuid.v1(),
- // agentId:agentId,
- // verifyDate: verifyDate,
- // verifyRebate: verifyRebate,
- // dateAgentRate: dateAgentRate,
- // dateRebate: dateRebate,
- // dateRewardRate: rewardRate, // 进行日结当日该推广自己的返利的比例
- // parentaId: parentId, // 代理上级的标识
- // dateParentRate: parentRate, // 进行日结当日该推广上级的返利的比例
- // parentRebate: parentRebate, // 该日期 该推广上级的返利金额
- // allGameCost: allGameCost, // 该日期该推广产生的总游戏消耗
- // allGiftCost: allGiftCost, // 该日期该推广产生的总礼物消耗
- // allGameTimes1: allGameTimes1, // 该日期该推广产生的总游戏1次数
- // allGameTimes2: allGameTimes2, // 该日期该推广产生的总游戏2次数
- // allGameTimes3: allGameTimes3, // 该日期该推广产生的总游戏3次数
- // allGameTimes4: allGameTimes4, // 该日期该推广产生的总游戏4次数
- // allPlayerCount: allPlayerCount, // 该日期该推广活跃玩家个数
- // });
- // yield daterebateRecord.saveAsync();
- // // console.warn("结算前日返利-------------------daterebateRecord.saveAsync()");
- }
- if(verifyRebate2>0)
- {
- //对上级的奖励进行日结
- var rebateRecord = new app.models.RebateRecord({
- _id: uuid.v1(),
- agentId:parentId,
- tableId: '',
- rType: 5,
- rCount: rCount,
- rOther: rOther,
- rAll: rAll2,
- rNow: rNow2,
- rOut: rOut2,
- rSwap: verifyRebate2,
- rDateSwap: dateRebate,
- rVerifyDate: verifyDate2,
- rVerifyRebate: 0
- });
- yield rebateRecord.saveAsync();
-
- }
- outstate=999999;
- // console.warn("结算前日返利 成功了-------------------",query['agentid']);
- }
- return self.writeOut(outstate, res);
- }), app.getServerId())
- .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
- });
- //ts++ 提现申请
- proto.outRebateAsync = P.coroutine(function* (query, method, res) {
- //console.warn("提现申请-------------------",query['agentid'] + " query['out'] " + query['out'] );
- var agentId = query['agentid'];
- if (!agentId) {
- return this.writeOut('fail: agentId error!', res);
- }
- var out_rebate = Number(query['out']);//金额
- if (!query['out']) {
- return this.writeOut('fail: out error!', res);
- }
- var outType = Number(query['outType']) || 0;//提现类型:1为提取自己的,2为提取自己下级的
- if (!outType) {
- return this.writeOut('fail: outType 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 outstate=-1;
- var agenter = yield app.models.Agenter.findByIdAsync(agentId, 'rewardRate rebateOther rebateCount rebateAll rebateAll2 rebateNow rebateNow2 rebateOut rebateOut2 verifyDate verifyDate2 verifyRebate verifyRebate2');
- if (agenter)
- {
- outstate=0;
- // console.warn("111提现申请-------------------成功",agenter.rebateNow,out_rebate);
- if((outType == 1 && agenter.rebateNow>=out_rebate && out_rebate > 0) || (outType == 2 && agenter.rebateNow2>=out_rebate && out_rebate > 0))
- {
- let rType = 2;
- if(outType == 1) {//提取自己的
- agenter.rebateOut += out_rebate;
- agenter.rebateNow -= out_rebate;
- }
- else if(outType == 2) {//提取小组(下级)的
- rType = 6;
- agenter.rebateOut2 += out_rebate;
- agenter.rebateNow2 -= out_rebate;
- }
-
- let rCount=agenter.rebateCount;
- let rOther=agenter.rebateOther;
- let rAll=agenter.rebateAll;
- let rNow=agenter.rebateNow;
- let rOut=agenter.rebateOut;
- let rVerifyDate=agenter.verifyDate;
- let rVerifyRebate=agenter.verifyRebate;
- if(outType == 2) {//提取小组(下级)的
- rAll=agenter.rebateAll2;
- rNow=agenter.rebateNow2;
- rOut=agenter.rebateOut2;
- rVerifyDate=agenter.verifyDate2;
- rVerifyRebate=agenter.verifyRebate2;
- }
- yield agenter.saveAsync();
- // console.warn("提现申请-------------------成功");
- let vid=uuid.v1();
- // 奖励记录
- var rebateRecord = new app.models.RebateRecord({
- _id: vid,
- agentId:agentId,
- tableId: '',
- rType: rType,
- rCount: rCount,
- rOther: rOther,
- rAll: rAll,
- rNow: rNow,
- rOut: rOut,
- rSwap: -1*out_rebate,
- rKouZuan: -1*out_rebate,
- rDateSwap: 0,
- rVerifyDate: rVerifyDate,
- rVerifyRebate: rVerifyRebate
- });
- yield rebateRecord.saveAsync();
- // 提现申请
- var outRebate = new app.models.OutRebate({
- _id: vid,
- agentId:agentId,
- outType:outType,
- outSwap: -1*out_rebate,
- kouZuan: -1*out_rebate
- });
- yield outRebate.saveAsync();
- outstate=999999;
- }
- }
- return self.writeOut(outstate, res);
- }), app.getServerId())
- .then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
- });
- //ts++签名验证
- function checkSign(sign) {
- var signKey = 'defe6d21422c8b770767f74fcea95';
- if (sign!=signKey) return false;
- return true;
- };
|