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.EquipmentManage; using WaterCloud.Domain.MaterialManage; using WaterCloud.Domain.ProcessManage; using WaterCloud.Service.MaterialManage; using WaterCloud.Service.ProcessManage; using WaterCloud.Service.QualityManage; using WaterCloud.Service.SystemSecurity; namespace WaterCloud.Web.Controllers { /// /// 生产接口 /// [Route("api/[controller]/[action]")] [ApiController] [ServiceFilter(typeof(LoginFilterAttribute))] public class WorkRunController : ControllerBase { //自动注入服务 public LogService _logService { get; set; } public MaterialService _materialService { get; set; } public WorkOrderRunService _orderService { get; set; } public WorkRunService _service { get; set; } public NeedCheckService _checkService { get; set; } public ScapMaterialService _scapService { get; set; } #region 获取数据 /// /// 获取设备列表 /// /// 关键字 /// [HttpGet] public async Task GetUsingEqpList([FromQuery] string keyword) { var data = await _orderService.GetUsingEqpList(keyword); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count() }; } /// /// 获取设备列表 /// /// 关键字 /// [HttpGet] public async Task GetHaveUseEqpList([FromQuery] string keyword) { var data = await _orderService.GetHaveUseEqpList(keyword); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count() }; } /// /// 获取设备列表 /// /// 关键字 /// [HttpGet] public async Task GetHaveOutEqpList([FromQuery] string keyword) { var data = await _orderService.GetHaveOutEqpList(keyword); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count() }; } /// /// 获取设备使用物料列表 /// /// 关键字 /// [HttpGet] public async Task GetUseTransferList([FromQuery] string eqpName) { var data = await _orderService.GetUseTransferList(eqpName); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count() }; } /// /// 获取设备产出物料列表 /// /// 关键字 /// [HttpGet] public async Task GetOutTransferList([FromQuery] string eqpName) { var data = await _orderService.GetOutTransferList(eqpName); foreach (var item in data) { var scaps = await _checkService.GetCheckEntity(item.F_TransferBoxCode, item.F_Id.ToString(), 2); item.F_Num -= scaps == null ? 0 : scaps.F_ScapNum; } return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count() }; } /// /// 获取设备工单 /// /// 设备 /// 关键字 /// [HttpGet] public async Task GetWorkOrder([Required, FromQuery] string eqpName, [FromQuery] string keyword) { List data = await _orderService.GetWorkOrder(eqpName, keyword); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count }; } /// /// 获取设备需要物料列表 /// /// 设备 /// 关键字 /// [HttpGet] public async Task GetUseMaterial([Required, FromQuery] string eqpName, [FromQuery] string keyword) { List data = await _materialService.GetUseMaterialList(eqpName, keyword); return new AlwaysResult> { state = ResultType.success.ToString(), data = data, count = data.Count }; } /// /// 获取设备当前产出物料 /// /// 设备 /// 关键字 /// [HttpGet] public async Task GetOutMaterial([Required, FromQuery] string eqpName, [FromQuery] string keyword) { List data = await _materialService.GetOutMaterialList(eqpName, keyword); return new AlwaysResult> { state = ResultType.success.ToString(), data = data,count=data.Count }; } /// /// 获取产出绑定信息根据流转箱编号 /// /// 流转箱编号 /// [HttpGet] public async Task GetOutputMaterialBandingByCode([FromQuery,Required] string code) { var data = await _service.GetOutputMaterialBandingList(code); var otherdata = await _scapService.GetReturnInfoByTransfer(code); data = data.Where(a => a.F_TransferBoxCode == code.ToUpper()).ToList(); var entity = data.FirstOrDefault(); if (entity!=null) { entity.F_Num = data.Sum(a => a.F_Num); } if (otherdata.Count>0) { entity.F_Num += otherdata.Sum(a => a.F_Num) ?? 0; } return new AlwaysResult { state = ResultType.success.ToString(), data = entity }; } /// /// 获取在用物料根据设备流转箱 /// /// 设备 /// 流转箱编号 /// [HttpGet] public async Task GetConsumeMaterialByCode([Required, FromQuery] string eqpName, [Required, FromQuery] string code) { var data = await _service.GetConsumeMaterialByCode(eqpName, code.ToUpper()); return new AlwaysResult { state = ResultType.success.ToString(), data = data}; } #endregion #region 提交数据 /// /// 设备补料申请 /// /// 设备补料申请请求对象 /// [HttpPost] [Lock] public async Task NeedMaterialJob([FromBody] NeedMaterialJobRequest request) { try { await _service.NeedMaterialJob(request.eqpName, request.materialCode, request.num??0); 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] [Lock] public async Task ConsumeMaterial([FromBody] ConsumeMaterialRequest request) { try { EqpMaterialUseEntity entity = new EqpMaterialUseEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_EqpName = request.eqpName; entity.F_Num = request.num; entity.F_Description = request.description; request.TargetTransferCode = string.IsNullOrEmpty(request.TargetTransferCode) ? null : request.TargetTransferCode.ToUpper(); await _service.ConsumeMaterial(entity, request.TargetTransferCode); 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] [Lock] public async Task ReturnMaterial([FromBody] ReturnMaterialRequest request) { try { ReturnMaterialEntity entity = new ReturnMaterialEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_LocationCode = request.locationCode.ToUpper(); entity.F_Description = request.description; entity.F_EqpName = request.eqpName; request.newTransferCode = string.IsNullOrEmpty(request.newTransferCode) ? null : request.newTransferCode.ToUpper(); await _service.ReturnMaterial(entity, request.newTransferCode); 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] [Lock] public async Task ReturnMaterialJob([FromBody] ReturnMaterialJobRequest request) { try { await _service.ReturnMaterialJob(request.transferCode.ToUpper(), request.eqpName); 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] [Lock] public async Task OutputMaterial([FromBody] OutputMaterialRequest request) { try { OutPutInfoEntity entity = new OutPutInfoEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_MaterialCode = request.materialCode; entity.F_Num = request.num; entity.F_MaterialBatch = request.materialBatch; entity.F_Description = request.description; entity.F_EqpName = request.eqpName; await _service.OutputMaterial(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] [Lock] public async Task OutputMaterialCancle([Required(ErrorMessage ="流转箱编号不能为空")] string code) { try { await _service.OutputMaterialCancle(code.ToUpper()); 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] [Lock] public async Task OutputMaterialLocation([FromBody] OutputMaterialLocationRequest request) { try { OutPutInfoEntity entity = new OutPutInfoEntity(); entity.F_TransferBoxCode = request.transferCode.ToUpper(); entity.F_LocationCode = request.locationCode.ToUpper(); await _service.OutputMaterialLocation(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] [Lock] public async Task FinishWorkOrderJob([Required(ErrorMessage ="设备不能为空")] string eqpName) { try { await _service.FinishWorkOrderJob(eqpName); 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 NeedMaterialJobRequest { /// /// 设备名 /// [Required(ErrorMessage = "设备名不能为空")] public string eqpName { get; set; } /// /// 物料编号 /// [Required(ErrorMessage = "物料编号不能为空")] public string materialCode { get; set; } /// /// 数量 /// [Required(ErrorMessage = "数量不能为空")] public float? num { get; set; } } /// /// 设备使用物料 /// public class ConsumeMaterialRequest { /// /// 设备名 /// [Required(ErrorMessage = "设备名不能为空")] public string eqpName { get; set; } /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 数量 /// [Required(ErrorMessage = "数量不能为空")] public float? num { get; set; } /// /// 新流转箱 /// public string TargetTransferCode { get; set; } /// /// 备注 /// public string description { get; set; } } /// /// 设备退回物料请求对象 /// public class ReturnMaterialRequest { /// /// 设备名称 /// [Required(ErrorMessage = "设备名称不能为空")] public string eqpName { get; set; } /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 库位号 /// [Required(ErrorMessage = "库位号不能为空")] public string locationCode { get; set; } /// /// 新流转箱编号 /// public string newTransferCode { get; set; } /// /// 备注 /// public string description { get; set; } } /// /// 设备退回物料申请请求对象 /// public class ReturnMaterialJobRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 设备名称 /// [Required(ErrorMessage = "设备名称不能为空")] public string eqpName { get; set; } } /// /// 产出上架请求对象 /// 。。 /// public class OutputMaterialLocationRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 库位号 /// [Required(ErrorMessage = "库位号不能为空")] public string locationCode { get; set; } } /// /// 产出物料请求对象 /// public class OutputMaterialRequest { /// /// 流转箱编号 /// [Required(ErrorMessage = "流转箱编号不能为空")] public string transferCode { get; set; } /// /// 变动数量 /// /// [Required(ErrorMessage = "数量不能为空")] public float? num { get; set; } /// /// 物料编号 /// [Required(ErrorMessage = "物料编号不能为空")] public string materialCode { get; set; } /// /// 批号 /// /// [Required(ErrorMessage = "批号不能为空")] public string materialBatch { get; set; } /// /// 描述 /// /// public string description { get; set; } /// /// 设备名称 /// [Required(ErrorMessage = "设备名称不能为空")] public string eqpName { get; set; } } #endregion } }