using BaseOUDAL;
using YieldChain.Helpers;
namespace YLErp.Modules.ClientModule
{
///
/// (瑞达)日内授信
///
public class CreditIntradayService : YLBaseService
{
public CreditIntradayService(OptUserInfo userInfo) : base(userInfo)
{
}
///
/// (瑞达)日内授信保存
///
public CreditIntraday SaveCreditIntraday(CreditIntraday req)
{
if (req.CreditDeadLine < req.CreditStartDate)
{
throw new ServiceException("授信起始日不能大于授信到期日");
}
CreditIntraday dbModel;
var isAddNew = req.id == 0;
var updateComments = false;
if (isAddNew)
{
dbModel = new CreditIntraday();
DbContext.CreditIntraday.Add(dbModel);
}
else
{
dbModel = DbContext.CreditIntraday.Find(req.id);
if (dbModel == null)
{
throw new ServiceException("数据不存在");
}
updateComments = dbModel.Credit == req.Credit
&& dbModel.CreditDeadLine == req.CreditDeadLine
&& dbModel.CreditStartDate == req.CreditStartDate;
}
if (updateComments)
{
dbModel.Comments = req.Comments;
DbContext.SaveChanges();
return dbModel;
}
UpdateChanges(dbModel, req);
SetDBModelOpt(dbModel);
ClientDataQueryService.CheckClientExists(dbModel.ClientId, true);
var query = from credit in DbContext.CreditIntraday
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 CreditIntradayDto GetData(int id)
{
var dbModel = DbContext.CreditIntraday.AsNoTracking().FirstOrDefault(n => n.id == id);
if (dbModel == null)
{
return null;
}
var dto = new CreditIntradayDto();
ObjectHelper.MapValues(dto, dbModel);
var client = ClientDataQueryService.GetClient(dbModel.ClientId, true);
dto.ClientNumber = client.Number;
dto.ClientName = client.Name;
return dto;
}
///
/// 删除数据
///
public CreditIntraday RemoveData(int id)
{
var dbModel = DbContext.CreditIntraday.FirstOrDefault(n => n.id == id);
if (dbModel == null)
{
throw new ServiceException("找不到数据");
}
DbContext.CreditIntraday.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 query = DbContext.CreditIntraday.Where(predicate).ProjectTo();
var sList = query.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;
}
}
}