using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HH.WCS.Mobox3.FJJT.util; using HH.WCS.Mobox3.FJJT.wms; using Newtonsoft.Json; using static HH.WCS.Mobox3.FJJT.api.ApiModel; using static HH.WCS.Mobox3.FJJT.util.ExcetionHelper; namespace HH.WCS.Mobox3.FJJT.dispatch { internal class WCSDispatch { private static readonly HttpHelper apiHelper = new HttpHelper(); private static readonly string baseUrl = "http://10.30.10.8:8100/dev-api"; internal static string GenerateReqId() { var id = SYSHelper.GetSerialNumber("请求ID", "RE"); var date = DateTime.Now.ToString("yyMMdd"); return $"{date}{id.ToString().PadLeft(4, '0')}"; } /// /// 任务下发 /// /// /// public static bool sendTask(SendTaskModel model) { var result = false; model.reqId = GenerateReqId(); model.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var request = JsonConvert.SerializeObject(model); try { var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request); LogHelper.Info($"[WCS-sendTask] request={request} response={response}", "WMS"); if (response != null && response != "") { var dataResult = JsonConvert.DeserializeObject(response); if (dataResult.code == 200) { result = true; } else { WMSHelper.addAlarmRecord("流程异常", "高", $"下发WCS任务失败,WCS反馈原因:{dataResult.msg}"); throw new BusinessException($"下发WCS任务失败,WCS反馈原因:{dataResult.msg}"); } } else { WMSHelper.addAlarmRecord("流程异常", "高", $"下发WCS任务失败,WCS没有返回数据"); throw new BusinessException($"下发WCS任务失败,WCS没有返回数据"); } } catch (BusinessException be) { throw be; } catch (Exception ex) { WMSHelper.addAlarmRecord("系统异常", "高", $"下发WCS任务错误,错误原因:{ex.Message}"); throw new BusinessException($"下发WCS任务错误,错误原因:{ex.Message}"); } return result; } /// /// 任务取消(任务执行中不允许取消) /// /// /// public static bool cancelTask(CancelTaskModel model) { var result = false; model.reqId = GenerateReqId(); model.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var request = JsonConvert.SerializeObject(model); try { var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request); LogHelper.Info($"[WCS-cancelTask] request={request} response={response}", "WMS"); if (response != null && response != "") { var dataResult = JsonConvert.DeserializeObject(response); if (dataResult.code == 200) { result = true; } else { WMSHelper.addAlarmRecord("流程异常", "高", $"取消WCS任务失败,WCS反馈原因:{dataResult.msg}"); throw new BusinessException($"取消WCS任务失败,WCS反馈原因:{dataResult.msg}"); } } else { WMSHelper.addAlarmRecord("流程异常", "高", $"取消WCS任务失败,WCS没有返回数据"); throw new BusinessException($"取消WCS任务失败,WCS没有返回数据"); } } catch (BusinessException be) { throw be; } catch (Exception ex) { WMSHelper.addAlarmRecord("系统异常", "高", $"取消WCS任务错误,错误原因:{ex.Message}"); throw new BusinessException($"取消WCS任务错误,错误原因:{ex.Message}"); } return result; } /// /// 获取设备状态 /// /// /// public static List getDeviceStatus(List deviceNoList) { List deviceStatusDatas = new List(); DeviceStatusModel model = new DeviceStatusModel() { reqId = GenerateReqId(), reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), deviceNoList = deviceNoList }; var request = JsonConvert.SerializeObject(model); try { var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request); LogHelper.Info($"[WCS-getDeviceStatus] request={request} response={response}", "WMS"); if (response != null && response != "") { var dataResult = JsonConvert.DeserializeObject(response); if (dataResult.code == 200) { deviceStatusDatas = JsonConvert.DeserializeObject>(response); } else { WMSHelper.addAlarmRecord("流程异常", "高", $"获取设备状态失败,WCS反馈原因:{dataResult.msg}"); throw new BusinessException($"获取设备状态失败,WCS反馈原因:{dataResult.msg}"); } } else { WMSHelper.addAlarmRecord("流程异常", "高", $"获取设备状态失败,WCS没有返回数据"); throw new BusinessException($"获取设备状态失败,WCS没有返回数据"); } } catch (BusinessException be) { throw be; } catch (Exception ex) { WMSHelper.addAlarmRecord("系统异常", "高", $"获取设备状态错误,错误原因:{ex.Message}"); throw new BusinessException($"获取设备状态错误,错误原因:{ex.Message}"); } return deviceStatusDatas; } /// /// 修改任务优先级 /// /// /// public static bool changePriority(ChangePriorityModel model) { var result = false; model.reqId = GenerateReqId(); model.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var request = JsonConvert.SerializeObject(model); try { var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request); LogHelper.Info($"[WCS-changePriority] request={request} response={response}", "WMS"); if (response != null && response != "") { var dataResult = JsonConvert.DeserializeObject(response); if (dataResult.code == 200) { result = true; } else { WMSHelper.addAlarmRecord("流程异常", "高", $"修改任务优先级失败,WCS反馈原因:{dataResult.msg}"); throw new BusinessException($"修改任务优先级失败,WCS反馈原因:{dataResult.msg}"); } } else { WMSHelper.addAlarmRecord("流程异常", "高", $"修改任务优先级失败,WCS没有返回数据"); throw new BusinessException($"修改任务优先级失败,WCS没有返回数据"); } } catch (BusinessException be) { throw be; } catch (Exception ex) { WMSHelper.addAlarmRecord("系统异常", "高", $"修改任务优先级错误,错误原因:{ex.Message}"); throw new BusinessException($"修改任务优先级错误,错误原因:{ex.Message}"); } return result; } /// /// AGV安全交互 /// /// /// /// /// public static bool safetyInteraction(string req_no, string locCode, string type) { var result = false; LocStateModel model = new LocStateModel() { req_no = req_no, loc_code = locCode, type = type }; var request = JsonConvert.SerializeObject(model); try { var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request); LogHelper.Info($"[WCS-changePriority] request={request} response={response}", "WMS"); if (response != null && response != "") { var dataResult = JsonConvert.DeserializeObject(response); if (dataResult.code == 200) { result = true; } else { WMSHelper.addAlarmRecord("流程异常", "高", $"AGV安全交互请求失败,WCS反馈原因:{dataResult.msg}"); throw new BusinessException($"AGV安全交互请求失败,WCS反馈原因:{dataResult.msg}"); } } else { WMSHelper.addAlarmRecord("流程异常", "高", $"AGV安全交互请求失败,WCS没有返回数据"); throw new BusinessException($"AGV安全交互请求失败,WCS没有返回数据"); } } catch (BusinessException be) { throw be; } catch (Exception ex) { WMSHelper.addAlarmRecord("系统异常", "高", $"AGV安全交互请求错误,错误原因:{ex.Message}"); throw new BusinessException($"AGV安全交互请求错误,错误原因:{ex.Message}"); } return result; } public class LocStateModel { public string req_no { get; set; } // 请求id public string loc_code { get; set; } // 货位 public string type { get; set; } // 货位 1 请求取货 2 请求放货 3 取货完成离开信号 4 放货完成离开信号 } public class ChangePriorityModel { public string reqId { get; set; } // 请求id public string reqTime { get; set; } // 请求时间 public string taskNo { get; set; } // 任务号 public int priority { get; set; } // 优先级 } public class DeviceStatusData { public string deviceNo { get; set; } // 设备号 public int workStatus { get; set; } // 工作状态 1可用,2不可用 public int photoStatus { get; set; } // 光电状态 1是空载 ,2是有载 public int manualStatus { get; set; } //手动状态 0.禁用 1.启用 } public class DeviceStatusModel { public string reqId { get; set; } // 请求id public string reqTime { get; set; } // 请求时间 public List deviceNoList { get; set; } // 设备号 } public class CancelTaskModel { public string reqId { get; set; } // 请求id public string reqTime { get; set; } // 请求时间 public string taskNo { get; set; } // 任务号 } public class SendTaskModel { public string reqId { get; set; } // 请求id public string reqTime { get; set; } // 请求时间 public string taskNo { get; set; } // 任务号 public int groupNo { get; set; } // 任务组 public string taskType { get; set; } // 任务类型 1.物料入库 2.物料出库 public string from { get; set; } // 起点 public string to { get; set; } // 终点 public string cntrNo { get; set; } // 容器编码 public string cntrType { get; set; } // 容器类型 public List extData { get; set; } // 容器类型 } } }