|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
using Volo.Abp.Caching;
|
|
|
|
using Win_in.Sfs.Basedata.Application.Contracts;
|
|
|
|
using Win_in.Sfs.Basedata.Domain;
|
|
|
|
using Win_in.Sfs.Basedata.Domain.Shared;
|
|
|
|
using System.Linq;
|
|
|
|
using Volo.Abp;
|
|
|
|
using Volo.Abp.Uow;
|
|
|
|
|
|
|
|
namespace Win_in.Sfs.Basedata.Application;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 拆箱记录
|
|
|
|
/// </summary>
|
|
|
|
[Authorize]
|
|
|
|
[Route($"{BasedataConsts.RootPath}split-packing-rec")]
|
|
|
|
public class SplitPackingRecAppService :
|
|
|
|
SfsBaseDataAppServiceBase<SplitPackingRec, SplitPackingRecDTO, SfsBaseDataRequestInputBase, SplitPackingRecEditInput
|
|
|
|
, SplitPackingRecImportInput>
|
|
|
|
, ISplitPackingRecAppService
|
|
|
|
{
|
|
|
|
private readonly ISplitPackingRecManager _splitPackingRecManager;
|
|
|
|
|
|
|
|
public SplitPackingRecAppService(ISplitPackingRecRepository repository
|
|
|
|
,ISplitPackingRecManager splitPackingRecManager
|
|
|
|
,IDistributedCache<SplitPackingRecDTO> cache
|
|
|
|
) : base(repository, cache)
|
|
|
|
{
|
|
|
|
base.CreatePolicyName = StdCostPriceSheetPermissions.Create;
|
|
|
|
base.UpdatePolicyName = StdCostPriceSheetPermissions.Update;
|
|
|
|
base.DeletePolicyName = StdCostPriceSheetPermissions.Delete;
|
|
|
|
_splitPackingRecManager = splitPackingRecManager;
|
|
|
|
}
|
|
|
|
[HttpPost("batch-insert")]
|
|
|
|
public async Task<bool> BatchInsertAsync(List<SplitPackingRecEditInput> inputs)
|
|
|
|
{
|
|
|
|
List<SplitPackingRec> lst = ObjectMapper.Map<List<SplitPackingRecEditInput>, List<SplitPackingRec>>(inputs);
|
|
|
|
bool ret = await _splitPackingRecManager.BatchInsertAsync(lst).ConfigureAwait(false);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 获取顶级箱码
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="toPackingCode">目标箱码列表</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("get-top-packing-code")]
|
|
|
|
public async Task<SplitPackingRecDTO> GetTopPackingCode(string toPackingCode)
|
|
|
|
{
|
|
|
|
var entity = await _splitPackingRecManager.GetTopPackingCode(toPackingCode).ConfigureAwait(false);
|
|
|
|
SplitPackingRecDTO dto = ObjectMapper.Map<SplitPackingRec, SplitPackingRecDTO>(entity);
|
|
|
|
return dto;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 获取拆箱记录
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="toPackingCode">目标箱码列表</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("get-split-packing-code")]
|
|
|
|
public async Task<SplitPackingRecDTO> GetSplitPackingCode(string toPackingCode)
|
|
|
|
{
|
|
|
|
var entity = await _splitPackingRecManager.GetSplitPackingCode(toPackingCode).ConfigureAwait(false);
|
|
|
|
SplitPackingRecDTO dto = ObjectMapper.Map<SplitPackingRec, SplitPackingRecDTO>(entity);
|
|
|
|
return dto;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 取每个目标箱码的最后一条拆箱记录
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="toPackingCodeList">目标箱码列表</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("by-to-packing-code")]
|
|
|
|
public async Task<List<SplitPackingRecDTO>> GetListByToPackingCode(List<string> toPackingCodeList)
|
|
|
|
{
|
|
|
|
var lst = await _splitPackingRecManager.GetListByToPackingCode(toPackingCodeList).ConfigureAwait(false);
|
|
|
|
List<SplitPackingRecDTO> ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 取每个目标箱码的最后一条拆箱记录
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="toPackingCodeList">目标箱码列表</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("get-first-or-default-packing-code")]
|
|
|
|
public async Task<List<SplitPackingRecDTO>> GetFirstOrDefaultPackingCode(List<string> toPackingCodeList)
|
|
|
|
{
|
|
|
|
var lst = await _splitPackingRecManager.GetFirstOrDefaultPackingCode(toPackingCodeList).ConfigureAwait(false);
|
|
|
|
List<SplitPackingRecDTO> ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// 取每个源标箱码的“操作状态=其它”的拆箱记录
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="fromPackingCodeList">源标箱码列表</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("by-from-packing-code")]
|
|
|
|
public async Task<List<SplitPackingRecDTO>> GetListByFromPackingCode(List<string> fromPackingCodeList)
|
|
|
|
{
|
|
|
|
var lst = await _splitPackingRecManager.GetListByFromPackingCode(fromPackingCodeList).ConfigureAwait(false);
|
|
|
|
List<SplitPackingRecDTO> ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 根据to箱码取所有具有相同箱码的拆箱记录
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="toPackingCode"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("get-same-ponumber-list-by-topackingcode")]
|
|
|
|
public async Task<List<SplitPackingRecDTO>> GetSamePoNumberListByToPackingCode(string toPackingCode)
|
|
|
|
{
|
|
|
|
List<SplitPackingRecDTO> ret = new List<SplitPackingRecDTO>();
|
|
|
|
var entity = await _splitPackingRecManager.GetTopPackingCode(toPackingCode).ConfigureAwait(false);
|
|
|
|
if (entity == null)
|
|
|
|
{
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
if (entity.PurchaseInfo_PoNumber.IsNullOrEmpty2())
|
|
|
|
{
|
|
|
|
throw new UserFriendlyException($"PurchaseInfo_PoNumber不能为空,to箱码:{toPackingCode}");
|
|
|
|
}
|
|
|
|
var lst = await Repository.GetListAsync(itm => itm.PurchaseInfo_PoNumber == entity.PurchaseInfo_PoNumber).ConfigureAwait(false);
|
|
|
|
|
|
|
|
ret = ObjectMapper.Map<List<SplitPackingRec>, List<SplitPackingRecDTO>>(lst);
|
|
|
|
ret = ret.OrderByDescending(itm => itm.CreationTime).ToList();
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
///
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="fromPackCode">from箱码</param>
|
|
|
|
/// <param name="inputQty">数量</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpGet("check-split-num")]
|
|
|
|
public async Task<bool> CheckSplitNum(string fromPackCode, decimal inputQty)
|
|
|
|
{
|
|
|
|
var lst = await _splitPackingRecManager.GetAllByFromPackingCode(fromPackCode).ConfigureAwait(false);
|
|
|
|
var originObj = lst.FirstOrDefault(itm => itm.FromPackingCode == fromPackCode && itm.OprType == OprTypeEnum.Other);
|
|
|
|
if (originObj == null)
|
|
|
|
{
|
|
|
|
throw new UserFriendlyException($"[CheckSplitNum]拆箱记录表没有数据:fromPackCode={fromPackCode},OprType={OprTypeEnum.Other}");
|
|
|
|
}
|
|
|
|
var splitLst = lst.Where(itm => itm.FromPackingCode == fromPackCode && itm.OprType == OprTypeEnum.SplitBox);
|
|
|
|
decimal splitSum = splitLst.Sum(itm => itm.ToQty);
|
|
|
|
decimal overplusQty = originObj.FromQty - splitSum;
|
|
|
|
return overplusQty >= inputQty;
|
|
|
|
}
|
|
|
|
|
|
|
|
[HttpPost("batch-insert-test")]
|
|
|
|
public async Task<bool> BatchInsertTestAsync(List<SplitPackingRecEditInput> inputs)
|
|
|
|
{
|
|
|
|
List<SplitPackingRec> lst = ObjectMapper.Map<List<SplitPackingRecEditInput>, List<SplitPackingRec>>(inputs);
|
|
|
|
bool ret = await _splitPackingRecManager.BatchInsertTestAsync(lst).ConfigureAwait(false);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|