using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using PosDataTest.Common; namespace PosDataTest { public class GoodsTableHelper { static int promotion = 0; /// /// 主界面DataGrid数据源表结构 /// /// public static DataTable GetCommodityTableStructure() { DataTable GoodsTable = new DataTable(); GoodsTable.Columns.Add("commodity_barcode", typeof(string)); //商品条码 GoodsTable.Columns.Add("commodity_name", typeof(string)); //商品名称 GoodsTable.Columns.Add("count", typeof(decimal)); //销售数量 GoodsTable.Columns.Add("commodity_retailprice", typeof(decimal)); //销售单价 GoodsTable.Columns.Add("discount_rate", typeof(decimal)); //优惠金额 GoodsTable.Columns.Add("price", typeof(decimal)); //应收金额 GoodsTable.Columns.Add("actualprice", typeof(decimal)); //优惠单价 GoodsTable.Columns.Add("memberprice", typeof(decimal)); //会员单价 GoodsTable.Columns.Add("commodity_code", typeof(string)); //商品编码 GoodsTable.Columns.Add("foreground", typeof(string)); //字体颜色 GoodsTable.Columns.Add("background", typeof(string)); //背景颜色 GoodsTable.Columns.Add("promotioncode", typeof(string)); //套餐编号 GoodsTable.Columns.Add("promotion", typeof(string)); //套餐标识 GoodsTable.Columns.Add("listidentifier", typeof(string)); //取单标识 GoodsTable.Columns.Add("ConditionPromotion", typeof(string)); //促销条件 GoodsTable.Columns.Add("PrintGoodsName", typeof(string)); //打印名称 GoodsTable.Columns.Add("kitchenindex", typeof(decimal)); //厨打编号 GoodsTable.Columns.Add("commodity_type", typeof(string)); //商品类型 GoodsTable.Columns.Add("commodity_symbol", typeof(string)); //商品标识 GoodsTable.Columns.Add("ticketprefix", typeof(string)); //促销前缀 GoodsTable.Columns.Add("promotionid", typeof(decimal)); //促销内码 GoodsTable.Columns.Add("promotionprice", typeof(decimal)); //促销金额 GoodsTable.Columns.Add("promotionname", typeof(string)); //促销名称 GoodsTable.Columns.Add("promotionexplain", typeof(string)); //促销提示 GoodsTable.Columns.Add("commodity_unit", typeof(string)); //商品单位 GoodsTable.Columns.Add("material1", typeof(string)); //商品配料 GoodsTable.Columns.Add("material2", typeof(string)); //商品配料 GoodsTable.Columns.Add("material3", typeof(string)); //商品配料 GoodsTable.Columns.Add("material4", typeof(string)); //商品配料 GoodsTable.Columns.Add("material5", typeof(string)); //商品配料 GoodsTable.Columns.Add("meteringmethod", typeof(decimal)); //散称标识 GoodsTable.Columns.Add("kitchenconfig_index", typeof(decimal)); //触屏厨打 GoodsTable.Columns.Add("commodity_memberprice", typeof(decimal)); //会员单价 return GoodsTable; } /// /// 主页面异常交易数据源 /// /// public static DataTable GetExTableStructure() { DataTable GoodsTable = new DataTable(); GoodsTable.Columns.Add("count", typeof(decimal)); GoodsTable.Columns.Add("price", typeof(decimal)); GoodsTable.Columns.Add("listidentifier", typeof(string)); GoodsTable.Columns.Add("commodity_code", typeof(string)); return GoodsTable; } /// /// 列表按行添加 /// /// 商品数据行 /// 商品列表 /// 是否叠加 /// 是否会员 /// public static void KeyInputSale(DataRow goodsRow, DataTable GoodsTables, bool IsOverly, bool IsMember = false) { //记录商品刷入时间 PosControl.ProductAdditionTime = DateTime.Now; //开始添加商品 goodsRow = PromotionCheck(goodsRow, GoodsTables); if (IsMember) { goodsRow["actualprice"] = goodsRow["memberprice"]; goodsRow["price"] = (decimal)goodsRow["memberprice"] * (decimal)goodsRow["Count"]; } if (IsOverly) { DataRow[] _Row = GoodsTables.Select("commodity_barcode = '" + goodsRow["commodity_barcode"] + "'"); if (_Row.Length > 0) { _Row[0]["price"] = (decimal)_Row[0]["price"] + (decimal)goodsRow["price"]; _Row[0]["count"] = (decimal)_Row[0]["count"] + (decimal)goodsRow["Count"]; if (int.TryParse(QualityHelper.price_accuracy, out int _Accuracy)) { decimal _Price = Math.Round(decimal.Parse( _Row[0]["price"].ToString()), _Accuracy, MidpointRounding.AwayFromZero); if (_Price > 0) { _Row[0]["price"] = _Price.ToString("F2"); } } _Row[0]["discount_rate"] = ((decimal)_Row[0]["commodity_retailprice"] * (decimal)_Row[0]["count"]) - (decimal)_Row[0]["price"]; _Row[0]["actualprice"] = (decimal)_Row[0]["price"] / (decimal)_Row[0]["count"]; _Row[0]["promotionname"] = goodsRow["promotionname"]; //_Row[0]["discount_rate"] = (decimal)_Row[0]["discount_rate"] + (decimal)goodsRow["discount_rate"]; return; } } if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( goodsRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price >= 0) { goodsRow["price"] = _Price.ToString("F2"); } } goodsRow["discount_rate"] = ((decimal)goodsRow["commodity_retailprice"] * (decimal)goodsRow["Count"]) - (decimal)goodsRow["price"]; GoodsTables.Rows.Add(goodsRow); } /// /// 列表按行添加(商品按钮版) /// /// 商品数据行 /// 商品列表 /// 是否叠加 /// 销售数量 /// public static DataRow TouchInputSale(DataRow goodsRow, DataTable GoodsTables, bool IsOverly, decimal saleCount = 1, bool IsMember = false) { //记录商品刷入时间 PosControl.ProductAdditionTime = DateTime.Now; //开始添加商品 DataRow _DataRow = GoodsTables.NewRow(); _DataRow["commodity_barcode"] = goodsRow["commodity_barcode"]; _DataRow["commodity_name"] = goodsRow["commodity_name"]; _DataRow["count"] = saleCount; _DataRow["commodity_retailprice"] = goodsRow["commodity_retailprice"]; if (IsMember && decimal.TryParse(goodsRow["memberprice"].ToString(), out decimal _MemberPrice)) { _DataRow["actualprice"] = goodsRow["commodity_memberprice"]; } else { _DataRow["actualprice"] = goodsRow["commodity_retailprice"]; } _DataRow["price"] = ((decimal)goodsRow["actualprice"] * saleCount).ToString("F2"); _DataRow["memberprice"] = goodsRow["commodity_memberprice"]; _DataRow["commodity_code"] = goodsRow["commodity_code"]; _DataRow["PrintGoodsName"] = goodsRow["commodity_name"]; _DataRow["kitchenindex"] = goodsRow["KITCHENCONFIG_INDEX"]; _DataRow["commodity_type"] = goodsRow["commodity_type"]; _DataRow["commodity_symbol"] = goodsRow["commodity_symbol"]; _DataRow["meteringmethod"] = goodsRow["meteringmethod"]; _DataRow = PromotionCheck(_DataRow, GoodsTables); if (IsOverly && QualityHelper.IsMaterial != "1" && (decimal)goodsRow["METERINGMETHOD"] == 1) { DataRow[] _Row = GoodsTables.Select("commodity_barcode = '" + _DataRow["commodity_barcode"] + "'"); if (_Row.Length > 0) { _Row[0]["count"] = ((decimal)_Row[0]["count"] + 1).ToString("F3"); _Row[0]["price"] = ((decimal)_Row[0]["price"] + (decimal)_DataRow["price"]).ToString("F2"); if (int.TryParse(QualityHelper.price_accuracy, out int Place)) { decimal _Price = Math.Round(decimal.Parse(_Row[0]["price"].ToString()), Place, MidpointRounding.AwayFromZero); if (_Price > 0) { _Row[0]["price"] = _Price.ToString("F2"); } } _Row[0]["discount_rate"] = ((decimal)_Row[0]["commodity_retailprice"] * (decimal)_Row[0]["count"]) - (decimal)_Row[0]["price"]; _Row[0]["actualprice"] = (decimal)_Row[0]["price"] / (decimal)_Row[0]["count"]; _Row[0]["promotionname"] = _DataRow["promotionname"]; //_Row[0]["discount_rate"] = ((decimal)_Row[0]["commodity_retailprice"] - // (decimal)_Row[0]["actualprice"]) * (decimal)_Row[0]["count"]; return _DataRow; } } if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( _DataRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { _DataRow["price"] = _Price.ToString("F2"); } } _DataRow["discount_rate"] = (decimal)_DataRow["commodity_retailprice"] * (decimal)_DataRow["count"] - (decimal)_DataRow["price"]; //string _strSelectSql = "SELECT PROMOTION_CODE FROM T_PROMOTION WHERE ISVALID = 1 " + // "AND SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + // QualityHelper.shopcode + "' AND COMMODITY_CODE = '" + _DataRow["commodity_code"] + "'"; //try //{ // DataTable dataTable = DBHelper.QueryOdbc(_strSelectSql).Tables[0]; // if (dataTable.Rows.Count > 0) // { // _DataRow["promotioncode"] = dataTable.Rows[0]["PROMOTION_CODE"]; // } //} //catch { } GoodsTables.Rows.Add(_DataRow); return _DataRow; } /// /// 触屏版添加商品(新版) /// /// 商品数据行 /// 商品列表 /// 是否叠加 /// 销售数量 /// public static DataRow TouchInputSale(Model.CommodityModel commodityModel, DataTable GoodsTables, bool IsOverly, decimal saleCount = 1, bool IsMember = false) { //记录商品刷入时间 PosControl.ProductAdditionTime = DateTime.Now; //开始添加商品到销售列表 DataRow _DataRow = GoodsTables.NewRow(); _DataRow["commodity_barcode"] = commodityModel.CommodityBarCode; _DataRow["commodity_name"] = commodityModel.CommodityName; _DataRow["commodity_unit"] = commodityModel.CommodityUnit; _DataRow["count"] = saleCount; _DataRow["commodity_retailprice"] = commodityModel.RetailPrice; _DataRow["actualprice"] = IsMember ? commodityModel.MemberPrice : commodityModel.RetailPrice; _DataRow["price"] = ((IsMember ? commodityModel.MemberPrice : commodityModel.RetailPrice) * saleCount).ToString("F2"); _DataRow["memberprice"] = commodityModel.MemberPrice; _DataRow["commodity_code"] = commodityModel.CommodityCode; _DataRow["PrintGoodsName"] = commodityModel.PrintGoodsName; _DataRow["kitchenindex"] = commodityModel.KitchenIndex; _DataRow["commodity_type"] = commodityModel.CommodityType; _DataRow["commodity_symbol"] = commodityModel.CommoditySymbol; _DataRow["meteringmethod"] = commodityModel.MeteringMethod; _DataRow["material1"] = commodityModel.Material1; _DataRow["material2"] = commodityModel.Material2; _DataRow["material3"] = commodityModel.Material3; _DataRow["material4"] = commodityModel.Material4; _DataRow["material5"] = commodityModel.Material5; _DataRow = PromotionCheck(_DataRow, GoodsTables); if (IsOverly && QualityHelper.IsMaterial != "1" && commodityModel.MeteringMethod == 1) { DataRow[] _Row = GoodsTables.Select("commodity_barcode = '" + _DataRow["commodity_barcode"] + "'"); if (_Row.Length > 0) { _Row[0]["count"] = ((decimal)_Row[0]["count"] + 1).ToString("F3"); _Row[0]["price"] = ((decimal)_Row[0]["price"] + (decimal)_DataRow["price"]).ToString("F2"); if (int.TryParse(QualityHelper.price_accuracy, out int Place)) { decimal _Price = Math.Round(decimal.Parse(_Row[0]["price"].ToString()), Place, MidpointRounding.AwayFromZero); if (_Price > 0) { _Row[0]["price"] = _Price.ToString("F2"); } } _Row[0]["discount_rate"] = ((decimal)_Row[0]["commodity_retailprice"] * (decimal)_Row[0]["count"]) - (decimal)_Row[0]["price"]; _Row[0]["actualprice"] = (decimal)_Row[0]["price"] / (decimal)_Row[0]["count"]; _Row[0]["promotionname"] = _DataRow["promotionname"]; return _DataRow; } } if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( _DataRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { _DataRow["price"] = _Price.ToString("F2"); } } _DataRow["discount_rate"] = (decimal)_DataRow["commodity_retailprice"] * (decimal)_DataRow["count"] - (decimal)_DataRow["price"]; //string _strSelectSql = "SELECT PROMOTION_CODE FROM T_PROMOTION WHERE ISVALID = 1 " + // "AND SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + // QualityHelper.shopcode + "' AND COMMODITY_CODE = '" + _DataRow["commodity_code"] + "'"; //try //{ // DataTable dataTable = DBHelper.QueryOdbc(_strSelectSql).Tables[0]; // if (dataTable.Rows.Count > 0) // { // _DataRow["promotioncode"] = dataTable.Rows[0]["PROMOTION_CODE"]; // } //} //catch { } GoodsTables.Rows.Add(_DataRow); return _DataRow; } //public static DataTable /// /// 企业会员优惠减免记录 /// /// 流水列表 /// 减免金额 public static void CouponAdd(DataTable goodTable, decimal couponAmount) { DataRow _SellRow = goodTable.NewRow(); _SellRow["commodity_barcode"] = "99999999"; _SellRow["commodity_name"] = "企业会员优惠"; _SellRow["count"] = 0; _SellRow["commodity_retailprice"] = 0; _SellRow["discount_rate"] = "0"; _SellRow["price"] = (couponAmount * -1).ToString("F2"); _SellRow["actualprice"] = 1; _SellRow["memberprice"] = 1; _SellRow["commodity_code"] = "99999999"; _SellRow["foreground"] = "#575757"; _SellRow["background"] = "#91DAC9"; _SellRow["promotioncode"] = ""; _SellRow["promotion"] = ""; _SellRow["listidentifier"] = ""; _SellRow["ConditionPromotion"] = ""; _SellRow["PrintGoodsName"] = "企业会员优惠"; _SellRow["kitchenindex"] = "1000"; _SellRow["commodity_type"] = "优惠"; _SellRow["commodity_symbol"] = "T0"; _SellRow["material1"] = ""; _SellRow["material2"] = ""; _SellRow["material3"] = ""; _SellRow["material4"] = ""; _SellRow["material5"] = ""; goodTable.Rows.Add(_SellRow); } /// /// 大巴券优惠减免记录 /// /// 流水列表 /// 减免金额 /// 优惠方式名称 public static void CouponAdd(DataTable goodTable, decimal couponAmount, string couponName) { string str_Barcode; string str_Symbol; switch (couponName) { case "企业会员优惠": str_Barcode = "99999999"; str_Symbol = "T0"; break; case "大巴券优惠": str_Barcode = "99999998"; str_Symbol = "T-1"; break; case "团购餐优惠": str_Barcode = "99999997"; str_Symbol = "T-2"; break; default://其他优惠,如:电子券(无固定名称) str_Barcode = "99999996"; str_Symbol = "T-3"; break; } DataRow _SellRow = goodTable.NewRow(); _SellRow["commodity_barcode"] = str_Barcode; _SellRow["commodity_name"] = couponName; _SellRow["count"] = 0; _SellRow["commodity_retailprice"] = 0; _SellRow["discount_rate"] = "0"; _SellRow["price"] = (couponAmount * -1).ToString("F2"); _SellRow["actualprice"] = 1; _SellRow["memberprice"] = 1; _SellRow["commodity_code"] = str_Barcode; _SellRow["foreground"] = "#575757"; _SellRow["background"] = "#91DAC9"; _SellRow["promotioncode"] = ""; _SellRow["promotion"] = ""; _SellRow["listidentifier"] = ""; _SellRow["ConditionPromotion"] = ""; _SellRow["PrintGoodsName"] = couponName; _SellRow["kitchenindex"] = "1000"; _SellRow["commodity_type"] = "优惠"; _SellRow["commodity_symbol"] = str_Symbol; _SellRow["material1"] = ""; _SellRow["material2"] = ""; _SellRow["material3"] = ""; _SellRow["material4"] = ""; _SellRow["material5"] = ""; goodTable.Rows.Add(_SellRow); } /// /// 列表删除行 /// /// 要删除的行 /// 商品列表 public static void TableRemove(DataRow goodsRow, DataTable GoodsTables) { if (goodsRow["ConditionPromotion"].ToString().Trim() != "") { string _StrSelectSql = string.Format("SELECT THRESHOLD_AMOUNT,COMMODITY_CODE,DISCOUNT_RATE,PROMOTION_ID " + "FROM T_SALESPROMOTE WHERE SERVERPARTCODE = '{0}' AND SHOPCODE = '{1}' AND PROMOTION_ID = {2} AND " + "CONDITION_SKU = '{3}'", QualityHelper.serverpartcode, QualityHelper.shopcode, goodsRow["ConditionPromotion"], goodsRow["commodity_code"]); try { DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_StrSelectSql).Tables[0]; if (_DataTable.Rows.Count > 0) { decimal ThresholdAmount = decimal.Parse(_DataTable.Rows[0]["threshold_amount"].ToString()); string ConditionCode = goodsRow["PROMOTION_ID"].ToString(); string SellCode = _DataTable.Rows[0]["COMMODITY_CODE"].ToString(); decimal DiscountRate = decimal.Parse(_DataTable.Rows[0]["DISCOUNT_RATE"].ToString()); GoodsTables.DefaultView.RowFilter = "ConditionPromotion = '" + ConditionCode + "'"; DataTable ConditionTable = GoodsTables.DefaultView.ToTable(); GoodsTables.DefaultView.RowFilter = ""; decimal.TryParse(ConditionTable.Compute("Sum(count)", "").ToString(), out decimal ConditionCout); if (QualityHelper.commodity_overlay != "1") { if ((ConditionCout % ThresholdAmount) == 0) { DataRow[] _Row = GoodsTables.Select("commodity_code = '" + SellCode + "' and Price = " + DiscountRate); if (_Row.Length > 0) { _Row[_Row.Length - 1]["discount_rate"] = 0; _Row[_Row.Length - 1]["Price"] = _Row[0]["commodity_retailprice"]; } } } else { DataRow[] _Row = GoodsTables.Select("commodity_code = '" + SellCode + "'"); if (_Row.Length > 0) { _Row[0]["discount_rate"] = 0; _Row[0]["Price"] = (decimal.Parse(_Row[0]["commodity_retailprice"].ToString()) * decimal.Parse(_Row[0]["Count"].ToString())); } } } } catch (Exception ex) { } } DataRow _DataRow = GoodsTables.NewRow(); _DataRow.ItemArray = goodsRow.ItemArray; GoodsTables.Rows.Remove(goodsRow); PromotionCheck(_DataRow, GoodsTables, true); } /// /// 取单添加数据 /// /// 取单数据列表 /// 商品列表 /// public static void TableRowsAdd(DataTable _TakeBillTable, DataTable GoodsTables, bool IsMember = false) { //记录商品刷入时间 PosControl.ProductAdditionTime = DateTime.Now; //开始添加商品到销售列表 for (int i = 0; i < _TakeBillTable.Rows.Count; i++) { DataRow Rows = GoodsTables.NewRow(); Rows["commodity_barcode"] = _TakeBillTable.Rows[i]["inputcode"]; Rows["commodity_name"] = _TakeBillTable.Rows[i]["commodity_name"]; Rows["PrintGoodsName"] = _TakeBillTable.Rows[i]["commodity_name"]; Rows["count"] = ((decimal)_TakeBillTable.Rows[i]["sellcount"]).ToString("F2"); Rows["commodity_retailprice"] = _TakeBillTable.Rows[i]["sellprice"]; Rows["discount_rate"] = ((decimal)_TakeBillTable.Rows[i]["sellprice"] - (decimal)_TakeBillTable.Rows[i]["offprice"]) * (decimal)_TakeBillTable.Rows[i]["sellcount"]; Rows["price"] = ((decimal)_TakeBillTable.Rows[i]["factamount"]).ToString("F2"); Rows["commodity_code"] = _TakeBillTable.Rows[i]["commodity_code"]; Rows["actualprice"] = _TakeBillTable.Rows[i]["offprice"]; Rows["memberprice"] = _TakeBillTable.Rows[i]["COMMODITY_MEMBERPRICE"]; Rows["foreground"] = "#575757"; Rows["background"] = "#91DAC9"; Rows["listidentifier"] = _TakeBillTable.Rows[i]["ticketcode"]; Rows["kitchenindex"] = _TakeBillTable.Rows[i]["KITCHENCONFIG_INDEX"]; Rows["commodity_type"] = _TakeBillTable.Rows[i]["commodity_type"]; Rows["commodity_symbol"] = _TakeBillTable.Rows[i]["commodity_symbol"]; Rows["meteringmethod"] = _TakeBillTable.Rows[i]["meteringmethod"]; if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( Rows["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { Rows["price"] = _Price.ToString("F2"); } } Rows["discount_rate"] = (decimal)Rows["commodity_retailprice"] * (decimal)Rows["count"] - (decimal)Rows["price"]; if (IsMember) { Rows["actualprice"] = _TakeBillTable.Rows[i]["COMMODITY_MEMBERPRICE"]; Rows["discount_rate"] = ((decimal)_TakeBillTable.Rows[i]["sellprice"] - (decimal)_TakeBillTable.Rows[i]["COMMODITY_MEMBERPRICE"]) * (decimal)_TakeBillTable.Rows[i]["sellcount"]; Rows["price"] = (decimal)_TakeBillTable.Rows[i]["COMMODITY_MEMBERPRICE"] * (decimal)_TakeBillTable.Rows[i]["sellcount"]; } GoodsTables.Rows.Add(Rows); } } /// /// 列表数据全清 /// /// 商品列表 /// public static void TableClear(DataTable GoodsTables) { GoodsTables.Clear(); } /// /// 单行打折 /// /// 折扣率 /// 商品数据行 /// 是否折上折 /// 商品列表 /// public static void TableDisCount(decimal DisCount, DataRow goodsRow, bool AllowDisCount) { goodsRow["actualprice"] = AllowDisCount ? ((decimal)goodsRow["actualprice"] * DisCount) : ((decimal)goodsRow["commodity_retailprice"] * DisCount); goodsRow["price"] = (decimal)goodsRow["actualprice"] * (decimal)goodsRow["count"]; if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse(goodsRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { goodsRow["price"] = _Price.ToString("F2"); } } goodsRow["discount_rate"] = ((decimal)goodsRow["commodity_retailprice"] * (decimal)goodsRow["count"]) - (decimal)goodsRow["price"]; } /// /// 整单打折 /// /// 折扣率 /// 是否折上折 /// 商品列表 /// public static void TableDisCount(decimal DisCount, bool AllowDisCount, DataTable GoodsTables) { foreach (DataRow _DataRow in GoodsTables.Rows) { _DataRow["actualprice"] = AllowDisCount ? ((decimal)_DataRow["actualprice"] * DisCount) : ((decimal)_DataRow["commodity_retailprice"] * DisCount); _DataRow["price"] = ((decimal)_DataRow["actualprice"] * (decimal)_DataRow["count"]).ToString("F2"); if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( _DataRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { _DataRow["price"] = _Price.ToString("F2"); } } _DataRow["discount_rate"] = ((decimal)_DataRow["commodity_retailprice"] * (decimal)_DataRow["count"]) - (decimal)_DataRow["price"]; } } /// /// 消费券转优惠 /// /// 消费总金额 /// 优惠总金额 /// 商品列表 public static void CouponToChange(decimal totalAmount, decimal smallChange, DataTable goodsTable) { //#region 替换为直接插入特殊优惠流水 decimal _Coupon = smallChange; decimal _Discount = (totalAmount - smallChange) / totalAmount; for (int i = 0; i < goodsTable.Rows.Count; i++) { if (i + 1 == goodsTable.Rows.Count) { goodsTable.Rows[i]["actualprice"] = Math.Round(((decimal)goodsTable.Rows[i]["price"] - _Coupon) / (decimal)goodsTable.Rows[i]["count"], 4, MidpointRounding.AwayFromZero); } else { goodsTable.Rows[i]["actualprice"] = (decimal)goodsTable.Rows[i]["actualprice"] * _Discount; } if (!int.TryParse(QualityHelper.price_accuracy, out int Places)) { Places = 1; } decimal _Price = Math.Round((decimal)goodsTable.Rows[i]["actualprice"] * (decimal)goodsTable.Rows[i]["count"], Places, MidpointRounding.AwayFromZero); _Coupon = _Coupon - ((decimal)goodsTable.Rows[i]["price"] - _Price); if (_Price >= 0) { goodsTable.Rows[i]["price"] = _Price.ToString("F2"); } goodsTable.Rows[i]["discount_rate"] = ((decimal)goodsTable.Rows[i]["commodity_retailprice"] * (decimal)goodsTable.Rows[i]["count"]) - (decimal)goodsTable.Rows[i]["price"]; } //#endregion } /// /// 改价 /// /// 修改金额 /// 商品数据行 /// 商品列表 /// public static void TableRevise(decimal RevisePrice, DataRow goodsRow) { goodsRow["actualprice"] = RevisePrice; goodsRow["price"] = RevisePrice * (decimal)goodsRow["count"]; if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( goodsRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { goodsRow["price"] = _Price.ToString("F2"); } } goodsRow["discount_rate"] = ((decimal)goodsRow["commodity_retailprice"] * (decimal)goodsRow["count"]) - (decimal)goodsRow["price"]; } /// /// 数量修改 /// /// 修改数量 /// 商品数据行 /// public static void TableCountChange(decimal goodsCount, DataRow goodsRow) { goodsRow["count"] = goodsCount; goodsRow["price"] = goodsCount * (decimal)goodsRow["actualprice"]; if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse(goodsRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { goodsRow["price"] = _Price.ToString("F2"); } } goodsRow["discount_rate"] = ((decimal)goodsRow["commodity_retailprice"] * (decimal)goodsRow["count"]) - (decimal)goodsRow["price"]; } /// /// 触摸版改数量和改价 /// /// 数量 /// 单价 /// 商品行 public static void ChangeData(decimal count, decimal retailPrice, DataRow dataRow, DataTable goodTable, bool IsDiscount = false) { dataRow["count"] = count; dataRow["actualprice"] = retailPrice; dataRow["price"] = (retailPrice * count).ToString("f2"); if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse(dataRow["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { dataRow["price"] = _Price.ToString("F2"); } } dataRow["discount_rate"] = ((decimal)dataRow["commodity_retailprice"] * (decimal)dataRow["count"]) - (decimal)dataRow["price"]; if (goodTable != null) { PromotionCheck(dataRow, goodTable, true); } } /// /// 挂单 /// /// 商品列表 /// 挂单标识 /// public static bool HangUp(DataTable goodsTable, DateTime restingDate, string ticketCode) { if (string.IsNullOrWhiteSpace(ticketCode)) { ticketCode = restingDate.ToString("yyyyMMddHHmmss"); } int _MaxID = ESSupport.DataStorage.DataFunction.CreateNextSequence("T_SELLDATA_BAK", "SELLDATA_ID"); string _InsertSql = "INSERT INTO T_SELLDATA_BAK (SELLDATA_ID,SELLDATA_DATE,SERVERPARTCODE," + "SHOPCODE,MACHINECODE,COMMODITY_CODE,SELLCOUNT,SELLPRICE,OFFPRICE,FACTAMOUNT," + "COMMODITY_NAME,INPUTCODE,LINENUM,METERINGMETHOD,TICKETCODE," + "COMMODITY_TYPE,COMMODITY_SYMBOL,COMMODITY_MEMBERPRICE,KITCHENCONFIG_INDEX) VALUES "; for (int i = 0; i < goodsTable.Rows.Count; i++) { _InsertSql += "(" + (_MaxID + i) + ",DATETIME('" + restingDate.ToString() + "'),'" + QualityHelper.serverpartcode + "','" + QualityHelper.shopcode + "','" + QualityHelper.machinecode + "','" + goodsTable.Rows[i]["commodity_code"] + "','" + goodsTable.Rows[i]["count"] + "','" + goodsTable.Rows[i]["commodity_retailprice"] + "','" + goodsTable.Rows[i]["actualprice"] + "','" + goodsTable.Rows[i]["price"] + "','" + goodsTable.Rows[i]["commodity_name"] + "','" + goodsTable.Rows[i]["commodity_barcode"] + "'," + (i + 1) + "," + goodsTable.Rows[i]["memberprice"] + ",'" + ticketCode + "','" + goodsTable.Rows[i]["commodity_type"] + "','" + goodsTable.Rows[i]["commodity_symbol"] + "'," + goodsTable.Rows[i]["memberprice"] + "," + (string.IsNullOrWhiteSpace(goodsTable.Rows[i]["kitchenconfig_index"].ToString()) ? "NULL" : goodsTable.Rows[i]["kitchenconfig_index"]) + "),"; } _InsertSql = _InsertSql.Substring(0, _InsertSql.Length - 1); try { ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(_InsertSql); return true; } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog($"挂单操作失败:{ex.Message}"); return false; } } /// /// 会员操作 /// /// 商品列表 public static void MemberChange(DataTable goodsTable) { foreach (DataRow _Row in goodsTable.Rows) { if ((decimal)_Row["actualprice"] == (decimal)_Row["commodity_retailprice"]) { _Row["actualprice"] = (decimal)_Row["memberprice"]; _Row["price"] = (decimal)_Row["memberprice"] * (decimal)_Row["count"]; if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( _Row["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { _Row["price"] = _Price.ToString("F2"); } } _Row["discount_rate"] = ((decimal)_Row["commodity_retailprice"] * (decimal)_Row["count"]) - (decimal)_Row["price"]; } } } /// /// 会员操作 /// /// 商品列表 public static void MemberChange(DataTable goodsTable, Model.StructMember stuMember) { //stuMember.DiscountAmount = 0; foreach (DataRow _Row in goodsTable.Rows) { if ((decimal)_Row["actualprice"] == (decimal)_Row["commodity_retailprice"]) { _Row["actualprice"] = (decimal)_Row["memberprice"]; _Row["price"] = (decimal)_Row["actualprice"] * (decimal)_Row["count"]; if (int.TryParse(QualityHelper.price_accuracy, out int Places)) { decimal _Price = Math.Round(decimal.Parse( _Row["price"].ToString()), Places, MidpointRounding.AwayFromZero); if (_Price > 0) { _Row["price"] = _Price.ToString("F2"); } } _Row["discount_rate"] = ((decimal)_Row["commodity_retailprice"] * (decimal)_Row["count"]) - (decimal)_Row["price"]; } } } /// /// 套餐商品添加 /// /// 套餐商品列表 /// 销售商品列表 public static void PromotionAdd(DataTable GoodsTable, DataTable SaleTable) { //decimal.TryParse(GoodsTable.Compute("SUM(COMMODITY_RETAILPRICE)", "").ToString(), out decimal Price); //记录商品刷入时间 PosControl.ProductAdditionTime = DateTime.Now; //开始添加商品到销售列表 decimal _DisCount = (decimal)GoodsTable.Rows[0]["PROMOTION_AMOUNT"] / (decimal)GoodsTable.Compute("SUM(PRICE)", ""); for (int i = 0; i < GoodsTable.Rows.Count; i++) { if (decimal.TryParse(GoodsTable.Rows[i]["COUNT"].ToString(), out decimal Count)) { DataRow _Row = SaleTable.NewRow(); _Row["COMMODITY_BARCODE"] = GoodsTable.Rows[i]["COMMODITY_BARCODE"]; _Row["COMMODITY_NAME"] = GoodsTable.Rows[i]["COMMODITY_NAME"]; _Row["PrintGoodsName"] = GoodsTable.Rows[i]["COMMODITY_NAME"]; _Row["COUNT"] = Count; _Row["COMMODITY_RETAILPRICE"] = GoodsTable.Rows[i]["COMMODITY_RETAILPRICE"]; _Row["PRICE"] = _DisCount * ((decimal)GoodsTable.Rows[i]["COMMODITY_RETAILPRICE"]) * Count; _Row["ACTUALPRICE"] = GoodsTable.Rows[i]["COMMODITY_RETAILPRICE"]; _Row["COMMODITY_CODE"] = GoodsTable.Rows[i]["COMMODITY_CODE"]; _Row["MEMBERPRICE"] = GoodsTable.Rows[i]["COMMODITY_RETAILPRICE"]; _Row["PROMOTIONCODE"] = GoodsTable.Rows[i]["PROMOTION_CODE"]; _Row["DISCOUNT_RATE"] = decimal.Parse(_Row["COMMODITY_RETAILPRICE"].ToString()) - decimal.Parse(_Row["PRICE"].ToString()); _Row["promotion"] = promotion; _Row["kitchenindex"] = GoodsTable.Rows[i]["KITCHENCONFIG_INDEX"]; _Row["commodity_type"] = GoodsTable.Rows[0]["COMMODITY_TYPE"]; _Row["commodity_symbol"] = GoodsTable.Rows[0]["COMMODITY_SYMBOL"]; SaleTable.Rows.Add(_Row); } } promotion++; } /// /// 商品自动合成套餐 /// /// 套餐可选商品最大数量 /// 套餐价格 /// 套餐编号 /// 商品列表 public static void PromotionChange(decimal Count, decimal Price, string Code, DataTable GoodsTable) { DataRow[] _DataRows = GoodsTable.Select("PROMOTIONCODE = '" + Code + "' AND PROMOTION IS NULL"); decimal _DisCount = Price / (decimal)_DataRows.CopyToDataTable().Compute("SUM(PRICE)", ""); for (int i = 0; i < _DataRows.Length; i++) { _DataRows[i]["price"] = (decimal)_DataRows[i]["count"] * (decimal)_DataRows[i]["price"] * _DisCount; _DataRows[i]["discount_rate"] = ((decimal)_DataRows[i]["actualprice"] * Count) - (decimal)_DataRows[i]["price"]; _DataRows[i]["promotion"] = promotion; } promotion++; } /// /// 套餐删除 /// /// /// public static void PromotionDelete(string promotion, DataTable GoodsTable) { DataRow[] _Rows = GoodsTable.Select("promotion = '" + promotion + "'"); if (_Rows.Length > 0) { for (int i = 0; i < _Rows.Length; i++) { _Rows[i]["price"] = decimal.Parse(_Rows[i]["Count"].ToString()) * decimal.Parse(_Rows[i]["actualprice"].ToString()); _Rows[i]["discount_rate"] = ((decimal)_Rows[i]["commodity_retailprice"] * (decimal)_Rows[i]["Count"]) - (decimal)_Rows[i]["price"]; _Rows[i]["promotion"] = null; } } } #region 方法 -> 促销检测 /// /// 促销检测 /// /// 当前商品信息 /// 商品列表 /// 是否改数量(默认不改) /// public static DataRow PromotionCheck(DataRow goodsRow, DataTable goodsTable, bool isChangeCount = false) { //通过全局缓存对象判断,存在促销活动则进行商品判断 if (PosControl.SalesPromoteList != null && PosControl.SalesPromoteList.Count > 0) { //检查当前扫描的商品是否有正在进行的促销活动 List pm_Promotion = PosControl.SalesPromoteList.FindAll(p => { return (!string.IsNullOrWhiteSpace(p.Commodity_Main) && p.Commodity_Main.Split('|').Contains(goodsRow["commodity_barcode"].ToString())) || (!string.IsNullOrWhiteSpace(p.Commodity_Auxiliary) && p.Commodity_Auxiliary.Split('|').Contains(goodsRow["commodity_barcode"].ToString())); }); //判断商品是否存在促销 if (pm_Promotion != null && pm_Promotion.Count > 0) { //检测当前时间是否还在促销期内 if (pm_Promotion[0].Promotion_StartDate <= DateTime.Now && pm_Promotion[0].Promotion_EndDate >= DateTime.Now) { goodsRow = ESSupport.Method.Sales.SalesPromotionMethod.SalesPromotionCheck(pm_Promotion[0], goodsRow, goodsTable, isChangeCount); } } } //返回最终的商品数据 return goodsRow; } #endregion } }