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; } } } }