OA对接功能中 增加SubUrl
This commit is contained in:
@@ -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 = @$"<p>各位领导:</p>
|
||||
@@ -220,7 +223,7 @@ namespace YLErp.Modules.TradeModule
|
||||
<p style=""margin-left: 95px;"">到期日: {exerciseDate?.ToString("yyyy/M/d")}</p>
|
||||
<p style=""margin-left: 48px;"">合约名义本金: {totalNotionalPrincipal:N0}元</p>
|
||||
<p style=""margin-left: 48px;"">保证金支付方: {trade.ClientName}</p>
|
||||
<p>交易标的满足浙商证券标的池管理要求,交易对手方为非交易商,提供【{(marginRate*100).ToString("0.##")}%】名义本金的履约担保品作为初始保证金。保证金预警线与盯市追保符合内外规要求。</p>";
|
||||
<p>交易标的满足浙商证券标的池管理要求,交易对手方为非交易商,提供【{(marginRate * 100).ToString("0.##")}%】名义本金的履约担保品作为初始保证金。保证金预警线与盯市追保符合内外规要求。</p>";
|
||||
// 构建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<OAResponse>(response);
|
||||
|
||||
@@ -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自动发送下一步
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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加急
|
||||
|
||||
@@ -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自动发送下一步
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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加急
|
||||
|
||||
Reference in New Issue
Block a user