| | |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_DTO; |
| | | using WIDESEAWCS_DTO.RGV.FOURBOT; |
| | | using WIDESEAWCS_IBasicInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | |
| | | { |
| | | public class ApiInfoService : ServiceBase<Dt_ApiInfo, IRepository<Dt_ApiInfo>>, IApiInfoService |
| | | { |
| | | public ApiInfoService(IRepository<Dt_ApiInfo> BaseDal) : base(BaseDal) |
| | | private readonly IInterfaceLogService _interfaceLogService; |
| | | public ApiInfoService(IRepository<Dt_ApiInfo> BaseDal, IInterfaceLogService interfaceLogService) : base(BaseDal) |
| | | { |
| | | _interfaceLogService = interfaceLogService; |
| | | } |
| | | |
| | | public IRepository<Dt_ApiInfo> Repository => BaseDal; |
| | | |
| | | /// <summary> |
| | | /// Postæ¥å£è¯·æ± |
| | | /// </summary> |
| | | /// <param name="apiCode">æ¥å£ç¼å·</param> |
| | | /// <param name="requestParameters">请æ±å
容</param> |
| | | /// <param name="remark">夿³¨</param> |
| | | /// <param name="isAdd">æ¯å¦æ·»å æ¥å¿</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent PostInterfaceRequest(string apiCode, string requestParameters, string remark, bool isAdd = true) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | string response = string.Empty; |
| | | Dt_ApiInfo? apiInfo = null; |
| | | try |
| | | { |
| | | apiInfo = BaseDal.QueryFirst(x => x.ApiCode == apiCode) ?? throw new Exception($"æªæ¾å°{remark}æ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | response = HttpHelper.Post(apiInfo.ApiAddress, requestParameters); |
| | | if (apiInfo.Remark.Contains("åå车")) |
| | | { |
| | | FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); |
| | | if (fOURBOTReturn == null) throw new Exception($"{apiInfo.Remark}ååºå
容转æ¢å®ä½å¤±è´¥ï¼"); |
| | | if (fOURBOTReturn.returnCode != 0) throw new Exception(fOURBOTReturn.returnUserMsg); |
| | | content.Data = fOURBOTReturn; |
| | | } |
| | | else if (apiInfo.Remark.Contains("å¯ä¹å£«")) |
| | | { |
| | | |
| | | } |
| | | else if (apiInfo.Remark.Contains("海康")) |
| | | { |
| | | |
| | | } |
| | | else if (apiInfo.Remark.Contains("WMS")) |
| | | { |
| | | |
| | | } |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | if (isAdd && !string.IsNullOrEmpty(response) && apiInfo != null) |
| | | { |
| | | Dt_InterfaceLog interfaceLog = new Dt_InterfaceLog() |
| | | { |
| | | ApiCode = apiCode, |
| | | RequestParameters = requestParameters, |
| | | ApiAddress = apiInfo.ApiAddress, |
| | | ApiName = apiInfo.ApiName, |
| | | PushFrequency = 1, |
| | | PushState = content.Status ? 1 : 2, |
| | | Requestor = "WCS", |
| | | Recipient = apiInfo.Remark, |
| | | ResponseParameters = response, |
| | | Creater = "System", |
| | | Remark = content.Status ? remark : content.Message, |
| | | }; |
| | | _interfaceLogService.Repository.AddData(interfaceLog); |
| | | } |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_IBasicInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | | |
| | | namespace WIDESEAWCS_BasicInfoService |
| | | { |
| | | public class InterfaceLogService : ServiceBase<Dt_InterfaceLog, IRepository<Dt_InterfaceLog>>, IInterfaceLogService |
| | | { |
| | | public InterfaceLogService(IRepository<Dt_InterfaceLog> BaseDal) : base(BaseDal) |
| | | { |
| | | } |
| | | |
| | | public IRepository<Dt_InterfaceLog> Repository => BaseDal; |
| | | /// <summary> |
| | | /// æ·»å æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="ApiCode">æ¥å£ç¼å·</param> |
| | | /// <param name="ApiName">æ¥å£åç§°</param> |
| | | /// <param name="ApiAddress">æ¥å£å°å</param> |
| | | /// <param name="Requestor">è¯·æ±æ¹</param> |
| | | /// <param name="RequestParameters">请æ±å
容</param> |
| | | /// <param name="Recipient">æ¥æ¶æ¹</param> |
| | | /// <param name="ResponseParameters">ååºå
容</param> |
| | | /// <param name="Add">æ¯å¦æ·»å </param> |
| | | /// <returns></returns> |
| | | public WebResponseContent AddInterfaceLog(string ApiCode, string ApiName, string ApiAddress, string Requestor, string RequestParameters, string Recipient, string ResponseParameters, bool Add) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | if (rGVLocationInfo == null) break; |
| | | Dt_Task dt_Task = new() |
| | | { |
| | | Grade = 1, |
| | | Grade = 66, |
| | | PalletCode = locationInfo.PalletCode, |
| | | Roadway = locationInfo.RoadwayNo, |
| | | TaskState = TaskStatusEnum.RGV_NewMoveTask.ObjToInt(), |
| | |
| | | /// <summary> |
| | | /// 4楼åºåºæ«ç å®æä¿¡å· |
| | | /// </summary> |
| | | ROutScanningCompletionSignal |
| | | ROutScanningCompletionSignal, |
| | | |
| | | #region æåæºæ¥è¦ä¿¡æ¯ |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A301 |
| | | /// </summary> |
| | | R_ElectricDrumA301, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A302 |
| | | /// </summary> |
| | | R_ElectricDrumA302, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A303 |
| | | /// </summary> |
| | | R_ElectricDrumA303, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A304 |
| | | /// </summary> |
| | | R_ElectricDrumA304, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A305 |
| | | /// </summary> |
| | | R_ElectricDrumA305, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A306 |
| | | /// </summary> |
| | | R_ElectricDrumA306, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æ¥è¦A307 |
| | | /// </summary> |
| | | R_ElectricDrumA307, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç3楼æåæº1æ¥è¦T001 |
| | | /// </summary> |
| | | R_ElectricDrumT001, |
| | | |
| | | /// <summary> |
| | | /// æåæº1åé¢å¨æ¥è¦ |
| | | /// </summary> |
| | | R_InverterAlarm, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A401 |
| | | /// </summary> |
| | | R_ElectricDrumA401, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A402 |
| | | /// </summary> |
| | | R_ElectricDrumA402, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A403 |
| | | /// </summary> |
| | | R_ElectricDrumA403, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A404 |
| | | /// </summary> |
| | | R_ElectricDrumA404, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A405 |
| | | /// </summary> |
| | | R_ElectricDrumA405, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A406 |
| | | /// </summary> |
| | | R_ElectricDrumA406, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦A407 |
| | | /// </summary> |
| | | R_ElectricDrumA407, |
| | | |
| | | /// <summary> |
| | | /// æåæº2åé¢å¨æ¥è¦ |
| | | /// </summary> |
| | | R_ElectricDrumT002, |
| | | |
| | | /// <summary> |
| | | /// æåæº1ä¸é使¥è¦ |
| | | /// </summary> |
| | | R_UpperlimitAlarm1, |
| | | |
| | | /// <summary> |
| | | /// æåæº1ä¸é使¥è¦ |
| | | /// </summary> |
| | | R_LowerlimitAlarm1, |
| | | |
| | | /// <summary> |
| | | /// æåæº2ä¸é使¥è¦ |
| | | /// </summary> |
| | | R_UpperlimitAlarm2, |
| | | |
| | | |
| | | /// <summary> |
| | | /// æåæº2ä¸é使¥è¦ |
| | | /// </summary> |
| | | R_LowerlimitAlarm2, |
| | | |
| | | |
| | | /// <summary> |
| | | /// 读ç å¨3楼æ«ç å¼å¸¸ |
| | | /// </summary> |
| | | R_ScancodeError1, |
| | | |
| | | |
| | | /// <summary> |
| | | /// 读ç å¨4楼æ«ç å¼å¸¸ |
| | | /// </summary> |
| | | R_ScancodeError2, |
| | | |
| | | /// <summary> |
| | | /// çµææ¥å3楼 |
| | | /// </summary> |
| | | R_EmergencSytop1, |
| | | |
| | | /// <summary> |
| | | /// çµææ¥å4楼 |
| | | /// </summary> |
| | | R_EmergencSytop2, |
| | | |
| | | /// <summary> |
| | | ///æåæºæ¥å3楼 |
| | | /// </summary> |
| | | R_TSJEmergencSytop1, |
| | | |
| | | /// <summary> |
| | | /// æåæºæ¥å4楼 |
| | | /// </summary> |
| | | R_TSJEmergencSytop2, |
| | | |
| | | /// <summary> |
| | | /// çµæ»ç4楼æ¥è¦T002 |
| | | /// </summary> |
| | | R_DrumAlarmT002, |
| | | |
| | | /// <summary> |
| | | /// å¤ç¨1 |
| | | /// </summary> |
| | | R_TSJSpare1, |
| | | |
| | | /// <summary> |
| | | /// å¤ç¨1 |
| | | /// </summary> |
| | | R_TSJSpare2, |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_Model.Models; |
| | |
| | | public interface IApiInfoService : IService<Dt_ApiInfo> |
| | | { |
| | | public IRepository<Dt_ApiInfo> Repository { get; } |
| | | |
| | | /// <summary> |
| | | /// Postæ¥å£è¯·æ± |
| | | /// </summary> |
| | | /// <param name="apiCode">æ¥å£ç¼å·</param> |
| | | /// <param name="requestParameters">请æ±å
容</param> |
| | | /// <param name="remark">夿³¨</param> |
| | | /// <param name="isAdd">æ¯å¦æ·»å æ¥å¿</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent PostInterfaceRequest(string apiCode, string requestParameters, string remark, bool isAdd = true); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_Core.BaseServices; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | | |
| | | namespace WIDESEAWCS_IBasicInfoService |
| | | { |
| | | public interface IInterfaceLogService : IService<Dt_InterfaceLog> |
| | | { |
| | | public IRepository<Dt_InterfaceLog> Repository { get; } |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | public string ApiAddress { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¨éæ¬¡æ° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "è´§ä½è¡")] |
| | | public int PushFrequency { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 夿³¨ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "夿³¨")] |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Core.DB.Models; |
| | | |
| | | namespace WIDESEAWCS_Model.Models |
| | | { |
| | | [SugarTable(nameof(Dt_InterfaceLog), "æ¥å£æ¥å¿")] |
| | | public class Dt_InterfaceLog : BaseEntity |
| | | { |
| | | /// <summary> |
| | | /// ä¸»é® |
| | | /// </summary> |
| | | [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主é®")] |
| | | public int Id { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¥å£ç¼å· |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "æ¥å£ç¼å·")] |
| | | public string ApiCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¥å£åç§° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "æ¥å£åç§°")] |
| | | public string ApiName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¥å£å°å |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "æ¥å£å°å")] |
| | | public string ApiAddress { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¨éæ¬¡æ° |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "æ¨é次æ°")] |
| | | public int PushFrequency { get; set; } = 0; |
| | | |
| | | /// <summary> |
| | | /// æ¨éç¶æ |
| | | /// 0æªæ¨é |
| | | /// 1æ¨éæå |
| | | /// 2æ¨é失败 |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = false, ColumnDescription = "æ¨éç¶æ")] |
| | | public int PushState { get; set; } = 0; |
| | | |
| | | /// <summary> |
| | | /// è¯·æ±æ¹ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "è¯·æ±æ¹")] |
| | | public string Requestor { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 请æ±å
容 |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = int.MaxValue, ColumnDescription = "请æ±å
容")] |
| | | public string RequestParameters { get; set; } |
| | | |
| | | /// <summary> |
| | | /// æ¥æ¶æ¹ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "æ¥æ¶æ¹")] |
| | | public string Recipient { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ååºå
容 |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = int.MaxValue, ColumnDescription = "ååºå
容")] |
| | | public string ResponseParameters { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 夿³¨ |
| | | /// </summary> |
| | | [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "夿³¨")] |
| | | public string Remark { get; set; } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using WIDESEAWCS_Core.BaseController; |
| | | using WIDESEAWCS_IBasicInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | | namespace WIDESEAWCS_Server.Controllers.BasicInfo |
| | | { |
| | | /// <summary> |
| | | ///æ¥å£ä¿¡æ¯ |
| | | /// </summary> |
| | | [Route("api/InterfaceLog")] |
| | | [ApiController] |
| | | public class InterfaceLogController : ApiBaseController<IInterfaceLogService, Dt_InterfaceLog> |
| | | { |
| | | public InterfaceLogController(IInterfaceLogService service) : base(service) |
| | | { |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | TargetAddress = taskDTO.toLocationCode, |
| | | Creater = "WMS", |
| | | }; |
| | | content = SendHIKROBOTTask(dt_Task); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | dt_Task.Dispatchertime = DateTime.Now; |
| | | BaseDal.AddData(dt_Task); |
| | | return content.OK(data: new |
| | | { |
| | | taskCode = taskDTO.taskCode, |
| | | Message = "æå" |
| | | }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | |
| | | var task = BaseDal.QueryFirst(x => x.PalletCode == Rgv.content.podID); |
| | | if (task == null) throw new Exception($"æªæ¾å°ä»»å¡,ä»»å¡ç¼å·ã{Rgv.content.taskID}ã"); |
| | | //ç§»åº |
| | | if (task.TaskType == TaskTypeEnum.CPMoveInventory.ObjToInt() && Rgv.messageType == 10 && Rgv.content.status == 4) |
| | | if (task.TaskType == TaskTypeEnum.CPMoveInventory.ObjToInt()) |
| | | { |
| | | deviceName += "ç§»åº"; |
| | | WMSMoveLocationFeedback wMSMoveLocationFeedback = new WMSMoveLocationFeedback() |
| | | if (Rgv.messageType == 72) |
| | | { |
| | | containerCode = task.PalletCode, |
| | | fromStationCode = task.SourceAddress, |
| | | toLocationCode = task.TargetAddress |
| | | }; |
| | | Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSMoveLocationFeedback)); |
| | | WMSReturn agvContent = null; |
| | | if (apiInfo == null) task.ExceptionMessage = "æªæ¾å°ç§»åºå®æåé¦WMSæ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"; |
| | | else |
| | | task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt(); |
| | | BaseDal.UpdateData(task); |
| | | UpdateLocationStatus(task.SourceAddress, task.PalletCode, deviceTypeEnum, LocationStatusEnum.Free); |
| | | } |
| | | if (Rgv.messageType == 10 && Rgv.content.status == 4) |
| | | { |
| | | task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, wMSMoveLocationFeedback.Serialize()); |
| | | agvContent = response.DeserializeObject<WMSReturn>(); |
| | | content.OK(data: agvContent); |
| | | if (agvContent.code != 200) |
| | | deviceName += "ç§»åº"; |
| | | WMSMoveLocationFeedback wMSMoveLocationFeedback = new WMSMoveLocationFeedback() |
| | | { |
| | | task.ExceptionMessage = agvContent.message; |
| | | content.Error(agvContent.message); |
| | | containerCode = task.PalletCode, |
| | | fromStationCode = task.SourceAddress, |
| | | toLocationCode = task.TargetAddress |
| | | }; |
| | | Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSMoveLocationFeedback)); |
| | | WMSReturn agvContent = null; |
| | | if (apiInfo == null) task.ExceptionMessage = "æªæ¾å°ç§»åºå®æåé¦WMSæ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"; |
| | | else |
| | | { |
| | | task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, wMSMoveLocationFeedback.Serialize()); |
| | | agvContent = response.DeserializeObject<WMSReturn>(); |
| | | content.OK(data: agvContent); |
| | | if (agvContent.code != 200) |
| | | { |
| | | task.ExceptionMessage = agvContent.message; |
| | | content.Error(agvContent.message); |
| | | } |
| | | UpdateLocationStatus(task.TargetAddress, task.PalletCode, deviceTypeEnum, LocationStatusEnum.InStock); |
| | | BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); |
| | | } |
| | | UpdateLocationStatus(task.TargetAddress, task.PalletCode, deviceTypeEnum, LocationStatusEnum.InStock); |
| | | BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); |
| | | } |
| | | } |
| | | else |
| | |
| | | { |
| | | task.ExceptionMessage = Rgv.content.errorReason; |
| | | var Error = _taskErrorMessageService.Repository.QueryFirst(x => x.ErrorCode == Rgv.content.errorCode && x.DeviceType == (int)deviceTypeEnum); |
| | | if (Error != null) |
| | | if (task.TaskType == (int)TaskTypeEnum.CPOutbound && task.TaskState == (int)TaskStatusEnum.Execut && Rgv.content.errorCode == 1330003)//æååºåºä»»å¡ä¸ååå馿é»ç¢æï¼ä¿®æ¹ä»»å¡ç¶æä¸ºæ°å»ºéæ°æ¥è¯¢é»ç¢æå
³ç³» |
| | | { |
| | | task.ExceptionMessage = Error.ExceptionMessage; |
| | | MatchCollection matches = Regex.Matches(Rgv.content.errorReason, @"\(([^)]+)\)"); |
| | | if (matches.Count > 0) |
| | | task.ExceptionMessage = ReplacePlaceholders(Rgv.content.errorReason, Error.ExceptionMessage); |
| | | ErrorTaskFeedback(task, true, Error.ErrorCode.ToString()); |
| | | task.TaskState = (int)TaskStatusEnum.New; |
| | | BaseDal.UpdateData(task); |
| | | } |
| | | else |
| | | ErrorTaskFeedback(task, true); |
| | | { |
| | | if (Error != null) |
| | | { |
| | | task.ExceptionMessage = Error.ExceptionMessage; |
| | | MatchCollection matches = Regex.Matches(Rgv.content.errorReason, @"\(([^)]+)\)"); |
| | | if (matches.Count > 0) |
| | | task.ExceptionMessage = ReplacePlaceholders(Rgv.content.errorReason, Error.ExceptionMessage); |
| | | ErrorTaskFeedback(task, true, Error.ErrorCode.ToString()); |
| | | } |
| | | else |
| | | ErrorTaskFeedback(task, true); |
| | | } |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Common.LocationEnum; |
| | | using SixLabors.ImageSharp; |
| | | using Autofac.Core; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | | public partial class TSJJob |
| | | { |
| | | /// <summary> |
| | | /// æµ·åº·ç»§ç»æ§è¡ä»»å¡ |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | public void HKConexecutTask(OtherDevice device) |
| | | { |
| | | |
| | | List<Dt_Task> Uptasks = new List<Dt_Task>(); |
| | | //æ¥è¯¢ææä»»å¡ç±»å为3,4楼çå
¥åºä»»å¡ç±»åä¸ä»»å¡ç¶æä¸ºAGV_WaitToExecuteçä»»å¡ |
| | | var taskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()); |
| | | //ä»»å¡çç®æ å°å对äºç«å°å·ï¼ |
| | | foreach (var task in taskList) |
| | | { |
| | | //å
æ£æ¥è®¾å¤ç¶æ |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.EquipmentStatus, "TSJ") == 2) |
| | | { |
| | | if (task.ExceptionMessage == "æåæºè®¾å¤æ
é") |
| | | { |
| | | continue; |
| | | } |
| | | task.ExceptionMessage = "æåæºè®¾å¤æ
é"; |
| | | Uptasks.Add(task); |
| | | continue; |
| | | //throw new Exception("è®¾å¤æ
é"); |
| | | } |
| | | if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt() || task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt() || task.TaskType == TaskTypeEnum.F04.ObjToInt()) |
| | | { |
| | | if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt()) |
| | | { |
| | | //夿3楼å
¥åºç®±å·ææ |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.OutboundInplace, task.TargetAddress) != 2) |
| | | { |
| | | if (task.ExceptionMessage == "3楼å
¥åºç®±å·æè´§ï¼è¯·å
å¤ç") |
| | | { |
| | | continue; |
| | | } |
| | | task.ExceptionMessage = "3楼å
¥åºç®±å·æè´§ï¼è¯·å
å¤ç"; |
| | | Uptasks.Add(task); |
| | | continue; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.ReturnbinAvailable, task.TargetAddress) != 2) |
| | | { |
| | | if (task.ExceptionMessage != "4Fæåæºå
¥å£æè´§") |
| | | { |
| | | task.ExceptionMessage = "4Fæåæºå
¥å£æè´§"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | |
| | | //ç¶åè°ç¨è¾é线æ¥å£ï¼éç¥è¾é线ææç®±éè¦å
¥åºï¼ä»»å¡ä¸¾è¡æ§è¡ |
| | | var result = _taskService.Hikvisiontaskscontinue(task.WMSTaskNum); |
| | | if (result.Status == false) |
| | | { |
| | | if (task.ExceptionMessage != result.Message) |
| | | { |
| | | task.ExceptionMessage = result.Message; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | task.TaskState = (int)TaskStatusEnum.AGV_ToExecute; |
| | | task.ExceptionMessage = ""; |
| | | Uptasks.Add(task); |
| | | |
| | | //è¿éä»»å¡åæäºCheckPalletCodeing |
| | | |
| | | } |
| | | else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() || task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) //åºåº |
| | | { |
| | | ////åºåºæç®±ç¼åæ°é(è¿ä¸ªæ¯åºåºæ¥è¯¢çæ¶åè¦æ¥ä¸ä¸ï¼è¿ç»wms) |
| | | //if (device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJ") == 0) throw new Exception("没æåºåºæç®±ç¼åæ°é为空"); |
| | | |
| | | if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt()) |
| | | { |
| | | //读å3楼åºåºæç®±å°ä½ |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.SOutboundmaterialbox, task.SourceAddress) != 1) |
| | | { |
| | | if (task.ExceptionMessage != "3楼æåæºåºå£å
çµå馿 è´§") |
| | | { |
| | | task.ExceptionMessage = "3楼æåæºåºå£å
çµå馿 è´§"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, task.SourceAddress) != 1) |
| | | { |
| | | if (task.ExceptionMessage != "4楼æåæºåºå£å
çµå馿 è´§") |
| | | { |
| | | task.ExceptionMessage = "4楼æåæºåºå£å
çµå馿 è´§"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, task.SourceAddress) != 1) |
| | | { |
| | | if (task.ExceptionMessage != "4楼æåæºåºå£æ«ç å®æä¿¡å·æ²¡æå®æ") |
| | | { |
| | | task.ExceptionMessage = "4楼æåæºåºå£æ«ç å®æä¿¡å·æ²¡æå®æ"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | //ç¶åè°ç¨è¾é线æ¥å£ï¼éç¥è¾é线ææç®±éè¦å
¥åºï¼ä»»å¡ä¸¾è¡æ§è¡ |
| | | var result = _taskService.Hikvisiontaskscontinue(task.WMSTaskNum); |
| | | if (result.Status == false) |
| | | { |
| | | if (task.ExceptionMessage != result.Message) |
| | | { |
| | | task.ExceptionMessage = result.Message; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | task.TaskState = (int)TaskStatusEnum.AGV_ToExecute; |
| | | task.ExceptionMessage = ""; |
| | | Uptasks.Add(task); |
| | | } |
| | | } |
| | | if (Uptasks.Count > 0) |
| | | { |
| | | _taskService.UpdateData(Uptasks); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// æçå·ç¡®è®¤ä¸ |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | public void PalletNumConfirmation(OtherDevice device) |
| | | { |
| | | #region æçå·ç¡®è®¤ä¸ |
| | | //æ¥æ¾ä¸æ¥¼å
¥åºä»»å¡ç¶æä¸ºCheckPalletCodeingç任塿çå·ç¡®è®¤ä¸ |
| | | var RK3FTask = _taskService.Repository.QueryFirst(x => x.TaskType == TaskTypeEnum.RK3F.ObjToInt() && x.TaskState == (int)TaskStatusEnum.CheckPalletCodeing); |
| | | if (RK3FTask != null) |
| | | { |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.RInScanningCompletionSignal, RK3FTask.TargetAddress) != 1) |
| | | { |
| | | RK3FTask.ExceptionMessage = "3楼æ«ç å®æä¿¡å·æ²¡æå®æ"; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | else //宿就æä»»å¡ç¶ææ¹ææçå·ç¡®è®¤å®æ |
| | | { |
| | | //æ£æ¥3楼å
¥åºç®±å·æ¯å¤å°ï¼ç¶åä¼ ç»wms |
| | | var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Inboxnumber, RK3FTask.TargetAddress); |
| | | if (!string.IsNullOrEmpty(BinNumber)) |
| | | { |
| | | BinNumber = BinNumber.TrimEnd('\0').Substring(2); |
| | | //æ ¹æ®è¯»å°çç®±å·è¿è¡æç®±æ£éªï¼æ£éªéè¿å°±è§¦å读ç å¨è¯»åï¼å¦æä¸éè¿å°±æåºå¼å¸¸ |
| | | var Verification = _taskService.MaterialBoxInspection(RK3FTask.WMSTaskNum, BinNumber); |
| | | if (!Verification.Status) |
| | | { |
| | | if (RK3FTask.ExceptionMessage != Verification.Message) |
| | | { |
| | | RK3FTask.ExceptionMessage = Verification.Message; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | |
| | | //å¦æè´¨æ£éè¿å°±ä¸æ¹åRK3FTask.TargetAddressçå¼ï¼ |
| | | if (!string.IsNullOrEmpty(Verification.Message)) |
| | | { |
| | | //寻æ¾å¹³åºè´§ä½ |
| | | var Location = _stationInfoService.Repository.QueryFirst(x => x.StationRegion == Verification.Message.ObjToInt() && x.StationStatus == (int)LocationStatusEnum.Free && x.FloorNumber == "CC" && x.IsOccupied == (int)LocationStatusEnum.Free); |
| | | //è¿éè¦å¤æ |
| | | if (Location == null) |
| | | { |
| | | RK3FTask.ExceptionMessage = "$æªæ¾å°{Verification.Message}åºåçè´§ä½{Location}"; |
| | | } |
| | | RK3FTask.CurrentAddress = RK3FTask.TargetAddress; |
| | | RK3FTask.NextAddress = Location.StationCode; |
| | | RK3FTask.TargetAddress = Location.StationCode; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | //è°ç¨æµ·åº·è¿è¡æ§è¡å®ææ¥å£ |
| | | var result = _taskService.Hikvisiontaskscontinue(RK3FTask.WMSTaskNum, RK3FTask.NextAddress); |
| | | if (result.Status) |
| | | { |
| | | RK3FTask.ExceptionMessage = ""; |
| | | RK3FTask.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | else |
| | | { |
| | | if (RK3FTask.ExceptionMessage != result.Message) |
| | | { |
| | | RK3FTask.ExceptionMessage = result.Message; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 4Fæåæºåºå£æçå·ä¸æ¥WMS |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | |
| | | public void PalletReportingToWMS(OtherDevice device) |
| | | { |
| | | #region 4Fæåæºåºå£æçå·ä¸æ¥WMS |
| | | var Address = "TSJC4F"; |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, Address) == 1) |
| | | { |
| | | var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Emptycontainernumber, Address); |
| | | if (!string.IsNullOrEmpty(BinNumber)) |
| | | { |
| | | BinNumber = BinNumber.TrimEnd('\0').Substring(2); |
| | | _taskService.InboundElevatorExit(Address, BinNumber); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// æåæºæ¥è¦ |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | public void TSJAlarm(OtherDevice device) |
| | | { |
| | | |
| | | var alarmPoints = new Dictionary<HoistEnum, string>{ |
| | | { HoistEnum.EquipmentStatus, "设å¤ç¶æ" }, |
| | | { HoistEnum.R_ElectricDrumA301, "çµå¨æ»çA301æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA302, "çµå¨æ»çA302æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA303, "çµå¨æ»çA303æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA304, "çµå¨æ»çA304æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA305, "çµå¨æ»çA305æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA306, "çµå¨æ»çA306æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA307, "çµå¨æ»çA307æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumT001, "çµå¨æ»çT001æ¥è¦" }, |
| | | { HoistEnum.R_InverterAlarm, "åé¢å¨æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA401, "çµå¨æ»çA401æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA402, "çµå¨æ»çA402æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA403, "çµå¨æ»çA403æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA404, "çµå¨æ»çA404æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA405, "çµå¨æ»çA405æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA406, "çµå¨æ»çA406æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumA407, "çµå¨æ»çA407æ¥è¦" }, |
| | | { HoistEnum.R_ElectricDrumT002, "æåæº2åé¢å¨æ¥è¦" }, |
| | | { HoistEnum.R_UpperlimitAlarm1, "ä¸é使¥è¦1" }, |
| | | { HoistEnum.R_LowerlimitAlarm1, "ä¸é使¥è¦1" }, |
| | | { HoistEnum.R_UpperlimitAlarm2, "ä¸é使¥è¦2" }, |
| | | { HoistEnum.R_LowerlimitAlarm2, "ä¸é使¥è¦2" }, |
| | | { HoistEnum.R_ScancodeError1, "读ç å¨3楼æ«ç å¼å¸¸" }, |
| | | { HoistEnum.R_ScancodeError2, "读ç å¨4楼æ«ç å¼å¸¸" }, |
| | | { HoistEnum.R_EmergencSytop1, "æ¥å1" }, |
| | | { HoistEnum.R_EmergencSytop2, "æ¥å2" }, |
| | | { HoistEnum.R_TSJEmergencSytop1, "æåæºæ¥å1" }, |
| | | { HoistEnum.R_TSJEmergencSytop2, "æåæºæ¥å2" }, |
| | | { HoistEnum.R_DrumAlarmT002, "çµæ»ç4楼æ¥è¦T002" }, |
| | | { HoistEnum.R_TSJSpare1, "å¤ç¨æ¥è¦1" }, |
| | | { HoistEnum.R_TSJSpare2, "å¤ç¨æ¥è¦2" } |
| | | }; |
| | | var Address = "TSJ"; |
| | | |
| | | |
| | | foreach (var point in alarmPoints) |
| | | { |
| | | // 读åPLCå¼ï¼éè¦æ ¹æ®å®é
APIè°æ´ï¼ |
| | | bool isAlarming = device.GetValue<HoistEnum, bool>(point.Key,Address); |
| | | // æè
device.ReadBool(point.Key); |
| | | |
| | | if (isAlarming) |
| | | { |
| | | // ææ¥è¦ï¼åéç»WMS |
| | | //SendAlarmToWMS(device, point.Key, point.Value); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | | [DisallowConcurrentExecution] |
| | | public class TSJJob : JobBase, IJob |
| | | public partial class TSJJob : JobBase, IJob |
| | | { |
| | | private readonly ITaskService _taskService; |
| | | private readonly IStationMangerService _stationMangerService; |
| | |
| | | if (flag && value != null) |
| | | { |
| | | OtherDevice device = (OtherDevice)value; |
| | | //Example |
| | | //device.GetValue 读å |
| | | //device.SetValue åå
¥ |
| | | // _taskService.Repository ä»å¨å±ï¼è¿è¡æ°æ®åºè®¿é® |
| | | try |
| | | { |
| | | List<Dt_Task> Uptasks = new List<Dt_Task>(); |
| | | //æ¥è¯¢ææä»»å¡ç±»å为3,4楼çå
¥åºä»»å¡ç±»åä¸ä»»å¡ç¶æä¸ºAGV_WaitToExecuteçä»»å¡ |
| | | var taskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()); |
| | | //ä»»å¡çç®æ å°å对äºç«å°å·ï¼ |
| | | foreach (var task in taskList) |
| | | { |
| | | //å
æ£æ¥è®¾å¤ç¶æ |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.EquipmentStatus, "TSJ") == 2) |
| | | { |
| | | if (task.ExceptionMessage == "æåæºè®¾å¤æ
é") |
| | | { |
| | | continue; |
| | | } |
| | | task.ExceptionMessage = "æåæºè®¾å¤æ
é"; |
| | | Uptasks.Add(task); |
| | | continue; |
| | | //throw new Exception("è®¾å¤æ
é"); |
| | | } |
| | | if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt() || task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt() || task.TaskType == TaskTypeEnum.F04.ObjToInt()) |
| | | { |
| | | if (task.TaskType == TaskTypeEnum.RK3F.ObjToInt()) |
| | | { |
| | | //夿3楼å
¥åºç®±å·ææ |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.OutboundInplace, task.TargetAddress) != 2) |
| | | { |
| | | if (task.ExceptionMessage == "3楼å
¥åºç®±å·æè´§ï¼è¯·å
å¤ç") |
| | | { |
| | | continue; |
| | | } |
| | | task.ExceptionMessage = "3楼å
¥åºç®±å·æè´§ï¼è¯·å
å¤ç"; |
| | | Uptasks.Add(task); |
| | | continue; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.ReturnbinAvailable, task.TargetAddress) != 2) |
| | | { |
| | | if (task.ExceptionMessage != "4Fæåæºå
¥å£æè´§") |
| | | { |
| | | task.ExceptionMessage = "4Fæåæºå
¥å£æè´§"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | HKConexecutTask(device); |
| | | |
| | | PalletNumConfirmation(device); |
| | | |
| | | //ç¶åè°ç¨è¾é线æ¥å£ï¼éç¥è¾é线ææç®±éè¦å
¥åºï¼ä»»å¡ä¸¾è¡æ§è¡ |
| | | var result = _taskService.Hikvisiontaskscontinue(task.WMSTaskNum); |
| | | if (result.Status == false) |
| | | { |
| | | if (task.ExceptionMessage != result.Message) |
| | | { |
| | | task.ExceptionMessage = result.Message; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | task.TaskState = (int)TaskStatusEnum.AGV_ToExecute; |
| | | task.ExceptionMessage = ""; |
| | | Uptasks.Add(task); |
| | | |
| | | //è¿éä»»å¡åæäºCheckPalletCodeing |
| | | |
| | | } |
| | | else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() || task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) //åºåº |
| | | { |
| | | ////åºåºæç®±ç¼åæ°é(è¿ä¸ªæ¯åºåºæ¥è¯¢çæ¶åè¦æ¥ä¸ä¸ï¼è¿ç»wms) |
| | | //if (device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJ") == 0) throw new Exception("没æåºåºæç®±ç¼åæ°é为空"); |
| | | |
| | | if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt()) |
| | | { |
| | | //读å3楼åºåºæç®±å°ä½ |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.SOutboundmaterialbox, task.SourceAddress) != 1) |
| | | { |
| | | if (task.ExceptionMessage != "3楼æåæºåºå£å
çµå馿 è´§") |
| | | { |
| | | task.ExceptionMessage = "3楼æåæºåºå£å
çµå馿 è´§"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.FOutboundmaterialbox, task.SourceAddress) != 1) |
| | | { |
| | | if (task.ExceptionMessage != "4楼æåæºåºå£å
çµå馿 è´§") |
| | | { |
| | | task.ExceptionMessage = "4楼æåæºåºå£å
çµå馿 è´§"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, task.SourceAddress) != 1) |
| | | { |
| | | if (task.ExceptionMessage != "4楼æåæºåºå£æ«ç å®æä¿¡å·æ²¡æå®æ") |
| | | { |
| | | task.ExceptionMessage = "4楼æåæºåºå£æ«ç å®æä¿¡å·æ²¡æå®æ"; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | //ç¶åè°ç¨è¾é线æ¥å£ï¼éç¥è¾é线ææç®±éè¦å
¥åºï¼ä»»å¡ä¸¾è¡æ§è¡ |
| | | var result = _taskService.Hikvisiontaskscontinue(task.WMSTaskNum); |
| | | if (result.Status == false) |
| | | { |
| | | if (task.ExceptionMessage != result.Message) |
| | | { |
| | | task.ExceptionMessage = result.Message; |
| | | Uptasks.Add(task); |
| | | } |
| | | continue; |
| | | } |
| | | task.TaskState = (int)TaskStatusEnum.AGV_ToExecute; |
| | | task.ExceptionMessage = ""; |
| | | Uptasks.Add(task); |
| | | } |
| | | } |
| | | if (Uptasks.Count > 0) |
| | | { |
| | | _taskService.UpdateData(Uptasks); |
| | | } |
| | | |
| | | #region æçå·ç¡®è®¤ä¸ |
| | | //æ¥æ¾ä¸æ¥¼å
¥åºä»»å¡ç¶æä¸ºCheckPalletCodeingç任塿çå·ç¡®è®¤ä¸ |
| | | var RK3FTask = _taskService.Repository.QueryFirst(x => x.TaskType == TaskTypeEnum.RK3F.ObjToInt() && x.TaskState == (int)TaskStatusEnum.CheckPalletCodeing); |
| | | if (RK3FTask != null) |
| | | { |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.RInScanningCompletionSignal, RK3FTask.TargetAddress) != 1) |
| | | { |
| | | RK3FTask.ExceptionMessage = "3楼æ«ç å®æä¿¡å·æ²¡æå®æ"; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | else //宿就æä»»å¡ç¶ææ¹ææçå·ç¡®è®¤å®æ |
| | | { |
| | | //æ£æ¥3楼å
¥åºç®±å·æ¯å¤å°ï¼ç¶åä¼ ç»wms |
| | | var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Inboxnumber, RK3FTask.TargetAddress); |
| | | if (!string.IsNullOrEmpty(BinNumber)) |
| | | { |
| | | BinNumber = BinNumber.TrimEnd('\0').Substring(2); |
| | | //æ ¹æ®è¯»å°çç®±å·è¿è¡æç®±æ£éªï¼æ£éªéè¿å°±è§¦å读ç å¨è¯»åï¼å¦æä¸éè¿å°±æåºå¼å¸¸ |
| | | var Verification = _taskService.MaterialBoxInspection(RK3FTask.WMSTaskNum, BinNumber); |
| | | if (!Verification.Status) |
| | | { |
| | | if (RK3FTask.ExceptionMessage != Verification.Message) |
| | | { |
| | | RK3FTask.ExceptionMessage = Verification.Message; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | |
| | | //å¦æè´¨æ£éè¿å°±ä¸æ¹åRK3FTask.TargetAddressçå¼ï¼ |
| | | if (!string.IsNullOrEmpty(Verification.Message)) |
| | | { |
| | | //寻æ¾å¹³åºè´§ä½ |
| | | var Location = _stationInfoService.Repository.QueryFirst(x=>x.StationRegion==Verification.Message.ObjToInt()&&x.StationStatus==(int)LocationStatusEnum.Free&&x.FloorNumber=="CC"&&x.IsOccupied==(int)LocationStatusEnum.Free); |
| | | //è¿éè¦å¤æ |
| | | if (Location==null) |
| | | { |
| | | RK3FTask.ExceptionMessage = "$æªæ¾å°{Verification.Message}åºåçè´§ä½{Location}"; |
| | | } |
| | | RK3FTask.CurrentAddress = RK3FTask.TargetAddress; |
| | | RK3FTask.NextAddress = Location.StationCode; |
| | | RK3FTask.TargetAddress = Location.StationCode; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | //è°ç¨æµ·åº·è¿è¡æ§è¡å®ææ¥å£ |
| | | var result = _taskService.Hikvisiontaskscontinue(RK3FTask.WMSTaskNum, RK3FTask.NextAddress); |
| | | if (result.Status) |
| | | { |
| | | RK3FTask.ExceptionMessage = ""; |
| | | RK3FTask.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | else |
| | | { |
| | | if (RK3FTask.ExceptionMessage != result.Message) |
| | | { |
| | | RK3FTask.ExceptionMessage = result.Message; |
| | | _taskService.UpdateData(RK3FTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 4Fæåæºåºå£æçå·ä¸æ¥WMS |
| | | var Address = "TSJC4F"; |
| | | if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, Address) == 1) |
| | | { |
| | | var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Emptycontainernumber, Address); |
| | | if (!string.IsNullOrEmpty(BinNumber)) |
| | | { |
| | | BinNumber = BinNumber.TrimEnd('\0').Substring(2); |
| | | _taskService.InboundElevatorExit(Address, BinNumber); |
| | | } |
| | | } |
| | | #endregion |
| | | //WriteInfo(device.DeviceName, "infoLog"); |
| | | |
| | | //WriteDebug(device.DeviceName, "debugLog"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteError(device.DeviceName, "é误", ex); |
| | | } |
| | | PalletReportingToWMS(device); |
| | | } |
| | | else |
| | | { |
| | |
| | | if (content.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.Execut; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | else |
| | |
| | | { |
| | | // åä»»å¡ç¶ææ¹ä¸ºçå¾
空车 |
| | | item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "æªæ¾å°å¯ç¨AGVå°è½¦"; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | } |
| | |
| | | else |
| | | { |
| | | item.ExceptionMessage = "è·åAGVå°è½¦ä¿¡æ¯å¤±è´¥"; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | else if (item.TaskType == (int)TaskTypeEnum.F01) |
| | |
| | | { |
| | | // ä»ä»»å¡çèµ·å§å°å䏿åéè¦ç楼å±ä»£ç |
| | | string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress); |
| | | if (string.IsNullOrEmpty(requiredMapCode)) |
| | | if (requiredMapCode==null) |
| | | { |
| | | item.ExceptionMessage = $"æ æ³ä»ç®æ å°å {item.SourceAddress} ä¸è¯å«æ¥¼å±ä¿¡æ¯"; |
| | | _taskService.UpdateData(item); |
| | |
| | | if (content.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.Execut; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | else |
| | |
| | | if (callCarResult.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "æªæ¾å°å¯ç¨AGVå°è½¦"; |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | |
| | |
| | | private string GetMapCodeFromAddress(string address) |
| | | { |
| | | if (string.IsNullOrEmpty(address)) |
| | | { |
| | | return null; |
| | | |
| | | } |
| | | // å°åæ ¼å¼ç¤ºä¾ ï¼AA å¯¹åº 0339050AA0309145 |
| | | // keys æ¯ AAãBBãCCãDDãEEãFFï¼vuleæ¯å¯¹åºçç¹ä½ä¿¡æ¯ |
| | | foreach (var floorCode in FloorMapping.FloorMap.Keys) |
| | | else |
| | | { |
| | | if (address.Contains(floorCode)) |
| | | { |
| | | return floorCode;//è¿åçå°±æ¯AAãBBãCCãDDãEEãFFä¸çä¸ä¸ªï¼ä»£è¡¨å¯¹åºçæ¥¼å± |
| | | } |
| | | var reslut = _stationInfoService.Repository.QueryFirst(x => x.StationCode == address); |
| | | return reslut.FloorNumber; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | /// <param name="tasks"></param> |
| | | public void IsMoveTask(List<Dt_Task> tasks) |
| | | { |
| | | |
| | | object requestData = null; // æ·»å åéè®°å½è¯·æ±æ°æ® |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(GetBlockPodContentDto)) ?? throw new Exception("æªæ¾å°æ¹éè·åé»ç¢æçå
³ç³»æ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | List<Dt_Task> dt_Tasks = new List<Dt_Task>(); |
| | | var PalletCodes = tasks.Select(x => x.PalletCode).ToList(); |
| | | //GetBlockPodContentDto content = new GetBlockPodContentDto(); |
| | | var request = new GetBlockPodContentListDto |
| | | { |
| | | content = new List<GetBlockPodContentDto> |
| | |
| | | } |
| | | } |
| | | }; |
| | | requestData = request; // ä¿åè¯·æ±æ°æ®ç¨äºæ¥å¿ |
| | | //content.candidatePodIDs = tasks.Select(x => x.PalletCode).ToList(); |
| | | //string response = HttpHelper.Post("http://127.0.0.1:4523/m2/6165241-5857331-default/440906899?apifoxApiId=440906899", request.Serialize()); |
| | | |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize()); |
| | | FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); |
| | | content.OK(data: fOURBOTReturn); |
| | | content = _apiInfoService.PostInterfaceRequest(nameof(GetBlockPodContentDto), request.Serialize(), "æ¹éè·åé»ç¢æçå
³ç³»"); |
| | | if (!content.Status) |
| | | { |
| | | foreach (var item in tasks) |
| | | { |
| | | item.ExceptionMessage = content.Message; |
| | | } |
| | | _taskService.UpdateData(tasks); |
| | | return; |
| | | } |
| | | FOURBOTReturn fOURBOTReturn = content.Data as FOURBOTReturn; |
| | | if (fOURBOTReturn.returnCode == 0) |
| | | { |
| | | //ReturnBlockPodResultDto getBlockPod = fOURBOTReturn.data as ReturnBlockPodResultDto ?? throw new Exception("æªè·åå°é»ç¢æçå
³ç³»æ°æ®"); |
| | | var dataJson = fOURBOTReturn.data.ToString(); |
| | | if (string.IsNullOrEmpty(dataJson)) |
| | | { |
| | | foreach (var item in tasks) |
| | | { |
| | | item.ExceptionMessage = "è·åé»ç¢æçå
³ç³»å¤±è´¥ï¼"; |
| | | } |
| | | _taskService.UpdateData(tasks); |
| | | return; |
| | | } |
| | | ReturnBlockPodResultDto? getBlockPod = JsonConvert.DeserializeObject<ReturnBlockPodResultDto>(dataJson); |
| | | if (getBlockPod == null) |
| | | { |
| | | foreach (var item in tasks) |
| | | { |
| | | item.ExceptionMessage = "é»ç¢æçå
³ç³»æ°æ®è½¬æ¢å®ä½å¤±è´¥ï¼"; |
| | | } |
| | | _taskService.UpdateData(tasks); |
| | | return; |
| | | } |
| | | if (getBlockPod.Result.Count == 0) |
| | | { |
| | | throw new Exception("æªè·åå°é»ç¢æçå
³ç³»æ°æ®"); |
| | | foreach (var item in tasks) |
| | | { |
| | | item.ExceptionMessage = "æªè·åå°é»ç¢æçå
³ç³»æ°æ®ï¼"; |
| | | } |
| | | _taskService.UpdateData(tasks); |
| | | return; |
| | | } |
| | | foreach (var Result in getBlockPod.Result) |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | _trackloginfoService.AddTrackLog(requestData, content, "å¤çåºåºä»»å¡æ¯å¦éè¦ç§»åº", "", ""); |
| | | //_trackloginfoService.AddTrackLog(requestData, content, "å¤çåºåºä»»å¡æ¯å¦éè¦ç§»åº", "", ""); |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_BasicInfoService; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Communicator; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | |
| | | private readonly ITrackloginfoService _trackloginfoService; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IAGVCartInfoService _agvcartInfoService; |
| | | private readonly IStationInfoService _stationInfoService; |
| | | |
| | | public TaskJob(ITaskService taskService, IApiInfoService apiInfoService, IRGVLocationInfoService rGVLocationInfoService, IStationMangerService stationMangerService, ITrackloginfoService trackloginfoService, IUnitOfWorkManage unitOfWorkManage, IAGVCartInfoService agvcartInfoService) |
| | | public TaskJob(ITaskService taskService, IApiInfoService apiInfoService, IRGVLocationInfoService rGVLocationInfoService, IStationMangerService stationMangerService, ITrackloginfoService trackloginfoService, IUnitOfWorkManage unitOfWorkManage, IAGVCartInfoService agvcartInfoService, IStationInfoService stationInfoService) |
| | | { |
| | | _taskService = taskService;//注å
¥ |
| | | _apiInfoService = apiInfoService; |
| | |
| | | _trackloginfoService = trackloginfoService; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _agvcartInfoService = agvcartInfoService; |
| | | _stationInfoService = stationInfoService; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |