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

179 lines
6.2 KiB
C#

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<eod_file> Search(SearchFileRequest req)
{
var predicate = PredicateBuilder.True<eod_file>();
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<eod_file>(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);
}
/// <summary>
/// 收盘后生成文件
/// </summary>
/// <param name="valueDate"></param>
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);
}
}
}
}