Files
zszq-trs/YLErpDAL/CustomizedBizLogic/BizLogicMaoChuan.cs
T

111 lines
4.3 KiB
C#

using System.Text.RegularExpressions;
using YLErp.BLL;
namespace YLErp.CustomizedBizLogic
{
class BizLogicMaoChuan : BizLogicDefault
{
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
{
if (!string.IsNullOrWhiteSpace(reqModel.trade.TradeNumber)) { return reqModel.trade.TradeNumber; }
if (!reqModel.trade.TradeDate.HasValue) { throw new Exception("交易日期不存在,无法生成交易编号!"); }
lock (_clientCodeLock)
{
var date = DateTime.Now;
string code = "";
string codePrefix = "";
var items = new List<string>();
switch (reqModel.trade.BuySell)
{
case "买入":
case "多头开仓":
case "空头平仓":
items.Add("long");
break;
case "卖出":
case "空头开仓":
case "多头平仓":
items.Add("short");
break;
default:
break;
}
switch (reqModel.trade.TradeType)
{
case "远期":
items.Add("f");
break;
case "香草期权":
case "障碍期权":
case "二元期权":
case "亚式期权":
case "彩虹期权":
case "价差期权":
case "信用债":
case "商品期货":
case "商品现货":
case "股票":
case "场内期权":
case "自定义交易":
case "双鲨期权":
case "凤凰期权":
case "雪球期权":
case "合成价差期权":
case "牛市价差":
case "熊市价差":
case "亚式熊市价差":
case "跨式组合":
case "宽跨式组合":
case "蝶式组合":
default:
items.Add(reqModel.trade.OptionType == "看涨" ? "C" : "P");
break;
}
items.Add(Regex.Replace(reqModel.trade.UnderlyingCode, @"\d+", ""));
items.Add(date.ToString("yy"));
codePrefix = string.Join("-", items).ToLower();
List<string> tradeNumbers = new List<string>();
tradeNumbers = db.trade.Where(x => x.ValidState != "InValid" && x.TradeDate.Value.Year == date.Year).Select(x => x.TradeNumber).ToList();
//获取导入
if (reqModel.importTrades != null && reqModel.importTrades.Any())
{
tradeNumbers.AddRange(reqModel.importTrades.Select(O => O.TradeNumber));
}
int number = tradeNumbers.Count;
do
{
number++;
code = codePrefix + number.ToString("000");
if (!tradeNumbers.Contains(code))
{ break; }
} while (true);
return code;
}
}
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
{
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
lock (_clientCodeLock)
{
DateTime date = DateTime.Now;
string code = "";
string codePrefix = $"mczb-otc-{date.Year}";
var existingClientCodes = clientDbQuery.Where(x => x.Number.StartsWith(codePrefix)).Select(x => x.Number).ToList();
int number = existingClientCodes.Count;
do
{
number++;
code = codePrefix + number.ToString("000");
if (!existingClientCodes.Contains(code))
{ break; }
} while (true);
clientObj.Number = code;
}
}
}
}