Kaynağa Gözat

first version

wubing 1 ay önce
ebeveyn
işleme
4fa232653f

+ 136 - 4
app/controllers/player.js

@@ -1,5 +1,8 @@
 'use strict';
 
+var request = require('request');
+var Jimp = require('jimp');
+var fs = require('fs');
 var quick = require('quick-pomelo');
 var P = quick.Promise;
 var _ = require('lodash');
@@ -21,10 +24,139 @@ module.exports = function (app) {
 
 var proto = Controller.prototype;
 
+var requestGet = P.promisify(request.get, {multiArgs: true});
+
+proto.convertUrlToPng = P.coroutine(function* (url, outputPath) {
+    try {
+        console.warn("url:",url)
+        // 1. 使用 request 获取数据,必须 encoding: null
+        var result = yield requestGet({
+            url: url,
+            encoding: null,
+            timeout: 10000,
+            headers: {
+                'User-Agent': 'Mozilla/5.0'
+            }
+        });
+        // console.warn("湖南红中  游戏服务器启动",result);
+
+        //console.log("result[1]:",result[1])
+        // 重点:multiArgs: true 会返回 [response, body]
+        // result[0] 是响应头,result[1] 才是真正的图片 Buffer
+        var response = result[0];
+        var body = result[1];
+
+        if (!response || response.statusCode !== 200) {
+            throw new Error('Download failed, status: ' + (response ? response.statusCode : 'unknown'));
+        }
+
+        if (!body || body.length === 0) {
+            throw new Error('Received empty buffer');
+        }
+
+        // 2. 使用 Jimp 读取 Buffer
+        // 如果依然报 MIME 错误,可以尝试强制指定格式 (仅限确定是 jpg/png 的情况)
+        var image = yield Jimp.read(body);
+        console.warn("68")
+        // 3. 转换并输出
+        // 老版本 Jimp 0.2.28 的 getBuffer 是回调模式,需要 promisify
+        var pngBuffer = yield new P(function(resolve, reject) {
+            // 显式检查 image 对象是否存在且有 getBuffer 方法
+            console.warn("73")
+            if (!image || typeof image.getBuffer !== 'function'){
+                console.warn("75:",typeof image.getBuffer)
+                //console.warn("75:", typeof image.getBuffer);
+                return reject(new Error('Jimp 实例无效或不支持 getBuffer 方法'));
+            }
+            image.getBuffer(Jimp.MIME_PNG, function(err, buffer) {
+                console.warn("80:")
+                if (err) return reject(err);
+                resolve(buffer);
+            });
+            console.log("81")
+        });
+        console.warn("83")
+        if (outputPath) {
+            console.warn("84")
+            yield new P(function(resolve, reject) {
+                console.warn("91:")
+                if (typeof image.write !== 'function') {
+                    console.warn("91:")
+                    return reject(new Error('Jimp 实例不支持 write 方法'));
+                }
+
+                image.write(outputPath, function(err) {
+                    console.warn("err:",err)
+                    if (err) return reject(err);
+                    console.warn("96:")
+                    resolve();
+                    console.warn("err:",100)
+                });
+            });
+            console.warn('转换并保存成功: ' + outputPath);
+        }
+
+        return pngBuffer;
+    } catch (error) {
+        // 增加更详细的报错日志,方便排查
+        console.error('图片转换失败详情:', error.message);
+        if (error.stack) console.error(error.stack);
+    }
+});
+// 登陆
+
+proto.convertUrlToPng = function(url, outputPath, callback) {
+    // 替换后缀为 png(仅改名字,内容还是 SVG)
+    var pngOutputPath = outputPath.replace(/\.[^.]+$/, '.png');
+
+    var https = require('https');
+    var fs = require('fs');
+
+    var request = https.get(url, function(response) {
+        if (response.statusCode !== 200) {
+            return callback(new Error('请求失败,状态码:' + response.statusCode));
+        }
+
+        var fileStream = fs.createWriteStream(pngOutputPath);
+        response.pipe(fileStream);
+
+        fileStream.on('finish', function() {
+            fileStream.close(function() {
+                // 模拟返回 Buffer(Node 4.4.7 兼容)
+                fs.readFile(pngOutputPath, function(err, buffer) {
+                    if (err) return callback(err);
+                    callback(null, buffer); // 回调返回 Buffer,兼容原有逻辑
+                });
+            });
+        });
+
+        fileStream.on('error', function(err) {
+            fs.unlink(pngOutputPath, function() {});
+            callback(err);
+        });
+    });
+
+    request.on('error', function(err) {
+        callback(err);
+    });
+
+    request.setTimeout(10000, function() {
+        request.destroy();
+        callback(new Error('请求超时'));
+    });
+};
 // 创建玩家
 proto.createAsync = P.coroutine(function* (playerId, name, sex, headurl,tel,pwd,ip,spreadId,formId, diamond) {
-    
-    let diamondReg=50000;//5000000;//ts++注册赠送
+    console.warn("convertUrlToPng")
+    this.convertUrlToPng('https://bargame.ala456.com/gameRes/1.svg', 'D:/web/root80/'+playerId+'.png', function(err, buffer) {
+        if (err) {
+            console.error('转换失败:' + err.message);
+            return;
+        }
+        console.log('转换完成,Buffer 长度:' + buffer.length);
+    });
+    //this.convertUrlToPng(headurl,"D:\\web\\root80\\image\\"+playerId+".png")
+    let diamondReg=500;//5000000;//ts++注册赠送
     if (diamond) {
         // diamondReg = diamond;
     }
@@ -57,7 +189,7 @@ proto.createAsync = P.coroutine(function* (playerId, name, sex, headurl,tel,pwd,
         tel: tel || '',
         pwd: pwd || '',
         registerIp: ip || '',
-        headurl: headurl || '',
+        headurl: playerId+".png" || '',
         spreadId: _spreadId || '',
         formId: formId
         //myurl: _myurl || 'http://fhmj.jzb518.com/',       
@@ -155,7 +287,7 @@ proto.connectAsync = P.coroutine(function* (playerId,name,headurl, connectorId,
     // console.warn("更新用户头像",headurl , player.headurl);
     /////TL++,下面两句为了实现更新昵称和头像
     if(name && name != player.name) player.name = name;
-    if(headurl && headurl != player.headurl) player.headurl = headurl;
+    if(headurl && headurl != player.headurl) player.headurl = playerId+".png";
     // if(sex != player.sex) player.sex = sex;//微信不返回性别了
     if(formId != player.formId) player.formId = formId;
     player.connectorId = connectorId;

+ 28 - 17
app/controllers/shuiguo.js

@@ -30,7 +30,6 @@ var Controller = function (app) {
     console.warn("水果  游戏服务器启动",app.getServerType(),app.getServerId());
 
     // logger.info("奉化2人  游戏服务器启动",app.getServerType(),app.getServerId());
-
     this.users = {};
     this.tables = [];
 
@@ -134,7 +133,7 @@ proto.backTableAsync = P.coroutine(function* (user) {
     // logger.info(str4);////cssj
     if (player.gameServerId) {
         // console.warn("-------进不来111",player.gameServerId);
-        return { code: C.FAILD, msg: C.TABLE_HAS_ALREADY };
+        //return { code: C.FAILD, msg: C.TABLE_HAS_ALREADY };
     }
     var bDel=false;
     var usertable = user.table;
@@ -158,6 +157,7 @@ proto.backTableAsync = P.coroutine(function* (user) {
     }  
     if (bDel) {
         delete this.users[user.id];
+        console.warn("161 bDel:",bDel)
         return { code: C.FAILD, msg: C.TABLE_GAME_OVER };
     }
     if (player.connectorId) {
@@ -227,6 +227,7 @@ proto.isTableExistAsync = P.coroutine(function* (playerId, tableId,reload) {
     // let str6 = "shuiguo判断桌子是否存在==查找桌子 "
     // logger.info(str6);////cssj
     if (!table) {
+        console.warn("remove 230")
         return { code: C.FAILD, msg: C.TABLE_NOT_FOUND };
     }
     var table = _.find(this.tables, { id: tableId });
@@ -234,10 +235,12 @@ proto.isTableExistAsync = P.coroutine(function* (playerId, tableId,reload) {
     // logger.info(str7);////cssj
     // 状态结束
     if (table.state == Table.STATE.END) {
+        console.warn("161 table:",table)
         return { code: C.FAILD, msg: C.TABLE_GAME_OVER };
     }
     // 是否坐满
     if (table.isFull(playerId)) {
+        console.warn("remove 243")
         return { code: C.FAILD, msg: C.TABLE_IS_FULL };
     }
     return { code: C.OK, data: {tid:tableId} };
@@ -245,6 +248,7 @@ proto.isTableExistAsync = P.coroutine(function* (playerId, tableId,reload) {
 
 ////TL++创建或者加入桌子,用于玩家通过战绩分享进来之后
 proto.creatOrjoinTableAsync = P.coroutine(function* (playerId, round,type, kind,playercount,upId,other,agentId) {
+
     // let str6 = "shuiguo创建或者加入桌子 "+playerId+ "  "+ round+ "  "+type+ "  "+ kind+ "  "+playercount+ "  "+upId+ "  "+other+ "  "+agentId
     // logger.info(str6);////cssj
     // let str64 = "shuiguo创建或者加入桌子 "+ typeof(playerId)+ "  "+ typeof(round)+ "  "+typeof(type)+ "  "+ typeof(kind)+ "  "+typeof(playercount)+ "  "+typeof(upId)+ "  "+typeof(other)+ "  "+typeof(agentId)
@@ -296,10 +300,11 @@ proto.creatOrjoinTableAsync = P.coroutine(function* (playerId, round,type, kind,
     }
     // console.warn("得到下一局的信息查找桌子不存在就创建",data);
     // var table = _.find(this.tables, { upId: data.upId });
+
     var table = _.find(this.tables, { upId: upId });
     // console.warn("创建或者加入桌子,用于玩家通过战绩分享进来之后: table.state  "+table.state);
-    if (!table) 
-    {
+    if (!table || table.isFull())
+   {
         // var agentId=data.agentId || "";
          var agentId=agentId || "";
         // console.warn("ts++下一局----------------新建");
@@ -370,7 +375,7 @@ proto.joinTableAsync = P.coroutine(function* (playerId, tableId) {
             if(usertable.id==tableId)
             {
                 // console.warn("到这里返回了");
-                return { code: C.FAILD, msg: C.TABLE_NOT_FOUND };
+                //return { code: C.FAILD, msg: C.TABLE_NOT_FOUND };
             }
         }
         else
@@ -381,6 +386,7 @@ proto.joinTableAsync = P.coroutine(function* (playerId, tableId) {
     // 查找桌子
     var table = _.find(this.tables, { id: tableId });
     if (!table) {
+        console.warn("remove 389")
         // console.warn("桌子没找到  到这里返回了 ",tableId);
         return { code: C.FAILD, msg: C.TABLE_NOT_FOUND };
     }
@@ -410,10 +416,13 @@ proto.joinTableAsync = P.coroutine(function* (playerId, tableId) {
     // }
     // 状态结束
     if (table.state == Table.STATE.END) {
-        return { code: C.FAILD, msg: C.TABLE_GAME_OVER };
+        console.warn("413 table:",table)
+        //return { code: C.FAILD, msg: C.TABLE_GAME_OVER };
     }
     // 是否坐满
+    console.warn("users:",table.users)
     if (table.isFull()) {
+        console.warn("remove 425")
         // console.warn("创建的时候发现桌子坐满了");
         return { code: C.FAILD, msg: C.TABLE_IS_FULL };
     }
@@ -421,7 +430,7 @@ proto.joinTableAsync = P.coroutine(function* (playerId, tableId) {
     var player = yield this.app.models.Player.findByIdAsync(playerId, 'account userId name sex headurl tableId gameId gameServerId connectorId diamond cost spreadId registerTime lastLoginTime');
     if (player.gameServerId) {
         // console.warn("-------进不来666",player.gameServerId);
-        return { code: C.FAILD, msg: C.TABLE_HAS_ALREADY };
+        //return { code: C.FAILD, msg: C.TABLE_HAS_ALREADY };
     }
     // 创建玩家
     var user = this._createUser(player, table);
@@ -434,6 +443,7 @@ proto.joinTableAsync = P.coroutine(function* (playerId, tableId) {
         player.rTableId = parseInt(tableId);//ts++重入时使用
         player.gameId = this.id;
         player.gameServerId = this.app.getServerId();
+        player.headurl = playerId+".png";
         yield player.saveAsync();
     }
     // console.warn(" shuiguo加入桌子....  table.state "+table.state);
@@ -463,6 +473,7 @@ proto.checkAgreeInfo = P.coroutine(function* (playerId,agentId,cUserId,cName,cHe
                 isInAgreeInfoList = true;
                 isAgreedPlayer = agreeInfo.infoList[i].agreeState == "1";
                 if(agreeInfo.infoList[i].agreeState == "2"){
+                    console.warn("remove 477")
                     return { code: C.FAILD, msg: "您已被推广员拒绝" };
                 }
                 break;
@@ -521,7 +532,7 @@ proto.createTableAsync = P.coroutine(function* (playerId, round, type,gameKind,p
         // console.warn("--33检查是否维护状态",whdata.stateWH,whdata.whTip);
         if(whdata.stateWH){
             /////维护状态中
-            return { code: C.FAILD, tip: whdata.whTip };
+            return { code: C.SERVER_WEIHU, msg: whdata.whTip };
         }
     }
     else{
@@ -629,7 +640,6 @@ proto.createTableAsync = P.coroutine(function* (playerId, round, type,gameKind,p
     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);
-    
 
     var gametable = new this.app.models.GameTable({
         _id: table.recordid,//记录
@@ -728,7 +738,7 @@ proto.readyGameAsync = P.coroutine(function* (playerId) {
     if (user.table.state != Table.STATE.PLAYING)
     {
         // 状态校验
-        return { code: C.FAILD, msg: C.TABLE_NOT_PLAYING };   
+        //return { code: C.FAILD, msg: C.TABLE_NOT_PLAYING };
     }
     // console.warn("sgj玩家准备 ",user.state,user.state2 , User.STATE.PLAYING);
     if (user.state2 != User.STATE.PLAYING || user.state2 != User.STATE.PLAYING) {
@@ -767,21 +777,22 @@ proto.startGameAsync = P.coroutine(function* (playerId,yazhus) {
         return { code: C.FAILD, msg: C.TABLE_NOT_USER };
     }
     if (user.chairId == -1) {
-        return { code: C.FAILD, msg: C.TABLE_NOT_USER };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_USER };
     }
     // 状态校验
     var table = user.table;
     if (table.state != Table.STATE.FREE && table.state != Table.STATE.FREE2) {
-        return { code: C.FAILD, msg: C.TABLE_NOT_FREE };
+        //return { code: C.FAILD, msg: 'table is not free' };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_FREE };
     }
     // 是否房主
     if (!user.isOwner()) {
-        return { code: C.FAILD, msg: C.TABLE_NOT_OWNER };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_OWNER };
     }
     // 是否准备
     if (!table.isReady2()) {
         // console.warn("走到这里了????  ");
-        return { code: C.FAILD, msg: C.TABLE_NOT_READY };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_READY };
     }
     if (user.diamond < _.sum(yazhus)) {
         return { code: C.FAILD, msg: C.GAME_DIAMOND_LOW };
@@ -807,11 +818,11 @@ proto.huafenAsync = P.coroutine(function* (playerId,type,value) {
     // 状态校验 桌子是否游戏中
     var table = user.table;
     if (table.state != Table.STATE.PLAYING) {
-        return { code: C.FAILD, msg: C.TABLE_NOT_PLAYING };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_PLAYING };
     }
     // 玩家是否房主
     if (!user.isOwner()) {
-        return { code: C.FAILD, msg: C.TABLE_NOT_OWNER };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_OWNER };
     }
     // 玩家是否游戏中
     if (!user.isPlaying()) {
@@ -831,7 +842,7 @@ proto.overTableAsync = P.coroutine(function* (playerId) {
     }
     // 是否房主
     if (!user.isOwner()) {
-        return { code: C.FAILD, msg: C.TABLE_NOT_OWNER };
+        //return { code: C.FAILD, msg: C.TABLE_NOT_OWNER };
     }
     return user.table.overTableAsync(user);////TL++参数userID userState
 });

+ 20 - 1
app/models/game.js

@@ -198,10 +198,26 @@ module.exports = function (app) {
 
 	mdbgoose.model('SGJTables', SGJTablesSchema);
 
+	var SGJUserTongjiSchema = new mdbgoose.Schema({
+        _id: { type: String },						// ts++标识
+        userId: { type: Number, default: 0 },
+        usdt: { type: Number, default: 0 },                    // 当前身上usdt
+        sgjwinlose: { type: Number, default: 0 },               //水果机盈亏
+        taskquanget: { type: Number, default: 0 },          //获得的奖券
+        taskquanlose: { type: Number, default: 0 },         //奖券消费
+        nowtaskquan:{ type: Number, default: 0 },           //当前奖券
+        todaytime: { type: Number, default: 0 },            //统计时间
+        taskGetU: { type: Number, default: 0 },             //任务获得的U
+        rechargeusdt: { type: Number, default: 0 },         //充值获得的U
+        withdrawusdt: { type: Number, default: 0 },         //提现的U
+        feeconfigusdt: { type: Number, default: 0 },        //提现每次3U的手续费
+        feeusdt: { type: Number, default: 0 },              //提现第三方扣的手续费
+    }, { collection: 'sgjusertongji' });
+
+    mdbgoose.model('SGJUserTongji', SGJUserTongjiSchema);
 	//水果机玩家信息
     var SGJUserSchema = new mdbgoose.Schema({
         _id: { type: String },                       // 标识
-        userId: { type: Number },                    // 号码
         cost: { type: Number, default: 0 },          // 消费
         win: { type: Number, default: 0 },           // 总赢得分
         zfbAcc: { type: String , default: ''},		 // 支付宝账号
@@ -374,6 +390,9 @@ module.exports = function (app) {
     var SGJConfigSchema = new mdbgoose.Schema({
         _id: { type: String, default: 'sgconfigs'},    // 主键
         phbyfjlrq: { type: Number, default: 0 },  //排行榜已发奖励的日期(0点时间戳)
+        istelegram: { type: Number, default: 1 },  //排行榜已发奖励的日期(0点时间戳)
+        withdrawfee: { type: Number, default: 3 },  //排行榜已发奖励的日期(0点时间戳)
+        withdrawlowlimit: { type: Number, default: 10 },  //排行榜已发奖励的日期(0点时间戳)
     }, { collection: 'sgjconfig' });
 
     mdbgoose.model('SGJConfig', SGJConfigSchema);

+ 62 - 0
app/models/hall.js

@@ -18,6 +18,68 @@ module.exports = function (app) {
 
     mdbgoose.model('PayRecord', PayRecordSchema);
 
+    var ConfigSchema = new mdbgoose.Schema({
+        _id: { type: String },                                      // 订单号
+        playerId: { type: String },                                 // 玩家ID
+        payplayerId: { type: String, default: '' },                 // 支付玩家ID
+        total_fee: { type: Number },							    // 总金额
+        payment: { type: Number, default: 0 },                      // 支付方式 0为微信 1为支付宝
+        paystate: { type: Number, default: 0 },                     // 支付状态 0未支付 1成功
+        paydiamond: { type: Number, default: 0 },                   // 充值钻石
+        payreward: { type: Number, default: 0 },                    // 充值奖励
+        time: { type: Number, default: Date.now }				    // 时间戳
+    }, { collection: 'config' });
+
+    mdbgoose.model('Config', ConfigSchema);
+
+    //chongzhi
+    var UsdtPayRecordSchema = new mdbgoose.Schema({
+        _id: { type: String },                                      // 订单号
+        chainCode: { type: String, default: ''  },                                 // 玩家ID
+        clientId: { type: String, default: '' },                 // 支付玩家ID
+        code:  {type: String, default: '' },							    // 总金额
+        amount: { type: Number, default: 0 },                      // 支付方式 0为微信 1为支付宝
+        hash: { type: String, default: '' },                     // 支付状态 0未支付 1成功
+        status : { type: Number, default: 0 },
+        fees: { type: Number, default: 0 },
+        feesU: { type: Number, default: 0 },
+        sourceAddress: { type: String, default: '' },                   // 充值钻石
+        targetAddress: { type: String, default: '' },                    // 充值奖励
+        risk: { type: Boolean, default: true },                    // 充值奖励
+        timestamp: { type: Number, default: 0 },                    // 充值奖励
+        sign: { type: String, default: '' },                    // 充值奖励
+        time: { type: Number, default: 0 },				    // 时间戳
+        beforeusdt : { type: Number, default: 0 },
+        afterusdt : { type: Number, default: 0 }
+    }, { collection: 'usdtPayRecord' });
+
+    mdbgoose.model('UsdtPayRecord', UsdtPayRecordSchema);
+
+
+    var UsdtWithdrawRecordSchema = new mdbgoose.Schema({
+        _id: { type: String },                                      // 订单号
+        chainCode: { type: String, default: ''  },                                 // 玩家ID
+        userId: { type: String, default: '' },                 // 支付玩家ID
+        amount: { type: Number, default: 0 },                      // 支付方式 0为微信 1为支付宝
+        tokenCode: { type: String, default: '' },                     // 支付状态 0未支付 1成功
+        refOrderId: { type: String, default: '' },                   // 充值钻石
+        msg: { type: String, default: '' },                   // 充值钻石
+        targetAddress: { type: String, default: '' },                    // 充值奖励
+        additionalAudit: { type: Boolean, default: true },                    // 充值奖励
+        submifee: { type: Number, default: 3 },
+        submitTime: { type: Number, default: 0 },
+        callBackTime: { type: Number, default: 0 },                    // 充值奖励
+        sign: { type: String, default: '' },                    // 充值奖励
+        time: { type: Number, default: 0 },				    // 时间戳
+        status: { type: Number, default: 100 },
+        beforeusdt : { type: Number, default: 0 },
+        afterusdt : { type: Number, default: 0 },
+        resultbeforeusdt : { type: Number, default: 0 },
+        resultafterusdt : { type: Number, default: 0 },
+    }, { collection: 'usdtWithdrawRecord' });
+
+    mdbgoose.model('UsdtWithdrawRecord', UsdtWithdrawRecordSchema);
+
     // 每个玩家每日充值上限,没有设置上限的玩家每日充值上限为quanjutop这条记录里的上限为准
     var PayLimitSchema = new mdbgoose.Schema({
         _id: { type: String },                                      // 标识

+ 24 - 3
app/models/player.js

@@ -15,8 +15,10 @@ module.exports = function (app) {
         headurl: { type: String, default: '' },                     // 头像
         myurl: { type: String, default: ''},  
         grade: { type: Number, default: 1},                         // 等级
-        diamond: { type: Number, default: 500 },                    // 钻石
+        diamond: { type: Number, default: 5 },                    // 钻石
         cost: { type: Number, default: 0 },                         // 消费
+        usdt: { type: Number, default: 0 },                         // ustd
+        address: { type: String, default: '' },
         score: { type: Number, default: 0 },                        // 积分
         nnLuck: { type: Number, default: 0 },                       // 运气(牛牛)
         tableId: { type: String, default: '' },                     // 桌子
@@ -39,7 +41,7 @@ module.exports = function (app) {
         tel: { type: String, default: '' },               // 手机号码
         pwd: { type: String, default: '' },               // 密码
         _class: { type: String, default: '' },
-
+        
         spreadId: { type: String, default: '' },          // 推荐人id
         spreadCount: { type: Number, default: 0 },        // 推荐 人数
         spreadRebate: { type: Number, default: 0 },       // 推荐 返利
@@ -110,6 +112,25 @@ module.exports = function (app) {
 
     mdbgoose.model('DiamondRecord', DiamondRecordSchema);
 
+    // taskquan记录
+    var TaskQuanRecordSchema = new mdbgoose.Schema({
+        _id: { type: String },                              // UUID
+        playerId: { type: String },                         // 玩家标识
+        /* dType:类型 1为注册2为充值3坐下4退分5礼物6活动7后台 8同步转出 9同步转入10签到11每日奖励12分享赠送,
+            13活动期间累充送钻石,14活动期间组局领钻,15活动期间回归用户每日领钻,
+            16活动期间回归用户每日充值奖励钻石,17绑定手机,18邀新人按消耗比例返钻,
+            19比赛4~10名送钻,20水果游戏,21水果任务,22水果排行榜,  只有11没有统计
+        */
+        dType: { type: Number },
+        dSource: { type: Number, default: 0 },              // 原钻石
+        dSwap: { type: Number, default: 0 },                // 变化钻石 游戏
+        dNow: { type: Number, default: 0 },                 // 新钻石
+        tableId: { type: String, default: '' },             // 房间标识
+        registerTime: { type: Number, default: Date.now }   // 记录时间
+    }, { collection: 'taskQuanRecord' });
+
+    mdbgoose.model('TaskQuanRecord', TaskQuanRecordSchema);
+
     // 代理 基础属性
     var AgenterSchema = new mdbgoose.Schema({
         _id: { type: String },                                      // 标识
@@ -225,7 +246,7 @@ module.exports = function (app) {
         allGameTimes2: { type: Number, default: 0 },        // 该日期该推广产生的总游戏2次数
         allGameTimes3: { type: Number, default: 0 },        // 该日期该推广产生的总游戏3次数
         allGameTimes4: { type: Number, default: 0 },        // 该日期该推广产生的总游戏4次数
-        allPlayerCount: { type: Number, default: 0 },       // 该日期该推广活跃玩家个数
+        allPlayeCount: { type: Number, default: 0 },       // 该日期该推广活跃玩家个数
 
         // dateGameTimes02: { type: Number, default: 0 },               // 冲刺游戏次数
         // dateGameTimes03: { type: Number, default: 0 },               // 冲刺游戏次数

+ 219 - 3
app/servers/connector/handler/entryHandler.js

@@ -1,5 +1,15 @@
 'use strict';
-
+var execFile = require('child_process').execFile;
+var phantomjs = require('phantomjs-prebuilt');
+var request = require('request');
+var svg2png = require('svg2png');
+var md5 = require("md5")
+var path = require('path');
+console.log('svg2png 加载成功', svg2png.version);
+var https = require('https');
+var Jimp = require('jimp');
+var fs = require('fs');
+var uuid = require('node-uuid');
 var util = require('util');
 var quick = require('quick-pomelo');
 var P = quick.Promise;
@@ -7,6 +17,10 @@ var logger = quick.logger.getLogger('connector', __filename);
 var C = require('../../../../share/constant');
 // var compateDate = require('../../../../share/compateDate');
 
+var phantomjsCmd = phantomjs.path;
+console.log('PhantomJS 路径:', phantomjsCmd);
+
+
 
 var Handler = function (app) {
     this.app = app;
@@ -31,14 +45,182 @@ proto.getRpc = function (gameId) {
     }
 };
 
+proto.convertSvgToPng1 = P.coroutine(function* (svgPath, pngPath,cb) {
+    // 拼接 PhantomJS 要执行的参数:转换脚本、SVG 路径、PNG 路径、缩放比例
+    var args = [
+        path.join(__dirname, 'converter.js'), // 转换脚本路径
+        svgPath,
+        pngPath,
+        scale
+    ];
+    // 执行 PhantomJS 命令(核心!Node 调用子进程执行 PhantomJS)
+    execFile(phantomjsCmd, args, function(err, stdout, stderr) {
+        if (err) {
+            cb(new Error('PhantomJS 执行失败:' + err.message));
+        } else if (stderr) {
+            cb(new Error('PhantomJS 错误输出:' + stderr));
+        } else if (stdout) {
+            cb(new Error('PhantomJS 标准输出:' + stdout));
+        } else {
+            cb(null); // 转换成功
+        }
+    });
+});
+
+proto.convertSvgToPng = P.coroutine(function* (svgPath, pngPath, scale, cb) {
+    // 拼接 PhantomJS 要执行的参数:转换脚本、SVG 路径、PNG 路径、缩放比例
+    var args = [
+        "D:\\hnhzServer\\converter.js", //path.join(__dirname, 'converter.js'), // 转换脚本路径
+      "\./1.svg",
+      pngPath,
+      scale
+    ];
+    console.warn(args)
+    console.warn("phantomjsCmd:",phantomjsCmd)
+    var targetCwd = "D:\\web\\root80\\image"
+    // 执行 PhantomJS 命令(核心!Node 调用子进程执行 PhantomJS)
+    execFile(phantomjsCmd, args,   {
+        cwd: targetCwd, // 关键!相当于执行 cd /d D:\hnhzServer\svg_temp
+        timeout: 10000, // 10秒超时,防止卡死
+        encoding: 'utf8'
+      }, function(err, stdout, stderr) {
+        console.warn("err:",err," stdout:",stdout," stderr:",stderr)
+      if (err) {
+        cb(new Error('PhantomJS 执行失败:' + err.message));
+      } else if (stderr) {
+        cb(new Error('PhantomJS 错误输出:' + stderr));
+      } else if (stdout) {
+        //cb(new Error('PhantomJS 标准输出:' + stdout));
+        cb(null);
+      } else {
+        cb(null); // 转换成功
+      }
+    });
+  });
+proto.downloadSvg = P.coroutine(function* (svgUrl, savePath, cb) {
+
+    var req = https.get(svgUrl, function(res) {
+      if (res.statusCode !== 200) {
+        return cb(new Error('下载 SVG 失败,状态码:' + res.statusCode));
+      }
+      var stream = fs.createWriteStream(savePath);
+      res.pipe(stream);
+      stream.on('finish', function() {
+        stream.close(function() {
+          cb(null); // 下载完成,无错误
+        });
+      });
+      stream.on('error', function(err) {
+        fs.unlink(savePath, function(){}); // 删除不完整文件
+        cb(err);
+      });
+    });
+    req.on('error', cb);
+    req.setTimeout(10000, function() {
+      req.destroy();
+      cb(new Error('下载 SVG 超时'));
+    });
+  });
+var svgUrl = 'https://bargame.ala456.com/gameRes/1.svg'; // 目标 SVG 地址
+var localSvgPath = 'D:\\web\\root80\\image\\1.svg'; // 本地 SVG 路径
+var destPngPath = path.join("D:\\web\\root80\\image\\"); // 目标 PNG 路径
+
+
+
+
+var requestGet = P.promisify(request.get, {multiArgs: true});
+proto.fetchSvg = P.coroutine(function* (url, cb) {
+    const client = url.startsWith('https') ? require('https') : require('http');
+    client.get(url, (res) => {
+        if (res.statusCode !== 200) {
+            cb(new Error('请求 SVG 失败,状态码: ' + res.statusCode));
+            res.resume();
+            return;
+        }
+        const chunks = [];
+        res.on('data', (chunk) => chunks.push(chunk));
+        res.on('end', () => cb(null, Buffer.concat(chunks)));
+    }).on('error', (e) => cb(e));
+});
+
+
+
+proto.convertUrlToPng = P.coroutine(function* (url, outputPath) {
+    try {
+        console.warn("url:",url)
+        // 1. 使用 request 获取数据,必须 encoding: null
+        var result = yield requestGet({
+            url: url,
+            encoding: null,
+            timeout: 10000,
+            headers: {
+                'User-Agent': 'Mozilla/5.0'
+            }
+        });
+        // console.warn("湖南红中  游戏服务器启动",result);
+
+        //console.log("result[1]:",result[1])
+        // 重点:multiArgs: true 会返回 [response, body]
+        // result[0] 是响应头,result[1] 才是真正的图片 Buffer
+        var response = result[0];
+        var body = result[1];
+        const width = 800;
+        const height = 600;
+        if (!response || response.statusCode !== 200) {
+            throw new Error('Download failed, status: ' + (response ? response.statusCode : 'unknown'));
+        }
+
+        if (!body || body.length === 0) {
+            throw new Error('Received empty buffer');
+        }
+        console.warn("69")
+        // 2. 使用 Jimp 读取 Buffer
+        // 如果依然报 MIME 错误,可以尝试强制指定格式 (仅限确定是 jpg/png 的情况)
+        svg2png(body, { width, height }, (err, buffer) => {
+            console.warn("svg2png:",74)
+            if (err) {
+                console.warn('SVG 转 PNG 失败:', err);
+                return;
+            }
+            console.warn("svg2png:",78)
+            fs.writeFile('D:\\web\\root80\\image\\output.png', buffer, (err) => {
+                if (err) console.warn('写出 PNG 失败:', err);
+                else console.warn('输出 output.png 完成');
+            });
+        });
+        console.warn("84")
+    } catch (error) {
+        // 增加更详细的报错日志,方便排查
+        console.error('图片转换失败详情:', error.message);
+        if (error.stack) console.error(error.stack);
+    }
+});
+
 // 登陆
 proto.login = P.coroutine(function* (msg, session, next) {
+    	//{"hash":"eaf94f7eff192ff4eb49338bc2c5dd286034cf40b73df81dd4990d8ff3dea0bb","refOrderId":"ORDER20240228001","amount":0.01,"status":0,"message":"\u6210\u529F","fees":0,"feesU":0.123322,"timestamp":1772271039176,"sign":"968121dcd20682ab9dc296296b6aca46"}
+
+    var self = this;
     if (session.uid) {
         return next(null, { code: C.ERROR, msg: C.PLAYER_HAS_LOGGED });
     }
     if (!msg._id) {
-        return next(null, { code: C.ERROR, msg: C.PLAYER_MISSING_ID });
+        return next(null, { code: C.ERROR, msg: C.PLAYER_HAS_LOGGED });
+    }
+    let sgjconfig = yield this.app.models.SGJConfig.findByIdAsync('sgconfigs');
+    console.warn("sgjconfig:",sgjconfig)
+    var istelegram = 0
+    if (sgjconfig) {
+        istelegram = sgjconfig.istelegram;  //排行榜已发奖励的日期(0点时间戳)
+        // console.warn("获取水果机排行榜已发奖励的日期   ",this.phbyfjlrq);
     }
+    if (istelegram) {
+        console.warn("msg:",msg)
+        if (!msg.istelegram || msg.istelegram !== 1) {
+            return next(null, { code: C.SERVER_WEIHU, msg: C.PLAYER_HAS_LOGGED });
+        }
+    }
+
     // console.warn("登陆+++++%s",msg._id,session.uid);//ts++
     // console.warn("登陆+++++  "+ JSON.stringify(msg));//ts++
     var playerId = msg._id;
@@ -126,6 +308,23 @@ proto.login = P.coroutine(function* (msg, session, next) {
             }
         }
     }
+    self.downloadSvg(svgUrl, localSvgPath, function(err) {
+        console.log("96")
+        if (err) {
+            console.error('下载失败:', err.message);
+            return;
+        }
+        console.log('SVG 已下载到:', localSvgPath);
+
+        // 调用转换函数
+        self.convertSvgToPng(localSvgPath, destPngPath+playerId+".png", 1.0, function(err) {
+            if (err) {
+                console.error('转换 PNG 失败:', err.message);
+            } else {
+                console.log('转换成功!PNG 路径:', destPngPath);
+            }
+        });
+    });
     console.warn("登陆+++++333%s",msg._id);//ts++
     let playerIsEnable = 0;
     if(typeof(player.enable) == "undefined"){
@@ -447,6 +646,20 @@ proto.login = P.coroutine(function* (msg, session, next) {
     //在玩家登陆的时候给玩家发邮件,比如发送活动的奖励邮件等等
     yield this.app.controllers.player.sendMailOnLoginAsync(playerId, player.userId);
     console.warn("登陆+++++888==================================下面是登陆返回了",playerId,player.userId);
+    let taskQuan = 0
+    let sgjUser = yield this.app.models.SGJUser.findByIdAsync(playerId);
+    if (sgjUser) {
+        taskQuan = sgjUser.taskQuan.toFixed(2)
+    }
+    yield this.app.controllers.player.sendMailOnLoginAsync(playerId, player.userId);
+    let whdata = yield this.app.models.WHstate.findByIdReadOnlyAsync('wh', 'whTip stateWH rebaterate yxndlbTime yxndlbTip');
+    var whtip = whdata.yxndlbTip
+    var isweihu = 0
+    if (whdata.stateWH != 0) {
+        isweihu = 1
+        whtip = whdata.whTip
+    }
+    console.warn("whtip:",whtip)
     return next(null, { code: C.OK, data: {
             isNew: isNew,
             player: { 
@@ -455,6 +668,7 @@ proto.login = P.coroutine(function* (msg, session, next) {
                 userId: String(player.userId), 
                 name: player.name, 
                 headurl:player.headurl,
+                taskQuan:taskQuan,
                 sex: player.sex,
                 diamond: String(player.diamond),
                 synPlayer:player.synPlayer,
@@ -473,7 +687,9 @@ proto.login = P.coroutine(function* (msg, session, next) {
                 tel: tel,
                 pwd: pwd,
                 smName:player.smName, 
-                smCardId: player.smCardId
+                smCardId: player.smCardId,
+                isweihu: isweihu,
+                yxndlbTip:whtip,
             }
         }
     });

+ 7 - 4
app/servers/game/handler/shuiguoHandler.js

@@ -35,7 +35,7 @@ proto.joinTable = P.coroutine(function* (msg, session, next) {
     let str3 = "sghander  加入桌子.......uid: " + session.uid 
     logger.warn(str3);////cssj
     if (!session.uid) {
-        return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN });
+        return next(null, { code: C.ERROR, msg: C.PLAYER_HAS_LOGGED });
     }
     if (!msg.tableId) {
         return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR });
@@ -48,8 +48,9 @@ proto.creatOrjoinTable = P.coroutine(function* (msg, session, next) {
     let str1 = "sghander  加入桌子.......uid: "
     logger.warn(str1);////cssj
     if (!session.uid) {
-        return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN });
+        return next(null, { code: C.ERROR, msg: C.PLAYER_HAS_LOGGED });
     }
+    msg.upId = 0
     if (!msg.upId) {
         return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR });
     }
@@ -69,8 +70,9 @@ proto.creatOrjoinTable = P.coroutine(function* (msg, session, next) {
 
 // 创建桌子
 proto.createTable = P.coroutine(function* (msg, session, next) {
+    console.warn("73")
     if (!session.uid) {
-        return next(null, { code: C.ERROR, msg: C.PLAYER_NOT_LOGIN });
+        return next(null, { code: C.ERROR, msg: C.PLAYER_HAS_LOGGED });
     }
     var round = 100;
     var type = 0;
@@ -144,7 +146,8 @@ proto.huafen = P.coroutine(function* (msg, session, next) {
     if(type != 1 && type != 2){
         return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR });/////既不是押大也不是押小
     }
-    var value = parseInt(msg.value) || 0;////押的分数
+
+    var value = parseFloat(msg.value) || 0;////押的分数
     if(value <= 0){
         return next(null, { code: C.FAILD, msg: C.GAME_PARAM_ERROR });/////没有押的分数
     }

+ 176 - 107
app/servers/hall/handler/hallHandler.js

@@ -230,7 +230,7 @@ proto.opZSTB = P.coroutine(function* (msg, session, next) {
             dSwap: -1*opDiamondCount,
             dNow: 0,
             tableId: session.uid
-        });
+        });c
         yield diamondrecord.saveAsync();
 
         player.diamond += opDiamondCount;
@@ -268,7 +268,7 @@ proto.modifyInfo = P.coroutine(function* (msg, session, next) {
     var player = yield this.app.models.Player.findByIdAsync(session.uid, 'name headurl');
     if (player) {
         if (msg.name && msg.name != player.name) player.name = msg.name;
-        if (msg.headurl && msg.headurl != player.headurl) player.headurl = msg.headurl;
+        //if (msg.headurl && msg.headurl != player.headurl) player.headurl = msg.headurl;
         if (player.isModified()) yield player.saveAsync();
     }
     return next(null, { code: C.OK });
@@ -2436,10 +2436,27 @@ proto.getPaiHangInfo = P.coroutine(function* (msg, session, next) {
         }
         pmInfos[i] = item;
     }
-    var zjph = yield this.app.models.SGJPaiHang.findByIdAsync(uid, 'name headurl userId cost1 quan1 time1');
+    //var zjph = yield this.app.models.SGJPaiHang.findByIdAsync(uid, 'name headurl userId cost1 quan1 time1');
+    let player = yield this.app.models.Player.findByIdAsync(uid, '_id userId headurl name cost');
+    opts.userId = player.userId
+    var zjph = yield this.app.models.SGJPaiHang.findMongoAsync(opts);
+    var d = null
+    if (zjph.length > 0) {
+        d = zjph[0]
+        console.warn("getpaihang self:",d)
+    }
+    var quan = 0
+    if (zjph.length > 0) {
+        quan = zjph[0].quan1
+    }
     let data = {
         pmInfos: pmInfos,
-        zjph: zjph
+        zjph: {
+            userId: player.userId,
+            headurl:player.headurl,
+            name:player.name,
+            quan1:quan
+        },
     }
     console.warn("得到排行榜信息(得到小游戏的排行榜信息)  ",JSON.stringify(data));
     return next(null, { code: C.OK, data : data});
@@ -2533,115 +2550,148 @@ proto.mailInfo = P.coroutine(function* (msg, session, next) {
     console.warn("邮件信息   "+session.uid);
     let data = {};
     data.nowTime = Date.now();
-    var mails = yield this.app.models.Mails.findByIdReadOnlyAsync(session.uid, 'userId mailInfos');
+
+    var mails = yield this.app.models.Mails.findByIdReadOnlyAsync(session.uid);
+    console.warn("mails:",mails)
+
+    /*var ms = new this.app.models.Mails({
+        _id: "dd2c0159-f2a8-8fd8-0ffb-ed5da82e803e22224444"
+    });
+    ms.mailInfos = [{
+        "_id": "0qq3a07e-d3b6-099d-77ec-0ec09132ec1122224444",
+        "sendTime": 1675652998058,
+        "form": "hn3admingl",
+        "read": 0,
+        "receive": 0,
+        "rewardC": 20,
+        "rewardT": 1,
+        "reward": 1,
+        "descT": 3,
+        "tittleT": 3,
+        "index": 0
+    }, {
+        "_id": "",
+        "sendTime": 1675666987672,
+        "form": "hn3admingl",
+        "read": 0,
+        "receive": 0,
+        "rewardC": 0,
+        "rewardT": 0,
+        "reward": 0,
+        "descT": 1,
+        "tittleT": 1,
+        "index": 1
+    }]
+    yield ms.saveAsync()*/
     if (mails) {
         data.userId = mails.userId;
-        data.mailInfos = [];
         if(mails.mailInfos){
 
             ////// 下面为增加测试数据
-            // mails.mailInfos = [];
-            // mails.mailInfos = [{
-            //     "_id": "63e06f865fae5350809be5e1",
-            //     "sendTime": 1675652998058,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 10,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 0
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675666987672,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 20,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 1
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675665765806,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 30,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 2
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675666283405,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 40,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 3
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675666353074,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 50,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 4
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675666358314,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 60,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 5
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675666363857,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 70,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 6
-            // }, {
-            //     "_id": "",
-            //     "sendTime": 1675666987672,
-            //     "form": "hn3admingl",
-            //     "read": 0,
-            //     "receive": 0,
-            //     "rewardC": 80,
-            //     "rewardT": 1,
-            //     "reward": 1,
-            //     "descT": 3,
-            //     "tittleT": 3,
-            //     "index": 7
-            // }]
-            // yield mails.saveAsync();
+            /*mails._id = "2e59676c-526f-ffc7-4c8a-b9cb6908e79c22224444"
+            mails.mailInfos = [];
+            mails.mailInfos = [{
+                "_id": "0wa3a07e-d3b6-099d-77ec-0ec09132ec1122224444",
+                "sendTime": 1675652998058,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 0,
+                "rewardT": 0,
+                "reward": 0,
+                "descT": 1,
+                "tittleT": 1,
+                "index": 0
+            }, {
+                "_id": "",
+                "sendTime": 1675666987672,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 20,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 1
+            }, {
+                "_id": "",
+                "sendTime": 1675665765806,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 30,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 2
+            }, {
+                "_id": "",
+                "sendTime": 1675666283405,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 40,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 3
+            }, {
+                "_id": "",
+                "sendTime": 1675666353074,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 50,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 4
+            }, {
+                "_id": "",
+                "sendTime": 1675666358314,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 60,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 5
+            }, {
+                "_id": "",
+                "sendTime": 1675666363857,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 70,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 6
+            }, {
+                "_id": "",
+                "sendTime": 1675666987672,
+                "form": "hn3admingl",
+                "read": 0,
+                "receive": 0,
+                "rewardC": 80,
+                "rewardT": 1,
+                "reward": 1,
+                "descT": 3,
+                "tittleT": 3,
+                "index": 7
+            }]
+            yield mails.saveAsync();*/
             ////// 增加测试数据结束
 
-            // console.warn("该玩家的邮件个数   "+mails.mailInfos.length);
+             console.warn("该玩家的邮件个数   "+mails.mailInfos.length);
+            data.mailInfos = []
             for (let i = 0; i < mails.mailInfos.length; ++i) {
                 if(i < 60 && mails.mailInfos[i]){
                     data.mailInfos[data.mailInfos.length] = mails.mailInfos[i];
@@ -2792,6 +2842,7 @@ proto.mailInfo = P.coroutine(function* (msg, session, next) {
         //         data.confMail = confHall.mail || {};
         //     }
         // }
+        //console.warn("该玩家的邮件个数   "+mails.mailInfos.length);
     }
     
     return next(null, { code: C.OK, data: data });
@@ -2813,7 +2864,7 @@ proto.dealMail = P.coroutine(function* (msg, session, next) {
 
     let data = {};
     data.nowTime = Date.now();
-    var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond');
+    var player = yield this.app.models.Player.findByIdAsync(session.uid, 'diamond userId');
     var mails = yield this.app.models.Mails.findByIdReadOnlyAsync(session.uid, '_id userId mailInfos');
     if (mails && player) {
         let dSource=player.diamond;
@@ -2926,6 +2977,24 @@ proto.dealMail = P.coroutine(function* (msg, session, next) {
                         tableId: klqList[i].form,
                     });
                     yield diamondrecord.saveAsync();
+
+                    var SGJUserTongjis = yield this.app.models.SGJUserTongji.findMongoAsync({todaytime:this.getTodaySJC()})
+                    var SGJUserTongji = null
+                    if (SGJUserTongjis.length == 0) {
+                        SGJUserTongji = this.app.models.SGJUserTongji({
+                            _id: uuid.v1(),
+                            //userId: player.userId,
+                            //usdt: klqList[i].dNow,
+                            taskGetU: klqList[i].rewardC,//下注
+                            todaytime: this.logic.getTodaySJC()
+                        });
+                        yield SGJUserTongji.saveAsync()
+                    }else {
+                        SGJUserTongji = SGJUserTongjis[0]
+                        //SGJUserTongji.usdt = klqList[i].dNow
+                        SGJUserTongji.taskGetU = (Number(SGJUserTongji.taskGetU) +Number(klqList[i].rewardC)).toFixed(2)//下注
+                        yield SGJUserTongji.saveAsync()
+                    }
                 }
             }
             if(addDimand > 0){

+ 10 - 8
app/shuiguo/logic.js

@@ -17,8 +17,8 @@ var Logic = function () {
     this.dairuMax = 100000;//每天可带入最大额度(钻石)
     this.prizePool = 10000000;
     this.cellList = [10];//底分倍率列表
-    this.nowCell = 10;//当前底分倍率
-    this.toTaskQuanReate = 0.1;//押注额转换为任务券的比例(10钻=1分给1个任务券)把之前的0.01改为0.1是为了不让任务券出现小数
+    this.nowCell = 0.1;//当前底分倍率
+    this.toTaskQuanReate = 1;//押注额转换为任务券的比例(10钻=1分给1个任务券)把之前的0.01改为0.1是为了不让任务券出现小数
     this.yzjjckcReate = 0;//押注总额进入奖池扣除的比例(如总押注10钻=1分时全输了对应挡位奖池数量增加9.5个钻)
     this.fqjjckcReate = 0;//有任务券发放时进入奖池扣除的比例
     this.jcdwzhwzs = 100;//奖池单位:1/100钻(即1钻=100奖池单位)
@@ -507,7 +507,7 @@ var Logic = function () {
         {
             index:0,//该条任务编号
             isOpen:1,//该条任务是否开放0:不开放,1:开放
-            des:"0消耗1千要求1个大苹果奖100钻10次",//该条任务说明
+            des:"0消耗1千要求1个大苹果奖0.5钻10次",//该条任务说明
             sTime: 1676044800000,//该条任务开始时间
             eTime: 1785513600000,//该条任务结束时间  
             times: 10,//该条任务每日可领取+已完成总次数上限
@@ -515,12 +515,12 @@ var Logic = function () {
             reachs:[0],//达成该条任务所需的条件列表[1(1号牌),2(出现2次)]
             reachC:[1],//达成该条任务所需的个数列表[reachs[0]出现次数,reachs[1]出现次数]
             rewardt:1,//该条任务达成之后的奖品类型 0:未定义 1:钻石,2:RMB(分)
-            rewards:100//该条任务达成之后的奖品数量
+            rewards:0.5//该条任务达成之后的奖品数量
         },
         {
             index:1,
             isOpen:1,
-            des:"1消耗1万要求1个大橙子奖1050钻10次",
+            des:"1消耗1万要求1个大橙子奖5钻10次",
             sTime: 1676044800000,     
             eTime: 1785513600000, 
             times: 10,      
@@ -528,12 +528,12 @@ var Logic = function () {
             reachs:[1],//达成该条任务所需的条件列表[1(1号牌),2(出现2次)]
             reachC:[1],//达成该条任务所需的个数列表[reachs[0]出现次数,reachs[1]出现次数]
             rewardt:1,//该条任务达成之后的奖品类型 0:未定义 1:钻石,2:RMB(分)
-            rewards:1050
+            rewards:5
         },
         {
             index:2,
             isOpen:1,
-            des:"2消耗5万要求1个大芒果奖5500钻5次",
+            des:"2消耗5万要求1个大芒果奖25钻5次",
             sTime: 1676044800000,     
             eTime: 1785513600000, 
             times: 5,      
@@ -541,7 +541,7 @@ var Logic = function () {
             reachs:[2],//达成该条任务所需的条件列表[1(1号牌),2(出现2次)]
             reachC:[1],//达成该条任务所需的个数列表[reachs[0]出现次数,reachs[1]出现次数]
             rewardt:1,//该条任务达成之后的奖品类型 0:未定义 1:钻石,2:RMB(分)
-            rewards:5500
+            rewards:25
         },
         {
             index:3,
@@ -858,6 +858,7 @@ proto.getSendCards = function (yazhus,adjust) {
     // else if(sjs == 2) cards[0] = 21;
     // cards[0] = 9;//this.over-1;//设置发牌,正式时记得删除
     let addSendCounts = 0;//需要额外发牌的总张数
+
     if(cards[0] == 9 || cards[0] == 21){
         //此刻需要发多张牌
         if(tspx == 0) {
@@ -871,6 +872,7 @@ proto.getSendCards = function (yazhus,adjust) {
         else if(tspx == 1 || tspx == 2) addSendCounts = 3;
         else if(tspx == 3) addSendCounts = 4;
     }
+
     if(tspx == 0){
         for (var i = 0; i < addSendCounts; i++) {
             let zfdp = this.getASendCard(false);//幸运之后增发的牌不能是小三元这种特殊牌

+ 271 - 60
app/shuiguo/table.js

@@ -165,6 +165,7 @@ var Table = function (cPlayerId,cUserId,cName,cHead,game, id, cell, round, type,
     this.state = STATE.FREE;
     //断线 结束定时器
     this.endTimer = null;
+    this.calculateTimer = null
     //结束时的继线用户  为了在销毁房间的时候让这些用户退出房间
     this.leaveUsers = [];
     //////以下全为TL++
@@ -203,12 +204,14 @@ proto.isFull = function (playerId) {
     // return (this.lookers.length >= 1);
     // console.warn("是否站满   "+this.users.length);
     // console.warn("是否站满   "+JSON.stringify(this.users));
+    return false;
+
     if(this.users.length > 0){
         // console.warn("是否站满222   ",this.users[0].id , playerId);
         if(this.users[0] && this.users[0].id == playerId) return false;
         return true;
     }
-    return false;
+
 };
 
 // 是否准备
@@ -323,6 +326,7 @@ proto.getTableInfo = function () {
                 diamond:user.diamond, state: user.state2, taskQuan: user.taskQuan, 
                 drCount: user.drCount,chairId: user.chairId
             };
+            console.warn("uinfo:",uinfo)
             tableInfo.users.push(uinfo);
         }
     }
@@ -428,6 +432,58 @@ proto.creatPHBItem = cor(function* (user) {
 //     }
 // })
 
+proto.getYesterdaySJC = function (){
+    var today = new Date();
+    today.setHours(0);
+    today.setMinutes(0);
+    today.setSeconds(0);
+    today.setMilliseconds(0);
+    let jrsjc = today.getTime()- 24 * 60 * 60 * 1000;
+    console.warn("getYesterdaySJC:",jrsjc)
+    // console.warn("111得到今日0点的时间戳   ",jrsjc, typeof jrsjc);
+    return jrsjc;
+};
+
+proto.getUSDTSum = cor(function* () {
+    var today = new Date();
+    today.setHours(0);
+    today.setMinutes(0);
+    today.setSeconds(0);
+    today.setMilliseconds(0);
+    let jrsjc = today.getTime()- 24 * 60 * 60 * 1000;
+
+    jrsjc = today.getTime()
+    console.warn("jrsjc:",jrsjc)
+    var SGJUserTongjis = yield this.app.models.SGJUserTongji.findMongoAsync({todaytime:jrsjc})
+    var limit = 1000
+    var page = 0
+    var skip = 0
+    var all = 0
+    if (SGJUserTongjis.length >= 1) {
+        for(;;) {
+            skip = page * limit
+            let players = yield this.app.models.Player.findMongoAsync({}, {}, {
+                skip: skip,
+                limit: Number(limit)
+            });
+            console.warn("players:",players.length)
+            if (players.length > 0) {
+                for (let player of players) {
+                    console.warn("player.diamond:",player.diamond)
+                    all += player.diamond
+                    console.warn("all:",all)
+                }
+            }else {
+                break
+            }
+            page += 1
+
+        }
+        SGJUserTongjis[0].usdt = all.toFixed(2)
+        yield SGJUserTongjis[0].saveAsync()
+    }
+});
+
 // 加入桌子
 proto.joinAsync = cor(function* (user) {
     // 加入桌子之前
@@ -438,13 +494,20 @@ proto.joinAsync = cor(function* (user) {
     let taskQuan = 0;//用户的任务券
     let drCount = 0;
     var sgjUser = yield this.app.models.SGJUser.findByIdAsync(user.id, 'taskQuan yazhuList jrkbcdrs drCount drTime lastJoinTime');
+    if (!this.calculateTimer) {
+        this.calculateTimer = this.app.timer.setTimeout(() => this.getUSDTSum(), 100000);
+    }
     if (sgjUser) {
+        sgjUser.drCount = sgjUser.drCount.toFixed(2)
+        sgjUser.taskQuan = sgjUser.taskQuan.toFixed(2)
         taskQuan = sgjUser.taskQuan;
         // console.warn("加入桌子  taskQuan "+taskQuan+"  sgjUser.taskQuan "+sgjUser.taskQuan+"   "+ typeof(taskQuan)+"   "+ typeof(sgjUser.taskQuan) );
         this.yazhus = sgjUser.yazhuList//玩家本场押注情况
         let jrStart = this.logic.getTodaySJC();////今日0时的时间戳
+
         if(sgjUser.drTime == jrStart) {
-            drCount = sgjUser.drCount;
+            drCount = sgjUser.drCount.toFixed(2);
+            console.warn("drCount:",drCount)
             let ssbkdrdd = user.diamond - drCount;//身上比可带入多的钻石
             // console.warn("加入桌子非今天首次000===  drCount "+drCount+" ssbkdrdd "+ssbkdrdd+" sgjUser.jrkbcdrs "+sgjUser.jrkbcdrs+ "  user.diamond  "+user.diamond);
             if(ssbkdrdd > this.logic.dairuMax - sgjUser.drCount && this.logic.dairuMax - sgjUser.drCount > 0){
@@ -452,13 +515,15 @@ proto.joinAsync = cor(function* (user) {
             }
             if(ssbkdrdd < 0){
                 //适合比如身上有14w钻石,带入10w之后,被系统扣钻了8w,那这时候数据表的drCount字段就要改了
-                drCount = Math.floor(user.diamond / this.logic.nowCell)*this.logic.nowCell;//1分=10钻石,每日上限1w分)
+                console.warn("457:",sgjUser.drCount)
+                drCount = user.diamond.toFixed(2);//1分=10钻石,每日上限1w分)
+                console.warn("457:",sgjUser.drCount)
                 // console.warn("加入桌子非今天首次1===  drCount "+drCount+" ssbkdrdd "+ssbkdrdd+" sgjUser.jrkbcdrs "+sgjUser.jrkbcdrs);
             }
             // console.warn("加入桌子非今天首次111===  drCount "+drCount+" ssbkdrdd "+ssbkdrdd+" sgjUser.jrkbcdrs "+sgjUser.jrkbcdrs);
             if(ssbkdrdd >= this.logic.nowCell && sgjUser.jrkbcdrs > 0){
-                let bckddrd = Math.floor(ssbkdrdd / this.logic.nowCell)*this.logic.nowCell;//本次可多带入的
-                drCount += bckddrd;
+                let bckddrd = ssbkdrdd.toFixed(2);//本次可多带入的
+                drCount = Number(drCount)+ Number(bckddrd);
                 // sgjUser.jrkbcdrs -= bckddrd;
                 // yield sgjUser.saveAsync();
                 // console.warn("加入桌子非今天首次222===  drCount "+drCount+" ssbkdrdd "+ssbkdrdd+" sgjUser.jrkbcdrs "+sgjUser.jrkbcdrs);
@@ -466,17 +531,20 @@ proto.joinAsync = cor(function* (user) {
         }
         else {
             if(user.diamond >= this.logic.dairuMax){
-                drCount = this.logic.dairuMax;//(钻石)
+                drCount = this.logic.dairuMax.toFixed(2);//(钻石)
             }
             else{
-                drCount = Math.floor(user.diamond / this.logic.nowCell)*this.logic.nowCell;//1分=10钻石,每日上限1w分)
+                drCount = user.diamond.toFixed(2);//1分=10钻石,每日上限1w分)
                 let ssbkdrdd = user.diamond - drCount;//身上比可带入多的钻石
+                console.warn("ssbkdrdd:",ssbkdrdd)
                 if(ssbkdrdd > this.logic.dairuMax - sgjUser.drCount){
                     ssbkdrdd = this.logic.dairuMax - sgjUser.drCount
                 }
                 // console.warn("加入桌子首次111===  drCount "+drCount+" ssbkdrdd "+ssbkdrdd+" sgjUser.jrkbcdrs "+sgjUser.jrkbcdrs);
                 if(ssbkdrdd >= this.logic.nowCell && sgjUser.jrkbcdrs > 0){
-                    let bckddrd = Math.floor(ssbkdrdd / this.logic.nowCell)*this.logic.nowCell;//本次可多带入的
+                    //let bckddrd = Math.floor(Math.floor(ssbkdrdd / this.logic.nowCell)*this.logic.nowCell);//本次可多带入的
+                    let bckddrd = ssbkdrdd.toFixed(2)
+                    console.warn("bckddrd:",bckddrd)
                     drCount += bckddrd;
                     // sgjUser.jrkbcdrs -= bckddrd;
                     // yield sgjUser.saveAsync();
@@ -487,13 +555,17 @@ proto.joinAsync = cor(function* (user) {
         
     }
     else{
+        console.warn("500")
         if(user.diamond >= this.logic.dairuMax){
-            drCount = this.logic.dairuMax;//(钻石)
+            drCount = this.logic.dairuMax.toFixed(2);//(钻石)
         }
         else{
-            drCount = Math.floor(user.diamond / this.logic.nowCell)*this.logic.nowCell;//1分=10钻石,每日上限1w分)
+            console.warn("user.diamond;",user.diamond)
+            drCount = user.diamond.toFixed(2);//1分=10钻石,每日上限1w分)
+            console.warn("drCount",drCount)
         }
     }
+    user.diamond = user.diamond.toFixed(2)
     let str3 = "加入水果 "+ this.nowDiamond2 +"  ud  "+user.diamond + " drCount " + drCount;      
     if(this.users.length == 0) {
         this.users[0] = user;
@@ -501,7 +573,7 @@ proto.joinAsync = cor(function* (user) {
         user.chairId = 0;
         user.state = User.STATE.READY;
         user.state2 = User.STATE.READY;
-        user.taskQuan = taskQuan;
+        user.taskQuan = taskQuan.toFixed(2);
         user.drCount = drCount;
         // console.warn("加入桌子  user.taskQuan222 ",user.taskQuan,user.diamond);
         this.nowDiamond = user.diamond;//玩家目前游戏内的钻石(带入的)
@@ -510,6 +582,7 @@ proto.joinAsync = cor(function* (user) {
     }
     logger.warn(str3);////cssj
     // 加入桌子之后
+
     yield this.afterJoinAsync(user);
     // 数据返回处理
     var data = { chairId: String(user.chairId) };
@@ -574,7 +647,7 @@ proto.zsbgjlAsync = cor(function* (user, chairId) {
     logger.warn(str3);////cssj
     // 站起通知
     if(this.wjcsDiamond >= 0){
-        let wjxzzs = this.nowDiamond + this.nowDiamond2;
+        let wjxzzs = Number(this.nowDiamond) + Number(this.nowDiamond2);
         let gbsz = wjxzzs - this.wjcsDiamond;
         // let str1 = "table 记录钻石记录111.......id:  "+ this.id + " nd  " + this.nowDiamond + " nd2: " + this.nowDiamond2;
         // logger.warn(str1);////cssj
@@ -587,10 +660,11 @@ proto.zsbgjlAsync = cor(function* (user, chairId) {
                 playerId: user.id,
                 dType: 20,//水果游戏
                 dSource: this.wjcsDiamond,
-                dSwap: gbsz,
-                dNow: wjxzzs,
+                dSwap: gbsz.toFixed(2),
+                dNow: wjxzzs.toFixed(2),
                 tableId: this.recordid
             });
+            console.warn("597:",diamondrecord)
             yield diamondrecord.saveAsync();
             this.wjcsDiamond = -1;
             // console.warn("站起桌子之后 保存钻石记录完成  ",this.wjcsDiamond,wjxzzs,user.diamond,gbsz);
@@ -609,18 +683,19 @@ proto.zsbgjlAsync = cor(function* (user, chairId) {
         let jrStart = ""+this.logic.getTodaySJC();////更新今日0时的时间戳
         var sgmrtj = yield this.app.models.SGJMRTJ.findByIdAsync(jrStart);
         if (sgmrtj) {
-            sgmrtj.zqqCost += this.zqqCost;  //所有玩家游戏转圈总下注
-            sgmrtj.zqqwin += this.zqqwin;   //所有玩家游戏转圈总赢得
-            sgmrtj.zqqxh += this.zqqxh;    //所有玩家游戏转圈总消耗(总赢得 - 总下注)
-            sgmrtj.ydxCost += this.ydxCost;  //所有玩家押大小总下注
-            sgmrtj.ydxwin += this.ydxwin;   //所有玩家押大小总赢得
-            sgmrtj.ydxxh += this.ydxxh;    //所有玩家押大小总消耗(总赢得 - 总下注)
-            sgmrtj.ydxzcs += this.ydxzcs;   //该日押大小总次数
-            sgmrtj.allrwq += this.allrwq;   //所有奖券产生总量   
-            sgmrtj.rwxhjq1 += this.rwxhjq1;  //钻石任务消耗奖券总量(领任务时记录)
-            sgmrtj.rwxhjq2 += this.rwxhjq2;  //RMB任务消耗奖券总量(领任务时记录)
-            sgmrtj.rwdcze1 += this.rwdcze1;  //钻石任务兑出总额(领奖时记录)
-            sgmrtj.rwdcze2 += this.rwdcze2;  //RMB(分)任务兑出总额(领奖时记录)
+            sgmrtj.zqqCost = (Number(sgmrtj.zqqCost)+Number(this.zqqCost)).toFixed(2);  //所有玩家游戏转圈总下注
+            sgmrtj.zqqwin = (Number(sgmrtj.zqqwin)+Number(this.zqqwin)).toFixed(2);   //所有玩家游戏转圈总赢得
+            sgmrtj.zqqxh = (Number(sgmrtj.zqqxh)+Number(this.zqqxh)).toFixed(2);    //所有玩家游戏转圈总消耗(总赢得 - 总下注)
+            sgmrtj.ydxCost = (Number(sgmrtj.ydxCost)+Number(this.ydxCost)).toFixed(2);  //所有玩家押大小总下注
+            sgmrtj.ydxwin = (Number(sgmrtj.ydxwin)+Number(this.ydxwin)).toFixed(2);   //所有玩家押大小总赢得
+            sgmrtj.ydxxh = (Number(sgmrtj.ydxxh)+Number(this.ydxxh)).toFixed(2);    //所有玩家押大小总消耗(总赢得 - 总下注)
+            sgmrtj.ydxzcs = (Number(sgmrtj.ydxzcs)+Number(this.ydxzcs)).toFixed(2);   //该日押大小总次数
+            sgmrtj.allrwq = (Number(sgmrtj.allrwq )+ Number(this.allrwq)).toFixed(2);   //所有奖券产生总量
+
+            sgmrtj.rwxhjq1 = (Number(sgmrtj.rwxhjq1)+Number(this.rwxhjq1)).toFixed(2); //钻石任务消耗奖券总量(领任务时记录)
+            sgmrtj.rwxhjq2 = (Number(sgmrtj.rwxhjq2)+Number(this.rwxhjq2)).toFixed(2);  //RMB任务消耗奖券总量(领任务时记录)
+            sgmrtj.rwdcze1 =  (Number(sgmrtj.rwdcze1)+Number(this.rwdcze1)).toFixed(2);  //钻石任务兑出总额(领奖时记录)
+            sgmrtj.rwdcze2 =  (Number(sgmrtj.rwdcze2)+Number(this.rwdcze2)).toFixed(2);  //RMB(分)任务兑出总额(领奖时记录)
             yield sgmrtj.saveAsync();
             // console.warn("更改每日  ",sgmrtj);
         }
@@ -656,7 +731,7 @@ proto.zsbgjlAsync = cor(function* (user, chairId) {
             sgjztj.ydxCost += this.ydxCost;  //所有玩家押大小总下注
             sgjztj.ydxwin += this.ydxwin;   //所有玩家押大小总赢得
             sgjztj.ydxxh += this.ydxxh;    //所有玩家押大小总消耗(总赢得 - 总下注)
-            sgjztj.allrwq += this.allrwq;   //所有奖券产生总量   
+            sgjztj.allrwq += Number(this.allrwq);   //所有奖券产生总量
             sgjztj.rwxhjq1 += this.rwxhjq1;  //钻石任务消耗奖券总量(领任务时记录)
             sgjztj.rwxhjq2 += this.rwxhjq2;  //RMB任务消耗奖券总量(领任务时记录)
             sgjztj.rwxhjq3 = 0;  //备用任务1消耗奖券总量(领任务时记录)
@@ -1000,7 +1075,7 @@ proto.dairuAsync = cor(function* (playerId,chairId) {
         this.wjcsDiamond = user.diamond;//玩家进入房间初始的钻石数,用于判断离开的时候是否需要记录钻石变更
         return { code: C.OK, data: data };
     }
-    let drCount = 0;
+    let drCount = Number(0);
     let nowTime = Date.now();//当前时间戳  
     let jrStart = this.logic.getTodaySJC();////今日0时的时间戳
     var sgjUser = yield this.app.models.SGJUser.findByIdAsync(this.ownerId, 'jrkbcdrs drCount drTime jzjrldzcz jzjrldzczjlsj lastJoinTime');
@@ -1011,9 +1086,10 @@ proto.dairuAsync = cor(function* (playerId,chairId) {
             sgjUser.jzjrldzcz = jzjrldzcz;
             sgjUser.jzjrldzczjlsj = jrStart;
         }
+        sgjUser.drCount = sgjUser.drCount.toFixed(2)
         if(sgjUser.drTime == jrStart){
             if(this.nowDiamond2 >= sgjUser.drCount){
-                drCount = sgjUser.drCount;
+                drCount = sgjUser.drCount.toFixed(1);
                 let ssbkdrdd = this.nowDiamond2 - drCount;//身上比可带入多的钻石
                 if(ssbkdrdd > this.logic.dairuMax - sgjUser.drCount && this.logic.dairuMax - sgjUser.drCount > 0){
                     ssbkdrdd = this.logic.dairuMax - sgjUser.drCount
@@ -1029,7 +1105,9 @@ proto.dairuAsync = cor(function* (playerId,chairId) {
                 // console.warn("带入  ??? ",sgjUser.jzjrldzcz,sgjUser.jzjrldzczjlsj);
                 if(ssbkdrdd >= this.logic.nowCell && sgjUser.jrkbcdrs > 0){
                     let bckddrd = Math.floor(ssbkdrdd / this.logic.nowCell)*this.logic.nowCell;//本次可多带入的
-                    drCount += bckddrd;
+                    console.warn("bckddrd:",bckddrd," drCount:",drCount)
+                    drCount = Number(drCount)+ Number(bckddrd);
+                    console.warn("bckddrd:",bckddrd," drCount:",drCount)
                     sgjUser.drCount = drCount;
                     sgjUser.jrkbcdrs -= bckddrd;
                     sgjUser.lastJoinTime = nowTime;   // 玩家上次进入果游戏时间(留存人数)
@@ -1075,7 +1153,7 @@ proto.dairuAsync = cor(function* (playerId,chairId) {
         let jzjrldzcz = yield this.getjzjrldzcz();
         var newsgjUser = new this.app.models.SGJUser({
             _id: this.ownerId, // 标识
-            userId: 0, // 号码
+            userId: Number(user.userId), // 号码
             cost: 0, // 消费
             win: 0, // 总赢得分
             zfbAcc: "",       // 支付宝账号
@@ -1102,17 +1180,22 @@ proto.dairuAsync = cor(function* (playerId,chairId) {
     }
     this.wjcsDiamond = this.nowDiamond2;//user.diamond;//玩家进入房间初始的钻石数,用于判断离开的时候是否需要记录钻石变更
     // console.warn("玩家进入之后记录初始钻石数   ",this.wjcsDiamond,this.nowDiamond,this.nowDiamond2);
-    this.nowDiamond = drCount;
-    this.nowDiamond2 -= drCount;
+    this.nowDiamond = Number(drCount);
+    console.warn(" this.nowDiamond2:", this.nowDiamond2, " drCount:",drCount)
+    this.nowDiamond2 -= Number(drCount);
+    console.warn(" this.nowDiamond2:", this.nowDiamond2)
     if(this.nowDiamond2 < 0){
         let str4 = "table 带入出错了---id:"+this.id +" 当前局 "+ (this.over+1)+"  nd2  "+this.nowDiamond2;
         logger.warn(str4);////cssj
         return { code: C.FAILD, msg: C.GAME_PARAM_ERROR };
     }
+    console.warn("this.nowDiamond2:",this.nowDiamond2)
+    console.warn("drCount:",drCount)
     var data = { 
-        diamond: this.nowDiamond2,
+        diamond: this.nowDiamond2.toFixed(2),
         drCount: drCount,
     }
+    console.warn("data:",data)
     return { code: C.OK, data: data };
 });
 
@@ -1121,26 +1204,42 @@ proto.startGameAsync = cor(function* (yazhus) {
     let str4 = "table 开始游戏---id:"+this.id +" 当前局 "+ (this.over+1)+"  nowDiamond  "+this.nowDiamond+"  yazhus  "+JSON.stringify(yazhus);
     logger.warn(str4);////cssj
     // 状态设置
+    //现在钻石数量   玩家初始钻石数量不得小于0
+    let wh = yield this.app.models.WHstate.findByIdReadOnlyAsync('wh', 'stateWH whTip');
+    // console.warn("22检查是否维护状态",whdata);
+    if (wh) {
+        // console.warn("--33检查是否维护状态",whdata.stateWH,whdata.whTip);
+        if(wh.stateWH){
+            /////维护状态中
+            return { code: C.SERVER_WEIHU, tip: wh.whTip };
+        }
+    }
     if(this.nowDiamond2 < 0 || this.wjcsDiamond < 0){
         let str1 = "table nowDiamond2出错了---id:"+this.id +" 当前局 "+ (this.over+1)+"  nd2  "+this.nowDiamond2+"  csd  "+this.wjcsDiamond;
         logger.warn(str1);////cssj
         return { code: C.FAILD, msg: C.GAME_PARAM_ERROR };
     }
+    //押注长度必须为8
     if(yazhus.length != 8){
         let str = "table 押注长度出错了---id:"+this.id +" 当前局 "+ (this.over+1)+"  this.ownerUid  "+this.ownerUid+"  yazhus  "+JSON.stringify(yazhus);
         logger.warn(str);////cssj
         return { code: C.FAILD, msg: "押注长度出错了   前端的问题  "+JSON.stringify(yazhus) };
     }
+
+    //押注值必须为10的倍数
     for (var i = 0; i < yazhus.length; i++) {
-        if((yazhus[i]%this.logic.nowCell) != 0){
+        yazhus[i] = parseFloat(yazhus[i].toFixed(2));
+        if(((yazhus[i]*1000)%(this.logic.nowCell*1000)) != 0){
             let str = "table 押注数值出错了---id:"+this.id +" 当前局 "+ (this.over+1)+"  this.ownerUid  "+this.ownerUid+"  yazhus  "+JSON.stringify(yazhus);
             logger.warn(str);////cssj
             return { code: C.FAILD, msg: "押注数值出错了   前端的问题  "+JSON.stringify(yazhus) };
         }
     }
+    //本次总押注 身上的钱是否够
     if(this.nowDiamond < _.sum(yazhus)){ //本次总下注
         return { code: C.FAILD, msg: C.GAME_DIAMOND_LOW };//玩家钻石不足
     }
+    //时间戳 != 每日人数统计时间
     if(this.logic.getTodaySJC() != this.mrrstjsj){
         // console.warn("昨日数据还未统计111");
         yield this.tjbjlmryxrs();
@@ -1175,11 +1274,13 @@ proto.startGameAsync = cor(function* (yazhus) {
     let nowTime = Date.now();//当前时间戳  
     let jrStart = this.logic.getTodaySJC();////今日0时的时间戳
     this.stime = nowTime;
-    let scoreBefore = this.nowDiamond + this.nowDiamond2;//下注之前玩家的钻石
+    let scoreBefore = Number(this.nowDiamond) + Number(this.nowDiamond2);//下注之前玩家的钻石
     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');
+    console.warn("jcpools:",jcPools)
     let mqdw = -1;//目前挡位
     let cjjcsjk = 1;//是否创建奖池数据库
     if (jcPools) {
@@ -1272,8 +1373,8 @@ proto.startGameAsync = cor(function* (yazhus) {
         let str7 = "sgjtable 游戏开始计算结果之后保存钻石成功id:  "+ this.id + " userId: " + player.userId + " name: " + player.name+"  nowDiamond  "+this.nowDiamond ;
         logger.warn(str7);////cssj
     }
-    this.users[0].diamond = this.nowDiamond + this.nowDiamond2;
-    this.users[0].drCount = this.nowDiamond;
+    this.users[0].diamond = (this.nowDiamond + this.nowDiamond2).toFixed(2);;
+    this.users[0].drCount = this.nowDiamond.toFixed(2);
     // 水果机战绩
     var sgjtable = new this.app.models.SGJTables({
         _id: this.yxjlid,//ts++游戏记录id,  
@@ -1291,10 +1392,12 @@ proto.startGameAsync = cor(function* (yazhus) {
         win: win,          // 本局结果赢得分数(不包含下注的即winsList元素总和)
         bsIndex:bsIndex,//本次发牌对应的倍数下标,
         huafenList:[],     // 本局划分数据列表
-        scoreBefore: scoreBefore,  // 本局开始前的分数(钻石)
-        scoreEnd: this.nowDiamond + this.nowDiamond2, // 本局结束后的分数(=scoreBefore-押注总额+win)
+        scoreBefore: scoreBefore.toFixed(2),  // 本局开始前的分数(钻石)
+        scoreEnd: (Number(this.nowDiamond) + (this.nowDiamond2)).toFixed(2), // 本局结束后的分数(=scoreBefore-押注总额+win)
     });
-    let addTaskQuan = bczxz*this.logic.toTaskQuanReate;
+    //let addTaskQuan = bczxz*this.logic.toTaskQuanReate;
+    let addTaskQuan = bczxz/this.logic.nowCell*this.logic.toTaskQuanReate;
+    console.warn("bczxz:",bczxz," nowCell:",this.logic.nowCell, " toTaskQuanReate:",this.logic.toTaskQuanReate," addTaskQuan:",addTaskQuan)
     let nowTaskQuan = 0;
     yield sgjtable.saveAsync();
     let getList = [];
@@ -1302,6 +1405,17 @@ proto.startGameAsync = cor(function* (yazhus) {
     let zfbName = "";
     var sgjUser = yield this.app.models.SGJUser.findByIdAsync(this.ownerId, 'userId cost win zfbAcc zfbName gameCount wingames taskQuan yazhuList getList getTime drCount drTime lastPlayTime');
     if (sgjUser) {
+        var resTaskQuan = this.logic.jisuanFloat(sgjUser.taskQuan,addTaskQuan,1);
+        // 钻石记录
+        var taskquanrecord = new this.app.models.TaskQuanRecord({
+            _id: uuid.v1(),
+            playerId: player._id,
+            dType: 1,//下注
+            dSource: sgjUser.taskQuan,
+            dSwap: addTaskQuan.toFixed(2),
+            dNow: resTaskQuan
+        });
+        yield taskquanrecord.saveAsync()
         // sgjUser.zfbAcc = "";
         // sgjUser.zfbName = "";
         zfbAcc = sgjUser.zfbAcc;
@@ -1362,17 +1476,44 @@ proto.startGameAsync = cor(function* (yazhus) {
     // }
     // console.warn("本次总下注    "+bczxz+"  addTaskQuan  "+addTaskQuan+"  nowTaskQuan  "+nowTaskQuan);
     // 掷骰子
+
+    var SGJUserTongjis = yield this.app.models.SGJUserTongji.findMongoAsync({todaytime:this.logic.getTodaySJC()})
+    if (SGJUserTongjis.length == 0) {
+        var SGJUserTongji = this.app.models.SGJUserTongji({
+            _id: uuid.v1(),
+            //userId: player.userId,
+            //usdt: this.users[0].diamond,
+            sgjwinlose: (Number(win)-Number(_.sum(yazhus))).toFixed(2),//下注
+            taskquanget: addTaskQuan,
+            nowtaskquan: sgjUser.taskQuan,
+            todaytime: this.logic.getTodaySJC()
+        });
+        console.warn("empty win:",win)
+        console.warn("_.sum(yazhus):",_.sum(yazhus))
+        yield SGJUserTongji.saveAsync()
+    }else {
+        var SGJUserTongji = SGJUserTongjis[0]
+        console.warn("SGJUserTongji:",SGJUserTongji)
+        SGJUserTongji.sgjwinlose = (Number(SGJUserTongji.sgjwinlose) - Number(_.sum(yazhus))+Number(win)).toFixed(2)//下注
+        SGJUserTongji.nowtaskquan = sgjUser.taskQuan
+        SGJUserTongji.taskquanget = (Number(SGJUserTongji.taskquanget)+Number(addTaskQuan)).toFixed(2)
+        console.warn("have data win:",win)
+        console.warn("_.sum(yazhus):",_.sum(yazhus))
+        console.warn("SGJUserTongji:sgjwinlose",SGJUserTongji.sgjwinlose)
+        yield SGJUserTongji.saveAsync()
+    }
+
     var sttGame = {
         over: this.over,
         state: this.state,
         yazhus:this.logic.deepCloneTL(this.yazhus),
-        nowDiamond:this.nowDiamond,
-        win:win,
+        nowDiamond:this.nowDiamond.toFixed(2),
+        win:win.toFixed(2),
         handCards:handCards,
         bsIndex:bsIndex,//本次发牌对应的倍数下标,
         tspx:tspx,//特殊牌型,0:没有,1:小三元,2:大三元,3:大四喜
         prizePool: this.logic.prizePool,
-        nowTaskQuan:nowTaskQuan,
+        nowTaskQuan:nowTaskQuan.toFixed(2),
         yxndlbTime:this.yxndlbTime,
         yxndlbTip:this.yxndlbTip,
     };
@@ -1383,13 +1524,16 @@ proto.startGameAsync = cor(function* (yazhus) {
     if(bcsy >= 0){//押中赢了,奖池要亏
         let jczs = this.logic.jisuanFloat(bcsy,xkcsl,1)*-1;//进出钻石
         jjcsl = this.logic.jisuanFloat(jczs,this.logic.jcdwzhwzs,3);
+        console.warn("bcsy:",bcsy," xkcsl:",xkcsl, " jczs:",jczs, " jjcsl:",jjcsl)
     }
     else{//未押中输了,奖池要盈
         let bcsd = bczxz-win;//本次输的
         let jczs = this.logic.jisuanFloat(bcsd,xkcsl,2);//进出钻石
         jjcsl = this.logic.jisuanFloat(jczs,this.logic.jcdwzhwzs,3);//下的太多赢得太少情况下这里出现负数很正常
+        console.warn("bcsd:",bcsd," bczxz:",bczxz," win:",win," xkcsl:",xkcsl, " jczs:",jczs, " jjcsl:",jjcsl)
     }
     if (jcPools) {
+        console.warn(1433)
         if(mqdw >= 0 && mqdw < jcPools.pools.length){
             let xzpool = _.cloneDeep(jcPools.pools);
             xzpool[mqdw] += jjcsl;
@@ -1399,10 +1543,13 @@ proto.startGameAsync = cor(function* (yazhus) {
             // console.warn("奖池保存结果222 ",mqdw,jcPools.kouchus, xzkouchu,xkcsl);
             jcPools.pools = _.cloneDeep(xzpool);
             jcPools.kouchus = _.cloneDeep(xzkouchu);
+            console.warn("xzpool:",xzpool)
+            console.warn("pools:",jcPools.pools)
             yield jcPools.saveAsync();
         }
     }
     else{
+        console.warn("1454")
         var sgjjc = yield this.app.models.SGJJC.findByIdAsync('sgjjcs', 'pools cspools levels kouchus');
         if(sgjjc){
             if(mqdw >= 0 && mqdw < sgjjc.pools.length){
@@ -1414,6 +1561,8 @@ proto.startGameAsync = cor(function* (yazhus) {
                 // console.warn("奖池保存结果444 ",mqdw,sgjjc.kouchus, xzkouchu,xkcsl);
                 sgjjc.pools = _.cloneDeep(xzpool);
                 sgjjc.kouchus = _.cloneDeep(xzkouchu);
+                console.warn("xzpool:",xzpool)
+                console.warn("pools:",sgjjc.pools)
                 yield sgjjc.saveAsync();
             }
         }
@@ -1469,6 +1618,7 @@ proto.startGameAsync = cor(function* (yazhus) {
     // console.warn("游侠开始*******************this.chBanker",this.chBanker);
     this.setPaijuHuiFangData(M.START_GAME,sttGame);/////TL++ 牌局回放  push游戏开始
     // 开始通知
+    console.warn("sttGame:",sttGame)
     yield this.pushMsgAsync(-1, 'shuiguo_event', { type: M.START_GAME, data: sttGame });
     // let endmode=ENDMODE.NORMALEND//局数完成--正常结束
     // let endmode=ENDMODE.PLAYING;
@@ -1560,12 +1710,14 @@ proto.taskReward = cor(function* (playerId,zfbAcc,zfbName,_getList) {
 // 划分
 proto.huafenAsync = cor(function* (type,value) {
     if(this.win <= 0){//本局结果赢得分数(不包含下注的即winsList元素总和)用于判断用户是否可以押分
+        console.warn("remove 1616")
         return { code: C.FAILD, msg: C.TABLE_MASK_ERROR };
     }
+    value = parseFloat(value.toFixed(2));
     if(this.nowDiamond < value){
         return { code: C.FAILD, msg: "不能超出身上已有钻石" };
     }
-    if((value%this.logic.nowCell) != 0){
+    if((value*1000)%((this.logic.nowCell*1000)) != 0){
         let str = "table 押大小数值出错了---id:"+this.id +" 当前局 "+ (this.over+1)+"  this.ownerUid  "+this.ownerUid+"  value  "+value;
         logger.warn(str);////cssj
         return { code: C.FAILD, msg: "押大小数值出错了   前端的问题  "+value };
@@ -1597,7 +1749,7 @@ proto.huafenAsync = cor(function* (type,value) {
     };//本局的押大小发牌
     this.win += res.win;//本局结果赢得分数(不包含下注的即winsList元素总和)用于判断用户是否可以押分
     this.nowDiamond = this.nowDiamond - value + this.win;//玩家目前的钻石
-    let addTaskQuan = res.addTaskQuan;
+    let addTaskQuan = 0//res.addTaskQuan.toFixed(2);;
     let str5 = "table sgj划分  数据---id:"+this.id +" 当前局 "+ this.over+"  type  "+type+"  value  "+value;
     str5+=("  nd  "+this.nowDiamond+"  win  "+this.win+" pP "+this.logic.prizePool+"  hc  "+JSON.stringify(res))
     logger.warn(str5);
@@ -1638,11 +1790,11 @@ proto.huafenAsync = cor(function* (type,value) {
     }
 
     let nowTaskQuan = 0;
-    var sgjUser = yield this.app.models.SGJUser.findByIdAsync(this.ownerId, 'cost win taskQuan drCount drTime lastYDXTime');
+    var sgjUser = yield this.app.models.SGJUser.findByIdAsync(this.ownerId, 'userId cost win taskQuan drCount drTime lastYDXTime');
     if (sgjUser) {
         sgjUser.cost+= value;
         sgjUser.win+= this.win;
-        sgjUser.taskQuan = this.logic.jisuanFloat(sgjUser.taskQuan,addTaskQuan,1);
+        //sgjUser.taskQuan = this.logic.jisuanFloat(sgjUser.taskQuan,addTaskQuan,1);
         nowTaskQuan = sgjUser.taskQuan;
         sgjUser.drCount = this.nowDiamond;
         sgjUser.lastYDXTime = nowTime;
@@ -1650,6 +1802,7 @@ proto.huafenAsync = cor(function* (type,value) {
         yield sgjUser.saveAsync();
     }
     if (jcPools) {
+
         if(mqdw >= 0 && mqdw <jcPools.ydxpools.length){
             let jjcsl = 0//进奖池数量
             let xkcsl = this.logic.jisuanFloat(value,this.logic.fqjjckcReate,3);//进出奖池需扣掉的数量
@@ -1677,13 +1830,13 @@ proto.huafenAsync = cor(function* (type,value) {
     if(res.win >= 0) this.ydxwin += res.win*2;   //所有玩家押大小总赢得
     this.ydxxh += res.win*-1;    //所有玩家押大小总消耗(总下注-总赢得)
     this.ydxzcs += 1;   //该日押大小总次数
-    this.allrwq = this.logic.jisuanFloat(this.allrwq,addTaskQuan,1);   //所有奖券产生总量   
+    this.allrwq = this.logic.jisuanFloat(this.allrwq,addTaskQuan,1).toFixed(2);   //所有奖券产生总量
     this.allCost += value;  //所有玩家总下注
     if(res.win >= 0) this.allwin += res.win*2;   //所有玩家总赢得
     this.allxh += res.win*-1;    //所有玩家总消耗(总下注-总赢得) 
 
     let phdata = {
-        bczxz: value,//本次总下注
+        bczxz: value.toFixed(2),//本次总下注
         addTaskQuan: addTaskQuan,//本次增加的任务券
         jrStart: jrStart,//本次游戏时间对应的0点时间戳
         nowTime: nowTime//本次游戏的时间
@@ -1694,8 +1847,27 @@ proto.huafenAsync = cor(function* (type,value) {
     data.ydxcs = ydxcs;           // 本局押大小次数
     data.nowDiamond = this.nowDiamond;
     data.value = value;
-    data.nowTaskQuan = nowTaskQuan;
+    data.nowTaskQuan = nowTaskQuan.toFixed(2);
     yield this.pushMsgAsync(-1, 'shuiguo_event', { type: M.COMPARE_RESULT, data: data });
+    //console.warn("data:",data)
+    var SGJUserTongjis = yield this.app.models.SGJUserTongji.findMongoAsync({todaytime:this.logic.getTodaySJC()})
+    var SGJUserTongji = null
+    if (SGJUserTongjis.length == 0) {
+        SGJUserTongji = this.app.models.SGJUserTongji({
+            _id: uuid.v1(),
+            userId: user.userId,
+            usdt: user.diamond,
+            taskquanlose: cost,//下注
+            todaytime: this.logic.getTodaySJC()
+        });
+        yield SGJUserTongji.saveAsync()
+    }else {
+        SGJUserTongji = SGJUserTongjis[0]
+        SGJUserTongji.usdt = data.nowDiamond
+        SGJUserTongji.sgjwinlose = (Number(SGJUserTongji.sgjwinlose) +Number(data.win)).toFixed(2)//下注
+
+        yield SGJUserTongji.saveAsync()
+    }
     // console.warn("划分返回222  "+JSON.stringify(data));
     return { code: C.OK, data: data };
 });
@@ -2080,7 +2252,7 @@ proto.setPaiHangData = cor(function* (data) {
     var paihang = yield this.app.models.SGJPaiHang.findByIdAsync(this.ownerId, fields);
     if (paihang) {
         if(data.jrStart == paihang.time1){
-            let newcost1 = paihang.cost1 + data.bczxz;
+            let newcost1 = Number(paihang.cost1) +  Number(data.bczxz);
             let newQuan = this.logic.jisuanFloat(paihang.quan1,data.addTaskQuan,1); 
             paihang.cost1 = newcost1;
             paihang.quan1 = newQuan;
@@ -2148,7 +2320,7 @@ proto.setPaiHangData = cor(function* (data) {
 
                 zphblb[zphblb.length] = list[i];
             }
-            this.phbfjTimer = this.app.timer.setTimeout(() => this.sendPHBJL(zphblb,0),100);
+            //this.phbfjTimer = this.app.timer.setTimeout(() => this.sendPHBJL(zphblb,0),100);
         }
     }
     if(paihang){
@@ -2159,7 +2331,8 @@ proto.setPaiHangData = cor(function* (data) {
 
 //发放排行榜奖励
 proto.sendPHBJL = cor(function* (list,_index) {
-    let index = _index;
+    return
+    /*let index = _index;
     if(index >= list.length) return;
     if (this.phbfjTimer) {
         clearTimeout(this.phbfjTimer);
@@ -2174,11 +2347,11 @@ proto.sendPHBJL = cor(function* (list,_index) {
     if(index < list.length){
         //间隔0.1秒给玩家发送排行榜奖励
         this.phbfjTimer = this.app.timer.setTimeout(() => this.sendPHBJL(list,index),100);
-    }
+    }*/
 });
 
 ////得到排行榜
-proto.getPaiHangAsync = cor(function* () {
+proto.getPaiHangAsync = cor(function* (playerId) {
     let limit = 10;//前10名上榜
     let jrStart = this.logic.getTodaySJC();////更新今日0时的时间戳
     var opts = { 
@@ -2200,11 +2373,20 @@ proto.getPaiHangAsync = cor(function* () {
         }
         pmInfos[i] = item;
     }
-    var zjph = yield this.app.models.SGJPaiHang.findByIdAsync(this.ownerId, 'name headurl userId cost1 quan1 time1');
+    let player = yield this.app.models.Player.findByIdAsync(playerId);
+    opts.userId = player.userId
+
+    var zjph = yield this.app.models.SGJPaiHang.findMongoAsync(opts);
+    var d = null
+    if (zjph.length > 0) {
+        d = zjph[0]
+        console.warn("getpaihang self:",d)
+    }
     let data = {
         pmInfos: pmInfos,
-        zjph: zjph
+        zjph: d
     }
+
     return { code: C.OK, data: data };
 });
 
@@ -2232,7 +2414,7 @@ proto.upZFBInfoAsync = cor(function* (playerId,realName,zfbAcc) {
 
 // 得到任务列表
 proto.getTaskInfoAsync = cor(function* (playerId,chairId) {
-     // console.log("玩家信息玩家信息玩家信息");
+      console.log("玩家信息玩家信息玩家信息");
     var user = this.users[chairId];
     if (!user) {
         return { code: C.FAILD, msg: C.GAME_PARAM_ERROR };
@@ -2393,6 +2575,7 @@ proto.dealRenWuAsync = cor(function* (playerId,chairId,item) {
     });
     // console.warn("领取之后存储任务  ",JSON.stringify(newsgjTask),JSON.stringify(item));
     yield newsgjTask.saveAsync();
+
     let jxzrmbjl = 0;//进行中的rmb奖励
     if(item.rewardt == 1) {
         this.rwxhjq1 = this.logic.jisuanFloat(this.rwxhjq1,cost,1);  //钻石任务消耗奖券总量(领任务时记录)
@@ -2405,12 +2588,40 @@ proto.dealRenWuAsync = cor(function* (playerId,chairId,item) {
     // var sgjUser = yield this.app.models.SGJUser.findByIdAsync(playerId, 'taskQuan');
     if (sgjUser) {
         nowTaskQuan = this.logic.jisuanFloat(sgjUser.taskQuan,cost,2);
+        var resTaskQuan = new this.app.models.TaskQuanRecord({
+            _id: uuid.v1(),
+            playerId: playerId,
+            dType: 2,//领任务
+            dSource: sgjUser.taskQuan,
+            dSwap: 0-cost.toFixed(2),
+            dNow: nowTaskQuan
+        });
+        yield resTaskQuan.saveAsync()
         // console.warn("领取之后修改任务券数  ",sgjUser.taskQuan,cost,nowTaskQuan);
         sgjUser.taskQuan = nowTaskQuan;
         sgjUser.jxzReward += jxzrmbjl;
         this.users[0].taskQuan = sgjUser.taskQuan;
         yield sgjUser.saveAsync();
     }
+    var SGJUserTongjis = yield this.app.models.SGJUserTongji.findMongoAsync({todaytime:this.getTodaySJC()})
+    var SGJUserTongji = null
+    if (SGJUserTongjis.length == 0) {
+        SGJUserTongji = this.app.models.SGJUserTongji({
+            _id: uuid.v1(),
+            //userId: user.userId,
+            usdt: user.diamond,
+            taskquanlose: cost,//下注
+            todaytime: this.logic.getTodaySJC()
+        });
+        yield SGJUserTongji.saveAsync()
+    }else {
+        SGJUserTongji = SGJUserTongjis[0]
+        console.warn("SGJUserTongji:",SGJUserTongji)
+        //SGJUserTongji.usdt = user.diamond,
+            SGJUserTongji.taskquanlose = (Number(SGJUserTongji.taskquanlose) +Number(cost)).toFixed(2)//下注
+        SGJUserTongji.nowtaskquan = nowTaskQuan
+        yield SGJUserTongji.saveAsync()
+    }
     if(this.wjrwxylb.length != this.logic.cardKindCount){
         this.wjrwxylb = _.fill(Array(this.logic.cardKindCount), 0);
     }
@@ -2422,7 +2633,7 @@ proto.dealRenWuAsync = cor(function* (playerId,chairId,item) {
     // console.warn("领取任务  玩家已领未完成任务需要的任务要求列表  ",this.wjrwxylb);
     ylcs++;
     var data = { 
-        nowTaskQuan:nowTaskQuan,
+        nowTaskQuan:nowTaskQuan.toFixed(2),
         ylcs : ylcs,//该任务已领取的次数
         renwuInfo: item
     }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 990 - 73
http/charge.js


+ 6 - 6
http/conf.json

@@ -8,12 +8,12 @@
 		"5": 58800
 	},
 	"pay_diamonds": { 
-		"1000": 800,
-		"3000": 2400,
-		"5000": 4000,
-		"10000": 8000,
-		"29800": 23840,
-		"58800": 47040
+		"1000": 1000,
+		"3000": 3000,
+		"5000": 5000,
+		"10000": 10000,
+		"29800": 29800,
+		"58800": 58800
 	},
 	"give_diamonds": {
 		"100": 0,

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor