public static ShippingRegionInfo SearchShippingRegion(int shippingID, string regionID) { List <ShippingRegionInfo> list = ReadShippingRegionByShipping(shippingID.ToString()); ShippingRegionInfo info = new ShippingRegionInfo(); if (regionID != string.Empty) { while (regionID.Length >= 1) { foreach (ShippingRegionInfo info2 in list) { if (("|" + info2.RegionID + "|").IndexOf("|" + regionID + "|") > -1) { info = info2; break; } } if (info.ID > 0) { return(info); } regionID = regionID.Substring(0, regionID.Length - 1); regionID = regionID.Substring(0, regionID.LastIndexOf('|') + 1); } } return(info); }
/// <summary> /// 买1件商品,根据配送方式,配送地址,读取邮费价格【按单个商品独立计算运费】 /// </summary> /// <param name="shipping"></param> /// <param name="shippingRegion"></param> /// <param name="product"></param> /// <returns></returns> public static decimal ReadShippingMoney(int shippingId, string regionId, ProductInfo product) { decimal shippingMoney = 0; ShippingInfo shipping = ShippingBLL.Read(shippingId); ShippingRegionInfo shippingRegion = ShippingRegionBLL.SearchShippingRegion(shippingId, regionId); switch (shipping.ShippingType) { case (int)ShippingType.Fixed: shippingMoney = shippingRegion.FixedMoeny; break; case (int)ShippingType.Weight: decimal cartProductWeight = 1 * product.Weight; if (cartProductWeight <= shipping.FirstWeight) { shippingMoney = shippingRegion.FirstMoney; } else { shippingMoney = shippingRegion.FirstMoney + Math.Ceiling((cartProductWeight - shipping.FirstWeight) / shipping.AgainWeight) * shippingRegion.AgainMoney; } break; case (int)ShippingType.ProductCount: int cartProductCount = 1; shippingMoney = shippingRegion.OneMoeny + (cartProductCount - 1) * shippingRegion.AnotherMoeny; break; default: break; } return(shippingMoney); }
/// <summary> /// 根据配送方式,配送地址,读取邮费价格【按单个商品独立计算运费】 /// 如买了2件商品,一件商品买了2个,一件商品买了1个,则需计算两次,第一次重量叠加计算(相同商品购买多个则叠加计算) /// </summary> /// <returns></returns> public static decimal ReadShippingMoney(ShippingInfo shipping, ShippingRegionInfo shippingRegion, CartInfo cart) { decimal shippingMoney = 0; switch (shipping.ShippingType) { case (int)ShippingType.Fixed: shippingMoney = shippingRegion.FixedMoeny; break; case (int)ShippingType.Weight: decimal cartProductWeight = cart.BuyCount * cart.Product.Weight; if (cartProductWeight <= shipping.FirstWeight) { shippingMoney = shippingRegion.FirstMoney; } else { shippingMoney = shippingRegion.FirstMoney + Math.Ceiling((cartProductWeight - shipping.FirstWeight) / shipping.AgainWeight) * shippingRegion.AgainMoney; } break; case (int)ShippingType.ProductCount: int cartProductCount = cart.BuyCount; shippingMoney = shippingRegion.OneMoeny + (cartProductCount - 1) * shippingRegion.AnotherMoeny; break; default: break; } return(shippingMoney); }
public ShippingModeInfo GetShippingMode(int modeId, bool includeDetail) { ShippingModeInfo info = null; DbCommand sqlStringCommand = this.database.GetSqlStringCommand("SELECT * FROM Hishop_ShippingTypes st INNER JOIN Hishop_ShippingTemplates temp ON st.TemplateId=temp.TemplateId Where ModeId =@ModeId"); if (includeDetail) { sqlStringCommand.CommandText = sqlStringCommand.CommandText + " SELECT * FROM Hishop_TemplateRelatedShipping Where ModeId =@ModeId"; sqlStringCommand.CommandText = sqlStringCommand.CommandText + " SELECT * FROM Hishop_ShippingTypeGroups WHERE TemplateId = (SELECT TemplateId FROM Hishop_ShippingTypes WHERE ModeId =@ModeId )"; } this.database.AddInParameter(sqlStringCommand, "ModeId", DbType.Int32, modeId); using (IDataReader reader = this.database.ExecuteReader(sqlStringCommand)) { if (reader.Read()) { info = DataMapper.PopulateShippingMode(reader); } if (!includeDetail) { return(info); } reader.NextResult(); while (reader.Read()) { if (reader["ExpressCompanyName"] != DBNull.Value) { info.ExpressCompany.Add((string)reader["ExpressCompanyName"]); } } reader.NextResult(); while (reader.Read()) { ShippingModeGroupInfo item = new ShippingModeGroupInfo { AddPrice = (decimal)reader["AddPrice"], Price = (decimal)reader["Price"], TemplateId = (int)reader["TemplateId"], GroupId = (int)reader["GroupId"] }; info.ModeGroup.Add(item); } string str = ""; foreach (ShippingModeGroupInfo info3 in info.ModeGroup) { str = "SELECT RegionId FROM Hishop_ShippingRegions WHERE GroupId = " + info3.GroupId; using (IDataReader reader2 = this.database.ExecuteReader(CommandType.Text, str)) { while (reader2.Read()) { ShippingRegionInfo info4 = new ShippingRegionInfo { GroupId = info3.GroupId, TemplateId = info3.TemplateId, RegionId = (int)reader2["RegionId"] }; info3.ModeRegions.Add(info4); } } } } return(info); }
protected void SubmitButton_Click(object sender, EventArgs e) { ShippingRegionInfo shippingRegion = new ShippingRegionInfo(); shippingRegion.Id = RequestHelper.GetQueryString <int>("Id"); shippingRegion.Name = Name.Text; shippingRegion.ShippingId = RequestHelper.GetQueryString <int>("ShippingId"); shippingRegion.RegionId = RegionID.ClassIDList; try { shippingRegion.FixedMoeny = Convert.ToDecimal(FixedMoeny.Text); shippingRegion.FirstMoney = Convert.ToDecimal(FirstMoney.Text); shippingRegion.AgainMoney = Convert.ToDecimal(AgainMoney.Text); shippingRegion.OneMoeny = Convert.ToDecimal(OneMoeny.Text); shippingRegion.AnotherMoeny = Convert.ToDecimal(AnotherMoeny.Text); } catch { } string alertMessage = ShopLanguage.ReadLanguage("AddOK"); if (shippingRegion.Id == int.MinValue) { CheckAdminPower("AddShippingRegion", PowerCheckType.Single); int id = ShippingRegionBLL.Add(shippingRegion); AdminLogBLL.Add(ShopLanguage.ReadLanguage("AddRecord"), ShopLanguage.ReadLanguage("ShippingRegion"), id); } else { CheckAdminPower("UpdateShippingRegion", PowerCheckType.Single); ShippingRegionBLL.Update(shippingRegion); AdminLogBLL.Add(ShopLanguage.ReadLanguage("UpdateRecord"), ShopLanguage.ReadLanguage("ShippingRegion"), shippingRegion.Id); alertMessage = ShopLanguage.ReadLanguage("UpdateOK"); } ScriptHelper.Alert(alertMessage, RequestHelper.RawUrl); }
/// <summary> /// 搜索匹配的配送地区 /// </summary> /// <param name="shippingID"></param> /// <param name="regionID"></param> /// <returns></returns> public static ShippingRegionInfo SearchShippingRegion(int shippingId, string regionId) { List <ShippingRegionInfo> shippingRegionList = ShippingRegionBLL.ReadList(shippingId); ShippingRegionInfo shippingRegion = new ShippingRegionInfo(); if (!string.IsNullOrEmpty(regionId)) { while (regionId.Length >= 1) { foreach (ShippingRegionInfo temp in shippingRegionList) { if (("|" + temp.RegionId + "|").IndexOf("|" + regionId + "|") > -1) { shippingRegion = temp; break; } } if (shippingRegion.Id > 0) { break; } else { regionId = regionId.Substring(0, regionId.Length - 1); regionId = regionId.Substring(0, regionId.LastIndexOf('|') + 1); } } } return(shippingRegion); }
private void btnUpdate_Click(object sender, System.EventArgs e) { decimal num; decimal?nullable; decimal num2; decimal?nullable2; if (this.ValidateRegionValues(out num, out nullable, out num2, out nullable2)) { new System.Collections.Generic.List <ShippingModeGroupInfo>(); ShippingModeInfo shippingMode = new ShippingModeInfo { Name = Globals.HtmlEncode(this.txtModeName.Text.Trim()), Weight = num, AddWeight = nullable, Price = num2, AddPrice = nullable2, TemplateId = this.templateId }; foreach (System.Web.UI.WebControls.GridViewRow row in this.grdRegion.Rows) { decimal result = 0m; decimal num3 = 0m; decimal.TryParse(((System.Web.UI.WebControls.TextBox)row.FindControl("txtModeRegionPrice")).Text, out result); decimal.TryParse(((System.Web.UI.WebControls.TextBox)row.FindControl("txtModeRegionAddPrice")).Text, out num3); ShippingModeGroupInfo item = new ShippingModeGroupInfo { Price = result, AddPrice = num3 }; System.Web.UI.WebControls.TextBox box = (System.Web.UI.WebControls.TextBox) this.grdRegion.Rows[row.RowIndex].FindControl("txtRegionvalue_Id"); if (!string.IsNullOrEmpty(box.Text)) { string[] array = box.Text.Split(new char[] { ',' }); for (int i = 0; i < array.Length; i++) { string str = array[i]; ShippingRegionInfo info3 = new ShippingRegionInfo { RegionId = System.Convert.ToInt32(str.Trim()) }; item.ModeRegions.Add(info3); } } shippingMode.ModeGroup.Add(item); } if (SalesHelper.UpdateShippingTemplate(shippingMode)) { this.Page.Response.Redirect("EditShippingTemplate.aspx?TemplateId=" + shippingMode.TemplateId + "&isUpdate=true"); } else { this.ShowMsg("您添加的地区有重复", false); } } }
private void btnCreate_Click(object sender, System.EventArgs e) { decimal weight; decimal?addWeight; decimal price; decimal?addPrice; if (!this.ValidateRegionValues(out weight, out addWeight, out price, out addPrice)) { return; } new System.Collections.Generic.List <ShippingModeGroupInfo>(); ShippingModeInfo shippingModeInfo = new ShippingModeInfo(); shippingModeInfo.Name = Globals.HtmlEncode(this.txtModeName.Text.Trim()); shippingModeInfo.Weight = weight; shippingModeInfo.AddWeight = addWeight; shippingModeInfo.Price = price; shippingModeInfo.AddPrice = addPrice; foreach (System.Web.UI.WebControls.GridViewRow gridViewRow in this.grdRegion.Rows) { decimal price2 = 0m; decimal addPrice2 = 0m; decimal.TryParse(((System.Web.UI.WebControls.TextBox)gridViewRow.FindControl("txtModeRegionPrice")).Text, out price2); decimal.TryParse(((System.Web.UI.WebControls.TextBox)gridViewRow.FindControl("txtModeRegionAddPrice")).Text, out addPrice2); ShippingModeGroupInfo shippingModeGroupInfo = new ShippingModeGroupInfo(); shippingModeGroupInfo.Price = price2; shippingModeGroupInfo.AddPrice = addPrice2; System.Web.UI.WebControls.TextBox textBox = (System.Web.UI.WebControls.TextBox) this.grdRegion.Rows[gridViewRow.RowIndex].FindControl("txtRegionvalue_Id"); if (!string.IsNullOrEmpty(textBox.Text)) { string[] array = textBox.Text.Split(new char[] { ',' }); string[] array2 = array; for (int i = 0; i < array2.Length; i++) { string text = array2[i]; ShippingRegionInfo shippingRegionInfo = new ShippingRegionInfo(); shippingRegionInfo.RegionId = System.Convert.ToInt32(text.Trim()); shippingModeGroupInfo.ModeRegions.Add(shippingRegionInfo); } } shippingModeInfo.ModeGroup.Add(shippingModeGroupInfo); } if (!SalesHelper.CreateShippingTemplate(shippingModeInfo)) { this.ShowMsg("您添加的地区有重复", false); return; } if (!string.IsNullOrEmpty(this.Page.Request.QueryString["source"]) && this.Page.Request.QueryString["source"] == "add") { this.CloseWindow(); return; } this.ClearControlValue(); this.ShowMsg("成功添加了一个配送方式模板", true); }
private void btnCreate_Click(object sender, EventArgs e) { decimal num; decimal?nullable; decimal num2; decimal?nullable2; if (this.ValidateRegionValues(out num, out nullable, out num2, out nullable2)) { new List <ShippingModeGroupInfo>(); ShippingModeInfo shippingMode = new ShippingModeInfo { Name = Globals.HtmlEncode(this.txtModeName.Text.Trim()), Weight = num, AddWeight = nullable, Price = num2, AddPrice = nullable2 }; foreach (GridViewRow row in this.grdRegion.Rows) { decimal result = 0M; decimal num4 = 0M; decimal.TryParse(((TextBox)row.FindControl("txtModeRegionPrice")).Text, out result); decimal.TryParse(((TextBox)row.FindControl("txtModeRegionAddPrice")).Text, out num4); ShippingModeGroupInfo item = new ShippingModeGroupInfo { Price = result, AddPrice = num4 }; TextBox box = (TextBox)this.grdRegion.Rows[row.RowIndex].FindControl("txtRegionvalue_Id"); if (!string.IsNullOrEmpty(box.Text)) { foreach (string str in box.Text.Split(new char[] { ',' })) { ShippingRegionInfo info3 = new ShippingRegionInfo { RegionId = Convert.ToInt32(str.Trim()) }; item.ModeRegions.Add(info3); } } shippingMode.ModeGroup.Add(item); } if (SalesHelper.CreateShippingTemplate(shippingMode)) { if (!string.IsNullOrEmpty(this.Page.Request.QueryString["source"]) && (this.Page.Request.QueryString["source"] == "add")) { this.CloseWindow(); } else { this.ClearControlValue(); this.ShowMsg("成功添加了一个配送方式模板", true); } } else { this.ShowMsg("您添加的地区有重复", false); } } }
public void Update(ShippingRegionInfo entity) { using (var conn = new SqlConnection(connectString)) { string sql = @"UPDATE ShippingRegion SET Name = @Name, ShippingId = @ShippingId, RegionId = @RegionId, FixedMoeny = @FixedMoeny, FirstMoney = @FirstMoney, AgainMoney = @AgainMoney, OneMoeny = @OneMoeny, AnotherMoeny = @AnotherMoeny where Id=@Id"; conn.Execute(sql, entity); } }
public int Add(ShippingRegionInfo entity) { using (var conn = new SqlConnection(connectString)) { string sql = @"INSERT INTO ShippingRegion( Name,ShippingId,RegionId,FixedMoeny,FirstMoney,AgainMoney,OneMoeny,AnotherMoeny) VALUES(@Name,@ShippingId,@RegionId,@FixedMoeny,@FirstMoney,@AgainMoney,@OneMoeny,@AnotherMoeny); select SCOPE_IDENTITY()"; return(conn.Query <int>(sql, entity).Single()); } }
private void SelectShipping() { int shippingId = RequestHelper.GetQueryString <int>("shippingId"); int addressId = RequestHelper.GetQueryString <int>("addressId"); string checkCart = HttpUtility.UrlDecode(CookiesHelper.ReadCookieValue("CheckCart")); int[] cartIds = Array.ConvertAll <string, int>(checkCart.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), k => Convert.ToInt32(k)); if (string.IsNullOrEmpty(checkCart) || cartIds.Length < 1) { ResponseHelper.Write("error|请选择需要购买的商品"); ResponseHelper.End(); } var address = UserAddressBLL.Read(addressId, base.UserId); //计算配送费用 List <CartInfo> cartList = CartBLL.ReadList(base.UserId).Where(k => cartIds.Contains(k.Id)).ToList(); if (cartList.Count < 1) { ResponseHelper.Write("error|请选择需要购买的商品"); ResponseHelper.End(); } int count = 0; int[] ids = cartList.Select(k => k.ProductId).ToArray(); var productList = ProductBLL.SearchList(1, ids.Length, new ProductSearchInfo { InProductId = string.Join(",", ids) }, ref count); cartList.ForEach(k => k.Product = productList.FirstOrDefault(k2 => k2.Id == k.ProductId) ?? new ProductInfo()); decimal shippingMoney = 0; //首先根据ShopId分组,根据供应商的不同来分别计算运费 //然后将分拆后的供应商商品,按单个商品独立计算运费(相同商品购买多个则叠加计算) ShippingInfo shipping = ShippingBLL.Read(shippingId); ShippingRegionInfo shippingRegion = ShippingRegionBLL.SearchShippingRegion(shippingId, address.RegionId); var shopIds = cartList.GroupBy(k => k.Product.ShopId).Select(k => k.Key).ToList(); foreach (var shopId in shopIds) { var shopCartList = cartList.Where(k => k.Product.ShopId == shopId).ToList(); foreach (var shopCartSplit in shopCartList) { shippingMoney += ShippingRegionBLL.ReadShippingMoney(shipping, shippingRegion, shopCartSplit); } } //decimal shippingMoney = ShippingRegionBLL.ReadShippingMoney(shippingId, address.RegionId, cartList); ResponseHelper.Write("ok|" + Math.Round(shippingMoney, 2).ToString()); ResponseHelper.End(); }
private void btnUpdate_Click(object sender, EventArgs e) { int num; int? nullable; decimal num2; decimal?nullable2; if (ValidateRegionValues(out num, out nullable, out num2, out nullable2)) { new List <ShippingModeGroupInfo>(); ShippingModeInfo info6 = new ShippingModeInfo(); info6.Name = Globals.HtmlEncode(txtModeName.Text.Trim()); info6.Weight = num; info6.AddWeight = nullable; info6.Price = num2; info6.AddPrice = nullable2; info6.TemplateId = templateId; ShippingModeInfo target = info6; foreach (GridViewRow row in grdRegion.Rows) { ShippingModeGroupInfo info5 = new ShippingModeGroupInfo(); info5.Price = decimal.Parse(((TextBox)row.FindControl("txtModeRegionPrice")).Text); info5.AddPrice = decimal.Parse(((TextBox)row.FindControl("txtModeRegionAddPrice")).Text); ShippingModeGroupInfo item = info5; TextBox box = (TextBox)grdRegion.Rows[row.RowIndex].FindControl("txtRegionvalue_Id"); foreach (string str in box.Text.Split(new char[] { ',' })) { ShippingRegionInfo info4 = new ShippingRegionInfo(); info4.RegionId = Convert.ToInt32(str.Trim()); ShippingRegionInfo info3 = info4; item.ModeRegions.Add(info3); } target.ModeGroup.Add(item); } ValidationResults results = Hishop.Components.Validation.Validation.Validate <ShippingModeInfo>(target, new string[] { "ValShippingModeInfo" }); string msg = string.Empty; if (!results.IsValid) { foreach (ValidationResult result in (IEnumerable <ValidationResult>)results) { msg = msg + Formatter.FormatErrorMessage(result.Message); } ShowMsg(msg, false); } else if (SalesHelper.UpdateShippingTemplate(target)) { Page.Response.Redirect("EditShippingTemplate.aspx?TemplateId=" + target.TemplateId + "&isUpdate=true"); } else { ShowMsg("您添加的地区有重复", false); } } }
public int AddShippingRegion(ShippingRegionInfo shippingRegion) { SqlParameter[] pt = new SqlParameter[] { new SqlParameter("@name", SqlDbType.NVarChar), new SqlParameter("@shippingID", SqlDbType.Int), new SqlParameter("@regionID", SqlDbType.NVarChar), new SqlParameter("@fixedMoeny", SqlDbType.Decimal), new SqlParameter("@firstMoney", SqlDbType.Decimal), new SqlParameter("@againMoney", SqlDbType.Decimal), new SqlParameter("@oneMoeny", SqlDbType.Decimal), new SqlParameter("@anotherMoeny", SqlDbType.Decimal) }; pt[0].Value = shippingRegion.Name; pt[1].Value = shippingRegion.ShippingID; pt[2].Value = shippingRegion.RegionID; pt[3].Value = shippingRegion.FixedMoeny; pt[4].Value = shippingRegion.FirstMoney; pt[5].Value = shippingRegion.AgainMoney; pt[6].Value = shippingRegion.OneMoeny; pt[7].Value = shippingRegion.AnotherMoeny; return(Convert.ToInt32(ShopMssqlHelper.ExecuteScalar(ShopMssqlHelper.TablePrefix + "AddShippingRegion", pt))); }
public void UpdateShippingRegion(ShippingRegionInfo shippingRegion) { SqlParameter[] pt = new SqlParameter[] { new SqlParameter("@id", SqlDbType.Int), new SqlParameter("@name", SqlDbType.NVarChar), new SqlParameter("@regionID", SqlDbType.NVarChar), new SqlParameter("@fixedMoeny", SqlDbType.Decimal), new SqlParameter("@firstMoney", SqlDbType.Decimal), new SqlParameter("@againMoney", SqlDbType.Decimal), new SqlParameter("@oneMoeny", SqlDbType.Decimal), new SqlParameter("@anotherMoeny", SqlDbType.Decimal) }; pt[0].Value = shippingRegion.ID; pt[1].Value = shippingRegion.Name; pt[2].Value = shippingRegion.RegionID; pt[3].Value = shippingRegion.FixedMoeny; pt[4].Value = shippingRegion.FirstMoney; pt[5].Value = shippingRegion.AgainMoney; pt[6].Value = shippingRegion.OneMoeny; pt[7].Value = shippingRegion.AnotherMoeny; ShopMssqlHelper.ExecuteNonQuery(ShopMssqlHelper.TablePrefix + "UpdateShippingRegion", pt); }
private void btnUpdate_Click(object sender, EventArgs e) { decimal num; decimal?nullable; decimal num2; decimal?nullable2; if (this.ValidateRegionValues(out num, out nullable, out num2, out nullable2)) { new List <ShippingModeGroupInfo>(); ShippingModeInfo shippingMode = new ShippingModeInfo(); shippingMode.Name = Globals.HtmlEncode(this.txtModeName.Text.Trim()); shippingMode.Weight = num; shippingMode.AddWeight = nullable; shippingMode.Price = num2; shippingMode.AddPrice = nullable2; shippingMode.TemplateId = this.templateId; foreach (GridViewRow row in this.grdRegion.Rows) { decimal result = 0M; decimal num4 = 0M; decimal.TryParse(((TextBox)row.FindControl("txtModeRegionPrice")).Text, out result); decimal.TryParse(((TextBox)row.FindControl("txtModeRegionAddPrice")).Text, out num4); ShippingModeGroupInfo item = new ShippingModeGroupInfo(); item.Price = result; item.AddPrice = num4; TextBox box = (TextBox)this.grdRegion.Rows[row.RowIndex].FindControl("txtRegionvalue_Id"); if (!string.IsNullOrEmpty(box.Text)) { foreach (string str in box.Text.Split(new char[] { ',' })) { ShippingRegionInfo info3 = new ShippingRegionInfo(); info3.RegionId = Convert.ToInt32(str.Trim()); item.ModeRegions.Add(info3); } } shippingMode.ModeGroup.Add(item); } if (SalesHelper.UpdateShippingTemplate(shippingMode)) { this.Page.Response.Redirect("EditShippingTemplate.aspx?TemplateId=" + shippingMode.TemplateId + "&isUpdate=true"); } else { this.ShowMsg("您添加的地区有重复", false); } } }
public void PrepareShippingRegionModel(SqlDataReader dr, List <ShippingRegionInfo> shippingRegionList) { while (dr.Read()) { ShippingRegionInfo item = new ShippingRegionInfo(); item.ID = dr.GetInt32(0); item.Name = dr[1].ToString(); item.ShippingID = dr.GetInt32(2); item.RegionID = dr[3].ToString(); item.FixedMoeny = dr.GetDecimal(4); item.FirstMoney = dr.GetDecimal(5); item.AgainMoney = dr.GetDecimal(6); item.OneMoeny = dr.GetDecimal(7); item.AnotherMoeny = dr.GetDecimal(8); shippingRegionList.Add(item); } }
/// <summary> /// 计算订单的邮费 /// </summary> /// <param name="order"></param> /// <returns></returns> public static decimal ReadOrderShippingMoney(OrderInfo order) { decimal shippingMoney = order.ShippingMoney; ShippingInfo shipping = ShippingBLL.Read(order.ShippingId); ShippingRegionInfo shippingRegion = ShippingRegionBLL.SearchShippingRegion(order.ShippingId, order.RegionId); switch (shipping.ShippingType) { case (int)ShippingType.Fixed: shippingMoney = shippingRegion.FixedMoeny; break; case (int)ShippingType.Weight: decimal orderProductWeight = 0; foreach (OrderDetailInfo orderDetail in OrderDetailBLL.ReadList(order.Id)) { orderProductWeight += orderDetail.ProductWeight * orderDetail.BuyCount; } if (orderProductWeight <= shipping.FirstWeight) { shippingMoney = shippingRegion.FirstMoney; } else { shippingMoney = shippingRegion.FirstMoney + Math.Ceiling((orderProductWeight - shipping.FirstWeight) / shipping.AgainWeight) * shippingRegion.AgainMoney; } break; case (int)ShippingType.ProductCount: int orderProductCount = 0; foreach (OrderDetailInfo orderDetail in OrderDetailBLL.ReadList(order.Id)) { if (orderDetail.ParentId == 0) { orderProductCount += orderDetail.BuyCount; } } shippingMoney = shippingRegion.OneMoeny + (orderProductCount - 1) * shippingRegion.AnotherMoeny; break; default: break; } return(shippingMoney); }
public static decimal ReadOrderShippingMoney(OrderInfo order) { decimal shippingMoney = order.ShippingMoney; ShippingInfo info = ShippingBLL.ReadShippingCache(order.ShippingID); ShippingRegionInfo info2 = ShippingRegionBLL.SearchShippingRegion(order.ShippingID, order.RegionID); switch (info.ShippingType) { case 1: return(info2.FixedMoeny); case 2: { decimal num2 = 0M; foreach (OrderDetailInfo info3 in OrderDetailBLL.ReadOrderDetailByOrder(order.ID)) { num2 += info3.ProductWeight * info3.BuyCount; } if (num2 <= info.FirstWeight) { return(info2.FirstMoney); } return(info2.FirstMoney + (Math.Ceiling((decimal)((num2 - info.FirstWeight) / info.AgainWeight)) * info2.AgainMoney)); } case 3: { int num3 = 0; foreach (OrderDetailInfo info3 in OrderDetailBLL.ReadOrderDetailByOrder(order.ID)) { if (info3.FatherID == 0) { num3 += info3.BuyCount; } } return(info2.OneMoeny + ((num3 - 1) * info2.AnotherMoeny)); } } return(shippingMoney); }
public ShippingRegionInfo ReadShippingRegion(int id) { SqlParameter[] pt = new SqlParameter[] { new SqlParameter("@id", SqlDbType.Int) }; pt[0].Value = id; ShippingRegionInfo info = new ShippingRegionInfo(); using (SqlDataReader reader = ShopMssqlHelper.ExecuteReader(ShopMssqlHelper.TablePrefix + "ReadShippingRegion", pt)) { if (reader.Read()) { info.ID = reader.GetInt32(0); info.Name = reader[1].ToString(); info.ShippingID = reader.GetInt32(2); info.RegionID = reader[3].ToString(); info.FixedMoeny = reader.GetDecimal(4); info.FirstMoney = reader.GetDecimal(5); info.AgainMoney = reader.GetDecimal(6); info.OneMoeny = reader.GetDecimal(7); info.AnotherMoeny = reader.GetDecimal(8); } } return(info); }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { CheckAdminPower("ReadShippingRegion", PowerCheckType.Single); RegionID.DataSource = RegionBLL.ReadRegionUnlimitClass(); ShippingId = RequestHelper.GetQueryString <int>("ShippingId"); shipping = ShippingBLL.Read(ShippingId); int shippingRegionId = RequestHelper.GetQueryString <int>("Id"); if (shippingRegionId != int.MinValue) { ShippingRegionInfo shippingRegion = new ShippingRegionInfo(); shippingRegion = ShippingRegionBLL.Read(shippingRegionId); Name.Text = shippingRegion.Name; RegionID.ClassIDList = shippingRegion.RegionId; FixedMoeny.Text = shippingRegion.FixedMoeny.ToString(); FirstMoney.Text = shippingRegion.FirstMoney.ToString(); AgainMoney.Text = shippingRegion.AgainMoney.ToString(); OneMoeny.Text = shippingRegion.OneMoeny.ToString(); AnotherMoeny.Text = shippingRegion.AnotherMoeny.ToString(); } BindControl(ShippingRegionBLL.ReadList(ShippingId), RecordList); } }
protected void SubmitButton_Click(object sender, EventArgs e) { ShippingRegionInfo shippingRegion = new ShippingRegionInfo(); shippingRegion.ID = RequestHelper.GetQueryString <int>("ID"); shippingRegion.Name = this.Name.Text; shippingRegion.ShippingID = RequestHelper.GetQueryString <int>("ShippingID"); shippingRegion.RegionID = this.RegionID.ClassIDList; try { shippingRegion.FixedMoeny = Convert.ToDecimal(this.FixedMoeny.Text); shippingRegion.FirstMoney = Convert.ToDecimal(this.FirstMoney.Text); shippingRegion.AgainMoney = Convert.ToDecimal(this.AgainMoney.Text); shippingRegion.OneMoeny = Convert.ToDecimal(this.OneMoeny.Text); shippingRegion.AnotherMoeny = Convert.ToDecimal(this.AnotherMoeny.Text); } catch { } string message = ShopLanguage.ReadLanguage("AddOK"); if (shippingRegion.ID == -2147483648) { base.CheckAdminPower("AddShippingRegion", PowerCheckType.Single); int id = ShippingRegionBLL.AddShippingRegion(shippingRegion); AdminLogBLL.AddAdminLog(ShopLanguage.ReadLanguage("AddRecord"), ShopLanguage.ReadLanguage("ShippingRegion"), id); } else { base.CheckAdminPower("UpdateShippingRegion", PowerCheckType.Single); ShippingRegionBLL.UpdateShippingRegion(shippingRegion); AdminLogBLL.AddAdminLog(ShopLanguage.ReadLanguage("UpdateRecord"), ShopLanguage.ReadLanguage("ShippingRegion"), shippingRegion.ID); message = ShopLanguage.ReadLanguage("UpdateOK"); } ScriptHelper.Alert(message, RequestHelper.RawUrl); }
protected void Page_Load(object sender, EventArgs e) { if (!this.Page.IsPostBack) { base.CheckAdminPower("ReadShippingRegion", PowerCheckType.Single); this.RegionID.DataSource = RegionBLL.ReadRegionUnlimitClass(); this.shippingID = RequestHelper.GetQueryString <int>("ShippingID"); this.shipping = ShippingBLL.ReadShippingCache(this.shippingID); int queryString = RequestHelper.GetQueryString <int>("ID"); if (queryString != -2147483648) { ShippingRegionInfo info = new ShippingRegionInfo(); info = ShippingRegionBLL.ReadShippingRegion(queryString); this.Name.Text = info.Name; this.RegionID.ClassIDList = info.RegionID; this.FixedMoeny.Text = info.FixedMoeny.ToString(); this.FirstMoney.Text = info.FirstMoney.ToString(); this.AgainMoney.Text = info.AgainMoney.ToString(); this.OneMoeny.Text = info.OneMoeny.ToString(); this.AnotherMoeny.Text = info.AnotherMoeny.ToString(); } base.BindControl(ShippingRegionBLL.ReadShippingRegionByShipping(this.shippingID.ToString()), this.RecordList); } }
/// <summary> /// 提交数据 /// </summary> protected override void PostBack() { string url = "/Mobile/CheckOut.html"; //检查地址 string consignee = StringHelper.AddSafe(RequestHelper.GetForm <string>("Consignee")); if (consignee == string.Empty) { ScriptHelper.AlertFront("收货人姓名不能为空", url); } string tel = StringHelper.AddSafe(RequestHelper.GetForm <string>("Tel")); string mobile = StringHelper.AddSafe(RequestHelper.GetForm <string>("Mobile")); if (tel == string.Empty && mobile == string.Empty) { ScriptHelper.AlertFront("固定电话,手机必须得填写一个", url); } string zipCode = StringHelper.AddSafe(RequestHelper.GetForm <string>("ZipCode")); string address = StringHelper.AddSafe(RequestHelper.GetForm <string>("Address")); if (address == string.Empty) { ScriptHelper.AlertFront("地址不能为空", url); } //验证配送方式 int shippingID = RequestHelper.GetForm <int>("ShippingID"); if (shippingID == int.MinValue) { ScriptHelper.AlertFront("请选择配送方式", url); } //检查金额 decimal productMoney = 0; #region 计算订单金额 checkCart = HttpUtility.UrlDecode(CookiesHelper.ReadCookieValue("CheckCart")); int[] cartIds = Array.ConvertAll <string, int>(checkCart.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), k => Convert.ToInt32(k)); cartList = CartBLL.ReadList(base.UserId); cartList = cartList.Where(k => cartIds.Contains(k.Id)).ToList(); if (cartList.Count < 1) { ResponseHelper.Redirect("/Mobile/cart.html"); ResponseHelper.End(); } //关联的商品 int count = 0; int[] ids = cartList.Select(k => k.ProductId).ToArray(); var products = ProductBLL.SearchList(1, ids.Length, new ProductSearchInfo { InProductId = string.Join(",", ids) }, ref count); //规格与库存判断 foreach (var cart in cartList) { cart.Product = products.FirstOrDefault(k => k.Id == cart.ProductId) ?? new ProductInfo(); if (!string.IsNullOrEmpty(cart.StandardValueList)) { //使用规格的价格和库存 var standardRecord = ProductTypeStandardRecordBLL.Read(cart.ProductId, cart.StandardValueList); int leftStorageCount = standardRecord.Storage - OrderDetailBLL.GetOrderCount(cart.ProductId, cart.StandardValueList); if (leftStorageCount >= cart.BuyCount) { cart.Price = standardRecord.SalePrice; cart.LeftStorageCount = leftStorageCount; //规格集合 cart.Standards = ProductTypeStandardBLL.ReadList(Array.ConvertAll <string, int>(standardRecord.StandardIdList.Split(';'), k => Convert.ToInt32(k))); } else { ScriptHelper.AlertFront("您购物车中 " + cart.Product.Name + " 库存不足,请重新选择", "/Mobile/Cart.html"); } } else { int leftStorageCount = cart.Product.TotalStorageCount - OrderDetailBLL.GetOrderCount(cart.ProductId, cart.StandardValueList); if (leftStorageCount >= cart.BuyCount) { cart.Price = cart.Product.SalePrice; cart.LeftStorageCount = leftStorageCount; } else { ScriptHelper.AlertFront("您购物车中 " + cart.Product.Name + " 库存不足,请重新选择", "/Mobile/Cart.html"); } } } #endregion productMoney = cartList.Sum(k => k.BuyCount * k.Price); decimal favorableMoney = 0; decimal shippingMoney = 0; #region 计算运费与优惠金额 string regionID = RequestHelper.GetForm <string>("RegionID"); //计算配送费用 ShippingInfo shipping = ShippingBLL.Read(shippingID); ShippingRegionInfo shippingRegion = ShippingRegionBLL.SearchShippingRegion(shippingID, regionID); switch (shipping.ShippingType) { case (int)ShippingType.Fixed: shippingMoney = shippingRegion.FixedMoeny; break; case (int)ShippingType.Weight: decimal cartProductWeight = Sessions.ProductTotalWeight; if (cartProductWeight <= shipping.FirstWeight) { shippingMoney = shippingRegion.FirstMoney; } else { shippingMoney = shippingRegion.FirstMoney + Math.Ceiling((cartProductWeight - shipping.FirstWeight) / shipping.AgainWeight) * shippingRegion.AgainMoney; } break; case (int)ShippingType.ProductCount: int cartProductCount = Sessions.ProductBuyCount; shippingMoney = shippingRegion.OneMoeny + (cartProductCount - 1) * shippingRegion.AnotherMoeny; break; default: break; } //计算优惠费用 FavorableActivityInfo favorableActivity = FavorableActivityBLL.Read(DateTime.Now, DateTime.Now, 0); if (favorableActivity.Id > 0) { if (("," + favorableActivity.UserGrade + ",").IndexOf("," + base.GradeID.ToString() + ",") > -1 && Sessions.ProductTotalPrice >= favorableActivity.OrderProductMoney) { switch (favorableActivity.ReduceWay) { case (int)FavorableMoney.Money: favorableMoney += favorableActivity.ReduceMoney; break; case (int)FavorableMoney.Discount: favorableMoney += Sessions.ProductTotalPrice * (10 - favorableActivity.ReduceDiscount) / 10; break; default: break; } if (favorableActivity.ShippingWay == (int)FavorableShipping.Free && ShippingRegionBLL.IsRegionIn(regionID, favorableActivity.RegionId)) { favorableMoney += shippingMoney; } } } #endregion decimal balance = RequestHelper.GetForm <decimal>("Balance"); moneyLeft = UserBLL.ReadUserMore(base.UserId).MoneyLeft; if (balance > moneyLeft) { balance = 0; ScriptHelper.AlertFront("金额有错误,请重新检查", url); } decimal couponMoney = 0; string userCouponStr = RequestHelper.GetForm <string>("UserCoupon"); UserCouponInfo userCoupon = new UserCouponInfo(); if (userCouponStr != string.Empty) { int couponID = 0; if (int.TryParse(userCouponStr.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries)[0], out couponID)) { userCoupon = UserCouponBLL.Read(couponID, base.UserId); if (userCoupon.UserId == base.UserId && userCoupon.IsUse == 0) { couponMoney = CouponBLL.Read(userCoupon.CouponId).Money; } } } if (productMoney - favorableMoney + shippingMoney - balance - couponMoney < 0) { ScriptHelper.AlertFront("金额有错误,请重新检查", url); } //支付方式 string payKey = RequestHelper.GetForm <string>("Pay"); PayPluginsInfo payPlugins = PayPlugins.ReadPayPlugins(payKey); //添加订单 OrderInfo order = new OrderInfo(); order.OrderNumber = ShopCommon.CreateOrderNumber(); order.IsActivity = (int)BoolType.False; if (productMoney - favorableMoney + shippingMoney - balance - couponMoney == 0 || payPlugins.IsCod == (int)BoolType.True) { order.OrderStatus = (int)OrderStatus.WaitCheck; } else { order.OrderStatus = (int)OrderStatus.WaitPay; } order.OrderNote = string.Empty; order.ProductMoney = productMoney; order.Balance = balance; order.FavorableMoney = favorableMoney; order.OtherMoney = 0; order.CouponMoney = couponMoney; order.Consignee = consignee; SingleUnlimitClass singleUnlimitClass = new SingleUnlimitClass(); order.RegionId = singleUnlimitClass.ClassID; order.Address = address; order.ZipCode = zipCode; order.Tel = tel; if (base.UserId == 0) { order.Email = StringHelper.AddSafe(RequestHelper.GetForm <string>("Email")); } else { order.Email = CookiesHelper.ReadCookieValue("UserEmail"); } order.Mobile = mobile; order.ShippingId = shippingID; order.ShippingDate = RequestHelper.DateNow; order.ShippingNumber = string.Empty; order.ShippingMoney = shippingMoney; order.PayKey = payKey; order.PayName = payPlugins.Name; order.PayDate = RequestHelper.DateNow;; order.IsRefund = (int)BoolType.False; order.FavorableActivityId = RequestHelper.GetForm <int>("FavorableActivityID"); order.GiftId = RequestHelper.GetForm <int>("GiftID"); order.InvoiceTitle = StringHelper.AddSafe(RequestHelper.GetForm <string>("InvoiceTitle")); order.InvoiceContent = StringHelper.AddSafe(RequestHelper.GetForm <string>("InvoiceContent")); order.UserMessage = StringHelper.AddSafe(RequestHelper.GetForm <string>("UserMessage")); order.AddDate = RequestHelper.DateNow; order.IP = ClientHelper.IP; order.UserId = base.UserId; order.UserName = base.UserName; int orderID = OrderBLL.Add(order); //使用余额 if (balance > 0) { UserAccountRecordInfo userAccountRecord = new UserAccountRecordInfo(); userAccountRecord.Money = -balance; userAccountRecord.Point = 0; userAccountRecord.Date = RequestHelper.DateNow; userAccountRecord.IP = ClientHelper.IP; userAccountRecord.Note = "支付订单:"; userAccountRecord.UserId = base.UserId; userAccountRecord.UserName = base.UserName; UserAccountRecordBLL.Add(userAccountRecord); } //使用优惠券 string strUserCoupon = RequestHelper.GetForm <string>("UserCoupon"); if (couponMoney > 0 && strUserCoupon != "0|0") { userCoupon.IsUse = (int)BoolType.True; userCoupon.OrderId = orderID; UserCouponBLL.Update(userCoupon); } AddOrderProduct(orderID); //更改产品库存订单数量 ProductBLL.ChangeOrderCountByOrder(orderID, ChangeAction.Plus); ResponseHelper.Redirect("/Mobile/Finish-I" + orderID.ToString() + ".html"); }
/// <summary> /// 拆分不同的供应商商品,生成订单 /// </summary> private List <int> SplitShopProduct(List <CartInfo> cartList, OrderInfo mainOrder) { List <int> orderIds = new List <int>(); /*-----------根据ShopId分组---------------------------------------------*/ var shopIds = cartList.GroupBy(k => k.Product.ShopId).Select(k => k.Key).ToList(); /*----------------------------------------------------------------------*/ /*-----------积分抵扣额度、比率(不可使用积分)----------------------------- * decimal totalRate = (decimal)ShopConfig.ReadConfigInfo().BuyPointTotalRate; * decimal pointRate = (decimal)ShopConfig.ReadConfigInfo().BuyPointMoneyRate; * /*----------------------------------------------------------------------*/ var pay = PayPlugins.ReadPayPlugins(mainOrder.PayKey); // //循环产生订单 foreach (var shopId in shopIds) { var shopCartList = cartList.Where(k => k.Product.ShopId == shopId).ToList(); /*-----------分拆后的订单价格---------------------------------------*/ //运费 (去掉平均分配运费,根据供应商的不同来分别计算运费) //decimal shippingMoney = mainOrder.ShippingMoney / shopIds.Count; decimal shippingMoney = 0; //然后将分拆后的供应商商品,按单个商品独立计算运费(相同商品购买多个则叠加计算) ShippingInfo shipping = ShippingBLL.Read(mainOrder.ShippingId); ShippingRegionInfo shippingRegion = ShippingRegionBLL.SearchShippingRegion(mainOrder.ShippingId, mainOrder.RegionId); foreach (var shopCartSplit in shopCartList) { shippingMoney += ShippingRegionBLL.ReadShippingMoney(shipping, shippingRegion, shopCartSplit); } //产品金额 decimal productMoney = 0; shopCartList.ForEach(k => productMoney += k.BuyCount * k.Price); /*------------------------------------------------------------------*/ decimal pointMoney = 0; int point = 0; /*-----------根据比率,分配积分抵扣金额(不可使用积分)---------------- * decimal pointMoney = 0; * int point = 0; * if (mainOrder.Point > 0) * { * pointMoney = productMoney * totalRate; * point = (int)(pointMoney * pointRate); * if (point > mainOrder.Point) * { * point = mainOrder.Point; * pointMoney = Math.Round(point / pointRate, 2); * } * } * /*----------------------------------------------------------------------*/ /*-----------应付总价---------------------------------------------------*/ //decimal payMoney = productMoney + shippingMoney - pointMoney; decimal payMoney = productMoney + shippingMoney; /*----------------------------------------------------------------------*/ /*-----------分配余额---------------------------------------------------*/ decimal balance = 0; if (mainOrder.Balance > 0) { balance = mainOrder.Balance; if (balance > payMoney) { balance = payMoney; } } payMoney -= balance; /*----------------------------------------------------------------------*/ /*-----------添加订单---------------------------------------------------*/ OrderInfo order = new OrderInfo(); order.ShopId = shopId; order.OrderNumber = ShopCommon.CreateOrderNumber(); order.IsActivity = (int)BoolType.False; order.OrderStatus = payMoney == 0 || pay.IsCod == (int)BoolType.True ? (int)OrderStatus.WaitCheck : (int)OrderStatus.WaitPay; order.ProductMoney = productMoney; order.Consignee = mainOrder.Consignee; order.RegionId = mainOrder.RegionId; order.Address = mainOrder.Address; order.ZipCode = mainOrder.ZipCode; order.Tel = mainOrder.Tel; order.Mobile = mainOrder.Mobile; order.Email = mainOrder.Email; order.ShippingId = mainOrder.ShippingId; order.ShippingDate = RequestHelper.DateNow; order.ShippingMoney = shippingMoney; order.Point = point; order.PointMoney = pointMoney; order.Balance = balance; order.PayKey = mainOrder.PayKey; order.PayName = mainOrder.PayName; order.PayDate = RequestHelper.DateNow; order.IsRefund = (int)BoolType.False; order.UserMessage = mainOrder.UserMessage; order.AddDate = RequestHelper.DateNow; order.IP = ClientHelper.IP; order.UserId = base.UserId; order.UserName = base.UserName; int orderId = OrderBLL.Add(order); //添加订单产品 foreach (var cart in shopCartList) { var orderDetail = new OrderDetailInfo(); orderDetail.OrderId = orderId; orderDetail.ProductId = cart.ProductId; orderDetail.ProductName = cart.ProductName; orderDetail.ProductWeight = cart.Product.Weight; orderDetail.ProductPrice = cart.Price; orderDetail.BidPrice = cart.Product.BidPrice; orderDetail.BuyCount = cart.BuyCount; OrderDetailBLL.Add(orderDetail); } /*----------------------------------------------------------------------*/ /*-----------使用余额、积分(余额消费记录更改到同步订单金额到图楼泛生活会员管理系统成功后,才予记录) * if (balance > 0 && order.OrderStatus == (int)OrderStatus.WaitCheck) * { * var accountRecord = new UserAccountRecordInfo * { * RecordType = (int)AccountRecordType.Money, * Money = -balance, * Point = 0, * Date = DateTime.Now, * IP = ClientHelper.IP, * Note = "支付订单:" + order.OrderNumber, * UserId = base.UserId, * UserName = base.UserName * }; * UserAccountRecordBLL.Add(accountRecord); * } * ------------------------------------------------------------------------*/ /*-----------不可使用积分------------------------------------------------- * if (point > 0) * { * var accountRecord = new UserAccountRecordInfo * { * RecordType = (int)AccountRecordType.Point, * Money = 0, * Point = -point, * Date = DateTime.Now, * IP = ClientHelper.IP, * Note = "支付订单:" + order.OrderNumber, * UserId = base.UserId, * UserName = base.UserName * }; * UserAccountRecordBLL.Add(accountRecord); * } * ------------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ /*-----------更改产品库存订单数量---------------------------------------*/ ProductBLL.ChangeOrderCountByOrder(orderId, ChangeAction.Plus); /*----------------------------------------------------------------------*/ mainOrder.Point -= point; mainOrder.Balance -= balance; orderIds.Add(orderId); } return(orderIds); }
private void Submit() { /*-----------重新验证选择的商品------------------------------------------*/ checkCart = StringHelper.AddSafe(RequestHelper.GetForm <string>("CheckCart")); int[] cartIds = Array.ConvertAll <string, int>(checkCart.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), k => Convert.ToInt32(k)); string checkCartCookies = HttpUtility.UrlDecode(CookiesHelper.ReadCookieValue("CheckCart")); if (checkCart != checkCartCookies) { ResponseHelper.Write("error|购买商品发生了变化,请重新提交|" + isMobile + "/cart.html"); ResponseHelper.End(); } if (string.IsNullOrEmpty(checkCart) || cartIds.Length < 1) { ResponseHelper.Write("error|请选择需要购买的商品|" + isMobile + "/cart.html"); ResponseHelper.End(); } /*----------------------------------------------------------------------*/ /*-----------读取购物车清单---------------------------------------------*/ List <CartInfo> cartList = CartBLL.ReadList(base.UserId); cartList = cartList.Where(k => cartIds.Contains(k.Id)).ToList(); if (cartList.Count <= 0) { ResponseHelper.Write("error|请选择需要购买的商品|" + isMobile + "/cart.html"); ResponseHelper.End(); } /*----------------------------------------------------------------------*/ /*-----------必要性检查:收货地址,配送方式,支付方式-------------------*/ var address = new UserAddressInfo { Id = RequestHelper.GetForm <int>("address_id") }; var shipping = new ShippingInfo { Id = RequestHelper.GetForm <int>("ShippingId") }; var pay = new PayPluginsInfo { Key = StringHelper.AddSafe(RequestHelper.GetForm <string>("pay")) }; bool reNecessaryCheck = false; doReNecessaryCheck: if (address.Id < 1) { ResponseHelper.Write("error|请选择收货地址|"); ResponseHelper.End(); } if (shipping.Id < 1) { ResponseHelper.Write("error|请选择配送方式|"); ResponseHelper.End(); } if (string.IsNullOrEmpty(pay.Key)) { ResponseHelper.Write("error|请选择支付方式|"); ResponseHelper.End(); } //读取数据库中的数据,进行重复验证 if (!reNecessaryCheck) { address = UserAddressBLL.Read(address.Id, base.UserId); shipping = ShippingBLL.Read(shipping.Id); pay = PayPlugins.ReadPayPlugins(pay.Key); reNecessaryCheck = true; goto doReNecessaryCheck; } /*----------------------------------------------------------------------*/ /*-----------商品清单、商品总价、邮费价格、库存检查---------------------*/ decimal productMoney = 0; int count = 0; int[] ids = cartList.Select(k => k.ProductId).ToArray(); var products = ProductBLL.SearchList(1, ids.Length, new ProductSearchInfo { InProductId = string.Join(",", ids) }, ref count); foreach (var cart in cartList) { cart.Product = products.FirstOrDefault(k => k.Id == cart.ProductId) ?? new ProductInfo(); if (!string.IsNullOrEmpty(cart.StandardValueList)) { //使用规格的价格和库存 var standardRecord = ProductTypeStandardRecordBLL.Read(cart.ProductId, cart.StandardValueList); cart.Price = standardRecord.SalePrice; cart.LeftStorageCount = standardRecord.Storage - standardRecord.OrderCount; } else { cart.Price = cart.Product.SalePrice; cart.LeftStorageCount = cart.Product.TotalStorageCount - cart.Product.OrderCount; } //不需要检查库存,所有商品均可购买 ////检查库存 //if (cart.BuyCount > cart.LeftStorageCount) //{ // ResponseHelper.Write("error|商品[" + cart.ProductName + "]库存不足,无法购买|"); // ResponseHelper.End(); //} productMoney += cart.BuyCount * cart.Price; } decimal shippingMoney = 0; //首先根据ShopId分组,根据供应商的不同来分别计算运费 //然后将分拆后的供应商商品,按单个商品独立计算运费(相同商品购买多个则叠加计算) ShippingRegionInfo shippingRegion = ShippingRegionBLL.SearchShippingRegion(shipping.Id, address.RegionId); var shopIds = cartList.GroupBy(k => k.Product.ShopId).Select(k => k.Key).ToList(); foreach (var shopId in shopIds) { var shopCartList = cartList.Where(k => k.Product.ShopId == shopId).ToList(); foreach (var shopCartSplit in shopCartList) { shippingMoney += ShippingRegionBLL.ReadShippingMoney(shipping, shippingRegion, shopCartSplit); } } /*----------------------------------------------------------------------*/ int point = 0; decimal pointMoney = 0; /*-----------计算积分金额(不可使用积分)----------------------------------- * decimal totalRate = (decimal)ShopConfig.ReadConfigInfo().BuyPointTotalRate; * decimal pointRate = (decimal)ShopConfig.ReadConfigInfo().BuyPointMoneyRate; * int point = RequestHelper.GetForm<int>("point"); * decimal pointMoney = 0; * if (totalRate > 0 && pointRate > 0 && point > 0) * { * var member = WebService.Member.GetMember(); * decimal leftPoint = member.Point; * if (point > leftPoint) * { * ResponseHelper.Write("error|您的积分不足|"); * ResponseHelper.End(); * } * else * { * pointMoney = Math.Round(point / pointRate, 2); * * if (pointMoney > productMoney * totalRate) * { * ResponseHelper.Write("error|" + "您最多可以使用 " + (productMoney * totalRate * pointRate) + " 积分|"); * ResponseHelper.End(); * } * } * } * ------------------------------------------------------------------------*/ /*-----------应付总价---------------------------------------------------*/ //decimal payMoney = productMoney + shippingMoney - pointMoney; decimal payMoney = productMoney + shippingMoney; /*----------------------------------------------------------------------*/ var user = UserBLL.Read(base.UserId); /*-----------计算图楼卡余额---------------------------------------------*/ decimal balance = RequestHelper.GetForm <decimal>("money"); if (balance > 0) { bool isSuccess; string msg; isSuccess = true; msg = ""; //var account = WebService.Account.GetAccount(user.CardNo, user.CardPwd, out isSuccess, out msg); if (!isSuccess) { ResponseHelper.Write("error|" + msg + "|"); ResponseHelper.End(); } if (balance > 0 /*(account.Zacc + account.Sacc)*/) { ResponseHelper.Write("error|您的图楼卡余额不足|"); ResponseHelper.End(); } else { if (balance > payMoney) { ResponseHelper.Write("error|" + "您只需使用 " + payMoney + " 元即可支付订单|"); ResponseHelper.End(); } } } payMoney -= balance; /*----------------------------------------------------------------------*/ /*-----------检查金额---------------------------------------------------*/ if (payMoney < 0) { ResponseHelper.Write("error|金额有错误,请重新检查|"); ResponseHelper.End(); } /*----------------------------------------------------------------------*/ /*-----------组装基础订单模型,循环生成订单-----------------------------*/ OrderInfo order = new OrderInfo(); order.ProductMoney = productMoney; order.Consignee = address.Consignee; order.RegionId = address.RegionId; order.Address = address.Address; order.ZipCode = address.ZipCode; order.Tel = address.Tel; order.Mobile = address.Mobile; order.Email = CookiesHelper.ReadCookieValue("UserEmail"); order.ShippingId = shipping.Id; order.ShippingDate = RequestHelper.DateNow; order.ShippingMoney = shippingMoney; order.Point = point; order.PointMoney = pointMoney; order.Balance = balance; order.PayKey = pay.Key; order.PayName = pay.Name; order.PayDate = RequestHelper.DateNow; order.IsRefund = (int)BoolType.False; order.UserMessage = StringHelper.AddSafe(RequestHelper.GetForm <string>("msg")); order.AddDate = RequestHelper.DateNow; order.IP = ClientHelper.IP; order.UserId = base.UserId; order.UserName = base.UserName; //循环生成订单 var orderIds = SplitShopProduct(cartList, order); /*----------------------------------------------------------------------*/ var orders = OrderBLL.ReadList(orderIds.ToArray(), base.UserId); /*-----------如果使用了图楼卡支付,需同步到会员管理系统中---------------*/ /*第二步,在订单付款操作(用户端)中,同步图楼卡余额*/ if (balance > 0) { List <string[]> paras = new List <string[]>(); foreach (var oo in orders) { if (oo.Balance > 0 && oo.OrderStatus == (int)OrderStatus.WaitCheck) { string[] para = new string[2]; para[0] = oo.OrderNumber; para[1] = oo.Balance.ToString(); paras.Add(para); } } //如果有全额使用了图楼卡余额支付的订单,需同步到会员管理系统中 if (paras.Count > 0) { bool isSuccess; string msg; isSuccess = true; msg = ""; //WebService.Account.Purchase(user.CardNo, user.CardPwd, paras, out isSuccess, out msg); //同步失败,删除订单及相关信息 if (!isSuccess) { //删除订单、订单详细、订单状态相关数据 OrderBLL.Delete(orderIds.ToArray(), base.UserId); //更改产品库存订单数量 foreach (var orderId in orderIds) { ProductBLL.ChangeOrderCountByOrder(orderId, ChangeAction.Minus); } ResponseHelper.Write("error|" + msg + "|"); ResponseHelper.End(); } else { //记录用户余额消费记录 foreach (var par in paras) { var accountRecord = new UserAccountRecordInfo { RecordType = (int)AccountRecordType.Money, Money = -decimal.Parse(par[1]), Point = 0, Date = DateTime.Now, IP = ClientHelper.IP, Note = "支付订单:" + par[0], UserId = base.UserId, UserName = base.UserName }; UserAccountRecordBLL.Add(accountRecord); } } } } /*----------------------------------------------------------------------*/ /*-----------删除购物车中已下单的商品-----------------------------------*/ CartBLL.Delete(cartIds, base.UserId); CookiesHelper.DeleteCookie("CheckCart"); /*----------------------------------------------------------------------*/ /*如果所有订单均由图楼卡支付完成,则跳转到会员中心,否则跳转到支付提示页面*/ if (orders.Count(k => k.OrderStatus == (int)OrderStatus.WaitPay) > 0) { ResponseHelper.Write("ok||/finish.html?id=" + string.Join(",", orders.Select(k => k.Id).ToArray())); } else { ResponseHelper.Write("ok||/user/index.html"); } ResponseHelper.End(); /*----------------------------------------------------------------------*/ }
private void btnCreate_Click(object sender, EventArgs e) { decimal defaultNumber = default(decimal); decimal? addNumber = default(decimal?); decimal price = default(decimal); decimal? addPrice = default(decimal?); ValuationMethods valuationMethod = default(ValuationMethods); if (this.ValidateRegionValues(out defaultNumber, out addNumber, out price, out addPrice, out valuationMethod)) { IList <ShippingTemplateGroupInfo> list = new List <ShippingTemplateGroupInfo>(); string value = this.hidRegionJson.Value; if (!string.IsNullOrEmpty(value)) { IList <ShippingTemplateGroupMode> list2 = new List <ShippingTemplateGroupMode>(); list2 = JsonHelper.ParseFormJson <List <ShippingTemplateGroupMode> >(value); if (list2 != null && list2.Count > 0) { foreach (ShippingTemplateGroupMode item in list2) { ShippingTemplateGroupInfo shippingTemplateGroupInfo = new ShippingTemplateGroupInfo(); shippingTemplateGroupInfo.AddPrice = item.AddPrice; shippingTemplateGroupInfo.AddNumber = item.AddNumber; shippingTemplateGroupInfo.DefaultNumber = item.DefaultNumber; shippingTemplateGroupInfo.Price = item.DefaultPrice; string safeIDList = Globals.GetSafeIDList(item.RegionIds, ',', true); string[] array = safeIDList.Split(','); foreach (string obj in array) { ShippingRegionInfo shippingRegionInfo = new ShippingRegionInfo(); shippingRegionInfo.RegionId = obj.ToInt(0); shippingTemplateGroupInfo.ModeRegions.Add(shippingRegionInfo); } list.Add(shippingTemplateGroupInfo); } } } IList <ShippingTemplateFreeGroupInfo> list3 = new List <ShippingTemplateFreeGroupInfo>(); string value2 = this.hidFreeJson.Value; if (!string.IsNullOrEmpty(value2)) { IList <ShippingTemplateFreeGroupMode> list4 = new List <ShippingTemplateFreeGroupMode>(); list4 = JsonHelper.ParseFormJson <List <ShippingTemplateFreeGroupMode> >(value2); if (list4 != null && list4.Count > 0) { foreach (ShippingTemplateFreeGroupMode item2 in list4) { ShippingTemplateFreeGroupInfo shippingTemplateFreeGroupInfo = new ShippingTemplateFreeGroupInfo(); shippingTemplateFreeGroupInfo.ConditionType = item2.ConditionType; shippingTemplateFreeGroupInfo.ConditionNumber = item2.ConditionNumber; string safeIDList2 = Globals.GetSafeIDList(item2.RegionIds, ',', true); string[] array2 = safeIDList2.Split(','); foreach (string obj2 in array2) { ShippingFreeRegionInfo shippingFreeRegionInfo = new ShippingFreeRegionInfo(); shippingFreeRegionInfo.RegionId = obj2.ToInt(0); shippingTemplateFreeGroupInfo.ModeRegions.Add(shippingFreeRegionInfo); } list3.Add(shippingTemplateFreeGroupInfo); } } } string text = Globals.StripAllTags(this.txtModeName.Text.Trim()).Replace("\\", "").Replace("<", "") .Replace(">", ""); if (text == "" || text.Length > 20) { this.ShowMsg("模板名称不能为空,长度限制在20字符以内,不允许包含脚本标签和特殊字符,系统会自动过滤", false); } else if (SalesHelper.IsExistTemplateName(text, 0)) { this.ShowMsg("模板名称重复,请重新输入", false); } else { ShippingTemplateInfo shippingTemplateInfo = new ShippingTemplateInfo(); shippingTemplateInfo.ModeGroup = list; shippingTemplateInfo.FreeGroup = list3; shippingTemplateInfo.IsFreeShipping = (this.radIsFreeShipping.SelectedIndex != 0 && true); shippingTemplateInfo.ValuationMethod = valuationMethod; shippingTemplateInfo.TemplateName = Globals.HtmlEncode(text); shippingTemplateInfo.DefaultNumber = defaultNumber; shippingTemplateInfo.AddNumber = addNumber; shippingTemplateInfo.Price = price; shippingTemplateInfo.AddPrice = addPrice; if (SalesHelper.CreateShippingTemplate(shippingTemplateInfo)) { if (!string.IsNullOrEmpty(this.Page.Request.QueryString["source"]) && this.Page.Request.QueryString["source"] == "add") { this.CloseWindow(); } else { this.ClearControlValue(); this.ShowMsg("成功添加了一个配送方式模板", true, "ManageShippingTemplates.aspx"); } } else { this.ShowMsg("您添加的地区有重复", false); } } } }
public static int Add(ShippingRegionInfo entity) { return(dal.Add(entity)); }
/// <summary> /// 根据运费模版Id获取发货模版 /// </summary> /// <param name="TemplateId">模版Id</param> /// <returns></returns> public ShippingModeInfo GetShippingMode(int TemplateId) { ShippingModeInfo shippingModeInfo = null; DbCommand sqlStringCommand = this.database.GetSqlStringCommand("SELECT *,ModeId=-1,Name='',Description='',DisplaySequence=-1 from Ecshop_ShippingTemplates Where TemplateId =@TemplateId"); DbCommand expr_37 = sqlStringCommand; expr_37.CommandText += " SELECT * FROM Ecshop_ShippingTypeGroups WHERE TemplateId = @TemplateId"; this.database.AddInParameter(sqlStringCommand, "TemplateId", DbType.Int32, TemplateId); using (IDataReader dataReader = this.database.ExecuteReader(sqlStringCommand)) { if (dataReader.Read()) { shippingModeInfo = DataMapper.PopulateShippingMode(dataReader); } dataReader.NextResult(); while (dataReader.Read()) { shippingModeInfo.ModeGroup.Add(new ShippingModeGroupInfo { AddPrice = (decimal)dataReader["AddPrice"], Price = (decimal)dataReader["Price"], TemplateId = (int)dataReader["TemplateId"], GroupId = (int)dataReader["GroupId"] }); /* 2015-08-27 修改之前 * foreach (ShippingModeGroupInfo current in shippingModeInfo.ModeGroup) * { * string commandText = "SELECT RegionId FROM Ecshop_ShippingRegions WHERE GroupId = " + current.GroupId; * using (IDataReader dataReader2 = this.database.ExecuteReader(CommandType.Text, commandText)) * { * while (dataReader2.Read()) * { * current.ModeRegions.Add(new ShippingRegionInfo * { * GroupId = current.GroupId, * TemplateId = current.TemplateId, * RegionId = (int)dataReader2["RegionId"] * }); * } * } * }*/ } //获取发货区域信息 List <ShippingRegionInfo> listShippingRegion = new List <ShippingRegionInfo>(); List <ShippingModeGroupInfo> groupInfo = (shippingModeInfo != null && shippingModeInfo.ModeGroup != null && shippingModeInfo.ModeGroup.Count > 0) ? shippingModeInfo.ModeGroup.OrderByDescending(a => a.GroupId).ToList() : null; if (groupInfo != null && groupInfo.Count > 0) { var groupId = string.Join(",", groupInfo.Select(t => t.GroupId).Distinct().ToArray()); string commandText = "SELECT TemplateId,GroupId,RegionId FROM Ecshop_ShippingRegions WHERE GroupId in(" + groupId + ") order by GroupId desc"; using (IDataReader dataReader2 = this.database.ExecuteReader(CommandType.Text, commandText)) { while (dataReader2.Read()) { ShippingRegionInfo shippingRegionInfo = new ShippingRegionInfo(); if (dataReader2["GroupId"] != System.DBNull.Value) { shippingRegionInfo.GroupId = (int)dataReader2["GroupId"]; } if (dataReader2["GroupId"] != System.DBNull.Value) { shippingRegionInfo.TemplateId = (int)dataReader2["TemplateId"]; } if (dataReader2["RegionId"] != System.DBNull.Value) { shippingRegionInfo.RegionId = (int)dataReader2["RegionId"]; } listShippingRegion.Add(shippingRegionInfo); } } groupInfo.ForEach(t => { var list = listShippingRegion.Where(a => a.GroupId == t.GroupId); var li = t.ModeRegions.ToList(); li.AddRange(list); t.ModeRegions = li; }); } return(shippingModeInfo); } }
public static void Update(ShippingRegionInfo entity) { dal.Update(entity); }