using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Security.Claims; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; using Model.ModelVm; using Model.ModelVm.BllSoVm; using Model.ModelVm.LogVm; using WMS.IBLL.IBllSoServer; using WMS.IBLL.ILogServer; using Wms.Tools; namespace Wms.Controllers { [Route("api/[controller]/[action]")] [ApiController] [Authorize] public class BllSoController : ControllerBase { /// /// 依赖注入 /// private readonly ApiUrlConfig _config; //接口交互路径 private readonly IExportNoticeServer _exNoticeSvc;//出库单Svc private readonly IExportNoticeDetailServer _exNoticeDetailSvc;//出库单明细Svc private readonly IExportAllotServer _exAllotSvc;//出库分配Svc private readonly ICompleteDetailServer _comDetailSvc;//出库拣货明细Svc private readonly ITaskServer _taskSvc;//出库任务Svc private readonly IOperationSOServer _logSvc;//出库操作日志Svc public BllSoController(IOptions setting, IExportNoticeServer exNoticeSvc, IExportNoticeDetailServer exNoticeDetailSvc, IExportAllotServer exAllotSvc, ICompleteDetailServer comDetailSvc, ITaskServer taskSvc, IOperationSOServer logSvc) { _config = setting.Value; _exNoticeSvc = exNoticeSvc; _exNoticeDetailSvc = exNoticeDetailSvc; _exAllotSvc = exAllotSvc; _comDetailSvc = comDetailSvc; _taskSvc = taskSvc; _logSvc = logSvc; } #region 出库单管理 /// /// 获取出库单信息 /// /// /// [HttpPost] public IActionResult GetExportNoticeList(GetExportNoticeVm model) { try { var bolls = _exNoticeSvc.GetExportNoticeList(model.No, model.Type, model.Status,model.LotNo,model.LogisticsId,model.IsWave,model.IsDespatch,model.WaveNo, model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "出库单信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取添加或修改出库单明细所显示的库存数据源 /// /// /// [HttpPost] public IActionResult GetStockGroupList(GetStockGroupVm model) { try { var bolls = _exNoticeSvc.GetStockGroupList(model.Type,model.OwnerNo,model.Msg); return Ok(new { code = 0, count=0, msg = "出库单信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 添加出库单 /// /// /// [HttpPost] public IActionResult AddExportNotice(AddEditExportNoticeVm 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.AddExportNotice(model,int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "添加出库单成功", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取编辑出库单据 /// /// /// [HttpGet] public IActionResult GetEditExportNotice(string soNo) { try { var bolls = _exNoticeSvc.GetEditExportNotice(soNo); return Ok(new { code = 0, count = 0, msg = "出库单编辑信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 编辑出库单据 /// /// /// [HttpPost] public IActionResult EditExportNotice(AddEditExportNoticeVm 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.EditExportNotice(model,int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "出库单编辑成功", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = "编辑失败"+e.Message }); } } /// /// 删除出库单据 /// /// /// [HttpPost] public IActionResult DelExportNotice(IdVm 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.DelExportNotice(model.Id, int.Parse(userId)); if (bolls) { return Ok(new { code = 0, count = 0, msg = "出库单删除成功" }); } else { return Ok(new { code = 1, msg = "删除失败" }); } } catch (Exception e) { return Ok(new { code = 1, msg = "删除失败" + e.Message }); } } /// /// 添加出库xml /// /// /// [HttpPost] [AllowAnonymous] public IActionResult AddExXmlStr(IdVm 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.AddExXmlStr(model.Id, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "生成出库单Xml", data= bolls.InnerXml.ToString() }); } catch (Exception e) { return Ok(new { code = 1, msg = "删除失败" + e.Message }); } } #endregion #region 出库单明细管理 /// /// 获取出库单明细信息 /// /// /// [HttpPost] public IActionResult GetExportNoticeDetailList(GetExportNoticeDetailVm model) { try { var bolls = _exNoticeDetailSvc.GetExportNoticeDetailList(model.SoNo, model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "出库单明细信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 删除出库单据明细 /// /// /// [HttpPost] public IActionResult DelExportNoticeDetail(IdVm 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeDetailSvc.DelExportNoticeDetail(model.Id, int.Parse(userId)); if (bolls) { return Ok(new { code = 0, count = 0, msg = "出库单明细删除成功" }); } else { return Ok(new { code = 1, msg = "删除失败" }); } } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 出库分配 /// /// 出库单据自动分配 /// /// 出库单号 /// [HttpGet] public IActionResult ExportAutoAllot(string soNo) { 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.AutoAllot(soNo, int.Parse(userId)); if (bolls) { return Ok(new { code = 0, count = 0, msg = "分配成功" }); } else { return Ok(new { code = 1, msg = "分配失败" }); } } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 取消出库单据分配 /// /// 出库单号 /// [HttpGet] public IActionResult ExportCancelAllot(string soNo) { 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 = "未获取到当前操作人信息" }); } var bolls = _exNoticeSvc.CancelAllot(soNo, int.Parse(userId)); if (bolls) { return Ok(new { code = 0, count = 0, msg = "取消分配成功" }); } else { return Ok(new { code = 1, msg = "取消分配失败" }); } } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 维护出库单备注信息 /// /// /// /// [HttpGet] public IActionResult EditNoticeDemo(int id, string demo) { try { var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { throw new Exception("未获取到用户信息"); } string userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { throw new Exception("未获取到用户信息"); } _exNoticeSvc.EditNoticeDemo(id, demo, int.Parse(userId)); return Ok(new { code = 0, msg = "编辑备注成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取库存明细信息(出库单手动分配选择数据源) /// /// /// [HttpPost] public IActionResult GetHandOutList(GetHandOutVm model) { try { var list = _exNoticeSvc.GetHandOutList(model.DetailId,model.HouseNo,model.RoadwayNo,model.LocateNo,model.Msg,model.PalletNo); return Ok(new { code = 0, count = list.Count, msg = "获取库存明细信息", data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 手动分配出库单明细 /// /// /// [HttpPost] public IActionResult AddHandOutAllot(AddHandOutVm 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 = "未获取到当前操作人信息" }); } _exNoticeSvc.AddHandOutAllot(model, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "手动分配成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取出库分配信息 /// /// /// [HttpPost] public IActionResult GetExportAllotList(GetExportAllotVm model) { try { var bolls = _exAllotSvc.GetExportAllotList(model.SoNo, model.WaveNo, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, model.Status,model.BoxNo, model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "出库分配信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 删除出库单据分配的单条分配信息 /// /// /// [HttpPost] public IActionResult DelExportAllot(IdVm 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 = "未获取到当前操作人信息" }); } _exAllotSvc.DelExportAllot(model.Id, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "取消分配成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 拣货明细 /// /// 获取拣货明细信息 /// /// /// [HttpPost] public IActionResult GetCompleteDetailList(GetCompleteDetailVm model) { try { var bolls = _comDetailSvc.GetCompleteDetailList(model.Id,model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "拣货明细信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } [HttpGet] public IActionResult GetCompBoxInfoList( string boxNo,string boxNo3) { try { var bolls = _comDetailSvc.GetCompBoxInfoList(boxNo, boxNo3); return Ok(new { code = 0, count = bolls.Count, msg = "拣货明细信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 托盘出库 /// /// 获取托盘出库数据 /// /// /// [HttpPost] public IActionResult GetPalletNoOutList(GetPalletNoOutVm model) { try { var bolls = _exNoticeSvc.GetPalletNoOutList(model.SkuNo,model.SkuName,model.PalletNo,model.LotNo,model.InspectMark,model.BitPalletMark,model.Page,model.Limit,out int count); return Ok(new { code = 0, count, msg = "获取托盘出库数据异常", data = bolls}); } catch (Exception e) { return Ok(new { code = 1, msg = "托盘出库数据" + e.Message }); } } /// /// 指令下发(出库) /// /// /// /// [HttpGet] public IActionResult IssuePalletNoOut(string palletNo, string outMode) { 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 = "未获取到当前操作人信息" }); } //验证出库口 //if (string.IsNullOrWhiteSpace(outMode)) //{ // return Ok(new { code = 1, msg = "请选择出库口" }); //} var list = _exNoticeSvc.IssuePalletNoOut(palletNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); return Ok(new { code = 0, msg = str, data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 出库任务 /// /// 获取出库任务信息 /// /// /// [HttpPost] public IActionResult GetExportTaskList(GetTaskVm model) { try { var type = new List(){"1"}; var bolls = _taskSvc.GetTaskList( type, model.Type,model.Status,model.TaskNo,model.IsSuccess,model.PalletNo,model.Msg,model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "出库任务信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 取消出库任务 /// /// /// [HttpGet] public IActionResult ExportCancelTask(string taskNo) { 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 = "未获取到当前操作人信息" }); } _exNoticeSvc.CancelSoTask(taskNo, int.Parse(userId)); return Ok(new { code = 0, msg = "取消任务已完成", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 完成出库任务 /// /// /// [HttpGet] public IActionResult ExportFinishTask(string taskNo) { 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 = "未获取到当前操作人信息" }); } var type = _taskSvc.GetTaskType(taskNo); if (type == "1")//出库完成 { _exNoticeSvc.ExportSuccess(taskNo, int.Parse(userId), ""); } else if (type == "2")//出库时产生的移库任务完成 { _exNoticeSvc.RelocationSuccess(taskNo, int.Parse(userId)); } else { return Ok(new { code = 1, msg = "任务类型错误,请核实!" }); } return Ok(new { code = 0, msg = "成功完成任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 下发出库任务 /// /// 任务号 /// [HttpGet] public IActionResult AgainSendSoTask(string taskNo, string Receiver) { 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 = "未获取到当前操作人信息" }); } _exNoticeSvc.AgainSendSoTask(taskNo,Receiver, int.Parse(userId),""); return Ok(new { code = 0, msg = "成功下发任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 出库操作日志 /// /// 获取出库操作日志信息 /// /// /// [HttpPost] public IActionResult GetLogOperationSoList(GetOperationVm model) { try { var bolls = _logSvc.GetLogOperationSoList(model.MenuName, model.Type, model.Msg, model.StartTime, model.EndTime,model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "出库操作日志信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion /// /// 判断出库是否需要拆箱 /// /// /// [HttpGet] public IActionResult IsNeedUnpack(string soNo) { try { string result = _exNoticeSvc.IsNeedUnpack(soNo); return Ok(new { code = 0, data = result, msg = "成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } } }