using YLErp.Commons; using YLErp.DBModels.Consts; using YLErp.Model; namespace YLErp.BLL.GenerateDocument { public abstract class BatchGenerateDocs { protected YLContext db = new YLContext(); private static Dictionary tradeTypeDic; private static Dictionary contractTypeDic; static BatchGenerateDocs() { tradeTypeDic = new Dictionary { {"香草期权","" }, {"亚式期权","Asian" }, {"价差期权","Spread" } }; contractTypeDic = new Dictionary { {ContractTypeEnum.Trade,"GenerateConfirmBook" }, {ContractTypeEnum.AdditionalTrade,"GenerateAdditionalConfirmBook" }, {ContractTypeEnum.Clearing,"GenerateSettleBill" }, {ContractTypeEnum.UnWind,"GenerateUnwindReport" } }; } protected BatchGenerateDocs() { } protected BatchGenerateDocs(List tradeIds, string docType, int optId, string optName, List tradeCashIds) { TradeIdList = tradeIds; DocType = docType; OptId = optId; OptName = optName; } public List TradeIdList { get; set; } public string DocType { get; set; } public int OptId { get; set; } public string OptName { get; set; } protected virtual string ContractType { get; } public abstract List GetDatas(); public virtual ReturnInfo> GenerateBooks() { var tradeList = GetDatas(); if (tradeList.Count == 0) { return Return.Fail>("没有相关的交易!"); } var fileList = new List(); var errorList = new List(); foreach (var tradeContractGroup in tradeList) { if (tradeContractGroup.trade_cash == null) { errorList.Add($"{tradeContractGroup.trade.TradeNumber}生成失败,因为该交易没有现金交割记录"); continue; } var baseGenerate = GetGenerateInstance(tradeContractGroup); var returnInfo = baseGenerate.GenerateBook(); if (!returnInfo.Success) { errorList.Add($"{tradeContractGroup.trade.TradeNumber}生成失败,因为{returnInfo.Msg}"); continue; } fileList.Add(returnInfo.Content); } if (errorList.Count > 0) { return Return.Fail(string.Join("\r\n", errorList), fileList); } return Return.Success(fileList); } //protected virtual string GetContractType(trade_contract_group tradeContractGroup) //{ // return ContractTypeEnum; //} protected BaseGenerate GetGenerateInstance(trade_contract_group tradeContractGroup) { string tradeTypeClass; var tradeType = tradeContractGroup.trade.TradeType; if (tradeType == "结构化交易" && tradeContractGroup.trade.StructureType.IndexOf("价差") > -1) { tradeType = "价差期权"; } if (!tradeTypeDic.TryGetValue(tradeType, out tradeTypeClass)) { tradeTypeClass = ""; } string className; if (!contractTypeDic.TryGetValue(ContractType, out className)) { className = "GenerateConfirmBook"; } #region 按照优先级,选择可以使用的类 var typeFullName = $"YLErp.BLL.GenerateDocument.{PS.Config.CompanyAbbreviation}.{tradeTypeClass}{className}"; var type = Type.GetType(typeFullName, false, true); if (type == null) { typeFullName = $"YLErp.BLL.GenerateDocument.{PS.Config.CompanyAbbreviation}.{className}"; type = Type.GetType(typeFullName, false, true); } if (type == null) { typeFullName = $"YLErp.BLL.GenerateDocument.{tradeTypeClass}General{className}"; type = Type.GetType(typeFullName, false, true); } if (type == null) { typeFullName = $"YLErp.BLL.GenerateDocument.General{className}"; type = Type.GetType(typeFullName, false, true); } #endregion if (type == null) { throw new ServiceException("此功能暂不支持"); } return Activator.CreateInstance(type, tradeContractGroup, DocType, OptId, OptName) as BaseGenerate; } } }