/// <summary> /// 同步并保存 /// </summary> /// <param name="model">产品信息</param> /// <param name="diffs">差别产品数据</param> /// <returns></returns> public static Tuple <int, Guid> SyncSave(QiangGouModel model, List <QiangGouDiffModel> diffs) { using (var dbHelper = new SqlDbHelper(ConnectionHelper.GetDecryptConn("Gungnir"))) { dbHelper.BeginTransaction(); try { var syncResult = SyncDiffActivity(model, diffs, dbHelper); if (syncResult < 0) { if (model.ActivityID != null) { return(new Tuple <int, Guid>(syncResult, model.ActivityID.Value)); } } var result = DALQiangGou.CreateOrUpdateQianggou(dbHelper, model); dbHelper.Commit(); return(result); } catch (Exception e) { dbHelper.Rollback(); throw new Exception(e.Message);; } } }
/// <summary> /// 把删除的活动信息插入到活动删除备份表 - Temp表 /// </summary> /// <param name="deletedModel"></param> /// <returns></returns> public static int InsertDeletedActivityInfo_Temp(QiangGouModel deletedModel) { if (deletedModel == null) { return(0); } return(DALQiangGou.InsertDeletedActivityInfo_Temp(deletedModel)); }
/// <summary> /// 把删除的活动信商品信息插入到活动商品删除备份表 - Temp表 /// </summary> /// <param name="products"></param> /// <returns></returns> public static int InsertDeletedActivityProducts_Temp(List <QiangGouProductModel> products) { if (!(products?.Count > 0)) { return(0); } return(DALQiangGou.InsertDeletedActivityProducts_Temp(products)); }
/// <summary> /// 查询商品pid被配置的活动 /// </summary> /// <param name="pid"></param> /// <returns></returns> public static IEnumerable <QiangGouProductModel> SelectQiangGouProductModelsByPid(string pid) { try { return(DALQiangGou.SelectQiangGouProductModelsByPid(pid)); } catch (Exception ex) { Logger.Log(Level.Error, $"SelectQiangGouProductModelsByPid -> {pid}", ex); throw ex; } }
/// <summary> /// 根据活动查询活动明细 /// </summary> /// <param name="aid"></param> /// <returns></returns> public static QiangGouModel FetchQiangGouAndProductsTemp(Guid aid) { var dt = DALQiangGou.FetchQiangGouAndProductsFromTemp(aid); if (dt == null || dt.Rows.Count == 0) { return(null); } var model = dt.ConvertTo <QiangGouModel>()?.FirstOrDefault(); model.Products = dt.ConvertTo <QiangGouProductModel>(); return(model); }
public static QiangGouForCache SelectQiangGouToCache(Guid ActivityID) { var dt = DALQiangGou.SelectQiangGouToCache(ActivityID); if (dt == null || dt.Rows.Count == 0) { return(null); } var model = dt.ConvertTo <QiangGouForCache>()?.FirstOrDefault(); model.Products = dt.ConvertTo <QiangGouProductForCache>(); return(model); }
public static QiangGouModel FetchNeedExamQiangGouAndProducts(Guid aid) { try { var dt = DALQiangGou.FetchNeedExamQiangGouAndProducts(aid); if (dt == null || dt.Rows.Count == 0) { return(null); } var model = dt.ConvertTo <QiangGouModel>()?.FirstOrDefault() ?? new QiangGouModel(); //var products = dt.ConvertTo<QiangGouProductModel>(); var pids = dt.ConvertTo <QiangGouProductModel>().Select(r => r.PID).ToList(); var costPriceSql = DALQiangGou.SelectProductCostPriceByPids(pids); var products = from a in dt.ConvertTo <QiangGouProductModel>() join b in costPriceSql on a.PID equals b.PID into temp from b in temp.DefaultIfEmpty() select new QiangGouProductModel { PKID = a.PKID, ActivityID = a.ActivityID, ActivityName = a.ActivityName, PID = a.PID, HashKey = a.HashKey, Price = a.Price, TotalQuantity = a.TotalQuantity, MaxQuantity = a.MaxQuantity, SaleOutQuantity = a.SaleOutQuantity, InstallAndPay = a.InstallAndPay, IsUsePCode = a.IsUsePCode, Channel = a.Channel, IsJoinPlace = a.IsJoinPlace, FalseOriginalPrice = a.FalseOriginalPrice, DisplayName = a.DisplayName, OriginalPrice = a.OriginalPrice, ProductName = a.ProductName, Label = a.Label, CostPrice = b?.CostPrice, Position = a.Position, IsShow = a.IsShow, InstallService = a.InstallService, DecreaseDegree = a.OriginalPrice == 0 ? "0" : (Math.Round((a.OriginalPrice - a.Price) / a.OriginalPrice, 2) * 100) + "%" }; model.Products = products; return(model); } catch (Exception ex) { Logger.Log(Level.Error, $"审核查询数据失败==》{ex}-{ex.InnerException}-{ex.StackTrace}"); return(new QiangGouModel()); } }
public ActionResult DelActivity(Guid aid) { if (aid != Guid.Empty) { var result = DALQiangGou.DelFlashSale(aid); if (result > 0) { UpdateToCache(aid); var oprLog = new FlashSaleProductOprLog(); oprLog.OperateUser = ThreadIdentity.Operator.Name; oprLog.BeforeValue = aid.ToString(); oprLog.CreateDateTime = DateTime.Now; oprLog.AfterValue = aid.ToString(); oprLog.LogType = "FlashSaleLog"; oprLog.LogId = aid.ToString(); oprLog.Operation = "删除活动"; LoggerManager.InsertLog("FlashSaleOprLog", oprLog); return(Json(new { Status = 1 })); } } return(Json(new { Status = 0 })); }
public static int?SelectFlashSaleSaleOutQuantity(string activityid, string pid) => DALQiangGou.SelectFlashSaleSaleOutQuantity(activityid, pid);
/// <summary> /// 天天秒杀保存按钮使用 /// </summary> /// <param name="qiang"></param> /// <param name="diffs"></param> /// <param name="dbHelper"></param> /// <returns></returns> public static int SpikeSynchroDiffActivity(QiangGouModel qiang, List <QiangGouDiffModel> diffs, Tuhu.Component.Common.SqlDbHelper dbHelper) { var selectedDiffs = diffs.GroupBy(r => new { r.ActivityID, r.ActiveType }).Select(d => new QiangGouModel { ActivityID = d.Key.ActivityID, ActiveType = d.Key.ActiveType, Products = d.Select(product => new QiangGouProductModel { PID = product.PID, ProductName = product.ProductName, Price = product.Price, FalseOriginalPrice = product.FalseOriginalPrice, InstallAndPay = product.InstallAndPay, IsUsePCode = product.IsUsePCode, }) }); List <QiangGouProductModel> list = new List <QiangGouProductModel>(); //List<QiangGouProductModel> selectedlist = new List<QiangGouProductModel>(); foreach (var a in selectedDiffs) { var selecteddiffs = DALQiangGou.SelectSelectedDiffActivityProducts(a.ActivityID, a.ActiveType, a.Products, dbHelper); list.AddRange(selecteddiffs); } var aids = list.Select(_ => _.ActivityID); foreach (var aid in aids) { var model = DALQiangGou.SelectQiangGouForSynchro(aid, dbHelper); var origin = DALQiangGou.SelectQiangGouForSynchro(aid, dbHelper); var needAsyncPids = list.Where(_ => _.ActivityID == aid).Select(_ => _.PID).ToList(); var tempProducts = model.Products.Where(_ => !needAsyncPids.Contains(_.PID)).ToList(); bool flag = true; foreach (var pid in needAsyncPids) { var product = qiang.Products.FirstOrDefault(_ => _.PID == pid); var y_product = model.Products.FirstOrDefault(_ => _.PID == pid); y_product.ProductName = product.ProductName; y_product.Price = product.Price; y_product.FalseOriginalPrice = product.FalseOriginalPrice; y_product.InstallAndPay = product.InstallAndPay; y_product.IsUsePCode = product.IsUsePCode; tempProducts.Add(y_product); if (!string.IsNullOrWhiteSpace(qiang.NeedExamPids) && qiang.NeedExamPids.Split(';').Contains(pid) && flag) { flag = false; } } model.NeedExam = !flag; model.Products = tempProducts; var result = DALQiangGou.CreateOrUpdateQianggou(dbHelper, model); if (result.Item1 < 0) { dbHelper.Rollback(); return(-38);//同步失败 } else { var chandata = LogChangeDataManager.GetLogChangeData(origin, model); var beforeValue = QiangGouManager.GenerateSimpleQiangGouModel(chandata.Item1); var afterValue = QiangGouManager.GenerateSimpleQiangGouModel(chandata.Item2); var oprLog = new FlashSaleProductOprLog { OperateUser = ThreadIdentity.Operator.Name, CreateDateTime = DateTime.Now, BeforeValue = JsonConvert.SerializeObject(beforeValue), AfterValue = JsonConvert.SerializeObject(afterValue), LogType = "FlashSaleLog", LogId = result.Item2.ToString(), Operation = model.NeedExam ? "同步活动到待审核" : "同步活动" }; LoggerManager.InsertLog("FlashSaleOprLog", oprLog); LoggerManager.InsertFlashSaleLog(chandata.Item1, beforeValue.HashKey); LoggerManager.InsertFlashSaleLog(chandata.Item2, afterValue.HashKey); } } foreach (var aid in aids) { var cache = SpikeReflashCache(aid, false); if (cache == false) { return(-3); } } return(1); }
/// <summary> /// 刷新缓存 /// </summary> /// <param name="aid"></param> /// <param name="needLog"></param> /// <param name="activityType"></param> /// <returns></returns> public static bool ReflashActivityCache(Guid aid, bool needLog, int activityType) { try { var result = true; if (activityType == 1 || activityType == 3) { using (var client = new Service.Activity.CacheClient()) { var cacheresult = client.RefreshRedisCachePrefixForCommon(new RefreshCachePrefixRequest() { Prefix = "SecondKillPrefix", ClientName = "FlashSale", Expiration = TimeSpan.FromDays(1) }); cacheresult.ThrowIfException(true); result = cacheresult.Result; } } using (var client = new FlashSaleClient()) { var result1 = client.UpdateFlashSaleDataToCouchBaseByActivityID(aid); //初始化缓存数据 var result2 = client.RefreshFlashSaleHashCount(new List <string> { aid.ToString() }, false); //刷新活动页固化下来的数据 var activityExists = DALQiangGou.FetchActivityPageContentByActivityId(aid.ToString()); if (activityExists != null && activityExists.Any()) { foreach (var activityExist in activityExists) { using (var actclient = new ActivityClient()) { var activityId = actclient.GetOrSetActivityPageSortedPids(new SortedPidsRequest { Brand = activityExist.Brand, ProductType = (ProductType)activityExist.ProductType, NeedUpdatePkid = activityExist.Pkid, DicActivityId = new KeyValuePair <string, ActivityIdType>(aid.ToString(), ActivityIdType.FlashSaleActivity) }); var refresh = actclient.RefreshActivePageListModelCache(new ActivtyPageRequest { Channel = "wap", HashKey = activityExist.HashKey, }); } } } if (needLog) { var oprLog = new FlashSaleProductOprLog(); oprLog.OperateUser = ThreadIdentity.Operator.Name; oprLog.CreateDateTime = DateTime.Now; oprLog.BeforeValue = JsonConvert.SerializeObject(new { actvityid = aid }); oprLog.AfterValue = JsonConvert.SerializeObject(new { actvityid = aid }); oprLog.LogType = "FlashSaleLog"; oprLog.LogId = aid.ToString(); oprLog.Operation = "刷新缓存"; LoggerManager.InsertLog("FlashSaleOprLog", oprLog); } result1.ThrowIfException(true); result2.ThrowIfException(true); return(result1.Result && result2.Result && result); } } catch (Exception ex) { throw ex; } }
public static int SyncDiffActivity(QiangGouModel qiang, List <QiangGouDiffModel> diffs, SqlDbHelper dbHelper) { var diffList = new List <QiangGouProductModel>(); if (diffs.Count > 0) { foreach (var item in diffs) { diffList.Add(new QiangGouProductModel { PID = item.PID, ActivityID = (Guid)item.ActivityID, ProductName = item.ProductName, Price = item.Price, FalseOriginalPrice = item.FalseOriginalPrice, InstallAndPay = item.InstallAndPay, IsUsePCode = item.IsUsePCode }); } } var aids = diffList.Select(_ => _.ActivityID).Distinct().ToArray(); foreach (var aid in aids) { var model = DALQiangGou.SelectQiangGouForSynchro(aid, dbHelper); var origin = model; var needAsyncPids = diffList.Where(_ => _.ActivityID == aid).Select(_ => _.PID).ToList(); var tempProducts = model.Products.Where(_ => !needAsyncPids.Contains(_.PID)).ToList(); bool flag = true; foreach (var pid in needAsyncPids) { var product = qiang.Products.FirstOrDefault(_ => _.PID == pid); var y_product = model.Products.FirstOrDefault(_ => _.PID == pid); y_product.ProductName = product.ProductName; y_product.Price = product.Price; y_product.FalseOriginalPrice = product.FalseOriginalPrice; y_product.InstallAndPay = product.InstallAndPay; y_product.IsUsePCode = product.IsUsePCode; tempProducts.Add(y_product); if (!string.IsNullOrWhiteSpace(qiang.NeedExamPids) && qiang.NeedExamPids.Split(';').Contains(pid) && flag) { flag = false; } } model.NeedExam = !flag; model.Products = tempProducts; var result = DALQiangGou.CreateOrUpdateQiangGou(dbHelper, model); if (result.Item1 < 0) { dbHelper.Rollback(); return(-38);//同步失败 } var chandata = LogChangeDataManager.GetLogChangeData(origin, model); var beforeValue = GenerateSimpleQiangGouModel(chandata.Item1); var afterValue = GenerateSimpleQiangGouModel(chandata.Item2); var oprLog = new FlashSaleProductOprLog { OperateUser = ThreadIdentity.Operator.Name, CreateDateTime = DateTime.Now, BeforeValue = JsonConvert.SerializeObject(beforeValue), AfterValue = JsonConvert.SerializeObject(afterValue), LogType = "FlashSaleLog", LogId = result.Item2.ToString(), Operation = model.NeedExam ? "同步活动到待审核" : "同步活动" }; LoggerManager.InsertLog("FlashSaleOprLog", oprLog); LoggerManager.InsertFlashSaleLog(chandata.Item1, beforeValue.HashKey); LoggerManager.InsertFlashSaleLog(chandata.Item2, afterValue.HashKey); } foreach (var aid in aids) { var cache = ReflashActivityCache(aid, false, 0); if (cache == false) { return(-3); } } return(1); }
/// <summary> /// 查询所有活动 /// </summary> public static IEnumerable <QiangGouProductModel> SelectQiangGouProductModels(Guid aid) { return(DALQiangGou.SelectQiangGouProductModels(aid)); }
public static Dictionary <string, IEnumerable <QiangGouProductModel> > SelectDiffActivityProducts(Guid?aid, int atype, IEnumerable <QiangGouProductModel> products, DateTime StartDateTime, DateTime EndDateTime) => DALQiangGou.SelectDiffActivityProducts(aid, atype, products, StartDateTime, EndDateTime);
public static Guid SelectLastActivityId() { return(DALQiangGou.SelectLastActivityId()); }
public static IEnumerable <string> SelectPidsByParent(string productId) => DALQiangGou.SelectPidsByParent(productId);
public static IEnumerable <QiangGouProductModel> CheckPIDSamePriceInOtherActivity(QiangGouProductModel product) => DALQiangGou.CheckPIDSamePriceInOtherActivity(product);
public static List <ProductModel> SelectcostPriceSql(string pid) { return(DALQiangGou.SelectProductCostPriceByPids(new List <string> { pid }).ToList()); }
public static DataAccess.Entity.ProductModel FetchProductByPID(string pid) { var model = DALQiangGou.FetchProductByPID(pid); return(AssemblyProductInstalService(model)); }
public static int ExamActivity(Guid ActitvityID) => DALQiangGou.ExamActivity(ActitvityID);
public static int ExamUpdatePrice(QiangGouProductModel model) => DALQiangGou.ExamUpdatePrice(model);
/// <summary> /// 查询所有活动 /// </summary> public static IEnumerable <QiangGouModel> SelectAllQiangGou() { return(DALQiangGou.SelectAllQiangGou()); }
public static Dictionary <string, IEnumerable <QiangGouProductModel> > SelectDiffActivityProducts(Guid?aid, int atype, IEnumerable <QiangGouProductModel> products) => DALQiangGou.SelectDiffActivityProducts(aid, atype, products);