using BaseOUDAL;
namespace YLErp.Modules.BasicDataModule
{
///
/// 审批分级数据服务
///
public class ApprovalGradeDataService : YLBaseService
{
public ApprovalGradeDataService(OptUserInfo userInfo) : base(userInfo)
{
}
public ApprovalGrade SaveApprovalGrade(ApprovalGrade req)
{
if (req is null)
{
throw new ArgumentNullException(nameof(req));
}
if (req.AssetId == 0)
{
throw new ServiceException("簿记账户名称 必须填写");
}
ApprovalGrade dbModel;
if (req.id == 0)
{
if (DbContext.approvalGrade.Any(o => o.AssetId == req.AssetId && o.Rule == req.Rule && o.RoleId == req.RoleId) && req.id == 0)
{
throw new ServiceException("数据内容不能重复,已存在相同记录");
}
DbContext.approvalGrade.Add(dbModel = req);
}
else
{
dbModel = DbContext.approvalGrade.Find(req.id);
if (dbModel == null)
{
throw new ServiceException("要更新的数据已不存在");
}
UpdateChanges(dbModel, req);
}
SetDBModelOpt(dbModel);
DbContext.SaveChanges();
return dbModel;
}
public void deleteApprovalGrade(int id)
{
if (DbContext.approvalGrade.Find(id) == null)
{
throw new ServiceException("未找到记录");
}
else
{
var grade = DbContext.approvalGrade.Find(id);
DbContext.approvalGrade.Remove(grade);
DbContext.SaveChanges();
}
}
public SearchListResult SearchList(AssetUnitRequest req)
{
var predicate = PredicateBuilder.True();
if (!string.IsNullOrEmpty(req.Name))
{
predicate = predicate.And(d => d.Name.Contains(req.Name));
}
if (!string.IsNullOrEmpty(req.UserGroup))
{
predicate = predicate.And(d => d.UserGroup.Contains(req.UserGroup));
}
if (req.TraderIds != null && req.TraderIds.Any(n => n > 0))
{
//predicate = predicate.And(d => req.TraderIds.Any(tId => ("," + d.TraderIds + ",").Contains("," + tId + ",")));
var traderIdPre = PredicateBuilder.False();
req.TraderIds.Where(p => p > 0).ToList().ForEach(p =>
{
traderIdPre = traderIdPre.Or(d => (!string.IsNullOrEmpty(d.TraderIds) && (d.TraderIds.StartsWith(p + ",") || d.TraderIds.EndsWith("," + p) || d.TraderIds.Contains("," + p + ","))));
});
predicate = predicate.And(traderIdPre);
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
var query = (from a in DbContext.assetunit.Where(predicate)
join g in DbContext.assetunitgroup on a.GroupId equals g.id into g_t
from g in g_t.DefaultIfEmpty()
select a.id).ToList();
var dataQyery = from grade in DbContext.approvalGrade
join unit in DbContext.assetunit
on grade.AssetId equals unit.id
into gp
from g in gp.DefaultIfEmpty()
select new
{
grade = grade,
unit = g
};
if (query != null && query.Count() > 0)
{
dataQyery = dataQyery.Where(o => query.Contains(o.grade.AssetId));
}
List retData = new List();
foreach (var item in dataQyery)
{
var approvalGrade = item.grade;
approvalGrade.AssetName = item.unit.Name;
approvalGrade.TraderIds = item.unit.TraderIds;
var names = DataConvert.ConvertCommaValuesToInt32Array(approvalGrade.TraderIds).Where(n => n > 0).Select(n => UserBLL.GetNameById(n));
approvalGrade.TraderNames = string.Join(",", names);
using (var dbContext = new ErpBaseContext())
{
approvalGrade.RoleName = dbContext.Roles.FirstOrDefault(o => o.Id == approvalGrade.RoleId).Name;
}
retData.Add(approvalGrade);
}
var result = retData.AsQueryable().ToSearchList(req);
return result;
}
public static List getAllRoles()
{
using (var dbContext = new ErpBaseContext())
{
var roles = dbContext.Roles.ToList();
return roles;
}
}
}
}