ProfitAfterHelper.cs 62 KB

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