111 lines
3.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|