CostCalculationItem/IRaCIS.Core.Application/Trial/QA/QATemplateService.cs

154 lines
5.6 KiB
C#

using AutoMapper;
using AutoMapper.QueryableExtensions;
using IRaCIS.Application.ExpressionExtend;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.Contracts.RequestAndResponse;
using IRaCIS.Core.Domain.Interfaces;
using IRaCIS.Core.Domain.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace IRaCIS.Application.Services.QA
{
public class QATemplateService : IQATemplateService
{
private readonly IQATemplateRepository _qaTemplateRepository;
private readonly IMapper _mapper;
private readonly IDictionaryRepository _dictionaryRepository;
private readonly IQATemplateDictionaryRepository _qaTemplateDictionaryRepository;
public QATemplateService(IQATemplateRepository qaTemplateRepository, IMapper mapper, IDictionaryRepository dictionaryRepository, IQATemplateDictionaryRepository qaTemplateDictionaryRepository
)
{
_qaTemplateRepository = qaTemplateRepository;
_mapper = mapper;
_dictionaryRepository = dictionaryRepository;
_qaTemplateDictionaryRepository = qaTemplateDictionaryRepository;
}
public IResponseOutput AddOrUpdateQATemplate(QATemplateCommand qaTemplateCommand)
{
if (qaTemplateCommand.Id == null)
{
var qaTemplate = _mapper.Map<QATemplate>(qaTemplateCommand);
_qaTemplateRepository.Add(qaTemplate);
var success = _qaTemplateRepository.SaveChanges();
return ResponseOutput.Result(success, qaTemplate.Id);
}
else
{
var qaTemplate = _qaTemplateRepository.GetAll().FirstOrDefault(t => t.Id == qaTemplateCommand.Id);
_mapper.Map(qaTemplateCommand, qaTemplate);
_qaTemplateRepository.Update(qaTemplate);
var success = _qaTemplateRepository.SaveChanges();
return ResponseOutput.Result(success);
}
}
public IResponseOutput DeleteQATemplate(Guid qaTemplateId)
{
var success = _qaTemplateRepository.Delete(t => t.Id == qaTemplateId);
return ResponseOutput.Result(success);
}
public List<QATemplateDTO> GetQaTemplateSelectList()
{
var query = _qaTemplateRepository.GetAll()
.ProjectTo<QATemplateDTO>(_mapper.ConfigurationProvider);
return query.ToList();
}
public PageOutput<QATemplateDTO> GetQaTemplateList(QATemplateQueryDTO qaTemplateQuery)
{
Expression<Func<QATemplate, bool>> qATemplateLambda = x => true;
var query = _qaTemplateRepository.GetAll().Where(qATemplateLambda)
.ProjectTo<QATemplateDTO>(_mapper.ConfigurationProvider);
var count = query.Count();
var propName = qaTemplateQuery.SortField == string.Empty ? "Name" : qaTemplateQuery.SortField;
query = qaTemplateQuery.Asc
? query.OrderBy(propName)
: query.OrderByDescending(propName);
query = query.Skip((qaTemplateQuery.PageIndex - 1) * qaTemplateQuery.PageSize).Take(qaTemplateQuery.PageSize);
var list = query.ToList();
return new PageOutput<QATemplateDTO>(qaTemplateQuery.PageIndex,
qaTemplateQuery.PageSize, count, list);
}
public List<QATemplateItemSelect> GetQaTemplateConfigList(Guid qaTemplateId)
{
var query = from dic in _dictionaryRepository.GetAll().Where(t => t.Type == "QATemplate")
join qaDic in _qaTemplateDictionaryRepository.GetAll().Where(u => u.QATemplateId == qaTemplateId)
on dic.Id equals qaDic.DictionaryId into tt
from qaDic in tt.DefaultIfEmpty()
select new QATemplateItemSelect
{
DictionaryId = dic.Id,
DictionaryValue = dic.Value,
IsSelect = qaDic != null
};
return query.ToList();
}
public IResponseOutput ConfigQATemplate(QATemplateConfigCommand qaTemplateConfigCommand)
{
var success = false;
if (qaTemplateConfigCommand.IsSelect)
{
var qaTemplateDictionary = _mapper.Map<QATemplateDictionary>(qaTemplateConfigCommand);
_qaTemplateDictionaryRepository.Add(qaTemplateDictionary);
success = _qaTemplateDictionaryRepository.SaveChanges();
}
else
{
success = _qaTemplateDictionaryRepository
.Delete(t => t.DictionaryId == qaTemplateConfigCommand.DictionaryId
&& t.QATemplateId == qaTemplateConfigCommand.QATemplateId);
}
return ResponseOutput.Result(success);
}
public List<QATemplateItemDTO> GetQaTemplateItemsById(Guid qaTemplateId)
{
var query = from dic in _dictionaryRepository.GetAll().Where(t => t.Type == "QATemplate")
join qaDic in _qaTemplateDictionaryRepository.GetAll().Where(u => u.QATemplateId == qaTemplateId) on dic.Id equals qaDic.DictionaryId
select new QATemplateItemDTO
{
DictionaryId = qaDic.DictionaryId,
DictionaryValue = dic.Value
};
return query.ToList();
}
}
}