using BaseOUDAL; using Org.BouncyCastle.Ocsp; using Qdp.Foundation.Implementations; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using YLErp.Configuration; using YLErp.Modules.EodFileModule.Dto; using YLErp.Modules.EodFileModule.Enum; using YLErp.Modules.MarketRiskMoudule.Dto; using YLErp.Modules.TagModule.Dto; using YLErp.Modules.TradeMsgOutputModule.Company; namespace YLErp.Modules.EodFileModule { public class EodFileService : YLBaseService { protected static IYcLogger Log = LogFactory.GetLogger(typeof(EodFileService).FullName); public EodFileService(OptUserInfo userInfo) : base(userInfo) { } public SearchListResult Search(SearchFileRequest req) { var predicate = PredicateBuilder.True(); if (req.DateFromEodTime != null) { predicate = predicate.And(d => d.ValueDate >= req.DateFromEodTime); } if (req.DateToEodTime != null) { req.DateToEodTime = ((DateTime)req.DateToEodTime).AddDays(1); predicate = predicate.And(d => d.ValueDate < req.DateToEodTime); } if (req.FileType > 0) { predicate = predicate.And(d => d.FileType == req.FileType); } if (string.IsNullOrEmpty(req.sidx)) { req.sidx = "id"; req.sord = "desc"; } return DbContext.eod_file.Where(predicate).ToSearchList(req); } public void RepeatGenerate(RepeatGenerateRequest req) { if (req == null || req.Id == 0) { throw new ServiceException("请选择要重新生成的文件记录"); } var eodFile = DbContext.eod_file.FirstOrDefault(p => p.id == req.Id); if (eodFile == null) { throw new ServiceException("未找到对应的文件记录"); } if (eodFile.Status == (int)EodFileStatus.Generating) { throw new ServiceException("当前文件正在生成中,请等待生成完成后再操作"); } GenerateFile(eodFile); } /// /// 收盘后生成文件 /// /// public void GenerateFileAfterEod(DateTime valueDate) { if (PS.Config.Company != CompanyEnum.东莞) { return; } var task = GenerateFileAfterEodSync(valueDate); task.Start(); } public Task GenerateFileAfterEodSync(DateTime valueDate) { return new Task(() => { var eodFileList = DbContext.eod_file.Where(p => p.ValueDate == valueDate).ToList(); var pvEodFile = eodFileList.FirstOrDefault(p => p.FileType == (int)EodFileType.EodPvFile); if (pvEodFile == null) { pvEodFile = new eod_file { ValueDate = valueDate, FileName = "", FileType = (int)EodFileType.EodPvFile, Status = (int)EodFileStatus.WaitGenerate }; SetDBModelOpt(pvEodFile); DbContext.eod_file.Add(pvEodFile); DbContext.SaveChanges(); } var cashEodFile = eodFileList.FirstOrDefault(p => p.FileType == (int)EodFileType.EodCashFile); if (cashEodFile == null) { cashEodFile = new eod_file { ValueDate = valueDate, FileName = "", FileType = (int)EodFileType.EodCashFile, Status = (int)EodFileStatus.WaitGenerate }; SetDBModelOpt(cashEodFile); DbContext.eod_file.Add(cashEodFile); DbContext.SaveChanges(); } GenerateFile(pvEodFile); GenerateFile(cashEodFile); }); } private void GenerateFile(eod_file eodFile) { BaseDongWanFileGenerateService service; if (eodFile.FileType == (int)EodFileType.EodPvFile) { service = new DongWanPVPostionFileGenerateService(); } else if (eodFile.FileType == (int)EodFileType.EodCashFile) { service = new DongWanCashLogFileGenerateService(); } else { throw new ServiceException("未知文件类型"); } eodFile.Status = (int)EodFileStatus.Generating; eodFile.FilePath = ""; SetDBModelOpt(eodFile); DbContext.SaveChanges(); try { var genResult = service.GenerateDbfFile(eodFile.ValueDate); if (string.IsNullOrEmpty(genResult.FileName)) { eodFile.Status = (int)EodFileStatus.GeneratFail; eodFile.FailMsg = "没有可导出数据"; eodFile.FilePath = ""; SetDBModelOpt(eodFile); DbContext.SaveChanges(); } else { eodFile.Status = (int)EodFileStatus.GeneratComplete; eodFile.FileName = genResult.FileName; eodFile.FilePath = genResult.FilePath; eodFile.FailMsg = ""; SetDBModelOpt(eodFile); DbContext.SaveChanges(); } } catch (Exception ex) { eodFile.Status = (int)EodFileStatus.GeneratFail; eodFile.FailMsg = ex.Message; eodFile.FilePath = ""; SetDBModelOpt(eodFile); DbContext.SaveChanges(); Log.Error("生成dbf文件报错", ex); } } } }