using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using yunneiWCS.EnumDefine;
using System.ServiceModel;
using yunneiWCS.ORM;
using yunneiWCS.DataAccess;
using yunneiWCS.ExtendFunction;
namespace yunneiWCS.SystemInteraction.tianyong
{
public class TianYongSystem
{
/// 机器人上料 安全交互信号
///
///
/// 站点号
/// 1=进2=出
/// 任务id
///
public static bool safetySignal(string station, int OutOrIn, string agvTaskNo, string remark)
{
bool res = false;
//放开代码 【EditBy shaocx,2023-10-13】
/*
//注意:暂时写为true,以后要修改为正式的 【EditBy shaocx,2022-03-18】!!!!
res = true;
remark = "【注意:本次是模拟天永返回TRUE】" + remark;
return res;
//*/
try
{
var materialCode = "";
using (dbmodel mod = new dbmodel())
{
task sf = mod.task.FirstOrDefault(x => x.AgvTaskNo == agvTaskNo);
int quantity = 0;
if (sf != null)
{
if (sf.taskType == (int)taskType.缸体上线 || sf.taskType == (int)taskType.缸体下线直接去上线点)
{
VproductStock stock = mod.VproductStock.FirstOrDefault(x => x.positionName == sf.toPlace);
if (stock != null)
{
quantity = (int)stock.quantity;
}
}
materialCode = sf.materialCode;
}
else
{
WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "safetySignal", "根据AgvTaskNo:" + agvTaskNo + "获取任务为NULL");
return false;
}
int taskId = (int)sf.taskId;
using (yunneiWCS.tianyong.AutoServiceSoapClient ty = new yunneiWCS.tianyong.AutoServiceSoapClient())
{
res = ty.safetySignal(station, OutOrIn, taskId, quantity, materialCode);
}
if (res)
{
remark = "推送成功," + remark;
sf.isSendTotianyong = 1;
sf.isSendTotianyongName = "是";
sf.SendTotianyongTime = DateTime.Now;
sf.SendTotianyongRemark = remark;
}
else
{
remark = "推送失败," + remark;
sf.isSendTotianyong = 0;
sf.isSendTotianyongName = "否";
sf.SendTotianyongTime = DateTime.Now;
sf.SendTotianyongRemark = remark;
}
TianYongLogHandler.AddTianYongLog(mod, sf, remark, res, "safetySignal", station, OutOrIn.ToString(), taskId.ToString(), quantity.ToString(), materialCode);
var res_SaveChanges = mod.SaveChanges();
if (res_SaveChanges > 0)
{
}
else
{
throw new Exception("更新数据失败");
}
Form1.agvInfo = "agv上下料:返回信息:" + res;
string resString = res == true ? "允许" : "不允许";
WZ.Useful.Commons.LogTextHelper.WriteLine("IyunneiWcf", "safetySignal", "收到安全信号站点号:" +
station + " 1=进2=出:" + OutOrIn + " 任务ID:" + taskId + " 数量:" + quantity + " 物料编码:" + materialCode + " 天永返回状态:" + resString);
}
}
catch (Exception ex)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "safetySignal", ex.ToString());
}
return res;
}
/// 给天永发信号,缸体上线去旁路工位、缸盖进入、缸盖出去、人工缸盖进入、人工缸盖出去,人工缸体进入,人工缸体出去 的 交互信号
///
///
/// 站点号
/// 任务id
///
public static bool UpdateStoreByTaskID(dbmodel mod, task task, string station, int taskId, string _SendTotianyongRemark)
{
bool res = false;
try
{
//using (dbmodel mod = new dbmodel())
//{
task sf = mod.task.FirstOrDefault(x => x.taskId == taskId);
if (sf == null)
{
throw new Exception("根据任务ID" + taskId + "没有找到任务");
}
int quantity = 0;
taskType _taskType = (taskType)Enum.Parse(typeof(taskType), sf.taskType.ToString());
switch (_taskType)
{
case taskType.缸盖上线:
case taskType.缸盖下线直接去上线点:
case taskType.缸体上线:
case taskType.缸体下线直接去上线点:
case taskType.缸体上线去旁路工位: //增加任务类型 【EditBy shaocx,2022-04-23】
quantity = (int)task.quantity;//直接使用数量,而不是去查库存了 【EditBy shaocx,2022-05-04】
// VproductStock stock = null;
//stock = mod.VproductStock.FirstOrDefault(x => x.positionName == sf.toPlace);
//if (stock != null)
//{
// quantity = (int)stock.quantity;
//}
//else
//{
// throw new Exception("根据站点" + sf.toPlace + "获取库存为NULL");
//}
break;
case taskType.空托回库:
case taskType.余料回库:
quantity = 0;
break;
}
var simulatorNote = "";
if (!MyExtendHelper.IsAllowSimulatorHandle(task))
{
simulatorNote = "[正式环境]";
using (yunneiWCS.tianyong.AutoServiceSoapClient ty = new yunneiWCS.tianyong.AutoServiceSoapClient())
{
res = ty.UpdateStoreByTaskID(taskId, quantity);
}
}
else
{
simulatorNote = "[模拟环境]";
res = true;//模拟写死
}
if (res)
{
sf.isSendTotianyong = 1;
sf.isSendTotianyongName = "是";
sf.SendTotianyongTime = DateTime.Now;
sf.SendTotianyongRemark = simulatorNote + "推送成功," + _SendTotianyongRemark;
// mod.SaveChanges();//不再更新,因为他上层方法已经更新了
}
else
{
sf.isSendTotianyong = 0;
sf.isSendTotianyongName = "否";
sf.SendTotianyongTime = DateTime.Now;
sf.SendTotianyongRemark = simulatorNote + "推送失败," + _SendTotianyongRemark;
// mod.SaveChanges();//不再更新,因为他上层方法已经更新了
}
TianYongLogHandler.AddTianYongLog(mod, sf, sf.SendTotianyongRemark, res, "UpdateStoreByTaskID", "", "", taskId.ToString(), quantity.ToString(), "");
string resString = res == true ? "允许" : "不允许";
WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "UpdateStoreByTaskID", "收到安全信号站点号:" +
station + " 任务ID:" + taskId + " 天永返回状态:" + resString);
//}
}
catch (Exception ex)
{
WZ.Useful.Commons.LogTextHelper.WriteLine("TianYongSystem", "UpdateStoreByTaskID", ex.ToString());
throw ex;
}
return res;
}
}
}