using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using WaterCloud.Code;
using WaterCloud.Domain.MaterialManage;
using WaterCloud.Service.MaterialManage;
using WaterCloud.Service.SystemSecurity;
namespace WaterCloud.Web.Controllers
{
///
/// 出库接口
///
[Route("api/[controller]/[action]")]
[ApiController]
[ServiceFilter(typeof(LoginFilterAttribute))]
public class OutStorageController : ControllerBase
{
//自动注入服务
public LogService _logService { get; set; }
public OutStorageService _service { get; set; }
#region 获取数据
///
/// 获取作业出库单列表
///
/// 关键字
///
[HttpGet]
public async Task GetOutStorageList([FromQuery] string keyword)
{
var data = await _service.GetList(keyword);
data = data.Where(a => a.F_EnabledMark == true && a.F_OutStorageState < 3 && a.F_OutStorageState > 0 && a.F_Num != a.F_DoneNum).ToList();
return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count };
}
///
/// 获取装箱出库单列表
///
/// 关键字
///
[HttpGet]
public async Task GetOutStorageBandingList([FromQuery] string keyword)
{
var data = await _service.GetList(keyword);
data = data.Where(a => a.F_EnabledMark == true && a.F_OutStorageState < 3 && a.F_OutStorageState > 0 && a.F_DoneNum>0).ToList();
return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count };
}
///
/// 获取出库单根据关键字
///
/// 关键字
///
[HttpGet]
public async Task GetOutStorageByCode([FromQuery] string keyword)
{
var data = await _service.GetOutStorageByCode(keyword);
return new AlwaysResult { state = ResultType.success.ToString(), data = data};
}
///
/// 获取作业中出库单根据关键字
///
/// 关键字
///
[HttpGet]
public async Task GetUnOutStorageByCode([FromQuery] string keyword)
{
var data = await _service.GetOutStorageByCode(keyword);
if (data != null && data.F_OutStorageState != 1)
{
data = null;
}
return new AlwaysResult { state = ResultType.success.ToString(), data = data };
}
///
/// 获取未绑定信息根据出库单
///
/// 出库单号
///
[HttpGet]
public async Task GetUnBandingInfoByCode([FromQuery, Required] string code)
{
var data = await _service.GetUnBandingInfoByCode(code.ToUpper());
return new AlwaysResult> { state = ResultType.success.ToString(), data = data };
}
#endregion
#region 提交数据
///
/// 产品出库
///
/// 产品出库请求对象
///
[HttpPost]
[Lock]
public async Task OutStorage([FromBody] OutStorageRequest request)
{
try
{
OutStorageInfoEntity entity = new OutStorageInfoEntity();
entity.F_TransferBoxCode = request.transferCode.ToUpper();
entity.F_Num = request.num;
entity.F_Description = request.description;
entity.F_OutStorageCode = request.outStorageCode.ToUpper();
entity.TargetTransferCode = string.IsNullOrEmpty(request.TargetTransferCode)?null: request.TargetTransferCode.ToUpper();
await _service.OutStorage(entity);
await _logService.WriteLog("操作成功", "出库接口-产品出库", "", Service.DbLogType.Submit);
return new AlwaysResult { state = ResultType.success.ToString() };
}
catch (Exception ex)
{
await _logService.WriteLog(ex.Message, "出库接口-产品出库", "", Service.DbLogType.Submit, true);
return new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(ex.Message) };
}
}
///
/// 出库装箱
///
/// 出库装箱请求对象
///
[HttpPost]
public async Task OutStorageBanding([FromBody] OutStorageBandingRequest request)
{
try
{
OutStorageInfoEntity entity = new OutStorageInfoEntity();
entity.F_OutStorageCode = request.outStorageCode.ToUpper();
entity.F_TransferBoxCode = request.transferCode.ToUpper();
entity.F_TargetTransferCode = string.IsNullOrEmpty(request.TargetTransferCode) ? null : request.TargetTransferCode.ToUpper();
entity.F_Num = request.num;
entity.F_Description = request.description;
await _service.OutStorageBanding(entity);
await _logService.WriteLog("操作成功", "出库接口-出库装箱", "", Service.DbLogType.Submit);
return new AlwaysResult { state = ResultType.success.ToString() };
}
catch (Exception ex)
{
await _logService.WriteLog(ex.Message, "出库接口-出库装箱", "", Service.DbLogType.Submit, true);
return new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(ex.Message) };
}
}
///
/// 取消产品下架
///
/// 取消产品下架请求对象
///
[HttpPost]
public async Task OutStorageCancle([FromBody] OutStorageCancleRequest request)
{
try
{
OutStorageInfoEntity entity = new OutStorageInfoEntity();
entity.F_TransferBoxCode = request.transferCode.ToUpper();
entity.F_OutStorageCode = request.outStorageCode.ToUpper();
entity.F_LocationCode = request.locationCode.ToUpper();
await _service.OutStorageCancle(entity);
await _logService.WriteLog("操作成功", "生产接口-取消产品下架", "", Service.DbLogType.Submit);
return new AlwaysResult { state = ResultType.success.ToString() };
}
catch (Exception ex)
{
await _logService.WriteLog(ex.Message, "生产接口-取消产品下架", "", Service.DbLogType.Submit, true);
return new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(ex.Message) };
}
}
#endregion
#region 请求对象
///
/// 产品出库请求对象
///
public class OutStorageRequest
{
///
/// 流转箱编号
///
[Required(ErrorMessage = "流转箱编号不能为空")]
public string transferCode { get; set; }
///
/// 下架数量
///
///
[Required(ErrorMessage = "数量不能为空")]
public float? num { get; set; }
///
/// 描述
///
///
public string description { get; set; }
///
/// 出库单号
///
[Required(ErrorMessage = "出库单号不能为空")]
public string outStorageCode { get; set; }
///
/// 目标流转箱
///
public string TargetTransferCode { get; set; }
}
///
/// 产品出库请求对象
///
public class OutStorageQueryRequest
{
///
/// 流转箱编号
///
[Required(ErrorMessage = "流转箱编号不能为空")]
public string transferCode { get; set; }
///
/// 出库单号
///
[Required(ErrorMessage = "出库单号不能为空")]
public string outStorageCode { get; set; }
}
///
/// 出库装箱请求对象
///
public class OutStorageBandingRequest
{
///
/// 流转箱编号
///
[Required(ErrorMessage = "流转箱编号不能为空")]
public string transferCode { get; set; }
///
/// 变动数量
///
///
[Required(ErrorMessage = "数量不能为空")]
public float? num { get; set; }
///
/// 描述
///
///
public string description { get; set; }
///
/// 出库单号
///
[Required(ErrorMessage = "出库单号不能为空")]
public string outStorageCode { get; set; }
///
/// 目标流转箱
///
[Required(ErrorMessage = "目标流转箱不能为空")]
public string TargetTransferCode { get; set; }
}
///
/// 取消产品下架请求对象
///
public class OutStorageCancleRequest
{
///
/// 流转箱编号
///
[Required(ErrorMessage = "流转箱编号不能为空")]
public string transferCode { get; set; }
///
/// 出库单号
///
[Required(ErrorMessage = "出库单号不能为空")]
public string outStorageCode { get; set; }
///
/// 目标库位
///
[Required(ErrorMessage = "目标库位不能为空")]
public string locationCode { get; set; }
}
#endregion
}
}