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; namespace Win_in.Sfs.Basedata.Application; /// /// 拆箱记录 /// [Authorize] [Route($"{BasedataConsts.RootPath}split-packing-rec")] public class SplitPackingRecAppService : SfsBaseDataAppServiceBase , ISplitPackingRecAppService { private readonly ISplitPackingRecManager _splitPackingRecManager; public SplitPackingRecAppService(ISplitPackingRecRepository repository ,ISplitPackingRecManager splitPackingRecManager ,IDistributedCache cache ) : base(repository, cache) { base.CreatePolicyName = StdCostPriceSheetPermissions.Create; base.UpdatePolicyName = StdCostPriceSheetPermissions.Update; base.DeletePolicyName = StdCostPriceSheetPermissions.Delete; _splitPackingRecManager = splitPackingRecManager; } [HttpPost("batch-insert")] public async Task BatchInsertAsync(List inputs) { List lst = ObjectMapper.Map, List>(inputs); bool ret = await _splitPackingRecManager.BatchInsertAsync(lst).ConfigureAwait(false); return ret; } /// /// 获取顶级箱码 /// /// 目标箱码列表 /// [HttpGet("get-top-packing-code")] public async Task GetTopPackingCode(string toPackingCode) { var entity = await _splitPackingRecManager.GetTopPackingCode(toPackingCode).ConfigureAwait(false); SplitPackingRecDTO dto = ObjectMapper.Map(entity); return dto; } /// /// 获取拆箱记录 /// /// 目标箱码列表 /// [HttpGet("get-split-packing-code")] public async Task GetSplitPackingCode(string toPackingCode) { var entity = await _splitPackingRecManager.GetSplitPackingCode(toPackingCode).ConfigureAwait(false); SplitPackingRecDTO dto = ObjectMapper.Map(entity); return dto; } /// /// 取每个目标箱码的最后一条拆箱记录 /// /// 目标箱码列表 /// [HttpGet("by-to-packing-code")] public async Task> GetListByToPackingCode(List toPackingCodeList) { var lst = await _splitPackingRecManager.GetListByToPackingCode(toPackingCodeList).ConfigureAwait(false); List ret = ObjectMapper.Map, List>(lst); return ret; } /// /// 取每个目标箱码的最后一条拆箱记录 /// /// 目标箱码列表 /// [HttpGet("get-first-or-default-packing-code")] public async Task> GetFirstOrDefaultPackingCode(List toPackingCodeList) { var lst = await _splitPackingRecManager.GetFirstOrDefaultPackingCode(toPackingCodeList).ConfigureAwait(false); List ret = ObjectMapper.Map, List>(lst); return ret; } /// /// 取每个源标箱码的“操作状态=其它”的拆箱记录 /// /// 源标箱码列表 /// [HttpGet("by-from-packing-code")] public async Task> GetListByFromPackingCode(List fromPackingCodeList) { var lst = await _splitPackingRecManager.GetListByFromPackingCode(fromPackingCodeList).ConfigureAwait(false); List ret = ObjectMapper.Map, List>(lst); return ret; } /// /// 根据to箱码取所有具有相同箱码的拆箱记录 /// /// /// [HttpGet("get-same-ponumber-list-by-topackingcode")] public async Task> GetSamePoNumberListByToPackingCode(string toPackingCode) { List ret = new List(); 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>(lst); ret = ret.OrderByDescending(itm => itm.CreationTime).ToList(); return ret; } /// /// /// /// from箱码 /// 数量 /// [HttpGet("check-split-num")] public async Task 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; } }