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, }; } } } }