225 lines
12 KiB
C#
225 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Data;
|
|
using PosDataTest.Common;
|
|
|
|
namespace PosDataTest
|
|
{
|
|
public class GoodsAddHelper
|
|
{
|
|
/// <summary>
|
|
/// 留夫鸭销售模式
|
|
/// </summary>
|
|
/// <param name="inputBarcode">条码</param>
|
|
/// <param name="commodityTable">销售列表</param>
|
|
/// <param name="guaranteeState">out[保质期状态]</param>
|
|
/// <param name="commodityRow">out[商品行]</param>
|
|
/// <returns></returns>
|
|
public static bool GetLFY(string inputBarcode, DataTable commodityTable,
|
|
out PosDictionary.GuaranteeState guaranteeState, out DataRow commodityRow)
|
|
{
|
|
//01234567 8901 234567 89
|
|
//05314020 0290 180914 08808
|
|
if (inputBarcode.Length < 23)
|
|
{
|
|
commodityRow = null;
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
return false;
|
|
}
|
|
string _strBarcode = inputBarcode.Substring(0, 8);
|
|
string _strWeight = inputBarcode.Substring(8, 4);
|
|
if (!decimal.TryParse(_strWeight, out decimal _decWeight))
|
|
{
|
|
commodityRow = null;
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
return false;
|
|
}
|
|
_decWeight = _decWeight / 1000;
|
|
string _strProductionDate = inputBarcode.Substring(12, 6);
|
|
if (!DateTime.TryParseExact(_strProductionDate, "yyMMdd",
|
|
System.Globalization.CultureInfo.CurrentCulture,
|
|
System.Globalization.DateTimeStyles.None,
|
|
out DateTime _ProductionDate))
|
|
{
|
|
commodityRow = null;
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
return false;
|
|
}
|
|
string _strSelect = string.Format(@"SELECT DISTINCT A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
|
|
A.COMMODITY_CODE,A.COMMODITY_TYPE,A.COMMODITY_SYMBOL,A.COMMODITY_BARCODE,
|
|
A.COMMODITY_MEMBERPRICE,ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,
|
|
ISNULL(A.GUARANTEE_DAY,0) AS GUARANTEE_DAY,ISNULL(A.REMINDER_DAY,0) AS REMINDER_DAY,
|
|
ISNULL(B.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,A.COMMODITY_UNIT
|
|
FROM T_COMMODITYEX A LEFT JOIN T_KITCHENCONFIG B ON A.COMMODITY_TYPE = B.COMMODITYTYPE
|
|
WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = {0} AND A.COMMODITY_BARCODE = '{1}'",
|
|
QualityHelper.serverpartshop_id, _strBarcode);
|
|
try
|
|
{
|
|
using (DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_strSelect).Tables[0])
|
|
{
|
|
if (_DataTable.Rows.Count > 0)
|
|
{
|
|
commodityRow = commodityTable.NewRow();
|
|
commodityRow["commodity_barcode"] = _DataTable.Rows[0]["COMMODITY_BARCODE"];
|
|
commodityRow["commodity_name"] = _DataTable.Rows[0]["COMMODITY_NAME"];
|
|
commodityRow["commodity_unit"] = _DataTable.Rows[0]["COMMODITY_UNIT"];
|
|
commodityRow["PrintGoodsName"] = _DataTable.Rows[0]["COMMODITY_NAME"];
|
|
commodityRow["commodity_code"] = _DataTable.Rows[0]["COMMODITY_CODE"];
|
|
commodityRow["commodity_retailprice"] = _DataTable.Rows[0]["COMMODITY_RETAILPRICE"];
|
|
commodityRow["discount_rate"] = 0;
|
|
commodityRow["actualprice"] = _DataTable.Rows[0]["COMMODITY_RETAILPRICE"];
|
|
commodityRow["memberprice"] = _DataTable.Rows[0]["COMMODITY_MEMBERPRICE"];
|
|
commodityRow["price"] = (decimal)_DataTable.Rows[0]["METERINGMETHOD"] == 1 ?
|
|
(decimal)_DataTable.Rows[0]["COMMODITY_RETAILPRICE"] :
|
|
((decimal)_DataTable.Rows[0]["COMMODITY_RETAILPRICE"] * _decWeight);
|
|
commodityRow["count"] = (decimal)_DataTable.Rows[0]["METERINGMETHOD"] == 1 ? 1 : _decWeight;
|
|
commodityRow["foreground"] = "#575757";
|
|
commodityRow["background"] = "#91DAC9";
|
|
commodityRow["kitchenindex"] = _DataTable.Rows[0]["KITCHENCONFIG_INDEX"];
|
|
commodityRow["commodity_type"] = _DataTable.Rows[0]["COMMODITY_TYPE"];
|
|
commodityRow["commodity_symbol"] = _DataTable.Rows[0]["COMMODITY_SYMBOL"];
|
|
//计算到期日期
|
|
if ((decimal)_DataTable.Rows[0]["GUARANTEE_DAY"] > 0)
|
|
{
|
|
DateTime _GuaranteeDate = _ProductionDate.AddDays((int)(decimal)_DataTable.Rows[0]["GUARANTEE_DAY"]);
|
|
if (_GuaranteeDate < DateTime.Today)
|
|
{
|
|
guaranteeState = PosDictionary.GuaranteeState.Expire;
|
|
}
|
|
else
|
|
{
|
|
if ((_GuaranteeDate - DateTime.Today).TotalDays <= (int)(decimal)_DataTable.Rows[0]["REMINDER_DAY"])
|
|
{
|
|
guaranteeState = PosDictionary.GuaranteeState.Reminder;
|
|
}
|
|
else
|
|
{
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
}
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
commodityRow = null;
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ESSupport.Lib.LogHelper.WriteServiceLog("留夫鸭错误:" + ex.Message);
|
|
commodityRow = null;
|
|
guaranteeState = PosDictionary.GuaranteeState.OK;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询商品信息
|
|
/// </summary>
|
|
/// <param name="inputBarcode">商品条码</param>
|
|
/// <param name="goodsTable">商品列表</param>
|
|
/// <param name="weighSign">称重标识</param>
|
|
/// <param name="IsOverly">是否叠加</param>
|
|
/// <returns></returns>
|
|
public static DataRow IsVague(string inputBarcode, DataTable goodsTable, string weighSign, out bool IsOverly)
|
|
{
|
|
DataRow _DataRow = goodsTable.NewRow();
|
|
IsOverly = true;
|
|
decimal Price = 0;
|
|
decimal Count = 0;
|
|
string sql = string.Format(@"SELECT DISTINCT A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
|
|
A.COMMODITY_CODE,A.COMMODITY_TYPE,A.COMMODITY_SYMBOL,A.COMMODITY_BARCODE,
|
|
A.COMMODITY_MEMBERPRICE,ISNULL(B.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,
|
|
ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,A.COMMODITY_UNIT
|
|
FROM T_COMMODITYEX A LEFT JOIN T_KITCHENCONFIG B ON A.COMMODITY_TYPE = B.COMMODITYTYPE
|
|
WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = {0} AND {1}",
|
|
ESSupport.DataStorage.DataFunction.QueryShopID(QualityHelper.serverpartcode,QualityHelper.shopcode),
|
|
(QualityHelper.input_mode == "1" && inputBarcode.Length <= 4) ?
|
|
string.Format(" COMMODITY_HOTKEY = '{0}'", inputBarcode) :
|
|
string.Format(" (COMMODITY_BARCODE = '{0}' OR COMMODITY_CODE = '{0}' OR UPPER(COMMODITY_EN) = '{0}')",
|
|
inputBarcode.ToUpper()));
|
|
|
|
DataTable _GoodsTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(sql).Tables[0];
|
|
if (_GoodsTable.Rows.Count > 1)
|
|
{
|
|
return null;
|
|
}
|
|
if (_GoodsTable.Rows.Count == 0)
|
|
{
|
|
if (inputBarcode.Length < 13)
|
|
{
|
|
return null;
|
|
}
|
|
string _strGoodsSign = inputBarcode.Substring(0, 2);
|
|
string _strCommodityCode = "";
|
|
if (_strGoodsSign == weighSign)
|
|
{
|
|
_strCommodityCode = inputBarcode.Substring(2, 5);
|
|
_GoodsTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(string.Format(
|
|
@"SELECT DISTINCT A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
|
|
A.COMMODITY_CODE,A.COMMODITY_TYPE,A.COMMODITY_SYMBOL,
|
|
A.COMMODITY_BARCODE,A.COMMODITY_RULE,A.COMMODITY_MEMBERPRICE,
|
|
ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,
|
|
ISNULL(B.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,A.COMMODITY_UNIT
|
|
FROM T_COMMODITYEX A LEFT JOIN T_KITCHENCONFIG B
|
|
ON A.COMMODITY_TYPE = B.COMMODITYTYPE,T_COMMODITYSCALE C
|
|
WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = {0} AND
|
|
A.COMMODITY_CODE = C.COMMODITY_CODE AND C.SCALE_CODE = '{1}'",
|
|
QualityHelper.serverpartshop_id, _strCommodityCode)).Tables[0];
|
|
if (_GoodsTable.Rows.Count == 1)
|
|
{
|
|
if ((decimal)_GoodsTable.Rows[0]["METERINGMETHOD"] == 0)
|
|
{
|
|
IsOverly = false;
|
|
Price = decimal.Parse(inputBarcode.Substring(7, 5)) / 100;
|
|
Count = Math.Round(Price / (decimal)_GoodsTable.Rows[0]["COMMODITY_RETAILPRICE"], 3, MidpointRounding.AwayFromZero);
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
_DataRow["commodity_barcode"] = _GoodsTable.Rows[0]["commodity_barcode"];
|
|
_DataRow["commodity_name"] = _GoodsTable.Rows[0]["commodity_name"];
|
|
_DataRow["commodity_unit"] = _GoodsTable.Rows[0]["commodity_unit"];
|
|
_DataRow["PrintGoodsName"] = _GoodsTable.Rows[0]["commodity_name"];
|
|
_DataRow["commodity_code"] = _GoodsTable.Rows[0]["commodity_code"];
|
|
_DataRow["commodity_retailprice"] = _GoodsTable.Rows[0]["commodity_retailprice"];
|
|
_DataRow["discount_rate"] = 0;
|
|
_DataRow["actualprice"] = _GoodsTable.Rows[0]["commodity_retailprice"];
|
|
_DataRow["memberprice"] = _GoodsTable.Rows[0]["commodity_memberprice"];
|
|
_DataRow["price"] = IsOverly ? (decimal)_GoodsTable.Rows[0]["commodity_retailprice"] : Price;
|
|
_DataRow["count"] = IsOverly ? 1 : Count;
|
|
_DataRow["foreground"] = "#575757";
|
|
_DataRow["background"] = "#91DAC9";
|
|
_DataRow["kitchenindex"] = _GoodsTable.Rows[0]["kitchenconfig_index"];
|
|
_DataRow["commodity_type"] = _GoodsTable.Rows[0]["commodity_type"];
|
|
_DataRow["commodity_symbol"] = _GoodsTable.Rows[0]["commodity_symbol"];
|
|
_DataRow["meteringmethod"] = _GoodsTable.Rows[0]["meteringmethod"];
|
|
_DataRow["kitchenconfig_index"] = _GoodsTable.Rows[0]["kitchenconfig_index"];
|
|
_DataRow["commodity_memberprice"] = _GoodsTable.Rows[0]["commodity_memberprice"];
|
|
return _DataRow;
|
|
}
|
|
}
|
|
}
|