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 Utility;
using SqlSugar;
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 UserManager _userManager;
///
/// 构造函数
///
/// 盘点单Svc
/// 盘点记录Svc
/// 库内任务Svc
/// 库内操作日志Svc
/// 库外托盘
/// 解冻\冻结
public BllCheckController(IOptions setting, IStockCheckServer stockCheckSvc, IStockCheckLogServer stockCheckLogSvc, ITaskServer taskSvc, IOperationCRServer logSvc, IWarehouseOutsidePalletsServer stockPallet, IStockFreectSetve freect, UserManager userManager)
{
_config = setting.Value;
_stockCheckSvc = stockCheckSvc;
_stockCheckLogSvc = stockCheckLogSvc;
_taskSvc = taskSvc;
_logSvc = logSvc;
_stockPallet = stockPallet;
_freect = freect;
_userManager = userManager;
}
#region 盘点单据
///
/// 获取盘点单信息
///
///
///
[HttpPost]
public async Task GetStockCheckList(GetStockCheckVm model)
{
RefAsync count = new RefAsync();
var bolls = await _stockCheckSvc.GetStockCheckList(model.CrNo, model.Status, model.PalletNo, model.SkuNo, model.SkuName, model.LotNo, model.StartTime, model.EndTime, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, msg = "盘点单信息", data = bolls });
}
///
/// 获取盘点单明细信息
///
///
///
[HttpPost]
public async Task GetStockCheckDetailList(GetStockCheckVm model)
{
RefAsync count = new RefAsync();
var bolls = await _stockCheckSvc.GetStockCheckDetailList(model.CrNo, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, msg = "盘点单明细信息", data = bolls });
}
///
/// 获取库存明细信息(盘点选择明细数据源)
///
///
///
[HttpPost]
public async Task GetCheckStockDetailList(GetStockDetailVm model)
{
RefAsync count = new RefAsync();
var bolls = await _stockCheckSvc.GetCheckStockDetailList(model.HouseNo, model.RoadwayNo, model.LocateNo, model.Msg, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, msg = "获取库存明细信息", data = bolls });
}
///
/// 获取编辑盘点单据
///
///
///
[HttpGet]
public async Task GetStockCheckDetailById(string crNo)
{
var bolls = await _stockCheckSvc.GetStockCheckDetailById(crNo);
return Ok(new { code = 0, count = 0, msg = "盘点单编辑信息", data = bolls });
}
///
/// 添加/编辑盘点单据
///
///
///
[HttpPost]
[UnitOfWork]
public async Task AddEditStockCheck(AddEditStockCheckVm model)
{
await _stockCheckSvc.AddEditStockCheck(model);
return Ok(new { code = 0, count = 0, msg = "盘点单操作成功", data = "" });
}
///
/// 删除盘点单据
///
///
///
[HttpPost]
[UnitOfWork]
public async Task DelStockCheck(IdVm model)
{
await _stockCheckSvc.DelStockCheck(model.Id);
return Ok(new { code = 0, count = 0, msg = "盘点单删除成功" });
}
///
/// 维护盘点单备注信息
///
///
///
///
[HttpGet]
[UnitOfWork]
public async Task EditNoticeDemo(int id, string demo)
{
await _stockCheckSvc.EditNoticeDemo(id, demo);
return Ok(new { code = 0, msg = "编辑备注成功" });
}
#endregion
#region 盘点记录
///
/// 获取盘点记录
///
///
///
[HttpPost]
public async Task GetStockCheckLogList(GetCheckLogVm model)
{
try
{
RefAsync count = new RefAsync();
var list = await _stockCheckLogSvc.GetStockCheckLogList(model.CrNo, model.Status, model.PalletNo, model.BoxNo, model.SkuNo, model.SkuName, model.LotNo, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, msg = "盘点记录", data = list });
}
catch (Exception e)
{
return Ok(new { code = 1, msg = "盘点记录" + e.Message });
}
}
#endregion
#region 库内任务 及 操作日志
///
/// 获取库内任务信息
///
///
///
[HttpPost]
public async Task GetCrTaskList(GetTaskVm model)
{
try
{
var type = new List() { "2", "3", "4", "6" };
RefAsync count = new RefAsync();
var bolls = await _taskSvc.GetTaskList(type, model.Type, model.Status, model.TaskNo, model.IsSuccess, model.PalletNo, model.Msg, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, msg = "库内任务信息", data = bolls });
}
catch (Exception e)
{
return Ok(new { code = 1, msg = e.Message });
}
}
///
/// 获取库内操作日志信息
///
///
///
[HttpPost]
public async Task GetLogOperationCrList(GetOperationVm model)
{
try
{
RefAsync count = new RefAsync();
var bolls = await _logSvc.GetLogOperationCrList(model.MenuName, model.Type, model.Msg, model.StartTime, model.EndTime, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, 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 async Task 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 = "未获取到当前操作人信息" });
}
await _stockCheckSvc.CancelCheckTask(model.taskNo);
return Ok(new { code = 0, msg = "成功取消任务", data = "" });
}
catch (Exception e)
{
return Ok(new { code = 1, msg = e.Message });
}
}
///
/// 完成出库任务
///
///
///
[HttpPost]
public async Task 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 = "未获取到当前操作人信息" });
}
await _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 async Task GetPalletsOutside(PalletsOutVm model)
{
RefAsync count = new RefAsync();
List mateDataStockDtos = await _stockPallet.GetPalletsOutside(model.SkuNo, model.SkuName, model.LotNo, model.PalletNo, model.Page, model.Limit, count);
return Ok(new { code = 0, count = count.Value, msg = "获取库外托盘信息成功", data = mateDataStockDtos });
}
///
/// 获取库外托盘信息列表
///
///
///
[HttpPost]
public async Task 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 = "未获取到当前操作人信息" });
}
await _stockPallet.SaveAppointSlot(model.StockDetailId, model.LocateId);
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 async Task FinishMoveTask(CheckTaskVm model)
{
try
{
await _stockCheckSvc.MoveSuccess(model.taskNo);
return Ok(new { code = 0, msg = "成功完成任务", data = "" });
}
catch (Exception e)
{
return Ok(new { code = 1, msg = e.Message });
}
}
///
/// 取消AGV移库任务
///
///
///
[HttpPost]
public async Task 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 = "未获取到当前操作人信息" });
}
await _stockCheckSvc.CancelMoveTask(model.taskNo);
return Ok(new { code = 0, msg = "成功取消任务", data = "" });
}
catch (Exception e)
{
return Ok(new { code = 1, msg = e.Message });
}
}
#endregion
#region 冻结\解冻
///
/// 根据类型获取库存信息
///
///
/// 0:获取可冻结库存 1:获取可解冻数据
///
[HttpGet]
public async Task ByTypeGetDataStockType(string SkuNo, int type)
{
try
{
var models = await _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 async Task GetDataFreezeList(FreezeUnfreezeInfoDto model)
{
try
{
var models = await _freect.GetDataFreezeList(model);
return Ok(new
{
data = models,
code = 0,
msg = "获取库存冻结信息成功"
});
}
catch (Exception e)
{
return Ok(new
{
code = 1,
msg = e.Message
});
}
}
///
/// 获取库存解冻信息
///
///
///
[HttpPost]
public async Task GetDataUnFreezeList(FreezeUnfreezeInfoDto model)
{
try
{
var models = await _freect.GetDataUnFreezeList(model);
return Ok(new
{
data = models,
code = 0,
msg = "获取库存解冻信息成功"
});
}
catch (Exception e)
{
return Ok(new
{
code = 1,
msg = e.Message
});
}
}
///
/// 添加冻结\解冻信息
///
///
///
[HttpPost]
public async Task 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 = await _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
}
}