You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

507 lines
23 KiB
C#

11 months ago
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;
10 months ago
using System;
using NPOI.SS.Formula.Functions;
11 months ago
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开始称量
/// <summary>
/// //扫描拉缸容器条码后验证成功执行PLC 启动
/// </summary>
11 months ago
/// <param name="view">验证成功后传递过来相关数据</param>
11 months ago
/// <returns>是否执行成功!</returns>
public async Task<bool> ExecPlcState(VerifyView view)
{
try
{
var plcList = PlcHelper.siemensList.SingleOrDefault(d => d.EquipName.Equals("溶剂PLC"));
if (plcList.plc.IsConnected)
11 months ago
{
if (view.Weighbridge == "1号地磅")
11 months ago
{
10 months ago
int rate = Convert.ToInt32(view.Rate * 100);
bool rr=plcList.plc.WriteInt16("DB110.DBW10.0", rate.ToString());//传入固率
bool barCode = plcList.plc.WriteInt16("DB110.DBW1768.0", "1");
if (barCode)
11 months ago
{
Hw_SolventErrorPreventionReport report = new Hw_SolventErrorPreventionReport()
{
PlanId = view.Plan_Id,
10 months ago
FinishedNum = plcList.plc.ReadInt16("DB110.DBW1758.0"),
RMatCode = view.RMatCode,
MaterialID = view.MaterialID,
MaterialName = view.MaterialName,
Weight = view.MaterialWeight,
WholeMaterial = view.WholeMaterial
};
11 months ago
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
if (rtPlanList.Count > 0)
11 months ago
{
10 months ago
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);
10 months ago
if (plcList.plc.ReadInt16("DB110.DBW8") != 250)
11 months ago
{
10 months ago
//var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(view.Plan_Id);
//if (hwWeighList != null)
//{
10 months ago
// 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;
// }
//}
10 months ago
var num = plcList.plc.ReadInt16("DB110.DBW1758.0");
if (num==0)
{
rtPlan.Exec_Num = 1;
}
else
{
rtPlan.Exec_Num = num;
}
//rtPlan.Exec_Num = plcList.plc.ReadInt16("DB110.DBW1758.0");
//保存本次数据
int i = await _solventErrorPreventionReportRepository.AddAsync(report);
var cylinderList = _hwCylinderRepository.Query();
if (cylinderList.Count == 0)
11 months ago
{
return false;
11 months ago
}
10 months ago
if (view.CylinderBarCode.Trim()=="00000000")
{
rtPlan.CylinderName = "00000000";
rtPlan.CylinderBarCode = "00000000";
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
}
else
{
Hw_Cylinder hw_Cylinder = cylinderList.FirstOrDefault(d => d.BarCode == view.CylinderBarCode.Trim());
rtPlan.CylinderName = hw_Cylinder.Name;
rtPlan.CylinderBarCode = hw_Cylinder.BarCode;
log.Info(view.CylinderBarCode);
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
}
return true;
11 months ago
}
}
10 months ago
//等待
return false;
}
11 months ago
return false;
}
else if (view.Weighbridge == "2号地磅")
11 months ago
{
10 months ago
int rate = Convert.ToInt32(view.Rate * 100);
plcList.plc.WriteInt16("DB110.DBW10.0", rate.ToString());//传入固率
bool barCode = plcList.plc.WriteInt16("DB110.DBW1768.0", "1");
// bool matCode = plcList.plc.WriteInt16("DB110.DBW482.0", "1");//执行启动
if (barCode)
11 months ago
{
Hw_SolventErrorPreventionReport report = new Hw_SolventErrorPreventionReport()
{
PlanId = view.Plan_Id,
10 months ago
FinishedNum = plcList.plc.ReadInt16("DB110.DBW1758.0"),
RMatCode = view.RMatCode,
MaterialID = view.MaterialID,
MaterialName = view.MaterialName,
Weight = view.MaterialWeight,
WholeMaterial = view.WholeMaterial
};
11 months ago
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
if (rtPlanList.Count > 0)
11 months ago
{
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == view.Plan_Id);
10 months ago
if (plcList.plc.ReadInt16("DB110.DBW8") != 250)
11 months ago
{
10 months ago
//var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(view.Plan_Id);
//if (hwWeighList != null)
//{
10 months ago
// 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;
// }
//}
10 months ago
var num = plcList.plc.ReadInt16("DB110.DBW1758.0");
if (num == 0)
{
rtPlan.Exec_Num = 1;
}
else
{
rtPlan.Exec_Num = num;
}
//保存本次数据
int i = await _solventErrorPreventionReportRepository.AddAsync(report);
var cylinderList = _hwCylinderRepository.Query();
if (cylinderList.Count == 0)
11 months ago
{
return false;
11 months ago
}
10 months ago
Hw_Cylinder hw_Cylinder = cylinderList.FirstOrDefault(d => d.BarCode == view.CylinderBarCode.Trim());
rtPlan.CylinderName = hw_Cylinder.Name;
rtPlan.CylinderBarCode = hw_Cylinder.BarCode;
log.Info(view.CylinderBarCode);
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
return true;
11 months ago
}
}
10 months ago
//等待
return false;
}
return false;
}
10 months ago
return false;
11 months ago
}
else
{
return true;
11 months ago
}
}
catch (System.Exception ex)
{
log.Info(ex.Message);
return false;
}
}
#endregion
#region 泵投料釜比对信息
/// <summary>
/// 泵投料釜比对信息
/// </summary>
/// <param name="planId">计划ID</param>
/// <param name="pumpCode">泵Code</param>
/// <param name="cylinderCode">投料泵Code</param>
/// <returns></returns>
public async Task<bool> ExecState(string planId, string pumpCode, string cylinderCode)
{
try
{
var result = await _planRepository.QueryAsync(d => d.Plan_Id == planId && d.PumpBarCode == pumpCode && d.CylinderBarCode == cylinderCode);
if (result.Count > 0)
{
var plcList = PlcHelper.siemensList.SingleOrDefault(d => d.EquipName.Equals("溶剂PLC"));
if (plcList.plc.IsConnected)
11 months ago
{
#region 写入PLC
11 months ago
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:
plcList.plc.WriteInt16("DB110.DBW282.0", "1");
break;
case 2:
plcList.plc.WriteInt16("DB110.DBW294.0", "1");
break;
case 3:
plcList.plc.WriteInt16("DB110.DBW306.0", "1");
break;
case 4:
plcList.plc.WriteInt16("DB110.DBW318.0", "1");
break;
case 5:
plcList.plc.WriteInt16("DB110.DBW330.0", "1");
break;
case 6:
plcList.plc.WriteInt16("DB110.DBW342.0", "1");
break;
case 7:
plcList.plc.WriteInt16("DB110.DBW354.0", "1");
break;
case 8:
plcList.plc.WriteInt16("DB110.DBW366.0", "1");
break;
case 9:
plcList.plc.WriteInt16("DB110.DBW 378.0", "1");
break;
default:
break;
}
11 months ago
#endregion
return true;
}
else
{
return false;
}
11 months ago
}
else
{
#region 写入PLC
var plcList = PlcHelper.siemensList.SingleOrDefault(d => d.EquipName.Equals("溶剂PLC"));
if (plcList.plc.IsConnected)
11 months ago
{
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:
plcList.plc.WriteInt16("DB110.DBW282.0", "2");
break;
case 2:
plcList.plc.WriteInt16("DB110.DBW294.0", "2");
break;
case 3:
plcList.plc.WriteInt16("DB110.DBW306.0", "2");
break;
case 4:
plcList.plc.WriteInt16("DB110.DBW318.0", "2");
break;
case 5:
plcList.plc.WriteInt16("DB110.DBW330.0", "2");
break;
case 6:
plcList.plc.WriteInt16("DB110.DBW342.0", "2");
break;
case 7:
plcList.plc.WriteInt16("DB110.DBW354.0", "2");
break;
case 8:
plcList.plc.WriteInt16("DB110.DBW366.0", "2");
break;
case 9:
plcList.plc.WriteInt16("DB110.DBW 378.0", "2");
break;
default:
break;
}
11 months ago
#endregion
return true;
}
else
{
return false;
}
11 months ago
}
}
catch (System.Exception)
{
return false;
}
}
#endregion
#region 拉缸查询
/// <summary>
/// 拉缸查询
/// </summary>
/// <param name="code"></param>
11 months ago
/// <param name="weighbridge"></param>
11 months ago
/// <returns></returns>
public async Task<WaitePlanView> GetByCylinderCode(string code, string weighbridge)
{
try
{
11 months ago
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;
var plcList = PlcHelper.siemensList.SingleOrDefault(d => d.EquipName.Equals("溶剂PLC"));
if (plcList.plc.IsConnected)
11 months ago
{
10 months ago
if (weighbridge == "1号地磅")
11 months ago
{
11 months ago
int planNum = plcList.plc.ReadInt16("DB110.DBW2.0");//执行批次
10 months ago
if (plan.Plan_Num > planNum)
11 months ago
{
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == plan.Plan_Id);
10 months ago
10 months ago
int materialNo = plcList.plc.ReadInt16("DB110.DBW1758");//当前执行物料
if (materialNo == 0) materialNo = 1;
var hwWeigh = hwWeighList.FirstOrDefault(d => d.MID == materialNo);
11 months ago
if (hwWeigh == null) return null;
return hwWeigh;
}
10 months ago
else
{
return null;
}
11 months ago
}
11 months ago
else
{
10 months ago
int planNum = plcList.plc.ReadInt16("DB110.DBW2.0");//执行批次
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 = plcList.plc.ReadInt16("DB110.DBW1758");//当前执行物料
var hwWeigh = hwWeighList.FirstOrDefault(d => d.MID == materialNo);
if (hwWeigh == null) return null;
11 months ago
10 months ago
return hwWeigh;
}
else
{
return null;
}
11 months ago
}
10 months ago
}
else
{
log.Error("PLC连接失败");
11 months ago
}
11 months ago
return null;
}
catch (System.Exception ex)
{
log.Info(ex.Message);
return null;
}
}
#endregion
#region 拉缸与泵匹配
/// <summary>
/// 泵查询——计划已经完成后
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
/// <exception cref="System.NotImplementedException"></exception>
public async Task<PumpAndCylinderView> GetByPumpCode(string code)
{
try
{
List<RT_plan> 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 获取所有溶剂计划
/// <summary>
/// 获取所有溶剂计划
/// </summary>
/// <returns></returns>
public async Task<List<SolventPlanView>> GetSolventPlanInfo()
{
List<SolventPlanView> list = new List<SolventPlanView>();
List<RT_plan> 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
}
}