297 lines
11 KiB
C#
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");
|
|
}
|
|
}
|
|
}
|