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.
115 lines
3.5 KiB
115 lines
3.5 KiB
2 years ago
|
using System;
|
||
|
using System.ComponentModel.DataAnnotations;
|
||
|
using System.Linq;
|
||
|
using System.Threading.Tasks;
|
||
|
using Microsoft.AspNetCore.Mvc;
|
||
|
using Volo.Abp.AspNetCore.Mvc;
|
||
|
using Volo.Abp.Validation;
|
||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
|
||
|
|
||
|
namespace Win_in.Sfs.Wms.Pda.Controllers.Inventories;
|
||
|
|
||
|
/// <summary>
|
||
|
///
|
||
|
/// </summary>
|
||
|
[ApiController]
|
||
|
[Route($"{PdaHostConst.ROOT_ROUTE}inventory/container")]
|
||
|
public class ContainerController : AbpController
|
||
|
{
|
||
|
private readonly IContainerAppService _containerAppService;
|
||
|
|
||
|
/// <summary>
|
||
|
///
|
||
|
/// </summary>
|
||
|
/// <param name="containerAppService"></param>
|
||
|
public ContainerController(IContainerAppService containerAppService)
|
||
|
{
|
||
|
_containerAppService = containerAppService;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 根据code获取库位信息
|
||
|
/// </summary>
|
||
|
/// <param name="code"></param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet("{code}")]
|
||
|
public async Task<ContainerDTO> GetAsync(string code)
|
||
|
{
|
||
|
var result = await _containerAppService.GetByCodeAsync(code).ConfigureAwait(false);
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 根据Code获取容器信息
|
||
|
/// </summary>
|
||
|
/// <param name="code"></param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet("check-by-code/{code}")]
|
||
|
|
||
|
public async Task CheckByCodeAsync(string code)
|
||
|
{
|
||
|
|
||
|
var result = new AbpValidationResult();
|
||
|
var entity = await _containerAppService.GetByCodeAsync(code).ConfigureAwait(false);
|
||
|
|
||
|
//TODO 以下的业务逻辑都不应该写在这里
|
||
|
|
||
|
if (entity != null)
|
||
|
{
|
||
|
result.Errors.Add(new ValidationResult($"号码为 {code} 的器具已存在!"));
|
||
|
|
||
|
}
|
||
|
|
||
|
//校验是不是最后一个器具号
|
||
|
var args = code.Split('-');
|
||
|
|
||
|
if (args.Length >= 4)
|
||
|
{
|
||
|
//P - 20220703 - 254L - 0000001
|
||
|
_ = args[1]; //生产日期
|
||
|
var projectCodeRL = args[2]; //项目+左右
|
||
|
|
||
|
var projectCode = string.Empty;
|
||
|
var rl = string.Empty;
|
||
|
if (projectCodeRL.Length > 1)
|
||
|
{
|
||
|
projectCode = projectCodeRL.Substring(0, projectCodeRL.Length - 1);//项目
|
||
|
|
||
|
rl = projectCodeRL.Substring(projectCodeRL.Length - 1, 1); //左右
|
||
|
}
|
||
|
var seqNo = args[3]; //流水号
|
||
|
|
||
|
entity = await _containerAppService.GetLastByTypeAndProjectCodeAsync(rl, projectCode).ConfigureAwait(false);
|
||
|
|
||
|
if (entity == null)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
var seqNoDeciamlNew = Convert.ToDecimal(seqNo);
|
||
|
var seqNoDeciamlLast = Convert.ToDecimal(entity.SeqNo);
|
||
|
|
||
|
if (seqNoDeciamlLast + 1 != seqNoDeciamlNew)
|
||
|
{
|
||
|
result.Errors.Add(new ValidationResult($"托码{code}的流水号为{seqNoDeciamlNew},当前数据库内最大流水号为{seqNoDeciamlLast},它们不是连续的,请按序收货!"));
|
||
|
}
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
result.Errors.Add(new ValidationResult($"托码{code}的流水号为{seqNo},或者当前数据库内最大流水号为{entity.SeqNo}不能有效转化为数字进行比较!"));
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
result.Errors.Add(new ValidationResult($"托码{code}不符合解析规则!"));
|
||
|
}
|
||
|
|
||
|
if (result.Errors.Any())
|
||
|
{
|
||
|
throw new AbpValidationException(result.Errors[0].ErrorMessage, result.Errors);
|
||
|
}
|
||
|
}
|
||
|
}
|