Files
zszq-trs/YLErpDAL/Modules/TradeModule/QueryModule/DatatraceQueryService.cs
T
2025-04-23 16:44:54 +08:00

1295 lines
55 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 BaseOUDAL;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Text.RegularExpressions;
using YieldChain.Helpers;
using YieldChain.Security;
using YLErp.Model;
using YLErp.Modules.ClientModule;
using YLErp.Office.ExcelModule;
namespace YLErp.Modules.TradeModule.QueryModule
{
public class DatatraceQueryService : YLBaseService
{
public DatatraceQueryService(OptUserInfo userInfo) : base(userInfo)
{
}
public DatatraceQueryService(YLBaseService baseService) : base(baseService)
{
}
#region 客户信息变更
public byte[] ExportClientInfoChange(TradeChangeReq req)
{
SearchListResult<ClientInfoChangeRep> searchListResult = GetClientInfoChangeRep(req);
foreach (var item in searchListResult.rows)
{
if (!string.IsNullOrEmpty(item.DataInfo))
{
item.DataInfo = item.DataInfo.Substring(0, item.DataInfo.Length - 1).Replace("", "\r\n") + "";
item.DataInfo = item.DataInfo.Replace("“ ”", "空");
}
}
var templateFile = OtcAppContext.MapPath("~/App_Docs/导出模板/变更记录模板_客户信息变更.xlsx");
return ExcelGenerator.UseTemplateGenerator(templateFile).AddVariable(new { list = searchListResult.rows }).GenerateBytes();
}
public SearchListResult<ClientInfoChangeRep> GetClientInfoChangeRep(TradeChangeReq req)
{
SearchListResult<ClientInfoChangeRep> searchListResult = new SearchListResult<ClientInfoChangeRep>();
var ClientAuditLogList = new SearchListResult<ClientAuditLog>();
if (req.Ids == null || req.Ids.Count == 0)
{
ClientAuditLogList = GetClientInfoChangeRepList(req);
}
else
{
ClientAuditLogList = GetClientInfoChangeRepListByIds(req);
}
if (ClientAuditLogList.rows != null && ClientAuditLogList.rows.Count() > 0)
{
List<ClientInfoChangeRep> clientInfoChangeReps = new List<ClientInfoChangeRep>();
foreach (var item in ClientAuditLogList.rows)
{
var client = new ClientDataService(OptUser).GetClientById(item.ClientId);
if (client != null)
{
var dataChanges = ReplaceDataChanges(client, item.Changes);
var newDataChange = new ClientInfoChangeRep
{
ClientId = item.ClientId,
Changes = item.Changes,
ClientName = client.Name,
ClientNumber = client.Number,
DataInfo = dataChanges,
OptName = item.OptName,
OptDate = item.OptDate,
OptType = (item.OptType.Contains("删除人员信息") || item.OptType.Contains("销户")) ? "信息删除" : "信息修改",
IsClosed = client.ProcessStatus.Contains("已销户"),
id = item.id
};
if (dataChanges != null && !string.IsNullOrEmpty(dataChanges))
{
clientInfoChangeReps.Add(newDataChange);
}
else
{
if (item.OptType.Contains("删除人员信息") || item.OptType.Contains("销户"))
{
clientInfoChangeReps.Add(newDataChange);
}
}
}
}
searchListResult.rows = clientInfoChangeReps;
searchListResult.total = ClientAuditLogList.total;
searchListResult.page = ClientAuditLogList.page;
searchListResult.Sum = ClientAuditLogList.Sum;
searchListResult.records = ClientAuditLogList.records;
}
return searchListResult;
}
public SearchListResult<ClientAuditLog> GetClientInfoChangeRepListByIds(TradeChangeReq req)
{
using (var clientDB = new ClientDBContext())
{
var query = clientDB.ClientAuditLog.Where(a => req.Ids.Contains(a.id)).OrderByDescending(a => a.OptDate).AsQueryable();
return query.ToSearchList(req);
}
}
public SearchListResult<ClientAuditLog> GetClientInfoChangeRepList(TradeChangeReq req)
{
using (var clientDB = new ClientDBContext())
{
var query = clientDB.ClientAuditLog.Where(a => a.OptType == "编辑客户" || a.OptType == "编辑产品投资人" || a.OptType == "编辑客户人员" || a.OptType == "上传文件" || a.OptType == "修改上传文件" || a.OptType == "删除人员信息" || a.OptType == "销户").AsQueryable();
if (req.OptDateStart != default)
{
query = query.Where(a => req.OptDateStart <= a.OptDate);
}
if (req.OptDateEnd != default)
{
var endDay = req.OptDateEnd.AddDays(1);
query = query.Where(a => endDay > a.OptDate);
}
if (req.OptTypes != null && req.OptTypes.Count > 0)
{
if (req.OptTypes.Any(a => a == "信息修改"))
{
query = query.Where(a => a.OptType == "编辑客户" || a.OptType == "编辑产品投资人" || a.OptType == "编辑客户人员" || a.OptType == "上传文件" || a.OptType == "修改上传文件");
}
else if (req.OptTypes.Any(a => a == "信息删除"))
{
query = query.Where(a => a.OptType == "删除人员信息" || a.OptType == "销户");
}
}
if (!string.IsNullOrEmpty(req.ClientNumber))
{
query = from q in query
join c in clientDB.client on q.ClientId equals c.id
where c.Number.Contains(req.ClientNumber)
select q;
}
if (req.ClientIds != null && req.ClientIds.Count > 0)
{
query = query.Where(a => req.ClientIds.Any(b => b == a.ClientId));
}
if (req.OptNames != null)
{
query = query.Where(a => req.OptNames.Any(b => b == a.OptName));
}
query = query.OrderByDescending(a => a.OptDate);
return query.ToSearchList(req);
}
}
#endregion
#region 交易信息变更
public SearchListResult<TradeAuditLog> GetTradeInfoChangeRepList(TradeChangeReq req)
{
var query = DbContext.TradeAuditLog.Where(a => a.OptType == "修改交易" || a.OptType == "修改备注").AsQueryable();
if (req.OptDateStart != default)
{
query = query.Where(a => req.OptDateStart <= a.OptDate);
}
if (req.OptDateEnd != default)
{
var endDay = req.OptDateEnd.AddDays(1);
query = query.Where(a => endDay > a.OptDate);
}
if (req.ClientIds != null && req.ClientIds.Count > 0)
{
query = from q in query
join t in DbContext.trade on q.TradeId equals t.id
where req.ClientIds.Any(a => a == t.ClientId)
select q;
}
if (req.AssetIds != null && req.AssetIds.Count > 0)
{
query = from q in query
join t in DbContext.trade on q.TradeId equals t.id
where req.AssetIds.Any(a => a == t.AssetId)
select q;
}
if (!string.IsNullOrEmpty(req.TradeNumber))
{
query = from q in query
join t in DbContext.trade on q.TradeId equals t.id
where t.TradeNumber.Contains(req.TradeNumber)
select q;
}
if (req.OptNames != null)
{
query = query.Where(a => req.OptNames.Any(b => b == a.OptName));
}
query = from q in query
join t in DbContext.trade on q.TradeId equals t.id
where t.TradeNumber.IndexOf("XX") < 0
orderby q.OptDate descending
select q;
return query.ToSearchList(req);
}
public SearchListResult<TradeAuditLog> GetTradeInfoChangeRepListByIds(TradeChangeReq req)
{
var query = DbContext.TradeAuditLog.Where(a => req.Ids.Any(b => b == a.id)).OrderByDescending(b => b.OptDate).AsQueryable();
return query.ToSearchList(req);
}
public SearchListResult<TradeInfoChangeRep> GetTradeInfoChangeRep(TradeChangeReq req)
{
SearchListResult<TradeInfoChangeRep> searchListResult = new SearchListResult<TradeInfoChangeRep>();
var TradeAuditLogList = new SearchListResult<TradeAuditLog>();
if (req.Ids == null || req.Ids.Count == 0)
{
TradeAuditLogList = GetTradeInfoChangeRepList(req);
}
else
{
TradeAuditLogList = GetTradeInfoChangeRepListByIds(req);
}
if (TradeAuditLogList.rows != null && TradeAuditLogList.rows.Count() > 0)
{
List<TradeInfoChangeRep> tradeInfoChangeReps = new List<TradeInfoChangeRep>();
foreach (var item in TradeAuditLogList.rows)
{
var trade = DbContext.trade.Where(a => a.id == item.TradeId).FirstOrDefault();
if (trade != null)
{
//旧值为空的改新值的过滤掉,暂时不考虑分页
var dataChanges = ReplaceDataChanges(trade, item.Changes);
var tradeInfoChanges = new TradeInfoChangeRep
{
TradeId = item.TradeId,
Changes = item.Changes,
TradeNumber = trade.TradeNumber,
TradeStatus = trade.TradeStatus,
ClientName = trade.ClientName,
UserAssetUnitName = trade.AssetBookName,
DataInfo = dataChanges,
OptName = item.OptName,
OptDate = item.OptDate,
OptType = "信息修改",
id = item.id
};
if (dataChanges != null)
{
tradeInfoChangeReps.Add(tradeInfoChanges);
}
}
}
searchListResult.rows = tradeInfoChangeReps;
searchListResult.total = TradeAuditLogList.total;
searchListResult.page = TradeAuditLogList.page;
searchListResult.Sum = TradeAuditLogList.Sum;
searchListResult.records = TradeAuditLogList.records;
}
return searchListResult;
}
public byte[] ExportTradeInfoChange(TradeChangeReq req)
{
SearchListResult<TradeInfoChangeRep> searchListResult = GetTradeInfoChangeRep(req);
foreach (var item in searchListResult.rows)
{
if (!string.IsNullOrEmpty(item.DataInfo))
{
item.DataInfo = item.DataInfo.Substring(0, item.DataInfo.Length - 1).Replace("", "\r\n") + "";
item.DataInfo = item.DataInfo.Replace("“ ”", "空");
}
}
var templateFile = OtcAppContext.MapPath("~/App_Docs/导出模板/变更记录模板_交易信息变更.xlsx");
return ExcelGenerator.UseTemplateGenerator(templateFile).AddVariable(new { list = searchListResult.rows }).GenerateBytes();
}
#endregion
#region 交易删除信息
/// <summary>
/// 查询交易变更记录
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public SearchListResult<TradeChangeList> GetTradeInfoDeleteRepList(TradeChangeReq req)
{
var tempQuery = DbContext.TradeAuditLog.Where(a => a.OptType == "删除交易").AsQueryable();
if (req.Ids == null || req.Ids.Count == 0)
{
if (req.OptDateStart != default)
{
tempQuery = tempQuery.Where(a => req.OptDateStart <= a.OptDate);
}
if (req.OptDateEnd != default)
{
var endDay = req.OptDateEnd.AddDays(1);
tempQuery = tempQuery.Where(a => endDay > a.OptDate);
}
if (req.ClientIds != null && req.ClientIds.Count > 0)
{
tempQuery = from q in tempQuery
join t in DbContext.trade on q.TradeId equals t.id
where req.ClientIds.Any(a => a == t.ClientId)
select q;
}
if (req.AssetIds != null && req.AssetIds.Count > 0)
{
tempQuery = from q in tempQuery
join t in DbContext.trade on q.TradeId equals t.id
where req.AssetIds.Any(a => a == t.AssetId)
select q;
}
if (!string.IsNullOrEmpty(req.TradeNumber))
{
tempQuery = from q in tempQuery
join t in DbContext.trade on q.TradeId equals t.id
where t.TradeNumber.Contains(req.TradeNumber)
select q;
}
if (req.OptNames != null)
{
tempQuery = tempQuery.Where(a => req.OptNames.Any(b => b == a.OptName));
}
}
else
{
tempQuery = DbContext.TradeAuditLog.Where(a => req.Ids.Any(b => b == a.id));
}
var list = new List<TradeChangeList>();
var query = from t in DbContext.trade
join ta in tempQuery
on t.id equals ta.TradeId
orderby ta.OptDate descending
select ta;
var tempList = query.ToSearchList(req);
foreach (var item in tempList.rows)
{
TradeChangeList info = new TradeChangeList();
var ta = DbContext.trade.Where(a => a.id == item.TradeId).FirstOrDefault();
ObjectHelper.MapValues(info, ta);
if (ta != null)
{
info.OptType = item.OptType;
info.OptId = item.OptId;
info.OptName = item.OptName;
info.OptDate = item.OptDate;
info.TradeAuditId = (int)item.id;
}
list.Add(info);
}
return new SearchListResult<TradeChangeList>(tempList, list);
}
public byte[] ExportTradeInfoDelete(TradeChangeReq req)
{
SearchListResult<TradeChangeList> searchListResult = GetTradeInfoDeleteRepList(req);
var templateFile = OtcAppContext.MapPath("~/App_Docs/导出模板/变更记录模板_交易删除.xlsx");
return ExcelGenerator.UseTemplateGenerator(templateFile).AddVariable(new { list = searchListResult.rows }).GenerateBytes();
}
#endregion
#region 资金信息删除
public byte[] ExportClientCashDelete(TradeChangeReq req)
{
SearchListResult<ClientCashInCashOutExtend> searchListResult = GetClientCashDeleteSearch(req);
var templateFile = OtcAppContext.MapPath("~/App_Docs/导出模板/变更记录模板_资金删除.xlsx");
return ExcelGenerator.UseTemplateGenerator(templateFile).AddVariable(new { list = searchListResult.rows }).GenerateBytes();
}
public SearchListResult<ClientCashInCashOutExtend> GetClientCashDeleteSearch(TradeChangeReq req)
{
var query = from source in DbContext.Clientcashincashout_remove
join trade in DbContext.trade on source.TradeId equals trade.id into trades
from trade in trades.DefaultIfEmpty()
select new ClientCashInCashOutExtend
{
id = source.id,
Direction = source.Direction,
TradeNumber = trade == null ? "" : trade.TradeNumber,
TradeType = trade == null ? "" : trade.TradeType,
Number = source.Number,
ClientId = source.ClientId,
Money = source.Direction == "出金" ? -source.Money : source.Money,
HappenDate = source.HappenDate,
State = source.State,
OptId = source.OptId,
OptName = source.OptName,
OptDate = source.OptDate,
ValidState = source.ValidState,
TradeId = source.TradeId,
Action = source.Action,
SerialNumber = source.SerialNumber,
Comments = source.Comments,
ClientNumber = source.ClientNumber
};
if (req.Ids == null || req.Ids.Count == 0)
{
if (req.OptDateStart != default)
{
query = query.Where(a => req.OptDateStart <= a.OptDate);
}
if (req.OptDateEnd != default)
{
var endDay = req.OptDateEnd.AddDays(1);
query = query.Where(a => endDay > a.OptDate);
}
if (req.ClientIds != null && req.ClientIds.Count > 0)
{
query = query.Where(a => req.ClientIds.Contains(a.ClientId ?? 0));
}
if (!string.IsNullOrEmpty(req.ClientNumber))
{
query = query.Where(a => a.ClientNumber.Contains(req.ClientNumber));
}
if (req.OptNames != null)
{
query = query.Where(a => req.OptNames.Contains(a.OptName));
}
if (req.HappenDateStart != default)
{
query = query.Where(a => req.HappenDateStart <= a.HappenDate);
}
if (req.HappenDateEnd != default)
{
var endDay = req.HappenDateEnd.AddDays(1);
query = query.Where(a => endDay > a.HappenDate);
}
if (!string.IsNullOrEmpty(req.Number))
{
query = query.Where(a => a.Number.Contains(req.Number));
}
if (!string.IsNullOrEmpty(req.TradeNumber))
{
query = query.Where(a => a.TradeNumber.Contains(req.TradeNumber));
}
#region 根据方向类型查询处理,结合DirectionTradeActionInOut处理
//a.Direction != "应收"代表根据direction来做逻辑判断
if (!string.IsNullOrEmpty(req.DirectionTypes))
{
if (req.DirectionTypeList.Contains("收入") && !req.DirectionTypeList.Contains("支出"))
{
query = query.Where(a => a.Money > 0);
}
else if (req.DirectionTypeList.Contains("支出") && !req.DirectionTypeList.Contains("收入"))
{
query = query.Where(a => a.Money < 0);
}
}
#endregion
}
else
{
query = query.Where(a => req.Ids.Contains(a.id));
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "OptDate,id";
req.sord = "desc";
}
else if (req.sidx == "DirectionType")
{
req.sidx = "Direction";
}
var retListResult = query.ToSearchList(req);
foreach (var item in retListResult.rows)
{
if (item.ClientId > 0)
{
item.ClientName = DataCacheProvider.GetClientDataSource().GetData(item.ClientId.Value)?.Name;
}
}
return retListResult;
}
#endregion
#region 资金信息变更
private SearchListResult<ClientCashChangeList> GetClientCashChangeRepList(TradeChangeReq req)
{
var query = from log in DbContext.clientcash_log.Where(a => a.OptType.Contains("修改"))
join cash in DbContext.ClientCashInCashOut on log.CashId equals cash.id
join trade in DbContext.trade on cash.TradeId equals trade.id into trade
from td in trade.DefaultIfEmpty()
where cash.ValidState != ConsGlobal.InValid
select new ClientCashChangeList
{
id = log.id,
OptType = log.OptType,
OptName = log.OptName,
OptDate = log.OptDate,
Changes = log.Changes,
Explain = log.Explain,
HappenDateReal = cash.HappenDate,
Number = cash.Number,
ClientId = cash.ClientId,
ClientName = cash.ClientName,
ClientNumber = cash.ClientNumber,
Direction = cash.Direction,
Money = cash.Money.ToString(),
MoneyReal = cash.Money,
CurrencyCode = cash.CurrencyCode,
TradeNumber = td == null ? "" : td.TradeNumber,
Comments = cash.Comments,
AssetId = td == null ? 0 : td.AssetId,
TradeId = td == null ? 0 : td.id,
Action = cash.Action,
CashState = cash.State
};
if (req.Ids == null || req.Ids.Count == 0)
{
if (req.OptDateStart != default)
{
query = query.Where(a => req.OptDateStart <= a.OptDate);
}
if (req.OptDateEnd != default)
{
var endDay = req.OptDateEnd.AddDays(1);
query = query.Where(a => endDay > a.OptDate);
}
if (req.ClientIds != null && req.ClientIds.Count > 0)
{
query = query.Where(a => req.ClientIds.Contains(a.ClientId ?? 0));
}
if (!string.IsNullOrEmpty(req.ClientNumber))
{
query = query.Where(a => a.ClientNumber.Contains(req.ClientNumber));
}
if (req.AssetIds != null && req.AssetIds.Count > 0)
{
query = query.Where(a => req.AssetIds.Contains(a.AssetId));
}
if (req.OptNames != null)
{
query = query.Where(a => req.OptNames.Contains(a.OptName));
}
if (req.HappenDateStart != default)
{
query = query.Where(a => req.HappenDateStart <= a.HappenDateReal);
}
if (req.HappenDateEnd != default)
{
var endDay = req.HappenDateEnd.AddDays(1);
query = query.Where(a => endDay > a.HappenDateReal);
}
if (!string.IsNullOrEmpty(req.Number))
{
query = query.Where(a => a.Number.Contains(req.Number));
}
if (!string.IsNullOrEmpty(req.TradeNumber))
{
query = query.Where(a => a.TradeNumber.Contains(req.TradeNumber));
}
#region 根据方向类型查询处理,结合DirectionTradeActionInOut处理
//Direction和TradeAction是或的关系
//Direction和InOut是或的关系
//TradeAction和InOut是与的关系(InTradeAction若有值和In为一组,判断为收取;OutTradeAction若有值和Out为一组,判断为支付)
if (!string.IsNullOrEmpty(req.Direction) && !string.IsNullOrEmpty(req.TradeAction))
{
query = query.Where(a => a.Direction != null && req.Directions.Contains(a.Direction) || a.Action != null && req.TradeActionList.Contains(a.Action));
}
else
{
if (!string.IsNullOrEmpty(req.Direction))
{
query = query.Where(a => a.Direction != null && req.Directions.Contains(a.Direction));
}
if (!string.IsNullOrEmpty(req.TradeAction))
{
query = query.Where(a => a.Action != null && req.TradeActionList.Contains(a.Action));
}
}
//a.Direction != "应收"代表根据direction来做逻辑判断
if (!string.IsNullOrEmpty(req.InOut))
{
if (req.InOut.Contains("应收") && !req.InOut.Contains("应付"))
{
query = query.Where(a => a.MoneyReal > 0 || a.Direction != "应收");
}
else if (!req.InOut.Contains("应收") && req.InOut.Contains("应付"))
{
query = query.Where(a => a.MoneyReal < 0 || a.Direction != "应收");
}
//当同时有应收和应付字段的时候,需要判断应收有哪些action,应付有哪些action
else if (req.InOut.Contains("应收") && req.InOut.Contains("应付") && !string.IsNullOrEmpty(req.InTradeAction) && !string.IsNullOrEmpty(req.OutTradeAction))
{
query = query.Where(a => a.MoneyReal < 0 && req.OutTradeAction.Contains(a.Action) || a.MoneyReal > 0 && req.InTradeAction.Contains(a.Action) || a.Direction != "应收");
}
}
#endregion
}
else
{
query = query.Where(a => req.Ids.Contains(a.id));
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "OptDate,id";
req.sord = "desc";
}
else if (req.sidx == "DirectionType")
{
req.sidx = "Direction";
}
else if (req.sidx == "HappenDate")
{
req.sidx = "HappenDateReal";
}
return query.ToSearchList(req);
}
public SearchListResult<ClientCashChangeList> GetClientCashChangeRep(TradeChangeReq req)
{
if (!string.IsNullOrWhiteSpace(req.DirectionTypes))
{
UpdateTradeChangeReq(req);
}
var searchListResult = GetClientCashChangeRepList(req);
var removeListId = new List<int>();
if (searchListResult.rows != null && searchListResult.rows.Count() > 0)
{
foreach (var item in searchListResult.rows)
{
item.HappenDate = (item.HappenDateReal ?? DateTime.MinValue).ToString("yyyy-MM-dd hh:mm:ss");
item.DirectionType = GetDirection(item.Direction, item.Action, item.MoneyReal ?? 0);
item.EncryptTradeId = item.TradeId > 0 ? DataProtect.Encrypt(item.TradeId.ToString()) : "";
item.DataInfo = ReplaceDataChanges(item, item.Changes);
if (string.IsNullOrEmpty(item.DataInfo))
{
removeListId.Add(item.id);
}
else
{
var cash_update = DbContext.clientcashincashout_update.FirstOrDefault(n => n.ClientcashincashoutId == item.CashId && n.ValidState != "InValid");
if (cash_update != null)
{
item.CashState = cash_update.State;
}
}
}
if (removeListId.Count > 0)
{
searchListResult.rows = searchListResult.rows.Where(n => !removeListId.Contains(n.id));
}
}
return searchListResult;
}
public void CoverDataChanges(ClientCashChangeList obj, string dataChanges)
{
if (!(string.IsNullOrEmpty(dataChanges) || dataChanges.Equals("[]") || dataChanges.LastIndexOf("]") == -1 || dataChanges.StartsWith("[") && !dataChanges.EndsWith("]")))
{
string ARROW = "->";
object[] dataChangeArr = JsonHelper.Deserialize<object[]>(dataChanges);
if (dataChangeArr.Length > 0)
{
string oldDirection = null;
double? oldMoney = null;
foreach (object objArr in dataChangeArr)
{
string[] objStrArr = JsonHelper.Deserialize<string[]>(objArr.ToJson());
string dataStr = string.Empty;
if (!string.IsNullOrEmpty(objStrArr[0]))
{
dataStr = objStrArr[0];
}
dataStr = dataStr?.Trim();
if (objStrArr.Length == 4)
{
switch (dataStr)
{
case "HappenDate":
obj.HappenDate = $"{objStrArr[2]}{ARROW}{objStrArr[3]}";
break;
case "Direction":
oldDirection = (string)objStrArr[2].Replace("\"", "");
break;
case "Money":
if (double.TryParse((string)objStrArr[2], out double value))
{
oldMoney = value;
}
obj.Money = $"{objStrArr[2]}{ARROW}{objStrArr[3]}";
break;
case "Comments":
obj.Comments = $"{objStrArr[2]}{ARROW}{objStrArr[3]}";
break;
}
}
}
var DirectionType = GetDirection(oldDirection ?? obj.Direction, obj.Action, oldMoney ?? obj.MoneyReal ?? 0);
if (DirectionType != obj.DirectionType)
{
obj.DirectionType = $"{DirectionType}{ARROW}{obj.DirectionType}";
}
}
}
}
public string GetDirection(string Direction, string Action, double money)
{
string ret = "";
if (Direction == "出金" || Direction == "入金")
{
ret += Direction;
}
else if (Direction == "其他收入" || Direction == "其他支出")
{
ret += "其他";
}
else if (Action == "系统操作-期权费")
{
ret += "权利金";
}
else if ((Action == "系统操作-平仓费" || Action == "系统操作-行权费"))
{
ret += "平仓/行权";
}
else if (Action == "系统操作-票息")
{
ret += "票息";
}
else if (Action == "系统操作-互换")
{
ret += "互换";
}
if (Direction == "出金" || Direction == "入金")
{
ret += "";
}
else if (money > 0)
{
ret += "收入";
}
else
{
ret += "支出";
}
return ret;
}
public byte[] ExportClientCashChange(TradeChangeReq req)
{
SearchListResult<ClientCashChangeList> searchListResult = GetClientCashChangeRep(req);
var templateFile = OtcAppContext.MapPath("~/App_Docs/导出模板/变更记录模板_资金修改.xlsx");
return ExcelGenerator.UseTemplateGenerator(templateFile).AddVariable(new { list = searchListResult.rows }).GenerateBytes();
}
#endregion
/// <summary>
/// 页面交易方向查询条件更新
/// </summary>
/// <param name="req"></param>
public void UpdateTradeChangeReq(TradeChangeReq req)
{
var directionList = new List<string>();
var tradeActionList = new List<string>();
var inTradeActionList = new List<string>();
var outTradeActionList = new List<string>();
var inOutList = new List<string>();
void addWhenNotContains(List<string> list, string str)
{
if (!list.Contains(str))
{
list.Add(str);
}
}
if (req.DirectionTypeList.Contains("出金"))
{
addWhenNotContains(directionList, "出金");
}
if (req.DirectionTypeList.Contains("入金"))
{
addWhenNotContains(directionList, "入金");
}
if (req.DirectionTypeList.Contains("其他收入"))
{
addWhenNotContains(directionList, "其他收入");
}
if (req.DirectionTypeList.Contains("其他支出"))
{
addWhenNotContains(directionList, "其他支出");
}
if (req.DirectionTypeList.Contains("权利金支出"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_期权费);
addWhenNotContains(inOutList, "应付");
addWhenNotContains(outTradeActionList, ClientCashInCashOut.系统操作_期权费);
}
if (req.DirectionTypeList.Contains("权利金收入"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_期权费);
addWhenNotContains(inOutList, "应收");
addWhenNotContains(inTradeActionList, ClientCashInCashOut.系统操作_期权费);
}
if (req.DirectionTypeList.Contains("平仓/行权收入"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_平仓费);
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_行权费);
addWhenNotContains(inOutList, "应收");
addWhenNotContains(inTradeActionList, ClientCashInCashOut.系统操作_平仓费);
addWhenNotContains(inTradeActionList, ClientCashInCashOut.系统操作_行权费);
}
if (req.DirectionTypeList.Contains("平仓/行权支出"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_平仓费);
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_行权费);
addWhenNotContains(inOutList, "应付");
addWhenNotContains(outTradeActionList, ClientCashInCashOut.系统操作_平仓费);
addWhenNotContains(outTradeActionList, ClientCashInCashOut.系统操作_行权费);
}
if (req.DirectionTypeList.Contains("票息收入"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_票息);
addWhenNotContains(inOutList, "应收");
addWhenNotContains(inTradeActionList, ClientCashInCashOut.系统操作_票息);
}
if (req.DirectionTypeList.Contains("票息支出"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_票息);
addWhenNotContains(inOutList, "应付");
addWhenNotContains(outTradeActionList, ClientCashInCashOut.系统操作_票息);
}
if (req.DirectionTypeList.Contains("互换收入"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_互换);
addWhenNotContains(inOutList, "应收");
addWhenNotContains(inTradeActionList, ClientCashInCashOut.系统操作_互换);
}
if (req.DirectionTypeList.Contains("互换支出"))
{
addWhenNotContains(tradeActionList, ClientCashInCashOut.系统操作_互换);
addWhenNotContains(inOutList, "应付");
addWhenNotContains(outTradeActionList, ClientCashInCashOut.系统操作_互换);
}
req.Direction = string.Join(",", directionList);
req.TradeAction = string.Join(",", tradeActionList);
req.InTradeAction = string.Join(",", inTradeActionList);
req.OutTradeAction = string.Join(",", outTradeActionList);
req.InOut = string.Join(",", inOutList);
}
public string ReplaceDataChanges(object obj, string dataChanges)
{
var filesNameList = new List<string> { "TraderId", "AssetId" };
if (string.IsNullOrEmpty(dataChanges) || dataChanges.Equals("[]") || dataChanges.LastIndexOf("]") == -1 || dataChanges.StartsWith("[") && !dataChanges.EndsWith("]"))
{
return null;
}
else
{
if (dataChanges.Contains("],"))
{
object[] dataChangeArr = JsonHelper.Deserialize<object[]>(dataChanges);
if (dataChangeArr.Length > 0)
{
string dataInfo = string.Empty;
foreach (object objArr in dataChangeArr)
{
string[] objStrArr = JsonHelper.Deserialize<string[]>(objArr.ToJson());
if (!filesNameList.Contains(objStrArr[0]))
{
if (objStrArr[1].Contains("补偿支付") || objStrArr[1].Contains("补偿方式"))
{
objStrArr[2] = GetFormatValue("补偿支付", objStrArr[2]);
objStrArr[3] = GetFormatValue("补偿支付", objStrArr[3]);
}
else
{
objStrArr[2] = GetFormatValue(objStrArr[1], objStrArr[2]);
objStrArr[3] = GetFormatValue(objStrArr[1], objStrArr[3]);
}
dataInfo += SplicingDataChange(objStrArr, obj);
}
}
return dataInfo;
}
}
else
{
if (dataChanges.Contains("\r\n"))
{
string[] dataChangeArr = dataChanges.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
if (dataChangeArr.Length > 0)
{
string dataInfo = string.Empty;
foreach (string item in dataChangeArr)
{
object[] objStrArr = JsonHelper.Deserialize<object[]>(item);
if (objStrArr[2] != null && objStrArr[2].ToString() != "\"\"" && objStrArr[2].ToString() != "“ ”" && filesNameList.Contains(objStrArr[0].ToString()))
{
objStrArr[2] = GetFormatValue(objStrArr[1].ToString(), objStrArr[2].ToString());
if (objStrArr[3] != null)
{
objStrArr[3] = GetFormatValue(objStrArr[1].ToString(), objStrArr[3].ToString());
}
var stringArr = objStrArr.Select(a => a == null ? "" : a.ToString()).ToArray();
dataInfo += SplicingDataChange(stringArr, obj);
}
}
return dataInfo;
}
}
else
{
string[] dataChangeArr = null;
if (dataChanges.StartsWith("[") && dataChanges.EndsWith("]") && !dataChanges.StartsWith("[["))
{
dataChangeArr = JsonHelper.Deserialize<string[]>(dataChanges);
}
else
{
dataChangeArr = JsonHelper.Deserialize<string[]>(dataChanges.Substring(1, dataChanges.Length - 2));
}
if (dataChangeArr != null && dataChangeArr.Length > 0/** && !string.IsNullOrEmpty(dataChangeArr[2]) && dataChangeArr[2] != "\"\"" && dataChangeArr[2] != "“ ”" **/&& !filesNameList.Contains(dataChangeArr[0]))
{
dataChangeArr[2] = GetFormatValue(dataChangeArr[1], dataChangeArr[2]);
if (dataChangeArr[3] != null)
{
dataChangeArr[3] = GetFormatValue(dataChangeArr[1], dataChangeArr[3]);
}
return SplicingDataChange(dataChangeArr, obj);
}
}
}
return null;
}
}
/// <summary>
/// 根据类属性名称获取 DisplayName
/// </summary>
/// <param name="instance"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
public string ContainProperty(object instance, string propertyName)
{
if (instance != null && !string.IsNullOrEmpty(propertyName))
{
PropertyInfo _findedPropertyInfo = instance.GetType().GetProperty(propertyName);
if (_findedPropertyInfo != null)
if (_findedPropertyInfo.GetCustomAttribute<DisplayNameAttribute>() != null)
return _findedPropertyInfo.GetCustomAttribute<DisplayNameAttribute>().DisplayName;
}
return null;
}
/// <summary>
/// 拼接字符串 (客户编号:01->02)
/// </summary>
/// <param name="dataChangeArr"></param>
/// <param name="obj"></param>
/// <returns></returns>
public string SplicingDataChange(string[] dataChangeArr, object obj)
{
string ARROW = "->";
string empty = "“ ”";
string dataInfo = string.Empty;
string dataStr = string.Empty;
if (!string.IsNullOrEmpty(dataChangeArr[1]))
{
dataStr = dataChangeArr[1];
}
else if (!string.IsNullOrEmpty(dataChangeArr[0]))
{
dataStr = ContainProperty(obj, dataChangeArr[0]);
if (string.IsNullOrEmpty(dataStr))
{
dataStr = dataChangeArr[0];
}
}
else
{
return string.Empty;
}
dataStr = dataStr?.Trim();
if (dataStr == "SalesCommission" || dataStr == "提成信息")
{
return string.Empty;
}
if (dataStr.IndexOf("ExtendInfo") >= 0)
{
var extendInfoArr = string.IsNullOrEmpty(dataChangeArr[2]) ? null
: (dataChangeArr[2].StartsWith("[")
? JsonHelper.Deserialize<object[]>(dataChangeArr[2])
: JsonHelper.Deserialize<object[]>(JsonHelper.Deserialize<string>(dataChangeArr[2]))
);
var extendInfoArr1 = string.IsNullOrEmpty(dataChangeArr[3]) ? null
: (dataChangeArr[3].StartsWith("[")
? JsonHelper.Deserialize<object[]>(dataChangeArr[3])
: JsonHelper.Deserialize<object[]>(JsonHelper.Deserialize<string>(dataChangeArr[3]))
);
string itemStr1 = string.Empty;
if (extendInfoArr != null)
{
foreach (var item in extendInfoArr)
{
Dictionary<string, string> itemDics = JsonHelper.Deserialize<Dictionary<string, string>>(item.ToJson());
var secondValue = "";
foreach (var item2 in extendInfoArr1)
{
Dictionary<string, string> itemDics2 = JsonHelper.Deserialize<Dictionary<string, string>>(item2.ToJson());
if (itemDics2["name"] == itemDics["name"])
{
secondValue = itemDics2["value"];
break;
}
}
itemStr1 += $"{itemDics["name"]}{itemDics["value"]}{ARROW}{secondValue}";
}
if (itemStr1.Length > 0)
{
itemStr1 = itemStr1.Substring(0, itemStr1.Length - 1);
}
return itemStr1;
}
}
if (dataStr.IndexOf(".") > 0)
{
dataStr = dataStr.Split('.')[1];
if (Regex.Match(dataStr, @"^[A-Za-z]+$").Success)
{
return string.Empty;
}
}
if (!string.IsNullOrEmpty(dataStr))
{
if (dataChangeArr.Length > 2)
{
var firstValue = dataChangeArr[2] == "true" ? "是" : (dataChangeArr[2] == "false" ? "否" : dataChangeArr[2]);
var secondValue = dataChangeArr[3] == "true" ? "是" : (dataChangeArr[3] == "false" ? "否" : dataChangeArr[3]);
if (dataChangeArr[1] == "成交方式")
{
if (firstValue == "是")
{
firstValue = "名义本金";
}
else
{
firstValue = "成交数量";
}
if (secondValue == "是")
{
secondValue = "名义本金";
}
else
{
secondValue = "成交数量";
}
}
if (!string.IsNullOrEmpty(firstValue) && !string.IsNullOrEmpty(secondValue))
{
if (firstValue.Contains("YLErp") || secondValue.Contains("YLErp"))
{
return string.Empty;
}
dataInfo += $"{dataStr}{firstValue}{ARROW}{secondValue}";
}
else if (!string.IsNullOrEmpty(firstValue) && string.IsNullOrEmpty(secondValue))
{
if (firstValue.Contains("YLErp"))
{
return string.Empty;
}
dataInfo += $"{dataStr}{firstValue}{ARROW}{empty}";
}
else if (string.IsNullOrEmpty(firstValue) && !string.IsNullOrEmpty(secondValue))
{
if (secondValue.Contains("YLErp"))
{
return string.Empty;
}
dataInfo += $"{dataStr}{empty}{ARROW}{secondValue}";
}
}
else
{
if (!string.IsNullOrEmpty(dataChangeArr[1]))
{
dataInfo += $"{dataStr}{dataChangeArr[1]}";
}
else
{
dataInfo += $"{dataStr}{empty}";
}
}
}
return dataInfo;
}
/// <summary>
/// 格式化值
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public string GetFormatValue(string filesName, string value)
{
var returnValue = value;
double fomartDoubleValue;
if (!string.IsNullOrEmpty(filesName))
{
switch (filesName)
{
case "敲入敲出状态":
switch (value)
{
case "KnockedIn": returnValue = "敲入"; break;
case "KnockedOut": returnValue = "敲出"; break;
}
break;
case "追保方向":
switch (value)
{
case "0": returnValue = "单向追保"; break;
case "1": returnValue = "双向追保"; break;
case "2": returnValue = "对手方单向追保"; break;
case "3": returnValue = "其他"; break;
};
break;
case "业务类型":
switch (value)
{
case "OP": returnValue = "期权业务"; break;
case "SW": returnValue = "掉期业务"; break;
};
break;
case "机构类型":
switch (value)
{
case "F": returnValue = "金融机构"; break;
case "P": returnValue = "产品"; break;
case "C": returnValue = "一般法人"; break;
};
break;
case "业务部门编号":
switch (value)
{
case "O": returnValue = "做市交易部"; break;
case "S": returnValue = "衍生品发展部"; break;
case "C": returnValue = "协同销售部"; break;
};
break;
case "期权费率":
case "单笔保底收益":
double.TryParse(value, out fomartDoubleValue);
returnValue = fomartDoubleValue.OtcFormat(OtcFormatFlag.umprice);
break;
case "中央对手方清算":
case "是否中央对手方清算":
switch (value)
{
case "N":
case "\"N\"":
returnValue = "否"; break;
case "I":
case "\"I\"":
returnValue = "计划中央对手方清算"; break;
case "Y":
case "\"Y\"":
returnValue = "是"; break;
};
break;
case "补偿支付":
switch (value)
{
case "AtHit":
case "\"AtHit\"":
returnValue = "立即"; break;
case "AtEnd":
case "\"AtEnd\"":
returnValue = "递延"; break;
};
break;
case "敲入观察周期":
var valueArr = value.Split("|");
if (valueArr[0] != null)
{
returnValue = "每" + valueArr[0].Replace("D", "日").Replace("W", "周").Replace("M", "月").Replace("Y", "年");
}
break;
case "行权方式":
case "ExerciseMode":
switch (value)
{
case "American":
case "\"American\"":
returnValue = "美式"; break;
case "European":
case "\"European\"":
returnValue = "欧式"; break;
}
break;
case "客户等级":
switch (value)
{
case "1": returnValue = "重点"; break;
case "2": returnValue = "主要"; break;
case "3": returnValue = "一般"; break;
case "4": returnValue = "不重要"; break;
case "5": returnValue = "S级"; break;
}
break;
case "证件有效期":
case "IdCardEffectiveDateStr":
switch (value)
{
case "30001231":
case "\"30001231\"":
returnValue = "长期有效"; break;
}
break;
}
}
return returnValue;
}
}
}