/// <summary> /// 获取购物车数据 /// </summary> /// <param name="id"></param> /// <param name="AttID"></param> /// <returns></returns> public CarProductDetail GetProDetail(int id, int AttID, string atID = "-1") { CarProductDetail proDetail = new CarProductDetail(); string sql = "select a.ID,a.CategoryID,a.PartName,a.PartModel,a.PartSuppyNo,a.Price,b.BrandName from Parts a left join PartBrand b on a.PartBrand=b.ID where a.ID={0} "; CarProDetail model = db.Database.SqlQuery <CarProDetail>(string.Format(sql, id)).FirstOrDefault(); if (model != null) { string imgSql = " select * from ImgStock where PartID={0} "; DAO.ImgStock img = db.Database.SqlQuery <DAO.ImgStock>(string.Format(imgSql, id)).FirstOrDefault(); proDetail.imgStock = img; string CSql = " select * from PartsCategory where ID={0} and IsShow=1 "; DAO.PartsCategory pc = db.Database.SqlQuery <DAO.PartsCategory>(string.Format(CSql, model.CategoryID)).FirstOrDefault(); proDetail.partCate = pc; PartExtendBll extBll = new PartExtendBll(); List <DAO.PartsExtend> att = extBll.GetCarItems(id, AttID); proDetail.partExt = att; if (att.Count > 0) { if (atID != "-1" && atID != null) { int aid = int.Parse(atID); DAO.ActiveAttr a = db.ActiveAttr.Where(o => o.AProID == id && o.AtrrID == AttID && o.ActiveID == aid).FirstOrDefault(); if (a != null) { model.Price = a.NewPrice; proDetail.activeM = db.Active.Where(o => o.ID == aid).FirstOrDefault(); } } else { model.Price = att.Last().AttrPrice; } } else { if (atID != "-1" && atID != null) { int aid = int.Parse(atID); DAO.ActivePros p = db.ActivePros.Where(o => o.ActiveID == aid && o.ProID == id).FirstOrDefault(); if (p != null) { model.Price = p.NewPrice; proDetail.activeM = db.Active.Where(o => o.ID == aid).FirstOrDefault(); } } } proDetail.proDetail = model; return(proDetail); } else { return(null); } }
/// <summary> /// 产品详情页 /// </summary> /// <param name="pid"></param> /// <returns></returns> private List <PartAttrOutModel> GetExtends(int pid) { List <PartAttrOutModel> list = new List <PartAttrOutModel>(); PartExtendBll extBll = new PartExtendBll(); List <PartAttrNameModel> allAttr = extBll.GetAttrs(pid.ToString()); if (allAttr != null) { foreach (var item in allAttr) { PartAttrOutModel model = new PartAttrOutModel(); model.AttrName = item.AttrName; model.ParentAttr = item.ParentAttr; model.AttrList = extBll.GetItems(pid, item.AttrName); list.Add(model); } } return(list); }
/// <summary> /// 订单价格校验 /// </summary> /// <param name="shopList"></param> /// <param name="oAmount"></param> /// <returns></returns> public bool OrderAmountCheck(List <Shop> shopList, decimal oAmount, decimal ratio, out decimal shopListTotle) { shopListTotle = 0; decimal normTotle = 0; decimal ActTotle = 0; PartExtendBll pbll = new PartExtendBll(); ProductBll proBll = new ProductBll(); foreach (Shop item in shopList) { var qty = 0; if (int.TryParse(item.Qty, out qty)) { //产品 DAO.Parts product = proBll.GetPartModel(item.ID); //先检查产品是否有属性,是否是最后一个属性 if (!string.IsNullOrEmpty(item.Attrs)) { //先检查是否是最终属性,没有子属性 DAO.PartsExtend childAttr = pbll.GetChildAttrModel(item.ID, item.Attrs); if (childAttr == null) { //没有子属性为有效的属性 DAO.PartsExtend currAttr = pbll.GetPartAttrModel(item.ID, item.Attrs); if (currAttr == null) { //属性没有效 return(false); } else { if (item.Type != "-1") { int aid = int.Parse(item.Type); int pid = int.Parse(item.ID); int tid = int.Parse(item.Attrs); DAO.ActiveAttr att = db.ActiveAttr.Where(m => m.ActiveID == aid && m.AProID == pid && m.AtrrID == tid).FirstOrDefault(); if (att != null) { ActTotle += qty * att.NewPrice; } else { normTotle += qty * currAttr.AttrPrice; } } else { normTotle += qty * currAttr.AttrPrice; } } } else { //不是最终属性 错误 return(false); } } else { //没有属性 if (item.Type != "-1") { int aid = int.Parse(item.Type); int pid = int.Parse(item.ID); DAO.ActivePros pro = db.ActivePros.Where(m => m.ActiveID == aid && m.ProID == pid).FirstOrDefault(); if (pro != null) { ActTotle += qty * pro.NewPrice; } else { normTotle += qty * product.Price; } } else { //没有活动 normTotle += qty * product.Price; } } } else { //数量不是数字 return(false); } } //获取会员等级折扣 shopListTotle = Math.Round(ActTotle + Math.Round(normTotle * 1, 2), 2); if (shopListTotle == oAmount) { //价格验证成功 return(true); } else { //价格验证失败 return(false); } }
/// <summary> /// 提交订单 /// </summary> /// <param name="shopList">商品列表</param> /// <param name="sendinfo">配送信息</param> /// <param name="uid">当前用户</param> /// <param name="ratio">当前用户折扣</param> /// <param name="orderPrice">订单金额</param> /// <param name="shopListTotle">商品列表总金额</param> /// <returns>订单号</returns> public string AddOrder(List <Shop> shopList, SendInfo sendinfo, string uid, decimal ratio, decimal orderPrice, decimal shopListTotle) { PartExtendBll pbll = new PartExtendBll(); ProductBll proBll = new ProductBll(); MemberBLL memBll = new MemberBLL(); DAO.MemberBase user = memBll.GetUserByID(uid); DAO.Order order = new DAO.Order(); order.OrderId = CommonUtils.OrderUtil.NewOrderId; if (order != null) { order.Uid = user.ID; order.UserName = user.LoginName; order.UserPhone = user.Mobile; } order.OrderSource = "0"; order.OrderTime = DateTime.Now; order.OrderStatus = "未处理";//订单初始状态 order.Consignee = sendinfo.Name; order.Address = sendinfo.Address; order.CellPhone = sendinfo.Phone; order.PayStatus = "未支付"; order.Payment = ""; order.Remarks = ""; order.Ratio = ratio; decimal disAmout = shopList.Where(h => h.Type == "-1").Sum(h => (decimal.Parse(h.Price))); order.DiscountAmount = (1 - ratio) * disAmout; order.ShippingCost = 0; order.TotalPrice = orderPrice; order.SearchTag = ""; order.OperatorRemarks = ""; order.OrderType = "0"; order.OrderFrom = 0;//网站 order.Prov = sendinfo.Prov; order.City = sendinfo.City; order.Area = sendinfo.Area; db.Order.Add(order); DAO.Addship addShip = new DAO.Addship(); addShip = isAddressByUid(uid); if (addShip != null) { upAddShip(sendinfo.Name, uid, sendinfo.City, sendinfo.Prov, sendinfo.Area, sendinfo.Address, sendinfo.Phone); } else { DAO.Addship addShipS = new DAO.Addship(); addShipS.name = sendinfo.Name; addShipS.province = sendinfo.Prov; addShipS.scity = sendinfo.City; addShipS.region = sendinfo.Area; addShipS.address = sendinfo.Address; addShipS.UID = Convert.ToInt32(uid); addShipS.phone = sendinfo.Phone; db.Addship.Add(addShipS); db.SaveChanges(); } //db.SaveChanges(); foreach (Shop item in shopList) { CarProductDetail m; int i = -1; int pid = -1; if (int.TryParse(item.ID, out pid)) { if (!string.IsNullOrEmpty(item.Attrs) && int.TryParse(item.Attrs, out i)) { m = proBll.GetProDetail(pid, i, item.Type); } else { m = proBll.GetProDetail(pid, -1, item.Type); } if (m != null) { m.Qty = int.Parse(item.Qty); m.lastAttr = item.Attrs; DAO.OrderProList pro = new DAO.OrderProList(); pro.OrderId = order.OrderId; pro.ProductID = m.proDetail.ID; pro.ProductName = m.proDetail.PartName; pro.SupplyNo = m.proDetail.PartSuppyNo; pro.Num = m.Qty; pro.Price = m.proDetail.Price; pro.InputTime = DateTime.Now; pro.PType = m.proDetail.CategoryID; pro.AttrID = i; pro.IsFlag = int.Parse(item.Type); //活动号 pro.activeName = m.activeM == null ? "" : m.activeM.Name; StringBuilder sb = new StringBuilder(""); foreach (var ext in m.partExt) { sb.Append("|" + ext.AttrName + ":" + ext.AttrValue + "|"); } pro.AttrDecribe = sb.ToString(); db.OrderProList.Add(pro); opActiveStock(pro.IsFlag, pro.ProductID, pro.AttrID, pro.Num); OrderBuss obll = new OrderBuss(); int number = Convert.ToInt32(obll.getPartStock(m.proDetail.ID).StockNUM) - 1; obll.upPartStock(m.proDetail.ID, number); //db.SaveChanges(); } } } int addResult = db.SaveChanges();//db.SaveChanges(); if (addResult > 0) { return(order.OrderId.ToString()); } else { return(null); } }