public ResultModel AddAttribute(string name) { using (brnshopEntities context = new brnshopEntities()) { try { var attr = context.bsp_attributes.SingleOrDefault(t => t.name == name); if (attr != null) { return(ResultModel.Fail("该属性已经存在")); } bsp_attributes newattr = new bsp_attributes(); newattr.name = name; context.bsp_attributes.Add(newattr); context.SaveChanges(); return(ResultModel.Success("", newattr.attrid)); } catch (Exception ex) { Logger._.Error(ex); return(ResultModel.Error(ex.ToString())); } } }
/// <summary> /// 编辑商品信息 /// </summary> /// <returns></returns> public ResultModel UpdatePorduct(AddProductModel model) { if (model.skuInfos.Count() != model.skuInfos.Select(t => t.name).Distinct().Count()) { return(ResultModel.Fail("不允许出现重复名称的属性")); } foreach (var skuinfo in model.skuInfos) { if (skuinfo.attributevalues.Count() != skuinfo.attributevalues.Select(t => t.attrvalue).Distinct().Count()) { return(ResultModel.Fail("同一属性下不允许出现重复名称的值")); } } using (brnshopEntities context = new brnshopEntities()) { var tran = context.Database.BeginTransaction(); try { var pro = context.bsp_products.SingleOrDefault(t => t.pid == model.pid); //pro.addtime = DateTime.Now; pro.cateid = 0; pro.costprice = model.costprice; pro.description = model.description; pro.displayorder = model.displayorder; pro.isbest = model.isbest; pro.ishot = model.ishot; pro.rmddisplayorder = model.rmddisplayorder; pro.isnew = model.isnew; pro.isfullcut = model.isfullcut; pro.marketprice = model.marketprice; pro.name = model.name; pro.packprice = model.packprice; pro.showimg = model.showimg; pro.shopprice = model.shopprice; pro.weight = model.weight; pro.startseckilltime = model.startseckilltime; pro.endseckilltime = model.endseckilltime; pro.seckillprice = model.seckillprice; context.SaveChanges(); //编辑商品分类信息 foreach (var cateid in model.cateids) { bsp_categories cate = context.bsp_categories.SingleOrDefault(t => t.cateid == cateid); bsp_cateproducts cateproduct = context.bsp_cateproducts.SingleOrDefault(t => t.pid == pro.pid & t.cateid == cateid); if (cateproduct == null) { cateproduct = new bsp_cateproducts(); cateproduct.cateid = cateid; cateproduct.catename = cate.name.Trim(); cateproduct.pid = pro.pid; cateproduct.pname = pro.name; context.bsp_cateproducts.Add(cateproduct); } else { cateproduct.catename = cate.name.Trim(); cateproduct.pname = pro.name; } context.SaveChanges(); } //删除不存在的分类信息 var deletecateproducts = context.bsp_cateproducts.Where(t => t.pid == pro.pid & !model.cateids.Contains(t.cateid)); context.bsp_cateproducts.RemoveRange(deletecateproducts); context.SaveChanges(); var attrindex = 0; //添加属性和值 foreach (var attribute in model.skuInfos) { bsp_attributes newattribute = new bsp_attributes(); if (attribute.attrid == 0) { context.bsp_attributes.Add(newattribute); }//新增的属性 else { newattribute = context.bsp_attributes.SingleOrDefault(t => t.attrid == attribute.attrid); }//原有的属性 newattribute.name = attribute.name; newattribute.remark = attribute.remark; newattribute.displayorder = attrindex++; context.SaveChanges(); attribute.attrid = newattribute.attrid; var valueindex = 0; foreach (var value in attribute.attributevalues) { bsp_attributevalues newvalue = new bsp_attributevalues(); bsp_productskus newsku = new bsp_productskus(); if (value.attrvalueid == 0) { newvalue.attrid = newattribute.attrid; context.bsp_attributevalues.Add(newvalue); }//新增值和sku else { newvalue = context.bsp_attributevalues.SingleOrDefault(t => t.attrvalueid == value.attrvalueid); }//原有值 newvalue.attrname = newattribute.name; newvalue.attrvalue = value.attrvalue; newvalue.attrgroupname = ""; newvalue.isinput = 0; newvalue.attrdisplayorder = 0; newvalue.attrshowtype = 0; newvalue.attrvaluedisplayorder = 0; newvalue.attrgroupid = 0; newvalue.attrgroupdisplayorder = 0; newvalue.attrdisplayorder = valueindex++; context.SaveChanges(); value.attrvalueid = newvalue.attrvalueid; } } //添加商品的sku信息 var skus = GetAllSkuByAttrAndValue(model.skuInfos); //得到商品已有的sku中的valuid,valueid从大到小按逗号分隔组成字符串比较 var allpskus = context.bsp_productskus.Where(t => t.pid == pro.pid).ToList(); var sku_guids = allpskus.Select(t => t.skuguid).Distinct().ToArray(); List <string> guid_valueidstr = new List <string>(); Dictionary <string, Guid> valueids_skuguid = new Dictionary <string, Guid>(); foreach (var sku_guid in sku_guids) { var valueids = allpskus.Where(t => t.skuguid == sku_guid).OrderBy(t => t.attrvalueid).Select(t => t.attrvalueid.ToString()).ToArray(); guid_valueidstr.Add(string.Join(",", valueids)); if (!valueids_skuguid.ContainsKey(string.Join(",", valueids))) { valueids_skuguid.Add(string.Join(",", valueids), sku_guid); } } guid_valueidstr = guid_valueidstr.Distinct().ToList(); List <string> newvalueids = new List <string>(); foreach (var sku in skus) { var valueids = sku.OrderBy(t => t.valueid).Select(t => t.valueid.ToString()).ToArray(); var nowvalueidstr = string.Join(",", valueids); newvalueids.Add(nowvalueidstr); //该sku不存在,则新增 if (!guid_valueidstr.Contains(nowvalueidstr)) { Guid newskuguid = Guid.NewGuid(); foreach (var s in sku) { bsp_productskus newsku = new bsp_productskus(); newsku.attrid = (short)s.attrid; newsku.attrvalueid = s.valueid; newsku.inputattr = model.skuInfos.FirstOrDefault(t => t.attrid == newsku.attrid).name; newsku.inputvalue = model.skuInfos.FirstOrDefault(t => t.attrid == newsku.attrid).attributevalues.FirstOrDefault(t => t.attrvalueid == newsku.attrvalueid).attrvalue; newsku.isdefaultprice = 1; newsku.pid = pro.pid; newsku.price = -1; newsku.skugid = 0; newsku.skuguid = newskuguid; newsku.stock = -1; context.bsp_productskus.Add(newsku); context.SaveChanges(); } } else { //sku存在更新sku相关的属性和值信息 var skuGuid = sku_guids[guid_valueidstr.IndexOf(nowvalueidstr)]; var skuItems = context.bsp_productskus.Where(t => t.skuguid == skuGuid).ToList(); foreach (var skuItem in skuItems) { skuItem.inputattr = model.skuInfos.SingleOrDefault(t => t.attrid == skuItem.attrid).name; skuItem.inputvalue = model.skuInfos.SingleOrDefault(t => t.attrid == skuItem.attrid).attributevalues.SingleOrDefault(t => t.attrvalueid == skuItem.attrvalueid).attrvalue; } } } //将不需要的sku删除 foreach (var exist_valuestr in guid_valueidstr) { if (!newvalueids.Contains(exist_valuestr)) { var guidstr = valueids_skuguid[exist_valuestr].ToString(); var skuitems = context.bsp_productskus.Where(t => t.skuguid.ToString() == guidstr).ToList(); context.bsp_productskus.RemoveRange(skuitems); } } context.SaveChanges(); var proimgs = context.bsp_productimages.Where(t => t.pid == model.pid).ToList(); context.bsp_productimages.RemoveRange(proimgs); context.SaveChanges(); //修改商品图片 if (model.mainImgs != null) { foreach (var img in model.mainImgs) { bsp_productimages newimg = new bsp_productimages(); newimg.displayorder = img.displayorder; newimg.ismain = 1; newimg.pid = pro.pid; newimg.showimg = img.showimg; context.bsp_productimages.Add(newimg); context.SaveChanges(); } } if (model.detailImgs != null) { foreach (var img in model.detailImgs) { bsp_productimages newimg = new bsp_productimages(); newimg.displayorder = img.displayorder; newimg.ismain = 0; newimg.pid = pro.pid; newimg.showimg = img.showimg; context.bsp_productimages.Add(newimg); context.SaveChanges(); } } tran.Commit(); new ProductCache().Init(); return(ResultModel.Success("修改成功")); } catch (Exception ex) { Logger._.Error(ex); tran.Rollback(); return(ResultModel.Error(ex.ToString())); } } }