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