126 lines
6.2 KiB
C#
126 lines
6.2 KiB
C#
using YLErp.BLL;
|
|
using YLErp.Modules;
|
|
using static YLErp.ConsGlobal;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
public class BizLogicHaiTong : BizLogicDefault
|
|
{
|
|
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
|
|
{
|
|
if (reqModel is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(reqModel));
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(reqModel.trade.TradeNumber)) { return reqModel.trade.TradeNumber; }
|
|
if (!reqModel.trade.TradeDate.HasValue) { throw new Exception("交易日期不存在,无法生成交易编号!"); }
|
|
lock (_clientCodeLock)
|
|
{
|
|
string leftPart = "";
|
|
string RightPart = "";
|
|
string DatePart = "";
|
|
var stockInstrumentTypes = new[] { InstrumentType.Stock, InstrumentType.StockIF, InstrumentType.StockIndex };
|
|
var um = DataCacheProvider.GetUnderlyingDataSource().GetData(reqModel.trade.UnderlyingId);
|
|
//权益类场外交易编号处理
|
|
//交易编号前缀优化,动态获取当前年份后2位
|
|
var y = DateTime.Now.Year.ToString().Substring(2);
|
|
if (um != null && stockInstrumentTypes.Contains(um.UnderlyingInstrumentType))
|
|
{
|
|
leftPart = y + "W02";
|
|
}
|
|
else
|
|
{
|
|
leftPart = y + "W01";
|
|
}
|
|
DatePart = reqModel.trade.TradeDate?.ToString("MMdd");
|
|
leftPart += DatePart;
|
|
|
|
if (!string.IsNullOrWhiteSpace(reqModel.trade.StructureType) && reqModel.trade.TradeType != "自定义交易" && reqModel.trade.TradeType != "远期" || reqModel.trade.IsGroup == 1)
|
|
{
|
|
RightPart = "Z";
|
|
}
|
|
else if (reqModel.trade.TradeType == "香草期权")
|
|
{
|
|
RightPart = "X";
|
|
}
|
|
else
|
|
{
|
|
RightPart = "Q";
|
|
}
|
|
|
|
var fullSize = leftPart.Length + 3 + RightPart.Length;
|
|
|
|
var num = db.trade.Where(x => x.TradeNumber.Substring(leftPart.Length - 4, 4) == DatePart && x.TradeDate == reqModel.trade.TradeDate).Select(x => x.TradeNumber.Substring(leftPart.Length, 3)).OrderByDescending(x => x).FirstOrDefault();
|
|
int count = string.IsNullOrWhiteSpace(num) ? 0 : Convert.ToInt32(num);
|
|
if (reqModel.importTrades != null && reqModel.importTrades.Any())
|
|
{
|
|
//获取导入交易中该客户的交易编号记录
|
|
var numCount = reqModel.importTrades.Where(x => x.TradeNumber.Substring(leftPart.Length - 4, 4) == DatePart && x.TradeDate == reqModel.trade.TradeDate).Select(x => x.TradeNumber.Substring(leftPart.Length, 3)).OrderByDescending(x => x).FirstOrDefault();
|
|
int importCount = string.IsNullOrWhiteSpace(numCount) ? 0 : Convert.ToInt32(numCount);
|
|
count = count + importCount;
|
|
}
|
|
int newNumber = count + 1;
|
|
|
|
////获取数据库该用户最大的交易编号记录
|
|
//var tradeNumber = db.trade.Where(x => x.TradeNumber.StartsWith(leftPart) && x.TradeNumber.EndsWith(RightPart) && x.TradeNumber.Length == fullSize)
|
|
//.OrderByDescending(x => x.TradeNumber).Select(n => n.TradeNumber).FirstOrDefault() ?? string.Empty;
|
|
//if (reqModel.importTrades != null && reqModel.importTrades.Any())
|
|
//{
|
|
// //获取导入交易中该客户最大的交易编号记录
|
|
// var importTradeNumber = reqModel.importTrades.Where(x => x.TradeNumber.StartsWith(leftPart) && x.TradeNumber.Length == fullSize)
|
|
// .OrderByDescending(x => x.TradeNumber).Select(n => n.TradeNumber).FirstOrDefault() ?? string.Empty;
|
|
// tradeNumber = tradeNumber.CompareTo(importTradeNumber) > 0 ? tradeNumber : importTradeNumber;
|
|
//}
|
|
////获取总的该用户最大的交易编号记录
|
|
//int newNumber = string.IsNullOrWhiteSpace(tradeNumber) ? 1 : (int.Parse(tradeNumber.Substring(leftPart.Length, 3)) + 1);
|
|
|
|
if (newNumber < 1e4)
|
|
{
|
|
return leftPart + newNumber.ToString("D3") + RightPart;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("该客户存在最大交易编号" + (newNumber - 1) + ",超出了限制规则9999,生成交易编号失败");
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (!string.IsNullOrEmpty(clientObj.Number)) { return; }
|
|
lock (_clientCodeLock)
|
|
{
|
|
string code = "";
|
|
string codePrefix = "";
|
|
if (string.IsNullOrWhiteSpace(clientObj.ProperClientClass))
|
|
{
|
|
throw new ServiceException("客户适当性类型 必须填写");
|
|
}
|
|
if (clientObj.ProperClientClass.Contains("专业投资者"))
|
|
{ codePrefix = "F"; }
|
|
else if (clientObj.ProperClientClass.Contains("普通投资者"))
|
|
{ codePrefix = "C"; }
|
|
else if (clientObj.ProperClientClass.Contains("公司内部"))
|
|
{ codePrefix = "H"; }
|
|
else
|
|
{
|
|
throw new Exception("适当性类型超出预期,当前仅支持[专业投资者/普通投资者/公司内部],请重新设定!");
|
|
}
|
|
|
|
var existingClientCodes = clientDbQuery.Where(x => x.ProperClientClass == clientObj.ProperClientClass).Select(x => x.Number).ToList();
|
|
int number = existingClientCodes.Count;
|
|
do
|
|
{
|
|
number++;
|
|
code = codePrefix + number.ToString("0000");
|
|
if (!existingClientCodes.Contains(code))
|
|
{ break; }
|
|
} while (true);
|
|
|
|
clientObj.Number = code;
|
|
}
|
|
}
|
|
}
|
|
}
|