using System; using System.Security.Claims; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Model.ModelVm.PdaVm; using Newtonsoft.Json; using Utility.Tools; using WMS.Entity.SysEntity; using WMS.IBLL.IPdaServer; using WmsApi.Tools; namespace WmsApi.Controllers { [Route("api/[controller]/[action]")] [ApiController] [Authorize] public class PdaSoController : ControllerBase { #region 依赖注入 private readonly IPdaSoServer _pdaSoSvc; private readonly ApiUrlConfig _config; //接口交互路径 public PdaSoController(IPdaSoServer pdaSoSvc, IOptions setting) { _pdaSoSvc = pdaSoSvc; _config = setting.Value; } #endregion /// /// 判断托盘是否可用 /// /// PalletNo:托盘条码 /// [HttpPost] public IActionResult IsEnableOkPalletNo(PdaSoVm model) { try { var strMsg = _pdaSoSvc.IsEnableOkPalletNo(model.PalletNo); if (strMsg == "") { return Ok(new { code = 0, msg = "托盘可用!" }); } else { return Ok(new { code = 1, msg = strMsg }); } } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取单据列表 /// /// PalletNo:托盘号 /// [HttpPost] public IActionResult GetRunSoNoticeList(PdaSoVm model) { try { var list = _pdaSoSvc.GetRunSoNoticeList(model.PalletNo); return Ok(new { code = 0, msg = "出库单信息", data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取物料-批次信息 /// /// PalletNo:托盘码、SoNo:单据号 /// [HttpPost] public IActionResult GetSoSkuLotNoListByPallet(PdaSoVm model) { try { var models = _pdaSoSvc.GetSoSkuLotNoListByPallet(model.PalletNo,model.SoNo); return Ok(new { code = 0, msg = "物料-批次信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取出库口、规格、待拣及已拣数量(根据出库单明细ID、托盘号) /// /// SoDetailId:出库单明细ID、PalletNo:托盘码 /// [HttpPost] public IActionResult GetOutlets(PdaSoVm model) { try { var models = _pdaSoSvc.GetOutlets(model.SoDetailId,model.PalletNo); return Ok(new { code = 0, msg = "托盘上物料等信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取出库单的计划数量和完成 /// /// SoDetailId:出库单明细ID /// [HttpPost] public IActionResult GetPlanAndFinishQty(PdaSoVm model) { try { var models = _pdaSoSvc.GetPlanAndFinishQty(model.SoDetailId); return Ok(new { code = 0, msg = "出库单明细数量信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取箱码信息(根据箱码在库存箱码明细中查询) /// /// BoxNo:箱码号 /// [HttpPost] public IActionResult GetBoxInfo(PdaSoVm model) { try { var models = _pdaSoSvc.GetBoxInfo(model.BoxNo, model.BoxNo2, model.BoxNo3); return Ok(new { code = 0, msg = "箱码信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取托盘拣货明细的信息 /// /// SoDetailId:出库单明细ID、PalletNo:托盘码 /// [HttpPost] public IActionResult GetComDetailByPalletNo(PdaSoVm model) { try { var models = _pdaSoSvc.GetComDetailByPalletNo(model.PalletNo,model.SoDetailId); return Ok(new { code = 0, msg = "箱码信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 出库pda拣货 /// /// SoDetailId:出库单明细ID、PalletNo:托盘码 /// [HttpPost] public IActionResult SoSetPick(PdaSoVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _pdaSoSvc.SoSetPick(model.SoNo, model.SoDetailId,model.PalletNo,model.PickQty, int.Parse(userId)); return Ok(new { code = 0, msg = "拣货完成", data ="" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// pda申请空托出库 /// /// 物料 /// [HttpPost] public IActionResult SoPallet(SysMaterials mate) { try { //记录log var logStr = $@".\log\WCS\Pda申请空托盘"+_config.WcsHost + _config.IssueComApiUrl + DateTime.Now.ToString("yyyyMMdd") + ".txt"; LogFile.SaveLogToFile($"WCS申请空托盘物料号:( {mate.SkuNo} ),", logStr); //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } //获取空托盘所在库位 var list = _pdaSoSvc.PalletLocation(mate.SkuNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl,mate.Origin); return Ok(new { Success = "0", Message = list == null ? "任务已申请!" : "", TaskList = list }); } catch (Exception e) { return Ok(new { Success = -1, Message = e.Message }); } } } }