Files
zszq-trs/Framework/YLErp.Core/DBModels/Helpers/VarietyHelper.cs
T
2024-05-09 14:06:26 +08:00

111 lines
3.5 KiB
C#

using System.Text.RegularExpressions;
namespace YLErp.DBModels.Helpers
{
/// <summary>
/// 品种Model帮助类
/// </summary>
public static class VarietyHelper
{
/// <summary>
/// 获取交易单位
/// </summary>
public static int? GetTradeUnitValue(string VarietyCode, string TradeUnit)
{
if (string.IsNullOrEmpty(TradeUnit))
{
return null;
}
//特殊处理
if (VarietyCode == "JD")
{
return 10;//鸡蛋
}
if (VarietyCode == "AU")
{
return 1000;//沪金
}
var numStr = new string(TradeUnit.SkipWhile(n => char.IsWhiteSpace(n)).TakeWhile(n => n >= '0' && n <= '9').ToArray());
return int.TryParse(numStr, out var num) ? num : (int?)null;
}
/// <summary>
/// 获取乘积因子
/// </summary>
public static int GetCountRatio(string QuoteUnit)
{
if (string.IsNullOrWhiteSpace(QuoteUnit)) return 1;
var unit = QuoteUnit.Substring(QuoteUnit.LastIndexOf('/') + 1).Trim();
return unit == "500千克" ? 2 : 1;
}
/// <summary>
/// 获取数量单位,暂时取 QuoteUnit /后的字母,特别:500千克 鸡蛋,取吨,份数*2
/// </summary>
public static string GetQuoteUnitSingle(string QuoteUnit)
{
if (string.IsNullOrWhiteSpace(QuoteUnit)) return string.Empty;
var unit = QuoteUnit.Substring(QuoteUnit.LastIndexOf('/') + 1).Trim();
return unit == "500千克" ? "吨" : unit ?? string.Empty;
}
/// <summary>
/// 获取交易单位,暂时取 TradeUnit 中去掉 数字 / 手 元 之后的部分,为了兼容 300元/点 和 20吨/手
/// </summary>
/// <param name="TradeUnit"></param>
/// <returns></returns>
public static string GetTradeUnitSingle(string TradeUnit)
{
if (string.IsNullOrWhiteSpace(TradeUnit)) return string.Empty;
var unit = Regex.Replace(TradeUnit, @"(\d|/|手|元)", "");
return unit ?? string.Empty;
}
/// <summary>
/// 数量单位,暂时取 QuoteUnit /后的字母
/// </summary>
public static string GetQuoteUnitSingleOriginal(string QuoteUnit)
{
//请不要使用try..catch
return string.IsNullOrWhiteSpace(QuoteUnit) ? string.Empty : QuoteUnit.Substring(QuoteUnit.LastIndexOf('/') + 1).Trim();
}
/// <summary>
/// 解析品种最小价格变动配置
/// </summary>
public static double? ParseMinPriceChange(Variety variety)
{
return ParseMinPriceChange(variety?.MinPriceChange);
}
/// <summary>
/// 解析品种最小价格变动配置字符串
/// </summary>
public static double? ParseMinPriceChange(string varietyMinPriceChange)
{
if (string.IsNullOrWhiteSpace(varietyMinPriceChange))
{
return null;
}
var chs = varietyMinPriceChange.TakeWhile(n => n == '.' || n >= '0' && n <= '9').ToArray();
if (!chs.Any())
{
return null;
}
if (double.TryParse(new string(chs), out var d))
{
return d;
}
return null;
}
}
}