Ejemplo n.º 1
0
        /// <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);;
                }
            }
        }
Ejemplo n.º 2
0
        /// <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));
        }
Ejemplo n.º 3
0
        /// <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));
        }
Ejemplo n.º 4
0
 /// <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;
     }
 }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 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());
     }
 }
Ejemplo n.º 8
0
 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 }));
 }
Ejemplo n.º 9
0
        public static int?SelectFlashSaleSaleOutQuantity(string activityid, string pid)

        => DALQiangGou.SelectFlashSaleSaleOutQuantity(activityid, pid);
Ejemplo n.º 10
0
        /// <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);
        }
Ejemplo n.º 11
0
        /// <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;
            }
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
 /// <summary>
 /// 查询所有活动
 /// </summary>
 public static IEnumerable <QiangGouProductModel> SelectQiangGouProductModels(Guid aid)
 {
     return(DALQiangGou.SelectQiangGouProductModels(aid));
 }
Ejemplo n.º 14
0
 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);
Ejemplo n.º 15
0
 public static Guid SelectLastActivityId()
 {
     return(DALQiangGou.SelectLastActivityId());
 }
Ejemplo n.º 16
0
 public static IEnumerable <string> SelectPidsByParent(string productId)
 => DALQiangGou.SelectPidsByParent(productId);
Ejemplo n.º 17
0
 public static IEnumerable <QiangGouProductModel> CheckPIDSamePriceInOtherActivity(QiangGouProductModel product) => DALQiangGou.CheckPIDSamePriceInOtherActivity(product);
Ejemplo n.º 18
0
 public static List <ProductModel> SelectcostPriceSql(string pid)
 {
     return(DALQiangGou.SelectProductCostPriceByPids(new List <string> {
         pid
     }).ToList());
 }
Ejemplo n.º 19
0
        public static DataAccess.Entity.ProductModel FetchProductByPID(string pid)
        {
            var model = DALQiangGou.FetchProductByPID(pid);

            return(AssemblyProductInstalService(model));
        }
Ejemplo n.º 20
0
 public static int ExamActivity(Guid ActitvityID) => DALQiangGou.ExamActivity(ActitvityID);
Ejemplo n.º 21
0
 public static int ExamUpdatePrice(QiangGouProductModel model) => DALQiangGou.ExamUpdatePrice(model);
Ejemplo n.º 22
0
 /// <summary>
 /// 查询所有活动
 /// </summary>
 public static IEnumerable <QiangGouModel> SelectAllQiangGou()
 {
     return(DALQiangGou.SelectAllQiangGou());
 }
Ejemplo n.º 23
0
 public static Dictionary <string, IEnumerable <QiangGouProductModel> > SelectDiffActivityProducts(Guid?aid, int atype, IEnumerable <QiangGouProductModel> products)
 => DALQiangGou.SelectDiffActivityProducts(aid, atype, products);