using Admin.Core.IService; using Admin.Core.Service; using Admin.Core.IService.ISys; using Admin.Core.Model; using Admin.Core.Common.Resource; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using Admin.Core.Common; using System.Linq; using Admin.Core.Model.ViewModels; using Microsoft.AspNetCore.Mvc.ViewEngines; using System.Collections; using NPOI.SS.Formula.Functions; using TouchSocket.Core; using System.Numerics; using Admin.Core.IService.IService_New; using Admin.Core.Model.Model_New; using log4net; namespace Admin.Core.Api.Controllers.Business { /// /// 反应釜防错验证 /// [Route("api/[controller]/[action]")] [ApiController] [AllowAnonymous] public class WarehouseController : BaseApiUserController { #region 整包信息 //000524-20230805-0001-CF-130|25kg //000524:为物料编码 //CF-130:物料名称 //25kg物料重量 #endregion private static readonly log4net.ILog log = LogManager.GetLogger(typeof(WarehouseController)); /// /// 投料仓服务 /// private readonly IHw_WarehouseServices _hw_WarehouseService; /// /// 料筒服务类 /// private readonly IHw_BarrelServices _hw_BarrelService; /// /// 称重服务类 /// private readonly ILR_weighServices _lr_weighService; /// /// 料仓投料验证服务类 /// private readonly IBinFeedingReportServices _binFeedingReportServices; /// /// 物料服务 /// private readonly Ixl_materialServices _xl_materialService; #region 构造方法 /// /// 构造方法 /// /// /// /// /// /// /// public WarehouseController(IHw_WarehouseServices hw_WarehouseServices, ISysUserService sysUserService, IHw_BarrelServices hwBarrelService, ILR_weighServices lrweighService, IBinFeedingReportServices binFeedingReportServices, Ixl_materialServices xl_materialService) : base(sysUserService) { _sysUserService = sysUserService; _hw_WarehouseService = hw_WarehouseServices; _hw_BarrelService = hwBarrelService; _lr_weighService = lrweighService; _binFeedingReportServices = binFeedingReportServices; _xl_materialService = xl_materialService; } #endregion #region 扫描料桶条码 获取桶绑定物料信息 /// /// 扫描料桶条码 获取桶绑定物料信息 /// /// 反应釜 /// 计划Id /// 料桶Id /// [HttpGet] public async Task> GetByBarrelInfo(string kettleBarCode, string planId, string code) { if (!code.IsNotEmptyOrNull()) { return Failed("传入参数为空!"); } var query = await _hw_WarehouseService.GetXlInfo(kettleBarCode.Trim(), planId.Trim(), code.Trim()); if (query == null) { return Failed("查询失败!"); } return Success(query); } #endregion #region 根据条码查询投料釜设置的物料 /// /// 根据条码查询投料釜设置的物料 /// /// 投料釜条码 /// 计划Id /// [HttpGet] public async Task> GetByCode(string code, string planId) { if (!code.IsNotEmptyOrNull()) { return Failed("传入物料编码参数为空!"); } if (!planId.IsNotEmptyOrNull()) { return Failed("传入计划ID参数为空!"); } var query = await _hw_WarehouseService.QueryByCode(code.Trim(), planId); if (query == null) { return Failed("查询失败!"); } return Success(query); } #endregion #region PLC更新状态——反应釜 /// /// PLC更新状态——反应釜 /// /// json 对象 /// [HttpPost] public async Task> ExecPlcState([FromBody] KettleView view) { if (!view.IsNotEmptyOrNull()) { return Failed("传入参数为空!"); } var result = await _hw_WarehouseService.UpdatePlcState(view); if (result) { return Success(result); } return Failed("执行失败!"); } /// /// MES计划下发 /// /// /// [HttpPost] public async Task> DownLoadplanInfo([FromBody] List MesDownLoadPlanList) { try { if (MesDownLoadPlanList == null || MesDownLoadPlanList.Count == 0) { return Failed("传入参数为空!"); } string result1 = await _hw_WarehouseService.DownRJPlanAsync(MesDownLoadPlanList); string result2 = await _hw_WarehouseService.DownZBPlanAsync(MesDownLoadPlanList); string result3 = await _hw_WarehouseService.DownXLPlanAsync(MesDownLoadPlanList); if (result1.Contains("成功")) { if (result2.Contains("成功")) { if (result3.Contains("成功")) { return Success(true); } else { return Failed(result3 + "执行失败!"); } } else { return Failed(result2 + "执行失败!"); } } else { return Failed(result1 + "执行失败!"); } ////配方名或配方编号 //string ss1 = "a82d016e813c4ac3bca0244c519da591"; ////批次号 //string ss2 = "2408090522"; ////产品名称 //var ss3 = "D1-813"; } catch (Exception ex) { return Failed(ex.Message + "执行失败!"); } return Failed("执行失败!"); } /// /// 投料口开/投料口关 /// /// /// /// [HttpGet] public async Task> ExecPlcState(string code, int state) { if (!code.IsNotEmptyOrNull() || !state.IsNotEmptyOrNull()) { return Failed("传入参数为空!"); } var result = await _hw_WarehouseService.UpdatePlcState(code, state); if (result) { return Success(result); } return Failed("执行失败!"); } /// /// 查询称量信息 /// /// /// [HttpGet] public async Task>> GetWeight() { //if (!WeightNo.IsNotEmptyOrNull()) //{ // return Failed("传入参数为空!"); //} //var result = await _hw_WarehouseService.RealWeightInfo(WeightNo); var result = await _hw_WarehouseService.GetPlanWeightInfo(); if (result != null) { return Success(result, "成功"); } return Failed>("执行失败!"); } #endregion #region 查询反应釜计划 /// /// 查询反应釜计划 /// /// [HttpGet] public async Task>> GetWarehousePlan(string code) { MessageModel> messageModel = new MessageModel>(); List list = await _hw_WarehouseService.GetWarehousePlan(code); if (list == null) { messageModel.success = false; messageModel.msg = "未查询到数据"; return messageModel; } messageModel.success = true; messageModel.data = list; return Success(list); } #endregion #region 读取对应料罐的编码并结束任务 /// /// 根据罐号查询称量列表并结束任务 /// /// /// [HttpGet] public async Task>> GetWeightInfoByBarrelIDAndEndTask(string barrelBarcode) { if (!barrelBarcode.IsNotEmptyOrNull()) { return Failed>("传入参数为空!"); } int taskResult = await _xl_materialService.BindBarrel(barrelBarcode.Trim()); int weightResult = 0; MessageModel> messageModel = new MessageModel>(); string materialName = _hw_BarrelService.GetMaterialNameByBarrelID(barrelBarcode.Trim()); if (string.IsNullOrEmpty(materialName)) { weightResult = 1; //return Failed>("查询不到罐号对应的物料ID!"); } if (materialName == "-1") { weightResult = 2; //return Failed>("查询不到罐号!"); } List wlist = _lr_weighService.GetRecentWeightList(materialName); List list = new List(); if (wlist.Count == 0 || wlist == null) { weightResult = 3; } foreach (LR_weigh weigh in wlist) { LR_weigh_BatchCode record = new LR_weigh_BatchCode(); record.WeightData = weigh; record.BatchCode = _binFeedingReportServices.GetBatchNumberByMaterialAndBinID(weigh.Material_ID, weigh.Bin_Serial ?? -1); list.Add(record); } string taskString = ""; string WeightString = ""; if (taskResult == 0) taskString = "任务结束失败 原因:未查询到正在执行的计划!"; if (taskResult == 1) taskString = "任务结束失败 原因:未查询到桶!"; if (taskResult == 2) taskString = $"任务结束失败 原因:未查询到[{barrelBarcode}]桶信息!"; if (taskResult == 3) taskString = "任务结束失败 原因:该桶已经绑定物料,请联系系统管理员处理!"; if (taskResult == 6) { log.Info("任务结束成功"); taskString = "任务结束成功"; } if (taskResult == 7) taskString = "任务结束失败 原因:称重未完成!"; if (taskResult == 8) taskString = "任务结束失败 原因:PLC连接失败,请检查PLC或者联系管理员处理!"; if (taskResult == 10) taskString = "任务结束失败 原因:未知异常,请查看错误日志!"; if (taskResult == 99) taskString = "任务结束失败 原因:保存处理数据失败!"; if (taskResult == 100) taskString = "任务结束失败 原因:处理中....!"; if (taskResult == 110) taskString = "任务结束失败 原因:执行批次未获取!"; if (weightResult == 0) WeightString = "称量信息查询成功"; if (weightResult == 1) WeightString = "查询不到罐号对应的物料ID!"; if (weightResult == 2) WeightString = "查询不到罐号!"; if (weightResult == 3) WeightString = "查询不到该罐号对应的最近一次物料的称量信息!"; return Success(list, $"{WeightString} {taskString}"); } #endregion } }