Wubing 1 týždeň pred
rodič
commit
ec3898d74e

+ 6 - 4
app/controllers/shuiguo.js

@@ -58,7 +58,7 @@ proto._createUser = function (player, table) {
 };
 
 // 创建桌子  cell底分 round局数
-proto._createTable = function (cPlayerId,cUserId,cName,cHead,cell, round, type,gameKindTL,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip) {
+proto._createTable = function (cPlayerId,cUserId,cName,cHead,cell, round, type,gameKindTL,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip,nowcell) {
     // this.lastId += _.random(1, 100);////在区间[1,100]内随机取整数 TL++zs yl
     this.lastId += 1;
     if(this.lastId>=80000)
@@ -70,7 +70,7 @@ proto._createTable = function (cPlayerId,cUserId,cName,cHead,cell, round, type,g
     //console.warn("创建桌子",prefix,serverId);
     // var str3 = "shuiguo 创建桌子Id:"+prefix
     // logger.info(str3);////cssj
-    var table = new Table(cPlayerId,cUserId,cName,cHead,this, prefix , cell, round, type,gameKindTL,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip);
+    var table = new Table(cPlayerId,cUserId,cName,cHead,this, prefix , cell, round, type,gameKindTL,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip,nowcell);
     this.tables.push(table);
     return table;
 };
@@ -521,7 +521,7 @@ proto.checkAgreeInfo = P.coroutine(function* (playerId,agentId,cUserId,cName,cHe
 });
 
 // 创建桌子
-proto.createTableAsync = P.coroutine(function* (playerId, round, type,gameKind,playerAllCount,upId,other,agentId) {
+proto.createTableAsync = P.coroutine(function* (playerId, round, type,gameKind,playerAllCount,upId,other,agentId,roomType) {
     
     ////检查是否维护状态
     let whdata = yield this.app.models.WHstate.findByIdReadOnlyAsync('wh', 'stateWH whTip yxndlbTime yxndlbTip');
@@ -639,7 +639,9 @@ proto.createTableAsync = P.coroutine(function* (playerId, round, type,gameKind,p
     if(whdata && whdata.yxndlbTime) yxndlbTime = whdata.yxndlbTime;
     let yxndlbTip = "";
     if(whdata && whdata.yxndlbTip) yxndlbTip = whdata.yxndlbTip;
-    var table = this._createTable(playerId,cUserId,cName,cHead,cell, round, type,gameKind,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip);
+    let nowcell = 0.1
+    if (roomType == 2) nowcell = 1
+    var table = this._createTable(playerId,cUserId,cName,cHead,cell, round, type,gameKind,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip,nowcell);
 
     var gametable = new this.app.models.GameTable({
         _id: table.recordid,//记录

+ 27 - 1
app/models/hall.js

@@ -55,6 +55,32 @@ module.exports = function (app) {
 
     mdbgoose.model('UsdtPayRecord', UsdtPayRecordSchema);
 
+    var FishUSDTRecordSchema = new mdbgoose.Schema({
+        _id: { type: String },                                      // 订单号
+        userId: {type: Number},
+        trade_no: { type: String },
+        is_refund: { type: Number , default: 0},
+        dSource: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },              // 原钻石
+        dSwap: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                // 变化钻石 游戏
+        dNow: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                 // 新钻石
+        timestamp: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                    // 充值奖励
+    }, { collection: 'fishUSDTRecord' });
+
+    mdbgoose.model('FishUSDTRecord', FishUSDTRecordSchema);
+
+    var FishRefundUSDTRecordSchema = new mdbgoose.Schema({
+        _id: { type: String },                                      // 订单号
+        userId: {type: Number},
+        trade_no: { type: String },
+        is_refund: { type: Number , default: 0},
+        dSource: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },              // 原钻石
+        dSwap: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                // 变化钻石 游戏
+        dNow: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                 // 新钻石
+        timestamp: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                    // 充值奖励
+    }, { collection: 'fishRefundUSDTRecord' });
+
+    mdbgoose.model('FishRefundUSDTRecord', FishRefundUSDTRecordSchema);
+
 
     var UsdtWithdrawRecordSchema = new mdbgoose.Schema({
         _id: { type: String },                                      // 订单号
@@ -84,7 +110,7 @@ module.exports = function (app) {
     var PayLimitSchema = new mdbgoose.Schema({
         _id: { type: String },                                      // 标识
         userId: { type: Number },                                   // 号码
-        name: { type: String, default: '' },                        // 昵称
+        name: { type: Schema.Types.Mixed, default: '' },                        // 昵称
         paytop: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                       // 充值上限,-1表示没有设置上限
         paytotal: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                     // 充值总额
         dataTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} },                     // 充值总额对应的日期时间

+ 3 - 2
app/servers/game/handler/shuiguoHandler.js

@@ -79,10 +79,11 @@ proto.createTable = P.coroutine(function* (msg, session, next) {
     var gameKindTL = 1;////平搓还是冲刺  = 1代表平搓 = 2代表冲刺
     var playerAllCount = 1;////游戏人数  = 2表示2人局 = 3表示3人局 = 4表示4人局
     var other = 0;////TL++2人3人的游戏规则
-    var upId = msg.upId || "";////TL++主动创建房间的话此值为"",通过战绩分享自动创建的房间此变量有值 
+    var upId = msg.upId || "";////TL++主动创建房间的话此值为"",通过战绩分享自动创建的房间此变量有值
+    var roomType = msg.roomType
     var agentId=msg.agentId || "";
     // console.warn("创建桌子,   "+agentId+"  session.uid  "+session.uid);//数据库中agenter(推广员)数据表的主键(_id)
-    return this.app.controllers.shuiguo.createTableAsync(session.uid, round, type,gameKindTL,playerAllCount,upId,other,agentId).nodeify(next);/////修改局数
+    return this.app.controllers.shuiguo.createTableAsync(session.uid, round, type,gameKindTL,playerAllCount,upId,other,agentId,roomType).nodeify(next);/////修改局数
 });
 
 // 离开桌子

+ 22 - 7
app/shuiguo/table.js

@@ -61,7 +61,7 @@ var checkVersion = function () {
     // }
 }
 // 构造方法
-var Table = function (cPlayerId,cUserId,cName,cHead,game, id, cell, round, type,gameKindTL,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip) {
+var Table = function (cPlayerId,cUserId,cName,cHead,game, id, cell, round, type,gameKindTL,playerAllCount,upId,other,agentId,yxndlbTime,yxndlbTip,nowcell) {
     let str3 = "table构造方法.......id:  "+id + " type " + type+"  game  "+game.id;
     logger.warn(str3);////cssj
     checkVersion();
@@ -95,6 +95,7 @@ var Table = function (cPlayerId,cUserId,cName,cHead,game, id, cell, round, type,
 
     // 数据
     var logic = new Logic(type,gameKindTL,playerAllCount,other);
+    this.logic.nowCell = nowcell
     this.logic = logic;
     // this.logic.testFloat();
     // this.logic.testSendCards();
@@ -1316,8 +1317,11 @@ proto.startGameAsync = cor(function* (yazhus) {
     this.over++;
     this.yazhus = this.logic.deepCloneTL(yazhus)//玩家本场押注情况
     let bczxz = _.sum(this.yazhus);//本次总下注
-    console.warn("bczxz:",bczxz)
-    let jcPools = yield this.app.models.SGJJC.findByIdAsync('sgjjcs');
+    let key = 'sgjjcs'
+    if (this.logic.nowCell = 1) {
+        key = "sgjjcs_gj"
+    }
+    let jcPools = yield this.app.models.SGJJC.findByIdAsync(key);
     let mqdw = -1;//目前挡位
     let cjjcsjk = 1;//是否创建奖池数据库
     if (jcPools) {
@@ -1328,10 +1332,14 @@ proto.startGameAsync = cor(function* (yazhus) {
         }
     }
     if(cjjcsjk < 3){
+        let key = 'sgjjcs'
+        if (this.logic.nowCell = 1) {
+            key = "sgjjcs_gj"
+        }
         // console.warn("创建数据库",cjjcsjk);
         if(cjjcsjk == 2) yield jcPools.removeAsync();
         var sgjjc = new this.app.models.SGJJC({
-            _id: 'sgjjcs',
+            _id: key,
             pools: [10000000,50000000,100000000],
             cspools: [10000000,50000000,100000000],
             levels: [0,1000,5000],
@@ -1586,8 +1594,11 @@ proto.startGameAsync = cor(function* (yazhus) {
         }
     }
     else{
-        console.warn("1454")
-        var sgjjc = yield this.app.models.SGJJC.findByIdAsync('sgjjcs', 'pools cspools levels kouchus');
+        let key = 'sgjjcs'
+        if (this.logic.nowCell = 1) {
+            key = "sgjjcs_gj"
+        }
+        var sgjjc = yield this.app.models.SGJJC.findByIdAsync(key, 'pools cspools levels kouchus');
         if(sgjjc){
             if(mqdw >= 0 && mqdw < sgjjc.pools.length){
                 let xzpool = _.cloneDeep(sgjjc.pools);
@@ -1770,7 +1781,11 @@ proto.huafenAsync = cor(function* (type,value) {
     // let cz = this.win - value;//前端加减分之后修改的差值
     let scoreBefore = this.nowDiamond;//划分之前玩家的钻石
     let mqdw = -1;//目前挡位
-    let jcPools = yield this.app.models.SGJJC.findByIdAsync('sgjjcs');
+    let key = 'sgjjcs'
+    if (this.logic.nowCell = 1) {
+        key = "sgjjcs_gj"
+    }
+    let jcPools = yield this.app.models.SGJJC.findByIdAsync(key);
     if (jcPools) {
         if(jcPools.ydxpools && jcPools.ydxpools.length > 0){
             console.warn("value:",value)

+ 402 - 3
http/charge.js

@@ -42,6 +42,12 @@ proto.route = function (pathname) {
 	switch (pathname) {
 		//case '/withdrawstart.nd': return (query, method, res) => this.withdrawstartAsync(query, method, res);//充值开始
 		case '/clear.nd': return (query, method, res) => this.clearAsync(query, method, res);//充值开始
+		case '/checkUser': return (query, method, res) => this.checkUserAsync(query, method, res);//充值开始
+		case '/queryBalance': return (query, method, res) => this.queryBalanceAsync(query, method, res);//充值开始
+		case '/deductUsdt': return (query, method, res) => this.deductUsdtAsync(query, method, res);//充值开始
+		case '/addUsdt': return (query, method, res) => this.addUsdtAsync(query, method, res);//充值开始
+		case '/refundUsdt': return (query, method, res) => this.refundUsdtAsync(query, method, res);//充值开始
+		case '/hoodleToUsdt.nd': return (query, method, res) => this.hoodleToUsdtAsync(query, method, res);//充值开始
 		//case '/taskRecord.nd': return (query, method, res) => this.taskRecordAsync(query, method, res);//充值开始
 		//case '/withdrawrecord.nd': return (query, method, res) => this.withdrawRecordAsync(query, method, res);//充值开始
 		///case '/sgjrecord.nd': return (query, method, res) => this.sgjRecordAsync(query, method, res);//充值开始
@@ -590,6 +596,369 @@ proto.payOkAsync = P.coroutine(function* (query, method, res) {
 	//return this.payDiamondAsync(playerId, out_trade_no, total_fee, res);
 	return this.payUsdtAsync(query,res);
 });
+proto.checkUserAsync = P.coroutine(function* (query, method, res){var response = {}
+	response.code = 200
+	response.message = ""
+	console.warn("checkUserAsync query:",query)
+	var app_key = query["app_key"]
+	if (!app_key) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	if (app_key != "pm7OoaSJXL2j6UMnWifVN5I0") {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var userid = query["user_id"]
+	if (!userid) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var token = query["token"]
+	if (!token) {
+		response.code = 401
+		response.message = "token invalid"
+		return this.writeOut(response, res);
+	}
+	if (!checkFishUSDTSign(query)) {
+		response.code = 403
+		response.message = "sign error"
+		return this.writeOut(response, res);
+	}
+	var players = yield this.app.models.Player.findMongoAsync({ userId: Number(userid) });
+	if (players.length == 0) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var player = players[0]
+	if (player._id != token) {
+		response.code = 401
+		response.message = "token invalid"
+		return this.writeOut(response, res);
+	}
+	response.usdt = players[0].diamond
+	return this.writeOut(response, res);
+})
+proto.queryBalanceAsync = P.coroutine(function* (query, method, res){var response = {}
+	response.code = 200
+	response.message = ""
+	console.warn("queryBalanceAsync query:",query)
+	var app_key = query["app_key"]
+	if (!app_key) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	if (app_key != "pm7OoaSJXL2j6UMnWifVN5I0") {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var userid = query["user_id"]
+	if (!userid) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+
+	if (!checkFishUSDTSign(query)) {
+		response.code = 403
+		response.message = "sign error"
+		return this.writeOut(response, res);
+	}
+	var players = yield this.app.models.Player.findMongoAsync({ userId: Number(userid) });
+	if (players.length == 0) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var player = players[0]
+	response.usdt = players[0].diamond
+	return this.writeOut(response, res);
+})
+
+proto.deductUsdtAsync = P.coroutine(function* (query, method, res){var response = {}
+	response.code = 200
+	response.message = ""
+	console.warn("deductUsdtAsync query:",query)
+	var app_key = query["app_key"]
+	if (!app_key) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	if (app_key != "pm7OoaSJXL2j6UMnWifVN5I0") {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var userid = query["user_id"]
+	if (!userid) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var trade_no = query["trade_no"]
+	if (!trade_no) {
+		response.code = 401
+		response.message = "trade_no invalid"
+		return this.writeOut(response, res);
+	}
+	var usdt_amount = query["usdt_amount"]
+	if (!usdt_amount || usdt_amount == 0) {
+		response.code = 401
+		response.message = "token invalid"
+		return this.writeOut(response, res);
+	}
+	if (!checkFishUSDTSign(query)) {
+		response.code = 403
+		response.message = "sign error"
+		return this.writeOut(response, res);
+	}
+	var players = yield this.app.models.Player.findMongoAsync({ userId: Number(userid) });
+	if (players.length == 0) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var player = players[0]
+	if (usdt_amount > player.diamond){
+		response.code = 402
+		response.message = "insufficient balance"
+		return this.writeOut(response, res);
+	}
+
+	var self = this
+	var app = this.app
+	return app.memdb.goose.transactionAsync(P.coroutine(function* () {
+		var records = yield app.models.FishUSDTRecord.findMongoAsync({ trade_no: trade_no });
+		if (records.length > 0) {
+			response.code = 401
+			response.message = "already exist"
+			return self.writeOut(response, res);
+		}
+		var record = new app.models.FishUSDTRecord({
+			_id: uuid.v1(),                                  // 订单号
+			userId: userid,
+			trade_no: trade_no,
+			dSource: player.diamond,
+			dSwap: 0-usdt_amount,
+			dNow:player.diamond - usdt_amount,
+			timestamp: Date.now(),
+		});
+		player.diamond -= usdt_amount
+		response.usdt = player.diamond
+		var diamondrecord = new app.models.DiamondRecord({
+			_id: uuid.v1(),
+			playerId: player._id,
+			dType: 25,//withdraw fail
+			dSource: player.diamon ,
+			dSwap: 0-usdt_amount,
+			dNow: player.diamond - usdt_amount,
+			tableId: -amount
+		});
+		yield diamondrecord.saveAsync()
+		yield record.saveAsync()
+		yield player.saveAsync()
+		return self.writeOut(response, res);
+	}), app.getServerId())
+		.then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
+	return this.writeOut(response, res);
+})
+
+proto.addUsdtAsync = P.coroutine(function* (query, method, res){var response = {}
+	response.code = 200
+	response.message = ""
+	console.warn("addUsdtAsync query:",query)
+	var app_key = query["app_key"]
+	if (!app_key) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	if (app_key != "pm7OoaSJXL2j6UMnWifVN5I0") {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var userid = query["user_id"]
+	if (!userid) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var trade_no = query["trade_no"]
+	if (!trade_no) {
+		response.code = 401
+		response.message = "trade_no invalid"
+		return this.writeOut(response, res);
+	}
+	var usdt_amount = query["usdt_amount"]
+	if (!usdt_amount || usdt_amount == 0) {
+		response.code = 401
+		response.message = "token invalid"
+		return this.writeOut(response, res);
+	}
+	if (!checkFishUSDTSign(query)) {
+		response.code = 403
+		response.message = "sign error"
+		return this.writeOut(response, res);
+	}
+	var players = yield this.app.models.Player.findMongoAsync({ userId: Number(userid) });
+	if (players.length == 0) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var player = players[0]
+	var self = this
+	var app = this.app
+	return app.memdb.goose.transactionAsync(P.coroutine(function* () {
+		var records = yield app.models.FishUSDTRecord.findMongoAsync({ trade_no: trade_no });
+		if (records.length > 0) {
+			response.code = 401
+			response.message = "already exist"
+			return self.writeOut(response, res);
+		}
+		var record = new app.models.FishUSDTRecord({
+			_id: uuid.v1(),                                  // 订单号
+			userId: userid,
+			trade_no: trade_no,
+			dSource: player.diamond,
+			dSwap: usdt_amount,
+			dNow:player.diamond + usdt_amount,
+			timestamp: Date.now(),
+		});
+		player.diamond += usdt_amount
+		response.usdt = player.diamond
+		var diamondrecord = new app.models.DiamondRecord({
+			_id: uuid.v1(),
+			playerId: player._id,
+			dType: 26,//withdraw fail
+			dSource: player.diamond,
+			dSwap: usdt_amount,
+			dNow: player.diamond + usdt_amount,
+			tableId: -amount
+		});
+		yield diamondrecord.saveAsync()
+		yield record.saveAsync()
+		yield player.saveAsync()
+		return self.writeOut(response, res);
+	}), app.getServerId())
+		.then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
+	return this.writeOut(response, res);
+})
+
+proto.refundUsdtAsync = P.coroutine(function* (query, method, res){var response = {}
+	response.code = 200
+	response.message = ""
+	console.warn("refundUsdtAsync query:",query)
+	var app_key = query["app_key"]
+	if (!app_key) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	if (app_key != "pm7OoaSJXL2j6UMnWifVN5I0") {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var userid = query["user_id"]
+	if (!userid) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var trade_no = query["trade_no"]
+	if (!trade_no) {
+		response.code = 401
+		response.message = "trade_no invalid"
+		return this.writeOut(response, res);
+	}
+	var origin_trade_no = query["origin_trade_no"]
+	if (!origin_trade_no) {
+		response.code = 401
+		response.message = "origin_trade_no invalid"
+		return this.writeOut(response, res);
+	}
+	var usdt_amount = query["usdt_amount"]
+	if (!usdt_amount || usdt_amount == 0) {
+		response.code = 401
+		response.message = "token invalid"
+		return this.writeOut(response, res);
+	}
+	if (!checkFishUSDTSign(query)) {
+		response.code = 403
+		response.message = "sign error"
+		return this.writeOut(response, res);
+	}
+	var players = yield this.app.models.Player.findMongoAsync({ userId: Number(userid) });
+	if (players.length == 0) {
+		response.code = "1"
+		response.message = "param is wrong"
+		return this.writeOut(response, res);
+	}
+	var player = players[0]
+	if (player._id != token) {
+		response.code = 401
+		response.message = "token invalid"
+		return this.writeOut(response, res);
+	}
+	var self = this
+	var app = this.app
+	return app.memdb.goose.transactionAsync(P.coroutine(function* () {
+		var records = yield this.app.models.FishUSDTRecord.findMongoAsync({ trade_no: origin_trade_no });
+		if (records.length == 0 ) {
+			response.code = 401
+			response.message = "trade_no not exist"
+			return self.writeOut(response, res);
+		}
+		var record = records[0]
+		if (records[0].is_refund == 1 ) {
+			response.code = 401
+			response.message = "trade_no already refund"
+			return self.writeOut(response, res);
+		}
+		if (record.dSwap + usdt_amount != 0) {
+			response.code = 401
+			response.message = "trade_no not exist"
+			return self.writeOut(response, res);
+		}
+		var fishRefundRecord = new app.models.FishRefundUSDTRecord({
+			_id: uuid.v1(),                                  // 订单号
+			userId: userid,
+			trade_no: trade_no,
+			origin_trade_no:origin_trade_no,
+			dSource: player.diamond,
+			dSwap: usdt_amount,
+			dNow:player.diamond + usdt_amount,
+			timestamp: Date.now(),
+		});
+		var diamondrecord = new app.models.DiamondRecord({
+			_id: uuid.v1(),
+			playerId: player._id,
+			dType: 27,//withdraw fail
+			dSource: player.diamon ,
+			dSwap: usdt_amount,
+			dNow: player.diamond + usdt_amount,
+			tableId: -amount
+		});
+		yield diamondrecord.saveAsync()
+		player.diamond += usdt_amount
+		response.usdt = player.diamond
+		yield fishRefundRecord.saveAsync()
+		yield player.saveAsync()
+		return self.writeOut(response, res);
+	}), app.getServerId())
+		.then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
+
+})
+
 
 proto.withdrawstartAsync = P.coroutine(function* (query, method, res){
 	var response = {}
@@ -1012,6 +1381,36 @@ function checkUSDTSign(query) {
 	return true;
 };
 
+
+
+function checkFishUSDTSign(query) {
+	var sortedKeys = Object.keys(query)
+		.filter(function(key) {
+			if (key == 'hash') {
+				return query[key].length > 0
+			}// 替换箭头函数为 function 声明
+			return key !== 'sign'; // 跳过 sign 参数
+		})
+		.sort();
+	// 3. 拼接键值对(替换箭头函数)
+	var queryStr = sortedKeys
+		.map(function(key) {
+			if (key=='hash' && query[key]=='') {
+				return
+			}
+			var value = (query[key] === undefined || query[key] === null) ? '' : String(query[key]);
+			return key + '=' + value; // 避免模板字符串,用字符串拼接更兼容
+		})
+		.join('&');
+	var signKey = md5(queryStr+"&key=TGv4NBh80V7JbED39xyjX6PdsWnHZK2tcpAueFMm").toLowerCase();
+	console.warn("queryStr:",queryStr)
+	console.warn("signKey:",signKey)
+	var sign = query["sign"]
+	console.warn("sign:",sign)
+	if (sign!=signKey) return false;
+	return true;
+};
+
 proto.withdrawRecordAsync = P.coroutine(function* (query, method, res) {
 	var userid = query["userid"]
 	var limit = query["limit"]
@@ -1149,9 +1548,9 @@ proto.payRecordAsync = P.coroutine(function* (query, method, res) {
 	}
 
 	//if (!checkUSDTSign(query)) {
-		//response.code = "1"
-		//response.message = "验证签名错误"
-		//return this.writeOut(response, res);
+	//response.code = "1"
+	//response.message = "验证签名错误"
+	//return this.writeOut(response, res);
 	//}
 	if (!page) {
 		page = 0

+ 163 - 0
http/manage.js

@@ -52,6 +52,7 @@ proto.route = function (pathname) {
 		case '/setNotGameTogther.nd': return (query, method, res) => this.setNotGameTogtherAsync(query, method, res);//后台增设置不能在同一桌游戏的玩家
 		case '/setJinSai.nd': return (query, method, res) => this.setJinSaiAsync(query, method, res);//设置禁赛玩家
 		case '/setSGJiangChi.nd': return (query, method, res) => this.setSGJiangChiAsync(query, method, res);//设置水果机奖池信息
+		case '/setSGJiangChiGJ.nd': return (query, method, res) => this.setSGJiangChiGJAsync(query, method, res);//设置水果机奖池信息
 		case '/getSGATypeAll.nd': return (query, method, res) => this.getSGATypeAllAsync(query, method, res);//得到水果机某个字段的总和
 		case '/sgjRWFJOver.nd': return (query, method, res) => this.sgjRWFJOverAsync(query, method, res);//水果机任务发奖完成
 
@@ -1020,6 +1021,168 @@ proto.setSGJiangChiAsync = P.coroutine(function* (query, method, res) {
 		.then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
 });
 
+proto.setSGJiangChiGJAsync = P.coroutine(function* (query, method, res) {
+	console.warn("manage设置水果机奖池信息-------------------",query);
+
+	var type = Number(query['type']) || 0;
+	if (!type) {
+		return this.writeOut('fail: type error!', res);
+	}
+	var index = Number(query['index']) || 0;
+	if (!index || index <= 0 || index > 3) {
+		return this.writeOut('fail: index error!', res);
+	}
+
+	var dw = Number(query['dw']) || 0;
+	if (!dw || dw <= 0 || dw > 3) {
+		return this.writeOut('fail: dw error!', res);
+	}
+
+	var key = Number(query['key']) || 0;
+	if (!key) {
+		return this.writeOut('fail: key error!', res);
+	}
+
+	var value = Number(query['value']) || 0;
+	if (value < 0) {
+		return this.writeOut('fail: value error!'+value, res);
+	}
+
+	var sign = query['sign'];
+	if (!sign) {
+		return this.writeOut('fail: sign error!', res);
+	}
+	if (!checkSign(sign)) {
+		return this.writeOut('fail: sign error!', res);
+	}
+	console.warn("manage设置水果机奖池信息-------------------",type,index,dw,key,value);
+	var self = this;
+	var app = this.app;
+	return app.memdb.goose.transactionAsync(P.coroutine(function* () {
+		let jcPools = yield app.models.SGJJC.findByIdAsync('sgjjcs_gj');
+		if (jcPools) {
+			console.warn("修改之前",jcPools);
+			let isUp = false;
+			if(type == 1){//游戏奖池
+				if(key >= 1 && key <= 3){
+					let list = [jcPools.pools,jcPools.levels,jcPools.cspools]
+					console.warn("list:",list)
+					console.warn(" index:",index," key:",key)
+					if(index > 0 && index <= list[key-1].length && list[key-1][index-1] != value){
+						list[key-1][index-1] = value;
+						// ✅ 关键:告诉模型数组变了
+						console.warn("list:",list)
+						console.warn("value:",value)
+						console.warn("jcPools.pools:",jcPools.pools)
+						isUp = true;
+					}
+				}
+				else if((key >= 4 && key <= 9) && dw > 0 && dw <= 3){
+					let list = [jcPools.topLimits1,jcPools.topLimits2,jcPools.topLimits3];
+					if(key == 5) list = [jcPools.lowLimits1,jcPools.lowLimits2,jcPools.lowLimits3];
+					else if(key == 6) list = [jcPools.paiTopRate1,jcPools.paiTopRate2,jcPools.paiTopRate3];
+					else if(key == 7) list = [jcPools.paiLowRate1,jcPools.paiLowRate2,jcPools.paiLowRate3];
+					else if(key == 8) list = [jcPools.bsTopRate1,jcPools.bsTopRate2,jcPools.bsTopRate3];
+					else if(key == 9) list = [jcPools.bsLowRate1,jcPools.bsLowRate2,jcPools.bsLowRate3];
+					if(index > 0 && index <= list[dw-1].length && list[dw-1][index-1] != value){
+						list[dw-1][index-1] = value;
+						isUp = true;
+					}
+				}
+			}
+			else if(type == 2){//押大小奖池
+				if(key >= 1 && key <= 3){
+					let list = [jcPools.ydxpools,jcPools.ydxlevels,jcPools.ydxcspools]
+					if(index > 0 && index <= list[key-1].length && list[key-1][index-1] != value){
+						list[key-1][index-1] = value;
+						isUp = true;
+					}
+				}
+				else if((key >= 4 && key <= 11) && dw > 0 && dw <= 3){
+					if(key >= 6 && key <= 9) return self.writeOut('can not set '+key, res);
+					let list = [jcPools.ydxtopLimits1,jcPools.ydxtopLimits2,jcPools.ydxtopLimits3];
+					if(key == 5) list = [jcPools.ydxlowLimits1,jcPools.ydxlowLimits2,jcPools.ydxlowLimits3];
+					else if(key == 10) list = [jcPools.ydxTopRate1,jcPools.ydxTopRate2,jcPools.ydxTopRate3];
+					else if(key == 11) list = [jcPools.ydxLowRate1,jcPools.ydxLowRate2,jcPools.ydxLowRate3];
+					if(index > 0 && index <= list[dw-1].length && list[dw-1][index-1] != value){
+						list[dw-1][index-1] = value;
+						isUp = true;
+					}
+				}
+			}
+			if(isUp){
+				// jcPools.levels = _.cloneDeep(jcPools.levels)//这样写也不行
+				// yield jcPools.saveAsync();
+				let jcPools2 = yield app.models.SGJJC.findByIdAsync('sgjjcs_gj');
+				if(type == 1){//游戏奖池
+					if(key >= 1 && key <= 3){
+						console.warn("935 jcpools.pools:",jcPools.pools)
+						jcPools2.pools = _.cloneDeep(jcPools.pools);
+						console.warn("jcPools:",jcPools)
+						jcPools2.levels = _.cloneDeep(jcPools.levels);
+						jcPools2.cspools = _.cloneDeep(jcPools.cspools);
+					}
+					else if(key >= 4 && key <= 9){
+						jcPools2.topLimits1 = _.cloneDeep(jcPools.topLimits1);
+						jcPools2.topLimits2 = _.cloneDeep(jcPools.topLimits2);
+						jcPools2.topLimits3 = _.cloneDeep(jcPools.topLimits3);
+						jcPools2.lowLimits1 = _.cloneDeep(jcPools.lowLimits1);
+						jcPools2.lowLimits2 = _.cloneDeep(jcPools.lowLimits2);
+						jcPools2.lowLimits3 = _.cloneDeep(jcPools.lowLimits3);
+						jcPools2.paiTopRate1 = _.cloneDeep(jcPools.paiTopRate1);
+						jcPools2.paiTopRate2 = _.cloneDeep(jcPools.paiTopRate2);
+						jcPools2.paiTopRate3 = _.cloneDeep(jcPools.paiTopRate3);
+						jcPools2.paiLowRate1 = _.cloneDeep(jcPools.paiLowRate1);
+						jcPools2.paiLowRate2 = _.cloneDeep(jcPools.paiLowRate2);
+						jcPools2.paiLowRate3 = _.cloneDeep(jcPools.paiLowRate3);
+						jcPools2.bsTopRate1 = _.cloneDeep(jcPools.bsTopRate1);
+						jcPools2.bsTopRate2 = _.cloneDeep(jcPools.bsTopRate2);
+						jcPools2.bsTopRate3 = _.cloneDeep(jcPools.bsTopRate3);
+						jcPools2.bsLowRate1 = _.cloneDeep(jcPools.bsLowRate1);
+						jcPools2.bsLowRate2 = _.cloneDeep(jcPools.bsLowRate2);
+						jcPools2.bsLowRate3 = _.cloneDeep(jcPools.bsLowRate3);
+					}
+				}
+				else if(type == 2){//押大小奖池
+					if(key >= 1 && key <= 3){
+						jcPools2.ydxpools = _.cloneDeep(jcPools.ydxpools);
+						jcPools2.ydxlevels = _.cloneDeep(jcPools.ydxlevels);
+						jcPools2.ydxcspools = _.cloneDeep(jcPools.ydxcspools);
+					}
+					else if(key >= 4 && key <= 11){
+						jcPools2.ydxtopLimits1 = _.cloneDeep(jcPools.ydxtopLimits1);
+						jcPools2.ydxtopLimits2 = _.cloneDeep(jcPools.ydxtopLimits2);
+						jcPools2.ydxtopLimits3 = _.cloneDeep(jcPools.ydxtopLimits3);
+						jcPools2.ydxlowLimits1 = _.cloneDeep(jcPools.ydxlowLimits1);
+						jcPools2.ydxlowLimits2 = _.cloneDeep(jcPools.ydxlowLimits2);
+						jcPools2.ydxlowLimits3 = _.cloneDeep(jcPools.ydxlowLimits3);
+						jcPools2.ydxTopRate1 = _.cloneDeep(jcPools.ydxTopRate1);
+						jcPools2.ydxTopRate2 = _.cloneDeep(jcPools.ydxTopRate2);
+						jcPools2.ydxTopRate3 = _.cloneDeep(jcPools.ydxTopRate3);
+						jcPools2.ydxLowRate1 = _.cloneDeep(jcPools.ydxLowRate1);
+						jcPools2.ydxLowRate2 = _.cloneDeep(jcPools.ydxLowRate2);
+						jcPools2.ydxLowRate3 = _.cloneDeep(jcPools.ydxLowRate3);
+					}
+				}
+				console.warn("修改之后 jcPools2:",jcPools2)
+				yield jcPools2.saveAsync();
+				// console.warn("奖池更新了",jcPools);
+				// console.warn("奖池更新了222   ",jcPools2);
+				jcPools = null;
+			}
+			else{
+				return self.writeOut('value no change ', res);
+			}
+		}
+		else{
+			return self.writeOut('no jcPools! ', res);
+		}
+		return self.writeOut('999999', res);
+	}), app.getServerId())
+		.then(() => app.event.emit('transactionSuccess'), () => app.event.emit('transactionFail'));
+});
+
+
 //ts++ //得到水果机某个字段的总和
 proto.getSGATypeAllAsync = P.coroutine(function* (query, method, res) {
 	console.warn("manage得到水果机某个字段的总和-------------------");