using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows;
|
using System.Windows.Controls;
|
using System.Windows.Data;
|
using System.Windows.Documents;
|
using System.Windows.Input;
|
using System.Windows.Markup;
|
using System.Windows.Media;
|
using System.Windows.Media.Imaging;
|
using System.Windows.Navigation;
|
using System.Windows.Shapes;
|
using System.Runtime.Serialization;
|
using System.Collections.Concurrent;
|
using System.ServiceModel;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
using System.Net;
|
using NLog;
|
using NLog.Config;
|
using NLog.Targets;
|
using GZ.DB.Map.OIDATABASE;
|
using GZ.DB.App.OIDATABASE;
|
using GZ.DB.Repository.OIDATABASE;
|
using GZ.DB.IRepository.OIDATABASE;
|
using GZ.DB.Entity.OIDATABASE;
|
namespace GZ.Projects.AuxAllWCS
|
{
|
public partial class ViewModel : System.ComponentModel.INotifyPropertyChanged
|
{
|
#region 私有变量
|
//集成互联
|
private Conn Conn = new Conn();
|
//设备通信
|
private Device Device = new Device();
|
//变量数据库
|
private Tag tag = new Tag();
|
public Tag Tag
|
{
|
get { return tag; }
|
set { tag = value; RaisePropertyChanged(nameof(Tag)); }
|
}
|
//简化PLC
|
public EasyPLC EasyPLC = new EasyPLC();
|
#endregion
|
|
#region 构造函数
|
private static ViewModel _ViewModel = null;
|
private static List<object> _Windows = new List<object>();
|
public static ViewModel CreateInstance(object obj, Type type)
|
{
|
if (_ViewModel == null)
|
{
|
_ViewModel = new ViewModel();
|
}
|
if (!_Windows.Contains(obj))
|
{
|
_Windows.Add(obj);
|
}
|
return _ViewModel;
|
}
|
public ViewModel()
|
{
|
|
}
|
#endregion
|
|
#region 自定义指令
|
public void Method1(System.Int32 param1)
|
{
|
#region [自定义指令][20250323111354905][Method1]
|
|
#endregion [自定义指令][20250323111354905][Method1]
|
}
|
public void SettingInit()
|
{
|
#region [自定义指令][20250323144605974][SettingInit]
|
try
|
{
|
var jsonFile = System.AppDomain.CurrentDomain.BaseDirectory + "/Static/config.json";
|
using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile))
|
{
|
using (JsonTextReader reader = new JsonTextReader(file))
|
{
|
JObject o = (JObject)JToken.ReadFrom(reader);
|
foreach (Newtonsoft.Json.Linq.JProperty keyValue in o.Properties())
|
{
|
Console.WriteLine(keyValue.Name);
|
if (keyValue.Name == "HostToAgvServerUrl")
|
{
|
Settings.HostToAgvServerUrl = keyValue.Value.ToString();
|
}
|
if (keyValue.Name == "deviceInfo")
|
{
|
Settings.deviceInfos = JsonConvert.DeserializeObject<List<deviceInfo>>(keyValue.Value.ToString());
|
}
|
if (keyValue.Name == "HKbaseUrl")
|
{
|
Settings.HKbaseUrl = keyValue.Value.ToString();
|
}
|
if (keyValue.Name == "MESbaseUrl")
|
{
|
Settings.MESbaseUrl = keyValue.Value.ToString();
|
}
|
if (keyValue.Name == "WMSbaseUrl")
|
{
|
Settings.WMSbaseUrl = keyValue.Value.ToString();
|
}
|
}
|
}
|
}
|
//if(!Settings.FirstG)
|
//LogHelper.Info("加载配置文件信息 完成");
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error("加载配置文件失败!" + ex.Message, ex);
|
}
|
#endregion [自定义指令][20250323144605974][SettingInit]
|
}
|
public void OperateHKTaskStatus(System.Object param1)
|
{
|
#region [自定义指令][20250324165239206][OperateHKTaskStatus]
|
HaiKangOrderInfo model = (HaiKangOrderInfo)param1;
|
if (string.IsNullOrEmpty(model.taskCode))
|
return;
|
var hkr = AutoThread.InvokeMethod(AutoThread.Instance, "OperateHKTaskStatus", new object[] { model });
|
//return JsonConvert.SerializeObject(hkr);
|
#endregion [自定义指令][20250324165239206][OperateHKTaskStatus]
|
}
|
public GZ.DB.Entity.OIDATABASE.TaskEntity Begin(GZ.DB.Entity.OIDATABASE.TaskEntity task)
|
{
|
#region [自定义指令][20250324170811305][Begin]
|
if (task.S_B_STATE.Trim() == "已推送")
|
{
|
task.S_B_STATE = "执行中";
|
task.T_START_TIME = DateTime.Now;
|
}
|
return task;
|
#endregion [自定义指令][20250324170811305][Begin]
|
}
|
public GZ.DB.Entity.OIDATABASE.TaskEntity End(GZ.DB.Entity.OIDATABASE.TaskEntity task)
|
{
|
#region [自定义指令][20250324170922920][End]
|
if (task != null)
|
{
|
task.S_B_STATE = "完成";
|
task.T_END_TIME = DateTime.Now;
|
}
|
return task;
|
#endregion [自定义指令][20250324170922920][End]
|
}
|
public GZ.DB.Entity.OIDATABASE.TaskEntity UpdateStatus(GZ.DB.Entity.OIDATABASE.TaskEntity task, System.String status)
|
{
|
#region [自定义指令][20250324171118766][UpdateStatus]
|
task.S_B_STATE = status;
|
return task;
|
#endregion [自定义指令][20250324171118766][UpdateStatus]
|
}
|
public void RunafterMac(System.Object dev, System.Boolean blen)
|
{
|
#region [自定义指令][20250325085905222][RunafterMac]
|
var device = (deviceInfo)dev;
|
if (device.areaPriy.Any() && device.deviceNo.Any())
|
{
|
LocRepository locRepository = new LocRepository();
|
LocContainerRepository locContainerRepository = new LocContainerRepository();
|
ContainerRepository containerRepository = new ContainerRepository();
|
LocEntity startLoc = null;
|
string Sign = device.deviceType == 1 ? "F" : "E";
|
foreach (var sloc in device.deviceNo)
|
{
|
ContainerEntity c = null;
|
var Startloc = locRepository.FindEntity(x => x.S_LOC_CODE == sloc);
|
if (Startloc != null && Startloc.N_CURRENT_NUM == 1 && Startloc.S_LOCK_STATE == "无")
|
{
|
var cntr = locContainerRepository.FindEntity(x => x.S_LOC_CODE == sloc);
|
if (cntr != null)
|
{
|
c = containerRepository.FindEntity(x => x.S_CODE == cntr.S_CNTR_CODE);
|
if (c != null && c.S_TYPE == Sign)
|
{
|
startLoc = Startloc;
|
}
|
}
|
}
|
|
if (startLoc != null)
|
{
|
foreach (var dn in device.areaPriy)
|
{
|
LocEntity endLoc = null;
|
var di = Settings.deviceInfos.Find(x => x.deviceName == dn);
|
if (di != null)
|
{
|
foreach (var ssloc in di.deviceNo)
|
{
|
var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);
|
if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == "无")
|
{
|
endLoc = endloc;
|
break;
|
}
|
}
|
if (endLoc != null)
|
{
|
TaskProcess.CreateTask("", startLoc.S_LOC_CODE, endLoc.S_LOC_CODE, $"托盘流转-{Sign}", 5, new List<string> { c.S_CODE });
|
break;
|
}
|
}
|
}
|
}
|
}
|
}
|
#endregion [自定义指令][20250325085905222][RunafterMac]
|
}
|
public System.Boolean RunTask(GZ.DB.Entity.OIDATABASE.TaskEntity task)
|
{
|
#region [自定义指令][20250325092323531][RunTask]
|
|
ILocRepository locrep = new LocRepository();
|
var startloc = locrep.FindEntity(x => x.S_LOC_CODE == task.S_START_LOC);
|
var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == task.S_END_LOC);
|
if (startloc == null || endLoc == null)
|
{
|
LogHelper.Info($"{task.S_TASK_NO}-任务起/终点 没找到数据。");
|
return false;
|
}
|
var start = startloc.S_AGV_SITE;
|
var end = endLoc.S_AGV_SITE;
|
|
// 创建两个路径
|
var positions = new List<positionCodePath>(){
|
new positionCodePath()
|
{
|
positionCode = start,
|
Type = "00"
|
},
|
new positionCodePath()
|
{
|
positionCode = end,
|
Type = "00"
|
}
|
};
|
|
//调第三方接口
|
var model = new HaiKangOrderInfo
|
{
|
reqCode = task.S_TASK_NO.Trim(),
|
reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
taskCode = task.S_TASK_NO.Trim(),
|
ctnrCode = task.S_CNTRS,
|
taskTyp = task.S_INDEX,
|
positionCodePath = positions
|
};
|
|
return CreateOrder(model);
|
#endregion [自定义指令][20250325092323531][RunTask]
|
}
|
public System.Boolean CreateOrder(System.Object m)
|
{
|
#region [自定义指令][20250325095053549][CreateOrder]
|
var model = (HaiKangOrderInfo)m;
|
var msg = "";
|
var result = false;
|
var request = JsonConvert.SerializeObject(model);
|
var response = Settings.apiHelper.Post(Settings.HKbaseUrl + "rcms/services/rest/hikRpcService/genAgvSchedulingTask", request);
|
msg = $"[haikang-CreateOrder] request={request} response={response}";
|
|
LogHelper.Info(msg);
|
if (response != "")
|
{
|
try
|
{
|
var dataResult = JsonConvert.DeserializeObject<HKResult>(response);
|
if (dataResult.code == "0")
|
{
|
result = true;
|
}
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine(ex.Message);
|
LogHelper.Info(msg, "海康");
|
}
|
}
|
else
|
{
|
msg = "[haikang-CreateOrder]创建订单失败";
|
Console.WriteLine(msg);
|
}
|
|
LogHelper.Info(msg, "海康");
|
return result;
|
#endregion [自定义指令][20250325095053549][CreateOrder]
|
}
|
public void TaskisOk(GZ.DB.Entity.OIDATABASE.TaskEntity task)
|
{
|
#region [自定义指令][20250325100336909][TaskisOk]
|
// 车辆取放申请。
|
if ("取货申请" != "")
|
{
|
var device1 = Settings.deviceInfos.Find(x => x.location.Contains(task.S_START_LOC));
|
if (device1 != null)
|
{
|
var left = device1.location.ToList().FindIndex(x => x == task.S_START_LOC) == 0;
|
if (device1.deviceType == 1)
|
{
|
if (device1.deviceName.Contains("维希尔抓臂"))
|
{
|
if ("IN_BEFORE" == "IN_BEFORE" || "out_BEFORE" == "out_BEFORE")
|
{
|
string V = left ? "R01" : "R03";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("IN_after" == "IN_after" || "out_after" == "out_after")
|
{
|
string V = left ? "R02" : "R04";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
}
|
else if (device1.deviceName.Contains("Js捷顺"))
|
{
|
if ("IN_BEFORE" == "IN_BEFORE")
|
{
|
string V = left ? "M0" : "M1";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("out_BEFORE" == "out_BEFORE")
|
{
|
//string V = left ? "R01" : "R03";
|
//Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("IN_after" == "IN_after")
|
{
|
string V = left ? "M2" : "M3";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("out_after" == "out_after")
|
{
|
string V = left ? "M6" : "M7";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
}
|
}
|
}
|
}
|
if ("放货申请" != "")
|
{
|
var device1 = Settings.deviceInfos.Find(x => x.location.Contains(task.S_END_LOC));
|
if (device1 != null)
|
{
|
var left = device1.location.ToList().FindIndex(x => x == task.S_END_LOC) == 0;
|
if (device1.deviceType == 1)
|
{
|
if (device1.deviceName.Contains("维希尔抓臂"))
|
{
|
if ("IN_BEFORE" == "IN_BEFORE" || "out_BEFORE" == "out_BEFORE")
|
{
|
string V = left ? "R01" : "R03";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("IN_after" == "IN_after" || "out_after" == "out_after")
|
{
|
string V = left ? "R02" : "R04";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
}
|
else if (device1.deviceName.Contains("Js捷顺"))
|
{
|
if ("IN_BEFORE" == "IN_BEFORE")
|
{
|
string V = left ? "M0" : "M1";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("out_BEFORE" == "out_BEFORE")
|
{
|
string V = left ? "M4" : "M5";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("IN_after" == "IN_after")
|
{
|
string V = left ? "M2" : "M3";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
if ("out_after" == "out_after")
|
{
|
string V = left ? "M6" : "M7";
|
Conn.默认Redis.SetValue(device1.deviceName + "." + V, "true", device1.deviceName + "Queue");
|
}
|
}
|
}
|
}
|
}
|
#endregion [自定义指令][20250325100336909][TaskisOk]
|
}
|
public System.Boolean continueTask(System.Object m)
|
{
|
#region [自定义指令][20250325100607380][continueTask]
|
var model = (HaiKangOrderInfo)m;
|
bool result = false;
|
string msg = "";
|
var request = JsonConvert.SerializeObject(model);
|
var response = Settings.apiHelper.Post(Settings.HKbaseUrl + "rcms/services/rest/hikRpcService/continueTask", request);
|
msg = $"[haikang-CancelOrder] request={request};response={response}";
|
Console.WriteLine(msg);
|
if (response != "")
|
{
|
var dataResult = JsonConvert.DeserializeObject<HKResult>(response);
|
if (dataResult.code == "0")
|
{
|
result = true;
|
}
|
}
|
else
|
{
|
msg = "[haikang-CancelOrder]获取任务状态失败";
|
Console.WriteLine(msg);
|
}
|
LogHelper.Info(msg, "海康");
|
return result;
|
#endregion [自定义指令][20250325100607380][continueTask]
|
}
|
public System.Boolean CancelOrder(System.Object m)
|
{
|
#region [自定义指令][20250325100705351][CancelOrder]
|
var model = (HaiKangOrderInfo)m;
|
bool result = false;
|
string msg = "";
|
var request = JsonConvert.SerializeObject(model);
|
var response = Settings.apiHelper.Post(Settings.HKbaseUrl + "rcms/services/rest/hikRpcService/continueTask", request);
|
msg = $"[haikang-CancelOrder] request={request};response={response}";
|
Console.WriteLine(msg);
|
if (response != "")
|
{
|
var dataResult = JsonConvert.DeserializeObject<HKResult>(response);
|
if (dataResult.code == "0")
|
{
|
result = true;
|
}
|
}
|
else
|
{
|
msg = "[haikang-CancelOrder]取消订单失败";
|
Console.WriteLine(msg);
|
}
|
LogHelper.Info(msg, "海康");
|
return result;
|
#endregion [自定义指令][20250325100705351][CancelOrder]
|
}
|
public System.String GetSerialNumber(System.String snType, System.String prefix)
|
{
|
#region [自定义指令][20250325131530407][GetSerialNumber]
|
int result = 0;
|
return "";
|
#endregion [自定义指令][20250325131530407][GetSerialNumber]
|
}
|
#endregion
|
}
|
}
|