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.

454 lines
20 KiB
C#

1 year 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;
1 year 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>
1 year ago
/// <param name="view">验证成功后传递过来相关数据</param>
1 year 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)
1 year ago
{
if (view.Weighbridge == "1号地磅")
1 year ago
{
bool matCode = plcList.plc.WriteInt16("DB110.DBW400.0", "1");//执行启动
1 year ago
if (matCode)
1 year ago
{
1 year ago
plcList.plc.Writedouble("DB110.DBW443.0", view.Rate);//传入固率
Hw_SolventErrorPreventionReport report = new Hw_SolventErrorPreventionReport()
{
PlanId = view.Plan_Id,
FinishedNum = plcList.plc.ReadInt16("DB110.DBW2") + 1,
RMatCode = view.RMatCode,
MaterialID = view.MaterialID,
MaterialName = view.MaterialName,
Weight = view.MaterialWeight,
WholeMaterial = view.WholeMaterial
};
1 year ago
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
if (rtPlanList.Count > 0)
1 year ago
{
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == view.Plan_Id);
if (plcList.plc.ReadInt16("DB110.DBW402") != 250)
1 year ago
{
var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(view.Plan_Id);
if (hwWeighList != null)
1 year 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;
}
1 year ago
}
//保存本次数据
int i = await _solventErrorPreventionReportRepository.AddAsync(report);
var cylinderList = _hwCylinderRepository.Query();
if (cylinderList.Count == 0)
1 year ago
{
return false;
1 year 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;
1 year ago
}
}
return false;
}
1 year ago
return false;
}
else if (view.Weighbridge == "2号地磅")
1 year ago
{
bool matCode = plcList.plc.WriteInt16("DB111.DBW400.0", "1");//执行启动
1 year ago
if (matCode)
1 year ago
{
1 year ago
plcList.plc.Writedouble("DB111.DBW443.0", view.Rate);//传入固率
Hw_SolventErrorPreventionReport report = new Hw_SolventErrorPreventionReport()
{
PlanId = view.Plan_Id,
FinishedNum = plcList.plc.ReadInt16("DB111.DBW2") + 1,
RMatCode = view.RMatCode,
MaterialID = view.MaterialID,
MaterialName = view.MaterialName,
Weight = view.MaterialWeight,
WholeMaterial = view.WholeMaterial
};
1 year ago
var rtPlanList = await _planRepository.QueryAsync(d => d.Plan_State == 3);
if (rtPlanList.Count > 0)
1 year ago
{
var rtPlan = rtPlanList.FirstOrDefault(d => d.Plan_Id == view.Plan_Id);
if (plcList.plc.ReadInt16("DB111.DBW402") != 250)
1 year ago
{
var hwWeighList = await _hwWeighRepository.GetWaiteMaterial(view.Plan_Id);
if (hwWeighList != null)
1 year ago
{
if (hwWeighList.Count() > (rtPlan.Exec_Num + 1))
{
rtPlan.Exec_Num = 1;
}
if (hwWeighList.Count() == (rtPlan.Exec_Num + 1))
{
rtPlan.Exec_Num = rtPlan.Exec_Num + 1;
}
if (hwWeighList.Count() > (rtPlan.Exec_Num + 1))
{
rtPlan.Exec_Num = rtPlan.Exec_Num + 1;
}
1 year ago
}
//保存本次数据
int i = await _solventErrorPreventionReportRepository.AddAsync(report);
var cylinderList = _hwCylinderRepository.Query();
if (cylinderList.Count == 0)
1 year ago
{
return false;
1 year ago
}
rtPlan.CylinderName = cylinderList.FirstOrDefault(d => d.BarCode == view.CylinderBarCode).Name;
rtPlan.CylinderBarCode = view.CylinderBarCode;
log.Info(view.CylinderBarCode);
await _planRepository.UpdateExecDb(rtPlan);//更新数据库
return true;
1 year ago
}
}
return false;
}
return false;
}
else
{
1 year ago
return false;
}
}
else
{
return true;
1 year 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)
1 year ago
{
#region 写入PLC
1 year 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;
}
1 year ago
#endregion
return true;
}
else
{
return false;
}
1 year ago
}
else
{
#region 写入PLC
var plcList = PlcHelper.siemensList.SingleOrDefault(d => d.EquipName.Equals("溶剂PLC"));
if (plcList.plc.IsConnected)
1 year 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;
}
1 year ago
#endregion
return true;
}
else
{
return false;
}
1 year ago
}
}
catch (System.Exception)
{
return false;
}
}
#endregion
#region 拉缸查询
/// <summary>
/// 拉缸查询
/// </summary>
/// <param name="code"></param>
1 year ago
/// <param name="weighbridge"></param>
1 year ago
/// <returns></returns>
public async Task<WaitePlanView> GetByCylinderCode(string code, string weighbridge)
{
try
{
1 year 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)
1 year ago
{
1 year ago
int endStatus = plcList.plc.ReadInt16("DB110.DBW6.0");//完成信号
if (endStatus == 1)
1 year ago
{
1 year ago
int planNum = plcList.plc.ReadInt16("DB110.DBW2.0");//执行批次
if (plan.Plan_Num > plan.Real_Num)
1 year ago
{
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;
var hwWeigh = hwWeighList.FirstOrDefault(d => d.MID == execNum);
if (hwWeigh == null) return null;
return hwWeigh;
}
}
1 year ago
else
{
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;
1 year ago
1 year ago
var hwWeigh = hwWeighList.FirstOrDefault(d => d.MID == execNum);
if (hwWeigh == null) return null;
return hwWeigh;
}
}
1 year 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
}
}