game.js 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. 'use strict';
  2. module.exports = function (app) {
  3. var mdbgoose = app.memdb.goose;
  4. var Types = mdbgoose.Schema.Types;
  5. // // ts++房间创建记录
  6. // var CTableRecordSchema = new mdbgoose.Schema({
  7. // _id: { type: String }, // 房间标识
  8. // playerId: { type: String, default: '' }, // 玩家标识
  9. // registerTime: { type: Number, default: Date.now } // 记录时间
  10. // }, { collection: 'ctableRecord' });
  11. // mdbgoose.model('CTableRecord', CTableRecordSchema);
  12. // 玩家战绩
  13. var UserSchema = new mdbgoose.Schema({
  14. _id: { type: String }, // 玩家标识
  15. chairId: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));}}, // 椅子号
  16. userId: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));}}, // 玩家号码
  17. name: { type: String, default: ''}, // 昵称
  18. sex: { type: String, default: ''}, // 性别
  19. headurl: { type: String, default: ''}, // 头像
  20. over: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));}}, // 游戏局数
  21. score: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));}} // 分数
  22. //gameCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏消耗
  23. //giftCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 礼物消耗
  24. //diamond: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} } // 最新钻石
  25. //extend: { type: Types.Mixed, default: {} } // 扩展
  26. });
  27. // 实时战绩
  28. var SSZJSchema = new mdbgoose.Schema({
  29. _id: { type: String }, // 子局数
  30. sszjScore: [String], // 本局成绩
  31. sszjAllScore: [String], // 总成绩
  32. banker: { type: Number, default: -1 }, // 庄家
  33. hu: { type: Number, default: -1 }, // 胡
  34. pao: { type: Number, default: -1 } // 放炮
  35. //fName: { type: String, default: '' } // 实时战绩文件
  36. });
  37. // 奉化麻将(10007)
  38. var FHMJTablesSchema = new mdbgoose.Schema({
  39. _id: { type: String }, // ts++标识
  40. gameId: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏id,10006为长沙麻将,10007为红中麻将,10008为跑得快
  41. tableNo: { type: String , default: ''}, // ts++房间号
  42. ownerId: { type: String, default: '' }, // 房主标识
  43. agentId: { type: String, default: '' }, // 代理ID
  44. type: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 类型
  45. kind: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩法
  46. other: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 其他玩法
  47. playerCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏人数
  48. round: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 总局数
  49. over: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏局数
  50. ctime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 创建时间
  51. stime: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 开始时间
  52. time: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 结束时间
  53. endMode: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 结束模式
  54. gameCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏消耗
  55. giftCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 礼物消耗
  56. agentRebate: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 代理返利
  57. sszjFile: [String], // 实时战绩文件
  58. sszj: [SSZJSchema], // 实时战绩
  59. users: [UserSchema] // 玩家
  60. }, { collection: 'fhmjtables' });
  61. mdbgoose.model('FHMJTables', FHMJTablesSchema);
  62. //ts++ 游戏记录 仅在创建房间时候添加,仅用于判断近期内某个玩家是否创建过多的房间
  63. var GameTableSchema = new mdbgoose.Schema({
  64. _id: { type: String }, // ts++标识
  65. tableNo: { type: String , default: ''}, // ts++房间号
  66. ownerId: { type: String, default: '' }, // 房主标识
  67. agentId: { type: String, default: '' }, // 代理ID
  68. type: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 类型
  69. kind: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩法
  70. other: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 其他玩法
  71. playerCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏人数
  72. round: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 总局数
  73. over: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏局数
  74. ctime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 创建时间
  75. // stime: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 开始时间
  76. // time: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 结束时间
  77. endMode: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 结束模式
  78. // gameCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏消耗
  79. // agentRebate: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 代理返利
  80. }, { collection: 'gametable' });
  81. mdbgoose.model('GameTable', GameTableSchema);
  82. var SXGamerSchema = new mdbgoose.Schema({
  83. _id: { type: String }, // 玩家ID+时期[20190707]
  84. playerId: { type: String, default: '' }, // 玩家标识
  85. gameDate: { type: String, default: '' }, // 日期
  86. ttCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 总场数
  87. noCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 平局数
  88. winCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 胜场数
  89. runCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 逃跑数
  90. history: [String] // 历史记录
  91. //pjhffileName: [String] //ts-- 牌局回放记录的文件名
  92. }, { collection: 'sxgamer' });
  93. mdbgoose.model('SXGamer', SXGamerSchema);
  94. // 全局记录
  95. var RecordSchema = new mdbgoose.Schema({
  96. _id: { type: String }, // UUID
  97. gameId: { type: Number }, // 游戏ID
  98. tableId: { type: String }, // 房间号
  99. type: { type: Number }, // 类型
  100. round: { type: Number }, // 局数
  101. ctime: { type: Number }, // 创建时间
  102. stime: { type: Number }, // 开始时间
  103. time: { type: Number }, // 记录时间
  104. users: [UserSchema] // 玩家
  105. }, { collection: 'records' });
  106. mdbgoose.model('Record', RecordSchema);
  107. ////下面是水果机相关的数据
  108. // 水果机奖池
  109. var SGJJCchema = new mdbgoose.Schema({
  110. _id: { type: String, default: ''}, // 主键
  111. pools: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 奖池列表(单位:1/100钻石)(奖池分为几个等级,数组就有几个元素)
  112. cspools: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 初始奖池列表(单位:1/100钻石)(奖池分为几个等级,数组就有几个元素)
  113. levels: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 挡位数组(单位:钻石)(奖池分为几个等级,数组就有几个元素)
  114. kouchus: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 扣除列表(单位:1/100钻石)(奖池分为几个等级,数组就有几个元素)
  115. topLimits1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的上限1调控数值(奖池分为几个等级,数组就有几个元素)
  116. topLimits2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的上限2调控数值(奖池分为几个等级,数组就有几个元素)
  117. topLimits3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的上限3调控数值(奖池分为几个等级,数组就有几个元素)
  118. lowLimits1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的下限1调控数值(奖池分为几个等级,数组就有几个元素)
  119. lowLimits2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的下限2调控数值(奖池分为几个等级,数组就有几个元素)
  120. lowLimits3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的下限3调控数值(奖池分为几个等级,数组就有几个元素)
  121. paiTopRate1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的牌上限1调控比例(奖池分为几个等级,数组就有几个元素)
  122. paiTopRate2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的牌上限2调控比例(奖池分为几个等级,数组就有几个元素)
  123. paiTopRate3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的牌上限3调控比例(奖池分为几个等级,数组就有几个元素)
  124. paiLowRate1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的牌下限1调控比例(奖池分为几个等级,数组就有几个元素)
  125. paiLowRate2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的牌下限2调控比例(奖池分为几个等级,数组就有几个元素)
  126. paiLowRate3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的牌下限3调控比例(奖池分为几个等级,数组就有几个元素)
  127. bsTopRate1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的倍数上限1调控比例(奖池分为几个等级,数组就有几个元素)
  128. bsTopRate2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的倍数上限2调控比例(奖池分为几个等级,数组就有几个元素)
  129. bsTopRate3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的倍数上限3调控比例(奖池分为几个等级,数组就有几个元素)
  130. bsLowRate1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的倍数下限1调控比例(奖池分为几个等级,数组就有几个元素)
  131. bsLowRate2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的倍数下限2调控比例(奖池分为几个等级,数组就有几个元素)
  132. bsLowRate3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 各个挡位对应的倍数下限3调控比例(奖池分为几个等级,数组就有几个元素)
  133. ydxpools: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小奖池列表(单位:1/100钻石)(奖池分为几个等级,数组就有几个元素)
  134. ydxcspools: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小初始奖池列表(单位:1/100钻石)(奖池分为几个等级,数组就有几个元素)
  135. ydxlevels: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小挡位数组(单位:钻石)(奖池分为几个等级,数组就有几个元素)
  136. ydxkouchus: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小扣除列表(单位:1/100钻石)(奖池分为几个等级,数组就有几个元素)
  137. ydxtopLimits1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的上限1调控数值(奖池分为几个等级,数组就有几个元素)
  138. ydxtopLimits2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的上限2调控数值(奖池分为几个等级,数组就有几个元素)
  139. ydxtopLimits3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的上限3调控数值(奖池分为几个等级,数组就有几个元素)
  140. ydxlowLimits1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的下限1调控数值(奖池分为几个等级,数组就有几个元素)
  141. ydxlowLimits2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的下限2调控数值(奖池分为几个等级,数组就有几个元素)
  142. ydxlowLimits3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的下限3调控数值(奖池分为几个等级,数组就有几个元素)
  143. ydxTopRate1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的牌上限1调控比例(奖池分为几个等级,数组就有几个元素)
  144. ydxTopRate2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的牌上限2调控比例(奖池分为几个等级,数组就有几个元素)
  145. ydxTopRate3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的牌上限3调控比例(奖池分为几个等级,数组就有几个元素)
  146. ydxLowRate1: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的牌下限1调控比例(奖池分为几个等级,数组就有几个元素)
  147. ydxLowRate2: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的牌下限2调控比例(奖池分为几个等级,数组就有几个元素)
  148. ydxLowRate3: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 押大小各个挡位对应的牌下限3调控比例(奖池分为几个等级,数组就有几个元素)
  149. }, { collection: 'sgjjc' });
  150. mdbgoose.model('SGJJC', SGJJCchema);
  151. // 划分战绩
  152. var HUAFENchema = new mdbgoose.Schema({
  153. yddx: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本次划分玩家押的大小,1代表押小 = 2代表押大
  154. hfxz: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本次划分的下注
  155. hfjg: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本次划分的发牌结果:区间[1,12]
  156. bcyd: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本次划分赢的
  157. ksfs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本次划分开始时的钻石(下注之前的)
  158. jsfs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本次划分结束时的钻石(jsfs = ksfs-hfxz+bcyd)
  159. time: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本条划分记录时间
  160. });
  161. // 水果机战绩
  162. var SGJTablesSchema = new mdbgoose.Schema({
  163. _id: { type: String }, // ts++标识
  164. tableNo: { type: String , default: ''}, // ts++房间号
  165. ownerId: { type: String, default: '' }, // 玩家标识
  166. agentId: { type: String, default: '' }, // 代理ID
  167. roomType: { type: Number, set: function(value) {return Number(Number(value).toFixed(2));}, default: 0 }, // 代理ID
  168. over: { type: Number , default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏局数
  169. time: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 结束时间
  170. gameCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 游戏消耗(本局下注总额)
  171. giftCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 礼物消耗
  172. agentRebate: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 代理返利
  173. yazhuList: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 本局押注列表
  174. resultList: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 本局结果列表
  175. winsList: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 本局结果赢的列表
  176. win: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本局结果赢得分数(不包含下注的即winsList元素总和)
  177. bsIndex: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //本次发牌对应的倍数下标["10/20","15/30","20/40"];
  178. huafenList: [HUAFENchema], // 本局划分数据列表
  179. scoreBefore: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本局开始前的分数(钻石)
  180. scoreEnd: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 本局结束后的分数(=scoreBefore-押注总额+win)
  181. }, { collection: 'sgjtables' });
  182. mdbgoose.model('SGJTables', SGJTablesSchema);
  183. var SGJUserTongjiSchema = new mdbgoose.Schema({
  184. _id: { type: String }, // ts++标识
  185. usdt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 当前身上usdt
  186. nnwinlose: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 当前身上usdt
  187. nnflow: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 当前身上usdt
  188. sgjwinlose: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //水果机盈亏
  189. taskquanget: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //获得的奖券
  190. taskquanlose: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //奖券消费
  191. houtaiU: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //奖券消费
  192. nowtaskquan:{ type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //当前奖券
  193. todaytime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //统计时间
  194. taskGetU: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //任务获得的U
  195. rechargeusdt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //充值获得的U
  196. withdrawusdt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //提现的U
  197. feeconfigusdt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //提现每次3U的手续费
  198. feeusdt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //提现第三方扣的手续费
  199. }, { collection: 'sgjusertongji' });
  200. mdbgoose.model('SGJUserTongji', SGJUserTongjiSchema);
  201. //水果机玩家信息
  202. var SGJUserSchema = new mdbgoose.Schema({
  203. _id: { type: String }, // 标识
  204. userId: { type: Number }, // 号码
  205. cost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 消费
  206. win: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 总赢得分
  207. zfbAcc: { type: String , default: ''}, // 支付宝账号
  208. zfbName: { type: String , default: ''}, // 支付宝姓名
  209. zfbBindTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩家支付宝信息正确性验证成功时间(0时表示验证未通过)
  210. gameCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 总小局次数
  211. wingames: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 总赢的小局次数
  212. taskReward: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 已获得的任务奖励(RMB)在zfb到账之后增加
  213. jxzReward: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 进行中的任务奖励(RMB)在领取任务时增加,在zfb到账之后减少
  214. ylzsReward: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 已领取的任务奖励(钻石)
  215. taskQuan: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 任务券(用于领任务)
  216. yazhuList: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 上局押注列表
  217. // [大苹果个数,大橙子个数,大芒果个数,大铃铛个数,大西瓜个数,大星星个数,大七七个数,大王王个数,幸运运个数,
  218. // 小苹果个数,小橙子个数,小芒果个数,小铃铛个数,小西瓜个数,小星星个数,小七七个数,小王王个数]
  219. getList: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 获得的列表(用于计算任务是否完成)
  220. getTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 获得列表更新的时间
  221. // 今日可补充带入数量(例如玩家今天第一次进游戏时身上只有2w钻石,玩一会儿之后今日带入剩了1w了,
  222. // 出去充值之后身上钻石变多之后那今日的可带入应该为上次剩的1w+刚刚充值之后的最多9w)
  223. jrkbcdrs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 今日可补充带入数量
  224. drCount: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 带入数量(钻石)(1分=10钻石,每日上限1w分)
  225. drTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 带入时间
  226. jzjrldzcz: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩家截至今日零点总充值数量(分),用于判断任务
  227. jzjrldzczjlsj: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩家截至今日零点总充值记录对应的时间戳,用于判断jzjrldzcz是否需要更新
  228. registerTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩家首次进入水果游戏时间
  229. lastJoinTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩家上次进入果游戏时间(留存人数)
  230. lastPlayTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 玩家上次玩水果游戏时间(用于统计游戏人数)
  231. lastYDXTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} } // 玩家上次水果押大小时间(用于统计押大小人数)
  232. }, { collection: 'sgjuser' });
  233. mdbgoose.model('SGJUser', SGJUserSchema);
  234. //水果玩家任务信息
  235. var SGJTaskSchema = new mdbgoose.Schema({
  236. _id: { type: String }, // 标识
  237. playerId: { type: String }, // 玩家标识
  238. userId: { type: Number }, // 号码
  239. des: { type: String }, // 玩家标识
  240. cost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 消费
  241. reachs: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //达成该条任务所需的条件列表[1(1号牌),2(2号牌)]]
  242. reachC: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //达成该条任务所需的个数列表[reachs[0]出现次数,reachs[1]出现次数]
  243. rewardt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该条任务达成之后的奖品类型 0:未定义 1:钻石,2:RMB(分)
  244. rewards: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该条任务达成之后的奖品数量
  245. state: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //任务状态0:未完成,1:已完成,2:发奖中,3:已发奖,
  246. lqTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //领取任务时间
  247. wcTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //完成时间
  248. fjTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //发奖时间
  249. }, { collection: 'sgjtask' });
  250. mdbgoose.model('SGJTask', SGJTaskSchema);
  251. // 水果机玩家今日任务池信息item
  252. var SGJRWCItemchema = new mdbgoose.Schema({
  253. index: { type: Number, default: -1 }, //该条任务编号
  254. des: { type: String, default: "" }, // 任务描述
  255. times: { type: Number, default: 1 }, //该条任务今日可领总次数
  256. cost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 该条任务需要的消耗
  257. reachs: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //达成该条任务所需的条件列表[1(1号牌),2(2号牌)]]
  258. reachC: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //达成该条任务所需的个数列表[reachs[0]出现次数,reachs[1]出现次数]
  259. rewardt: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该条任务达成之后的奖品类型 0:未定义 1:钻石,2:RMB(分)
  260. rewards: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该条任务达成之后的奖品数量
  261. });
  262. //水果玩家今日任务池信息(为了实现每个玩家每天的任务随机)
  263. var SGJWJJRRWCSchema = new mdbgoose.Schema({
  264. _id: { type: String }, // 标识,玩家的_id
  265. time: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //任务池对应的时间
  266. rwcList: [SGJRWCItemchema] // 该玩家对应时间的任务池列表
  267. }, { collection: 'sgjwjjrrwc' });
  268. mdbgoose.model('SGJWJJRRWC', SGJWJJRRWCSchema);
  269. //水果总统计信息
  270. var SGJTongjiSchema = new mdbgoose.Schema({
  271. _id: { type: String, default: 'sgztj'}, // 主键
  272. allCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家总下注
  273. allwin: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家总赢得
  274. allxh: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家总消耗(总下注-总赢得)
  275. zqqCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家游戏转圈总下注
  276. zqqwin: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家游戏转圈总赢得
  277. zqqxh: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家游戏转圈总消耗(总下注-总赢得)
  278. ydxCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家押大小总下注
  279. ydxwin: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家押大小总赢得
  280. ydxxh: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家押大小总消耗(总下注-总赢得)
  281. allrwq: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有奖券产生总量
  282. rwxhjq1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //钻石任务消耗奖券总量(领任务时记录)
  283. rwxhjq2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //RMB任务消耗奖券总量(领任务时记录)
  284. rwxhjq3: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //备用任务1消耗奖券总量(领任务时记录)
  285. rwxhjq4: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //备用任务2消耗奖券总量(领任务时记录)
  286. rwdcze1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //钻石任务兑出总额(领奖时记录)
  287. rwdcze2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //RMB(分)任务兑出总额(领奖时记录)
  288. rwdcze3: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //备用任务兑出总额(领奖时记录)
  289. rwdcze4: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //备用任务兑出总额(领奖时记录)
  290. // 下面这两个数据是长度为8的数组,分别代表[苹果,橙子,芒果,铃铛,西瓜,星星,七七,王王]
  291. allyzze: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //总押注总额列表
  292. allydze: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //总赢得总额列表(不包含特殊项)
  293. // 下面这数据是长度为16的数组,分别代表[大苹果,大橙子,大芒果,大铃铛,大西瓜,大星星,大七七,大王王,
  294. //小苹果,小橙子,小芒果,小铃铛,小西瓜,小星星,小七七,小王王]
  295. gxzydze: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //各项总赢得总额列表(不包含特殊项)
  296. // 下面这数据是长度为17的数组,分别代表[大苹果,大橙子,大芒果,大铃铛,大西瓜,大星星,大七七,大王王,
  297. //幸运运,小苹果,小橙子,小芒果,小铃铛,小西瓜,小星星,小七七,小王王]
  298. gxcxzcs: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //各项出现总次数列表(不包含特殊项)
  299. // 下面这两个数据是长度为3的数组,分别代表[小三元,大三元,大四喜]
  300. tsxzydze: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //特殊项总赢得总额列表
  301. tsxcxzcs: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, //特殊项出现总次数列表
  302. errstr: { type: String, default: ''}, //错误或者异常记录
  303. }, { collection: 'sgjtongji' });
  304. mdbgoose.model('SGJTongji', SGJTongjiSchema);
  305. //水果每日统计信息
  306. var SGJMRTJSchema = new mdbgoose.Schema({
  307. _id: { type: String }, // 标识
  308. zqqCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家游戏转圈总下注
  309. zqqwin: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家游戏转圈总赢得
  310. zqqxh: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家游戏转圈总消耗(总下注-总赢得)
  311. ydxCost: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家押大小总下注
  312. ydxwin: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家押大小总赢得
  313. ydxxh: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有玩家押大小总消耗(总下注-总赢得)
  314. ydxzcs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日押大小总次数
  315. allrwq: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //所有奖券产生总量
  316. rwxhjq1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //钻石任务消耗奖券总量(领任务时记录)
  317. rwxhjq2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //RMB任务消耗奖券总量(领任务时记录)
  318. rwdcze1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //钻石任务兑出总额(领奖时记录)
  319. rwdcze2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //RMB(分)任务兑出总额(领奖时记录)
  320. // yazhuList: {type: [Number],set: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});},get: function(arr) {if (!Array.isArray(arr)) return arr;return arr.map(num => {return Number(Number(num).toFixed(2));});}}, // 本局押注列表
  321. registerTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }// 记录时间(该日0点时间戳)
  322. }, { collection: 'sgjmrtj' });
  323. mdbgoose.model('SGJMRTJ', SGJMRTJSchema);
  324. //水果每日统计信息
  325. var SGJMRRSSchema = new mdbgoose.Schema({
  326. _id: { type: String }, // 标识(日期)
  327. grzcrs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日注册人数(按照进入时间算)
  328. xzyxrs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日新增有效人数(玩过游戏的算为有效)
  329. grzqrs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日转圈人数
  330. ydxzrs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日押大小总人数
  331. grzqcs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日转圈次数
  332. ydxzcs: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日押大小总次数
  333. lcrs1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日的次日留存人数(按照进入算)
  334. lcrs7: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //该日的7日留存人数(按照进入算)
  335. time: { type: Number, default: Date.now },// 精确时间
  336. registerTime: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }// 记录时间(该日0点时间戳)
  337. }, { collection: 'sgjmrrs' });
  338. mdbgoose.model('SGJMRRS', SGJMRRSSchema);
  339. //水果机排行榜信息
  340. var SGJPaiHangSchema = new mdbgoose.Schema({
  341. _id: { type: String }, // 标识
  342. name: { type: String, default: '' }, // 昵称
  343. headurl: { type: String, default: '' }, // 头像
  344. userId: { type: Number }, // 号码
  345. cost1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 最近一天总下注
  346. quan1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 最近一天总得奖券
  347. time1: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 最近游戏那天的0点时间戳
  348. cost2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 次近一天总下注
  349. quan2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 次近一天总得奖券
  350. time2: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, // 次近游戏那天的0点时间戳
  351. registerTime: { type: Number, default: Date.now },// 记录时间
  352. }, { collection: 'sgjpaihang' });
  353. mdbgoose.model('SGJPaiHang', SGJPaiHangSchema);
  354. //水果全局配置信息SGJUserTongji
  355. var SGJConfigSchema = new mdbgoose.Schema({
  356. _id: { type: String, default: 'sgconfigs'}, // 主键
  357. phbyfjlrq: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //排行榜已发奖励的日期(0点时间戳)
  358. istelegram: { type: Number, default: 1 }, //排行榜已发奖励的日期(0点时间戳)
  359. withdrawfee: { type: Number, default: 3 }, //排行榜已发奖励的日期(0点时间戳)
  360. withdrawlowlimit: { type: Number, default: 10 }, //排行榜已发奖励的日期(0点时间戳)
  361. registerUstd:{ type: Number, default: 0 },
  362. coinurl:{ type: String, default:'' },
  363. gamecontrol:{ type: mdbgoose.Schema.Types.Mixed }
  364. }, { collection: 'sgjconfig' });
  365. mdbgoose.model('SGJConfig', SGJConfigSchema);
  366. var UserIdsSchema = new mdbgoose.Schema({
  367. _id: { type: String }, // 主键
  368. userId: { type: Number, default: 0, set: function(value) {return Number(Number(value).toFixed(2));}, get: function(value) {return Number(Number(value).toFixed(2));} }, //排行榜已发奖励的日期(0点时间戳)
  369. }, { collection: 'userids' });
  370. mdbgoose.model('UserIds', UserIdsSchema);
  371. };