using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using AutoMapper;
using AutoMapper.Configuration;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
using Win_in.Sfs.Scp.v1.Domain;
using Microsoft.Extensions.Configuration;
using IConfiguration = Microsoft.Extensions.Configuration.IConfiguration;
namespace Win_in.Sfs.Scp.WebApi
{
///
/// 零件服务
///
[Authorize]
[Route(RouteConsts.Part)]
[ApiExplorerSettings(GroupName = SwaggerGroupConsts.ScpWebApi)]
public class PartAppService :ReadOnlyAppService, IPartAppService
{
private readonly IPartRepository _partRepository;
private readonly ITaPartRepository _taPartRepository;
private readonly string _validSites = Validator.VALID_SITES;
public PartAppService(
IPartRepository repository
,ITaPartRepository taPartRepository
,IConfiguration configuration
) : base(repository)
{
_partRepository = repository;
_taPartRepository = taPartRepository;
_validSites = configuration["ValidSites"];
}
///
/// 按ID获取零件 (Get part by ID)
///
/// 唯一ID(unique ID)
///
[HttpGet]
[Route("{id}")]
public override async Task GetAsync(Guid id)
{
return await base.GetAsync(id);
}
///
/// 按条件获取零件列表 (Get part list by request condition)
///
/// 请求条件DTO(Request condition DTO)
///
[HttpGet]
[Route("")]
public override async Task> GetListAsync(RequestDTO requestDTO)
{
return await base.GetListAsync(requestDTO);
}
///
/// 新增零件(Create New part)
///
///
[HttpPost]
[Route("")]
public virtual async Task CreateAsync(PartCreateDto partCreateDTO)
{
var entity = ObjectMapper.Map(partCreateDTO);
try
{
Validator.CheckSite(_validSites,entity.Site);
await UpsertTaPartAsync(entity);
await CurrentUnitOfWork.SaveChangesAsync();
}
catch (Exception ex)
{
var baseEx = ex.GetBaseException();
entity.ErrorCode = 1;
entity.ErrorMessage = baseEx.Message;
}
var ret = await _partRepository.InsertAsync(entity);
var dto = ObjectMapper.Map(ret);
return dto;
}
private async Task UpsertTaPartAsync(Part entity)
{
//使用AutoMapper执行类型转换
var taPart = ObjectMapper.Map(entity);
//根据传入数据新增或修改SCP数据
await _taPartRepository.UpsertAsync(taPart);
}
}
}