HelpProfitHelper.cs 12 KB

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