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