Files
zszq-trs/YLErpDAL/Modules/SuperviseReportModule/SAC/Service/ReportBaseService.cs
T
2024-05-09 14:06:26 +08:00

1783 lines
84 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Oracle.ManagedDataAccess.Client;
using System.Data;
using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Schema;
using YLErp.BLL;
using YLErp.Commons;
using YLErp.DBModels.Enums;
using YLErp.Helpers;
using YLErp.Modules.SuperviseReportModule.SAC.Common;
using YLErp.Modules.SuperviseReportModule.SAC.Model;
using YLErp.Modules.TempFilesModule;
using static YLErp.DBModels.Consts.ConsReport;
namespace YLErp.Modules.SuperviseReportModule.SAC.Service
{
public abstract class ReportBaseService : YLBaseService
{
/// <summary>
/// Excel数据源根目录
/// </summary>
protected string _excelDataSourceRootPath { get; private set; }
/// <summary>
/// Excel数据源的相对路径
/// </summary>
protected virtual string _excelDataSourcePath { get; }
/// <summary>
/// Excel数据源的文件名
/// </summary>
protected virtual string _excelDataSourceFileName { get; }
/// <summary>
/// Excel数据源
/// </summary>
protected DataSet _excelDataSource;
/// <summary>
/// View数据源
/// </summary>
protected DataSet _viewDataSource;
/// <summary>
/// 子系统报送文件目录
/// </summary>
protected List<string> xmlAttachmentList = new List<string>();
/// <summary>
///
/// </summary>
protected TempFilesService tempFilesService = null;
protected ReportBaseService(OptUserInfo optUser) : base(optUser)
{
tempFilesService = new TempFilesService(optUser);
}
/// <summary>
/// 文件序号
/// </summary>
public int FileNumber { get; set; }
public static int MaxExceIndex { get; set; }
protected abstract DataFlagsEnum BusiDataType { get; }
protected abstract SuperviseReportTypeEnum ReportType { get; }
/// <summary>
/// 支持的操作类型
/// </summary>
public abstract List<OptFlagsEnum> ValidOperationType { get; }
protected ReportInfo _reqInfo { get; private set; }
/// <summary>
/// 操作类型
/// </summary>
protected OptFlagsEnum _operationType { get; private set; }
private YLContext _writeDb = null;
public YLContext WriteDb
{
get
{
return _writeDb ?? DbContext;
}
set
{
_writeDb = value;
}
}
/// <summary>
/// 当前文件代码
/// </summary>
protected string FileTag { get; private set; }
/// <summary>
/// 报告状态
/// </summary>
public ReportStatusModel ReportStatus { get; set; }
public ReportRootModel Execute(ReportInfo req, OptFlagsEnum operationType)
{
LogFactory.GetLogger("Executeone").Info($"PS.Config.ErpElement.SAC_ReportDataSource111:" + PS.Config.ErpElement.SAC_ReportDataSource.ToString());
_reqInfo = req;
_operationType = operationType;
ReportRootModel root = new ReportRootModel();
try
{
root.Annex = new List<string>();
LogFactory.GetLogger("Execute22").Info($"PS.Config.ErpElement.SAC_ReportDataSource111:" + PS.Config.ErpElement.SAC_ReportDataSource.ToString());
loadExcelDataSource();
LogFactory.GetLogger("Execute22").Info($"PS.Config.ErpElement.SAC_ReportDataSource111:" + PS.Config.ErpElement.SAC_ReportDataSource.ToString());
LogFactory.GetLogger("Execute111").Info($"PS.Config.ErpElement.SAC_ReportDataSource111:" + PS.Config.ErpElement.SAC_ReportDataSource.ToString());
if ((PS.Config.ErpElement.SAC_ReportDataSource & SAC_ReportDataSourceEnum.KingstarView) == SAC_ReportDataSourceEnum.KingstarView)
{
LogFactory.GetLogger("Execute111").Info($"PS.Config.ErpElement.SAC_ReportDataSource222:" + PS.Config.ErpElement.SAC_ReportDataSource.ToString());
loadViewDataSource();
}
root.Header = GenerateHeader();
FileTag = root.FileTag;
root.Body = GenerateBody(out bool noData, out List<string> fileList);
if (noData)
{ return null; }
root.Annex.AddRange(fileList);
WriteDb.supervise_report.Add(new DBModels.SuperviseReport()
{
ReportType = ReportType,
ReportDate = _reqInfo.ReportDate,
DataDate = _reqInfo.DataDate,
SenderCode = _reqInfo.SenderCode,
ReceiverCode = _reqInfo.ReceiverCode,
LastMonthCash = _reqInfo.LastMonthCash,
LatestMonthCash = _reqInfo.LatestMonthCash,
LatestNetAssets = _reqInfo.LatestNetAssets,
SRCReportStatus = _reqInfo.SACReportStatus,
NAFMIIReportStatus = _reqInfo.NAFMIIReportStatus,
ISDAReportStatus = _reqInfo.ISDAReportStatus,
EventReportStatus = _reqInfo.EventReportStatus,
OtherReportStatus = _reqInfo.OtherReportStatus,
PeriodicReportQuarterStatus = _reqInfo.PeriodicReportQuarterStatus,
FileTag = root.FileTag,
FilePath = "",
ReportReponseStatus = ReportSentStatus.NONE,
ReportReponseCode = "",
ReportReponseMessage = "未知",
ReportReponsePath = "",
optDate = DateTime.Now,
optUserId = OptUser.UserId,
});
}
catch (ServiceException ex)
{
throw ex;
}
catch (Exception ex)
{
LogFactory.GetLogger(this.GetType().Name).Error(ex, $"req={req.ToJson()}\r\noperationType={_operationType}");
throw new Exception("生成出错", ex);
}
return root;
}
private HeaderModel GenerateHeader()
{
HeaderModel model = new HeaderModel();
model.SenderCode = _reqInfo.SenderCode;
model.ReceiverCode = _reqInfo.ReceiverCode;
model.SendDate = _reqInfo.ReportDate.ToString("yyyy-MM-dd");
model.FileNumber = FileNumber.ToString("0000");
model.BusiDataType = BusiDataType;
model.OperationType = _operationType.ToString();
return model;
}
protected abstract BodyModel GenerateBody(out bool noData, out List<string> fileList);
public virtual bool CheckRequestParamer(ReportInfo req, out string errMsg)
{
errMsg = "";
if (string.IsNullOrWhiteSpace(req.SenderCode))
{
errMsg = "报送方编号不应为空";
return false;
}
if (string.IsNullOrWhiteSpace(req.ReceiverCode))
{
errMsg = "接收方编号不应为空";
return false;
}
if (req.ReportDate == default(DateTime))
{
errMsg = "报送日期不应为空";
return false;
}
return true;
}
public SacInfo CheckValue(ReportRootModel model, out bool checkStatus)
{
SacInfo errMsg = null;
if (model != null)
{
List<SacInfo> listRoot = new List<SacInfo>();
var headerItem = CheckHeaderValue(model?.Header, out _);
if (headerItem != null)
{
listRoot.Add(headerItem);
}
var bodyItem = CheckBodyValue(model?.Body, out _);
if (bodyItem.Count > 0)
{
var item = new SacInfo("Body");
item.SubMaps = bodyItem;
listRoot.Add(item);
}
model.XmlStr = XmlHelper.Serializable(model, true);
if (listRoot.Count == 0)
{
var xsdPath = OtcAppContext.MapPath(Path.Combine("\\App_Docs\\xsd", BusiDataType.ToString() + ".xsd"));
if (File.Exists(xsdPath))
{
var item = ValidationXSD(model.XmlStr, xsdPath);
if (item != null)
{
listRoot.Add(item);
}
}
}
if (listRoot.Count > 0)
{
errMsg = new SacInfo("Root");
errMsg.SubMaps = new List<SacInfo>(listRoot);
errMsg.formatFieldDescription();
}
}
checkStatus = errMsg == null;
return errMsg;
}
private SacInfo CheckHeaderValue(HeaderModel model, out bool checkStatus)
{
SacInfo errMsg = null;
List<SacInfo> listRoot = new List<SacInfo>();
CheckHelper<HeaderModel> helper = new CheckHelper<HeaderModel>();
helper.ExecuteCheck(model, (name, value, msg) =>
{
listRoot.Add(new SacInfo(name, value, msg));
});
if (listRoot.Count > 0)
{
errMsg = new SacInfo("Header");
errMsg.SubMaps = new List<SacInfo>(listRoot);
}
checkStatus = errMsg == null;
return errMsg;
}
protected void SaveReportNotes(SACReportNotes sacReportNotes)
{
sacReportNotes.DataId = sacReportNotes.DataId ?? "";
WriteDb.sac_report_notes.Add(sacReportNotes);
}
/// <summary>
/// 获取报送记录
/// </summary>
/// <param name="infoTag">报告标识</param>
/// <param name="ignoreInValid">是否忽略无效的交易</param>
/// <returns></returns>
protected List<SACReportNotes> GetReportNotes(string infoTag, bool ignoreInValid = false)
{
var query = DbContext.sac_report_notes.AsNoTracking().Where(O => O.InfoTag.Contains(infoTag) && O.ReportResponse);
if (!ignoreInValid)
{
query = query.Where(O => O.IsValid);
}
return query.OrderByDescending(O => O.OptTime).ToList();
}
protected List<SACReportNotes> GetReportNotes(SuperviseReportTypeEnum reportType, string infoTag, bool ignoreInValid = false)
{
return GetReportNotes(infoTag, ignoreInValid).Where(O => O.ReportType == reportType).ToList();
}
/// <summary>
/// 根据交易确认书编号获取协会分配的编号
/// </summary>
/// <param name="tradeConfirmationNumber"></param>
/// <returns></returns>
protected string GetBizIdFromInfoTag(string tradeConfirmationNumber)
{
var transactionConfirmationNumber = "";
var note = GetReportNotes($"_{tradeConfirmationNumber.Replace("_", "-")}_").Where(O => O.ReportType == SuperviseReportTypeEnum.SAC_OptionConfirmation || O.ReportType == SuperviseReportTypeEnum.SAC_SwapConfirmation).LastOrDefault();
if (note != null && !note.BizId.IsNullOrWhiteSpace())
{
transactionConfirmationNumber = note.BizId;
}
return transactionConfirmationNumber;
}
protected abstract List<SacInfo> CheckBodyValue(BodyModel model, out bool checkStatus);
/// <summary>
/// 全部报表生成成功后执行
/// </summary>
/// <returns></returns>
public virtual bool BeforeOfGenerated(out string errMsg)
{
errMsg = "";
return true;
}
public static ReportBaseService ReportFactory(OptUserInfo optUser, SuperviseReportTypeEnum dataFlag)
{
ReportBaseService service = null;
switch (dataFlag)
{
case SuperviseReportTypeEnum.SAC_MasterAgrmt:
service = new ReportMasterAgrmtService(optUser);
break;
case SuperviseReportTypeEnum.SAC_MasterAgrmtProduct:
service = new ReportMasterAgrmtProductService(optUser);
break;
case SuperviseReportTypeEnum.SAC_SupAgrmt:
service = new ReportSupAgrmtService(optUser);
break;
case SuperviseReportTypeEnum.SAC_PerformanceGuaranteeAgrmt:
service = new ReportPerformanceGuaranteeAgrmtService(optUser);
break;
case SuperviseReportTypeEnum.SAC_OptionConfirmation:
service = new ReportOptionConfirmationService(optUser);
break;
case SuperviseReportTypeEnum.SAC_SwapConfirmation:
service = new ReportSwapConfirmationService(optUser);
break;
case SuperviseReportTypeEnum.SAC_OptionTermination:
service = new ReportOptionTerminationService(optUser);
break;
case SuperviseReportTypeEnum.SAC_SwapDurationManagement:
service = new ReportSwapTerminationService(optUser);
break;
case SuperviseReportTypeEnum.SAC_PeriodicReportSAC:
service = new ReportPeriodicReportSACService(optUser);
break;
case SuperviseReportTypeEnum.SAC_PeriodicReportNAFMII:
service = new ReportPeriodicReportNAFMIIService(optUser);
break;
case SuperviseReportTypeEnum.SAC_PeriodicReportISDA:
service = new ReportPeriodicReportISDAService(optUser);
break;
case SuperviseReportTypeEnum.SAC_EventReport:
service = new ReportEventReportService(optUser);
break;
case SuperviseReportTypeEnum.SAC_OtherReport:
service = new ReportOtherReportService(optUser);
break;
case SuperviseReportTypeEnum.SAC_PeriodicReportQuarter:
service = new ReportPeriodicReportQuarterService(optUser);
break;
case SuperviseReportTypeEnum.SAC_ContractNumberProcess:
service = new ContractNumberProcessService(optUser);
break;
case SuperviseReportTypeEnum.SAC_SwapEquityPayment:
service = new ReportSwapEquityPaymentService(optUser);
break;
case SuperviseReportTypeEnum.SAC_ConfirmationAtt:
service = new ReportSwapConfirmationAttService(optUser);
break;
default:
throw new ServiceException("报表未实现");
}
return service;
}
public static string ZipFile(ReportResponse res)
{
if (res.Infos.Count == 0)
{
return "";
}
string directory = $"/App_Docs/Download/Report/";
string absDirectory = OtcAppContext.MapPath(directory);
checkDirectory(absDirectory);
string tempFile = Path.Combine(absDirectory, "Temp", res.FileTag);
checkDirectory(tempFile, true);
string attachmentPath = Path.Combine(tempFile, "ATTACHMENT");
checkDirectory(attachmentPath);
foreach (var item in res.Infos)
{
File.WriteAllText(Path.Combine(tempFile, item.FileTag + ".xml"), item.XmlStr);
for (int i = 0; i < item.Annex.Count; i++)
{
if (string.IsNullOrWhiteSpace(item.Annex[i]))
{
continue;
}
string annexPath = item.Annex[i];
if (annexPath.StartsWith("\\") || annexPath.StartsWith("/") || !Path.IsPathRooted(annexPath))
{
annexPath = OtcAppContext.MapPath(item.Annex[i]);
}
string annexFileName = Path.GetFileName(annexPath);
try
{
File.Copy(annexPath, Path.Combine(attachmentPath, annexFileName));
}
catch (Exception ex)
{
LogFactory.GetLogger<ReportBaseService>().Error(ex);
throw new ServiceException($"生成报送文件失败,{Regex.Replace(ex.Message, $"(?<=)\\S+(?={annexFileName})", "")}");
}
}
}
var zipFile = res.FileTag + ".zip";
string outFile = Path.Combine(OtcAppContext.MapPath(directory), zipFile);
ZipHelper.ZipDirectory(tempFile, outFile);
return Path.Combine(directory, zipFile);
}
/// <summary>
/// 校验xml文件
/// </summary>
/// <param name="xmlStr"></param>
/// <param name="xsdPath"></param>
private static SacInfo ValidationXSD(string xmlStr, string xsdPath)
{
SacInfo result = null;
List<SacInfo> listRoot = new List<SacInfo>();
XmlSchemaSet schema = new XmlSchemaSet();
schema.Add("", xsdPath);
XmlReader reader = XmlReader.Create(new StringReader(xmlStr));
XDocument doc = XDocument.Load(reader);
doc.Validate(schema, (obj, e) =>
{
string msg = Regex.Replace(e.Message, @"元素[^]+", "");
msg = Regex.Replace(msg, @"\s-\s[\D]+约束失败。", "").Replace("“", "").Replace("”", "");
var name = "";
try
{
name = XDocument.Load(new StringReader(obj?.ToString())).Root.Name.LocalName;
}
catch (Exception ex) { LogFactory.GetLogger("ValidationXSD").Error(ex, "XSD校验失败"); }
listRoot.Add(new SacInfo(name, "", msg));
Debug.WriteLine(msg);
});
if (listRoot.Count > 0)
{
result = new SacInfo("Body");
result.SubMaps = new List<SacInfo>(listRoot);
}
return result;
}
private static void checkDirectory(string path, bool isInit = false)
{
if (isInit && Directory.Exists(path))
{
Directory.Delete(path, true);
}
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
/// <summary>
/// 获取标的小类
/// </summary>
/// <param name="undrlygAssetDtldTypeMap"></param>
/// <param name="underlyingInstrumentType"></param>
/// <param name="commodityCode"></param>
/// <returns></returns>
protected string GetSACUndrlygAssetDtldTypeMap(ExpandoDictionary<string, string> undrlygAssetDtldTypeMap, string underlyingInstrumentType, string commodityCode)
{
string result;
var desc = ConsGlobal.InstrumentType.GetDesc(underlyingInstrumentType);
if (!undrlygAssetDtldTypeMap.TryGetValue(desc, out result))
{
switch (desc)
{
case "商品期货":
if (commodityCode == "AU")
{
result = undrlygAssetDtldTypeMap["黄金期货"];
}
else
{
result = undrlygAssetDtldTypeMap["其他期货"];
}
break;
case "商品现货":
if (commodityCode == "AU")
{
result = undrlygAssetDtldTypeMap["黄金现货"];
}
else
{
result = undrlygAssetDtldTypeMap["其他现货"];
}
break;
default:
result = undrlygAssetDtldTypeMap["其他标的"];
break;
}
}
return result;
}
/// <summary>
/// 从_excelDataSource中获取指定信息
/// </summary>
/// <param name="sheetName"></param>
/// <param name="rowIndex"></param>
/// <param name="colIndex"></param>
/// <returns></returns>
protected string GetDataSetValue(DataTable dt, int rowIndex, int colIndex)
{
string result = "";
if (dt != null)
{
if (dt.Rows.Count <= rowIndex
|| dt.Columns.Count <= colIndex)
{
throw new ServiceException($"{dt.TableName} Sheet页内容不符合规则,不存在[{rowIndex},{colIndex}]单元格");
}
result = dt.Rows[rowIndex][colIndex].ToString().Trim();
}
return result;
}
/// <summary>
/// 从_viewDataSource中获取指定信息
/// </summary>
/// <param name="sheetName"></param>
/// <param name="rowIndex"></param>
/// <param name="colIndex"></param>
/// <returns></returns>
protected string GetDataSetValue(DataTable dt, int rowIndex, string colName)
{
string result = "";
if (dt != null)
{
if (!dt.Columns.Contains(colName))
{
LogFactory.GetLogger("GetDataSetValue").Info($"{dt.TableName} 不存在[{colName}]列数据");
//throw new ServiceException($"{dt.TableName} 不存在[{colName}]列数据");
return "";
}
result = dt.Rows[rowIndex][colName].ToString().Trim();
}
return result;
}
/// <summary>
/// 从_viewDataSource中获取指定信息
/// </summary>
/// <param name="sheetName"></param>
/// <param name="rowIndex"></param>
/// <param name="colIndex"></param>
/// <returns></returns>
protected double GetDataSetValueToDouble(DataTable dt, int rowIndex, string colName)
{
double result = 0;
var str = GetDataSetValue(dt, rowIndex, colName);
if (str == null || !double.TryParse(str, out result))
{
result = 0;
}
return result;
}
/// <summary>
/// 从_excelDataSource中获取指定信息
/// </summary>
/// <param name="sheetName"></param>
/// <param name="rowIndex"></param>
/// <param name="colIndex"></param>
/// <returns></returns>
protected double GetDataSetValueToDouble(DataTable dt, int rowIndex, int colIndex)
{
double result = 0;
var str = GetDataSetValue(dt, rowIndex, colIndex);
if (str == null || !double.TryParse(str, out result))
{
result = 0;
}
return result;
}
protected void loadExcelDataSource()
{
if (((PS.Config.ErpElement.SAC_ReportDataSource & SAC_ReportDataSourceEnum.Template) == SAC_ReportDataSourceEnum.Template ||
BusiDataType == DataFlagsEnum.A1011 ||
BusiDataType == DataFlagsEnum.A1012 ||
BusiDataType == DataFlagsEnum.A1013) &&
!string.IsNullOrWhiteSpace(_excelDataSourcePath))
{
var rootPath = tempFilesService.QueryTempFile(_reqInfo.ReportDate, "报送模板").Select(O => O.filePath).FirstOrDefault();
if (string.IsNullOrWhiteSpace(rootPath))
{
return;
}
_excelDataSourceRootPath = $"{Path.GetDirectoryName(rootPath)}\\{Path.GetFileNameWithoutExtension(rootPath)}\\";
string path = $"{_excelDataSourceRootPath}{_excelDataSourcePath}";
LogFactory.GetLogger("loadExcelDataSource").Info($"查找数据源目录:{path}");
path = OtcAppContext.MapPath(path);
if (System.IO.Directory.Exists(path))
{
string filePath = System.IO.Directory.GetFiles(path, _excelDataSourceFileName).FirstOrDefault();
LogFactory.GetLogger("loadExcelDataSource").Info($"查找数据源文件:{filePath}");
if (!string.IsNullOrWhiteSpace(filePath))
{
_excelDataSource = new ExcelHelper().ExcelToDataSet(filePath, 0);
LogFactory.GetLogger("loadExcelDataSource").Info($"成功加载数据源");
}
}
}
}
/// <summary>
/// 加载外部金仕达视图报送数据
/// </summary>
protected void loadViewDataSource()
{
try
{
_viewDataSource = new DataSet();
LogFactory.GetLogger("loadViewDataSource").Info("开始执行loadViewDataSource.....");
var connection = PS.Config.ErpElement.KingstarViewConnectionString;
LogFactory.GetLogger("loadViewDataSource").Info($"链接字符串:{connection}");
using (var db = new DbHelper(connection))
{
switch (BusiDataType)
{
case DataFlagsEnum.NONE:
break;
case DataFlagsEnum.A1001:
break;
case DataFlagsEnum.A1002:
break;
case DataFlagsEnum.A1003:
break;
case DataFlagsEnum.A1004:
break;
case DataFlagsEnum.A1005:
LogFactory.GetLogger("loadViewDataSource").Info("开始执行GetSwapConfirm.....");
GetSwapConfirm(db, _reqInfo.DataDate);
LogFactory.GetLogger("loadViewDataSource").Info("执行完GetSwapConfirm.....");
break;
case DataFlagsEnum.A1006:
LogFactory.GetLogger("loadViewDataSource").Info("开始执行GetSwapLifeCycle.....");
GetSwapLifeCycle(db, _reqInfo.DataDate);
LogFactory.GetLogger("loadViewDataSource").Info("执行完GetSwapLifeCycle.....");
break;
case DataFlagsEnum.A1007:
break;
case DataFlagsEnum.A1008:
break;
case DataFlagsEnum.A1009:
break;
case DataFlagsEnum.A1010:
break;
case DataFlagsEnum.A1011:
break;
case DataFlagsEnum.A1012:
break;
case DataFlagsEnum.A1013:
break;
case DataFlagsEnum.A1014:
break;
case DataFlagsEnum.A1015:
break;
case DataFlagsEnum.A1016:
LogFactory.GetLogger("loadViewDataSource").Info("开始执行GetSwapequityPayment.....");
GetSwapequityPayment(db, _reqInfo.DataDate);
LogFactory.GetLogger("loadViewDataSource").Info("执行完GetSwapequityPayment.....");
break;
case DataFlagsEnum.A1017:
LogFactory.GetLogger("loadViewDataSource").Info("开始执行GetSwapConfirmationAtt.....");
GetSwapConfirmationAtt(db, _reqInfo.DataDate);
LogFactory.GetLogger("loadViewDataSource").Info("执行完GetSwapConfirmationAtt.....");
break;
default:
break;
}
}
LogFactory.GetLogger("loadViewDataSource").Info("成功执行loadViewDataSource");
}
catch (Exception ex)
{
LogFactory.GetLogger("loadViewDataSource").Error(ex, "出现异常");
}
}
private string GetDataReaderValue(OracleDataReader dr, string fieldName)
{
string result = "";
if (dr == null) return result;
result = dr[fieldName] == DBNull.Value ? "" : dr[fieldName].ToString();
return result;
}
private void SetOneColumnData(OracleDataReader dr, DataRow row, string fieldName)
{
SetOneColumnData(dr, row, fieldName, "");
}
private void SetOneColumnData(OracleDataReader dr, DataRow row, string fieldName, string toFileName = "")
{
if (string.IsNullOrEmpty(toFileName))
row[fieldName] = GetDataReaderValue(dr, fieldName);
else
row[toFileName] = GetDataReaderValue(dr, fieldName);
}
#region 交易确认书视图数据读取
/// <summary>
/// 交易确认书数据读取
/// </summary>
/// <param name="db"></param>
/// <param name="reportDate"></param>
private void GetSwapConfirm(DbHelper db, DateTime reportDate)
{
try
{
LogFactory.GetLogger("GetSwapConfirm").Info("进入GetSwapConfirm");
string schema = PS.Config.ErpElement.KingstarViewTableSchema.IsNullOrWhiteSpace() ? "" : $"\"{PS.Config.ErpElement.KingstarViewTableSchema}\".";
var dtSwapConfirm = CreateSwapConfirmDataTable();
var dtSwapCollateral = CreateSwapCollateralDataTable();
var dtPaymentMethod = CreatePaymentMethodDataTable();
LogFactory.GetLogger("GetSwapConfirm").Info("创建完3个DataTable结构");
var sqlStr = new StringBuilder();
sqlStr.Append("SELECT confirmation.*");
sqlStr.Append($"FROM {schema}v_swap_confirmation_A1005 confirmation ");
sqlStr.Append($"WHERE confirmation.SUBMIT_STATUS = 0 AND confirmation.OPERATIONTYPE = '{_operationType.ToString()}' AND confirmation.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapConfirm ExecuteSql CreateSwapConfirmNewRow").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapConfirm ExecuteSql CreateSwapConfirmNewRow").Error(ex);
}
CreateSwapConfirmNewRow(dtSwapConfirm, dr);
});
sqlStr.Clear();
sqlStr.Append("SELECT collateral.*");
sqlStr.Append($"FROM {schema}v_swap_collateral_A1005 collateral ");
sqlStr.Append($"WHERE collateral.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapConfirm ExecuteSql CreateSwapPerformanceGuaranteeAttNewRow").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapConfirm ExecuteSql CreateSwapPerformanceGuaranteeAttNewRow").Error(ex);
}
CreateSwapCollateralNewRow(dtSwapCollateral, dr);
});
sqlStr.Clear();
sqlStr.Append("SELECT feepayment.*");
sqlStr.Append($"FROM {schema}v_swap_fee_payment_A1005 feepayment ");
sqlStr.Append($"WHERE feepayment.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapConfirm ExecuteSql CreatePaymentMethodNewRow").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapConfirm ExecuteSql CreatePaymentMethodNewRow").Error(ex);
}
CreatePaymentMethodNewRow(dtPaymentMethod, dr);
});
LogFactory.GetLogger("GetSwapConfirm").Info("dtSwapConfirm Data:" + dtSwapConfirm.ToStringContent());
_viewDataSource.Tables.Add(dtSwapConfirm);
LogFactory.GetLogger("GetSwapConfirm").Info("CreateSwapCollateralNewRow Data:" + dtSwapCollateral.ToStringContent());
_viewDataSource.Tables.Add(dtSwapCollateral);
LogFactory.GetLogger("GetSwapConfirm").Info("dtPaymentMethod Data:" + dtPaymentMethod.ToStringContent());
_viewDataSource.Tables.Add(dtPaymentMethod);
LogFactory.GetLogger("GetSwapConfirm").Info("成功执行完离开GetSwapConfirm");
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapConfirm").Error(ex, "出现异常");
}
}
private void CreatePaymentMethodNewRow(DataTable dtPaymentMethod, OracleDataReader dr)
{
var newRow = dtPaymentMethod.NewRow();
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "PAYMENTMETHOD");
SetOneColumnData(dr, newRow, "PAYER");
SetOneColumnData(dr, newRow, "PAYMENTFREQ");
SetOneColumnData(dr, newRow, "FIXEDINTERESTRATE");
SetOneColumnData(dr, newRow, "FLOATINTERESTRATE");
SetOneColumnData(dr, newRow, "REFFLOATINGINTERESTRATE");
SetOneColumnData(dr, newRow, "BASEPOINT");
SetOneColumnData(dr, newRow, "BLANK1", "BLANK1");
SetOneColumnData(dr, newRow, "BLANK2", "BLANK2");
dtPaymentMethod.Rows.Add(newRow);
}
private void CreateSwapCollateralNewRow(DataTable dtSwapPerformanceGuaranteeAtt, OracleDataReader dr)
{
var newRow = dtSwapPerformanceGuaranteeAtt.NewRow();
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "PERFORMANCECOLLTYPE");
SetOneColumnData(dr, newRow, "PERFORMANCECOLLRANGE");
SetOneColumnData(dr, newRow, "MULTICONFIRMATIONID");
SetOneColumnData(dr, newRow, "REMARKS", "REMARKS");
dtSwapPerformanceGuaranteeAtt.Rows.Add(newRow);
}
private void CreateSwapConfirmNewRow(DataTable dtSwapConfirm, OracleDataReader dr)
{
LogFactory.GetLogger("CreateSwapConfirmNewRow").Info("进入CreateSwapConfirmNewRow");
var confirmationNo = GetDataReaderValue(dr, "CONFIRMATIONNO");
var rows = dtSwapConfirm.Select("CONFIRMATIONNO='" + confirmationNo + "'");
if (rows != null && rows.Count() > 0) return;//存在了就不用再加了
var newRow = dtSwapConfirm.NewRow();
SetOneColumnData(dr, newRow, "MASTERAGRMTNO");
SetOneColumnData(dr, newRow, "SUPAGRMNO");
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "FILLPARTY");
SetOneColumnData(dr, newRow, "SWAPTYPE");
SetOneColumnData(dr, newRow, "STARTDATE");
SetOneColumnData(dr, newRow, "DUEDATE");
SetOneColumnData(dr, newRow, "SETTLEMENTDATE");
SetOneColumnData(dr, newRow, "CURRENCY");
SetOneColumnData(dr, newRow, "NOTIONALPRINCIPLEAMT");
SetOneColumnData(dr, newRow, "CLEARINGAGENCY");
SetOneColumnData(dr, newRow, "TRADINGPLACE");
SetOneColumnData(dr, newRow, "TRADINGPLACEOTHER");
SetOneColumnData(dr, newRow, "UNDRLYGASSETTYPE");
SetOneColumnData(dr, newRow, "CONFIRMATIONREMARK");
SetOneColumnData(dr, newRow, "PERFORMANCEGUARANTEETYPE");
SetOneColumnData(dr, newRow, "PERFORMANCECOLLPROVIDER");
SetOneColumnData(dr, newRow, "PARTYUSECOLL");
SetOneColumnData(dr, newRow, "COLLINSTRUCTION");
SetOneColumnData(dr, newRow, "CALCULATECOLLINTEREST");
SetOneColumnData(dr, newRow, "PERFORMANCECOLLINITIALRATIO");
SetOneColumnData(dr, newRow, "PERFORMANCECOLLADDTLRATIO");
SetOneColumnData(dr, newRow, "PERFORMANCECOLLOFFSETRATIO");
SetOneColumnData(dr, newRow, "MAINTAINGUARANTEERATIO");
SetOneColumnData(dr, newRow, "PERFORMANCEGUARANTEEATT");
SetOneColumnData(dr, newRow, "PERFORMANCEGUARANTEEREMARK");
SetOneColumnData(dr, newRow, "REMARK");
SetOneColumnData(dr, newRow, "COMPLIANCEOPINION");
SetOneColumnData(dr, newRow, "PTYAUNDRLYGASSETNO");
SetOneColumnData(dr, newRow, "PTYAPROFITCALCULATIONINFO");
SetOneColumnData(dr, newRow, "PTYAPROFITREMARK");
SetOneColumnData(dr, newRow, "PTYAPDCTNAME");
SetOneColumnData(dr, newRow, "PTYAPDCTCODE");
SetOneColumnData(dr, newRow, "PTYBPDCTNAME");
SetOneColumnData(dr, newRow, "PTYBPDCTCODE");
SetOneColumnData(dr, newRow, "BLANK1");
SetOneColumnData(dr, newRow, "BLANK2");
SetOneColumnData(dr, newRow, "SUBMIT_STATUS");
SetOneColumnData(dr, newRow, "OPERATIONTYPE");
dtSwapConfirm.Rows.Add(newRow);
LogFactory.GetLogger("CreateSwapConfirmNewRow").Info("退出CreateSwapConfirmNewRow");
}
private DataTable CreateSwapConfirmDataTable()
{
var dtSwapConfirm = new DataTable("交易确认书");
dtSwapConfirm.Columns.Add("MASTERAGRMTNO");
dtSwapConfirm.Columns.Add("SUPAGRMNO");
dtSwapConfirm.Columns.Add("CONFIRMATIONNO");
dtSwapConfirm.Columns.Add("FILLPARTY");
dtSwapConfirm.Columns.Add("SWAPTYPE");
dtSwapConfirm.Columns.Add("STARTDATE");
dtSwapConfirm.Columns.Add("DUEDATE");
dtSwapConfirm.Columns.Add("SETTLEMENTDATE");
dtSwapConfirm.Columns.Add("CURRENCY");
dtSwapConfirm.Columns.Add("NOTIONALPRINCIPLEAMT");
dtSwapConfirm.Columns.Add("CLEARINGAGENCY");
dtSwapConfirm.Columns.Add("TRADINGPLACE");
dtSwapConfirm.Columns.Add("TRADINGPLACEOTHER");
dtSwapConfirm.Columns.Add("UNDRLYGASSETTYPE");
dtSwapConfirm.Columns.Add("CONFIRMATIONREMARK");
dtSwapConfirm.Columns.Add("PERFORMANCEGUARANTEETYPE");
dtSwapConfirm.Columns.Add("PERFORMANCECOLLPROVIDER");
dtSwapConfirm.Columns.Add("PARTYUSECOLL");
dtSwapConfirm.Columns.Add("COLLINSTRUCTION");
dtSwapConfirm.Columns.Add("CALCULATECOLLINTEREST");
dtSwapConfirm.Columns.Add("PERFORMANCECOLLINITIALRATIO");
dtSwapConfirm.Columns.Add("PERFORMANCECOLLADDTLRATIO");
dtSwapConfirm.Columns.Add("PERFORMANCECOLLOFFSETRATIO");
dtSwapConfirm.Columns.Add("MAINTAINGUARANTEERATIO");
dtSwapConfirm.Columns.Add("PERFORMANCEGUARANTEEATT");
dtSwapConfirm.Columns.Add("PERFORMANCEGUARANTEEREMARK");
dtSwapConfirm.Columns.Add("REMARK");
dtSwapConfirm.Columns.Add("COMPLIANCEOPINION");
dtSwapConfirm.Columns.Add("PTYAUNDRLYGASSETNO");
dtSwapConfirm.Columns.Add("PTYAPROFITCALCULATIONINFO");
dtSwapConfirm.Columns.Add("PTYAPROFITREMARK");
dtSwapConfirm.Columns.Add("PTYAPDCTNAME");
dtSwapConfirm.Columns.Add("PTYAPDCTCODE");
dtSwapConfirm.Columns.Add("PTYBPDCTNAME");
dtSwapConfirm.Columns.Add("PTYBPDCTCODE");
dtSwapConfirm.Columns.Add("BLANK1");
dtSwapConfirm.Columns.Add("BLANK2");
dtSwapConfirm.Columns.Add("SUBMIT_STATUS");
dtSwapConfirm.Columns.Add("OPERATIONTYPE");
return dtSwapConfirm;
}
private DataTable CreateSwapCollateralDataTable()
{
var dtSwapPerformanceGuaranteeAtt = new DataTable("履约担保品");
dtSwapPerformanceGuaranteeAtt.Columns.Add("CONFIRMATIONNO");
dtSwapPerformanceGuaranteeAtt.Columns.Add("PERFORMANCECOLLTYPE");
dtSwapPerformanceGuaranteeAtt.Columns.Add("PERFORMANCECOLLRANGE");
dtSwapPerformanceGuaranteeAtt.Columns.Add("MULTICONFIRMATIONID");
dtSwapPerformanceGuaranteeAtt.Columns.Add("REMARKS");
return dtSwapPerformanceGuaranteeAtt;
}
private DataTable CreatePaymentMethodDataTable()
{
var dtPaymentMethod = new DataTable("费用端支付");
dtPaymentMethod.Columns.Add("CONFIRMATIONNO");
dtPaymentMethod.Columns.Add("PAYMENTMETHOD");
dtPaymentMethod.Columns.Add("PAYER");
dtPaymentMethod.Columns.Add("PAYMENTFREQ");
dtPaymentMethod.Columns.Add("FIXEDINTERESTRATE");
dtPaymentMethod.Columns.Add("FLOATINTERESTRATE");
dtPaymentMethod.Columns.Add("REFFLOATINGINTERESTRATE");
dtPaymentMethod.Columns.Add("BASEPOINT");
dtPaymentMethod.Columns.Add("BLANK1");
dtPaymentMethod.Columns.Add("BLANK2");
return dtPaymentMethod;
}
#endregion
#region 互换终止视图数据读取
/// <summary>
/// 互换终止数据读取
/// </summary>
/// <param name="db"></param>
/// <param name="reportDate"></param>
private void GetSwapLifeCycle(DbHelper db, DateTime reportDate)
{
try
{
string schema = PS.Config.ErpElement.KingstarViewTableSchema.IsNullOrWhiteSpace() ? "" : $"\"{PS.Config.ErpElement.KingstarViewTableSchema}\".";
LogFactory.GetLogger("GetSwapLifeCycle").Info("进入GetSwapLifeCycle");
var dtSwapLifeCycle = CreateSwapLifeCycleDataTable();
var dtSwapLifeCyclePosDt = CreateSwapLifeCyclePosDtDataTable();
LogFactory.GetLogger("GetSwapLifeCycle").Info("创建完2个DataTable结构");
var sqlStr = new StringBuilder();
sqlStr.Append("SELECT lifecycle.* ");
sqlStr.Append($" FROM {schema}v_swap_lifecycle_A1006 lifecycle ");
sqlStr.Append("WHERE lifecycle.SUBMIT_STATUS = 0 ");
sqlStr.Append($" AND lifecycle.OPERATIONTYPE = '{_operationType.ToString()}' AND lifecycle.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");
LogFactory.GetLogger("GetSwapLifeCycle").Info($"sqlStr:{sqlStr}");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapLifeCycle ExecuteSql").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapLifeCycle ExecuteSql").Error(ex);
}
CreateSwapLifeCycleNewRow(dtSwapLifeCycle, dr);
});
sqlStr.Clear();
sqlStr.Append("SELECT posdt.* ");
sqlStr.Append($" FROM {schema}v_swap_lifecycle_pos_dt_A1006 posdt ");
sqlStr.Append($"WHERE posdt.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");
LogFactory.GetLogger("GetSwapLifeCycle").Info($"sqlStr:{sqlStr}");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapLifeCycle ExecuteSql").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapLifeCycle ExecuteSql").Error(ex);
}
CreateSwapLifeCyclePosDtNewRow(dtSwapLifeCyclePosDt, dr);
});
LogFactory.GetLogger("GetSwapLifeCycle").Info("dtSwapLifeCycle Data:" + dtSwapLifeCycle.ToStringContent());
_viewDataSource.Tables.Add(dtSwapLifeCycle);
LogFactory.GetLogger("GetSwapLifeCycle").Info("dtSwapLifeCyclePosDt Data:" + dtSwapLifeCyclePosDt.ToStringContent());
_viewDataSource.Tables.Add(dtSwapLifeCyclePosDt);
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapLifeCycle").Error(ex, "出现异常");
}
}
private void CreateSwapLifeCycleNewRow(DataTable dtSwapLifeCycle, OracleDataReader dr)
{
var confirmationNo = GetDataReaderValue(dr, "CONFIRMATIONNO");
var rows = dtSwapLifeCycle.Select("CONFIRMATIONNO='" + confirmationNo + "'");
if (rows != null && rows.Count() > 0) return;//存在了就不用再加了
var newRow = dtSwapLifeCycle.NewRow();
SetOneColumnData(dr, newRow, "BIZID");
SetOneColumnData(dr, newRow, "GUID");
SetOneColumnData(dr, newRow, "DURATIONEVENTNO");
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "DURATIONOPERATIONTYPE");
SetOneColumnData(dr, newRow, "DURATIONOPERATIONDATE");
SetOneColumnData(dr, newRow, "RENEWALDATE");
SetOneColumnData(dr, newRow, "DEFAULTINGPARTY");
SetOneColumnData(dr, newRow, "DEFAULTEVENT");
SetOneColumnData(dr, newRow, "CHANGEAMOUNT");
SetOneColumnData(dr, newRow, "BALANCE");
SetOneColumnData(dr, newRow, "AMOUNTPAIDTHISTIME");
SetOneColumnData(dr, newRow, "MARGINRATIO");
//SetOneColumnData(dr, newRow, "CURRENTPOSITIONDETAILS");
SetOneColumnData(dr, newRow, "SWAPDURATIONMANAGEMENTATT");
SetOneColumnData(dr, newRow, "BLANK1");
SetOneColumnData(dr, newRow, "BLANK2");
SetOneColumnData(dr, newRow, "SUBMIT_STATUS");
SetOneColumnData(dr, newRow, "OPERATIONTYPE");
SetOneColumnData(dr, newRow, "BUSIDATE");
dtSwapLifeCycle.Rows.Add(newRow);
}
private void CreateSwapLifeCyclePosDtNewRow(DataTable dtSwapLifeCyclePosDt, OracleDataReader dr)
{
var newRow = dtSwapLifeCyclePosDt.NewRow();
SetOneColumnData(dr, newRow, "GUID", "GUID");
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "BUSIDATE");
//SetOneColumnData(dr, newRow, "DURATIONOPERATIONTYPE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETCODE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETDTLDTYPE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETNAME");
SetOneColumnData(dr, newRow, "UNDRLYGASSETTRADEPLACE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETPRICE");
SetOneColumnData(dr, newRow, "INVESTORPOSITION");
SetOneColumnData(dr, newRow, "UNDRLYGASSETAMT");
SetOneColumnData(dr, newRow, "CONTRACTMULTIPLIER");
SetOneColumnData(dr, newRow, "NOTINALPRINCIPLEAMT");
SetOneColumnData(dr, newRow, "BLANK1", "BLANK1");
SetOneColumnData(dr, newRow, "BLANK2", "BLANK2");
SetOneColumnData(dr, newRow, "DURATIONEVENTNO", "DURATIONEVENTNO");
dtSwapLifeCyclePosDt.Rows.Add(newRow);
}
private DataTable CreateSwapLifeCycleDataTable()
{
var dtSwapLifeCycle = new DataTable("互换交易存续期管理");
dtSwapLifeCycle.Columns.Add("BIZID");
dtSwapLifeCycle.Columns.Add("GUID");
dtSwapLifeCycle.Columns.Add("DURATIONEVENTNO");
dtSwapLifeCycle.Columns.Add("CONFIRMATIONNO");
dtSwapLifeCycle.Columns.Add("DURATIONOPERATIONTYPE");
dtSwapLifeCycle.Columns.Add("DURATIONOPERATIONDATE");
dtSwapLifeCycle.Columns.Add("RENEWALDATE");
dtSwapLifeCycle.Columns.Add("DEFAULTINGPARTY");
dtSwapLifeCycle.Columns.Add("DEFAULTEVENT");
dtSwapLifeCycle.Columns.Add("CHANGEAMOUNT");
dtSwapLifeCycle.Columns.Add("BALANCE");
dtSwapLifeCycle.Columns.Add("AMOUNTPAIDTHISTIME");
dtSwapLifeCycle.Columns.Add("MARGINRATIO");
//dtSwapLifeCycle.Columns.Add("CURRENTPOSITIONDETAILS");
dtSwapLifeCycle.Columns.Add("SWAPDURATIONMANAGEMENTATT");
dtSwapLifeCycle.Columns.Add("BLANK1");
dtSwapLifeCycle.Columns.Add("BLANK2");
dtSwapLifeCycle.Columns.Add("SUBMIT_STATUS");
dtSwapLifeCycle.Columns.Add("OPERATIONTYPE");
dtSwapLifeCycle.Columns.Add("BUSIDATE");
return dtSwapLifeCycle;
}
private DataTable CreateSwapLifeCyclePosDtDataTable()
{
var dtSwapLifeCyclePosDt = new DataTable("合约持仓明细");
dtSwapLifeCyclePosDt.Columns.Add("GUID");
dtSwapLifeCyclePosDt.Columns.Add("CONFIRMATIONNO");
dtSwapLifeCyclePosDt.Columns.Add("BUSIDATE");
//dtSwapLifeCycle.Columns.Add("DURATIONOPERATIONTYPE");
dtSwapLifeCyclePosDt.Columns.Add("UNDRLYGASSETCODE");
dtSwapLifeCyclePosDt.Columns.Add("UNDRLYGASSETDTLDTYPE");
dtSwapLifeCyclePosDt.Columns.Add("UNDRLYGASSETNAME");
dtSwapLifeCyclePosDt.Columns.Add("UNDRLYGASSETTRADEPLACE");
dtSwapLifeCyclePosDt.Columns.Add("UNDRLYGASSETPRICE");
dtSwapLifeCyclePosDt.Columns.Add("INVESTORPOSITION");
dtSwapLifeCyclePosDt.Columns.Add("UNDRLYGASSETAMT");
dtSwapLifeCyclePosDt.Columns.Add("CONTRACTMULTIPLIER");
dtSwapLifeCyclePosDt.Columns.Add("NOTINALPRINCIPLEAMT");
dtSwapLifeCyclePosDt.Columns.Add("BLANK1");
dtSwapLifeCyclePosDt.Columns.Add("BLANK2");
dtSwapLifeCyclePosDt.Columns.Add("DURATIONEVENTNO");
return dtSwapLifeCyclePosDt;
}
#endregion
#region 收益互换交易权益端支付视图数据读取
/// <summary>
///
///收益互换交易权益端支付
/// </summary>
/// <param name="db"></param>
/// <param name="reportDate"></param>
private void GetSwapequityPayment(DbHelper db, DateTime reportDate)
{
try
{
string schema = PS.Config.ErpElement.KingstarViewTableSchema.IsNullOrWhiteSpace() ? "" : $"\"{PS.Config.ErpElement.KingstarViewTableSchema}\".";
LogFactory.GetLogger("GetSwapequityPayment").Info("进入GetSwapequityPayment");
var dtSwapEquityPayment = CreateSwapEquityPaymentDataTable();
var dtSwapEquityPaymentTP = CreateSwapEquityPaymentTPDataTable();
LogFactory.GetLogger("GetSwapequityPayment").Info("创建完2个DataTable结构");
var sqlStr = new StringBuilder();
sqlStr.Append("SELECT quitypayment.* ");
sqlStr.Append($"FROM {schema}v_swap_equity_payment_A1016 quitypayment ");
sqlStr.Append("WHERE quitypayment.SUBMIT_STATUS = 0 ");
sqlStr.Append($" AND quitypayment.OPERATIONTYPE = '{_operationType.ToString()}' AND quitypayment.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");//一对多分组
LogFactory.GetLogger("GetSwapequityPayment").Info($"sqlStr:{sqlStr}");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapequityPayment ExecuteSql").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapequityPayment ExecuteSql").Error(ex);
}
CreateSwapEquityPaymentNewRow(dtSwapEquityPayment, dr);
});
sqlStr.Clear();
sqlStr.Append("SELECT equityaymenttp.* ");
sqlStr.Append($"FROM {schema}v_swap_equity_payment_tp_A1016 equityaymenttp ");
sqlStr.Append($"WHERE equityaymenttp.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");//一对多分组
LogFactory.GetLogger("GetSwapequityPayment").Info($"sqlStr:{sqlStr}");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapequityPayment ExecuteSql").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapequityPayment ExecuteSql").Error(ex);
}
CreateSwapEquityPaymentPtNewRow(dtSwapEquityPaymentTP, dr);
});
LogFactory.GetLogger("GetSwapequityPayment").Info("dtSwapEquityPayment Data:" + dtSwapEquityPayment.ToStringContent());
_viewDataSource.Tables.Add(dtSwapEquityPayment);
LogFactory.GetLogger("GetSwapequityPayment").Info("dtSwapEquityPaymentTP Data:" + dtSwapEquityPaymentTP.ToStringContent());
_viewDataSource.Tables.Add(dtSwapEquityPaymentTP);
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapequityPayment").Error(ex, "出现异常");
}
}
private void CreateSwapEquityPaymentPtNewRow(DataTable dtSwapEquityPaymentPt, OracleDataReader dr)
{
var newRow = dtSwapEquityPaymentPt.NewRow();
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "BUSIDATE");
SetOneColumnData(dr, newRow, "PAYMENTMETHOD");
SetOneColumnData(dr, newRow, "PAYER");
SetOneColumnData(dr, newRow, "PAYMENTFREQ");
SetOneColumnData(dr, newRow, "OPENANDCLOSINGDATE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETDTLDTYPE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETCODE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETNAME");
SetOneColumnData(dr, newRow, "UNDRLYGASSETTRADEPLC");
SetOneColumnData(dr, newRow, "UNDRLYGASSETPRICE");
SetOneColumnData(dr, newRow, "UNDRLYGASSETPOSITION");
SetOneColumnData(dr, newRow, "UNDRLYGASSETAMT");
SetOneColumnData(dr, newRow, "CONTRACTMULTIPLIER");
SetOneColumnData(dr, newRow, "LNOTINALPRINCIPLEAMT");
SetOneColumnData(dr, newRow, "SNOTINALPRINCIPLEAMT");
SetOneColumnData(dr, newRow, "INTERESTRATE");
SetOneColumnData(dr, newRow, "BLANK1");
SetOneColumnData(dr, newRow, "BLANK2");
SetOneColumnData(dr, newRow, "DURATIONEVENTNO");
dtSwapEquityPaymentPt.Rows.Add(newRow);
}
private void CreateSwapEquityPaymentNewRow(DataTable dtSwapEquityPayment, OracleDataReader dr)
{
var confirmationNo = GetDataReaderValue(dr, "CONFIRMATIONNO");
var rows = dtSwapEquityPayment.Select("CONFIRMATIONNO='" + confirmationNo + "'");
if (rows != null && rows.Count() > 0) return;//存在了就不用再加了
var newRow = dtSwapEquityPayment.NewRow();
SetOneColumnData(dr, newRow, "BIZID");
SetOneColumnData(dr, newRow, "BUSIDATE");
SetOneColumnData(dr, newRow, "DURATIONEVENTNO", "DURATIONEVENTNO");
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "BLANK1", "BLANK1");
SetOneColumnData(dr, newRow, "BLANK2", "BLANK2");
SetOneColumnData(dr, newRow, "SUBMIT_STATUS");
SetOneColumnData(dr, newRow, "OPERATIONTYPE");
dtSwapEquityPayment.Rows.Add(newRow);
}
private DataTable CreateSwapEquityPaymentTPDataTable()
{
var dtSwapEquityPaymentPt = new DataTable("权益端支付");
dtSwapEquityPaymentPt.Columns.Add("CONFIRMATIONNO");
dtSwapEquityPaymentPt.Columns.Add("BUSIDATE");
dtSwapEquityPaymentPt.Columns.Add("PAYMENTMETHOD");
dtSwapEquityPaymentPt.Columns.Add("PAYER");
dtSwapEquityPaymentPt.Columns.Add("PAYMENTFREQ");
dtSwapEquityPaymentPt.Columns.Add("OPENANDCLOSINGDATE");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETDTLDTYPE");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETCODE");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETNAME");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETTRADEPLC");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETPRICE");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETPOSITION");
dtSwapEquityPaymentPt.Columns.Add("UNDRLYGASSETAMT");
dtSwapEquityPaymentPt.Columns.Add("CONTRACTMULTIPLIER");
dtSwapEquityPaymentPt.Columns.Add("LNOTINALPRINCIPLEAMT");
dtSwapEquityPaymentPt.Columns.Add("SNOTINALPRINCIPLEAMT");
dtSwapEquityPaymentPt.Columns.Add("INTERESTRATE");
dtSwapEquityPaymentPt.Columns.Add("BLANK1");
dtSwapEquityPaymentPt.Columns.Add("BLANK2");
dtSwapEquityPaymentPt.Columns.Add("DURATIONEVENTNO");
return dtSwapEquityPaymentPt;
}
private DataTable CreateSwapEquityPaymentDataTable()
{
var dtSwapEquityPayment = new DataTable("互换交易权益端支付");
dtSwapEquityPayment.Columns.Add("BIZID");
dtSwapEquityPayment.Columns.Add("BUSIDATE");
dtSwapEquityPayment.Columns.Add("CONFIRMATIONNO");
dtSwapEquityPayment.Columns.Add("DURATIONEVENTNO");
dtSwapEquityPayment.Columns.Add("SUBMIT_STATUS");
dtSwapEquityPayment.Columns.Add("OPERATIONTYPE");
dtSwapEquityPayment.Columns.Add("BLANK1");
dtSwapEquityPayment.Columns.Add("BLANK2");
return dtSwapEquityPayment;
}
#endregion
#region 交易确认书附件视图数据读取
/// <summary>
/// 交易确认书附件视图数据读取
/// </summary>
/// <param name="db"></param>
/// <param name="reportDate"></param>
private void GetSwapConfirmationAtt(DbHelper db, DateTime reportDate)
{
try
{
string schema = PS.Config.ErpElement.KingstarViewTableSchema.IsNullOrWhiteSpace() ? "" : $"\"{PS.Config.ErpElement.KingstarViewTableSchema}\".";
LogFactory.GetLogger("GetSwapConfirmationAtt").Info("进入GetSwapConfirmationAtt");
var dtSwapConfirmationAtt = CreateSwapConfirmationAttDataTable();
LogFactory.GetLogger("GetSwapConfirmationAtt").Info("创建完1个DataTable结构");
var sqlStr = new StringBuilder();
sqlStr.Append($"SELECT * FROM {schema}v_confirmationatt_A1017 confirmationatt ");
sqlStr.Append($"WHERE confirmationatt.SUBMIT_STATUS = 0 AND confirmationatt.OPERATIONTYPE='{_operationType.ToString()}' AND confirmationatt.BUSIDATE='{reportDate.ToString("yyyy-MM-dd")}'");
LogFactory.GetLogger("GetSwapConfirmationAtt").Info($"sqlStr:{sqlStr}");
db.ExecuteSql(sqlStr.ToString(), dr =>
{
try
{
LogFactory.GetLogger("GetSwapConfirmationAtt ExecuteSql").Info("RowData:" + dr.ToStringContent());
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapConfirmationAtt ExecuteSql").Error(ex);
}
CreatConfirmationAttNewRow(dtSwapConfirmationAtt, dr);
});
LogFactory.GetLogger("GetSwapConfirmationAtt").Info("dtSwapConfirmationAtt Data:" + dtSwapConfirmationAtt.ToStringContent());
_viewDataSource.Tables.Add(dtSwapConfirmationAtt);
}
catch (Exception ex)
{
LogFactory.GetLogger("GetSwapConfirmationAtt").Error(ex, "出现异常");
}
}
private void CreatConfirmationAttNewRow(DataTable dtConfirmationAtt, OracleDataReader dr)
{
var newRow = dtConfirmationAtt.NewRow();
SetOneColumnData(dr, newRow, "BIZID");
SetOneColumnData(dr, newRow, "BUSIDATE");
SetOneColumnData(dr, newRow, "CONFIRMATIONNO");
SetOneColumnData(dr, newRow, "CONFIRMATIONFILES");
SetOneColumnData(dr, newRow, "SUBMIT_STATUS");
SetOneColumnData(dr, newRow, "OPERATIONTYPE");
dtConfirmationAtt.Rows.Add(newRow);
}
private DataTable CreateSwapConfirmationAttDataTable()
{
var dtSwapLifeCycle = new DataTable("交易确认书附件");
dtSwapLifeCycle.Columns.Add("BIZID");
dtSwapLifeCycle.Columns.Add("BUSIDATE");
dtSwapLifeCycle.Columns.Add("CONFIRMATIONNO");
dtSwapLifeCycle.Columns.Add("CONFIRMATIONFILES");
dtSwapLifeCycle.Columns.Add("SUBMIT_STATUS");
dtSwapLifeCycle.Columns.Add("OPERATIONTYPE");
return dtSwapLifeCycle;
}
#endregion
protected List<T> loadSubsystemDataSource<T>(List<string> fileList, Func<T, List<string>, string, bool> callback) where T : ReportBaseModel
{
LogFactory.GetLogger("loadSubsystemDataSource").Info($"开始执行");
var list = new List<T>();
var subSystemOutboxPath = PS.Config.ErpElement.SAC_SubSystemOutboxPath;
LogFactory.GetLogger("loadSubsystemDataSource").Info($"subSystemOutboxPath" + subSystemOutboxPath);
if (string.IsNullOrEmpty(subSystemOutboxPath) || !Directory.Exists(subSystemOutboxPath)) return list;
LogFactory.GetLogger("loadSubsystemDataSource").Info($"开始执行1");
var dateDir = _reqInfo.ReportDate.ToString("yyyyMMdd");
//获取子系统发件箱目录里所有zip压缩文件
var folder = new DirectoryInfo(subSystemOutboxPath);
var files = folder.GetFiles("*.zip");
LogFactory.GetLogger("loadSubsystemDataSource").Info($"zip文件个数:" + files.Count());
if (files == null || files.Count() == 0) return list;
foreach (var file in files)
{
LogFactory.GetLogger("loadSubsystemDataSource").Info($"2");
//zip压缩文件名包含报送日期才需要读取解析
if (!file.Name.Contains("_" + dateDir + "_")) continue;
LogFactory.GetLogger("loadSubsystemDataSource").Info($"3");
//获取文件不包含扩展名的文件名
var tag = Path.GetFileNameWithoutExtension(file.FullName);
//待解压的包含路径的完整文件名
var targetName = Path.Combine(subSystemOutboxPath, file.Name);
LogFactory.GetLogger("loadSubsystemDataSource").Info($"targetName" + targetName);
//解压后文件的根目录
var fileDir = Path.Combine(subSystemOutboxPath, tag);
//注意解压后会自动创建压缩文件名对应的文件夹,就在子系统发件箱目录下建立解压文件夹
var tDir = subSystemOutboxPath;
//不存在才解压
var msg = "";
//解压
if (!Directory.Exists(fileDir))
{
ZipHelper.unZipFile(targetName, tDir, out msg);
LogFactory.GetLogger("loadSubsystemDataSource").Info($"解压成功:targetName:" + targetName + ",tDir:" + tDir);
}
LogFactory.GetLogger("loadSubsystemDataSource").Info($"4");
//存在说明已经解压过了
//解压后文件的附件根目录
var fileAttachmentDir = Path.Combine(subSystemOutboxPath, tag, "ATTACHMENT");
//获取解压文件夹下的所有xml报告文件
var reportFolder = new DirectoryInfo(fileDir);
//当前报告类型的业务才去解析获取数据,即只获取当前业务类型的数据,通过文件名判断
//如OTC_134083_000899_20220629_0001_A1001_A.xml
var matchBusiTypeTag = $"*{BusiDataType}_{_operationType}*";
var reportFiles = reportFolder.GetFiles(matchBusiTypeTag);
//遍历每个xml报告文件
LogFactory.GetLogger("loadSubsystemDataSource").Info($"reportFilesCount:" + reportFiles.Count());
foreach (var reportFile in reportFiles)
{
LogFactory.GetLogger("loadSubsystemDataSource").Info($"6:");
//读取xml文件,并反序列化成对象
var xml = File.ReadAllText(reportFile.FullName);
var model = XmlHelper.Deserialize<ReportRootModel>(xml);
if (model.Body == null) continue;
//记录xml报告文件,等读取完后,需要删掉
xmlAttachmentList.Add(reportFile.FullName);
//根据不同报送业务类型,加载数据
switch (Enum.Parse(typeof(DataFlagsEnum), model.Header.BusiDataType.ToString()))
{
case DataFlagsEnum.A1001:
foreach (var x in model.Body.MasterAgrmt)
{
//子系统的数据忽略字段检查
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1002:
foreach (var x in model.Body.MasterAgrmtProduct)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1003:
foreach (var x in model.Body.SupAgrmt)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1008:
foreach (var x in model.Body.PerformanceGuaranteeAgrmt)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1004:
foreach (var x in model.Body.OptionConfirmation)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1005:
foreach (var x in model.Body.SwapConfirmation)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1007:
foreach (var x in model.Body.OptionTermination)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1006:
foreach (var x in model.Body.SwapDurationManagement)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1016:
foreach (var x in model.Body.SwapEquityPayment)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
case DataFlagsEnum.A1017:
foreach (var x in model.Body.ConfirmationAtt)
{
x.OperationType = (OptFlagsEnum)Enum.Parse(typeof(OptFlagsEnum), model.Header.OperationType, true);
//子系统的数据忽略字段检查
x.IgnoreCheck = true;
//通过调用委托返回业务的附件文件名数据
var flist = new List<string>();
//调用委托构造notes数据
var ret = callback(x as T, flist, tag);
if (!ret) continue;
//把返回的附件文件名加上完整路径添加到附件集合待后边删除
flist.ForEach(attchment =>
{
var path = Path.Combine(fileAttachmentDir, attchment);
//把附件添加到报告附件列表,为了生成报告
fileList.Add(path);
//把附件添加到附件列表中,以便后边删除
xmlAttachmentList.Add(path);
});
//添加数据到数据集合当中
list.Add(x as T);
};
break;
default:
break;
}
}
}
return list;
}
/// <summary>
/// 生成ExceID
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
protected string formatExceID()
{
var exceId = "";
do
{
exceId = $"{_reqInfo.SenderCode}{_reqInfo.ReceiverCode}{_reqInfo.ReportDate.ToString("yyyyMMdd")}{MaxExceIndex.ToString("00000000")}";
MaxExceIndex = MaxExceIndex + 1;
} while (DbContext.sac_report_notes.Any(O => O.ExceId == exceId));
return exceId;
}
/// <summary>
/// 获取指定日期所在的季度以及季度起始日
/// <para>返回"01","02","03","04"</para>
/// </summary>
/// <param name="valueDate"></param>
/// <param name="minDate"></param>
/// <param name="maxDate"></param>
/// <returns></returns>
public static string GetQuarterRange(DateTime valueDate, out DateTime minDate, out DateTime maxDate)
{
var quarter = (((valueDate.Month - 1) / 3) + 1).ToString("00");
if (valueDate.Day == 15)
{
quarter = "05";
}
switch (quarter)
{
case "01":
minDate = new DateTime(valueDate.Year, 01, 01);
maxDate = new DateTime(valueDate.Year, 03, 31);
break;
case "02":
minDate = new DateTime(valueDate.Year, 04, 01);
maxDate = new DateTime(valueDate.Year, 06, 30);
break;
case "03":
minDate = new DateTime(valueDate.Year, 07, 01);
maxDate = new DateTime(valueDate.Year, 09, 30);
break;
case "04":
minDate = new DateTime(valueDate.Year, 10, 01);
maxDate = new DateTime(valueDate.Year, 12, 31);
break;
case "05":
if (valueDate.Month < 6)
{
minDate = new DateTime(valueDate.Year, 01, 01);
maxDate = new DateTime(valueDate.Year, 06, 30);
}
else
{
minDate = new DateTime(valueDate.Year, 07, 01);
maxDate = new DateTime(valueDate.Year, 12, 31);
}
break;
default:
throw new ServiceException("未知日期");
}
return quarter;
}
protected string ViewLocalAttFileDir
{
get
{
return PS.Config.ErpElement.KingstarView_LocalViewAttDir;
}
}
protected string CreateViewAttDownloadPath(string viewAttFileName)
{
//var configPath = "/usr/local/minio/kingstar";//
var configPath = PS.Config.ErpElement.KingstarView_RemoteFileRootPath;
var path = $"{configPath}/data/{viewAttFileName}";
return path;
}
}
}