131 lines
5.0 KiB
C#
131 lines
5.0 KiB
C#
using YLErp.BLL;
|
|
using YLErp.Modules;
|
|
|
|
namespace YLErp.CustomizedBizLogic
|
|
{
|
|
public class BizLogicWCZD : BizLogicDefault
|
|
{
|
|
/// <summary>
|
|
/// 生成客户编号 -- 物产中大
|
|
/// </summary>
|
|
/// <param name="initialCode">客户创建时的初始编号,如果没有传null</param>
|
|
public override void GenerateClientCode(Client clientObj, IQueryable<Client> clientDbQuery)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(clientObj.Number))
|
|
{
|
|
lock (_clientCodeLock)
|
|
{
|
|
var result = DateTime.Now.Year.ToString();
|
|
|
|
var existingClientCodes = clientDbQuery.Where(x => x.Number.StartsWith(result)).Select(x => x.Number).ToList();
|
|
var maxNumber = 0;
|
|
if (existingClientCodes.Count > 0)
|
|
{ maxNumber = existingClientCodes.Max(x => ParseNumber(x.Substring(4))); }
|
|
var nextNum = maxNumber + 1;
|
|
if (nextNum < 1000)
|
|
{
|
|
result += nextNum.ToString("D3");
|
|
}
|
|
else
|
|
{
|
|
//如果大于999,将生成20181000等字符串,需求是说不会大于1000的
|
|
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));
|
|
}
|
|
var tradeNumber = "";
|
|
var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId);
|
|
if (reqModel.trade.TradeType == "结构化交易" && reqModel.trade.IsGroup == 0)
|
|
{
|
|
tradeNumber = GetTradeNumber(db, client.Number);
|
|
}
|
|
else
|
|
{
|
|
var result = $"{reqModel.trade.TradeDate.Value.ToString("yyyyMMdd")}-";
|
|
tradeNumber = GetTradeNumber(db, result);
|
|
}
|
|
if (reqModel.trade.SubTrades==null)
|
|
{
|
|
reqModel.trade.MetaDic["期货报送成交编号"] = GenerateWCZDNumber(db, reqModel.trade, reqModel.trade.TradeDate, 0, false);
|
|
}
|
|
|
|
|
|
return tradeNumber;
|
|
}
|
|
|
|
private static string GetTradeNumber(YLContext db, string result)
|
|
{
|
|
//获取数据库该用户最大的交易编号记录
|
|
var tradeNumbers = db.trade.Where(x => x.TradeNumber.ToUpper().StartsWith(result.ToUpper()) && x.ValidState != "InValid").Select(O => O.TradeNumber).OrderByDescending(O => O).ToList();
|
|
|
|
var tradeNumber = tradeNumbers.FirstOrDefault();
|
|
if (string.IsNullOrWhiteSpace(tradeNumber) || !int.TryParse(tradeNumber.Substring(result.Length).Split('-')[0], out var tradeCount))
|
|
{
|
|
tradeCount = 0;
|
|
}
|
|
do
|
|
{
|
|
tradeCount++;
|
|
tradeNumber = $"{result}{tradeCount.ToString("000")}";
|
|
} while (tradeNumbers.Contains(tradeNumber));
|
|
return tradeNumber;
|
|
}
|
|
/// <summary>
|
|
/// 生成监管报送里面的成交编号 存入trademate
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GenerateWCZDNumber(YLContext db, OtcTradeBase trade, DateTime? date, int keyId,bool isSaveMate = true,int leg=0)
|
|
{
|
|
string strTradeDate = date?.ToString("yyyyMMdd")+"-";
|
|
string metaKey = "期货报送成交编号" + keyId;
|
|
var tradeNumber = "";
|
|
if (keyId>0 && db.TradeMeta.Where(l=>l.MetaKey == metaKey).Any())
|
|
{
|
|
return db.TradeMeta.Where(l => l.MetaKey == metaKey).First().MetaValue;
|
|
}
|
|
var tradeMetas = db.TradeMeta.Where(O => O.MetaValue.StartsWith(strTradeDate) && O.MetaKey.StartsWith("期货报送成交编号"));
|
|
var tradeMetaNumbers = tradeMetas.Select(O => O.MetaValue);
|
|
var num = tradeMetas.ToList().Count+ leg;
|
|
|
|
do
|
|
{
|
|
num++;
|
|
tradeNumber = $"{strTradeDate}{num.ToString("000")}";
|
|
} while (tradeMetaNumbers.Contains(tradeNumber));
|
|
|
|
if (isSaveMate)
|
|
{
|
|
TradeMeta meta = new TradeMeta
|
|
{
|
|
TradeId = trade.id,
|
|
MetaKey = metaKey,
|
|
MetaValue = tradeNumber,
|
|
CreateTime = DateTime.Now
|
|
};
|
|
db.TradeMeta.Add(meta);
|
|
db.SaveChanges();
|
|
}
|
|
return tradeNumber;
|
|
}
|
|
private int ParseNumber(string clientNumber)
|
|
{
|
|
int.TryParse(clientNumber, out var number);
|
|
return number;
|
|
}
|
|
}
|
|
}
|