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.S7
|
{
|
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(!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 wcsTask = WCSHelper.GetTask(model.taskCode);
|
ITaskRepository MainMissionService = new TaskRepository();
|
var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);
|
if (wcsTask != null)
|
{
|
if (!string.IsNullOrWhiteSpace(model.method))
|
{
|
ILocRepository locrep = new LocRepository();
|
var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);
|
var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);
|
|
switch (model.method)
|
{
|
case "start":
|
LogHelper.Info($"海康车任务状态变更为执行,任务号为:{model.taskCode}", "agv杭叉交互日志");
|
if (wcsTask.S_B_STATE.Trim() == "已推送") {
|
wcsTask.S_B_STATE = "执行中";
|
wcsTask.T_START_TIME = DateTime.Now;
|
MainMissionService.Update(wcsTask);
|
}
|
break;
|
case "outbin":
|
LogHelper.Info($"海康车任务状态变更为取货完成,任务号为:{model.taskCode}", "agv杭叉交互日志");
|
wcsTask.S_B_STATE = "取货完成";
|
MainMissionService.Update(wcsTask);
|
startloc.S_LOCK_STATE="无";
|
startloc.T_MODIFY=DateTime.Now;
|
locrep.Update(startloc);
|
//LocationHelper.UnLockLoc(wcsTask.S_START_LOC);
|
break;
|
case "end":
|
LogHelper.Info($"海康车任务状态变更为完成,任务号为:{model.taskCode}", "agv杭叉交互日志");
|
wcsTask.S_B_STATE = "完成";
|
//End(wcsTask);
|
|
wcsTask.S_B_STATE = "完成";
|
wcsTask.T_END_TIME = DateTime.Now;
|
endLoc.S_LOCK_STATE="无";
|
endLoc.T_MODIFY=DateTime.Now;
|
locrep.Update(endLoc);
|
//LocationMethod.JudgeLocation(wcsTask);
|
break;
|
case "cancel":
|
LogHelper.Info($"海康车任务状态变更为取消,任务号为:{model.taskCode}", "agv杭叉交互日志");
|
wcsTask.S_B_STATE = "取消";
|
//TaskProcess.OperateStatus(wcsTask, 7);
|
//WCSHelper.Fail(wcsTask);
|
break;
|
case "apply":
|
// 判断该任务的接驳位是否有其他入库或出库任务,如果有,则在等位等待,如果没有,则入
|
TaskisOk(wcsTask);
|
break;
|
}
|
|
//WCSHelper.AddActionRecord(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);
|
//调用第三方接口(如果有)TaskProcess.ReportStatus
|
}
|
else
|
{
|
// 暂时设定为0
|
wcsTask.S_B_STATE = "上报状态空";
|
//安全请求等
|
//TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);
|
}
|
}
|
else
|
{
|
LogHelper.Info($"当前任务号任务不存在{model.taskCode}", "agv杭叉交互日志");
|
}
|
#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;
|
#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
|
{
|
taskCode = task.S_TASK_NO,
|
ctnrCode = task.S_CNTRS,
|
taskTyp = "F02",
|
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}";
|
|
Console.WriteLine(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]
|
// 车辆取放申请。
|
#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
|
}
|
}
|
|