using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Threading; using MySystem.PxcModels; using Library; using LitJson; namespace MySystem { public class AlipayPayBack2Service { public readonly static AlipayPayBack2Service Instance = new AlipayPayBack2Service(); private AlipayPayBack2Service() { } public void Start() { Thread th = new Thread(dosomething); th.IsBackground = true; th.Start(); } private void dosomething() { bool op = true; while (op) { string content = RedisDbconn.Instance.RPop("PayCallBack2"); if (!string.IsNullOrEmpty(content)) { try { sloveAlipayCallBack(content); } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "支付宝支付回调异常"); } } else { Thread.Sleep(2000); } } } public void sloveAlipayCallBack(string content) { JsonData jsonObj = JsonMapper.ToObject(content); string OrderNo = jsonObj["out_trade_no"].ToString(); string TradeNo = jsonObj["transaction_id"].ToString(); decimal TotalFee = decimal.Parse(function.CheckNum(jsonObj["total_fee"].ToString())); WebCMSEntities db = new WebCMSEntities(); OrderForNo forNo = db.OrderForNo.FirstOrDefault(m => m.OrderNo == OrderNo); if (forNo != null) { string[] ids = forNo.OrderIds.Split(','); foreach (string idString in ids) { int OrderId = int.Parse(idString); DoOrderV2(db, OrderId); Orders order = db.Orders.FirstOrDefault(m => m.Id == OrderId && m.Status > 0); if(order != null) { Products product = db.Products.FirstOrDefault(m => m.Id == order.ProductId) ?? new Products(); if(product.ProductKind == 2) { order.Status = 2; order.SendStatus = 1; order.SendDate = DateTime.Now; db.SaveChanges(); } } } } db.Dispose(); } #region 新订单流程 public void DoOrderV2(WebCMSEntities db, int OrderId) { Orders order = db.Orders.FirstOrDefault(m => m.Id == OrderId && m.Status <= 0); if (order != null) { order.Status = 1; order.PayDate = DateTime.Now; order.PayStatus = 1; db.SaveChanges(); if(order.ParentOrderId > 0) { int total = db.Orders.Count(m => m.ParentOrderId == order.ParentOrderId); int paycount = db.Orders.Count(m => m.ParentOrderId == order.ParentOrderId && m.Status > 0); if(paycount >= total) { // order = db.Orders.FirstOrDefault(m => m.Id == order.ParentOrderId && m.Status == 0); // if (order != null) // { // order.Status = 2; // order.PayDate = DateTime.Now; // order.PayStatus = 1; // OrderId = order.Id; // } DoOrderV2(db, order.ParentOrderId); } return; } OrderProduct pro = db.OrderProduct.FirstOrDefault(m => m.OrderId == OrderId); if (pro != null) { order.ProductId = pro.ProductId; //扣减对应商品的库存 Products product = db.Products.FirstOrDefault(m => m.Id == pro.ProductId); if(product != null) { product.Stock -= pro.ProductCount; product.BuyCount += pro.ProductCount; } db.SaveChanges(); if(order.ErpMode > 0) { pro.ProductId = order.ProductId; } List couponIds = new List(); if (pro.ProductId == 10 || pro.ProductId == 11 || pro.ProductId == 27 || pro.ProductId == 28 || pro.ProductId == 34 || pro.ProductId == -2) { order.Status = 2; int BuyCount = pro.ProductCount; int Kind = 0; int BeforeLeaderLevel = 0; if (pro.ProductId == 10 || pro.ProductId == 34) { Kind = 1; } else if (pro.ProductId == 11 || pro.ProductId == -2) { Kind = 2; } else if (pro.ProductId == 28) { Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId && m.LeaderLevel == 0); if(user != null) { BeforeLeaderLevel = user.LeaderLevel; user.LeaderLevel = 1; } } else if (pro.ProductId == 27) { Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId && m.LeaderLevel < 2); if(user != null) { BeforeLeaderLevel = user.LeaderLevel; user.LeaderLevel = 2; } } if(Kind <= 2 && (pro.ProductId == 10 || pro.ProductId == 11 || pro.ProductId == 34 || pro.ProductId == -2)) { // 购买600一组机具券,返券 int CouponCount = 0; if(Kind == 1 || Kind == 3) { CouponCount = 3 * pro.ProductCount; } else if(Kind == 2) { CouponCount = 2 * pro.ProductCount; } if(pro.ProductId == 34) //助利宝商机券购买,50张起购 { CouponCount = 50 * pro.ProductCount; } string Codes = ""; var coupons = db.PosCoupons.Where(m => m.IsLock == 0 && m.IsUse == 0 && m.UserId == 0 && m.QueryCount == Kind).OrderBy(m => m.Id).Take(CouponCount).ToList(); int RecordId = 0; if(coupons.Count > 0 && (pro.ProductId == 34 || pro.ProductId == -2)) { var adds = db.HelpProfitExchange.Add(new HelpProfitExchange() { CreateDate = DateTime.Now, //创建时间 UserId = order.UserId, ExchangeCount = coupons.Count, }).Entity; db.SaveChanges(); RecordId = adds.Id; } foreach (var coupon in coupons) // TODO: 数量多的话,会慢 { PosCoupons item = db.PosCoupons.FirstOrDefault(m => m.Id == coupon.Id); if (item != null) { item.CreateDate = DateTime.Now; item.UserId = order.UserId; item.UpdateDate = DateTime.Now.AddDays(180); if(pro.ProductId == 34 || pro.ProductId == -2) { item.HelpProfitFlag = 1; db.HelpProfitExchangeDetail.Add(new HelpProfitExchangeDetail() { CreateDate = DateTime.Now, //创建时间 UserId = order.UserId, PosCouponId = item.Id, ExchangeCode = item.ExchangeCode, RecordId = RecordId, }); } Codes += item.ExchangeCode + ","; couponIds.Add(coupon.Id); } } order.SnNos = Codes.TrimEnd(','); } db.SaveChanges(); if (pro.ProductId == 27 || pro.ProductId == 28) { //充值盟主储备金 decimal TotalPrice = 10000; if(pro.ProductId == 27) { TotalPrice = 40000; } OpReserve(db, order, order.UserId, TotalPrice, 1); Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId) ?? new Users(); if(pro.ProductId == 27) { OperateReserveBackFor(db, user.Id, 40000); //自留券数量清除 CancelStayCoupon(db, order.UserId, 7); //预设大盟主职级 LeaderPreUserLevel(db, order.UserId, 2); AddLeader(db, order.UserId, 2); decimal Prize = decimal.Parse(function.CheckNum(PublicFunction.GetPublicParam(db, "BigLeaderPrize"))); if(Prize > 0 && BeforeLeaderLevel < 2 && user.UserType == 0) { LeaderRecommendPrize(db, order, user.Id, Prize, 122); } } } if (pro.ProductId == 28) //购买小盟主,给上级大盟主返储备金 { bool check = LeaderBack(db, order); Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId) ?? new Users(); //自留券数量清除 CancelStayCoupon(db, order.UserId, 5); // if (check) OperateReserveBackFor(db, user.Id, 10000); //预设小盟主职级 LeaderPreUserLevel(db, order.UserId, 1); AddLeader(db, order.UserId, 1); decimal Prize = decimal.Parse(function.CheckNum(PublicFunction.GetPublicParam(db, "SmallLeaderPrize"))); if(Prize > 0 && BeforeLeaderLevel < 1 && user.UserType == 0) { LeaderRecommendPrize(db, order, user.Id, Prize, 123); } } } // 购买盟主储蓄金 if (pro.ProductId == 39 || pro.ProductId == 40) { order.Status = 2; //充值盟主储备金 decimal TotalPrice = 10000; if(pro.ProductId == 39) { TotalPrice = 40000; } OpReserve(db, order, order.UserId, TotalPrice, 1); if(pro.ProductId == 39) //购买大盟主储蓄金,给上级运营中心返可提现金额 { OperateReserveBackFor(db, order.UserId, 40000); AddLeader(db, order.UserId, 2); LeaderPreUserLevel(db, order.UserId, 2); } else if(pro.ProductId == 40) //购买小盟主储蓄金,给上级大盟主返储备金 { LeaderBack(db, order); AddLeader(db, order.UserId, 1); LeaderPreUserLevel(db, order.UserId, 1); } } //推荐下单奖励 List LkbIds = new List(); //来客吧组合包 LkbIds.Add(77); LkbIds.Add(78); LkbIds.Add(79); if (pro.ProductId == 10 || pro.ProductId == 11 || LkbIds.Contains(pro.ProductId)) { bool checkPrize = db.UserAccountRecord.Any(m => m.QueryCount == OrderId && m.ChangeType == 112); function.WriteLog("OrderId:" + OrderId, "推荐下单奖励监控日志"); function.WriteLog("checkPrize:" + checkPrize, "推荐下单奖励监控日志"); if (checkPrize) { Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId); if (user != null) { if(user.LeaderLevel > 0 || user.UserType == 1) //盟主或运营中心 { //获得100元奖励 OpAccount(db, order, order.UserId, 100, pro.ProductCount); } } } else { Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId); if (user != null) { bool directPrize = false; //直推奖标记 bool bigLeaderPrize = false; //大盟主券标记 bool operateFlag = false; //运营中心标记 bool buyPrize = false; //返100购机奖励标记或返100购机奖励标记-运营中心 int leaderFlag = 0; //返600备用金标记 if(user.LeaderLevel > 0 || user.UserType == 1) //盟主或运营中心 { if(user.LeaderLevel > 0) { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == order.UserId) ?? new UserAccount(); if(acccount.LeaderReserve >= order.TotalPrice) { if(order.PayMode == 4) { //扣减备用金 OpReserve(db, order, order.UserId, order.TotalPrice, 0, 0, "商城购机(储备金支付)"); } } string parentString = user.ParentNav + "," + order.UserId + ","; string[] puids = parentString.Replace(",,", ",").Trim(',').Split(','); Array.Reverse(puids); bool getFlag = true; foreach(string puid in puids) { int puidNum = int.Parse(function.CheckInt(puid)); Users puser = db.Users.FirstOrDefault(m => m.Id == puidNum) ?? new Users(); if(puser.LeaderLevel > 0 && getFlag) { UserAccount pacccount = db.UserAccount.FirstOrDefault(m => m.Id == puidNum) ?? new UserAccount(); if(pacccount.LeaderReserve >= 400 * pro.ProductCount) { //获得100元奖励 OpAccount(db, order, puidNum, 100, pro.ProductCount); getFlag = false; break; } } } //小盟主在有效期内购券后预设职级,仍为K5,但增加一条预设为K1的预设记录 if(user.LeaderLevel == 1) { DateTime now = DateTime.Now; bool checkLeader = db.Leaders.Any(m => m.Id == user.Id && m.ExpiredDate > now); if(checkLeader) { PreUserLevel(db, user.Id, 1, DateTime.Parse("2025-01-01 00:00:00")); } } } else if(user.UserType == 1) { //获得100元奖励 OpAccount(db, order, order.UserId, 100, pro.ProductCount); } //推荐奖励 DirectPrize(db, order.Id, order.UserId, pro.ProductCount); //推荐下单上级获得30天的机具循环天数(盟主自己得) var posList = db.PosMachinesTwo.Select(m => new { m.Id, m.UserId, m.BindingState, m.RecycEndDate }).Where(m => m.UserId == order.UserId && m.BindingState == 0 && m.RecycEndDate != null).ToList(); foreach (var subPos in posList) { PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == subPos.Id); if (pos != null) { pos.RecycEndDate = pos.RecycEndDate.Value.AddDays(30); } } db.SaveChanges(); if(order.PayMode == 4 && user.LeaderLevel > 0) //使用盟主储蓄金,并且是盟主 { if(user.UserType == 1) { if(couponIds.Count > 0) { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == user.Id) ?? new UserAccount(); foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { if(acccount.LeaderReserve >= 400 * pro.ProductCount) { coupon.LeaderUserId = user.Id; } coupon.OpId = user.Id; } } } db.SaveChanges(); } else { //寻找最近运营中心额度大于0的运营中心 int PUserId = user.Id; bool OperateFlag = true; bool OncePrizeFlag1 = true; while(PUserId > 0) { Users puser = db.Users.FirstOrDefault(m => m.Id == PUserId); if(puser != null) { if(puser.UserType == 1 && OperateFlag == true) //运营中心 { if(couponIds.Count > 0) { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == order.UserId) ?? new UserAccount(); foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { if(acccount.LeaderReserve >= 400 * pro.ProductCount) { coupon.LeaderUserId = user.Id; } coupon.OpId = puser.Id; } } db.SaveChanges(); if(acccount.LeaderReserve >= 400 * pro.ProductCount && OncePrizeFlag1) { //扣减备用金 OpReserve(db, order, order.UserId, 400 * pro.ProductCount, 2, 0, "商城购机"); //返回到余额 OpLeaderAccount(db, order, order.UserId, 400, pro.ProductCount); OncePrizeFlag1 = false; } OperateFlag = false; } else if(LkbIds.Contains(pro.ProductId)) //来客吧组合包 { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == order.UserId) ?? new UserAccount(); if(acccount.LeaderReserve >= 400 * pro.ProductCount && OncePrizeFlag1) { //扣减备用金 OpReserve(db, order, order.UserId, 400 * pro.ProductCount, 2, 0, "商城购机"); //返回到余额 OpLeaderAccount(db, order, order.UserId, 400, pro.ProductCount); OncePrizeFlag1 = false; } OperateFlag = false; } } PUserId = puser.ParentUserId; } else { PUserId = 0; } } } } else if(order.PayMode == 4 && user.UserType == 1) //使用盟主储蓄金,并且是运营中心 { if(couponIds.Count > 0) { foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { coupon.OpId = user.Id; } } }  db.SaveChanges(); //寻找最近储蓄金充足的大盟主 int PUserId = user.Id; bool LeaderFlag = true; bool OncePrizeFlag2 = true; while(PUserId > 0) { Users puser = db.Users.FirstOrDefault(m => m.Id == PUserId); if(puser != null) { if(puser.LeaderLevel == 2 && LeaderFlag == true) //大盟主 { if(couponIds.Count > 0) { UserAccount pacccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount(); foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null && pacccount.LeaderReserve >= 400 * pro.ProductCount) { coupon.LeaderUserId = puser.Id; } } db.SaveChanges(); UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == order.UserId) ?? new UserAccount(); if(acccount.LeaderReserve >= 400 * pro.ProductCount && OncePrizeFlag2) { //扣减备用金 OpReserve(db, order, order.UserId, 400 * pro.ProductCount, 2, 0, "商城购机"); //返回到余额 OpLeaderAccount(db, order, order.UserId, 400, pro.ProductCount); OncePrizeFlag2 = false; } LeaderFlag = false; } else if(LkbIds.Contains(pro.ProductId)) { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == order.UserId) ?? new UserAccount(); if(acccount.LeaderReserve >= 400 * pro.ProductCount && OncePrizeFlag2) { //扣减备用金 OpReserve(db, order, order.UserId, 400 * pro.ProductCount, 2, 0, "商城购机"); //返回到余额 OpLeaderAccount(db, order, order.UserId, 400, pro.ProductCount); OncePrizeFlag2 = false; } LeaderFlag = false; } } PUserId = puser.ParentUserId; } else { PUserId = 0; } } } else { //寻找最近储蓄金充足的大盟主及最近运营中心额度大于0的运营中心(含自身) int PUserId = user.Id; int LeaderFlag = 0; bool OperateFlag = true; bool OncePrizeFlag3 = true; while(PUserId > 0) { Users puser = db.Users.FirstOrDefault(m => m.Id == PUserId); if(puser != null) { if(puser.LeaderLevel > 0 && puser.LeaderLevel > LeaderFlag && LeaderFlag < 2) //大盟主 { if(couponIds.Count > 0) { if(puser.LeaderLevel == 2) { UserAccount pacccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount(); foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null && pacccount.LeaderReserve >= 400 * pro.ProductCount) { coupon.LeaderUserId = puser.Id; } } db.SaveChanges(); } UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount(); if(acccount.LeaderReserve >= 400 * pro.ProductCount && OncePrizeFlag3) { //扣减备用金 OpReserve(db, order, puser.Id, 400 * pro.ProductCount, 2, 0, "商城购机"); //返回到余额 OpLeaderAccount(db, order, puser.Id, 400, pro.ProductCount); LeaderFlag = puser.LeaderLevel; OncePrizeFlag3 = false; } } else if(LkbIds.Contains(pro.ProductId)) { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount(); if(acccount.LeaderReserve >= 400 * pro.ProductCount && OncePrizeFlag3) { //扣减备用金 OpReserve(db, order, puser.Id, 400 * pro.ProductCount, 2, 0, "商城购机"); //返回到余额 OpLeaderAccount(db, order, puser.Id, 400, pro.ProductCount); LeaderFlag = puser.LeaderLevel; OncePrizeFlag3 = false; } } } if(puser.UserType == 1 && OperateFlag == true) //运营中心 { if(couponIds.Count > 0) { foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { coupon.OpId = puser.Id; } } db.SaveChanges(); OperateFlag = false; } } PUserId = puser.ParentUserId; } else { PUserId = 0; } } //运营中心返额度(下单人自己是运营中心) // OperateReserveBackFor(db, order.UserId, order.TotalPrice); } return; } int ParentUserId = user.ParentUserId; // List proids = new List(); // proids.Add(10); // proids.Add(11); // 普通创客购买600一组的机具券 bool OncePrizeFlag4 = true; while(ParentUserId > 0) { Users puser = db.Users.FirstOrDefault(m => m.Id == ParentUserId) ?? new Users(); bool valid = Utils.Instance.IsStandardUser(ParentUserId); function.WriteLog("是否有效创客:" + valid, "推荐下单奖励监控日志"); if (valid) { // 盟主直推奖励,可以每次下单获得 if(!directPrize) { DirectPrize(db, order.Id, ParentUserId, pro.ProductCount); directPrize = true; } //推荐下单上级获得30天的机具循环天数 var posList = db.PosMachinesTwo.Select(m => new { m.Id, m.UserId, m.BindingState, m.RecycEndDate }).Where(m => m.UserId == ParentUserId && m.BindingState == 0 && m.RecycEndDate != null).ToList(); foreach (var subPos in posList) { PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == subPos.Id); if (pos != null) { pos.RecycEndDate = pos.RecycEndDate.Value.AddDays(30); } } db.SaveChanges(); } if(puser.LeaderLevel > 0) { function.WriteLog("OrderId:" + order.Id, "监控大盟主购机奖励"); function.WriteLog("UserId:" + puser.Id, "监控大盟主购机奖励"); UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount(); function.WriteLog("LeaderReserve:" + acccount.LeaderReserve, "监控大盟主购机奖励"); function.WriteLog("buyPrize:" + buyPrize, "监控大盟主购机奖励"); if(acccount.LeaderReserve >= 400 * pro.ProductCount && !buyPrize) { //购机奖励 OpAccount(db, order, puser.Id, 100, pro.ProductCount); buyPrize = true; } function.WriteLog("LeaderReserve:" + acccount.LeaderReserve, "监控大盟主购机奖励"); function.WriteLog("leaderFlag:" + leaderFlag, "监控大盟主购机奖励"); function.WriteLog("OncePrizeFlag4:" + OncePrizeFlag4, "监控大盟主购机奖励"); function.WriteLog("-----------------------------", "监控大盟主购机奖励"); if(acccount.LeaderReserve >= 400 * pro.ProductCount && puser.LeaderLevel > leaderFlag && leaderFlag < 2 && OncePrizeFlag4) { //扣减备用金 OpReserve(db, order, puser.Id, 400 * pro.ProductCount, 2, order.UserId, "购机奖励"); //返回到余额 OpLeaderAccount(db, order, puser.Id, 400, pro.ProductCount); leaderFlag = puser.LeaderLevel; OncePrizeFlag4 = false; } //如果是小盟主,则查找该小盟主关联的大盟主储蓄金是否充足,是则给券打上关联大盟主标记 if(couponIds.Count > 0 && puser.LeaderLevel == 1 && !bigLeaderPrize) { LeaderAccountRecord leaderItem = db.LeaderAccountRecord.FirstOrDefault(m => m.Sort == puser.Id && m.LeaderId > 0 && m.LeaderReserve >= 400 * pro.ProductCount); if(leaderItem != null) { leaderItem.LeaderReserve -= 400 * pro.ProductCount; foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { coupon.LeaderUserId = leaderItem.LeaderId; } } db.SaveChanges(); bigLeaderPrize = true; } } //如果是大盟主,则标记大盟主标签 if(couponIds.Count > 0 && puser.LeaderLevel == 2 && acccount.LeaderReserve >= 400 * pro.ProductCount && !bigLeaderPrize) { foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { coupon.LeaderUserId = puser.Id; } } db.SaveChanges(); bigLeaderPrize = true; } } if(puser.UserType == 1) { UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount(); if(!buyPrize) { //购机奖励 ChangeAccount(db, order, puser.Id, 100 * pro.ProductCount, 120); buyPrize = true; } //标记标签 if(couponIds.Count > 0 && !operateFlag) { foreach(int couponId in couponIds) { PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId); if(coupon != null) { coupon.OpId= puser.Id; } } db.SaveChanges(); operateFlag = true; } } ParentUserId = puser.ParentUserId; } //运营中心返额度 // OperateReserveBackFor(db, order.UserId, order.TotalPrice); } } function.WriteLog("\r\n\r\n", "推荐下单奖励监控日志"); } //推荐王 if(pro.ProductId == 29) { RecommendMethod(order.UserId, order.CreateDate.Value.ToString("yyyyMM")); } //购买分仓临时额度 if(pro.ProductId == 30 || pro.ProductId == 31 || pro.ProductId == 32) { string SendData = "{\"Kind\":\"1\",\"Data\":{\"OrderId\":\"" + order.Id + "\"}}"; RedisDbconn.Instance.AddList("StoreApplyQueue", SendData); } //购买小分仓临时额度 if(pro.ProductId == 56 || pro.ProductId == 57 || pro.ProductId == 58) { string SendData = "{\"Kind\":\"1\",\"Data\":{\"OrderId\":\"" + order.Id + "\"}}"; RedisDbconn.Instance.AddList("PreStoreApplyQueue", SendData); } } else { if(order.ProductId > 0 && order.ErpMode > 0) { //盟主储备金-升级/购买 ErpMode:1-升级,2-购买 if(order.ErpMode > 0) { Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId); if(user != null) { if(order.ErpMode == 1) { user.LeaderLevel = 2; db.SaveChanges(); } OpReserve(db, order, order.UserId, order.TotalPrice, 1); } } } } } } //小盟主购买逻辑 public bool LeaderBack(WebCMSEntities db, Orders order) { int LeaderUserId = order.UserId; int level = 0; bool result = true; while(LeaderUserId > 0) { level += 1; Users user = db.Users.FirstOrDefault(m => m.Id == LeaderUserId); if(user != null) { decimal TotalPrice = 10000; if((user.LeaderLevel == 2 || user.UserType == 1) && level > 1) { if(user.LeaderLevel == 2 && result) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == LeaderUserId); if(account != null) { if(account.LeaderReserve >= TotalPrice) { OpReserve(db, order, LeaderUserId, TotalPrice, 2, 0, "推荐小盟主"); OpLeaderAccount(db, order, LeaderUserId, TotalPrice, 1, 1); LeaderUserId = 0; result = false; } else { LeaderUserId = user.ParentUserId; // decimal LeaderReserve = account.LeaderReserve; // OpReserve(db, order, LeaderUserId, LeaderReserve, 2, 0, "推荐小盟主"); // OpLeaderAccount(db, order, LeaderUserId, LeaderReserve); } } } if(user.UserType == 1 && result) { OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities(); OpModels.UserAccount account = opdb.UserAccount.FirstOrDefault(m => m.Id == LeaderUserId) ?? new OpModels.UserAccount(); if(account.TotalAmt > 0) { if(account.TotalAmt < TotalPrice) { TotalPrice = account.TotalAmt; } if(TotalPrice > 0) { OperateAmountChange(opdb, LeaderUserId, TotalPrice, 2, 1, "商城购机"); OperateAmountChange(opdb, LeaderUserId, TotalPrice, 1, 2, "商城购机"); LeaderUserId = 0; result = false; } } } } else { LeaderUserId = user.ParentUserId; } } else { LeaderUserId = 0; } } return result; } //操作储备金 private int GetLeaderReserveRecordType(string Remark) { Dictionary data = new Dictionary(); data.Add(11, "兑换机具券,机具券兑换,系统增加(盟主储蓄金),系统扣减(盟主储蓄金),储备金购买"); data.Add(12, "系统增加(可提现余额),系统扣减(可提现余额)"); data.Add(13, "推荐大盟主,推荐小盟主,商城购机,购机奖励"); var item = data.FirstOrDefault(m => m.Value.Contains(Remark)); if(item.Key > 0) { return item.Key; } return 0; } public void OpReserve(WebCMSEntities db, Orders order, int UserId, decimal Money, int ChangeType, int SourceUserId = 0, string Remark = "储备金购买") { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeAmount = account.LeaderReserve; //变更前总金额 if(ChangeType == 1) { account.LeaderReserve += Money; } else { account.LeaderReserve -= Money; } decimal AfterAmount = account.LeaderReserve; //变更后总金额 LeaderReserveRecord add = db.LeaderReserveRecord.Add(new LeaderReserveRecord() { CreateDate = DateTime.Now, ChangeType = ChangeType, OrderId = order.Id, Remark = Remark, AfterAmt = AfterAmount, BeforeAmt = BeforeAmount, ChangeAmt = Money, TradeDate = DateTime.Now.ToString("yyyyMMdd"), TradeMonth = DateTime.Now.ToString("yyyyMM"), UserId = UserId, SourceUserId = SourceUserId, Sort = GetLeaderReserveRecordType(Remark), }).Entity; db.SaveChanges(); } //操作余额 public void OpAccount(WebCMSEntities db, Orders order, int UserId, decimal Money, int Count = 1) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } int ChangeType = 0; if(Money == 600) { ChangeType = 117; } else if(Money == 100) { ChangeType = 118; } decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额 decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额 decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.BalanceAmount += Money * Count; account.TotalAmount += Money * Count; decimal AfterTotalAmount = account.TotalAmount; //变更后总金额 decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额 decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额 UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = UserId, //创客 ChangeType = ChangeType, //变动类型 ChangeAmount = Money * Count, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = order.Id, }).Entity; db.SaveChanges(); } public void ChangeAccount(WebCMSEntities db, Orders order, int UserId, decimal Money, int ChangeType = 0, string Remark = "") { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额 decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额 decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.BalanceAmount += Money; if(Money > 0) { account.TotalAmount += Money; } decimal AfterTotalAmount = account.TotalAmount; //变更后总金额 decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额 decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额 UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = UserId, //创客 ChangeType = ChangeType, //变动类型 ChangeAmount = Math.Abs(Money), //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = order.Id, Remark = Remark, }).Entity; db.SaveChanges(); } //操作盟主可提现余额 public void OpLeaderAccount(WebCMSEntities db, Orders order, int UserId, decimal Money, int Count = 1, int Kind = 0) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } int ChangeType = 0; if(Money == 400) { ChangeType = 117; } int LeaderId = 0; decimal LeaderReserve = 0; if(Kind == 1) { LeaderId = UserId; LeaderReserve = Money * Count; } decimal BeforeLeaderBalanceAmount = account.LeaderBalanceAmount; //变更前余额 account.LeaderBalanceAmount += Money * Count; decimal AfterLeaderBalanceAmount = account.LeaderBalanceAmount; //变更后余额 LeaderAccountRecord leaderAccountRecord = db.LeaderAccountRecord.Add(new LeaderAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = UserId, //创客 ChangeType = ChangeType, //变动类型 ChangeAmount = Money * Count, //变更金额 BeforeBalanceAmount = BeforeLeaderBalanceAmount, //变更前余额 AfterBalanceAmount = AfterLeaderBalanceAmount, //变更后余额 QueryCount = order.Id, Sort = order.UserId, LeaderId = LeaderId, LeaderReserve = LeaderReserve, }).Entity; db.SaveChanges(); } public void DirectPrize(WebCMSEntities db, int OrderId, int UserId, int Count = 1) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额 decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额 decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.BalanceAmount += 100 * Count; account.TotalAmount += 100 * Count; decimal AfterTotalAmount = account.TotalAmount; //变更后总金额 decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额 decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额 UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = UserId, //创客 ChangeType = 112, //变动类型 ChangeAmount = 100 * Count, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 QueryCount = OrderId, }).Entity; db.SaveChanges(); } // 推荐王逻辑(下单) public void RecommendMethod(int UserId, string TradeMonth) { string SendData = "{\"Kind\":\"1\",\"Data\":{\"UserId\":\"" + UserId + "\",\"TradeMonth\":\"" + TradeMonth + "\"}}"; RedisDbconn.Instance.AddList("RecommendActStatQueue", SendData); } //操作运营中心额度 public void OperateReserveBackFor(WebCMSEntities maindb, int UserId, decimal Money) { OpModels.WebCMSEntities db = new OpModels.WebCMSEntities(); while(UserId > 0) { Users user = maindb.Users.FirstOrDefault(m => m.Id == UserId); if(user != null) { bool sys = db.SysAdmin.Any(m => m.UserId == UserId); if(sys) { OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new OpModels.UserAccount(); if(account.TotalAmt <= 0) { return; } if(account.TotalAmt < Money) { Money = account.TotalAmt; } if(Money > 0) { OperateAmountChange(db, UserId, Money, 2, 1, "商城购机"); OperateAmountChange(db, UserId, Money, 1, 2, "商城购机"); } UserId = 0; } else { UserId = user.ParentUserId; } } else { UserId = 0; } } db.Dispose(); } public void OperateReserveBack(int UserId, decimal Money) { OpModels.WebCMSEntities db = new OpModels.WebCMSEntities(); OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new OpModels.UserAccount(); if(account.TotalAmt <= 0) { return; } if(account.TotalAmt < Money) { Money = account.TotalAmt; } if(Money > 0) { OperateAmountChange(db, UserId, Money, 2, 1, "商城购机"); OperateAmountChange(db, UserId, Money, 1, 2, "商城购机"); } db.Dispose(); } public void ActReserveBack(int UserId, decimal OpReserve1, decimal OpReserve2, decimal OpReserve3) { OpModels.WebCMSEntities db = new OpModels.WebCMSEntities(); if(OpReserve1 > 0) OperateAmountChange(db, UserId, OpReserve1, 1, 1, "机具激活", true); if(OpReserve2 > 0) OperateAmountChange(db, UserId, OpReserve2, 1, 2, "机具激活", true); if(OpReserve3 > 0) OperateAmountChange(db, UserId, OpReserve3, 1, 3, "机具激活", true); db.Dispose(); } public void OperateAmountChange(OpModels.WebCMSEntities db, int UserId, decimal Money, int OperateType, int AmountType, string Remark = "", bool record = false) { OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new OpModels.UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeAmount = account.ValidAmount + account.TotalAmt + account.ValidForGetAmount; //变更前总金额 if(OperateType == 1) { if(AmountType == 1) { // BeforeAmount = account.TotalAmt; account.TotalAmt += Money; // AfterAmount = account.TotalAmt; } else if(AmountType == 2) { // BeforeAmount = account.ValidForGetAmount; account.ValidForGetAmount += Money; // AfterAmount = account.ValidForGetAmount; } else { // BeforeAmount = account.ValidAmount; account.ValidAmount += Money; // AfterAmount = account.ValidAmount; } } else { if(AmountType == 1) { // BeforeAmount = account.TotalAmt; account.TotalAmt -= Money; // AfterAmount = account.TotalAmt; } else if(AmountType == 2) { // BeforeAmount = account.ValidForGetAmount; account.ValidForGetAmount -= Money; // AfterAmount = account.ValidForGetAmount; } else { // BeforeAmount = account.ValidAmount; account.ValidAmount -= Money; // AfterAmount = account.ValidAmount; } } decimal AfterAmount = account.ValidAmount + account.TotalAmt + account.ValidForGetAmount; //变更后总金额 if(record) { OpModels.AmountRecord add = db.AmountRecord.Add(new OpModels.AmountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, OperateType = OperateType, AfterAmount = AfterAmount, BeforeAmount = BeforeAmount, UseAmount = Money, UserId = UserId, SeoDescription = Remark, Version = AmountType, }).Entity; } db.SaveChanges(); } #endregion #region 盟主推荐奖励 public void LeaderRecommendPrize(WebCMSEntities db, Orders order, int UserId, decimal Money, int ChangeType) { int level = 0; while(UserId > 0) { level += 1; Users user = db.Users.FirstOrDefault(m => m.Id == UserId); if(user != null) { if((user.UserType == 1 || user.LeaderLevel > 0) && level > 1) { ChangeAccount(db, order, UserId, Money, ChangeType); UserId = 0; } else { UserId = user.ParentUserId; } } else { UserId = 0; } } db.Dispose(); } #endregion #region 购买盟主预设职级 public void LeaderPreUserLevel(WebCMSEntities db, int UserId, int LeaderKind) { int Month = LeaderKind == 1 ? 6 : 9; int Rank = LeaderKind == 1 ? 5 : 7; LeaderRankWhite check = db.LeaderRankWhite.FirstOrDefault(m => m.Id == UserId); if(check == null) { db.LeaderRankWhite.Add(new LeaderRankWhite() { CreateDate = DateTime.Now, //设置时间 UpdateDate = DateTime.Now.AddMonths(Month), //过期时间 Rank = Rank, UserId = UserId, //用户 Id = UserId, }); } else { if(check.Rank < Rank) { check.Rank = Rank; check.UpdateDate = DateTime.Now.AddMonths(Month); } else if(check.Rank == Rank && check.UpdateDate < DateTime.Now.AddMonths(Month)) { check.UpdateDate = DateTime.Now.AddMonths(Month); } } db.SaveChanges(); } public void PreUserLevel(WebCMSEntities db, int UserId, int Rank, DateTime ExpiredDate) { LeaderRankWhite rank = db.LeaderRankWhite.FirstOrDefault(m => m.Id == UserId); if(rank == null) { db.LeaderRankWhite.Add(new LeaderRankWhite() { CreateDate = DateTime.Now, //设置时间 UserId = UserId, //用户 Id = UserId, }); db.SaveChanges(); } rank.Rank = Rank; rank.UpdateDate = ExpiredDate; db.SaveChanges(); } //取消自留券数量 public void CancelStayCoupon(WebCMSEntities db, int UserId, int CheckLevel = 5) { int myLevel = Utils.Instance.GetUserLevel(UserId); if(myLevel <= CheckLevel) { Users user = db.Users.FirstOrDefault(m => m.Id == UserId); if(user != null) { user.Version = 0; db.SaveChanges(); } } } #endregion #region 记录盟主 public void AddLeader(WebCMSEntities db, int UserId, int LeaderLevel) { int Month = LeaderLevel == 1 ? 6 : 9; Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId); if(leader == null) { db.Leaders.Add(new Leaders() { Id = UserId, CreateDate = DateTime.Now, //设置时间 UserId = UserId, //用户 LeaderLevel = LeaderLevel, LastBuyDate = DateTime.Now, ExpiredDate = DateTime.Now.AddMonths(Month), }); } else { leader.LeaderLevel = LeaderLevel; leader.LastBuyDate = DateTime.Now; leader.ExpiredDate = DateTime.Now.AddMonths(Month); } db.SaveChanges(); SendLeaderMsg(db, UserId); } #endregion #region 盟主续费通知 public void SendLeaderMsg(WebCMSEntities db, int UserId) { string msg = ""; Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users(); DateTime now = DateTime.Now; Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId); if(leader != null) { if(leader.ExpiredDate >= now) { msg = "尊敬的" + user.RealName + "盟主,恭喜您的盟主已成功开通"; } else { msg = "尊敬的" + user.RealName + "盟主,恭喜您重新成为盟主"; } } else { msg = "尊敬的" + user.RealName + "盟主,恭喜您的盟主已成功开通"; } RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal() { UserId = Convert.ToInt32(UserId), //创客 Title = "开通盟主提醒", //标题 Content = msg, //内容 Summary = msg, CreateDate = DateTime.Now, })); } #endregion } }