using BaseOUDAL; using YieldChain.Helpers; namespace YLErp.Modules.ClientModule { /// /// 客户给予子公司的授信额度 /// public class CreditFromClientService : YLBaseService { public CreditFromClientService(OptUserInfo userInfo) : base(userInfo) { } /// /// 保存客户给予子公司的授信额度 /// public CreditFromClient SaveCreditFromClient(CreditFromClient req) { if (req.CreditDeadLine < req.CreditStartDate) { throw new ServiceException("授信起始日不能大于授信到期日"); } CreditFromClient dbModel; var isAddNew = req.id == 0; var updateComments = false; DateTime? createDate = DateTime.Now; int? creatorId = UserInfo.UserId; var creatorName = UserInfo.UserName; if (isAddNew) { dbModel = new CreditFromClient(); DbContext.CreditFromClient.Add(dbModel); } else { dbModel = DbContext.CreditFromClient.Find(req.id); if (dbModel == null) { throw new ServiceException("数据不存在"); } updateComments = dbModel.Credit == req.Credit && dbModel.CreditDeadLine == req.CreditDeadLine && dbModel.CreditStartDate == req.CreditStartDate; createDate = dbModel.CreateDate; creatorId = dbModel.CreatorId; creatorName = dbModel.CreatorName; } if (updateComments) { dbModel.Comments = req.Comments; DbContext.SaveChanges(); return dbModel; } UpdateChanges(dbModel, req); SetDBModelOpt(dbModel); dbModel.CreatorName = creatorName; dbModel.CreatorId = creatorId; dbModel.CreateDate = createDate; //设置客户编号 var client = ClientDataQueryService.GetClient(dbModel.ClientId, true); dbModel.ClientNumber = client.Number; dbModel.ClientName = client.Name; var query = from credit in DbContext.CreditFromClient where credit.ClientId == dbModel.ClientId && credit.id != req.id && (!(req.CreditStartDate > credit.CreditDeadLine || req.CreditDeadLine < credit.CreditStartDate)) select credit; if (query.Any()) { throw new ServiceException("同一客户授信有效时间不能重合,请检查该客户已存在的授信记录"); } DbContext.SaveChanges(); return dbModel; } /// /// 获取数据 /// public CreditFromClient GetData(int id) { var dbModel = DbContext.CreditFromClient.AsNoTracking().FirstOrDefault(n => n.id == id); if (dbModel == null) { return null; } var dto = new CreditFromClient(); ObjectHelper.MapValues(dto, dbModel); var client = ClientDataQueryService.GetClient(dbModel.ClientId, true); dto.ClientNumber = client.Number; dto.ClientName = client.Name; return dto; } /// /// 删除数据 /// public CreditFromClient RemoveData(int id) { var dbModel = DbContext.CreditFromClient.FirstOrDefault(n => n.id == id); if (dbModel == null) { throw new ServiceException("找不到数据"); } DbContext.CreditFromClient.Remove(dbModel); DbContext.SaveChanges(); return dbModel; } /// /// 搜索数据 /// public SearchListResult SearchData(ClientCreditReq req) { if (string.IsNullOrEmpty(req.sidx)) { req.sidx = "id"; req.sord = "desc"; } var predicate = PredicateBuilder.True(); if (req != null) { if (req.ClientId.HasValue && req.ClientId.Value > 0) { predicate = predicate.And(O => O.ClientId == req.ClientId.Value); } if (req.CreditDeadLineStart > default(DateTime)) { predicate = predicate.And(O => O.CreditDeadLine >= req.CreditDeadLineStart); } if (req.CreditDeadLineEnd > default(DateTime)) { predicate = predicate.And(O => O.CreditDeadLine <= req.CreditDeadLineEnd); } } var clientIds = new ClientDataService(OptUser).GetClientIds(); if (clientIds.Any()) { predicate = predicate.And(a => clientIds.Contains(a.ClientId)); } var sList = DbContext.CreditFromClient.Where(predicate).ToSearchList(req); foreach (var item in sList.rows) { var client = ClientDataQueryService.GetClient(item.ClientId); if (client != null) { item.ClientNumber = client.Number; item.ClientName = client.Name; } } return sList; } } }