246 lines
9.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|