Files
zszq-trs/YLErpDAL/Modules/TradeModule/TradeReportService.cs
T
2024-05-09 14:06:26 +08:00

246 lines
9.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YieldChain.Helpers;
using YLErp.Helpers;
namespace YLErp.Modules.TradeModule
{
public class TradeReportService : TradeServiceBase
{
public TradeReportService(OptUserInfo userInfo) : base(userInfo)
{
}
public trade_report SaveTradeReport(trade_report req)
{
if (req is null)
{
throw new ArgumentNullException(nameof(req));
}
if (CheckTradeReport(req, out string message))
{
throw new ServiceException(message);
}
var trade = DbContext.trade.Find(req.TradeId);
if (trade.OpponentRole == req.FillingPartyRole)
{
throw new ServiceException("“填报方角色”和“交易对手方角色”:必须对立");
}
if (req.IsUsePerformanceColl != "是")
{
req.PerformanceExplain = "";
}
var trans = DbContext.Database.BeginTransaction();
var dbModel = DbContext.trade_Report.Where(x => x.TradeId == req.TradeId).FirstOrDefault();
if (dbModel == null)
{
dbModel = new trade_report();
dbModel.TradeId = req.TradeId;
DbContext.trade_Report.Add(req);
}
req.id = dbModel.id;
trade.MetaDic = new TradeMetaService(OptUser).GetTradeMeta(trade.id);
if (trade.MetaDic.TryGetValue("主协议编号", out string value1))
{
dbModel.MainProtocolCode = value1;
}
if (trade.MetaDic.TryGetValue("补充协议编号", out string value2))
{
dbModel.SupProtocolCode = value2;
}
if (trade.MetaDic.TryGetValue("清算机构", out string value3))
{
dbModel.ClearingAgency = value3;
}
if (trade.MetaDic.TryGetValue("交易场所", out string value4))
{
dbModel.TradingPlace = value4;
}
if (trade.MetaDic.TryGetValue("其他交易场所", out string value5))
{
dbModel.OtherTradingPlace = value5;
}
dbModel.OptId = req.OptId;
dbModel.OptName = req.OptName;
dbModel.OptDate = req.OptDate;
var changes = DataChangeHelper.GetDataChanges(dbModel, req);
if (dbModel.MainProtocolCode != req.MainProtocolCode)
{
AddOrUpdateTradeMeta(false, req.TradeId, "主协议编号", req.MainProtocolCode);
changes.Add(new List<string>() { null, "主协议编号", dbModel.MainProtocolCode, req.MainProtocolCode });
}
if (dbModel.SupProtocolCode != req.SupProtocolCode)
{
AddOrUpdateTradeMeta(false, req.TradeId, "补充协议编号", req.SupProtocolCode);
changes.Add(new List<string>() { null, "补充协议编号", dbModel.SupProtocolCode, req.SupProtocolCode });
}
if (dbModel.ClearingAgency != req.ClearingAgency)
{
AddOrUpdateTradeMeta(false, req.TradeId, "清算机构", req.ClearingAgency);
changes.Add(new List<string>() { null, "清算机构", dbModel.ClearingAgency, req.ClearingAgency });
}
if (dbModel.TradingPlace != req.TradingPlace)
{
AddOrUpdateTradeMeta(false, req.TradeId, "交易场所", req.TradingPlace);
changes.Add(new List<string>() { null, "交易场所", dbModel.TradingPlace, req.TradingPlace });
}
if (dbModel.OtherTradingPlace != req.OtherTradingPlace)
{
AddOrUpdateTradeMeta(false, req.TradeId, "其他交易场所", req.OtherTradingPlace);
changes.Add(new List<string>() { null, "其他交易场所", dbModel.OtherTradingPlace, req.OtherTradingPlace });
}
req.SetOpt(OptUser);
ObjectHelper.MapValues(dbModel, req);
var tradeauditing = new TradeAuditLog
{
TradeId = dbModel.TradeId,
Changes = changes.ToJson(),
DataType = "C02",
OptId = UserId,
OptName = UserName,
OptDate = OptDate,
OptType = "修改报送相关字段",
AuditFlag = TradeAuditFlag.operation
};
//记录审核日志
DbContext.TradeAuditLog.Add(tradeauditing);
DbContext.SaveChanges();
//执行事务
trans.Commit();
return dbModel;
}
private bool CheckTradeReport(trade_report req, out string message)
{
message = "";
if (string.IsNullOrWhiteSpace(req.MainProtocolCode))
{
message = "主协议编号:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.SupProtocolCode))
{
message = "补充协议编号:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.FillingPartyRole))
{
message = "填报方角色:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.ClearingAgency))
{
message = "清算机构:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.TradingPlace))
{
message = "交易场所:不能为空";
return true;
}
if (req.TradingPlace == "其他交易场所" && string.IsNullOrWhiteSpace(req.OtherTradingPlace))
{
message = "交易场所(其他):不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.PerformanceGuarantee))
{
message = "履约担保类型:不能为空";
return true;
}
if (req.PerformanceGuarantee == "部分担保" || req.PerformanceGuarantee == "全额担保")
{
if (string.IsNullOrWhiteSpace(req.PerformanceCollProvider))
{
message = "履约担保品提供方:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.IsUsePerformanceColl))
{
message = "担保品收取方是否可使用担保品:不能为空";
return true;
}
if (req.IsUsePerformanceColl == "是" && string.IsNullOrWhiteSpace(req.PerformanceExplain))
{
message = "担保品使用说明:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.IsPerformanceCollInterest))
{
message = "是否计算担保品价值产生利息:不能为空";
return true;
}
if ((req.TradeType != "收益互换") && (!req.InitialPerformanceColl.HasValue || req.InitialPerformanceColl < 0))
{
message = "履约担保品初始比率(%):必须大于等于0";
return true;
}
if ((req.TradeType != "收益互换") && (!req.InitialPerformanceCollCash.HasValue || req.InitialPerformanceCollCash < 0))
{
message = "履约担保品初始比率(现金部分)(%):必须大于等于0";
return true;
}
if (!req.RecoveryPerformanceColl.HasValue || req.RecoveryPerformanceColl < 0)
{
message = "履约担保品追保比率(%):必须大于等于0";
return true;
}
if (!req.UnwindPerformanceColl.HasValue || req.UnwindPerformanceColl < 0)
{
message = "履约担保品平仓比率(%):必须大于等于0";
return true;
}
if ((req.TradeType != "收益互换") && (!req.EodPerformanceColl.HasValue || req.EodPerformanceColl < 0))
{
message = "维持担保比率(%):必须大于等于0";
return true;
}
if (string.IsNullOrWhiteSpace(req.PerformanceCollType))
{
message = "履约担保品类型:不能为空";
return true;
}
if (string.IsNullOrWhiteSpace(req.PerformanceCollRange))
{
message = "担保品担保范围:不能为空";
return true;
}
}
if (req.TradeType == "收益互换" && (!req.InitialPerformanceColl.HasValue || req.InitialPerformanceColl < 0))
{
message = "履约担保品初始比率(%):必须大于等于0";
return true;
}
if (req.TradeType == "收益互换" && (!req.EodPerformanceColl.HasValue || req.EodPerformanceColl < 0))
{
message = "维持担保比率(%):必须大于等于0";
return true;
}
return false;
}
}
}