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

297 lines
11 KiB
C#

using BaseOUDAL;
using MoreLinq;
using OfficeOpenXml.FormulaParsing.ExpressionGraph;
using Org.BouncyCastle.Ocsp;
using Snowflake.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using YLErp.DBModels;
using YLErp.DBModels.Enums;
using YLErp.Model;
namespace YLErp.Modules.SwapModule
{
/// <summary>
/// 推送记录服务
/// </summary>
public class PushLogService: YLBaseService
{
public PushLogService(OptUserInfo optUser) : base(optUser)
{
}
public PushLog AddLog(long dataId,SwapPushDataEnum dataEnum,string dataNumber)
{
PushLog pushLog= new PushLog();
pushLog.data_id = dataId;
pushLog.data_type = (int)dataEnum;
pushLog.SetCreator(UserId);
pushLog.data_state = (int)SwapPushDataStateEnum.待推送;
pushLog.data_number = dataNumber;
pushLog.SetUpdator(UserId);
if (pushLog.id==0)
{
var worker = new IdWorker(1, 1);
pushLog.id = worker.NextId();
DbContext.push_log.Add(pushLog);
}
pushLog.odata_no = pushLog.id.ToString();
DbContext.SaveChanges();
return pushLog;
}
/// <summary>
/// 添加记录,当该编号下已经产生推送过的记录时
/// </summary>
/// <param name="dataId"></param>
/// <param name="dataEnum"></param>
/// <param name="dataNumber"></param>
public void AddLogWithCheck(long dataId, SwapPushDataEnum dataEnum, string dataNumber)
{
var pushLogs = DbContext.push_log.Where(x=>x.data_number.StartsWith(dataNumber) && x.data_state != (int)SwapPushDataStateEnum.待推送).ToList();
if (!pushLogs.Any())
{
return;
}
PushLog pushLog = new PushLog();
pushLog.data_id = dataId;
pushLog.data_type = (int)dataEnum;
pushLog.SetCreator(UserId);
pushLog.data_state = (int)SwapPushDataStateEnum.待推送;
pushLog.data_number = dataNumber;
pushLog.SetUpdator(UserId);
if (pushLog.id == 0)
{
var worker = new IdWorker(1, 1);
pushLog.id = worker.NextId();
DbContext.push_log.Add(pushLog);
}
pushLog.odata_no = pushLog.id.ToString();
DbContext.SaveChanges();
}
public PushLog AddLog(long dataId, SwapPushDataEnum addDataEnum, SwapPushDataEnum upDataEnum, string dataNumber)
{
var pushLogs = DbContext.push_log.Where(x=>x.data_id==dataId).ToList();
var dataType= (int)addDataEnum;
if (pushLogs.Count>0)
{
var addpushLog= pushLogs.FirstOrDefault(x=>x.data_type==(int)addDataEnum);
if (addpushLog!=null)
{
if (addpushLog.data_state == 0)
{
return addpushLog;
}
dataType= (int)upDataEnum;
}
var uppushLog = pushLogs.FirstOrDefault(x => x.data_state == 0 && x.data_type == (int)upDataEnum);
if (uppushLog!=null)
{
return uppushLog;
}
}
var pushLog=new PushLog();
pushLog.data_id = dataId;
pushLog.data_type = dataType;
pushLog.SetCreator(UserId);
pushLog.data_state = (int)SwapPushDataStateEnum.待推送;
pushLog.data_number = dataNumber;
pushLog.SetUpdator(UserId);
if (pushLog.id == 0)
{
var worker = new IdWorker(1, 1);
pushLog.id = worker.NextId();
DbContext.push_log.Add(pushLog);
}
pushLog.odata_no = pushLog.id.ToString();
DbContext.SaveChanges();
return pushLog;
}
/// <summary>
/// 重置删除log
/// </summary>
/// <param name="dataNumber"></param>
public void DeleteLog(string dataNumber)
{
var pushLogs = DbContext.push_log.Where(x=>x.data_number.StartsWith(dataNumber)&&x.data_state== (int)SwapPushDataStateEnum.待推送);
DbContext.push_log.RemoveRange(pushLogs);
DbContext.SaveChanges();
}
public void DeleteLogWithUnwind(string dataNumber)
{
var pushLogs = DbContext.push_log.Where(x => x.data_number.StartsWith(dataNumber) && x.data_state == (int)SwapPushDataStateEnum.待推送&&x.data_type>=(int)SwapPushDataEnum.合约终止);
DbContext.push_log.RemoveRange(pushLogs);
DbContext.SaveChanges();
}
/// <summary>
/// 保存kafka消费回执记录
/// </summary>
/// <param name="serial_no"></param>
/// <param name="dataEnum"></param>
/// <param name="dataStateEnum"></param>
/// <param name="dataResp"></param>
/// <returns></returns>
public PushLog SaveConsumerLog(string serial_no,string extNo, SwapPushDataEnum dataEnum, SwapPushDataStateEnum dataStateEnum,string dataReq,string dealResult)
{
if (string.IsNullOrEmpty(serial_no))
{
return null;
}
var pushLog = GetLogBySerialNo(serial_no, (int)dataEnum);
if (pushLog==null)
{
pushLog = new PushLog();
}
pushLog.data_type = (int)dataEnum;
pushLog.odata_no = serial_no;
pushLog.data_state = (int)dataStateEnum;
pushLog.data_req = dataReq;
pushLog.data_number = extNo;
pushLog.data_resp = dealResult;
pushLog.SetUpdator(UserId);
if (pushLog.id == 0)
{
var worker = new IdWorker(1, 1);
pushLog.id = worker.NextId();
pushLog.SetCreator(UserId);
DbContext.push_log.Add(pushLog);
}
DbContext.SaveChanges();
return pushLog;
}
public PushLog GetLogBySerialNo(string serial_no,int dataEnum)
{
var pushLog = DbContext.push_log.FirstOrDefault(x=>x.odata_no== serial_no&&x.data_type==dataEnum);
return pushLog;
}
public void DeleteLog(long logId)
{
PushLog pushLog = DbContext.push_log.FirstOrDefault(x => x.id == logId);
if (pushLog == null)
{
return;
}
DbContext.push_log.Remove(pushLog);
DbContext.SaveChanges();
}
public void DeleteLogs(List<long> logIds)
{
var pushLogs = DbContext.push_log.Where(x => logIds.Contains(x.id)).ToList();
if (pushLogs.Count() == 0)
{
return;
}
DbContext.push_log.RemoveRange(pushLogs);
DbContext.SaveChanges();
}
public void UpdateLogReq(long logId,string req)
{
PushLog pushLog = DbContext.push_log.FirstOrDefault(x => x.id==logId);
if (pushLog == null)
{
return;
}
pushLog.data_req = req;
pushLog.data_state = (int)SwapPushDataStateEnum.推送中;
pushLog.SetUpdator(UserId);
DbContext.SaveChanges();
}
public PushLog UpdateLogResp(long logId, string resp,int dataState)
{
PushLog pushLog = DbContext.push_log.FirstOrDefault(x => x.id == logId);
if (pushLog == null)
{
return null;
}
pushLog.data_resp = resp;
pushLog.data_state = dataState;
pushLog.SetUpdator(UserId);
DbContext.SaveChanges();
return pushLog;
}
public List<PushLog> GetPushLogs(List<int> dataEnums,List<int> dataStates)
{
var predicate = PredicateBuilder.Create<PushLog>(x => dataEnums.Contains(x.data_type));
if (dataStates!=null&& dataStates.Any())
{
predicate = predicate.And(x=> dataStates.Contains(x.data_state));
}
return GetPushLogs(predicate);
}
public List<PushLog> GetPushLogs(Expression<Func<PushLog,bool>> expression)
{
return DbContext.push_log.Where(expression).ToList();
}
public SearchListResult<PushLog> SearchList(PushLogQueryRequest req)
{
var predicate = PredicateBuilder.Create<PushLog>(x => true);
if (!string.IsNullOrEmpty(req.data_number))
{
predicate = predicate.And(x=>x.data_number.Contains(req.data_number));
}
if (req.data_states!=null&& req.data_states.Count()>0)
{
predicate = predicate.And(x => req.data_states.Contains(x.data_state));
}
if (req.data_types != null && req.data_types.Count() > 0)
{
predicate = predicate.And(x => req.data_types.Contains(x.data_type));
}
if (req.OptDateStart.HasValue)
{
predicate = predicate.And(x => x.update_time>= req.OptDateStart);
}
if (req.OptDateEnd.HasValue)
{
req.OptDateEnd= req.OptDateEnd.Value.AddDays(1).AddSeconds(-1);
predicate = predicate.And(x => x.update_time <= req.OptDateEnd);
}
var query = DbContext.push_log.Where(predicate);
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
return query.ToSearchList(req);
}
public PushLog ReSetLog(long logId)
{
PushLog pushLog = DbContext.push_log.FirstOrDefault(x => x.id == logId);
if (pushLog == null)
{
return null;
}
pushLog.data_resp = null;
pushLog.data_req = null;
pushLog.data_state = (int)SwapPushDataStateEnum.待推送;
pushLog.SetUpdator(UserId);
DbContext.SaveChanges();
return pushLog;
}
public PushLog GetLogByDataId(long dataId)
{
return DbContext.push_log.FirstOrDefault(x => x.data_id == dataId);
}
/// <summary>
/// 获取日终估值最新同步时间
/// </summary>
/// <param name="valuedate"></param>
/// <returns></returns>
public string GetLastSettmentTime(DateTime valuedate)
{
var nextDate = valuedate.AddDays(1);
var lastpushLog = DbContext.push_log.Where(x => x.data_type == (int)SwapPushDataEnum.日终估值获取 && x.data_state == (int)SwapPushDataStateEnum.接收处理成功 && x.create_time > valuedate&&x.create_time< nextDate).OrderByDescending(o => o.create_time).FirstOrDefault();
return lastpushLog == null ? $"{valuedate:yyyy-MM-dd}数据未同步": lastpushLog.create_time.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}