using System; using System.Collections.Generic; using System.Linq; using MySystem.PxcModels; using Library; using LitJson; namespace MySystem { public class AlipayPayBack2Service { public readonly static AlipayPayBack2Service Instance = new AlipayPayBack2Service(); private AlipayPayBack2Service() { } public void Start(JobMqMsg jobInfo) { string content = ""; try { dosomething(); string Msg = "success"; jobInfo.Status = Msg == "success" ? 1 : 0; jobInfo.Msg = Msg == "success" ? "执行完成" : Msg; RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack"); } catch (Exception ex) { if (!string.IsNullOrEmpty(content)) { Dictionary data = new Dictionary(); data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); data.Add("ErrMsg", ex.ToString()); function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(data), "public_err"); } else { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_service"); } } } private void dosomething() { bool op = true; while (op) { string content = RedisDbconn.Instance.RPop("PayCallBack2"); if (!string.IsNullOrEmpty(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); 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(); RedisDbconn.Instance.Set("Orders:" + order.Id, order); OrderProduct pro = db.OrderProduct.FirstOrDefault(m => m.OrderId == OrderId); if (pro != null) { KqProducts brand = db.KqProducts.FirstOrDefault(m => m.Sort == pro.ProductId); if (brand != null) { int BuyCount = pro.ProductCount; int Kind = 0; if(pro.ProductPrice == 200) Kind = 1; if(pro.ProductPrice == 300) Kind = 2; 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(BuyCount).ToList(); foreach (var coupon in coupons) { 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); Codes += item.ExchangeCode + ","; } } order.SnNos = Codes.TrimEnd(','); string ChangeRecordNo = "SC" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8); PosCouponForUser forUser = db.PosCouponForUser.FirstOrDefault(m => m.Id == order.UserId); if (forUser == null) { forUser = db.PosCouponForUser.Add(new PosCouponForUser() { Id = order.UserId, }).Entity; db.SaveChanges(); } int BeforeOut = forUser.OutNum; int BeforeTotal = forUser.TotalNum; int BeforeStock = forUser.StockNum; forUser.OutNum += BuyCount; forUser.StockNum -= BuyCount; int AfterOut = forUser.OutNum; int AfterTotal = forUser.TotalNum; int AfterStock = forUser.StockNum; PosCouponOrders stat = db.PosCouponOrders.Add(new PosCouponOrders() { QueryCount = Kind, CreateDate = DateTime.Now, ChangeKind = 2, ChangeCount = BuyCount, AfterOut = AfterOut, AfterTotal = AfterTotal, AfterStock = AfterStock, BeforeOut = BeforeOut, BeforeTotal = BeforeTotal, BeforeStock = BeforeStock, OrderNo = ChangeRecordNo, ToUserId = order.UserId, FromUserId = 0, }).Entity; db.SaveChanges(); RedisDbconn.Instance.Clear("Orders:" + order.Id); } } } } } db.Dispose(); } else { op = false; } } } } }