using Microsoft.AspNetCore.Mvc;
using WCS.BLL.DbModels;
using WCS.BLL.Services.IService;
using WCS.DAL.Db;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel;
using WCS.Model.ApiModel.PDAMatBind;
using WCS.Model.ApiModel.User;
using WCS.Model.WebSocketModel;
namespace WCS.WebApi.Controllers
{
///
/// PDA物料绑定相关接口
///
[ApiController]
[Route("[controller]")]
public class PDAMatBindController : ControllerBase
{
public IWarningService _warningService { get; set; }
public PDAMatBindController(IWarningService warningService)
{
_warningService = warningService;
}
[Route("getShelfInfoByLocationCode")]
[HttpPost(Name = "getShelfInfoByLocationCode")]
public async Task getShelfInfoByLocationCode(GetShelfInfoByLocationCodeRequest request)
{
//判断参数
if (string.IsNullOrEmpty(request.LocationCode))
{
return new ResponseCommon()
{
Code = 201,
Message = "工位编码为空!",
Data = null,
};
}
//获取是否存在当前工位
var location = await DbHelp.db.Queryable()
.Where(t => t.LocationCode == request.LocationCode)
.Where(t => t.IsEnable == true)
.FirstAsync();
if (location == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"工位[{request.LocationCode}]不存在或已被禁用!\r\n请联系系统管理人员维护工位信息!",
Data = null,
};
}
//获取当前工位的货架
var shelf = await DbHelp.db.Queryable()
.Where(t => t.CurrentLocationId == location.Id && t.TransStatus == TransStatusEnum.静止
|| t.DestinationLocationId == location.Id && t.TransStatus == TransStatusEnum.运输中)//解决产线人员 呼叫后货架未到的时候绑定的问题
.Where(t => t.IsEnable)
.FirstAsync();
return new ResponseBase()
{
Code = 200,
Message = $"success",
Data = new GetShelfInfoByLocationReturnData()
{
LocationId = location.Id,
LocationCode = request.LocationCode,
ShelfId = shelf?.Id,
ShelfCode = shelf?.ShelfCode,
},
};
}
[Route("bindMatDetail")]
[HttpPost(Name = "bindMatDetail")]
public async Task bindMatDetail(BindMatDetailRequest request)
{
try
{
#region 参数校验
//判断参数
if (request.LocationId == 0 || string.IsNullOrEmpty(request.LocationCode))
{
return new ResponseCommon()
{
Code = 201,
Message = "工位或工位编码为空!",
Data = null,
};
}
if (request.ShelfId == 0 || string.IsNullOrEmpty(request.ShelfCode))
{
return new ResponseCommon()
{
Code = 201,
Message = "货架或货架编码为空!",
Data = null,
};
}
if (request.MatBaseInfoId == 0 || string.IsNullOrEmpty(request.MatCode))
{
return new ResponseCommon()
{
Code = 201,
Message = "未选择物料!",
Data = null,
};
}
if (request.Qty <= 0)
{
return new ResponseCommon()
{
Code = 201,
Message = "数量应大于等于1!",
Data = null,
};
}
#endregion
#region 数据校验
//判断参数
if (string.IsNullOrEmpty(request.LocationCode))
{
return new ResponseCommon()
{
Code = 201,
Message = "工位编码为空!",
Data = null,
};
}
//获取是否存在当前工位
var location = await DbHelp.db.Queryable()
.Where(t => t.Id == request.LocationId)
.Where(t => t.IsEnable == true)
.FirstAsync();
if (location == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"工位[{request.LocationCode}]不存在或已被禁用!\r\n请联系系统管理人员维护工位信息!",
Data = null,
};
}
//获取当前工位的货架
var shelf = await DbHelp.db.Queryable()
.Where(t => t.Id == request.ShelfId)
.Where(t => t.CurrentLocationId == location.Id && t.TransStatus == TransStatusEnum.静止
|| t.DestinationLocationId == location.Id && t.TransStatus == TransStatusEnum.运输中)//解决产线人员 呼叫后货架未到的时候绑定的问题
.Where(t => t.IsEnable == true)
.FirstAsync();
if (shelf == null)
{
return new ResponseCommon()
{
Code = 205,
Message = $"货架[{request.ShelfCode}],已不在工位上!\r\n请进行【货架呼叫】!",
Data = null,
};
}
//获取物料基础信息
var matBaseInfo = await DbHelp.db.Queryable()
.Where(t => t.Id == request.MatBaseInfoId)
.Where(t => t.IsEnable == true)
.FirstAsync();
if (matBaseInfo == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"不存在物料[{request.MatCode}]或已被禁用!",
Data = null,
};
}
#endregion
//校验合格 进行保存
var matDetailCurrentInfo = new MatDetailCurrentInfo()
{
ShlefId = shelf.Id,
ShelfCode = shelf.ShelfCode,
ShelfType = shelf.ShelfTypeName,
//ShelfArea = shelf.ShelfArea,
MatCode = matBaseInfo.MatCode,
MatName = matBaseInfo.MatName,
MatSupplier = matBaseInfo.MatSupplier,
MatCustomer = matBaseInfo.MatCustomer,
MatSpec = matBaseInfo.MatSpec,
MatUnit = matBaseInfo.MatUnit,
MatQty = request.Qty,
ModifyUser = request.UserName,
};
DbHelp.db.Insertable(matDetailCurrentInfo).ExecuteCommand();
return new ResponseCommon()
{
Code = 200,
Message = "success",
Data = null,
};
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = ex.Message,
Data = null,
};
}
}
}
}