333 lines
14 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|