using YLErp.DBModels.Consts; using YLErp.Modules.TradeDalModule; using YLErp.Plugins.TradeDocGenerator.Abstracts; namespace YLErp.Modules.TradeModule.DocGenerateModule { public class BatchTradeDocGeneratorContext : YLBaseService, IBatchTradeDocGeneratorContext { public string ContractType { get; set; } public Client Broker { get; set; } public ServiceRepresentativeConfig Spc0 { get; set; } public valuedate Valuedate { get; set; } public string TemplateDir { get; set; } public BatchTradeDocGeneratorContext(string contractType, OptUserInfo userInfo, Client broker, ServiceRepresentativeConfig spc0, valuedate valuedate, string templateDir) : base(userInfo) { ContractType = contractType ?? throw new ArgumentNullException(nameof(contractType)); Broker = broker; Spc0 = spc0; Valuedate = valuedate; TemplateDir = templateDir; } public ITradeConfirmationGeneratotContext CreateContext(OtcTradeBase trade, int tradeCashId) { return new ConfirmationGenerateContext(tradeCashId, (trade)trade, ContractType, OptUser); } public IEnumerable GetContractRs(IEnumerable tradeIds) { return DbContext.trade_contract_r.Where(t => tradeIds.Contains(t.TradeId) && t.Type == ContractTypeEnum.Trade && t.IsValid).ToList(); } public files_template GetFilesTemplate(string contractVersion) { return DbContext.files_template.FirstOrDefault(x => x.Code == contractVersion); } public void SaveData(string fileName, string tradeCodePrefix, string outPath, string contractVersion, IList trades) { trade_contract_document contractRecord = DbContext.trade_contract_document.FirstOrDefault(x => x.Code == tradeCodePrefix && x.Type == ContractTypeEnum.Trade); if (contractRecord == null) { contractRecord = new trade_contract_document(); DbContext.trade_contract_document.Add(contractRecord); } contractRecord.Code = tradeCodePrefix; contractRecord.ValueDate = Valuedate.ValueDate; contractRecord.BuyerId = trades[0].BuySell == "买入" ? Broker.id : trades[0].ClientId; contractRecord.BuyerName = trades[0].BuySell == "买入" ? Broker.Name : trades[0].ClientName; contractRecord.SellerId = trades[0].BuySell == "卖出" ? Broker.id : trades[0].ClientId; contractRecord.SellerName = trades[0].BuySell == "卖出" ? Broker.Name : trades[0].ClientName; contractRecord.ContractVersion = contractVersion; contractRecord.FileType = FileTypeEnum.Pdf; contractRecord.Status = ContractStatusEnum.Draft; contractRecord.Paths = outPath; contractRecord.FileName = outPath.Replace(".xlsx", ".pdf"); contractRecord.Type = ContractTypeEnum.Trade; contractRecord.OptId = UserId; contractRecord.OptName = UserName; contractRecord.OptDate = DateTime.Now; var tradeIds = trades.Select(x => x.id).ToList(); //var childs = DbContext.trade.Where(x => tradeIds.Contains(x.ParentTradeId ?? 0)); TradeDalService service = new TradeDalService(this); var childs = service.GetStructTradeFromTradeOrEodTrade(tradeIds, SystemValueDate, true); foreach (var trade in trades) { trade_contract_r contractTradeRelation = DbContext.trade_contract_r.Where(t => t.Type == ContractTypeEnum.Trade && t.IsValid).FirstOrDefault(x => x.TradeId == trade.id); if (contractTradeRelation == null) { contractTradeRelation = new trade_contract_r(); DbContext.trade_contract_r.Add(contractTradeRelation); } contractTradeRelation.TradeId = trade.id; contractTradeRelation.TradeNumber = trade.TradeNumber; contractTradeRelation.ContractCode = tradeCodePrefix; contractTradeRelation.OptId = UserId; contractTradeRelation.OptName = UserName; contractTradeRelation.OptDate = DateTime.Now; contractTradeRelation.Type = ContractTypeEnum.Trade; contractTradeRelation.IsValid = true; //var td = DbContext.trade.Find(trade.id); //var td = service.GetTradeOrEodTrade(new[] { trade.id }, ValueDate, true).FirstOrDefault(); //var childTds = childs.Where(x => x.ParentTradeId == td.id); //if (td != null) //{ // td.HasGeneratedConfirmBook = 1; // foreach (var child in childTds) // { // child.HasGeneratedConfirmBook = 1; // } //} } DbContext.SaveChanges(); } } }