You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
6.4 KiB
181 lines
6.4 KiB
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Globalization;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Volo.Abp.Application.Dtos;
|
|
using Volo.Abp.Application.Services;
|
|
using Volo.Abp.MultiTenancy;
|
|
using Volo.Abp.TenantManagement;
|
|
using Volo.Abp.Validation;
|
|
using Win_in.Sfs.Scp.v1.Domain;
|
|
using System.Security.Policy;
|
|
using Volo.Abp.Data;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace Win_in.Sfs.Scp.WebApi
|
|
{
|
|
/// <summary>
|
|
/// 采购订单服务
|
|
/// </summary>
|
|
[Authorize]
|
|
[Route(RouteConsts.PurchaseOrder)]
|
|
[ApiExplorerSettings(GroupName = SwaggerGroupConsts.ScpWebApi)]
|
|
public class PurchaseOrderAppService : ReadOnlyAppService<PurchaseOrder, PurchaseOrderDTO, Guid, RequestDTO>, IPurchaseOrderAppService
|
|
{
|
|
private readonly IPurchaseOrderRepository _purchaseOrderRepository;
|
|
private readonly ITbPoRepository _tbPoRepository;
|
|
private readonly ITbPoDetailRepository _tbPoDetailRepository;
|
|
private readonly ITaVenderRepository _taVenderRepository;
|
|
private readonly ITenantStore _tenantStore;
|
|
private readonly ITenantRepository _tenantRepository;
|
|
private readonly IDataFilter _dataFilter;
|
|
private readonly IOptions<AsnOptions> _options;
|
|
|
|
public PurchaseOrderAppService(
|
|
IPurchaseOrderRepository repository
|
|
, ITbPoRepository tbPoRepository
|
|
, ITbPoDetailRepository tbPoDetailRepository
|
|
, ITaVenderRepository taVenderRepository
|
|
, ITenantStore tenantStore
|
|
, ITenantRepository tenantRepository
|
|
, IDataFilter dataFilter
|
|
, IOptions<AsnOptions> options
|
|
) : base(repository)
|
|
{
|
|
_purchaseOrderRepository = repository;
|
|
_tbPoRepository = tbPoRepository;
|
|
_tbPoDetailRepository = tbPoDetailRepository;
|
|
_taVenderRepository = taVenderRepository;
|
|
_tenantStore = tenantStore;
|
|
_tenantRepository = tenantRepository;
|
|
_dataFilter = dataFilter;
|
|
_options = options;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 按ID获取采购订单 (Get purchase order by ID)
|
|
/// </summary>
|
|
/// <param name="id">唯一ID(unique ID)</param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[Route("{id}")]
|
|
[HiddenApi]
|
|
public override async Task<PurchaseOrderDTO> GetAsync(Guid id)
|
|
{
|
|
return await base.GetAsync(id);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 按条件获取采购订单列表 (Get purchase order list by request condition)
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[Route("paged-list")]
|
|
[HiddenApi]
|
|
public override async Task<PagedResultDto<PurchaseOrderDTO>> GetListAsync(RequestDTO input)
|
|
{
|
|
return await base.GetListAsync(input);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 新增采购订单(Create New purchase order)
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
[Route("")]
|
|
public virtual async Task<ActionResult<PurchaseOrderDTO>> CreateAsync(PurchaseOrderCreateDTO poCreateDTO)
|
|
{
|
|
var entity = ObjectMapper.Map<PurchaseOrderCreateDTO, PurchaseOrder>(poCreateDTO);
|
|
|
|
if (entity.PoType == "0")
|
|
{
|
|
entity.PoType = "1";
|
|
}
|
|
|
|
foreach (var detail in entity.Details)
|
|
{
|
|
detail.SetId(GuidGenerator);
|
|
}
|
|
|
|
try
|
|
{
|
|
Validator.CheckSite(_tenantRepository, entity.Site);
|
|
Validator.CheckSite(_tenantRepository, entity.Company);
|
|
|
|
if (entity.PoNumber.StartsWith(_options.Value.ValidPoPre, true, CultureInfo.CurrentCulture))
|
|
{
|
|
var tenant = await _tenantStore.FindAsync(entity.Site);
|
|
using (CurrentTenant.Change(tenant.Id, tenant.Name))
|
|
{
|
|
using (_dataFilter.Disable<IMultiTenant>())
|
|
{
|
|
|
|
Validator.CheckSupplierCode(_taVenderRepository, entity.Site, entity.SupplierCode);
|
|
|
|
await UpsertTbPoAndTbPoDetailAsync(entity, tenant.Id);
|
|
await CurrentUnitOfWork.SaveChangesAsync();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
entity.ErrorMessage = $"'{entity.PoNumber}' is not start with '{_options.Value.ValidPoPre}',ignore.";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var baseEx = ex.GetBaseException();
|
|
entity.ErrorCode = 1;
|
|
entity.ErrorMessage = baseEx.Message;
|
|
}
|
|
var ret = await _purchaseOrderRepository.InsertAsync(entity);
|
|
var dto = ObjectMapper.Map<PurchaseOrder, PurchaseOrderDTO>(ret);
|
|
dto.CreationTime = Clock.Now;
|
|
if (dto.ErrorCode != 0)
|
|
{
|
|
throw new AbpValidationException(new List<ValidationResult>
|
|
{
|
|
new(dto.ErrorMessage)
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return new OkObjectResult(dto);
|
|
}
|
|
}
|
|
|
|
private async Task UpsertTbPoAndTbPoDetailAsync(PurchaseOrder entity, Guid tenantId)
|
|
{
|
|
//使用AutoMapper执行类型转换
|
|
var tbPo = ObjectMapper.Map<PurchaseOrder, TB_PO>(entity);
|
|
tbPo.TenantId = tenantId;
|
|
|
|
//根据传入数据新增或修改SCP数据
|
|
await _tbPoRepository.UpsertAsync(tbPo);
|
|
|
|
var poDetails = entity.Details;
|
|
|
|
foreach (var poDetail in poDetails)
|
|
{
|
|
//使用AutoMapper执行类型转换
|
|
var tbPoDetail = ObjectMapper.Map<PurchaseOrderDetail, TB_PO_DETAIL>(poDetail);
|
|
//接口数据中没有Site,从主表中获取
|
|
tbPoDetail.Site = tbPo.Site;
|
|
tbPoDetail.BeginTime = tbPo.BeginTime;
|
|
tbPoDetail.EndTime = tbPo.EndTime;
|
|
tbPoDetail.TenantId = tenantId;
|
|
//根据传入数据新增或修改SCP数据
|
|
await _tbPoDetailRepository.UpsertAsync(tbPoDetail);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|