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

199 lines
7.4 KiB
C#

using BaseOUDAL;
using MoreLinq;
using OfficeOpenXml;
using Snowflake.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YLErp.DBModels;
using YLErp.Enums;
using YLErp.Model;
using YLErp.Modules.EodFileModule.Dto;
using YLErp.Modules.RiskModule.Dto;
using YLErp.Office;
namespace YLErp.Modules.RiskModule
{
public class TradeRiskCheckLogService : YLBaseService
{
public TradeRiskCheckLogService(OptUserInfo userInfo) : base(userInfo)
{
}
public SearchListResult<trade_risk_check_log> Search(SearchTradeRiskCheckLogRequest req)
{
var predicate = PredicateBuilder.Create<trade_risk_check_log>(x=> !string.IsNullOrEmpty(x.trade_number));
if (req.DateFromCreateTime != null)
{
predicate = predicate.And(d => d.create_time >= req.DateFromCreateTime);
}
if (req.DateToCreateTime != null)
{
req.DateToCreateTime = ((DateTime)req.DateToCreateTime).AddDays(1);
predicate = predicate.And(d => d.create_time < req.DateToCreateTime);
}
if (req.TrialResults!=null&& req.TrialResults.Count>0&& !req.TrialResults.Any(x=>x==-1))
{
predicate = predicate.And(d => req.TrialResults.Contains(d.trial_result));
}
if (!string.IsNullOrEmpty(req.TradeNumber))
{
predicate = predicate.And(d => !string.IsNullOrEmpty(d.trade_number) && d.trade_number.Contains(req.TradeNumber));
}
if (!string.IsNullOrEmpty(req.ClientNumber))
{
predicate = predicate.And(d => !string.IsNullOrEmpty(d.client_number) && d.client_number.Contains(req.ClientNumber));
}
if (!string.IsNullOrEmpty(req.ClientName))
{
predicate = predicate.And(d => !string.IsNullOrEmpty(d.client_name) && d.client_name.Contains(req.ClientName));
}
if (!string.IsNullOrEmpty(req.Trader))
{
predicate = predicate.And(d => !string.IsNullOrEmpty(d.trader) && d.trader.Contains(req.Trader));
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
return DbContext.trade_risk_check_log.AsNoTracking().Where(predicate).ToSearchList<trade_risk_check_log>(req);
}
/// <summary>
/// 风控记录导出
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
/// <exception cref="ServiceException"></exception>
public byte[] ExprotExcel(SearchTradeRiskCheckLogRequest req)
{
//获取数据
var ret = Search(req);
List<TradeRiskCheckLogExportModel> list = new List<TradeRiskCheckLogExportModel>();
foreach (var item in ret.rows)
{
TradeRiskCheckLogExportModel exportModel = new TradeRiskCheckLogExportModel();
exportModel.trader = item.trader;
exportModel.client_number = item.client_number;
exportModel.client_name = item.client_name;
exportModel.remark = item.remark;
exportModel.create_time = item.create_time.ToString("yyyy-MM-dd HH:mm:ss");
exportModel.limit_warning = item.limit_warning;
exportModel.trade_number = item.trade_number;
exportModel.risk_warning = item.risk_warning;
switch ((QuotaTrialStatusEnum)item.trial_result)
{
case QuotaTrialStatusEnum.Warning:
exportModel.trial_result = "预警";
break;
case QuotaTrialStatusEnum.Error:
exportModel.trial_result = "限额";
break;
default:
exportModel.trial_result = "通过";
break;
}
list.Add(exportModel);
}
var tplFilePath = OtcAppContext.MapPath("/App_Docs");
var sourceFileName = Path.Combine(tplFilePath, "导出模板", "限额监控记录导出模板.xlsx");
var modelDict = new Dictionary<string, object>();
var model = new { list = list };
modelDict.Add("Sheet1", model);
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
return new ExcelTemplateGenerator().SetTemplateFile(sourceFileName).SetTemplateData(modelDict).Output();
}
/// <summary>
/// 新增风控记录
/// </summary>
public void AddLog(QuotaTrial quotaTrial)
{
var td = DbContext.trade.FirstOrDefault(x=>x.id==quotaTrial.TradeId);
quotaTrial = DbContext.quotaTrial.FirstOrDefault(x=>x.id== quotaTrial.id);
if (quotaTrial == null)
{
return;
}
trade_risk_check_log log = new trade_risk_check_log();
if (td!=null)
{
var client = DataCacheProvider.GetClientDataSource().GetData(td.ClientId);
log.client_number = client?.Number;
}
var worker = new IdWorker(1, 1);
log.id = worker.NextId();
log.trial_result = (int)quotaTrial.TrialStatus;
log.client_name = quotaTrial.ClientName;
log.trader = td?.TraderName;
log.trade_number = quotaTrial.TradeNumber;
log.risk_warning = quotaTrial.QuotaWarningDetails;
log.limit_warning = quotaTrial.QuotaCheckDetails;
log.remark = quotaTrial.Remark;
log.create_user = UserId;
log.create_time = DateTime.Now;
DbContext.trade_risk_check_log.Add(log);
DbContext.SaveChanges();
}
/// <summary>
/// 回退重置
/// </summary>
/// <param name="tradeNumber"></param>
/// <param name="valueDate"></param>
public void DeleteLog(string tradeNumber,DateTime valueDate)
{
var logs= DbContext.trade_risk_check_log.Where(x=>x.trade_number==tradeNumber&&x.create_time.Date>= valueDate).ToList();
if (logs.Count()==0)
{
return;
}
logs.ForEach(x =>
{
x.trade_number = null;
});
DbContext.SaveChanges();
}
/// <summary>
/// 批量回退重置
/// </summary>
/// <param name="trsDealIds"></param>
public void DeleteLogs(List<long> trsDealIds)
{
var logs = DbContext.trade_risk_check_log.Where(x => trsDealIds.Contains(x.flow_id??0)).ToList();
if (logs.Count() == 0)
{
return;
}
logs.ForEach(x =>
{
x.trade_number = null;
});
DbContext.SaveChanges();
}
public void UpdateLogTradeNumber(List<long> trsDealIds,string tradeNumber)
{
var logs = DbContext.trade_risk_check_log.Where(x=> trsDealIds.Contains(x.flow_id??0));
if (logs.Count() == 0)
{
return;
}
logs.ForEach(x =>
{
x.trade_number = tradeNumber;
});
DbContext.SaveChanges();
}
}
}