ProfitWifiHelper.cs 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Data;
  5. using MySystem.PxcModels;
  6. using Library;
  7. namespace MySystem
  8. {
  9. public class ProfitWifiHelper
  10. {
  11. public readonly static ProfitWifiHelper Instance = new ProfitWifiHelper();
  12. private ProfitWifiHelper()
  13. {
  14. }
  15. #region 获取分润规则Id
  16. public int GetLevelKindId(int BrandId, int Help, int BankCardType)
  17. {
  18. return RedisDbconn.Instance.Get<int>("pobjlv:kid:" + BrandId + ":" + Help + ":" + BankCardType);
  19. }
  20. #endregion
  21. #region POS分润算法
  22. public void StatProfiting()
  23. {
  24. string Month = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  25. string check = function.ReadInstance("/ProfitStat/" + Month + "-1-wifi.txt");
  26. if (!string.IsNullOrEmpty(check))
  27. {
  28. return;
  29. }
  30. function.WritePage("/ProfitStat/", Month + "-1-wifi.txt", DateTime.Now.ToString());
  31. try
  32. {
  33. WebCMSEntities db = new WebCMSEntities();
  34. List<int> BrandIds = new List<int>();
  35. BrandIds.Add(23);
  36. BrandIds.Add(24);
  37. BrandIds.Add(25);
  38. BrandIds.Add(26);
  39. foreach (int i in BrandIds) //品牌
  40. {
  41. int PageNum = 1;
  42. bool op = true;
  43. while(op)
  44. {
  45. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "BrandId:" + i + ",BankCardType:" + j + ",Month:" + Month + ",PageNum:" + PageNum, "WIFI分润监控日志");
  46. List<ProfitResult> result = result = StartProftForPosByDate(i, Month, PageNum);
  47. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "result:" + result.Count, "WIFI分润监控日志");
  48. function.WriteLog("\r\n", "WIFI分润监控日志");
  49. if(result.Count > 0)
  50. {
  51. foreach (ProfitResult sub in result)
  52. {
  53. int TopUserId = 0;
  54. if (!string.IsNullOrEmpty(sub.UserNav))
  55. {
  56. string[] UserNavList = sub.UserNav.Trim(',').Replace(",,", ",").Split(',');
  57. if (UserNavList.Length > 1)
  58. {
  59. TopUserId = int.Parse(UserNavList[1]);
  60. }
  61. else
  62. {
  63. TopUserId = int.Parse(UserNavList[0]);
  64. }
  65. }
  66. string RecordNo = "P" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
  67. decimal ProfitAmt = sub.Money;
  68. decimal TradeAmt = sub.TradeAmount;
  69. decimal ProfitRate = sub.ProfitRate;
  70. if (sub.IsSubsidy == 1 && j == 1)
  71. {
  72. }
  73. else
  74. {
  75. decimal CreditTradeAmt = 0;
  76. decimal CreditTradeProfit = 0;
  77. decimal QrCreditTradeAmt = 0;
  78. decimal QrCreditProfitRate = 0;
  79. decimal QrCreditProfitStandardRate = 0;
  80. decimal QrCreditAddOrSubRate = 0;
  81. decimal QrCreditTradeProfit = 0;
  82. decimal NonQrCreditTradeAmt = 0;
  83. decimal NotHelpCreditTradeAmt = 0;
  84. decimal NotHelpCreditTradeProfit = 0;
  85. decimal NotHelpCreditProfitRate = 0;
  86. decimal NotHelpCreditProfitStandardRate = 0;
  87. decimal NotHelpCreditAddOrSubRate = 0;
  88. decimal HelpCreditTradeAmt = 0;
  89. decimal NonQrCreditTradeProfit = 0;
  90. decimal HelpCreditTradeProfit = 0;
  91. decimal HelpCreditProfitRate = 0;
  92. decimal HelpCreditProfitStandardRate = 0;
  93. decimal HelpCreditAddOrSubRate = 0;
  94. decimal DebitNonCapTradeAmt = 0;
  95. decimal DebitCapTradeAmt = 0;
  96. decimal QrDebitNotCapTradeAmt = 0;
  97. decimal NonQrDebitNotCapTradeAmt = 0;
  98. decimal NotHelpDebitNonCapTradeAmt = 0;
  99. decimal HelpDebitNonCapTradeAmt = 0;
  100. decimal DebitNonTradeCapProfit = 0;
  101. decimal QrDebitNonTradeCapProfit = 0;
  102. decimal NonQrDebitNonTradeCapProfit = 0;
  103. decimal NotHelpDebitNonTradeCapProfit = 0;
  104. decimal HelpDebitNonTradeCapProfit = 0;
  105. decimal DebitTradeCapProfit = 0;
  106. decimal NotHelpDebitProfitRate = 0;
  107. decimal NotHelpDebitProfitStandardRate = 0;
  108. decimal NotHelpDebitAddOrSubRate = 0;
  109. decimal HelpDebitProfitRate = 0;
  110. decimal HelpDebitProfitStandardRate = 0;
  111. decimal HelpDebitAddOrSubRate = 0;
  112. decimal DebitCapSingleReward = 0;
  113. decimal QrDebitProfitRate = 0;
  114. decimal QrDebitProfitStandardRate = 0;
  115. decimal QrDebitAddOrSubRate = 0;
  116. decimal ProfitCreditTradeProfit = 0;
  117. decimal ProfitCreditProfitRate = 0;
  118. decimal ProfitCreditTradeAmt = 0;
  119. decimal ProfitCreditTradeProfit2 = 0;
  120. decimal ProfitCreditProfitRate2 = 0;
  121. decimal ProfitCreditTradeAmt2 = 0;
  122. decimal ProfitDebitNonCapTradeAmt = 0;
  123. decimal ProfitDebitNonTradeCapProfit = 0;
  124. decimal ProfitDebitProfitRate = 0;
  125. if (j == 1)
  126. {
  127. CreditTradeAmt = TradeAmt; //贷记卡交易总金额
  128. CreditTradeProfit = ProfitAmt; //贷记卡分润总金额
  129. if (sub.QrPayFlag == 1)
  130. {
  131. QrCreditTradeAmt = TradeAmt; //(云闪付)贷记卡交易总金额
  132. QrCreditProfitRate = ProfitRate; //(云闪付)贷记卡交易分润比例
  133. QrCreditTradeProfit = ProfitAmt; //(云闪付)贷记卡交易分润
  134. }
  135. else
  136. {
  137. NonQrCreditTradeAmt = TradeAmt; //(非云闪付)贷记卡交易总金额
  138. NonQrCreditTradeProfit = ProfitAmt; //(非云闪付)贷记卡交易分润
  139. if(sub.HelpFlag == 1)
  140. {
  141. HelpCreditTradeProfit = ProfitAmt; //(扶持期)(非云闪付)贷记卡分润总金额
  142. HelpCreditProfitRate = ProfitRate; //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
  143. HelpCreditTradeAmt = TradeAmt; //(扶持期)(非云闪付)贷记卡交易总金额
  144. }
  145. else if(sub.HelpFlag == 2)
  146. {
  147. ProfitCreditTradeProfit = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
  148. ProfitCreditProfitRate = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  149. ProfitCreditTradeAmt = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
  150. }
  151. else if(sub.HelpFlag == 3)
  152. {
  153. ProfitCreditTradeProfit2 = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
  154. ProfitCreditProfitRate2 = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  155. ProfitCreditTradeAmt2 = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
  156. }
  157. else
  158. {
  159. NotHelpCreditTradeAmt = TradeAmt; //(非扶持期)(非云闪付)贷记卡交易总金额
  160. NotHelpCreditTradeProfit = ProfitAmt; //(非扶持期)(非云闪付)贷记卡分润总金额
  161. NotHelpCreditProfitRate = ProfitRate; //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
  162. }
  163. }
  164. }
  165. if (j == 0)
  166. {
  167. if (sub.Money < 1)
  168. {
  169. DebitNonCapTradeAmt = TradeAmt; //商户非封顶借记卡交易总额
  170. DebitNonTradeCapProfit = ProfitAmt; //借记卡非封顶交易分润总金额
  171. }
  172. else
  173. {
  174. DebitCapTradeAmt = TradeAmt; //商户借记卡封顶交易总额
  175. DebitCapSingleReward = ProfitAmt; //借记卡合伙人直营封顶交易奖励金额
  176. DebitTradeCapProfit = ProfitAmt; //借记卡封顶交易分润总金额
  177. }
  178. if (sub.QrPayFlag == 1)
  179. {
  180. if (sub.Money < 1)
  181. {
  182. QrDebitNotCapTradeAmt = TradeAmt; //(云闪付)商户非封顶借记卡交易总额
  183. QrDebitProfitRate = ProfitRate; //(云闪付)借记卡非封顶交易分润比例
  184. QrDebitNonTradeCapProfit = ProfitAmt; //(云闪付)借记卡非封顶交易分润总金额
  185. }
  186. }
  187. else
  188. {
  189. if (sub.Money < 1)
  190. {
  191. NonQrDebitNonTradeCapProfit = ProfitAmt; //(非云闪付)借记卡非封顶交易分润总金额
  192. NonQrDebitNotCapTradeAmt = TradeAmt; //(非云闪付)商户非封顶借记卡交易总额
  193. }
  194. if (sub.HelpFlag == 1)
  195. {
  196. if (sub.Money < 1)
  197. {
  198. HelpDebitNonCapTradeAmt = TradeAmt; //(扶持期)(非云闪付)借记卡非封顶交易总金额
  199. HelpDebitNonTradeCapProfit = ProfitAmt; //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
  200. }
  201. HelpDebitProfitRate = ProfitRate; //(扶持期)(非云闪付)借记卡商户交易对应分润比例
  202. }
  203. else if (sub.HelpFlag >= 2)
  204. {
  205. if (sub.Money < 1)
  206. {
  207. ProfitDebitNonCapTradeAmt = TradeAmt; //(盈利期)(非云闪付)借记卡非封顶交易总金额
  208. ProfitDebitNonTradeCapProfit = ProfitAmt; //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
  209. }
  210. ProfitDebitProfitRate = ProfitRate; //(盈利期)(非云闪付)借记卡商户交易对应分润比例
  211. }
  212. else
  213. {
  214. if (sub.Money < 1)
  215. {
  216. NotHelpDebitNonCapTradeAmt = TradeAmt; //(非扶持期)(非云闪付)借记卡非封顶交易总金额
  217. NotHelpDebitNonTradeCapProfit = ProfitAmt; //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
  218. }
  219. NotHelpDebitProfitRate = ProfitRate; //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
  220. }
  221. }
  222. }
  223. db.ProfitRewardRecord.Add(new ProfitRewardRecord()
  224. {
  225. Version = 1,
  226. CreateDate = DateTime.Now,
  227. UpdateDate = DateTime.Now,
  228. UserId = sub.UserId, //创客
  229. MerchantId = sub.MerchantId, //商户
  230. BrandId = sub.BrandId, //品牌
  231. ProfitType = sub.DirectFlag, //创客分润类型
  232. TradeAmt = sub.TradeAmount, //商户交易总额
  233. TradeProfit = sub.Money, //交易分润
  234. TradeMonth = Month, //交易月
  235. RecordNo = RecordNo, //记录单号
  236. TopUserId = TopUserId, //顶级创客
  237. CreditTradeAmt = CreditTradeAmt, //贷记卡交易总金额
  238. QrCreditTradeAmt = QrCreditTradeAmt, //(云闪付)贷记卡交易总金额
  239. NonQrCreditTradeAmt = NonQrCreditTradeAmt, //(非云闪付)贷记卡交易总金额
  240. NotHelpCreditTradeAmt = NotHelpCreditTradeAmt, //(非扶持期)(非云闪付)贷记卡交易总金额
  241. HelpCreditTradeAmt = HelpCreditTradeAmt, //(扶持期)(非云闪付)贷记卡交易总金额
  242. DebitNonCapTradeAmt = DebitNonCapTradeAmt, //商户非封顶借记卡交易总额
  243. QrDebitNotCapTradeAmt = QrDebitNotCapTradeAmt, //(云闪付)商户非封顶借记卡交易总额
  244. NonQrDebitNotCapTradeAmt = NonQrDebitNotCapTradeAmt, //(非云闪付)商户非封顶借记卡交易总额
  245. NotHelpDebitNonCapTradeAmt = NotHelpDebitNonCapTradeAmt, //(非扶持期)(非云闪付)借记卡非封顶交易总金额
  246. HelpDebitNonCapTradeAmt = HelpDebitNonCapTradeAmt, //(扶持期)(非云闪付)借记卡非封顶交易总金额
  247. DebitCapTradeAmt = DebitCapTradeAmt, //商户借记卡封顶交易总额
  248. CreditTradeProfit = CreditTradeProfit, //贷记卡分润总金额
  249. QrCreditTradeProfit = QrCreditTradeProfit, //(云闪付)贷记卡交易分润
  250. NonQrCreditTradeProfit = NonQrCreditTradeProfit, //(非云闪付)贷记卡交易分润
  251. NotHelpCreditTradeProfit = NotHelpCreditTradeProfit, //(非扶持期)(非云闪付)贷记卡分润总金额
  252. HelpCreditTradeProfit = HelpCreditTradeProfit, //(扶持期)(非云闪付)贷记卡分润总金额
  253. DebitNonTradeCapProfit = DebitNonTradeCapProfit, //借记卡非封顶交易分润总金额
  254. QrDebitNonTradeCapProfit = QrDebitNonTradeCapProfit, //(云闪付)借记卡非封顶交易分润总金额
  255. NonQrDebitNonTradeCapProfit = NonQrDebitNonTradeCapProfit, //(非云闪付)借记卡非封顶交易分润总金额
  256. NotHelpDebitNonTradeCapProfit = NotHelpDebitNonTradeCapProfit, //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
  257. HelpDebitNonTradeCapProfit = HelpDebitNonTradeCapProfit, //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
  258. DebitTradeCapProfit = DebitTradeCapProfit, //借记卡封顶交易分润总金额
  259. NotHelpCreditProfitRate = NotHelpCreditProfitRate, //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
  260. NotHelpCreditProfitStandardRate = NotHelpCreditProfitStandardRate, //(非扶持期)(非云闪付)贷记卡标准分润比例
  261. NotHelpCreditAddOrSubRate = NotHelpCreditAddOrSubRate, //(非扶持期)(非云闪付)贷记卡成本或增或减比例
  262. HelpCreditProfitRate = HelpCreditProfitRate, //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
  263. HelpCreditProfitStandardRate = HelpCreditProfitStandardRate, //(扶持期)(非云闪付)贷记卡-标准分润比例
  264. HelpCreditAddOrSubRate = HelpCreditAddOrSubRate, //(扶持期)(非云闪付)贷记卡成本或增或减比例
  265. NotHelpDebitProfitRate = NotHelpDebitProfitRate, //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
  266. NotHelpDebitProfitStandardRate = NotHelpDebitProfitStandardRate, //(非扶持期)(非云闪付)借记卡标准分润比例
  267. NotHelpDebitAddOrSubRate = NotHelpDebitAddOrSubRate, //(非扶持期)(非云闪付)借记卡成本或增或减比例
  268. HelpDebitProfitRate = HelpDebitProfitRate, //(扶持期)(非云闪付)借记卡商户交易对应分润比例
  269. HelpDebitProfitStandardRate = HelpDebitProfitStandardRate, //(扶持期)(非云闪付)借记卡-标准分润比例
  270. HelpDebitAddOrSubRate = HelpDebitAddOrSubRate, //(扶持期)(非云闪付)借记卡成本或增或减比例
  271. DebitCapSingleReward = DebitCapSingleReward, //借记卡合伙人直营封顶交易奖励金额
  272. QrCreditProfitRate = QrCreditProfitRate, //(云闪付)贷记卡交易分润比例
  273. QrCreditProfitStandardRate = QrCreditProfitStandardRate, //(云闪付)贷记卡分润基准
  274. QrCreditAddOrSubRate = QrCreditAddOrSubRate, //(云闪付)贷记卡分润比例或增或减
  275. QrDebitProfitRate = QrDebitProfitRate, //(云闪付)借记卡非封顶交易分润比例
  276. QrDebitProfitStandardRate = QrDebitProfitStandardRate, //(云闪付)借记卡非封顶交易分润基准
  277. QrDebitAddOrSubRate = QrDebitAddOrSubRate, //(云闪付)借记卡非封顶交易分润比例或增或减
  278. ProfitCreditTradeProfit = ProfitCreditTradeProfit, //(盈利期)(非云闪付)贷记卡分润总金额
  279. ProfitCreditProfitRate = ProfitCreditProfitRate, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  280. ProfitCreditTradeAmt = ProfitCreditTradeAmt, //(盈利期)(非云闪付)贷记卡交易总金额
  281. ProfitCreditTradeProfit2 = ProfitCreditTradeProfit2, //(盈利期)(非云闪付)贷记卡分润总金额
  282. ProfitCreditProfitRate2 = ProfitCreditProfitRate2, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  283. ProfitCreditTradeAmt2 = ProfitCreditTradeAmt2, //(盈利期)(非云闪付)贷记卡交易总金额
  284. ProfitDebitNonCapTradeAmt = ProfitDebitNonCapTradeAmt, //(盈利期)(非云闪付)借记卡非封顶交易总金额
  285. ProfitDebitNonTradeCapProfit = ProfitDebitNonTradeCapProfit, //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
  286. ProfitDebitProfitRate = ProfitDebitProfitRate, //(盈利期)(非云闪付)借记卡商户交易对应分润比例
  287. });
  288. // db.SaveChanges();
  289. }
  290. }
  291. db.SaveChanges();
  292. PageNum += 1;
  293. }
  294. else
  295. {
  296. op = false;
  297. }
  298. }
  299. }
  300. db.Dispose();
  301. }
  302. catch(Exception ex)
  303. {
  304. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "WIFI分润监控异常");
  305. }
  306. }
  307. public List<ProfitResult> StartProftForPosByDate(int BrandId, string Month, int PageNum = 1)
  308. {
  309. int PageSize = 200;
  310. int SkipNum = (PageNum - 1) * PageSize;
  311. string LimitString = " limit " + PageSize;
  312. if(PageNum > 1)
  313. {
  314. LimitString = " limit " + SkipNum + "," + PageSize;
  315. }
  316. List<ProfitResult> result = new List<ProfitResult>();
  317. ProfitObjects obj = RedisDbconn.Instance.Get<ProfitObjects>("pobj1");
  318. if (obj.Status == 1) //判断分润是否开启
  319. {
  320. string sqlstr = "select UserId,HelpDirectTradeAmt from TradeDaySummary where TradeMonth=" + Month + " and BrandId=" + BrandId + LimitString;
  321. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "WIFI分润监控日志");
  322. DataTable dt = GetDataTable(sqlstr);
  323. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "WIFI分润监控日志");
  324. if(dt.Rows.Count > 0)
  325. {
  326. foreach (DataRow dr in dt.Rows)
  327. {
  328. WebCMSEntities dbnew = new WebCMSEntities();
  329. try
  330. {
  331. int UserId = int.Parse(dr["UserId"].ToString());
  332. int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
  333. List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
  334. SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
  335. int Days = int.Parse(RedisDbconn.Instance.Get<string>("pobjrule:1:HelpPolicy:Days")); //天数
  336. if (BankCardType == 0)
  337. {
  338. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":借记卡", "WIFI分润监控日志");
  339. decimal HelpDirectDebitTradeAmt = decimal.Parse(dr[2].ToString()); //借记卡扶持期交易额
  340. decimal NotHelpDirectDebitTradeAmt = decimal.Parse(dr[3].ToString()); //借记卡稳定期交易额
  341. decimal ProfitDirectDebitTradeAmt = decimal.Parse(dr[8].ToString()); //借记卡扶持期交易额
  342. decimal HelpDirectDebitCapTradeAmt = decimal.Parse(dr[4].ToString()); //借记卡扶持期封顶交易额
  343. decimal NotHelpDirectDebitCapTradeAmt = decimal.Parse(dr[5].ToString()); //借记卡稳定期封顶交易额
  344. decimal ProfitDirectDebitCapTradeAmt = decimal.Parse(dr[9].ToString()); //借记卡扶持期封顶交易额
  345. int HelpDirectDebitCapNum = int.Parse(dr[6].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
  346. int NotHelpDirectDebitCapNum = int.Parse(dr[7].ToString().Split('.')[0]); //借记卡稳定期封顶交易笔数
  347. int ProfitDirectDebitCapNum = int.Parse(dr[10].ToString().Split('.')[0]); //借记卡扶持期封顶交易笔数
  348. int UserLevel = selfUser.UserLevel; //当前会员等级
  349. decimal getLevelProfit = (HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt + ProfitDirectDebitTradeAmt - HelpDirectDebitCapTradeAmt - NotHelpDirectDebitCapTradeAmt - ProfitDirectDebitCapTradeAmt) * 0.0006M + HelpDirectDebitCapNum + NotHelpDirectDebitCapNum + ProfitDirectDebitCapNum;
  350. result.Add(new ProfitResult()
  351. {
  352. UserId = selfUser.Id,
  353. UserNav = selfUser.ParentNav,
  354. Money = PublicFunction.NumberFormat(getLevelProfit),
  355. ProfitRate = 0.0006M,
  356. Message = "储蓄卡分润",
  357. BankCardType = BankCardType,
  358. QrPayFlag = QrPayFlag,
  359. BrandId = BrandId,
  360. DirectFlag = 1,
  361. IsSubsidy = 0,
  362. TradeAmount = HelpDirectDebitTradeAmt + NotHelpDirectDebitTradeAmt + ProfitDirectDebitTradeAmt,
  363. });
  364. }
  365. else
  366. {
  367. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":贷记卡", "WIFI分润监控日志");
  368. decimal HelpDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡扶持期交易额
  369. decimal NotHelpDirectTradeAmt = decimal.Parse(dr[3].ToString()); //贷记卡稳定期交易额
  370. decimal ProfitDirectTradeAmt = decimal.Parse(dr[4].ToString()); //贷记卡盈利期期交易额
  371. int maxLevel = obj.MaxLevel; //最大等级
  372. decimal diffLevelProfit = 0; //等级级差
  373. int curLevel = 0; //当前层级的会员等级
  374. string ParentNav = selfUser.ParentNav;
  375. if (string.IsNullOrEmpty(ParentNav))
  376. {
  377. ParentNav = ",0,";
  378. }
  379. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "WIFI分润监控日志");
  380. if (!string.IsNullOrEmpty(ParentNav))
  381. {
  382. ParentNav += "," + UserId + ",";
  383. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  384. Array.Reverse(ParentNavList); //反转顺序
  385. int level = 0;
  386. DateTime now = DateTime.Now;
  387. DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  388. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":扶持期:" + HelpDirectTradeAmt, "WIFI分润监控日志");
  389. if (HelpDirectTradeAmt > 0)
  390. {
  391. level = 0;
  392. curLevel = 0;
  393. diffLevelProfit = 0; //等级级差
  394. decimal checkProfit = HelpDirectTradeAmt * 0.0012M;
  395. decimal curProfit = 0;
  396. foreach (string UserIdString in ParentNavList)
  397. {
  398. level += 1;
  399. int uid = int.Parse(UserIdString);
  400. SubUser user = GetUser(uid, Month) ?? new SubUser();
  401. int UserLevel = GetUserLevel(user); //当前会员等级
  402. if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
  403. {
  404. break;
  405. }
  406. if (UserLevel <= maxLevel && UserLevel >= curLevel)
  407. {
  408. int LevelKindId = GetLevelKindId(1, 1, 1);
  409. ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
  410. if (objlevel != null)
  411. {
  412. decimal getLevelProfit = 0; //等级分润
  413. if (objlevel.Percents > 0)
  414. {
  415. //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
  416. getLevelProfit += HelpDirectTradeAmt * objlevel.Percents;
  417. }
  418. if (objlevel.AddProfitVal > 0)
  419. {
  420. getLevelProfit += objlevel.AddProfitVal;
  421. }
  422. decimal money = getLevelProfit;
  423. getLevelProfit -= diffLevelProfit;
  424. if (objlevel.LevelDiff == 1) //判断是否有级差
  425. {
  426. diffLevelProfit = money;
  427. }
  428. if (getLevelProfit >= obj.MinProfitVal)
  429. {
  430. int DirectFlag = selfUser.Id == user.Id ? 1 : 0;
  431. result.Add(new ProfitResult()
  432. {
  433. UserId = user.Id,
  434. UserNav = user.ParentNav,
  435. Money = PublicFunction.NumberFormat(getLevelProfit),
  436. ProfitRate = objlevel.Percents,
  437. Message = "交易分润",
  438. BankCardType = BankCardType,
  439. QrPayFlag = QrPayFlag,
  440. DirectFlag = DirectFlag,
  441. BrandId = BrandId,
  442. IsSubsidy = 0,
  443. TradeAmount = HelpDirectTradeAmt,
  444. HelpFlag = 1,
  445. });
  446. curProfit += getLevelProfit;
  447. function.WriteLog(user.Id + "-" + UserLevel + "-" + HelpDirectTradeAmt + "-" + DirectFlag + "-扶持期分润:" + getLevelProfit, "WIFI分润监控日志");
  448. }
  449. }
  450. }
  451. if(curLevel < UserLevel)
  452. {
  453. curLevel = UserLevel;
  454. }
  455. }
  456. if(curProfit > checkProfit)
  457. {
  458. decimal more = curProfit - checkProfit;
  459. function.WriteLog("超标了:" + more, "WIFI分润监控日志");
  460. }
  461. }
  462. function.WriteLog("------------------------", "WIFI分润监控日志");
  463. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":稳定期:" + NotHelpDirectTradeAmt, "WIFI分润监控日志");
  464. if (NotHelpDirectTradeAmt > 0)
  465. {
  466. level = 0;
  467. curLevel = 0;
  468. diffLevelProfit = 0; //等级级差
  469. foreach (string UserIdString in ParentNavList)
  470. {
  471. level += 1;
  472. int uid = int.Parse(UserIdString);
  473. SubUser user = GetUser(uid, Month) ?? new SubUser();
  474. int UserLevel = GetUserLevel(user); //当前会员等级
  475. if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
  476. {
  477. break;
  478. }
  479. if (UserLevel <= maxLevel && UserLevel >= curLevel)
  480. {
  481. int LevelKindId = GetLevelKindId(1, 0, 1);
  482. ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
  483. if (objlevel != null)
  484. {
  485. decimal getLevelProfit = 0; //等级分润
  486. if (objlevel.Percents > 0)
  487. {
  488. //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
  489. getLevelProfit += NotHelpDirectTradeAmt * objlevel.Percents;
  490. }
  491. if (objlevel.AddProfitVal > 0)
  492. {
  493. getLevelProfit += objlevel.AddProfitVal;
  494. }
  495. decimal money = getLevelProfit;
  496. getLevelProfit -= diffLevelProfit;
  497. if (objlevel.LevelDiff == 1) //判断是否有级差
  498. {
  499. diffLevelProfit = money;
  500. }
  501. if (getLevelProfit >= obj.MinProfitVal)
  502. {
  503. result.Add(new ProfitResult()
  504. {
  505. UserId = user.Id,
  506. UserNav = user.ParentNav,
  507. Money = PublicFunction.NumberFormat(getLevelProfit),
  508. ProfitRate = objlevel.Percents,
  509. Message = "交易分润",
  510. BankCardType = BankCardType,
  511. QrPayFlag = QrPayFlag,
  512. BrandId = BrandId,
  513. DirectFlag = selfUser.Id == user.Id ? 1 : 0,
  514. IsSubsidy = 0,
  515. TradeAmount = NotHelpDirectTradeAmt,
  516. HelpFlag = 0,
  517. });
  518. }
  519. }
  520. }
  521. if(curLevel < UserLevel)
  522. {
  523. curLevel = UserLevel;
  524. }
  525. }
  526. }
  527. function.WriteLog("------------------------", "WIFI分润监控日志");
  528. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":盈利期:" + ProfitDirectTradeAmt, "WIFI分润监控日志");
  529. if (ProfitDirectTradeAmt > 0)
  530. {
  531. level = 0;
  532. curLevel = 0;
  533. diffLevelProfit = 0; //等级级差
  534. foreach (string UserIdString in ParentNavList)
  535. {
  536. level += 1;
  537. int uid = int.Parse(UserIdString);
  538. SubUser user = GetUser(uid, Month) ?? new SubUser();
  539. int UserLevel = GetUserLevel(user); //当前会员等级
  540. if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
  541. {
  542. break;
  543. }
  544. if (UserLevel <= maxLevel && UserLevel >= curLevel)
  545. {
  546. int LevelKindId = GetLevelKindId(1, 2, 1);
  547. ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
  548. if (objlevel != null)
  549. {
  550. decimal getLevelProfit = 0; //等级分润
  551. if (objlevel.Percents > 0)
  552. {
  553. getLevelProfit += ProfitDirectTradeAmt * objlevel.Percents;
  554. }
  555. if (objlevel.AddProfitVal > 0)
  556. {
  557. getLevelProfit += objlevel.AddProfitVal;
  558. }
  559. decimal money = getLevelProfit;
  560. getLevelProfit -= diffLevelProfit;
  561. if (objlevel.LevelDiff == 1) //判断是否有级差
  562. {
  563. diffLevelProfit = money;
  564. }
  565. if (getLevelProfit >= obj.MinProfitVal)
  566. {
  567. result.Add(new ProfitResult()
  568. {
  569. UserId = user.Id,
  570. UserNav = user.ParentNav,
  571. Money = PublicFunction.NumberFormat(getLevelProfit),
  572. ProfitRate = objlevel.Percents,
  573. Message = "交易分润",
  574. BankCardType = BankCardType,
  575. QrPayFlag = QrPayFlag,
  576. BrandId = BrandId,
  577. DirectFlag = selfUser.Id == user.Id ? 1 : 0,
  578. IsSubsidy = 0,
  579. TradeAmount = ProfitDirectTradeAmt,
  580. HelpFlag = 2,
  581. });
  582. }
  583. }
  584. }
  585. if(curLevel < UserLevel)
  586. {
  587. curLevel = UserLevel;
  588. }
  589. }
  590. }
  591. }
  592. }
  593. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "WIFI分润监控日志");
  594. }
  595. catch (Exception ex)
  596. {
  597. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
  598. }
  599. dbnew.Dispose();
  600. }
  601. }
  602. sqlstr = "";
  603. if (BankCardType == 1)
  604. {
  605. sqlstr = "select UserId,QrPayFlag,ProfitDirectTradeAmt from CreditTradeDaySummary2Before" + Month + " where BrandId=" + BrandId + LimitString;
  606. }
  607. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "WIFI分润监控日志");
  608. dt = GetDataTable(sqlstr);
  609. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "WIFI分润监控日志");
  610. if(dt.Rows.Count > 0)
  611. {
  612. foreach (DataRow dr in dt.Rows)
  613. {
  614. WebCMSEntities dbnew = new WebCMSEntities();
  615. try
  616. {
  617. int UserId = int.Parse(dr["UserId"].ToString());
  618. int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
  619. List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
  620. SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
  621. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":贷记卡", "WIFI分润监控日志");
  622. decimal ProfitDirectTradeAmt = decimal.Parse(dr[2].ToString()); //贷记卡盈利期期交易额
  623. int maxLevel = obj.MaxLevel; //最大等级
  624. decimal diffLevelProfit = 0; //等级级差
  625. int curLevel = 0; //当前层级的会员等级
  626. string ParentNav = selfUser.ParentNav;
  627. if (string.IsNullOrEmpty(ParentNav))
  628. {
  629. ParentNav = ",0,";
  630. }
  631. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "WIFI分润监控日志");
  632. if (!string.IsNullOrEmpty(ParentNav))
  633. {
  634. ParentNav += "," + UserId + ",";
  635. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  636. Array.Reverse(ParentNavList); //反转顺序
  637. int level = 0;
  638. DateTime now = DateTime.Now;
  639. DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  640. function.WriteLog("------------------------", "WIFI分润监控日志");
  641. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":盈利期2:" + ProfitDirectTradeAmt, "WIFI分润监控日志");
  642. if (ProfitDirectTradeAmt > 0)
  643. {
  644. level = 0;
  645. curLevel = 0;
  646. diffLevelProfit = 0; //等级级差
  647. foreach (string UserIdString in ParentNavList)
  648. {
  649. level += 1;
  650. int uid = int.Parse(UserIdString);
  651. SubUser user = GetUser(uid, Month) ?? new SubUser();
  652. int UserLevel = GetUserLevel(user); //当前会员等级
  653. if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
  654. {
  655. break;
  656. }
  657. if (UserLevel <= maxLevel && UserLevel >= curLevel)
  658. {
  659. int LevelKindId = GetLevelKindId(1, 3, 1);
  660. ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
  661. if (objlevel != null)
  662. {
  663. decimal getLevelProfit = 0; //等级分润
  664. if (objlevel.Percents > 0)
  665. {
  666. getLevelProfit += ProfitDirectTradeAmt * objlevel.Percents;
  667. }
  668. if (objlevel.AddProfitVal > 0)
  669. {
  670. getLevelProfit += objlevel.AddProfitVal;
  671. }
  672. decimal money = getLevelProfit;
  673. getLevelProfit -= diffLevelProfit;
  674. if (objlevel.LevelDiff == 1) //判断是否有级差
  675. {
  676. diffLevelProfit = money;
  677. }
  678. if (getLevelProfit >= obj.MinProfitVal)
  679. {
  680. result.Add(new ProfitResult()
  681. {
  682. UserId = user.Id,
  683. UserNav = user.ParentNav,
  684. Money = PublicFunction.NumberFormat(getLevelProfit),
  685. ProfitRate = objlevel.Percents,
  686. Message = "交易分润",
  687. BankCardType = BankCardType,
  688. QrPayFlag = QrPayFlag,
  689. BrandId = BrandId,
  690. DirectFlag = selfUser.Id == user.Id ? 1 : 0,
  691. IsSubsidy = 0,
  692. TradeAmount = ProfitDirectTradeAmt,
  693. HelpFlag = 3,
  694. });
  695. }
  696. }
  697. }
  698. if(curLevel < UserLevel)
  699. {
  700. curLevel = UserLevel;
  701. }
  702. }
  703. }
  704. }
  705. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "WIFI分润监控日志");
  706. }
  707. catch (Exception ex)
  708. {
  709. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常");
  710. }
  711. dbnew.Dispose();
  712. }
  713. }
  714. }
  715. return result;
  716. }
  717. #endregion
  718. public SubUser GetUser(int UserId, string Month)
  719. {
  720. SubUser user = new SubUser();
  721. DataTable dt = GetDataTable("select * from Users" + Month + " where Id=" + UserId);
  722. if(dt.Rows.Count > 0)
  723. {
  724. user.Id = int.Parse(dt.Rows[0]["Id"].ToString());
  725. user.ParentUserId = int.Parse(dt.Rows[0]["ParentUserId"].ToString());
  726. user.ParentNav = dt.Rows[0]["ParentNav"].ToString();
  727. user.UserLevel = int.Parse(dt.Rows[0]["UserLevel"].ToString());
  728. user.PreUserLevel = int.Parse(dt.Rows[0]["PreUserLevel"].ToString());
  729. user.PreUserLevelBefore = int.Parse(dt.Rows[0]["PreUserLevelBefore"].ToString());
  730. user.PreLeaderLevel = int.Parse(dt.Rows[0]["PreLeaderLevel"].ToString());
  731. user.PreOpLevel = int.Parse(dt.Rows[0]["PreOpLevel"].ToString());
  732. }
  733. return user;
  734. }
  735. public int GetUserLevel(SubUser user)
  736. {
  737. int level = user.UserLevel;
  738. if(user.PreUserLevelBefore > level) level = user.PreUserLevelBefore;
  739. return level;
  740. }
  741. public DataTable GetDataTable(string sqlstr)
  742. {
  743. DataTable dt = CustomerSqlConn.dtable(sqlstr, Library.ConfigurationManager.AppSettings["MainSqlConnStr"].ToString());
  744. return dt;
  745. }
  746. }
  747. }