using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using WMS.Web.Core; using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.InStockTask; using WMS.Web.Core.Help; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Options; using WMS.Web.Domain.Values; namespace WMS.Web.Api.Controllers { /// /// 入库任务单-接口 /// [Route("api/[controller]")] [ApiController] public class InStockTaskController : ControllerBase { private readonly QiniuOptions _option; private readonly IExportExcelService _exportExcelService; private readonly ILoginService _loginService; private readonly IInStockService _inStockService; private readonly IInStockTaskService _inStockTaskService; private readonly IInStockTaskRepositories _inStockTaskRepositories; private readonly IInventoryDetailsRepositories _inventoryDetailsRepositories; private readonly IInStockRepositories _inStockRepositories; public InStockTaskController( IInStockRepositories inStockRepositories, IOptions option, IExportExcelService exportExcelService, ILoginService loginService, IInStockTaskService inStockTaskService, IInStockTaskRepositories inStockTaskRepositories, IInventoryDetailsRepositories inventoryDetailsRepositories, IInStockService inStockService) { _inStockRepositories = inStockRepositories; _inventoryDetailsRepositories = inventoryDetailsRepositories; this._option = option?.Value; this._exportExcelService = exportExcelService; this._loginService = loginService; this._inStockService = inStockService; this._inStockTaskService = inStockTaskService; this._inStockTaskRepositories = inStockTaskRepositories; } /// /// 列表 /// /// /// [HttpPost] [Route("GetList")] public async Task> GetPagedList([FromBody] InStockTaskQueryRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error); var (list,total) = await _inStockTaskRepositories.GetPagedList(dto,loginInfo.UserInfo.CompanyId); return ResultPagedList.ReSuccess(list, total); } /// /// 导出 /// /// /// [HttpPost] [Route("Export")] public Task> Export([FromBody] InStockTaskQueryRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null) return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error)); string fileName = FileDownLoadOrderType.InStockTask.GetRemark() + loginInfo.UserInfo.CompanyId + DateTime.Now.DateTimeToLongTimeStamp() + ".xlsx"; string res = _option.Url + fileName; Task.Run(async () => { await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.StaffId, loginInfo.UserInfo.CompanyId, FileDownLoadOrderType.InStockTask); }); return Task.FromResult(Result.ReSuccess(res)); } /// /// 作废 /// /// /// [HttpPost] [Route("Repeal")] public async Task Repeal([FromBody]OperateRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); return await _inStockTaskService.Repeal(dto, loginInfo); } /// /// 反作废 /// /// /// [HttpPost] [Route("NoRepeal")] public async Task NoRepeal([FromBody] OperateRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); return await _inStockTaskService.NoRepeal(dto, loginInfo); } /// /// 金蝶-拉取数据-测试用 /// /// /// [HttpGet] [Route("Test")] public async Task Test([FromQuery] string sourceBillNo) { var sbns = new List(); sbns.Add(sourceBillNo); //2.同步金蝶 // return await _inStockTaskService.Sysn(sbns); return await _inStockTaskService.Sysn(null);//alter by yzh } /// /// 刷新 /// /// /// [HttpPost] [Route("Refresh")] public async Task Refresh([FromBody] OperateRequest dto) { //去重 var ids = dto.Ids.GroupBy(x => x).Select(x=>x.Key).ToList(); //1.先找到任务单-并找到来源单集 var tasks= await _inStockTaskRepositories.GetList(ids); var sourcesBillNos = tasks.Select(x => x.SourceBillNo).ToList(); //2.同步金蝶 await _inStockTaskService.Sysn(sourcesBillNos); ////再刷新 return await _inStockTaskService.Sysn(null); } /// /// 收货-pad /// /// /// [HttpPost] [Route("Receive")] public async Task Receive([FromBody] UpdateInStockTaskRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); return await _inStockService.Receive(dto, loginInfo); } /// /// 来源单-编号模糊查询-采购上架使用-pad /// /// 来源单号 /// [HttpGet] [Route("GetSourceOrder/{sourceBillNo}")] public async Task> GetSourceOrder([FromRoute] string sourceBillNo) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); ////将传过来的sourceBillNo进行分割 //string[] s=sourceBillNo.Split('&'); //sourceBillNo=s[0]; //string type=s[1]; var list = await _inStockTaskRepositories.GetListBy(new InStockTaskBillNoQueryRequest() { SourceBillNo = sourceBillNo}); //获取物料对应的仓位 var materialNumbers = list.GroupBy(x => x.MaterialNumber).Select(x => x.Key).ToList(); var stockCodes = list.GroupBy(x => x.StockCode).Select(x => x.Key).ToList(); var orgCodes = list.GroupBy(x => x.OrgCode).Select(x => x.Key).ToList(); var materialSubStocks= await _inventoryDetailsRepositories.GetMaterialSubStocks(materialNumbers, stockCodes, orgCodes, loginInfo.UserInfo.CompanyId); list.ForEach(x => { x.MaterialSubStocks = materialSubStocks.Where(t => t.MaterialNumber == x.MaterialNumber && t.StockCode == x.StockCode && t.OrgCode == x.OrgCode).Select(x => x.SubStock).ToList(); }); ////排除待入库数量为0的 //var result= list.Where(x => x.WaitSlefQty != 0).ToList(); return ResultList.ReSuccess(list); } /// /// 来源单-已收货未入库的箱集合-采购上架使用-pad /// /// /// [HttpGet] [Route("GetReceiveBox/{taskId}")] public async Task> GetReceiveBox([FromRoute] int taskId) { //找到收货的箱子 var receiveBoxList= await _inStockTaskRepositories.GetReceiveBox(taskId); //找到已入库的箱子 var instockBoxList= await _inStockRepositories.GetInstockBox(taskId); var remobox = new List(); if (receiveBoxList.Count!=0 && instockBoxList.Count != 0) { //剔除已入库的箱子 foreach (var boxid in instockBoxList.Distinct().ToList()) { var reBox= receiveBoxList.Where(x => x.BoxId == boxid).FirstOrDefault(); if (reBox != null) remobox.Add(reBox); } } if (remobox.Count != 0) { foreach (var item in remobox) { receiveBoxList.Remove(item); } } return ResultList.ReSuccess(receiveBoxList); } /// /// 来源单-已收货未入库的箱集合-采购上架使用-pad-post /// /// /// [HttpPost] [Route("GetReceiveBox")] public async Task> GetReceiveBox([FromBody] ReceiveBoxRequeset dto) { //找到收货的箱子 var receiveBoxList = await _inStockTaskRepositories.GetReceiveBox(dto.TaskId, dto.MaterialNumber); //找到已入库的箱子 var instockBoxList = await _inStockRepositories.GetInstockBox(dto.TaskId); var remobox = new List(); if (receiveBoxList.Count != 0 && instockBoxList.Count != 0) { //剔除已入库的箱子 foreach (var boxid in instockBoxList.Distinct().ToList()) { var reBox = receiveBoxList.Where(x => x.BoxId == boxid).FirstOrDefault(); if (reBox != null) remobox.Add(reBox); } } if (remobox.Count != 0) { foreach (var item in remobox) { receiveBoxList.Remove(item); } } return ResultList.ReSuccess(receiveBoxList); } /// /// 来源单-编号模糊查询-非采购上架使用-pad /// /// /// [HttpPost] [Route("GetSourceOrderNoPurchase")] public async Task> GetSourceOrderNoPurchaseBy([FromBody] InStockTaskBillNoQueryRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); var list = await _inStockTaskRepositories.GetListInfoBy(dto); //获取物料对应的仓位 var materialNumbers = list.SelectMany(x=>x.Details).GroupBy(x => x.MaterialNumber).Select(x => x.Key).ToList(); var stockCodes = list.SelectMany(x => x.Details).GroupBy(x => x.StockCode).Select(x => x.Key).ToList(); var orgCodes = list.SelectMany(x => x.Details).GroupBy(x => x.OrgCode).Select(x => x.Key).ToList(); var materialSubStocks = await _inventoryDetailsRepositories.GetMaterialSubStocks(materialNumbers, stockCodes, orgCodes, loginInfo.UserInfo.CompanyId); list.SelectMany(x=>x.Details).ToList().ForEach(x => { x.MaterialSubStocks = materialSubStocks.Where(t => t.MaterialNumber == x.MaterialNumber && t.StockCode==x.StockCode && t.OrgCode == x.OrgCode).Select(x => x.SubStock).ToList(); }); foreach(var l in list) { l.WaitShelfQty = l.Details.Sum(s => s.WaitShelfQty); } return ResultList.ReSuccess(list); } /// /// 校准-来源单-采购上架使用-对应金蝶-pad /// /// /// [HttpGet] [Route("Adjust/{sourceBillNo}")] public async Task> Adjust([FromRoute] string sourceBillNo) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); //校准 var result= await _inStockTaskService.Adjust(sourceBillNo); if(!result.IsSuccess) return ResultList.ReFailure(result); //再一次查询新的数据:并返回最后的结果 var request = new InStockTaskBillNoQueryRequest() { SourceBillNo = sourceBillNo }; var list = await _inStockTaskRepositories.GetListBy(request); return ResultList.ReSuccess(list); } /// /// 校准-来源单-非采购上架使用-对应金蝶-pad /// /// /// [HttpPost] [Route("AdjustNoPurchase")] public async Task> AdjustNoPurchaseBy([FromBody] InStockTaskBillNoQueryRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); //校准 var result = await _inStockTaskService.Adjust(dto.SourceBillNo); if (!result.IsSuccess) return ResultList.ReFailure(result); //再一次查询新的数据:并返回最后的结果 var request = new InStockTaskBillNoQueryRequest() { SourceBillNo = dto.SourceBillNo,StockCode=dto.StockCode }; var list = await _inStockTaskRepositories.GetListInfoBy(request); return ResultList.ReSuccess(list); } /// /// 采购订单物料明细和箱物料明细-对比-pad /// /// /// [HttpPost] [Route("Contrast")] public async Task> Contrast([FromBody] ContrastMaterialsRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); var result = await _inStockService.Contrast(dto); return result; } /// /// 入库任务单详情 /// /// /// [HttpGet] [Route("GetInfo/{id}")] public async Task> GetInfo([FromRoute] int id) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); var info= await _inStockTaskRepositories.GetInfo(id, loginInfo.UserInfo.CompanyId); return Result.ReSuccess(info); } } }