using AutoMapper; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; 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.Erp; using WMS.Web.Core.Dto.Erp.Org; using WMS.Web.Core.Dto.Erp.Supplier; using WMS.Web.Core.Dto.SingleData; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Values; using WMS.Web.Domain.Values.Single; namespace WMS.Web.Api.Controllers { /// /// 系统配置 /// [Route("api/[controller]")] [ApiController] public class SysConfigController : ControllerBase { private readonly ILoginService _loginService; private readonly IBasicsRepositories _basicsRepositories; private readonly IBoxRepositories _boxRepositories; private readonly IErpService _erpService; private readonly ISingleDataService _singleDataService; private readonly ISerialNumbersRepositories _serialNumbersRepositories; private readonly IBoxInventoryRepositories _boxInventoryRepositories; private readonly IMapper _mapper; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; private readonly IOutStockRepositories _outStockRepositories; public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService, ISerialNumbersRepositories serialNumbersRepositories, IBoxInventoryRepositories boxInventoryRepositories, IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService, IOutStockRepositories outStockRepositories) { _loginService = loginService; _basicsRepositories = basicsRepositories; _boxRepositories = boxRepositories; _erpService = erpService; _singleDataService = singleDataService; _serialNumbersRepositories = serialNumbersRepositories; _boxInventoryRepositories = boxInventoryRepositories; _mapper = mapper; _erpBasicDataExtendService = erpBasicDataExtendService; _outStockRepositories = outStockRepositories; } /// /// 获取系统类型所需要下拉列表 /// /// [HttpGet] [Route("GetStatus")] public Task> GetStatus() { EnumStatusResponse response = new EnumStatusResponse(); foreach (OutStockType enumv in Enum.GetValues(typeof(OutStockType))) { response.OutStockType.Add((int)enumv, enumv.GetRemark()); } foreach (MoveBoxType enumv in Enum.GetValues(typeof(MoveBoxType))) { response.MoveBoxType.Add((int)enumv, enumv.GetRemark()); } foreach (TakeStockType enumv in Enum.GetValues(typeof(TakeStockType))) { response.TakeStockType.Add((int)enumv, enumv.GetRemark()); } foreach (InstockType enumv in Enum.GetValues(typeof(InstockType))) { response.InstockType.Add((int)enumv, enumv.GetRemark()); } foreach (InstockStatus enumv in Enum.GetValues(typeof(InstockStatus))) { response.InstockStatus.Add((int)enumv, enumv.GetRemark()); } foreach (BackRecordType enumv in Enum.GetValues(typeof(BackRecordType))) { response.BackRecordType.Add((int)enumv, enumv.GetRemark()); } foreach (InventoryInOutType enumv in Enum.GetValues(typeof(InventoryInOutType))) { response.InventoryInOutType.Add((int)enumv, enumv.GetRemark()); } foreach (OrderType enumv in Enum.GetValues(typeof(OrderType))) { response.OrderType.Add((int)enumv, enumv.GetRemark()); } foreach (ShelfMethod enumv in Enum.GetValues(typeof(ShelfMethod))) { response.ShelfMethod.Add((int)enumv, enumv.GetRemark()); } foreach (FileDownLoadOrderType enumv in Enum.GetValues(typeof(OrderType))) { response.FileDownLoadOrderType.Add((int)enumv, enumv.GetRemark()); } foreach (ExportStatus enumv in Enum.GetValues(typeof(ExportStatus))) { response.ExportStatus.Add((int)enumv, enumv.GetRemark()); } foreach (InventoryInOutMethod enumv in Enum.GetValues(typeof(InventoryInOutMethod))) { response.InventoryInOutMethod.Add((int)enumv, enumv.GetRemark()); } foreach (OutStockStatus enumv in Enum.GetValues(typeof(OutStockStatus))) { response.OutStockStatus.Add((int)enumv, enumv.GetRemark()); } //2 //1 return Task.FromResult(Result.ReSuccess(response)); } /// /// 获取仓库 /// /// 仓库模糊匹配 不必填 /// [HttpGet] [Route("GetUcStock")] public async Task> GetUcStock([FromQuery] string name) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); var r = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), name, loginInfo.UserInfo.CompanyId); return ResultList.ReSuccess(r); } /// /// 获取组织-erp基础数据 /// /// [HttpGet] [Route("GetOrg/{name}")] public async Task> GetOrg([FromRoute] string name) { var orgs_result = await _erpService.BillQueryForOrg(); List pullList = new List(); foreach (var c in orgs_result.Data.Where(w => w.Name.Contains(name))) { pullList.Add(new PullDownStrResponse() { Id = c.Id.ToString(), Name = c.Name, Code = c.Number }); } return ResultList.ReSuccess(pullList); } /// /// 获取供应商-erp基础数据 /// /// [HttpGet] [Route("GetSupplier/{name}")] public async Task> GetSupplier([FromRoute] string name) { var supplier_result = await _erpService.BillQueryForSupplier(); List pullList = new List(); foreach (var c in supplier_result.Data.Where(w => w.Name.Contains(name))) { pullList.Add(new PullDownStrResponse() { Id = c.Id.ToString(), Name = c.Name, Code = c.Number }); } return ResultList.ReSuccess(pullList); } /// /// 根据仓库获取仓位 /// /// 仓库id /// [HttpGet] [Route("GetSubUcStock/{id}")] public async Task>> GetSubUcStock([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 r = await _basicsRepositories.GetSubUcStockAsync(id); return Result>.ReSuccess(r); } /// /// 根据仓库获取金蝶子仓库 /// /// 仓库编码 /// 模糊匹配 /// [HttpGet] [Route("GetErp_SubUcStock/{number}/{orgCode}")] public async Task>> GetErp_SubUcStock([FromRoute] string number, [FromRoute] string orgCode, [FromQuery] string name) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result>.ReFailure(ResultCodes.Token_Invalid_Error); List list = new List(); if (!number.Substring(0, 2).Equals("HD") && !number.Substring(0, 2).Equals("GD")) return Result>.ReSuccess(list); var subs = await _erpService.BillQueryForSubStock(number, orgCode); //var subs = await _erpService.BillQueryForSubStock(null, null); list = subs.Data.Where(w => w.Name.Contains(name)).Select(s => new UcStockResponse() { Id = s.Id, Code = s.Code, Name = s.Name, Disable = false }).ToList();//.Skip(0).Take(10) return Result>.ReSuccess(list); } /// /// 获取出库单客户下拉列表 /// /// 客户名 /// [HttpGet] [Route("GetCustomers/{name}")] public async Task>> GetCustomers([FromRoute] string name) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result>.ReFailure(ResultCodes.Token_Invalid_Error); var customers = await _erpService.BillQueryForCustomer(); var orgs = await _erpService.BillQueryForOrg(); List pullList = new List(); foreach (var c in customers.Data.Where(w => w.Name.Contains(name))) { pullList.Add(new PullDownStrResponse() { Id = "c_" + c.Id, Name = c.Name, Code = c.Number }); } foreach (var o in orgs.Data.Where(w => w.Name.Contains(name))) { pullList.Add(new PullDownStrResponse() { Id = "o_" + o.Id, Name = o.Name, Code = o.Number }); } return Result>.ReSuccess(pullList); } /// /// 获取仓位:模糊名称 /// /// 仓位名称模糊匹配 /// [HttpGet] [Route("GetSubUcStockByName/{name}")] public async Task>> GetSubUcStockByName([FromRoute] string name) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result>.ReFailure(ResultCodes.Token_Invalid_Error); var r = await _basicsRepositories.GetSubUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), name, loginInfo.UserInfo.CompanyId); return Result>.ReSuccess(r); } /// /// 获取仓位:精确名字 /// /// 精确名字 /// [HttpGet] [Route("GetSubUcStockPrecisionByName/{name}")] public async Task> GetSubUcStockPrecisionByName([FromRoute] string name) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); var r = await _basicsRepositories.GetSubUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), name, loginInfo.UserInfo.CompanyId); var subStock = r.FirstOrDefault(f => f.Name.Equals(name)); if (subStock == null) return Result.ReFailure(ResultCodes.NoDateError); return Result.ReSuccess(subStock); } /// /// 根据箱号获取箱信息 /// /// 必填 /// [HttpGet] [Route("GetBox")] public async Task> GetBox([FromQuery] List boxBillNos) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); boxBillNos = boxBillNos.ConvertAll(d => d.ToLower()); var res = await _boxRepositories.GetBox(boxBillNos); var bStrList = res.Select(s => s.BoxBillNo.ToLower()).ToList(); var ex = boxBillNos.Except(bStrList).ToList(); if (ex.Count() > 0) return ResultList.ReFailure("箱号" + JsonConvert.SerializeObject(ex) + "不存在", 800000); return ResultList.ReSuccess(res); } /// /// 根据箱号获取箱信息(综合) /// /// 必填 /// [HttpGet] [Route("GetBoxSynthesis")] public async Task> GetBoxSynthesis([FromQuery] string boxBillNo) { 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 _boxInventoryRepositories.GetInfoBy(boxBillNo); BoxResponse boxResponse = _mapper.Map(result); if (boxResponse != null) { var materials_result = await _erpService.BillQueryForMaterial(); var materials = materials_result.Data.ToList(); foreach (var detail in boxResponse.Details) { detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, detail.MaterialId); detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, detail.MaterialId); detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, detail.MaterialId); } boxResponse.BoxBillNo = boxBillNo; boxResponse.Details = boxResponse.Details.Where(w => w.Qty > 0).ToList(); boxResponse.TotalQty = boxResponse.Details.Sum(s => s.Qty); return Result.ReSuccess(boxResponse); } var res = await _boxRepositories.GetBox(new List() { boxBillNo }); if (res.Count() <= 0) return Result.ReFailure(ResultCodes.BoxNoData); return Result.ReSuccess(res.First()); } /// /// 根据箱号获取箱对应出库单信息 最新一条 /// /// 必填 /// [HttpGet] [Route("GetBox_OutStock")] public async Task> GetBox_OutStock([FromQuery] string boxBillNo) { var res = await _boxRepositories.GetBox(new List() { boxBillNo }); if (res.Count() <= 0) return Result.ReFailure("箱号" + boxBillNo + "不存在", 800000); var response = res[0]; var detail = await _outStockRepositories.GetDetailsByBoxId(response.Id); response.Details = detail; response.TotalQty = detail.Sum(s => s.Qty); return Result.ReSuccess(response); } /// /// 根据序列号或规格型号,物料编码搜索物料信息-PDA /// /// 序列号或规格型号或无聊编码 /// [HttpGet] [Route("GetMaterial")] public async Task> GetMaterial([FromQuery] string serialNumber) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); var res = await _serialNumbersRepositories.GetSerialNumber(serialNumber); if (res == null) return Result.ReFailure(ResultCodes.MateriaNoData); return Result.ReSuccess(res); } } }