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 { /// /// 推送记录服务 /// 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; } /// /// 添加记录,当该编号下已经产生推送过的记录时 /// /// /// /// 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; } /// /// 重置删除log /// /// 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(); } /// /// 保存kafka消费回执记录 /// /// /// /// /// /// 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 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 GetPushLogs(List dataEnums,List dataStates) { var predicate = PredicateBuilder.Create(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 GetPushLogs(Expression> expression) { return DbContext.push_log.Where(expression).ToList(); } public SearchListResult SearchList(PushLogQueryRequest req) { var predicate = PredicateBuilder.Create(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); } /// /// 获取日终估值最新同步时间 /// /// /// 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"); } } }