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.

161 lines
6.8 KiB

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;
}
12 months ago
/// <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;
}
12 months ago
/// <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;
}
12 months ago
/// <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);
11 months ago
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;
}
}