using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; using Model.ModelVm; using Model.ModelVm.BllCheckVm; using Model.ModelVm.LogVm; using WMS.IBLL.IBllCheckServer; using WMS.IBLL.ILogServer; using Model.ModelDto.DataDto; using Model.ModelVm.BllSoVm; using Wms.Tools; using System.Collections; using WMS.IBLL.IBllTransServer; namespace Wms.Controllers { [Route("api/[controller]/[action]")] [ApiController] [Authorize] public class BllCheckController : ControllerBase { private readonly ApiUrlConfig _config; //接口交互路径 private readonly IStockCheckServer _stockCheckSvc;//盘点单Svc private readonly IStockCheckLogServer _stockCheckLogSvc;//盘点记录Svc private readonly ITaskServer _taskSvc;//库内任务Svc private readonly IOperationCRServer _logSvc;//库内操作日志Svc private readonly IWarehouseOutsidePalletsServer _stockPallet; //库外托盘 private readonly IStockFreectSetve _freect; //解冻\冻结 private readonly IRcsServer _rcsserver;//RCS相关任务 /// /// 构造函数 /// /// 盘点单Svc /// 盘点记录Svc /// 库内任务Svc /// 库内操作日志Svc /// 库外托盘 /// 解冻\冻结 public BllCheckController(IOptions setting, IStockCheckServer stockCheckSvc, IStockCheckLogServer stockCheckLogSvc, ITaskServer taskSvc, IOperationCRServer logSvc, IWarehouseOutsidePalletsServer stockPallet, IStockFreectSetve freect, IRcsServer rcsserver) { _config = setting.Value; _stockCheckSvc = stockCheckSvc; _stockCheckLogSvc = stockCheckLogSvc; _taskSvc = taskSvc; _logSvc = logSvc; _stockPallet = stockPallet; _freect = freect; _rcsserver = rcsserver; } #region 盘点单据 /// /// 获取盘点单信息 /// /// /// [HttpPost] public IActionResult GetStockCheckList(GetStockCheckVm model) { try { var bolls = _stockCheckSvc.GetStockCheckList(model.CrNo, model.Status, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, 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 }); } } /// /// 获取盘点单明细信息 /// /// /// [HttpPost] public IActionResult GetStockCheckDetailList(GetStockCheckVm model) { try { var bolls = _stockCheckSvc.GetStockCheckDetailList(model.CrNo, 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 GetCheckStockDetailList(GetStockDetailVm model) { try { var bolls = _stockCheckSvc.GetCheckStockDetailList(model.HouseNo, model.RoadwayNo, model.LocateNo, 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 GetStockCheckDetailById(string crNo) { try { var bolls = _stockCheckSvc.GetStockCheckDetailById(crNo); return Ok(new { code = 0, count = 0, msg = "盘点单编辑信息", data = bolls }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 添加/编辑盘点单据 /// /// /// [HttpPost] public IActionResult AddEditStockCheck(AddEditStockCheckVm 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 = "未获取到当前操作人信息" }); } _stockCheckSvc.AddEditStockCheck(model, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "盘点单操作成功", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = "操作失败" + e.Message }); } } /// /// 删除盘点单据 /// /// /// [HttpPost] public IActionResult DelStockCheck(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 = "未获取到当前操作人信息" }); } _stockCheckSvc.DelStockCheck(model.Id, int.Parse(userId)); return Ok(new { code = 0, count = 0, 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("未获取到用户信息"); } _stockCheckSvc.EditNoticeDemo(id, demo, int.Parse(userId)); return Ok(new { code = 0, msg = "编辑备注成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 盘点记录 /// /// 获取盘点记录 /// /// /// [HttpPost] public IActionResult GetStockCheckLogList(GetCheckLogVm model) { try { var list = _stockCheckLogSvc.GetStockCheckLogList(model.CrNo, model.Status, model.PalletNo, model.BoxNo, model.SkuNo, model.SkuName, model.LotNo, model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "盘点记录", data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = "盘点记录" + e.Message }); } } #endregion #region 库内任务 及 操作日志 /// /// 获取库内任务信息 /// /// /// [HttpPost] public IActionResult GetCrTaskList(GetTaskVm model) { try { var type = new List() { "2", "3", "4" }; 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 }); } } /// /// 获取库内操作日志信息 /// /// /// [HttpPost] public IActionResult GetLogOperationCrList(GetOperationVm model) { try { var bolls = _logSvc.GetLogOperationCrList(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 }); } } /// /// 重新下发盘点出库任务 /// /// /// [HttpPost] public IActionResult AgainSendCheckTask(CheckTaskVm 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 = "未获取到当前操作人信息" }); } _stockCheckSvc.AgainSendCheckTask(model.taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl); return Ok(new { code = 0, msg = "成功下发任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 取消盘点出库任务 /// /// /// [HttpPost] public IActionResult CancelCheckTask(CheckTaskVm 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 = "未获取到当前操作人信息" }); } _stockCheckSvc.CancelCheckTask(model.taskNo, int.Parse(userId)); return Ok(new { code = 0, msg = "成功取消任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 完成出库任务 /// /// /// [HttpPost] public IActionResult FinishCheckTask(CheckTaskVm 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 = "未获取到当前操作人信息" }); } _stockCheckSvc.CheckSuccess(model.taskNo, 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 GetPalletsOutside(PalletsOutVm model) { List mateDataStockDtos = _stockPallet.GetPalletsOutside(model.SkuNo, model.SkuName, model.LotNo, model.PalletNo, model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "获取库外托盘信息成功", data = mateDataStockDtos }); } /// /// 获取库外托盘信息列表 /// /// /// [HttpPost] public IActionResult SaveAppointSlot(SaveAppointSlotVm 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 = "未获取到当前操作人信息" }); } _stockPallet.SaveAppointSlot(model.StockDetailId,model.LocateId, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "指定储位成功", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = "操作失败" + e.Message }); } } #endregion #region AGV转运 /// /// AGV移库完成 /// /// /// [HttpPost] public IActionResult FinishMoveTask(CheckTaskVm 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 = "未获取到当前操作人信息" }); } _stockCheckSvc.MoveSuccess(model.taskNo, int.Parse(userId)); return Ok(new { code = 0, msg = "成功完成任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 取消AGV移库任务 /// /// /// [HttpPost] public IActionResult CancelMoveTask(CheckTaskVm 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 = "未获取到当前操作人信息" }); } _rcsserver.CancelTask(model.taskNo, int.Parse(userId)); return Ok(new { code = 0, msg = "成功取消任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 冻结\解冻 /// /// 根据类型获取库存信息 /// /// /// 0:获取可冻结库存 1:获取可解冻数据 /// [HttpGet] public IActionResult ByTypeGetDataStockType(string SkuNo,int type) { try { var models = _freect.ByTypeGetDataStockType(SkuNo,type); return Ok(new { data = models, code = 0, msg = "获取库存信息成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取库存冻结信息 /// /// /// [HttpPost] public IActionResult GetDataFreezeList(FreezeUnfreezeInfoDto model) { try { var models = _freect.GetDataFreezeList(model); return Ok(new { data = models, code = 0, msg = "获取库存冻结信息成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 获取库存解冻信息 /// /// /// [HttpPost] public IActionResult GetDataUnFreezeList(FreezeUnfreezeInfoDto model) { try { var models = _freect.GetDataUnFreezeList(model); return Ok(new { data = models, code = 0, msg = "获取库存解冻信息成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 添加冻结\解冻信息 /// /// /// [HttpPost] public IActionResult InsertDataFreezeInfo(FreezeUnfreezeInfoDto model) { 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("未获取到用户信息"); } model.CreateUser = int.Parse(UserId); string strMesage = _freect.InsertDataFreezeInfo(model); //var arr = strMesage.Split(':'); if (!strMesage.Contains("-1")) { return Ok(new { code = 0, msg = "添加成功" }); } else if (strMesage.Contains("-1")) { return Ok(new { code = 1, msg = strMesage }); } else { return Ok(new { code = 1, msg = strMesage }); } } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region 数据归档 /// /// 获取盘点单信息-数据归档 /// /// /// [HttpPost] public IActionResult GetArchivingStockCheckList(GetStockCheckVm model) { try { var bolls = _stockCheckSvc.GetArchivingStockCheckList(model.CrNo, model.Status, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, 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 }); } } /// /// 获取盘点单明细信息-数据归档 /// /// /// [HttpPost] public IActionResult GetArchivingStockCheckDetailList(GetStockCheckVm model) { try { var bolls = _stockCheckSvc.GetArchivingStockCheckDetailList(model.CrNo, 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 GetArchivingStockCheckLogList(GetCheckLogVm model) { try { var list = _stockCheckLogSvc.GetArchivingStockCheckLogList(model.CrNo, model.Status, model.PalletNo, model.BoxNo, model.SkuNo, model.SkuName, model.LotNo, model.Page, model.Limit, out int count); return Ok(new { code = 0, count, msg = "盘点记录", data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = "盘点记录" + e.Message }); } } #endregion } }