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

333 lines
14 KiB
C#

using SocialExplorer.IO.FastDBF;
using YLErp.Modules.TradeMsgOutputModule.Dto;
namespace YLErp.Modules.TradeMsgOutputModule.Company
{
public class DongWanCashLogFileGenerateService : BaseDongWanFileGenerateService
{
private readonly string _fileNamePrefix = "GXGTSC";
public override GenerateDbfFileResult GenerateDbfFile(DateTime valueDate)
{
var result = new GenerateDbfFileResult();
var tradeCashOutputService = new TradeCashOutputService();
var list = tradeCashOutputService.GetCashLog(valueDate);
if (list == null || list.Count == 0)
{
return result;
}
var dbffile = CreateFile(_fileNamePrefix, valueDate, out var filePath);
list.ForEach(p =>
{
var rows = WriteData(dbffile, p, valueDate);
if (rows != null && rows.Count > 0)
{
rows.ForEach(orec =>
{
dbffile.Write(orec);
});
}
});
dbffile.Close();
var fileName = GetFileName(_fileNamePrefix, valueDate);
result.FileName = fileName;
//上传Ftp
result.FilePath = UploadFile(filePath, fileName);
return result;
}
protected override List<DbfColumn> GetDbfFileColumns()
{
return new List<DbfColumn> {
new DbfColumn("cjrq", DbfColumn.DbfColumnType.Date),
new DbfColumn("htxh", DbfColumn.DbfColumnType.Character,50,0),
new DbfColumn("hydqr", DbfColumn.DbfColumnType.Date),
new DbfColumn("Ywlb", DbfColumn.DbfColumnType.Character,6,0),
new DbfColumn("ywdm", DbfColumn.DbfColumnType.Character,10,0),
new DbfColumn("Je", DbfColumn.DbfColumnType.Number,19,4),
new DbfColumn("Dqje", DbfColumn.DbfColumnType.Number,19,4),
new DbfColumn("Lx", DbfColumn.DbfColumnType.Number,19,4),
new DbfColumn("Bdzq", DbfColumn.DbfColumnType.Character,30,0),
new DbfColumn("ZJZH", DbfColumn.DbfColumnType.Character,30,0),
new DbfColumn("Gdll", DbfColumn.DbfColumnType.Number,12,8),
new DbfColumn("Njxts", DbfColumn.DbfColumnType.Number,4,0),
new DbfColumn("Bmdm", DbfColumn.DbfColumnType.Character,10,0),
new DbfColumn("Sypzlb", DbfColumn.DbfColumnType.Character,1,0),
};
}
/// <summary>
/// 写数据
/// </summary>
/// <param name="orec"></param>
/// <param name="cashLog"></param>
private List<DbfRecord> WriteData(DbfFile dbfFile, CashLogOutputDto cashLog, DateTime valueDate)
{
var ywlb = GetYWLBByTradeType(cashLog.TradeType);
if ("QYHH".Equals(ywlb))
{
return WriteDataForQYHH(dbfFile, cashLog, valueDate);
}
else
{
return WriteDataForCWQQ(dbfFile, cashLog, valueDate);
}
}
/// <summary>
/// 互换交易赋值
/// </summary>
/// <param name="orec"></param>
/// <param name="cashLog"></param>
private List<DbfRecord> WriteDataForQYHH(DbfFile dbfFile, CashLogOutputDto cashLog, DateTime valueDate)
{
var result = new List<DbfRecord>();
switch (cashLog.CashAction)
{
case ClientCashInCashOut.系统操作_期权费:
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "HHKS"; //互换首期
orec["Je"] = cashLog.OriginalStockEqvNotional != null ? cashLog.OriginalStockEqvNotional.ToString() : "0";
orec["Dqje"] = "0";
orec["hydqr"] = cashLog.ExerciseDate != null ? ((DateTime)cashLog.ExerciseDate).ToString("yyyy-MM-dd") : "";
result.Add(orec);
}
break;
case ClientCashInCashOut.系统操作_互换:
{
if (valueDate == cashLog.ValueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "DQJSJE"; //期间收益收支
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
if (cashLog.HappenedDate != null && cashLog.HappenedDate == valueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "QJSYDZ"; //期间收益到账
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
}
break;
case ClientCashInCashOut.系统操作_行权费:
{
if (valueDate == cashLog.ValueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "HHJS"; //互换到期
orec["Je"] = cashLog.OriginalStockEqvNotional != null ? cashLog.OriginalStockEqvNotional.ToString() : "0";
orec["Dqje"] = cashLog.Amount.ToString();
result.Add(orec);
}
if (cashLog.HappenedDate != null && cashLog.HappenedDate == valueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "JSJEDZ"; //结算金额到账
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
}
break;
case ClientCashInCashOut.系统操作_平仓费:
{
if (valueDate == cashLog.ValueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "HHJS"; //互换到期
orec["Je"] = cashLog.OriginalStockEqvNotional != null ? cashLog.OriginalStockEqvNotional.ToString() : "0";
orec["Dqje"] = cashLog.Amount.ToString();
result.Add(orec);
}
if (cashLog.HappenedDate != null && cashLog.HappenedDate == valueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
orec["ywdm"] = "JSJEDZ"; //结算金额到账
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
}
break;
}
//orec["ywdm"] = "A00";
//orec["Je"] = "10000000.1112";
//orec["Dqje"] = "1111";
return result;
}
/// <summary>
/// 场外期权交易赋值
/// </summary>
/// <param name="orec"></param>
/// <param name="cashLog"></param>
private List<DbfRecord> WriteDataForCWQQ(DbfFile dbfFile, CashLogOutputDto cashLog, DateTime valueDate)
{
var result = new List<DbfRecord>();
switch (cashLog.CashAction)
{
case ClientCashInCashOut.系统操作_期权费:
{
if (valueDate == cashLog.ValueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
if (cashLog.Amount > 0) //应收
{
if (cashLog.PremiumPayDate == cashLog.TradeDate) //前付费方式
{
orec["ywdm"] = "YSQQF"; //应收前付费
}
else
{
orec["ywdm"] = "YSQQF_HFF"; //应收后付费
}
}
else //应付
{
if (cashLog.PremiumPayDate == cashLog.TradeDate) //前付费方式
{
orec["ywdm"] = "YFQQF"; // 应付 前付费到账
}
else
{
orec["ywdm"] = "YFQQF_HFF"; // 应付 后付费到账
}
}
orec["hydqr"] = cashLog.ExerciseDate != null ? ((DateTime)cashLog.ExerciseDate).ToString("yyyy-MM-dd") : "";
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
if (cashLog.HappenedDate != null && cashLog.HappenedDate == valueDate)
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
if (cashLog.Amount > 0) //应收
{
if (cashLog.PremiumPayDate == cashLog.TradeDate) //前付费方式
{
orec["ywdm"] = "QQFDZ"; //应收前付费到账
}
else
{
orec["ywdm"] = "QQFDZ_HFF"; //应收后付费到账
}
}
else //应付
{
if (cashLog.PremiumPayDate == cashLog.TradeDate) //前付费方式
{
orec["ywdm"] = "QQFZF"; // 应付 前付费到账
}
else
{
orec["ywdm"] = "QQFZF_HFF"; // 应付 后付费到账
}
}
orec["hydqr"] = "";
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
}
break;
case ClientCashInCashOut.系统操作_票息:
case ClientCashInCashOut.系统操作_行权费:
case ClientCashInCashOut.系统操作_平仓费:
{
if (valueDate == cashLog.ValueDate) //应收
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
if (cashLog.Amount > 0)
{
orec["ywdm"] = "DQSQSY"; //收取收益
}
else
{
orec["ywdm"] = "DQZFSY"; //支付收益
}
orec["Je"] = (cashLog.TradePrice*(cashLog.OriginalNotional>0?(cashLog.Notional/cashLog.OriginalNotional):1)).ToString();
orec["Dqje"] = cashLog.Amount.ToString();
result.Add(orec);
}
if (cashLog.HappenedDate != null && cashLog.HappenedDate == valueDate) //到账
{
var orec = GetDefaultRecord(dbfFile, cashLog, valueDate);
if (cashLog.Amount > 0)
{
if (cashLog.HappenedDate > cashLog.ExerciseDate)
{
orec["ywdm"] = "DQSYDZ_HFF"; //应收后付费到账
}
else
{
orec["ywdm"] = "DQSYDZ"; //应收前付费到账
}
}
else
{
if (cashLog.HappenedDate > cashLog.ExerciseDate)
{
orec["ywdm"] = "DQSYZF_HFF"; //应付后付费到账
}
else
{
orec["ywdm"] = "DQSYZF"; //应付前付费到账
}
}
orec["Je"] = cashLog.Amount.ToString();
orec["Dqje"] = "0";
result.Add(orec);
}
}
break;
}
return result;
}
private DbfRecord GetDefaultRecord(DbfFile dbfFile, CashLogOutputDto cashLog, DateTime valueDate)
{
var orec = new DbfRecord(dbfFile.Header) { AllowDecimalTruncate = true };
orec["cjrq"] = (valueDate == cashLog.ValueDate) ? cashLog.ValueDate.ToString("yyyy-MM-dd") : ((DateTime)cashLog.HappenedDate).ToString("yyyy-MM-dd");
orec["htxh"] = cashLog.TradeNumber;
orec["hydqr"] = "";
var ywlb = GetYWLBByTradeType(cashLog.TradeType);
orec["Ywlb"] = ywlb;
orec["Lx"] = "0";
orec["Bdzq"] = cashLog.UnderlyingCode;
orec["ZJZH"] = cashLog.ExChangeAccount;
orec["Gdll"] = "0";
orec["Njxts"] = "0";
orec["Bmdm"] = GetBmdmByAssetGroupName(cashLog.AssetUnitGroupName);
orec["Sypzlb"] = "1";
return orec;
}
}
}