HelpProfitHelper.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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 HelpProfitHelper
  13. {
  14. public readonly static HelpProfitHelper Instance = new HelpProfitHelper();
  15. private HelpProfitHelper()
  16. {
  17. }
  18. public void Start()
  19. {
  20. Thread th = new Thread(StartFor);
  21. th.IsBackground = true;
  22. th.Start();
  23. }
  24. public void StartFor()
  25. {
  26. while (true)
  27. {
  28. if(DateTime.Now.Hour >= 2)// && DateTime.Now.Hour <= 3)
  29. {
  30. StatProfitEveryDay(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"));
  31. }
  32. Thread.Sleep(600000);
  33. }
  34. }
  35. public void StatProfitEveryDay(string Date)
  36. {
  37. string check = function.ReadInstance("/HelpProfitStat/" + Date + ".txt");
  38. if (!string.IsNullOrEmpty(check))
  39. {
  40. return;
  41. }
  42. function.WritePage("/HelpProfitStat/", Date + ".txt", DateTime.Now.ToString());
  43. WebCMSEntities db = new WebCMSEntities();
  44. List<HelpProfitMerTradeSummay> list = db.HelpProfitMerTradeSummay.Where(m => m.TradeDate == Date).ToList();
  45. foreach(HelpProfitMerTradeSummay sub in list)
  46. {
  47. int MerchantId = sub.MerchantId;
  48. decimal TradeAmount = sub.TradeAmount;
  49. HelpProfitMerchantForUser merchant = db.HelpProfitMerchantForUser.FirstOrDefault(m => m.MerchantId == MerchantId);
  50. if(merchant != null)
  51. {
  52. int UserId = merchant.UserId;
  53. PosMerchantInfo mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new PosMerchantInfo();
  54. MachineForMerNo merFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == mer.KqMerNo) ?? new MachineForMerNo();
  55. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == merFor.SnId) ?? new PosMachinesTwo();
  56. string Name = mer.MerchantName;
  57. if (mer.BrandId == 2)
  58. {
  59. if (Name.Contains("-"))
  60. {
  61. Name = Name.Split('-')[1];
  62. }
  63. else if (Name.Contains("_"))
  64. {
  65. Name = Name.Split('_')[1];
  66. }
  67. }
  68. Name = Name.Replace("个体户", "");
  69. Name = Name.Replace("个体商户", "");
  70. Name = Name.Replace("企业户", "");
  71. Name = Name.Replace("企业商户", "");
  72. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  73. Users puser = db.Users.FirstOrDefault(m => m.Id == user.ParentUserId) ?? new Users();
  74. decimal money = TradeAmount * 0.0005M;
  75. decimal money2 = TradeAmount * 0.00005M;
  76. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  77. if (account == null)
  78. {
  79. account = db.UserAccount.Add(new UserAccount()
  80. {
  81. Id = UserId,
  82. UserId = UserId,
  83. }).Entity;
  84. db.SaveChanges();
  85. }
  86. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  87. account.HelpProfitBalanceAmount += money;
  88. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  89. UserAccountRecord accountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  90. {
  91. CreateDate = DateTime.Now,
  92. UpdateDate = DateTime.Now,
  93. Sort = MerchantId,
  94. UserId = UserId, //创客
  95. ProductType = 101, //产品类型
  96. ChangeType = 1,
  97. ChangeAmount = money, //变更金额
  98. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  99. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  100. Remark = Name.Substring(0, 1) + "**:" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "交易" + TradeAmount.ToString("f2"),
  101. }).Entity;
  102. AddProfitRecord(db, user, pos, mer, money, DateTime.Now.AddDays(-1), 1);
  103. db.SaveChanges();
  104. account = db.UserAccount.FirstOrDefault(m => m.Id == user.ParentUserId);
  105. if (account == null)
  106. {
  107. account = db.UserAccount.Add(new UserAccount()
  108. {
  109. Id = user.ParentUserId,
  110. UserId = user.ParentUserId,
  111. }).Entity;
  112. db.SaveChanges();
  113. }
  114. BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  115. account.HelpProfitBalanceAmount += money2;
  116. AfterBalanceAmount = account.BalanceAmount; //变更后余额
  117. accountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  118. {
  119. CreateDate = DateTime.Now,
  120. UpdateDate = DateTime.Now,
  121. Sort = MerchantId,
  122. UserId = user.ParentUserId, //创客
  123. ProductType = 101, //产品类型
  124. ChangeType = 112,
  125. ChangeAmount = money2, //变更金额
  126. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  127. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  128. Remark = Name.Substring(0, 1) + "**:" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "交易" + TradeAmount.ToString("f2"),
  129. }).Entity;
  130. AddProfitRecord(db, puser, pos, mer, money, DateTime.Now.AddDays(-1), 112);
  131. db.SaveChanges();
  132. string Month = Date.Substring(0, 6);
  133. HelpProfitRebateDetail selfStat = db.HelpProfitRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == Month && m.TradeDate == Date);
  134. if (selfStat == null)
  135. {
  136. selfStat = db.HelpProfitRebateDetail.Add(new HelpProfitRebateDetail()
  137. {
  138. TradeMonth = Month,
  139. TradeDate = Date,
  140. UserId = UserId,
  141. }).Entity;
  142. db.SaveChanges();
  143. }
  144. selfStat.CreditRewardAmount += money;
  145. selfStat = db.HelpProfitRebateDetail.FirstOrDefault(m => m.UserId == user.ParentUserId && m.TradeMonth == Month && m.TradeDate == Date);
  146. if (selfStat == null)
  147. {
  148. selfStat = db.HelpProfitRebateDetail.Add(new HelpProfitRebateDetail()
  149. {
  150. TradeMonth = Month,
  151. TradeDate = Date,
  152. UserId = user.ParentUserId,
  153. }).Entity;
  154. db.SaveChanges();
  155. }
  156. selfStat.CreditRewardAmount += money2;
  157. db.SaveChanges();
  158. }
  159. }
  160. db.Dispose();
  161. }
  162. private void AddProfitRecord(WebCMSEntities db, Users puser, PosMachinesTwo pos, PosMerchantInfo merchant, decimal Prize, DateTime yesterday, int RewardType)
  163. {
  164. string RewardDesc = "助利宝分润";
  165. if(RewardType == 112)
  166. {
  167. RewardDesc = "助利宝推荐分润";
  168. }
  169. OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
  170. {
  171. CreateDate = DateTime.Now,
  172. UpdateDate = DateTime.Now,
  173. TradeMonth = yesterday.ToString("yyyyMM"), //交易月
  174. TradeDate = yesterday, //达标日期
  175. UserId = puser.Id, //创客
  176. BrandId = pos.BrandId, //品牌
  177. ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
  178. MerchantId = pos.BindMerchantId, //商户
  179. DirectUserId = merchant.UserId, //商户直属人
  180. SnNo = pos.PosSn, //SN号
  181. MerNo = merchant.KqMerNo, //渠道商户号
  182. SnType = pos.PosSnType, //机具类型
  183. StandardDate = pos.ActivationTime, //商户的激活日期
  184. SnStoreId = pos.StoreId, //SN仓库
  185. MerBuddyType = puser.MerchantType, //商户创客类型
  186. RewardType = RewardType, //奖励类型
  187. RewardTips = RewardDesc, //奖励描述
  188. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  189. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  190. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  191. RewardDesc = RewardDesc, //奖励描述
  192. }).Entity;
  193. db.OpenReward.Add(new OpenReward()
  194. {
  195. CreateDate = DateTime.Now,
  196. UpdateDate = DateTime.Now,
  197. TradeMonth = yesterday.ToString("yyyyMM"), //交易月
  198. TradeDate = DateTime.Now, //达标日期
  199. UserId = puser.Id, //创客
  200. BrandId = pos.BrandId, //品牌
  201. RewardType = RewardType, //奖励类型
  202. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  203. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  204. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  205. RewardDesc = RewardDesc, //奖励描述
  206. });
  207. }
  208. }
  209. }