using BaseOUDAL;
using System.Globalization;
using YLErp.Model;
namespace YLErp.Modules.MarginModule
{
public class MarginTemplateService : YLBaseService
{
public MarginTemplateService(OptUserInfo userInfo) : base(userInfo)
{
}
public MarginTemplateService(YLBaseService baseService) : base(baseService)
{
}
///
/// 查询margin_template列表
///
public SearchListResult SearchTradeMarginList(margin_templateReq req)
{
var query = from margin_template in DbContext.margin_template
select margin_template;
if (!string.IsNullOrEmpty(req.Name))
{
query = query.Where(d => d.Name == req.Name);
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
var retListResult = query.ToSearchList(req);
return retListResult;
}
public SearchListResult SearchMarginTemplateV2List(margin_template_v2Req req)
{
var query = from margin_template_v2 in DbContext.margin_template_v2
select margin_template_v2;
if (!string.IsNullOrEmpty(req.Name))
{
query = query.Where(d => d.Name.Contains(req.Name));
}
if (!string.IsNullOrEmpty(req.TradeType))
{
query = query.Where(d => d.TradeTypes.Contains(req.TradeType));
}
if (req.RuleType != null)
{
query = query.Where(d => d.RuleType == req.RuleType.Value);
}
if (req.MarginType != null)
{
query = query.Where(d => d.MarginType == req.MarginType.Value);
}
if(req.IsValid.HasValue)
{
query = query.Where(d => d.IsValid == req.IsValid.Value);
}
query = query.Where(d => d.IsDefault == req.IsDefault);
query = query.Where(d => d.IsForClient == req.IsForClient);
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
var retListResult = query.ToSearchList(req);
SetBookScopeNames(retListResult);
return retListResult;
}
private void SetBookScopeNames(SearchListResult result)
{
var rows = result?.rows?.ToList();
if (rows == null || rows.Count == 0)
{
return;
}
var parsedRows = rows.Select(row => new
{
Row = row,
BookIds = row == null ? new List() : ParseBookIdsForDisplay(row.BookIds)
}).ToList();
var bookIds = parsedRows.SelectMany(item => item.BookIds).Distinct().ToList();
var bookNames = bookIds.Count == 0
? new Dictionary()
: DbContext.assetunit
.AsNoTracking()
.Where(book => bookIds.Contains(book.id))
.Select(book => new { book.id, book.Name })
.ToDictionary(book => book.id, book => book.Name);
foreach (var item in parsedRows)
{
if (item.Row == null)
{
continue;
}
item.Row.BookScopeName = string.IsNullOrWhiteSpace(item.Row.BookIds)
? "全部"
: string.Join(",", item.BookIds
.Where(bookId => bookNames.ContainsKey(bookId))
.Select(bookId => bookNames[bookId]));
}
result.rows = rows;
}
private static List ParseBookIdsForDisplay(string bookIds)
{
var ids = new List();
if (string.IsNullOrWhiteSpace(bookIds))
{
return ids;
}
foreach (var rawId in bookIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
if (int.TryParse(rawId.Trim(), NumberStyles.None, CultureInfo.InvariantCulture, out var id) && id > 0)
{
ids.Add(id);
}
}
return ids;
}
}
}