104 lines
3.9 KiB
C#
104 lines
3.9 KiB
C#
using YLErp.BLL;
|
|
using YLErp.Modules;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
public class BizLogicHuaXi : BizLogicDefault
|
|
{
|
|
/// <summary>
|
|
/// 生成客户编号 -- 华西还要生成 主协议/补充协议/履保协议
|
|
/// </summary>
|
|
/// <param name="initialCode">客户创建时的初始编号,如果没有传null</param>
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(clientObj.Number))
|
|
{
|
|
var result = "CW";
|
|
lock (_clientCodeLock)
|
|
{
|
|
result += DateTime.Now.Year.ToString();
|
|
|
|
var existingClientCodes = clientDbQuery.Where(x => x.Number.Contains(result)).Select(x => x.Number).ToList();
|
|
var maxNumber = 0;
|
|
if (existingClientCodes.Count > 0)
|
|
{ maxNumber = existingClientCodes.Max(x => ParseNumber(x.Substring(6))); }
|
|
var nextNum = maxNumber + 1;
|
|
if (nextNum < 10000)
|
|
{
|
|
result += nextNum.ToString("D4");
|
|
}
|
|
else
|
|
{
|
|
//如果大于9999,将生成CW201810000等字符串,需求是说不会大于10000的
|
|
result += nextNum.ToString();
|
|
}
|
|
clientObj.Number = result;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 在交易确认前生成交易编号
|
|
/// </summary>
|
|
public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db)
|
|
{
|
|
if (reqModel is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(reqModel));
|
|
}
|
|
|
|
//对于对冲交易、场内交易等没有设置客户的
|
|
if (reqModel.clientId == 0)
|
|
{
|
|
return DateTime.Now.ToString("yyyyMMddHHmmssfff");
|
|
}
|
|
|
|
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
|
|
const string SACO = "SACO-"; //期权
|
|
const string SACT = "SACT-"; //互换
|
|
const string company = "华西证券-";
|
|
string year = reqModel.trade.TradeDate?.ToString("yyyy") + "-";
|
|
|
|
//合并起来作为获取递增序号的取值条件
|
|
var leftPart = SACO + company + year;
|
|
|
|
if (reqModel.trade.TradeType == "收益互换")
|
|
{
|
|
leftPart = SACT + company + year;
|
|
}
|
|
|
|
var XXleftPart = "XX" + leftPart;
|
|
|
|
|
|
//获取数据库该用户最大的交易编号记录
|
|
var tradeNumber = db.trade.Where(x => x.TradeNumber.StartsWith(leftPart) || x.TradeNumber.StartsWith(XXleftPart)).Select(x => x.TradeNumber.Replace(leftPart, "").Replace("XX", "")).ToList();
|
|
|
|
if (reqModel.importTrades != null && reqModel.importTrades.Any())
|
|
{
|
|
//获取导入交易中该客户最大的交易编号记录
|
|
var importTradeNumber = reqModel.importTrades.Where(x => x.TradeNumber.StartsWith(leftPart)).Select(x => x.TradeNumber.Replace(leftPart, "").Replace("XX", "")).ToList();
|
|
tradeNumber.AddRange(importTradeNumber);
|
|
}
|
|
var numberStrings = tradeNumber.Where(x => int.TryParse(x, out var num2));
|
|
var number = (numberStrings.LongCount() > 0 ? numberStrings.Max(x => int.TryParse(x, out int a) ? a : 0) : 0) + 1;
|
|
|
|
if (number < 1e3)
|
|
{
|
|
return leftPart + number.ToString("D3");
|
|
}
|
|
else
|
|
{
|
|
return leftPart + number.ToString();
|
|
}
|
|
}
|
|
|
|
private int ParseNumber(string clientNumber)
|
|
{
|
|
int.TryParse(clientNumber, out var number);
|
|
return number;
|
|
}
|
|
}
|
|
}
|