123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- 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<string, string> data = new Dictionary<string, string>();
- 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<string>("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;
- }
- }
- }
- }
- }
|