ProfitSimBeforeHelper.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Data;
  5. using MySystem.PxcModels;
  6. using Library;
  7. using System.Threading;
  8. using Microsoft.Extensions.Hosting;
  9. using System.Threading.Tasks;
  10. namespace MySystem
  11. {
  12. public class ProfitSimBeforeHelper
  13. {
  14. public readonly static ProfitSimBeforeHelper Instance = new ProfitSimBeforeHelper();
  15. private ProfitSimBeforeHelper()
  16. {
  17. }
  18. #region 获取分润规则Id
  19. public int GetLevelKindId(int BrandId, int Help, int BankCardType)
  20. {
  21. return RedisDbconn.Instance.Get<int>("pobjlv:kid:" + BrandId + ":" + Help + ":" + BankCardType);
  22. }
  23. #endregion
  24. public void StatSimProfiting()
  25. {
  26. string Month = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  27. string check = function.ReadInstance("/ProfitStat/" + Month + "-1-sim-before.txt");
  28. if (!string.IsNullOrEmpty(check))
  29. {
  30. return;
  31. }
  32. function.WritePage("/ProfitStat/", Month + "-1-sim-before.txt", DateTime.Now.ToString());
  33. try
  34. {
  35. WebCMSEntities db = new WebCMSEntities();
  36. ReadModels.WebCMSEntities rdb = new ReadModels.WebCMSEntities();
  37. int PageNum = 1;
  38. bool op = true;
  39. while(op)
  40. {
  41. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "BrandId:14,BankCardType:1,Month:" + Month + ",PageNum:" + PageNum, "分润监控日志");
  42. List<ProfitResult> result = StartProftForSimByDate(Month, 14, PageNum);
  43. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + "result:" + result.Count, "分润监控日志");
  44. function.WriteLog("\r\n", "分润监控日志");
  45. if(result.Count > 0)
  46. {
  47. foreach (ProfitResult sub in result)
  48. {
  49. int TopUserId = 0;
  50. if (!string.IsNullOrEmpty(sub.UserNav))
  51. {
  52. string[] UserNavList = sub.UserNav.Trim(',').Replace(",,", ",").Split(',');
  53. if (UserNavList.Length > 1)
  54. {
  55. TopUserId = int.Parse(UserNavList[1]);
  56. }
  57. else
  58. {
  59. TopUserId = int.Parse(UserNavList[0]);
  60. }
  61. }
  62. string RecordNo = "P" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
  63. decimal ProfitAmt = sub.Money;
  64. decimal TradeAmt = sub.TradeAmount;
  65. decimal ProfitRate = sub.ProfitRate;
  66. decimal CreditTradeAmt = 0;
  67. decimal CreditTradeProfit = 0;
  68. decimal QrCreditTradeAmt = 0;
  69. decimal QrCreditProfitRate = 0;
  70. decimal QrCreditProfitStandardRate = 0;
  71. decimal QrCreditAddOrSubRate = 0;
  72. decimal QrCreditTradeProfit = 0;
  73. decimal NonQrCreditTradeAmt = 0;
  74. decimal NotHelpCreditTradeAmt = 0;
  75. decimal NotHelpCreditTradeProfit = 0;
  76. decimal NotHelpCreditProfitRate = 0;
  77. decimal NotHelpCreditProfitStandardRate = 0;
  78. decimal NotHelpCreditAddOrSubRate = 0;
  79. decimal HelpCreditTradeAmt = 0;
  80. decimal NonQrCreditTradeProfit = 0;
  81. decimal HelpCreditTradeProfit = 0;
  82. decimal HelpCreditProfitRate = 0;
  83. decimal HelpCreditProfitStandardRate = 0;
  84. decimal HelpCreditAddOrSubRate = 0;
  85. decimal DebitNonCapTradeAmt = 0;
  86. decimal DebitCapTradeAmt = 0;
  87. decimal QrDebitNotCapTradeAmt = 0;
  88. decimal NonQrDebitNotCapTradeAmt = 0;
  89. decimal NotHelpDebitNonCapTradeAmt = 0;
  90. decimal HelpDebitNonCapTradeAmt = 0;
  91. decimal DebitNonTradeCapProfit = 0;
  92. decimal QrDebitNonTradeCapProfit = 0;
  93. decimal NonQrDebitNonTradeCapProfit = 0;
  94. decimal NotHelpDebitNonTradeCapProfit = 0;
  95. decimal HelpDebitNonTradeCapProfit = 0;
  96. decimal DebitTradeCapProfit = 0;
  97. decimal NotHelpDebitProfitRate = 0;
  98. decimal NotHelpDebitProfitStandardRate = 0;
  99. decimal NotHelpDebitAddOrSubRate = 0;
  100. decimal HelpDebitProfitRate = 0;
  101. decimal HelpDebitProfitStandardRate = 0;
  102. decimal HelpDebitAddOrSubRate = 0;
  103. decimal DebitCapSingleReward = 0;
  104. decimal QrDebitProfitRate = 0;
  105. decimal QrDebitProfitStandardRate = 0;
  106. decimal QrDebitAddOrSubRate = 0;
  107. decimal ProfitCreditTradeProfit = 0;
  108. decimal ProfitCreditProfitRate = 0;
  109. decimal ProfitCreditTradeAmt = 0;
  110. decimal ProfitCreditTradeProfit2 = 0;
  111. decimal ProfitCreditProfitRate2 = 0;
  112. decimal ProfitCreditTradeAmt2 = 0;
  113. decimal ProfitDebitNonCapTradeAmt = 0;
  114. decimal ProfitDebitNonTradeCapProfit = 0;
  115. decimal ProfitDebitProfitRate = 0;
  116. CreditTradeAmt = TradeAmt; //贷记卡交易总金额
  117. CreditTradeProfit = ProfitAmt; //贷记卡分润总金额
  118. if (sub.QrPayFlag == 1)
  119. {
  120. QrCreditTradeAmt = TradeAmt; //(云闪付)贷记卡交易总金额
  121. QrCreditProfitRate = ProfitRate; //(云闪付)贷记卡交易分润比例
  122. QrCreditTradeProfit = ProfitAmt; //(云闪付)贷记卡交易分润
  123. }
  124. else
  125. {
  126. NonQrCreditTradeAmt = TradeAmt; //(非云闪付)贷记卡交易总金额
  127. NonQrCreditTradeProfit = ProfitAmt; //(非云闪付)贷记卡交易分润
  128. if(sub.HelpFlag == 1)
  129. {
  130. HelpCreditTradeProfit = ProfitAmt; //(扶持期)(非云闪付)贷记卡分润总金额
  131. HelpCreditProfitRate = ProfitRate; //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
  132. HelpCreditTradeAmt = TradeAmt; //(扶持期)(非云闪付)贷记卡交易总金额
  133. }
  134. else if(sub.HelpFlag == 2)
  135. {
  136. ProfitCreditTradeProfit = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
  137. ProfitCreditProfitRate = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  138. ProfitCreditTradeAmt = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
  139. }
  140. else if(sub.HelpFlag == 3)
  141. {
  142. ProfitCreditTradeProfit2 = ProfitAmt; //(盈利期)(非云闪付)贷记卡分润总金额
  143. ProfitCreditProfitRate2 = ProfitRate; //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  144. ProfitCreditTradeAmt2 = TradeAmt; //(盈利期)(非云闪付)贷记卡交易总金额
  145. }
  146. else
  147. {
  148. NotHelpCreditTradeAmt = TradeAmt; //(非扶持期)(非云闪付)贷记卡交易总金额
  149. NotHelpCreditTradeProfit = ProfitAmt; //(非扶持期)(非云闪付)贷记卡分润总金额
  150. NotHelpCreditProfitRate = ProfitRate; //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
  151. }
  152. }
  153. db.ProfitRewardRecord.Add(new ProfitRewardRecord()
  154. {
  155. Version = 1,
  156. CreateDate = DateTime.Now,
  157. UpdateDate = DateTime.Now,
  158. UserId = sub.UserId, //创客
  159. MerchantId = sub.MerchantId, //商户
  160. BrandId = sub.BrandId, //品牌
  161. ProfitType = sub.DirectFlag, //创客分润类型
  162. TradeAmt = sub.TradeAmount, //商户交易总额
  163. TradeProfit = sub.Money, //交易分润
  164. TradeMonth = Month, //交易月
  165. RecordNo = RecordNo, //记录单号
  166. TopUserId = TopUserId, //顶级创客
  167. CreditTradeAmt = CreditTradeAmt, //贷记卡交易总金额
  168. QrCreditTradeAmt = QrCreditTradeAmt, //(云闪付)贷记卡交易总金额
  169. NonQrCreditTradeAmt = NonQrCreditTradeAmt, //(非云闪付)贷记卡交易总金额
  170. NotHelpCreditTradeAmt = NotHelpCreditTradeAmt, //(非扶持期)(非云闪付)贷记卡交易总金额
  171. HelpCreditTradeAmt = HelpCreditTradeAmt, //(扶持期)(非云闪付)贷记卡交易总金额
  172. DebitNonCapTradeAmt = DebitNonCapTradeAmt, //商户非封顶借记卡交易总额
  173. QrDebitNotCapTradeAmt = QrDebitNotCapTradeAmt, //(云闪付)商户非封顶借记卡交易总额
  174. NonQrDebitNotCapTradeAmt = NonQrDebitNotCapTradeAmt, //(非云闪付)商户非封顶借记卡交易总额
  175. NotHelpDebitNonCapTradeAmt = NotHelpDebitNonCapTradeAmt, //(非扶持期)(非云闪付)借记卡非封顶交易总金额
  176. HelpDebitNonCapTradeAmt = HelpDebitNonCapTradeAmt, //(扶持期)(非云闪付)借记卡非封顶交易总金额
  177. DebitCapTradeAmt = DebitCapTradeAmt, //商户借记卡封顶交易总额
  178. CreditTradeProfit = CreditTradeProfit, //贷记卡分润总金额
  179. QrCreditTradeProfit = QrCreditTradeProfit, //(云闪付)贷记卡交易分润
  180. NonQrCreditTradeProfit = NonQrCreditTradeProfit, //(非云闪付)贷记卡交易分润
  181. NotHelpCreditTradeProfit = NotHelpCreditTradeProfit, //(非扶持期)(非云闪付)贷记卡分润总金额
  182. HelpCreditTradeProfit = HelpCreditTradeProfit, //(扶持期)(非云闪付)贷记卡分润总金额
  183. DebitNonTradeCapProfit = DebitNonTradeCapProfit, //借记卡非封顶交易分润总金额
  184. QrDebitNonTradeCapProfit = QrDebitNonTradeCapProfit, //(云闪付)借记卡非封顶交易分润总金额
  185. NonQrDebitNonTradeCapProfit = NonQrDebitNonTradeCapProfit, //(非云闪付)借记卡非封顶交易分润总金额
  186. NotHelpDebitNonTradeCapProfit = NotHelpDebitNonTradeCapProfit, //(非扶持期)(非云闪付)借记卡非封顶交易分润总金额
  187. HelpDebitNonTradeCapProfit = HelpDebitNonTradeCapProfit, //(扶持期)(非云闪付)借记卡非封顶交易分润总金额
  188. DebitTradeCapProfit = DebitTradeCapProfit, //借记卡封顶交易分润总金额
  189. NotHelpCreditProfitRate = NotHelpCreditProfitRate, //(非扶持期)(非云闪付)贷记卡商户交易对应分润比例
  190. NotHelpCreditProfitStandardRate = NotHelpCreditProfitStandardRate, //(非扶持期)(非云闪付)贷记卡标准分润比例
  191. NotHelpCreditAddOrSubRate = NotHelpCreditAddOrSubRate, //(非扶持期)(非云闪付)贷记卡成本或增或减比例
  192. HelpCreditProfitRate = HelpCreditProfitRate, //(扶持期)(非云闪付)贷记卡商户交易对应分润比例
  193. HelpCreditProfitStandardRate = HelpCreditProfitStandardRate, //(扶持期)(非云闪付)贷记卡-标准分润比例
  194. HelpCreditAddOrSubRate = HelpCreditAddOrSubRate, //(扶持期)(非云闪付)贷记卡成本或增或减比例
  195. NotHelpDebitProfitRate = NotHelpDebitProfitRate, //(非扶持期)(非云闪付)借记卡商户交易对应分润比例
  196. NotHelpDebitProfitStandardRate = NotHelpDebitProfitStandardRate, //(非扶持期)(非云闪付)借记卡标准分润比例
  197. NotHelpDebitAddOrSubRate = NotHelpDebitAddOrSubRate, //(非扶持期)(非云闪付)借记卡成本或增或减比例
  198. HelpDebitProfitRate = HelpDebitProfitRate, //(扶持期)(非云闪付)借记卡商户交易对应分润比例
  199. HelpDebitProfitStandardRate = HelpDebitProfitStandardRate, //(扶持期)(非云闪付)借记卡-标准分润比例
  200. HelpDebitAddOrSubRate = HelpDebitAddOrSubRate, //(扶持期)(非云闪付)借记卡成本或增或减比例
  201. DebitCapSingleReward = DebitCapSingleReward, //借记卡合伙人直营封顶交易奖励金额
  202. QrCreditProfitRate = QrCreditProfitRate, //(云闪付)贷记卡交易分润比例
  203. QrCreditProfitStandardRate = QrCreditProfitStandardRate, //(云闪付)贷记卡分润基准
  204. QrCreditAddOrSubRate = QrCreditAddOrSubRate, //(云闪付)贷记卡分润比例或增或减
  205. QrDebitProfitRate = QrDebitProfitRate, //(云闪付)借记卡非封顶交易分润比例
  206. QrDebitProfitStandardRate = QrDebitProfitStandardRate, //(云闪付)借记卡非封顶交易分润基准
  207. QrDebitAddOrSubRate = QrDebitAddOrSubRate, //(云闪付)借记卡非封顶交易分润比例或增或减
  208. ProfitCreditTradeProfit = ProfitCreditTradeProfit, //(盈利期)(非云闪付)贷记卡分润总金额
  209. ProfitCreditProfitRate = ProfitCreditProfitRate, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  210. ProfitCreditTradeAmt = ProfitCreditTradeAmt, //(盈利期)(非云闪付)贷记卡交易总金额
  211. ProfitCreditTradeProfit2 = ProfitCreditTradeProfit2, //(盈利期)(非云闪付)贷记卡分润总金额
  212. ProfitCreditProfitRate2 = ProfitCreditProfitRate2, //(盈利期)(非云闪付)贷记卡商户交易对应分润比例
  213. ProfitCreditTradeAmt2 = ProfitCreditTradeAmt2, //(盈利期)(非云闪付)贷记卡交易总金额
  214. ProfitDebitNonCapTradeAmt = ProfitDebitNonCapTradeAmt, //(盈利期)(非云闪付)借记卡非封顶交易总金额
  215. ProfitDebitNonTradeCapProfit = ProfitDebitNonTradeCapProfit, //(盈利期)(非云闪付)借记卡非封顶交易分润总金额
  216. ProfitDebitProfitRate = ProfitDebitProfitRate, //(盈利期)(非云闪付)借记卡商户交易对应分润比例
  217. });
  218. }
  219. db.SaveChanges();
  220. PageNum += 1;
  221. }
  222. else
  223. {
  224. op = false;
  225. }
  226. }
  227. db.Dispose();
  228. rdb.Dispose();
  229. }
  230. catch(Exception ex)
  231. {
  232. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "分润监控异常");
  233. }
  234. }
  235. public List<ProfitResult> StartProftForSimByDate(string Month, int BrandId = 14, int PageNum = 1)
  236. {
  237. int PageSize = 200;
  238. int SkipNum = (PageNum - 1) * PageSize;
  239. string LimitString = " limit " + PageSize;
  240. if(PageNum > 1)
  241. {
  242. LimitString = " limit " + SkipNum + "," + PageSize;
  243. }
  244. List<ProfitResult> result = new List<ProfitResult>();
  245. ProfitObjects obj = RedisDbconn.Instance.Get<ProfitObjects>("pobj" + BrandId);
  246. if (obj.Status == 1) //判断分润是否开启
  247. {
  248. string sqlstr = "select UserId,sum(HelpDirectTradeAmt),sum(NotHelpDirectTradeAmt) from TradeDaySummaryBefore where TradeMonth='" + Month + "' and BrandId=14 and SeoTitle='self' group by UserId" + LimitString;
  249. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + sqlstr, "广电卡分润监控日志");
  250. DataTable dt = GetMainTable(sqlstr);
  251. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + dt.Rows.Count.ToString(), "广电卡分润监控日志");
  252. if(dt.Rows.Count > 0)
  253. {
  254. foreach (DataRow dr in dt.Rows)
  255. {
  256. WebCMSEntities dbnew = new WebCMSEntities();
  257. try
  258. {
  259. int UserId = int.Parse(dr["UserId"].ToString());
  260. List<UserLevelSet> levels = dbnew.UserLevelSet.ToList();
  261. SubUser selfUser = GetUser(UserId, Month) ?? new SubUser();
  262. int Days = int.Parse(RedisDbconn.Instance.Get<string>("pobjrule:" + BrandId + ":HelpPolicy:Days")); //天数
  263. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "", "广电卡分润监控日志");
  264. decimal HelpDirectTradeAmt = decimal.Parse(dr[1].ToString()); //扶持期交易额
  265. decimal NotHelpDirectTradeAmt = decimal.Parse(dr[2].ToString()); //稳定期交易额
  266. int maxLevel = obj.MaxLevel; //最大等级
  267. decimal diffLevelProfit = 0; //等级级差
  268. int curLevel = 0; //当前层级的会员等级
  269. string ParentNav = selfUser.ParentNav;
  270. if (string.IsNullOrEmpty(ParentNav))
  271. {
  272. ParentNav = ",0,";
  273. }
  274. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + ParentNav, "广电卡分润监控日志");
  275. if (!string.IsNullOrEmpty(ParentNav))
  276. {
  277. ParentNav += "," + UserId + ",";
  278. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  279. Array.Reverse(ParentNavList); //反转顺序
  280. int level = 0;
  281. DateTime now = DateTime.Now;
  282. DateTime ThisMonth = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  283. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":扶持期:" + HelpDirectTradeAmt, "广电卡分润监控日志");
  284. if (HelpDirectTradeAmt > 0)
  285. {
  286. level = 0;
  287. curLevel = 0;
  288. diffLevelProfit = 0; //等级级差
  289. decimal curProfit = 0;
  290. foreach (string UserIdString in ParentNavList)
  291. {
  292. level += 1;
  293. int uid = int.Parse(UserIdString);
  294. SubUser user = GetUser(uid, Month) ?? new SubUser();
  295. int UserLevel = GetUserLevel(user); //当前会员等级
  296. if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
  297. {
  298. break;
  299. }
  300. if (UserLevel <= maxLevel && UserLevel >= curLevel)
  301. {
  302. int LevelKindId = GetLevelKindId(BrandId, 1, 1);
  303. ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
  304. if (objlevel != null)
  305. {
  306. decimal getLevelProfit = 0; //等级分润
  307. if (objlevel.Percents > 0)
  308. {
  309. //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
  310. getLevelProfit += HelpDirectTradeAmt * objlevel.Percents;
  311. }
  312. if (objlevel.AddProfitVal > 0)
  313. {
  314. getLevelProfit += objlevel.AddProfitVal;
  315. }
  316. decimal money = getLevelProfit;
  317. getLevelProfit -= diffLevelProfit;
  318. if (objlevel.LevelDiff == 1) //判断是否有级差
  319. {
  320. diffLevelProfit = money;
  321. }
  322. if (getLevelProfit >= obj.MinProfitVal)
  323. {
  324. int DirectFlag = selfUser.Id == user.Id ? 1 : 0;
  325. result.Add(new ProfitResult()
  326. {
  327. UserId = user.Id,
  328. UserNav = user.ParentNav,
  329. Money = PublicFunction.NumberFormat(getLevelProfit),
  330. ProfitRate = objlevel.Percents,
  331. Message = "交易分润",
  332. BankCardType = 0,
  333. QrPayFlag = 0,
  334. DirectFlag = DirectFlag,
  335. BrandId = BrandId,
  336. IsSubsidy = 0,
  337. TradeAmount = HelpDirectTradeAmt,
  338. HelpFlag = 1,
  339. });
  340. curProfit += getLevelProfit;
  341. function.WriteLog(user.Id + "-" + UserLevel + "-" + HelpDirectTradeAmt + "-" + DirectFlag + "-扶持期分润:" + getLevelProfit, "广电卡分润监控日志");
  342. }
  343. }
  344. }
  345. if(curLevel < UserLevel)
  346. {
  347. curLevel = UserLevel;
  348. }
  349. }
  350. }
  351. function.WriteLog("------------------------", "广电卡分润监控日志");
  352. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":稳定期:" + NotHelpDirectTradeAmt, "广电卡分润监控日志");
  353. if (NotHelpDirectTradeAmt > 0)
  354. {
  355. level = 0;
  356. curLevel = 0;
  357. diffLevelProfit = 0; //等级级差
  358. foreach (string UserIdString in ParentNavList)
  359. {
  360. level += 1;
  361. int uid = int.Parse(UserIdString);
  362. SubUser user = GetUser(uid, Month) ?? new SubUser();
  363. int UserLevel = GetUserLevel(user); //当前会员等级
  364. if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内
  365. {
  366. break;
  367. }
  368. if (UserLevel <= maxLevel && UserLevel > curLevel)
  369. {
  370. int LevelKindId = GetLevelKindId(BrandId, 0, 1);
  371. ProfitObjectLevels objlevel = RedisDbconn.Instance.Get<ProfitObjectLevels>("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数
  372. if (objlevel != null)
  373. {
  374. decimal getLevelProfit = 0; //等级分润
  375. if (objlevel.Percents > 0)
  376. {
  377. //获取创客分润规则,注册日开始算起,3个自然月内算扶持期
  378. getLevelProfit += NotHelpDirectTradeAmt * objlevel.Percents;
  379. }
  380. if (objlevel.AddProfitVal > 0)
  381. {
  382. getLevelProfit += objlevel.AddProfitVal;
  383. }
  384. decimal money = getLevelProfit;
  385. getLevelProfit -= diffLevelProfit;
  386. if (objlevel.LevelDiff == 1) //判断是否有级差
  387. {
  388. diffLevelProfit = money;
  389. }
  390. if (getLevelProfit >= obj.MinProfitVal)
  391. {
  392. result.Add(new ProfitResult()
  393. {
  394. UserId = user.Id,
  395. UserNav = user.ParentNav,
  396. Money = PublicFunction.NumberFormat(getLevelProfit),
  397. ProfitRate = objlevel.Percents,
  398. Message = "交易分润",
  399. BankCardType = 0,
  400. QrPayFlag = 0,
  401. BrandId = BrandId,
  402. DirectFlag = selfUser.Id == user.Id ? 1 : 0,
  403. IsSubsidy = 0,
  404. TradeAmount = NotHelpDirectTradeAmt,
  405. HelpFlag = 0,
  406. });
  407. }
  408. }
  409. }
  410. if(curLevel < UserLevel)
  411. {
  412. curLevel = UserLevel;
  413. }
  414. }
  415. }
  416. function.WriteLog("------------------------", "广电卡分润监控日志");
  417. }
  418. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":over", "广电卡分润监控日志");
  419. }
  420. catch (Exception ex)
  421. {
  422. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "广电卡分润异常");
  423. }
  424. dbnew.Dispose();
  425. }
  426. }
  427. }
  428. return result;
  429. }
  430. public SubUser GetUser(int UserId, string Month)
  431. {
  432. SubUser user = new SubUser();
  433. DataTable dt = GetDataTable("select * from Users" + Month + " where Id=" + UserId);
  434. if(dt.Rows.Count > 0)
  435. {
  436. user.Id = int.Parse(dt.Rows[0]["Id"].ToString());
  437. user.ParentUserId = int.Parse(dt.Rows[0]["ParentUserId"].ToString());
  438. user.ParentNav = dt.Rows[0]["ParentNav"].ToString();
  439. user.UserLevel = int.Parse(dt.Rows[0]["UserLevel"].ToString());
  440. user.PreUserLevel = int.Parse(dt.Rows[0]["PreUserLevel"].ToString());
  441. user.PreLeaderLevel = int.Parse(dt.Rows[0]["PreLeaderLevel"].ToString());
  442. user.PreOpLevel = int.Parse(dt.Rows[0]["PreOpLevel"].ToString());
  443. user.PreUserLevelBefore = int.Parse(dt.Rows[0]["PreUserLevelBefore"].ToString());
  444. }
  445. return user;
  446. }
  447. public int GetUserLevel(SubUser user)
  448. {
  449. int level = user.UserLevel;
  450. if(user.PreUserLevelBefore > level) level = user.PreUserLevelBefore;
  451. return level;
  452. }
  453. public DataTable GetDataTable(string sqlstr)
  454. {
  455. DataTable dt = CustomerSqlConn.dtable(sqlstr, Library.ConfigurationManager.AppSettings["MainSqlConnStr"].ToString());
  456. return dt;
  457. }
  458. public DataTable GetMainTable(string sqlstr)
  459. {
  460. DataTable dt = CustomerSqlConn.dtable(sqlstr, Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString());
  461. return dt;
  462. }
  463. }
  464. }