setReabte.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. /**
  2. * TL++整个文件
  3. * 此类是和配置文件相关的函数
  4. */
  5. 'use strict';
  6. var quick = require('quick-pomelo');
  7. var P = quick.Promise;
  8. var uuid = require('node-uuid');
  9. var C = require('./constant');
  10. var _ = require('lodash');/////是一个一致性、模块化、高性能的 JavaScript 实用工具库。
  11. var logger = quick.logger.getLogger('fhmj', __filename);
  12. // 构造方法
  13. var setReabte = function (app) {
  14. if(!app) console.error("没有app");
  15. this.app = app;
  16. };
  17. // 导出类
  18. module.exports = setReabte;
  19. // 原型对象
  20. var proto = setReabte.prototype;
  21. // agenter表中字段说明:
  22. // 审核中返利和锁定返利是一个意思,指今日产生的返利,今日产生的返利今日是无法提取的,等到变更为可提现返利之后才能提取
  23. // 日结和解除锁定返利是一个意思,指将之前的审核中返利(verifyRebate)变更到可提现返利(rebateNow)这个操作,
  24. // 推广的日结(解除锁定返利)时机:进入推广后台(推广自己进入推广后台或者管理后台进入推广后台)或者该推广的链接完成一局游戏之后进行
  25. // 是否需要日结根据是否有审核中返利和审核时间进行判断,若需要日结则rebateNow+=verifyRebate; verifyRebate置0
  26. // 最开始时:
  27. // rebateCount:返利合计 = 基础 + 额外 单位是钻石且乘过比例的 在每局结束时增加该局消耗返利在日结时增加额外返利
  28. // rebateAll:自己基础的可提现总返利(不包含额外包含审核中的)单位是钻石且乘过比例的
  29. // rebateNow:可提现返利(已审核的自己基础的+额外的),在日结的时候增加,在提现的时候减少
  30. // rebateOther: 已审核的可提现总额 单位是钻石且乘过额外比例的,在日结的时候增加,此值没有减少的时候,为了记录该推广总的额外返利
  31. // verifyRebate:审核中返利,业绩模式记录的是消耗,在每局结束的时候增加,在日结的时候置0
  32. // rebateOut:已经提现的RMB(单位是分,一分对应rebateNow一个钻石)
  33. // 增加金牌推广员之前:(金牌推广员可以有自己的小组,组员是其他普通推广)
  34. // rebateCount:该推广的总消耗 单位是钻石 在每局结束时增加值为该局消耗
  35. // rebateAll:该推广的总消耗 单位是钻石 在每局结束时增加值为该局消耗
  36. // rebateNow:可提现返利(已审核的自己基础的+额外的),在日结的时候增加,在提现的时候减少
  37. // rebateOther:由于额外比例一直是0所以此值一直为0
  38. // verifyRebate:审核中的基础返利,业绩模式记录的是消耗,在每局结束的时候增加,在日结的时候置0
  39. // rebateOut:已经提现的RMB(单位是分,一分对应rebateNow的1/基础比例个钻石)
  40. // 增加金牌推广员之后:(金牌推广员可以有自己的小组,组员是其他普通推广)
  41. // rebateCount:该推广自己产生的总消耗 单位是钻石
  42. // rebateAll:自己基础的可提现总返利 单位是钻石且乘过比例的 (包括审核中的,每局结束之后修改)
  43. // rebateNow:可提现返利(已审核的自己基础的+额外的),在日结的时候增加,在提现的时候减少
  44. // rebateOther:由于额外比例一直是0所以此值一直为0
  45. // verifyRebate:审核中的基础返利,新模式记录的是消耗*基础比例,在每局结束的时候增加,在日结的时候置0
  46. // rebateOut:已经提现的RMB(单位是分,一分对应rebateNow一个钻石)
  47. // 以下是新加字段
  48. // levelFlag:推广等级0:实习,1:普通推广,2:金牌推广,3:比赛推广,4:传单推广
  49. // enabled:是否可用,0:不可用,1:可用,
  50. // parentAgenterId:上级推广ID,没有上级的此值为""
  51. // parentRate:上级推广的比例,无上级时此值为0,有上级此值才可能不为0
  52. // rebateAll2:自己小组的可提现总返利 单位是钻石且乘过比例的 (包括审核中的,每局结束之后修改)
  53. // rebateNow2:自己小组(下级推广)的可提现返利
  54. // verifyRebate2:自己小组(下级推广)的审核的返利
  55. // rebateOut2 :自己小组(下级推广)的已提现返利
  56. //agenter表中以下字段用来展示和计算额外返利使用的,是根据当时的展示和计算需求设计的,
  57. // 游戏次数用于展示今日(审核中)的额外返利明细,即由哪款游戏的几局房间分别完成的次数*对应的额外比例即可展示今日的额外返利明细
  58. // 哪种游戏几局房对应的游戏次数和消耗在该局完成之后记录,消耗记录的是消耗(没有*比例)
  59. //这些字段只是记录审核当中的,在日结的时候置0,目前没有额外比例所以去掉以下字段
  60. // dateGameTimes02: { type: Number, default: 0 }, // 冲刺游戏次数
  61. // dateGameTimes03: { type: Number, default: 0 }, // 冲刺游戏次数
  62. // dateGameTimes0: { type: Number, default: 0 }, // 冲刺游戏次数
  63. // dateGameTimes42: { type: Number, default: 0 }, // 4局游戏游戏次数
  64. // dateGameTimes43: { type: Number, default: 0 }, // 4局游戏游戏次数
  65. // dateGameTimes4: { type: Number, default: 0 }, // 4局游戏游戏次数
  66. // dateGameTimes82: { type: Number, default: 0 }, // 8局游戏次数
  67. // dateGameTimes83: { type: Number, default: 0 }, // 8局游戏次数
  68. // dateGameTimes8: { type: Number, default: 0 }, // 8局游戏次数
  69. // dateGameTimes162: { type: Number, default: 0 }, // 16局游戏次数
  70. // dateGameTimes163: { type: Number, default: 0 }, // 16局游戏次数
  71. // dateGameTimes164: { type: Number, default: 0 }, // 16局游戏次数
  72. // dateGameCost0: { type: Number, default: 0 }, // 冲刺游戏消耗
  73. // dateGameCost4: { type: Number, default: 0 }, // 4局游戏消耗
  74. // dateGameCost8: { type: Number, default: 0 }, // 8局游戏消耗
  75. // dateGameCost16: { type: Number, default: 0 }, // 16局游戏消耗
  76. //之前的额外返利计算:在日结的时候将各个游戏各个人次的房间的总消耗
  77. // 至少完成1小局之后才能走到这个文件
  78. ////该局有消耗且该局有推广员的话记录该推广的返利信息
  79. proto.writeReabteInfo = P.coroutine(function* (_agentId,_etime,_agentRebate,_gameCost,_giftCost,_recordid,_users,_gameId) {
  80. console.warn("代理返利写分+++++ wj _gameId "+_gameId+" allcost "+_agentRebate +" _agentId "+_agentId);
  81. let agentId = _agentId;
  82. let levelFlag = -1;
  83. let zjrNow = 0;//该推广目前的可提现返利,用来判断是否从实习推广变为正式推广
  84. let parentId = "";
  85. let parentRate = 0;
  86. let endtime = _etime;
  87. let allCost=_agentRebate;//游戏总消耗
  88. let gameCost=_gameCost;//游戏消耗
  89. let giftCost=_giftCost;//礼物消耗
  90. let recordid = _recordid;
  91. let gameId = _gameId;
  92. let nowverifyDate=this.getzdLDSJC(endtime);
  93. // console.warn("代理返利写分+++++ wj22")
  94. var agenter = yield this.app.models.Agenter.findByIdAsync(agentId,'levelFlag parentAgenterId parentRate rewardRate rebateOther rebateCount rebateAll rebateNow rebateOut verifyDate verifyRebate agentRate');
  95. // console.warn("代理返利写分+++++ wj33")
  96. if (agenter)
  97. {
  98. levelFlag = agenter.levelFlag;
  99. parentId = agenter.parentAgenterId;
  100. parentRate = agenter.parentRate;
  101. let rewardRate = agenter.rewardRate;
  102. let jcbl = agenter.rewardRate/100;//本局推广的基础比例
  103. let agentRebate2=parseInt(allCost*jcbl);//本局消耗乘以比例
  104. //日结算
  105. let verifyBool=false;//是否可以进行日结
  106. let verifyDate=0;//日结日期
  107. let verifyRebate=0;//日结数值
  108. let dateAgentRate=0;//额外奖励比例
  109. let dateRebate=0;//额外奖励数值(=额外比例*本局消耗),目前没有额外返利所以这个数值没有计算
  110. if(agenter.verifyRebate>0 && agenter.verifyDate!=nowverifyDate)
  111. {
  112. verifyBool=true;
  113. verifyDate=agenter.verifyDate;
  114. verifyRebate=agenter.verifyRebate;
  115. dateAgentRate=agenter.agentRate;
  116. agenter.rebateNow += verifyRebate;//可提返利+=日结算
  117. agenter.rebateNow += dateRebate;//可提返利+=额外返利
  118. agenter.rebateOther += dateRebate;
  119. agenter.verifyRebate=0;
  120. }
  121. //修改代理数据
  122. agenter.rebateCount += allCost;
  123. agenter.rebateAll += agentRebate2;
  124. agenter.verifyDate=nowverifyDate;
  125. agenter.verifyRebate+= agentRebate2;
  126. zjrNow = agenter.rebateNow;
  127. if(levelFlag == 0){
  128. if(zjrNow >= 1500) {
  129. levelFlag = 1;//从实习变为转正
  130. parentRate = agenter.parentRate;
  131. }
  132. }
  133. agenter.levelFlag = levelFlag;
  134. let rCount=agenter.rebateCount;
  135. let rOther=agenter.rebateOther;
  136. let rAll=agenter.rebateAll;
  137. let rNow=agenter.rebateNow;
  138. let rOut=agenter.rebateOut;
  139. let rVerifyDate=agenter.verifyDate;
  140. let rVerifyRebate=agenter.verifyRebate;
  141. yield agenter.saveAsync();
  142. // console.warn("代理返利写分+++++agenter.saveAsync()");
  143. // 锁定返利记录
  144. if(verifyBool && verifyRebate>0)
  145. {
  146. //至此可以进行日结算了,在奖励记录表里增加日结类型(type=3)的记录,
  147. var verifyrebateRecord = new this.app.models.RebateRecord({
  148. _id: uuid.v1(),
  149. agentId:agentId,
  150. tableId: '',
  151. rType: 3,
  152. rCount: rCount- allCost,
  153. rOther: rOther,
  154. rAll: rAll- agentRebate2,
  155. rNow: rNow,
  156. rOut: rOut,
  157. rSwap: verifyRebate,
  158. rDateSwap: dateRebate,
  159. rVerifyDate: verifyDate,
  160. rVerifyRebate: 0
  161. });
  162. yield verifyrebateRecord.saveAsync();
  163. }
  164. // 返利记录
  165. var rebateRecord = new this.app.models.RebateRecord({
  166. _id: uuid.v1(),
  167. agentId:agentId,
  168. tableId: recordid,
  169. rType: 1,
  170. rCount: rCount,
  171. rOther: rOther,
  172. rAll: rAll,
  173. rNow: rNow,
  174. rOut: rOut,
  175. rSwap: agentRebate2,
  176. rDateSwap: 0,
  177. rVerifyDate: rVerifyDate,
  178. rVerifyRebate: rVerifyRebate
  179. });
  180. yield rebateRecord.saveAsync();
  181. // console.warn("返利记录+++++rebateRecord.saveAsync()");
  182. //上面是记录推广的返利,下面是计算推广的上级返利
  183. // console.warn("返利记录+++++下面是计算推广的上级返利 parentId "+parentId + " levelFlag " + levelFlag + " parentRate " + parentRate);
  184. let pagentRebate2=0;//本局消耗乘以上级比例
  185. if(parentId && levelFlag == 1 && parentRate > 0){
  186. var pagenter = yield this.app.models.Agenter.findByIdAsync(parentId,'levelFlag parentAgenterId parentRate rebateAll2 rebateNow2 verifyRebate2 verifyDate2 rebateOut2 rebateOther rebateCount');
  187. if (pagenter && pagenter.levelFlag == 2)
  188. {
  189. // let parent
  190. // rebateNow2: { type: Number, default: 0 }, // 自己小组(下级推广)的可提现返利
  191. // verifyRebate2: { type: Number, default: 0 }, // 自己小组(下级推广)的审核的返利
  192. // rebateOut2: { type: Number, default: 0 }, // 自己小组(下级推广)的已提现返利
  193. let pjcbl = parentRate/100;//本局上级推广的基础比例
  194. pagentRebate2=parseInt(allCost*pjcbl);//本局消耗乘以上级比例
  195. //日结算
  196. let pverifyBool=false;//上级是否可以进行日结
  197. let pverifyDate=0;//上级日结日期
  198. let pverifyRebate=0;//上级日结数值
  199. if(pagenter.verifyRebate2>0 && pagenter.verifyDate2!=nowverifyDate)
  200. {
  201. pverifyBool=true;
  202. pverifyDate=pagenter.verifyDate2;
  203. pverifyRebate=pagenter.verifyRebate2;
  204. pagenter.rebateNow2 += pverifyRebate;//可提返利+=日结算
  205. pagenter.verifyRebate2=0;
  206. }
  207. //修改代理数据
  208. pagenter.rebateAll2 += pagentRebate2;
  209. pagenter.verifyDate2=nowverifyDate;
  210. pagenter.verifyRebate2+= pagentRebate2;
  211. let prCount=pagenter.rebateCount;
  212. let prOther=pagenter.rebateOther;
  213. let prAll=pagenter.rebateAll2;
  214. let prNow=pagenter.rebateNow2;
  215. let prOut=pagenter.rebateOut2;
  216. let prVerifyDate=pagenter.verifyDate2;
  217. let prVerifyRebate=pagenter.verifyRebate2;
  218. yield pagenter.saveAsync();
  219. // console.warn("代理上级返利写分+++++pagenter.saveAsync()");
  220. // 锁定返利记录
  221. if(pverifyBool && pverifyRebate>0)
  222. {
  223. //至此可以进行日结算了,在奖励记录表里增加日结类型(type=3)的记录,
  224. var pverifyrebateRecord = new this.app.models.RebateRecord({
  225. _id: uuid.v1(),
  226. agentId:parentId,
  227. tableId: '',
  228. rType: 5,
  229. rCount: prCount,
  230. rOther: prOther,
  231. rAll: prAll,
  232. rNow: prNow,
  233. rOut: prOut,
  234. rSwap: pverifyRebate,
  235. rDateSwap: dateRebate,
  236. rVerifyDate: pverifyDate,
  237. rVerifyRebate: 0
  238. });
  239. yield pverifyrebateRecord.saveAsync();
  240. // console.warn("代理上级日结写分+++++pverifyrebateRecord.saveAsync()");
  241. }
  242. // 返利记录
  243. var prebateRecord = new this.app.models.RebateRecord({
  244. _id: uuid.v1(),
  245. agentId:parentId,
  246. tableId: agentId,
  247. rType: 4,
  248. rCount: prCount,
  249. rOther: prOther,
  250. rAll: prAll,
  251. rNow: prNow,
  252. rOut: prOut,
  253. rSwap: pagentRebate2,
  254. rDateSwap: dateRebate,
  255. rVerifyDate: prVerifyDate,
  256. rVerifyRebate: prVerifyRebate
  257. });
  258. yield prebateRecord.saveAsync();
  259. // console.warn("保存该局推广的上级返利增加信息+++++prebateRecord.saveAsync()");
  260. }
  261. }
  262. //下面是该局有消耗且该局有推广员的话记录PlayerCount表
  263. let users = _users;
  264. // console.warn("下面是该局有消耗且该局有推广员的话记录PlayerCount表 "+users.length);
  265. let date=this.getzdLDSJC(endtime)
  266. for (var i = 0; i < users.length; i++) {
  267. if(!users[i]) continue;
  268. let user = users[i];
  269. // console.warn("下面是该局有消耗且该局有推广员的话记录PlayerCount表 user "+JSON.stringify(user));
  270. let cost = user.gameCost+user.giftCost;
  271. let countid=agentId+'-'+user.userId+'-'+date;
  272. let gameRebate = Math.floor(parseInt(cost*jcbl));
  273. var oldplayercount = yield this.app.models.PlayerCount.findByIdAsync(countid,'gameCount gameCost agentRebate time');
  274. if (oldplayercount)
  275. {
  276. oldplayercount.gameCount+=1;
  277. oldplayercount.gameCost+=cost;
  278. oldplayercount.agentRebate+=gameRebate;
  279. oldplayercount.time=Date.now();
  280. yield oldplayercount.saveAsync();
  281. }
  282. else
  283. {
  284. var newplayercount = new this.app.models.PlayerCount({
  285. _id: countid,
  286. agentId:agentId,
  287. playerId: user._id,
  288. userId: user.userId,
  289. name: user.name,
  290. date: date,
  291. gameCount: 1,
  292. gameCost: cost,
  293. agentRebate: gameRebate,
  294. time:Date.now()
  295. });
  296. yield newplayercount.saveAsync();
  297. }
  298. // console.warn("保存该局该玩家的playercount信息+++++playercount.saveAsync()");
  299. }
  300. ////下面是在每一局结束之后统计该局推广员当日信息
  301. let opts = {
  302. agentId: agentId,
  303. verifyDate: nowverifyDate,
  304. };
  305. var rqflList = yield this.app.models.DateRebateRecord.findMongoAsync(opts, 'verifyRebate dateRebate parentRebate allGameCost allGiftCost allGameTimes1 allGameTimes2 allGameTimes3 allGameTimes4 allPlayerCount');
  306. if (rqflList.length < 2){
  307. let allPlayerCount = 0;// 该日期该推广活跃玩家个数
  308. let opts1 = {agentId: agentId,date: nowverifyDate};
  309. allPlayerCount = yield this.app.models.PlayerCount.countMongoAsync(opts1);//由于上面刚刚写入PlayerCount所以这个数据是不准确的
  310. // console.warn("该日期该推广活跃玩家个数111 "+allPlayerCount+" nowverifyDate "+nowverifyDate +" agentId "+agentId);
  311. if (rqflList.length == 0)
  312. {
  313. let allGameCost = gameCost; // 该日期该推广产生的总游戏消耗
  314. let allGiftCost = giftCost; // 该日期该推广产生的总礼物消耗
  315. let allGameTimes1 = 0; // 该日期该推广产生的总游戏次数
  316. let allGameTimes2 = 0; // 该日期该推广产生的总游戏次数
  317. let allGameTimes3 = 0; // 该日期该推广产生的总游戏次数
  318. let allGameTimes4 = 0; // 该日期该推广产生的总游戏次数
  319. if(gameId == 10006) allGameTimes1+=1;// 湖南长沙
  320. else if(gameId == 10007) allGameTimes2+=1;// 湖南红中
  321. else if(gameId == 10008) allGameTimes3+=1; // 湖南跑得快
  322. else if(gameId == 10009) allGameTimes4+=1; // 湖南跑胡子
  323. var newdaterebateRecord = new this.app.models.DateRebateRecord({
  324. _id: uuid.v1(), // UUID
  325. agentId:agentId, // 代理标识
  326. verifyDate: nowverifyDate, // 数据的日期
  327. verifyRebate: agentRebate2, // 该日期自己的返利,单位是钻石,已乘过自己比例
  328. dateAgentRate: dateAgentRate, // 该日期额外返利的比例
  329. dateRebate: dateRebate, // 该日期 额外返利金额
  330. dateRewardRate: rewardRate, // 该日期该推广自己的返利的比例
  331. parentaId: parentId, // 代理上级的标识
  332. dateParentRate: parentRate, // 该日期该推广上级的返利的比例
  333. parentRebate: pagentRebate2, // 该日期 该推广上级的返利金额
  334. allGameCost: allGameCost, // 该日期该推广产生的总游戏消耗
  335. allGiftCost: allGiftCost, // 该日期该推广产生的总礼物消耗
  336. allGameTimes1: allGameTimes1, // 该日期该推广产生的总游戏1次数
  337. allGameTimes2: allGameTimes2, // 该日期该推广产生的总游戏2次数
  338. allGameTimes3: allGameTimes3, // 该日期该推广产生的总游戏3次数
  339. allGameTimes4: allGameTimes4, // 该日期该推广产生的总游戏4次数
  340. allPlayerCount: allPlayerCount, // 该日期该推广活跃玩家个数
  341. });
  342. yield newdaterebateRecord.saveAsync();
  343. }
  344. else if (rqflList.length == 1)
  345. {
  346. rqflList[0].verifyRebate += agentRebate2;
  347. rqflList[0].dateRebate += dateRebate;
  348. rqflList[0].parentRebate += pagentRebate2;
  349. rqflList[0].allGameCost += gameCost;
  350. rqflList[0].allGiftCost += giftCost;
  351. if(gameId == 10006) rqflList[0].allGameTimes1+=1;// 湖南长沙
  352. else if(gameId == 10007) rqflList[0].allGameTimes2+=1;// 湖南红中
  353. else if(gameId == 10008) rqflList[0].allGameTimes3+=1; // 湖南跑得快
  354. else if(gameId == 10004) rqflList[0].allGameTimes4+=1; // 湖南跑胡子
  355. rqflList[0].allPlayerCount = allPlayerCount;//活跃人数
  356. yield rqflList[0].saveAsync();
  357. }
  358. }
  359. else{
  360. let str3 = "该局推广员当日信息错误.......gameId: "+ gameId + " recordid: " + recordid + " agentId: " + agentId + " endtime: " + endtime;
  361. logger.warn(str3);////cssj
  362. }
  363. ////上面是在每一局结束之后统计该局推广员当日信息
  364. ////下面是按照日结的方式第二天统计前一天的推广员当日信息
  365. // if(verifyBool && verifyRebate>0)
  366. // {
  367. // //在可以日结的时候记录日结日期返利记录表里增加记录
  368. // let parentRebate = 0; // 该日期 该推广上级的返利金额
  369. // let allGameCost = 0; // 该日期该推广产生的总游戏消耗
  370. // let allGiftCost = 0; // 该日期该推广产生的总礼物消耗
  371. // let allGameTimes1 = 0; // 该日期该推广产生的总游戏次数
  372. // let allGameTimes2 = 0; // 该日期该推广产生的总游戏次数
  373. // let allGameTimes3 = 0; // 该日期该推广产生的总游戏次数
  374. // let allGameTimes4 = 0; // 该日期该推广产生的总游戏次数
  375. // let allPlayerCount = 0;// 该日期该推广活跃玩家个数
  376. // let opts1 = {
  377. // agentId: agentId,
  378. // time: { $gte: verifyDate, $lt: verifyDate+86400000}
  379. // };
  380. // var jrList1 = yield this.app.models.FHMJTables.findMongoAsync(opts1, 'gameId gameCost giftCost');
  381. // for (let i = 0; i < jrList1.length; i++){
  382. // allGameCost += jrList1[i].gameCost; // 该日期该推广产生的总游戏消耗
  383. // allGiftCost += jrList1[i].giftCost; // 该日期该推广产生的总礼物消耗
  384. // if(jrList1[i].gameId == 10006) allGameTimes1+=1;// 湖南长沙
  385. // else if(jrList1[i].gameId == 10007) allGameTimes2+=1;// 湖南红中
  386. // else if(jrList1[i].gameId == 10008) allGameTimes3+=1; // 湖南跑得快
  387. // else if(jrList1[i].gameId == 10009) allGameTimes4+=1; // 湖南跑胡子
  388. // }
  389. // let opts = {agentId: agentId,date: verifyDate};
  390. // allPlayerCount = yield this.app.models.PlayerCount.countMongoAsync(opts)
  391. // let opts2 = {
  392. // agentId: parentId,
  393. // rType: 4,
  394. // tableId: agentId,
  395. // rVerifyDate: { $gte: verifyDate, $lt: verifyDate+86400000}
  396. // };
  397. // var jrList2 = yield this.app.models.RebateRecord.findMongoAsync(opts2, 'gameId gameCost giftCost');
  398. // for (let i = 0; i < jrList2.length; i++){
  399. // parentRebate += jrList2[i].rSwap; // 该日期该推广给上级产生的贡献
  400. // }
  401. // var daterebateRecord = new this.app.models.DateRebateRecord({
  402. // _id: uuid.v1(),
  403. // agentId:agentId,
  404. // verifyDate: verifyDate,
  405. // verifyRebate: verifyRebate,
  406. // dateAgentRate: dateAgentRate,
  407. // dateRebate: dateRebate,
  408. // dateRewardRate: rewardRate, // 进行日结当日该推广自己的返利的比例
  409. // parentaId: parentId, // 代理上级的标识
  410. // dateParentRate: parentRate, // 进行日结当日该推广上级的返利的比例
  411. // parentRebate: parentRebate, // 该日期 该推广上级的返利金额
  412. // allGameCost: allGameCost, // 该日期该推广产生的总游戏消耗
  413. // allGiftCost: allGiftCost, // 该日期该推广产生的总礼物消耗
  414. // allGameTimes1: allGameTimes1, // 该日期该推广产生的总游戏1次数
  415. // allGameTimes2: allGameTimes2, // 该日期该推广产生的总游戏2次数
  416. // allGameTimes3: allGameTimes3, // 该日期该推广产生的总游戏3次数
  417. // allGameTimes4: allGameTimes4, // 该日期该推广产生的总游戏4次数
  418. // allPlayerCount: allPlayerCount, // 该日期该推广活跃玩家个数
  419. // });
  420. // yield daterebateRecord.saveAsync();
  421. // console.warn("保存该局推广的日统计+++++daterebateRecord.saveAsync()");
  422. // }
  423. }
  424. let str4 = "该局推广数据写入完成.......gameId: "+ gameId + " recordid: " + recordid + " agentId: " + agentId + " endtime: " + endtime;
  425. logger.warn(str4);////cssj
  426. // return true;
  427. });
  428. ////该局有消耗且该局有推广员的话记录PlayerCount表
  429. // proto.writePlayerCountInfo = P.coroutine(function* (_agentId,_etime,_users,_cost,_isGameOk,_gameId) {
  430. // console.warn("该局有消耗且该局有推广员的话记录PlayerCount表 _gameId "+_gameId+" _cost "+_cost+" _isGameOk "+_isGameOk)
  431. // console.warn("该局有消耗且该局有推广员的话记录PlayerCount表 _users "+JSON.stringify(_users))
  432. // let agentId = _agentId;
  433. // let endtime = _etime;
  434. // let users = _users;
  435. // let cost = _cost;
  436. // let date=this.getzdLDSJC(endtime)
  437. // for (var i = 0; i < users.length; i++) {
  438. // if(!users[i]) continue;
  439. // let user = users[i];
  440. // let countid=agentId+'-'+user.userId+'-'+date;
  441. // var playercount = yield this.app.models.PlayerCount.findByIdAsync(countid,'gameCount gameCost agentRebate time');
  442. // if (playercount)
  443. // {
  444. // playercount.gameCount+=1;
  445. // playercount.gameCost+=cost;
  446. // playercount.agentRebate+=gameRebate;
  447. // playercount.time=Date.now();
  448. // }
  449. // else
  450. // {
  451. // playercount = new this.app.models.PlayerCount({
  452. // _id: countid,
  453. // agentId:agentId,
  454. // playerId: user._id,
  455. // userId: user.userId,
  456. // name: user.name,
  457. // date: date,
  458. // gameCount: 1,
  459. // gameCost: cost,
  460. // agentRebate: gameRebate,
  461. // time:Date.now()
  462. // });
  463. // }
  464. // yield playercount.saveAsync();
  465. // }
  466. // return true;
  467. // });
  468. //在玩家站起的时候更新该局推广员当日信息表中的allPlayerCount数据,
  469. //原因是游戏结束的时候写入这个表之前刚刚写过playerCount这个表,导致读取playerCount的数据不准确(没有本局的数据),
  470. //所以在玩家站起之后再读取playerCount去更新该局推广员当日信息表中的allPlayerCount数据
  471. proto.updateDaterebateRecord = P.coroutine(function* (_agentId,_etime) {
  472. let agentId = _agentId;
  473. let endtime = _etime;
  474. let nowverifyDate=this.getzdLDSJC(endtime);
  475. let opts = {
  476. agentId: agentId,
  477. verifyDate: nowverifyDate,
  478. };
  479. var rqflList = yield this.app.models.DateRebateRecord.findMongoAsync(opts, 'allPlayerCount');
  480. if (rqflList.length < 2){
  481. let allPlayerCount = 0;// 该日期该推广活跃玩家个数
  482. let opts1 = {agentId: agentId,date: nowverifyDate};
  483. allPlayerCount = yield this.app.models.PlayerCount.countMongoAsync(opts1)
  484. // console.warn("该日期该推广活跃玩家个数222 "+allPlayerCount+" nowverifyDate "+nowverifyDate +" agentId "+agentId);
  485. if (rqflList.length == 1)
  486. {
  487. // console.warn("该日期该推广活跃玩家个数333 "+allPlayerCount+" rqflList[0].allPlayerCount "+rqflList[0].allPlayerCount );
  488. if(rqflList[0].allPlayerCount != allPlayerCount){
  489. rqflList[0].allPlayerCount = allPlayerCount;//活跃人数
  490. yield rqflList[0].saveAsync();
  491. // console.warn("该日期该推广活跃玩家个数333 ");
  492. }
  493. }
  494. }
  495. else{
  496. let str3 = "该局推广员当日信息错误222.......gameId: "+ gameId + " recordid: " + recordid + " agentId: " + agentId + " endtime: " + endtime;
  497. logger.warn(str3);////cssj
  498. }
  499. return true;
  500. });
  501. //TL++,得到指定时间戳(_time)当日0点的时间戳
  502. proto.getzdLDSJC = function (_time){
  503. var today = new Date(_time);
  504. today.setHours(0);
  505. today.setMinutes(0);
  506. today.setSeconds(0);
  507. today.setMilliseconds(0);
  508. let jrsjc = today.getTime();
  509. // console.warn("111得到今日0点的时间戳 ",jrsjc, typeof jrsjc);
  510. return jrsjc;
  511. };
  512. //TL++,得到今日0点的时间戳
  513. proto.getTodaySJC = function (){
  514. var today = new Date();
  515. today.setHours(0);
  516. today.setMinutes(0);
  517. today.setSeconds(0);
  518. today.setMilliseconds(0);
  519. let jrsjc = today.getTime();
  520. // console.warn("111得到今日0点的时间戳 ",jrsjc, typeof jrsjc);
  521. return jrsjc;
  522. };
  523. //TL++,得到是否是比赛链接
  524. proto.getIsBS = function (agentId,ownerName,ownerUid){
  525. let aidsub = agentId.substr(0, 9);
  526. let bsIndex = aidsub.indexOf("promote_");
  527. if(bsIndex != -1 && ownerName == "系统比赛" && ownerUid == 0) return true;
  528. return false;
  529. };