using Admin.Core.IRepository;
using Admin.Core.IService;
using Admin.Core.Model;
using System.Threading.Tasks;
using Admin.Core.Model.ViewModels;
using System.Linq;
using System.Collections.Generic;
using log4net;
using Admin.Core.PlcServer;
using System;
using Admin.Core.Common;
using NPOI.OpenXmlFormats.Dml.Diagram;
namespace Admin.Core.Service
{
public class SolventServices : ISolventServices
{
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(SolventServices));
private readonly IRT_planRepository _planRepository;
private readonly IPmt_recipeRepository _recipeRepository;
private readonly IPmt_weighRepository _weighRepository;
private readonly IPmt_materialRepository _materialRepository;
private readonly IHw_SolventErrorPreventionReportRepository _solventErrorPreventionReportRepository;
private readonly IHw_weighRepository _hwWeighRepository;
private readonly IHw_PumpRepository _hwPumpRepository;
private readonly IHw_CylinderRepository _hwCylinderRepository;
int execNum = 0;
#region 构造函数
public SolventServices(IRT_planRepository planRepository, IPmt_recipeRepository recipeRepository, IPmt_weighRepository weighRepository,
IPmt_materialRepository materialRepository, IHw_SolventErrorPreventionReportRepository solventErrorPreventionReportRepository,
IHw_weighRepository hwWeighRepository, IHw_PumpRepository hwPumpRepository, IHw_CylinderRepository hwCylinderRepository)
{
_planRepository = planRepository;
_recipeRepository = recipeRepository;
_weighRepository = weighRepository;
_materialRepository = materialRepository;
_solventErrorPreventionReportRepository = solventErrorPreventionReportRepository;
_hwWeighRepository = hwWeighRepository;
_hwPumpRepository = hwPumpRepository;
_hwCylinderRepository = hwCylinderRepository;
}
#endregion
#region 拉缸类型验证成功后执行PCL开始称量
///
/// //扫描拉缸(容器)条码后验证成功,执行PLC 启动
///
/// 验证成功后传递过来相关数据
/// 是否执行成功!
public async Task> ExecPlcState(VerifyView view)
{
MessageModel result = new MessageModel();
try
{
if (view.Weighbridge == "1号地磅")
{
{
var s7 = PlcConnect.Instance;
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
if (rtPlanList.Count > 0)
{
if (string.IsNullOrEmpty(view.Plan_Id))
{
var r = rtPlanList.FirstOrDefault();
view.Plan_Id = r.Plan_Id;
}
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == view.Plan_Id);
List list = new List();
if (view.BarCodeList!=null)
{
foreach (var item in view.BarCodeList)
{
string[] str = item.Split("-");
Hw_SolventErrorPreventionReport report = new Hw_SolventErrorPreventionReport()
{
PlanId = view.Plan_Id,
Batch = rtPlan.Batch,
ProductName = rtPlan.ProductName,
FinishedNum = s7.ReadInt16("DB110.DBW1758.0").Content,
RMatCode = view.RMatCode,
MaterialID = view.MaterialID,
MaterialName = view.MaterialName,
Weight = view.MaterialWeight,
WholeMaterial = view.WholeMaterial,
Material_InventoryCode = str[0],
Material_BatchNumber = str[1],
Material_SerialCode = str[2],
BarCodeStr = item,
CreateTime = DateTime.Now
};
list.Add(report);
}
int i = await _solventErrorPreventionReportRepository.AddAsync(list);
}
#region MyRegion
//if (s7.ReadInt16("DB110.DBW8").Content != 250)
//{
//var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(view.Plan_Id);
//if (hwWeighList != null)
//{
// if (hwWeighList.Count() > (rtPlan.Exec_Num + 1))
// {
// rtPlan.Exec_Num = 1;
// }
// else if (hwWeighList.Count() == (rtPlan.Exec_Num + 1))
// {
// rtPlan.Exec_Num = rtPlan.Exec_Num + 1;
// }
// else
// {
// rtPlan.Exec_Num = 1;
// }
//}
//else
//{
// rtPlan.Exec_Num = 0;
//}
//var num = s7.ReadInt16("DB110.DBW1758.0").Content;
//if (num == 0)
//{
// rtPlan.Exec_Num = 1;
//}
//else
//{
// rtPlan.Exec_Num = num;
//}
////rtPlan.Exec_Num = plcList.plc.ReadInt16("DB110.DBW1758.0");
//保存本次数据
#endregion
var cylinderList = _hwCylinderRepository.Query();
if (cylinderList.Count == 0)
{
result.success = false;
result.msg = "未获查询到拉缸信息";
return result;
}
if (view.CylinderBarCode.Trim() == "00000000")
{
rtPlan.CylinderName = "00000000";
rtPlan.CylinderBarCode = "00000000";
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
result.success = true;
result.msg = "更新拉缸信息成功!";
int rate = Convert.ToInt32(view.Rate * 100);
var writeRate = s7.Write("DB110.DBW10.0", short.Parse(rate.ToString()));//传入固率
log.Info($"1号地磅 传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}");
var barCode = s7.Write("DB110.DBW1768.0", short.Parse("1")); //写入启动称量信号
log.Info($"1号地磅 写入BarCode:{barCode.IsSuccess},结果:{barCode.Message}");
if (barCode.IsSuccess && writeRate.IsSuccess)
{
result.success = true;
result.msg = "更新计划信息成功!称量开始!";
}
else
{
result.success = false;
result.msg = $"计划执行失败,请检查网络是否联通![传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}]<>[开始信号:{barCode.IsSuccess},结果:{barCode.Message}]";
}
}
else
{
Hw_Cylinder hw_Cylinder = cylinderList.FirstOrDefault(d => d.BarCode == view.CylinderBarCode.Trim());
if (hw_Cylinder == null)
{
result.success = false;
result.msg = $"未查询到拉缸信息!拉缸二维码:【{view.CylinderBarCode}】";
}
else
{
rtPlan.CylinderName = hw_Cylinder.Name;
rtPlan.CylinderBarCode = hw_Cylinder.BarCode;
log.Info(view.CylinderBarCode);
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
int rate = Convert.ToInt32(view.Rate * 100);
var writeRate = s7.Write("DB110.DBW10.0", short.Parse(rate.ToString()));//传入固率
log.Info($"1号地磅 传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}");
var barCode = s7.Write("DB110.DBW1768.0", short.Parse("1")); //写入启动称量信号
log.Info($"1号地磅 写入BarCode:{barCode.IsSuccess},结果:{barCode.Message}");
if (barCode.IsSuccess && writeRate.IsSuccess)
{
result.success = true;
result.msg = "更新计划信息成功!称量开始!";
}
else
{
result.success = false;
result.msg = $"计划执行失败,请检查网络是否联通![传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}]<>[开始信号:{barCode.IsSuccess},结果:{barCode.Message}]";
}
}
}
}
}
}
if (view.Weighbridge == "2号地磅")
{
{
var s7 = PlcConnect.Instance;
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
if (rtPlanList.Count > 0)
{
if (string.IsNullOrEmpty(view.Plan_Id))
{
var r = rtPlanList.FirstOrDefault();
view.Plan_Id = r.Plan_Id;
}
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == view.Plan_Id);
List list = new List();
if (view.BarCodeList != null)
{
foreach (var item in view.BarCodeList)
{
string[] str = item.Split("-");
Hw_SolventErrorPreventionReport report = new Hw_SolventErrorPreventionReport()
{
PlanId = view.Plan_Id,
Batch = rtPlan.Batch,
ProductName = rtPlan.ProductName,
FinishedNum = s7.ReadInt16("DB111.DBW1758.0").Content,
RMatCode = view.RMatCode,
MaterialID = view.MaterialID,
MaterialName = view.MaterialName,
Weight = view.MaterialWeight,
WholeMaterial = view.WholeMaterial,
Material_InventoryCode = str[0],
Material_BatchNumber = str[1],
Material_SerialCode = str[2],
BarCodeStr = item,
CreateTime = DateTime.Now
};
list.Add(report);
}
int i = await _solventErrorPreventionReportRepository.AddAsync(list);
}
#region MyRegion
//if (s7.ReadInt16("DB111.DBW8").Content != 250)
//{
//var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(view.Plan_Id);
//if (hwWeighList != null)
//{
// if (hwWeighList.Count() > (rtPlan.Exec_Num + 1))
// {
// rtPlan.Exec_Num = 1;
// }
// else if (hwWeighList.Count() == (rtPlan.Exec_Num + 1))
// {
// rtPlan.Exec_Num = rtPlan.Exec_Num + 1;
// }
// else
// {
// rtPlan.Exec_Num = 1;
// }
//}
//else
//{
// rtPlan.Exec_Num = 0;
//}
//var num = s7.ReadInt16("DB111.DBW1758.0").Content;
//if (num == 0)
//{
// rtPlan.Exec_Num = 1;
//}
//else
//{
// rtPlan.Exec_Num = num;
//}
////rtPlan.Exec_Num = plcList.plc.ReadInt16("DB111.DBW1758.0");
//保存本次数据
#endregion
var cylinderList = _hwCylinderRepository.Query();
if (cylinderList.Count == 0)
{
result.success = false;
result.msg = "未获查询到拉缸信息";
return result;
}
if (view.CylinderBarCode.Trim() == "00000000")
{
rtPlan.CylinderName = "00000000";
rtPlan.CylinderBarCode = "00000000";
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
result.success = true;
result.msg = "更新拉缸信息成功!";
int rate = Convert.ToInt32(view.Rate * 100);
var writeRate = s7.Write("DB111.DBW10.0", short.Parse(rate.ToString()));//传入固率
log.Info($"2号地磅 传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}");
var barCode = s7.Write("DB111.DBW1768.0", short.Parse("1")); //写入启动称量信号
log.Info($"2号地磅 写入BarCode:{barCode.IsSuccess},结果:{barCode.Message}");
if (barCode.IsSuccess && writeRate.IsSuccess)
{
result.success = true;
result.msg = "更新计划信息成功!称量开始!";
}
else
{
result.success = false;
result.msg = $"计划执行失败,请检查网络是否联通![传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}]<>[开始信号:{barCode.IsSuccess},结果:{barCode.Message}]";
}
}
else
{
Hw_Cylinder hw_Cylinder = cylinderList.FirstOrDefault(d => d.BarCode == view.CylinderBarCode.Trim());
if (hw_Cylinder == null)
{
result.success = false;
result.msg = $"未查询到拉缸信息!拉缸二维码:【{view.CylinderBarCode}】";
}
else
{
rtPlan.CylinderName = hw_Cylinder.Name;
rtPlan.CylinderBarCode = hw_Cylinder.BarCode;
log.Info(view.CylinderBarCode);
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
int rate = Convert.ToInt32(view.Rate * 100);
var writeRate = s7.Write("DB111.DBW10.0", short.Parse(rate.ToString()));//传入固率
log.Info($"2号地磅 传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}");
var barCode = s7.Write("DB111.DBW1768.0", short.Parse("1")); //写入启动称量信号
log.Info($"2号地磅 写入BarCode:{barCode.IsSuccess},结果:{barCode.Message}");
if (barCode.IsSuccess && writeRate.IsSuccess)
{
result.success = true;
result.msg = "更新计划信息成功!称量开始!";
}
else
{
result.success = false;
result.msg = $"计划执行失败,请检查网络是否联通![传入固含:{writeRate.IsSuccess},结果:{writeRate.Message}]<>[开始信号:{barCode.IsSuccess},结果:{barCode.Message}]";
}
}
}
}
}
}
return result;
}
catch (System.Exception ex)
{
log.Info(ex.Message);
result.success = false;
result.msg = $"执行数据异常:{ex.Message}";
return result;
}
}
#endregion
#region 泵投料釜比对信息
///
/// 泵投料釜比对信息
///
/// 计划ID
/// 泵Code
/// 投料泵Code
///
public async Task ExecState(string planId, string pumpCode, string cylinderCode)
{
try
{
var s7 = PlcConnect.Instance;
var result = await _planRepository.QueryAsync(d => d.Plan_Id == planId && d.PumpBarCode == pumpCode && d.CylinderBarCode == cylinderCode);
if (result.Count > 0)
{
#region 写入PLC
var pumpList = _hwPumpRepository.Query();
if (pumpList.Count == 0) { return false; }
var pump = pumpList.FirstOrDefault(d => d.BarCode == pumpCode);
if (pump == null) { return false; }
switch (pump.RowNum)
{
case 1:
s7.Write("DB110.DBW282.0",short.Parse("1"));
break;
case 2:
s7.Write("DB110.DBW294.0", short.Parse("1"));
break;
case 3:
s7.Write("DB110.DBW306.0", short.Parse("1"));
break;
case 4:
s7.Write("DB110.DBW318.0", short.Parse("1"));
break;
case 5:
s7.Write("DB110.DBW330.0", short.Parse("1"));
break;
case 6:
s7.Write("DB110.DBW342.0", short.Parse("1"));
break;
case 7:
s7.Write("DB110.DBW354.0", short.Parse("1"));
break;
case 8:
s7.Write("DB110.DBW366.0", short.Parse("1"));
break;
case 9:
s7.Write("DB110.DBW 378.0", short.Parse("1"));
break;
default:
break;
}
#endregion
return true;
}
else
{
#region 写入PLC
var pumpList = _hwPumpRepository.Query();
if (pumpList.Count > 0) { return false; }
var pump = pumpList.FirstOrDefault(d => d.BarCode == pumpCode);
if (pump == null) { return false; }
switch (pump.RowNum)
{
case 1:
s7.Write("DB110.DBW282.0",short.Parse("2"));
break;
case 2:
s7.Write("DB110.DBW294.0", short.Parse("2"));
break;
case 3:
s7.Write("DB110.DBW306.0", short.Parse("2"));
break;
case 4:
s7.Write("DB110.DBW318.0", short.Parse("2"));
break;
case 5:
s7.Write("DB110.DBW330.0", short.Parse("2"));
break;
case 6:
s7.Write("DB110.DBW342.0", short.Parse("2"));
break;
case 7:
s7.Write("DB110.DBW354.0", short.Parse("2"));
break;
case 8:
s7.Write("DB110.DBW366.0", short.Parse("2"));
break;
case 9:
s7.Write("DB110.DBW 378.0", short.Parse("2"));
break;
default:
break;
}
#endregion
return true;
}
}
catch (System.Exception ex)
{
log.Error(ex.Message);
return false;
}
}
#endregion
#region 拉缸查询
///
/// 拉缸查询
///
///
///
///
public async Task GetByCylinderCode(string code, string weighbridge)
{
try
{
var list = await _planRepository.GetDownLoadPlan(code, weighbridge);
if (list.Count == 0) return null;
var plan = list.FirstOrDefault();
var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(plan.Plan_Id);
if (hwWeighList == null) return null;
if (weighbridge == "1号地磅")
{
var s7 = PlcConnect.Instance;
int planNum = s7.ReadInt16("DB110.DBW2.0").Content;//执行批次
if (plan.Plan_Num > planNum)
{
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == plan.Plan_Id);
int materialNo = s7.ReadInt16("DB110.DBW1758").Content;//当前执行物料
if (materialNo == 0) materialNo = 1;
var hwWeigh = hwWeighList.FirstOrDefault(d => d.MID == materialNo);
if (hwWeigh == null) return null;
return hwWeigh;
}
else
{
return null;
}
}
else
{
var s7 = PlcConnect.Instance;
int planNum = s7.ReadInt16("DB110.DBW2.0").Content;//执行批次
if (plan.Plan_Num > planNum)
{
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == plan.Plan_Id);
execNum = rtPlan.Exec_Num;
int materialNo = s7.ReadInt16("DB110.DBW1758").Content;//当前执行物料
var hwWeigh = hwWeighList.FirstOrDefault(d => d.MID == materialNo);
if (hwWeigh == null) return null;
return hwWeigh;
}
else
{
return null;
}
}
}
catch (System.Exception ex)
{
log.Info(ex.Message);
return null;
}
}
#endregion
#region 整包物料查询
///
/// 整包物料查询
///
/// 整包物料编码
/// 地磅
///
public async Task GetByZbCode(string code, string weighbridge)
{
try
{
string str1 = string.Empty;
if (!code.Contains("kg"))
{
string[] str = code.Split("-");
str1= str[0];
}
else
{
str1= code;
}
var list = await _planRepository.GetDownLoadPlan(str1, weighbridge);
if (list.Count == 0) return null;
var plan = list.FirstOrDefault(d=>d.Plan_State==3);
if (weighbridge == "1号地磅")
{
var s7 = PlcConnect.Instance;
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == plan.Plan_Id);
int materialNo = s7.ReadInt16("DB110.DBW1758").Content;//当前执行物料
if (materialNo == 0) materialNo = 1;
var planView = list.FirstOrDefault(d => d.MID == materialNo&& d.Plan_State == 3);
if (planView == null) return null;
return planView;
}
else
{
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == plan.Plan_Id);
var s7 = PlcConnect.Instance;
int materialNo = s7.ReadInt16("DB110.DBW1758").Content;//当前执行物料
if (materialNo == 0) materialNo = 1;
var planView = list.FirstOrDefault(d => d.MID == materialNo);
if (planView == null) return null;
return planView;
}
}
catch (System.Exception ex)
{
log.Info(ex.Message);
return null;
}
}
#endregion
#region 拉缸与泵匹配
///
/// 泵查询——计划已经完成后
///
///
///
///
public async Task GetByPumpCode(string code)
{
try
{
List planList = (await _planRepository.QueryAsync(d => d.Plan_State == 8)).OrderByDescending(d => d.End_Date).ToList();
if (planList.Count == 0) return null;
var plan = planList.FirstOrDefault(d => d.PumpBarCode == code);
if (plan == null) return null;
PumpAndCylinderView view = new PumpAndCylinderView()
{
Plan_Id= plan.Plan_Id,
CylinderName=plan.CylinderName,
CylinderBarCode=plan.CylinderBarCode,
PumpName = plan.PumpName,
PumpBarCode = plan.PumpBarCode
};
return view;
}
catch (System.Exception ex)
{
throw;
}
}
#endregion
#region 获取所有溶剂计划
///
/// 获取所有溶剂计划
///
///
public async Task> GetSolventPlanInfo()
{
List list = new List();
List plan = await _planRepository.QueryAsync();
plan.ForEach(x =>
{
SolventPlanView view = new SolventPlanView();
view.Plan_Id = x.Plan_Id;
view.Plan_Num = x.Plan_Num;
view.Real_Num = x.Real_Num;
view.Plan_Serial = x.Plan_Serial;
view.Plan_Date = x.Plan_Date;
view.Plan_State = x.Plan_State;
view.Plan_StateText = x.Plan_StateText;
view.Plan_TotalError = x.Plan_TotalError;
view.Plan_TotalWeight = x.Plan_TotalWeight;
view.Recipe_Code = x.Recipe_Code;
view.Recipe_Name = x.Recipe_Name;
list.Add(view);
});
return list;
}
#endregion
}
}