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.
322 lines
14 KiB
C#
322 lines
14 KiB
C#
using HslCommunication.Profinet.Siemens;
|
|
using Mesnac.Action.ChemicalWeighing.Entity;
|
|
using Mesnac.Action.ChemicalWeighing.Entity.PptPlan;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Mesnac.Action.ChemicalWeighing.DBHelper
|
|
{
|
|
public class PlanDbHelper
|
|
{
|
|
#region 根据计划号获取当前正在执行的计划任务
|
|
/// <summary>
|
|
/// 根据计划号获取当前正在执行的计划任务
|
|
/// </summary>
|
|
/// <param name="planId"></param>
|
|
/// <param name="recipeId"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public static List<Xl_DownLoadPlan> GetExecPlan(int serial)
|
|
{
|
|
try
|
|
{
|
|
SiemensS7Net plc = PlcConnect.Instance;
|
|
string strSql = string.Empty;
|
|
//处理任务取消,但是当前任务会在执行完当前物料称量结束后才能
|
|
if (GetPlanInfo().Count() > 0)
|
|
{
|
|
strSql = $@"select 0 Id,p.Dosing_Id,p.Plan_Id,p.Plan_Serial,p.Recipe_ID,p.Recipe_Name,p.Version,p.Plan_Num,p.Real_Num,p.Shift_Id,p.Shift_Class,p.Plan_State,p.Plan_StateText,p.Plan_TotalWeight,p.Plan_TotalError,
|
|
r.Total_Weight,r.Total_Error,m.Material_ID as MaterialID,m.Material_name,m.Bin_Serial as Station,m.Bin_Name as StationName,w.Set_Weight,w.Set_Error,p.IsRetransmission,p.Retransmission_Num,p.IsPrenatalTest,ISNULL(p.FlagNum,0) as FlagNum
|
|
from xl_plan p left join xl_recipe r on p.Recipe_ID=r.ID left join xl_weigh w on r.ID=w.Recipe_ID left join
|
|
(select b.Bin_Serial,b.Bin_Name,b.Bin_Code,b.Material_ID,m.Material_name from Pmt_Bin b left join xl_material m on m.ID=b.Material_ID) m on w.Bin_Serial=m.Bin_Serial
|
|
where p.Plan_State=3 ";
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
Console.WriteLine($"正在执行的计划:{strSql}");
|
|
var list = fsql.Select<Xl_DownLoadPlan>().WithSql(strSql).ToList();
|
|
Console.WriteLine($"正在执行的计划:{list.Count}");
|
|
return list;
|
|
}
|
|
else
|
|
{
|
|
if (plc.ReadInt16("DB104.DBX4.1").Content == 1)
|
|
{
|
|
strSql = @"select 0 Id,p.Dosing_Id,p.Plan_Id,p.Plan_Serial,p.Recipe_ID,p.Recipe_Name,p.Version,p.Plan_Num,p.Real_Num,p.Shift_Id,p.Shift_Class,p.Plan_State,p.Plan_StateText,p.Plan_TotalWeight,p.Plan_TotalError,
|
|
r.Total_Weight,r.Total_Error,m.Material_ID as MaterialID,m.Material_name,m.Bin_Serial as Station,m.Bin_Name as StationName,w.Set_Weight,w.Set_Error,p.IsRetransmission,p.Retransmission_Num,p.IsPrenatalTest,ISNULL(p.FlagNum,0) as FlagNum
|
|
from (select * from xl_plan where Plan_State=7 and Start_Date=(select Max(Start_Date) from xl_plan where Plan_State=7) ) p left join xl_recipe r on p.Recipe_ID=r.ID left join xl_weigh w on r.ID=w.Recipe_ID left join
|
|
(select b.Bin_Serial,b.Bin_Name,b.Bin_Code,b.Material_ID,m.Material_name from Pmt_Bin b left join xl_material m on m.ID=b.Material_ID) m on w.Bin_Serial=m.Bin_Serial";
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
Console.WriteLine($"正在执行的计划:{strSql}");
|
|
var list = fsql.Select<Xl_DownLoadPlan>().WithSql(strSql).ToList();
|
|
Console.WriteLine($"正在执行的计划:{list.Count}");
|
|
return list;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"查询执行计划:{ex.Message}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static List<Xl_DownLoadPlan> GetPlanInfo()
|
|
{
|
|
try
|
|
{
|
|
string sql = @"select 0 Id,p.Dosing_Id,p.Plan_Id,p.Plan_Serial,p.Recipe_ID,p.Recipe_Name,p.Version,p.Plan_Num,p.Real_Num,p.Shift_Id,p.Shift_Class,p.Plan_State,p.Plan_StateText,p.Plan_TotalWeight,p.Plan_TotalError,
|
|
r.Total_Weight,r.Total_Error,m.Material_ID as MaterialID,m.Material_name,m.Bin_Serial as Station,m.Bin_Name as StationName,w.Set_Weight,w.Set_Error,p.IsRetransmission,p.Retransmission_Num,p.IsPrenatalTest,0 FlagNum
|
|
from xl_plan p left join xl_recipe r on p.Recipe_ID=r.ID left join xl_weigh w on r.ID=w.Recipe_ID left join
|
|
(select b.Bin_Serial,b.Bin_Name,b.Bin_Code,b.Material_ID,m.Material_name from Pmt_Bin b left join xl_material m on m.ID=b.Material_ID) m on w.Bin_Serial=m.Bin_Serial
|
|
where p.Plan_State=3 ";
|
|
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
Console.WriteLine($"验证正在执行的计划1");
|
|
var list = fsql.Select<Xl_DownLoadPlan>().WithSql(sql).ToList();
|
|
Console.WriteLine($"验证正在执行的计划:{list.Count}");
|
|
var planList = list.OrderBy(d => d.Plan_Serial);
|
|
|
|
return planList.ToList();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"验证正在执行的计划:{ex.Message}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 获取LR_plan
|
|
|
|
/// <summary>
|
|
/// 获取LR_plan
|
|
/// </summary>
|
|
/// <param name="planID">计划号</param>
|
|
/// <returns>返回符合条件List<LR_weigh></returns>
|
|
public static LR_plan GetLrPlan(string planID, int realNum, int flagNum)
|
|
{
|
|
try
|
|
{
|
|
string strSql = "SELECT * FROM LR_plan where Plan_Id = @Plan_Id and Real_Num=@Real_Num and FlagNum=@flagNum";
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
LR_plan list = fsql.Select<LR_plan>().WithSql(strSql, new { Plan_Id = planID, Real_Num = realNum, flagNum = flagNum }).ToOne();
|
|
|
|
return list;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"查询LR_plan表数据失败:{ex.Message}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 产前检测——更新计划完成数量
|
|
/// <summary>
|
|
/// 更新计划完成数量
|
|
/// </summary>
|
|
/// <param name="planId">计划号</param>
|
|
/// <param name="quantity">完成数量</param>
|
|
/// <returns></returns>
|
|
public static bool UpdateCheckPlanCompletedQuantity(Xl_DownLoadPlan dp, int tcheckBatch, int state, DateTime endTime, double totalWeight)
|
|
{
|
|
try
|
|
{
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
int result = fsql.Update<xl_plan>().Set(a => new xl_plan
|
|
{
|
|
Real_Num = tcheckBatch,
|
|
Plan_TotalWeight = totalWeight,
|
|
Plan_State = state,
|
|
Plan_StateText = StateToShow(state),
|
|
End_Date = endTime.ToString("yyyy-MM-dd HH:mm:ss")
|
|
}).Where(a => a.Plan_Id == dp.Plan_Id).ExecuteAffrows();
|
|
|
|
if (result > 0) return true;
|
|
else return false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"产前检测更新xl_plan数据失败:{ex.Message}");
|
|
return false;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 将计划运行状态转换为文字进行显示
|
|
|
|
/// <summary>
|
|
/// 将计划运行状态转换为文字进行显示
|
|
/// </summary>
|
|
/// <param name="stateNum">计划状态代码</param>
|
|
/// <returns>显示的文字信息</returns>
|
|
public static string StateToShow(int stateNum)
|
|
{
|
|
string reStr = null;
|
|
|
|
if (stateNum == 3)
|
|
{
|
|
reStr = "正在运行";
|
|
}
|
|
else if (stateNum == 4)
|
|
{
|
|
reStr = "已下传";
|
|
}
|
|
else if (stateNum == 5)
|
|
{
|
|
reStr = "未启动";
|
|
}
|
|
else if (stateNum == 7)
|
|
{
|
|
reStr = "已终止";
|
|
}
|
|
else if (stateNum == 8)
|
|
{
|
|
reStr = "已完成";
|
|
}
|
|
|
|
return reStr;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region 根据ID获取料仓
|
|
/// <summary>
|
|
/// 获取所有物料对象集合
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static Pmt_Bin GetFristBinInfo(int Id)
|
|
{
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
Pmt_Bin bin = fsql.Select<Pmt_Bin>().Where(d => d.Bin_Serial == Id).ToOne();
|
|
|
|
return bin;
|
|
}
|
|
#endregion
|
|
|
|
#region 更新计划详情
|
|
|
|
public static bool UpdatePlanDetail(Xl_DownLoadPlan item, LR_plan lrPlan, LR_weigh lrWeigh, Pmt_Bin bin, Hw_BinAlarm alarm, int key)
|
|
{
|
|
try
|
|
{
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
if (item.IsPrenatalTest == 1)
|
|
{
|
|
if (key == 1)
|
|
{
|
|
fsql.Transaction(() =>
|
|
{
|
|
var affrows = fsql.Insert<LR_plan>(lrPlan).ExecuteAffrows();
|
|
//判断是否插入成功
|
|
if (affrows < 1)
|
|
throw new Exception("存盘计划详细数据失败!"); //抛出异常,回滚事务,事务退出
|
|
|
|
affrows = fsql.Insert<LR_weigh>(lrWeigh).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("存盘详细数据失败!");//抛出异常,回滚事务,事务退出
|
|
});
|
|
}
|
|
else
|
|
{
|
|
fsql.Transaction(() =>
|
|
{
|
|
var affrows = fsql.Insert<LR_plan>(lrPlan).ExecuteAffrows();
|
|
//判断是否插入成功
|
|
if (affrows < 1)
|
|
throw new Exception("存盘计划详细数据失败!"); //抛出异常,回滚事务,事务退出
|
|
lrWeigh.MainId = affrows;
|
|
affrows = fsql.Insert<LR_weigh>(lrWeigh).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("存盘详细数据失败!");//抛出异常,回滚事务,事务退出
|
|
});
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (key == 1)
|
|
{
|
|
fsql.Transaction(() =>
|
|
{
|
|
var affrows = Convert.ToInt32(fsql.Insert<LR_plan>(lrPlan).ExecuteIdentity());
|
|
//判断是否插入成功
|
|
if (affrows < 1)
|
|
throw new Exception("存盘计划详细数据失败!"); //抛出异常,回滚事务,事务退出
|
|
|
|
lrWeigh.MainId = affrows;
|
|
affrows = fsql.Insert<LR_weigh>(lrWeigh).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("存盘详细数据失败!");//抛出异常,回滚事务,事务退出
|
|
affrows = fsql.Update<Pmt_Bin>(bin.Bin_Serial).Set(a => a.BinWeight, bin.BinWeight).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("保存库存实时数据失败!");//抛出异常,回滚事务,事务退出
|
|
affrows = fsql.Insert<Hw_BinAlarm>(alarm).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("物料出库存盘数据失败!");//抛出异常,回滚事务,事务退出
|
|
});
|
|
}
|
|
else
|
|
{
|
|
fsql.Transaction(() =>
|
|
{
|
|
var affrows = fsql.Insert<LR_weigh>(lrWeigh).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("存盘详细数据失败!");//抛出异常,回滚事务,事务退出
|
|
bin.Equip_Code = "00";
|
|
affrows = fsql.Update<Pmt_Bin>(bin.Bin_Serial).Set(a => a.BinWeight, bin.BinWeight).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("保存库存实时数据失败!");//抛出异常,回滚事务,事务退出
|
|
affrows = fsql.Insert<Hw_BinAlarm>(alarm).ExecuteAffrows();
|
|
if (affrows < 1)
|
|
throw new Exception("物料出库存盘数据失败!");//抛出异常,回滚事务,事务退出
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 保存执行计划
|
|
public static bool UpdateCheckLrPlanCompletedQuantity(Xl_DownLoadPlan dp, int tcheckBatch, int state, DateTime endTime, double totalWeight, int flagNum)
|
|
{
|
|
try
|
|
{
|
|
IFreeSql fsql = FreeHelper.Instance;
|
|
int result = fsql.Update<LR_plan>().Set(a => new LR_plan
|
|
{
|
|
Real_Num = tcheckBatch,
|
|
Total_Weight = decimal.Parse(totalWeight.ToString()),
|
|
Plan_State = state,
|
|
End_Date = endTime.ToString("yyyy-MM-dd HH:mm:ss")
|
|
}).Where(a => a.Plan_Id == dp.Plan_Id && a.FlagNum == flagNum).ExecuteAffrows();
|
|
|
|
if (result > 0) return true;
|
|
else return false;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|