diff --git a/YLErpDAL/Modules/TradeModule/TradeOAService.cs b/YLErpDAL/Modules/TradeModule/TradeOAService.cs index c4ef8091..56d10753 100644 --- a/YLErpDAL/Modules/TradeModule/TradeOAService.cs +++ b/YLErpDAL/Modules/TradeModule/TradeOAService.cs @@ -37,19 +37,19 @@ namespace YLErp.Modules.TradeModule try { // 获取交易信息 - var trade = DbContext.trade.FirstOrDefault(x=>x.id==tradeId); + var trade = DbContext.trade.FirstOrDefault(x => x.id == tradeId); if (trade == null) { - return new TradeOAResult {TradeId=tradeId, Success = false, Message = "未找到交易信息" }; + return new TradeOAResult { TradeId = tradeId, Success = false, Message = "未找到交易信息" }; } // 获取交易确认书信息 - var tcr = DbContext.trade_contract_r.Where(t => t.Type == ContractTypeEnum.Trade && t.IsValid&&t.TradeId==tradeId) + var tcr = DbContext.trade_contract_r.Where(t => t.Type == ContractTypeEnum.Trade && t.IsValid && t.TradeId == tradeId) .FirstOrDefault(); trade_contract_document tdoc = null; - if (tcr!=null) + if (tcr != null) { - tdoc = DbContext.trade_contract_document.Where(t => t.Code == tcr.ContractCode&&t.Type==tcr.Type).FirstOrDefault(); + tdoc = DbContext.trade_contract_document.Where(t => t.Code == tcr.ContractCode && t.Type == tcr.Type).FirstOrDefault(); } // 将之前的OA记录设置为无效 @@ -60,7 +60,7 @@ namespace YLErp.Modules.TradeModule existingResult.SetOpt(UserInfo); } - + // 创建OA结果记录 var oaResult = new trade_contract_oa_result { @@ -72,10 +72,10 @@ namespace YLErp.Modules.TradeModule oaResult.SetOpt(UserInfo); DbContext.tradeContractOaResult.Add(oaResult); await DbContext.SaveChangesAsync(); - + // 调用OA接口 var oaResp = await CallOAInterfaceAsync(trade, tcr?.ContractCode, tdoc, oaResult.id); - if (oaResp != null&& oaResp.success) + if (oaResp != null && oaResp.success) { oaResult.status = "提交成功"; oaResult.oa_fileid = oaResp.data?.fileid; @@ -88,8 +88,8 @@ namespace YLErp.Modules.TradeModule oaResult.oa_msg = oaResp?.message ?? "OA接口调用失败"; } await DbContext.SaveChangesAsync(); - - return new TradeOAResult { TradeId = tradeId, Success = oaResult.status== "提交成功", Message = oaResult.oa_msg }; + + return new TradeOAResult { TradeId = tradeId, Success = oaResult.status == "提交成功", Message = oaResult.oa_msg }; } catch (Exception ex) { @@ -113,10 +113,12 @@ namespace YLErp.Modules.TradeModule // 获取OA配置 var oaConfigSection = AppManager.GetConfiguration().GetSection("oa_confg"); var baseUrl = oaConfigSection["BaseUrl"]; + var subUrl = oaConfigSection["SubUrl"]; var loginName = string.Empty; - using (var adminDb = new ErpBaseContext()) { - var userInfo=adminDb.SystemUsers.FirstOrDefault(x=>x.Id==UserInfo.UserId); - loginName= userInfo?.OaAccount; + using (var adminDb = new ErpBaseContext()) + { + var userInfo = adminDb.SystemUsers.FirstOrDefault(x => x.Id == UserInfo.UserId); + loginName = userInfo?.OaAccount; } var systemKey = oaConfigSection["SystemKey"]; var objectClass = oaConfigSection["ObjectClass"]; @@ -146,21 +148,21 @@ namespace YLErp.Modules.TradeModule var fileBytes = await File.ReadAllBytesAsync(tdoc.AbsolutePath); var base64Content = Convert.ToBase64String(fileBytes); var fileName = Path.GetFileName(tdoc.AbsolutePath); - + attachments.Add(new { nrtitle = fileName, - nrtype= "1", + nrtype = "1", content = base64Content }); - + logger.Info($"成功读取附件文件:{tdoc.AbsolutePath},文件大小:{fileBytes.Length} 字节"); } else { logger.Error($"附件文件不存在:{tdoc.AbsolutePath}"); return new OAResponse() { data = null, success = false, message = $"附件文件不存在" }; - + } } catch (Exception ex) @@ -178,36 +180,37 @@ namespace YLErp.Modules.TradeModule var currentPositionType = currentPosition.PositionType; // 2. 查询同一客户、同一交易日期的所有有效交易 var sameClientTrades = DbContext.trade.AsNoTracking() - .Where(t => t.ClientId == trade.ClientId - && t.TradeDate == trade.TradeDate + .Where(t => t.ClientId == trade.ClientId + && t.TradeDate == trade.TradeDate && t.ValidState != "InValid"); var exerciseDate = sameClientTrades.Select(x => x.ExerciseDate).OrderBy(o => o).FirstOrDefault(); // 3. 关联持仓表,筛选相同多空方向的持仓 var matchingPositions = from t in sameClientTrades - join sp in DbContext.swap_position.AsNoTracking() - on t.id equals sp.SwapTradeId - where sp.PositionType == currentPositionType - && sp.IsInitial && sp.PositionType > 0 && !sp.Invalid - select t; + join sp in DbContext.swap_position.AsNoTracking() + on t.id equals sp.SwapTradeId + where sp.PositionType == currentPositionType + && sp.IsInitial && sp.PositionType > 0 && !sp.Invalid + select t; // 4. 计算名义本金汇总和加权平均保证金率 var totalNotionalPrincipal = matchingPositions.Sum(x => x.OriginalStockEqvNotional); - + // 计算加权平均保证金率 decimal marginRate = 0; if (totalNotionalPrincipal > 0) { decimal weightedMarginSum = 0; - foreach (var t in matchingPositions) { + foreach (var t in matchingPositions) + { var marginDetail = UnderlyingHelper.GetApplicableMarginRate(t.ClientId, t.UnderlyingCode, t.TradeDate.Value); var rate = marginDetail?.init_rate ?? 0; - weightedMarginSum += rate*Convert.ToDecimal(t.OriginalStockEqvNotional); + weightedMarginSum += rate * Convert.ToDecimal(t.OriginalStockEqvNotional); } marginRate = weightedMarginSum / Convert.ToDecimal(totalNotionalPrincipal); - // marginRate=Math.Round(marginRate, 4); // 保留四位小数 + // marginRate=Math.Round(marginRate, 4); // 保留四位小数 } - + var posiTypeStr = currentPositionType == (int)PositionTypeFlag.Long ? "买入" : "卖出"; var underlyingType = sameClientTrades.Count() > 0 ? "利率债" : trade.UnderlyingInstrumentTypeCn; string bgContent = @$"

各位领导:

@@ -220,7 +223,7 @@ namespace YLErp.Modules.TradeModule

到期日: {exerciseDate?.ToString("yyyy/M/d")}

合约名义本金: {totalNotionalPrincipal:N0}元

保证金支付方: {trade.ClientName}

-

交易标的满足浙商证券标的池管理要求,交易对手方为非交易商,提供【{(marginRate*100).ToString("0.##")}%】名义本金的履约担保品作为初始保证金。保证金预警线与盯市追保符合内外规要求。

"; +

交易标的满足浙商证券标的池管理要求,交易对手方为非交易商,提供【{(marginRate * 100).ToString("0.##")}%】名义本金的履约担保品作为初始保证金。保证金预警线与盯市追保符合内外规要求。

"; // 构建OA请求参数 var oaRequest = new { @@ -246,8 +249,8 @@ namespace YLErp.Modules.TradeModule CKDX1 = "", CKDX2 = "", LB = "", - JYLX="2",//自主对冲 - YWLX ="4",//收益互换 + JYLX = "2",//自主对冲 + YWLX = "4",//收益互换 QSBGNR = bgContent, MX = new object[0], SQMX = new object[0] @@ -258,7 +261,7 @@ namespace YLErp.Modules.TradeModule logger.Info($"OA接口参数:{JsonHelper.Serialize(oaRequest)}"); // 调用OA接口 var httpClient = new HttpClientWrap(baseUrl); - var response = httpClient.PostJson("/ZSZQ/fileDraft", oaRequest, null);// fileDraft + var response = httpClient.PostJson(subUrl, oaRequest, null);// fileDraft logger.Info($"OA接口返回:{response}"); // 解析响应 var responseObj = JsonHelper.Deserialize(response); diff --git a/YLErpWeb/appsettings.dev.json b/YLErpWeb/appsettings.dev.json index 9e1f16d1..fb524450 100644 --- a/YLErpWeb/appsettings.dev.json +++ b/YLErpWeb/appsettings.dev.json @@ -73,5 +73,13 @@ "Schema": "APEX_040000" }, "SendKafakaCron": "10 0 * * *", - "MaxThreadPercent": 0.6 //占系统资源最多60%的线程数量 + "MaxThreadPercent": 0.6, //占系统资源最多60%的线程数量 + "oa_confg": { + "BaseUrl": "http://10.52.130.11", + "SubUrl": "/ZSZQ/fileDraft", + "SystemKey": "fF2U9HXs7dm6Hjz5X", //OA系统key + "ObjectClass": "ZSZQ_CWYSPJYQRSDZWF", //OA文件类别 + "Urgent": 1, //紧急程度,1一般 2紧急 3加急 + "Issend": 0 //流程是否自动发送,0不发送,1自动发送下一步 + } } diff --git a/YLErpWeb/appsettings.local.json b/YLErpWeb/appsettings.local.json index 49a2868a..0b484dc9 100644 --- a/YLErpWeb/appsettings.local.json +++ b/YLErpWeb/appsettings.local.json @@ -78,6 +78,7 @@ "MaxThreadPercent": 0.6, //占系统资源最多60%的线程数量 "oa_confg": { "BaseUrl": "http://ip:port", + "SubUrl": "/ZSZQ/fileDraft", "SystemKey": "M001", //OA系统key "ObjectClass": "ZSZQ_ZDNX", //OA文件类别 "Urgent": 1, //紧急程度,1一般 2紧急 3加急 diff --git a/YLErpWeb/appsettings.prod.json b/YLErpWeb/appsettings.prod.json index d3460338..aa0e95d8 100644 --- a/YLErpWeb/appsettings.prod.json +++ b/YLErpWeb/appsettings.prod.json @@ -73,5 +73,13 @@ "Schema": "APPQOSSYS" }, "SendKafakaCron": "10 0 * * *", - "MaxThreadPercent": 0.6 //占系统资源最多60%的线程数量 + "MaxThreadPercent": 0.6, //占系统资源最多60%的线程数量 + "oa_confg": { + "BaseUrl": "http://10.52.130.11", + "SubUrl": "/ZSZQ/fileDraft", + "SystemKey": "fF2U9HXs7dm6Hjz5X", //OA系统key + "ObjectClass": "ZSZQ_CWYSPJYQRSDZWF", //OA文件类别 + "Urgent": 1, //紧急程度,1一般 2紧急 3加急 + "Issend": 0 //流程是否自动发送,0不发送,1自动发送下一步 + } } diff --git a/YLErpWeb/appsettings.uat.json b/YLErpWeb/appsettings.uat.json index c26cc1d6..5d3053c4 100644 --- a/YLErpWeb/appsettings.uat.json +++ b/YLErpWeb/appsettings.uat.json @@ -76,6 +76,7 @@ "MaxThreadPercent": 0.6, //占系统资源最多60%的线程数量 "oa_confg": { "BaseUrl": "http://10.52.130.11", + "SubUrl": "/ZSZQ/fileDraft", "SystemKey": "fF2U9HXs7dm6Hjz5X", //OA系统key "ObjectClass": "ZSZQ_CWYSPJYQRSDZWF", //OA文件类别 "Urgent": 1, //紧急程度,1一般 2紧急 3加急