From 05d580b4357829263c9c44449621ca6017576dcb Mon Sep 17 00:00:00 2001 From: duyongjia <adu_555@163.com> Date: 星期二, 19 十一月 2024 16:26:46 +0800 Subject: [PATCH] 现场修改提交 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 618 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 560 insertions(+), 58 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" index 231fa5d..423a9af 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" @@ -18,6 +18,7 @@ using AutoMapper; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; +using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; @@ -26,11 +27,16 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; +using WIDESEAWCS_Common.LocationEnum; +using WIDESEAWCS_Common.ServiceLog; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; +using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; +using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; +using WIDESEAWCS_IBasicRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; @@ -44,7 +50,9 @@ private readonly IRouterService _routerService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; + private readonly ILocationInfoRepository _locationInfoRepository; private readonly IMapper _mapper; + private readonly IUnitOfWorkManage _unitOfWorkManage; private Dictionary<string, OrderByType> _taskOrderBy = new() { @@ -58,12 +66,18 @@ public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); - public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal) + public List<int> TaskRelocationboundTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList(); + + public List<int> TaskOtherboundTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList(); + + public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _routerService = routerService; _taskExecuteDetailService = taskExecuteDetailService; _taskExecuteDetailRepository = taskExecuteDetailRepository; _mapper = mapper; + _locationInfoRepository = locationInfoRepository; + _unitOfWorkManage = unitOfWorkManage; } /// <summary> @@ -122,6 +136,313 @@ return content; } + + /// <summary> + /// 鎺ユ敹MES浠诲姟淇℃伅 + /// </summary> + /// <param name="taskDTO">MES浠诲姟瀵硅薄</param> + /// <returns>杩斿洖澶勭悊缁撴灉</returns> + public WebResponseContent ReceiveMESTask([NotNull] MESTaskDTO taskDTO) + { + WebResponseContent content = new WebResponseContent(); + try + { + // ServiceLogger.WriteLogToFile(""); + Dt_Task task = new Dt_Task(); + Dt_Task taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id); + if(taskDTO.cmd==101)//濡傛灉鏄�101鎸夋棫鐨勪换鍔″彿鍘绘煡 + { + taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.weight); + } + + if (taskDTO.cmd!=3001&& taskDTO.cmd != 101 && taskinfo != null) + { + return content = WebResponseContent.Instance.Error($"浠诲姟鍙烽噸澶嶏紝浠诲姟鍙凤細{taskDTO.task_id}"); + } + Dt_LocationInfo locationsrc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.src_station.ToString()); + Dt_LocationInfo locationdsc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.dest_station.ToString()); + switch (taskDTO.cmd) + { + case 1001://AGV璇锋眰鍏ュ簱 + task.TaskType = (int)TaskInboundTypeEnum.Inbound; + task.TaskState = (int)TaskInStatusEnum.InNew; + task.Roadway = "SC01"; + task.Grade = 2; + task.WMSId = 0;//琛ㄧず鑷姩鍏ュ簱 + if (locationsrc != null) + { + task.SourceAddress = locationsrc.LocationCode; + } + else + { + return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌婧愮珯鐐瑰搴旂殑搴撲綅锛屾簮绔欑偣锛歿taskDTO.dest_station.ToString()}"); + } + break; + case 3001://AGV鏀捐揣瀹屾垚 WMS鍙�3001鐨勫悓鏃朵細鍐欐彁鍗囦俊鍙� + if (BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id) == null)//鎵嬪姩鍏ュ簱鐩存帴鍙�3001锛岄渶瑕佺敓鎴愪换鍔★紝鍥犱负娌℃湁1001鐜妭 + { + + task.TaskType = (int)TaskInboundTypeEnum.Inbound; + task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting; + task.Roadway = "SC01"; + task.WMSId = 1;//琛ㄧず鎵嬪姩鍏ュ簱 + task.Grade = 2; + if (locationsrc != null) + { + task.SourceAddress = locationsrc.LocationCode; + } + else + { + return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌婧愮珯鐐瑰搴旂殑搴撲綅锛屾簮绔欑偣锛歿taskDTO.dest_station.ToString()}"); + } + } + else + { + if (taskinfo != null) + { + UpdateTaskStatus(taskinfo.TaskId, (int)TaskInStatusEnum.AGV_InExecuting); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV鍏ュ簱鎵ц涓�"); + return content = WebResponseContent.Instance.OK($"AGV鍏ュ簱鎵ц涓紙鑷姩3001锛夋洿鏂扮姸鎬佹垚鍔燂紝浠诲姟鍙凤細{taskinfo.TaskId}"); + } + else + { + return content = WebResponseContent.Instance.Error($"AGV鍏ュ簱鎵ц涓紙鑷姩3001锛夋洿鏂扮姸鎬佹椂锛屾煡璇笉鍒颁换鍔″彿"); + + } + } + break; + case 101://鎻愬崌鏈烘彁鍗囧畬鎴� + if (taskinfo != null) + { + //鏇存柊浠诲姟琛ㄤ腑NextAddress瀛楁涓烘柊鐨勪换鍔″彿 taskDTO.weight-鏃х殑浠诲姟鍙� taskDTO.task_id-鏂扮殑浠诲姟鍙� + UpdateTaskStatus(taskinfo.TaskId, taskDTO.task_id, (int)TaskInStatusEnum.AGV_InFinish); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV鎼繍瀹屾垚"); + return content = WebResponseContent.Instance.OK($"AGV鎼繍瀹屾垚锛�101锛夋洿鏂扮姸鎬佹垚鍔燂紝浠诲姟鍙凤細{taskinfo.TaskId}"); + } + else + { + return content = WebResponseContent.Instance.Error($"AGV鎼繍瀹屾垚锛�101锛夋洿鏂扮姸鎬佹椂锛屾煡璇笉鍒颁换鍔″彿"); + } + break; + + case 103://浜у搧绉诲簱锛堢Щ搴擄紝鍑哄簱锛� + task.TaskType= (int)TaskRelocationTypeEnum.Relocation; + task.TaskState = (int)TaskOutStatusEnum.OutNew; + task.Roadway = "SC01"; + task.Grade = 1; + break; + case 102: + if(taskDTO.dest_station ==1003)//绌鸿溅鍑哄簱 鏆傚瓨浣�-->杈撻�佺嚎 + { + task.TaskType = (int)TaskOutboundTypeEnum.OutPick; + task.TaskState = (int)TaskOutStatusEnum.OutNew; + task.Roadway = "SC01"; + task.Grade = 1; + } + else if(taskDTO.dest_station ==1001|| taskDTO.dest_station == 1002)//寮傚父鍑哄簱 + { + task.TaskType = (int)TaskOutboundTypeEnum.OutInventory; + task.TaskState = (int)TaskOutStatusEnum.OutNew; + task.Roadway = "SC01"; + task.Grade = 1; + } + if (locationdsc != null) + { + task.TargetAddress = locationdsc.LocationCode; + } + else + { + return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌鐩爣绔欑偣瀵瑰簲鐨勫簱浣嶏紝鐩爣绔欑偣锛歿taskDTO.dest_station.ToString()}"); + } + break; + case 104://缁勭珛鏈轰笂鏂� 鏆傚瓨浣�-->缁勭珛鏈� + { + task.TaskType = (int)TaskOtherTypeEnum.Feed; + task.TaskState = (int)TaskOutStatusEnum.OutNew; + task.Grade = 1; + task.Remark = taskDTO.total.ToString()+"-"+taskDTO.startIndex.ToString();//鍙栨�诲眰鏁板拰褰撳墠灞傛暟 + //涓嶄細浼犵粍绔嬫満涓婃枡绔欑偣锛屽彧浼氫紶鏆傚瓨搴撲綅锛岄渶鏍规嵁鏆傚瓨搴撲綅鍘绘煡璐т綅琛ㄤ腑鐨勭粍绔嬫満绔欑偣搴撲綅鍙� + + Dt_LocationInfo locationtemp = _locationInfoRepository.QueryFirst(x => x.Row==taskDTO.src_rack&&x.Column==taskDTO.src_col&&x.Layer==taskDTO.src_row); + if (locationtemp != null) + { + task.TargetAddress = locationtemp.Remark; + } + else + { + return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌鐩爣绔欑偣瀵瑰簲鐨勫簱浣嶏紝鐩爣绔欑偣锛歿task.TargetAddress.ToString()}"); + } + //鏍规嵁鐩爣鍦板潃锛堢粍绔嬫満锛夋煡璇㈤粯璁ょ殑鎵ц浠诲姟鐨勫皬鍫嗗灈鏈虹紪鍙� + Dt_LocationInfo locationtemp2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress.ToString()); + if (locationtemp2 != null) + { + task.Roadway = locationtemp2.Remark.Trim();//纭畾榛樿鎵ц浠诲姟鐨勫皬鍫嗗灈鏈虹紪鍙� + } + else + { + return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌缁勭珛鏈哄搴旂殑榛樿灏忓爢鍨涙満閰嶇疆"); + } + + } + + break; + default: + break; + } + + task.TaskNum = taskDTO.task_id; + task.PalletCode = taskDTO.CarId; + task.Roadway = "SC01"; + if (string.IsNullOrEmpty(task.SourceAddress))//濡傛灉涓嶆槸绔欑偣锛岀洿鎺ュ彇琛屽垪灞� + { + task.SourceAddress = $"SC01-{taskDTO.src_rack.ToString().PadLeft(3, '0')}-{taskDTO.src_col.ToString().PadLeft(3, '0')}-{taskDTO.src_row.ToString().PadLeft(3, '0')}"; + } + if(string.IsNullOrEmpty(task.TargetAddress))//濡傛灉涓嶆槸绔欑偣锛岀洿鎺ュ彇琛屽垪灞� + { + task.TargetAddress = $"SC01-{taskDTO.dest_rack.ToString().PadLeft(3, '0')}-{taskDTO.dest_col.ToString().PadLeft(3, '0')}-{taskDTO.dest_row.ToString().PadLeft(3, '0')}"; + } + task.Creater = "MES"; + + //鍒ゆ柇璐т綅鐘舵�� + Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (srcLocation != null && tarLocation != null) + { + if (srcLocation.EnableStatus == (int)EnableStatusEnum.Disable) + { + return content = WebResponseContent.Instance.Error($"婧愬湴鍧�宸茬鐢細{srcLocation.LocationCode}"); + } + if (tarLocation.EnableStatus == (int)EnableStatusEnum.Disable) + { + return content = WebResponseContent.Instance.Error($"鐩爣鍦板潃宸茬鐢細{tarLocation.LocationCode}"); + } + if (taskDTO.cmd != 101)//鍏ュ簱鏃朵笉闇�瑕佸垽鏂槸鍚﹂攣瀹氾紝閿佸畾鐘舵�佹槸鍦ㄧ敓鎴愪换鍔℃椂閿佸畾 + { + + if (taskinfo != null && taskDTO.cmd==3001&&taskinfo.WMSId==1)//濡傛灉鏄墜鍔ㄥ叆搴擄紝鍙�3001锛屼細鐢熸垚浠诲姟锛岄渶瑕佸垽鏂簱浣嶆槸鍚﹂攣瀹�;鑷姩妯″紡鍙�1001鐨勬椂鍊欏氨鐢熸垚浜嗕换鍔★紝鍐嶅彂3001灏变笉闇�瑕佸垽鏂槸鍚﹂攣瀹氫簡 + { + if (srcLocation.LocationStatus == (int)LocationStatusEnum.Lock) + { + return content = WebResponseContent.Instance.Error($"婧愬湴鍧�宸查攣瀹氾細{srcLocation.LocationCode}"); + } + if (tarLocation.LocationStatus == (int)LocationStatusEnum.Lock) + { + return content = WebResponseContent.Instance.Error($"鐩爣鍦板潃宸查攣瀹氾細{tarLocation.LocationCode}"); + } + } + } + if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)//鍏ュ簱 璺緞锛氭彁鍗囨満搴撲綅-->搴撲綅 + { + //WCS鏌ヨ搴撲綅鐘舵�佹槸鍚︿负鈥滅┖闂测�濆苟涓旀湭绂佺敤锛岄攣瀹氬簱浣嶄慨鏀瑰簱浣嶇姸鎬佷负鈥滈攣瀹氣�濓紝鐢熸垚WCS浜у搧鍏ュ簱浠诲姟锛屽姞鍏CS浠诲姟闃熷垪涓�� + if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free) + { + return content = WebResponseContent.Instance.Error($"鍏ュ簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{tarLocation.LocationCode}"); + } + //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; + tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; + + //if (srcLocation.LocationStatus != (int)LocationStatusEnum.Free) + //{ + // return content = WebResponseContent.Instance.Error($"鍏ュ簱-婧愬湴鍧�涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}"); + //} + + + + } + else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) //浜у搧绉诲簱锛堢Щ搴擄紝鍑哄簱鍏辩敤锛� 璺緞锛氬簱浣�-->搴撲綅/鏆傚瓨搴撲綅 + { + //WCS鏌ヨ搴撲綅鐘舵�佹槸鍚︿负鈥滄湁璐р�濓紝搴撲綅/鏆傚瓨搴撲綅鏄惁鈥滅┖闂测�� + if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) + { + return content = WebResponseContent.Instance.Error($"绉诲簱-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}"); + } + if(tarLocation.LocationStatus != (int)LocationStatusEnum.Free) + { + return content = WebResponseContent.Instance.Error($"绉诲簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}"); + } + srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; + tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; + + } + else if (task.TaskType == (int)TaskOutboundTypeEnum.OutInventory) //寮傚父鍑哄簱锛堥��搴擄級 璺緞锛氬簱浣�-->鎻愬崌鏈哄簱浣� + { + //WCS鏌ヨ搴撲綅鐘舵�佹槸鍚︿负鈥滄湁璐р�� + if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) + { + return content = WebResponseContent.Instance.Error($"寮傚父鍑哄簱-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}"); + } + srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; + //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; + //if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free) + //{ + // return content = WebResponseContent.Instance.Error($"寮傚父鍑哄簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}"); + //} + + } + else if (task.TaskType == (int)TaskOutboundTypeEnum.OutPick) //绌鸿溅鍑哄簱 璺緞锛氭殏瀛樺簱浣�-->杈撻�佺嚎 + { + //WCS鏌ヨ鏆傚瓨搴撲綅鏄惁鈥滄湁璐р�� + if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) + { + return content = WebResponseContent.Instance.Error($"绌鸿溅鍑哄簱-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}"); + } + //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; + //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; + //if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free) + //{ + // return content = WebResponseContent.Instance.Error($"绌鸿溅鍑哄簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}"); + //} + } + else if (task.TaskType == (int)TaskOtherTypeEnum.Feed) //涓婃枡 璺緞锛氭殏瀛樹綅-->缁勭珛鏈� + { + //WCS鏌ヨ鏆傚瓨搴撲綅鏄惁鈥滄湁璐р�� + if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) + { + return content = WebResponseContent.Instance.Error($"涓婃枡浠诲姟-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}"); + } + //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; + //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; + + } + + } + else + { + return content = WebResponseContent.Instance.Error($"搴撲綅鍦板潃涓嶅瓨鍦紝浠诲姟鍙�:{task.TaskNum}"); + } + + + + try + { + //寮�鍚簨鐗� + _unitOfWorkManage.BeginTran(); + _locationInfoRepository.UpdateData(tarLocation); + _locationInfoRepository.UpdateData(srcLocation); + BaseDal.AddData(task); + Dt_Task tasktemp= BaseDal.QueryFirst(x => x.TaskNum ==task.TaskNum); + _taskExecuteDetailService.AddTaskExecuteDetail(tasktemp.TaskId, "鎺ユ敹MES浠诲姟"); + //鎻愪氦浜嬪姟 + _unitOfWorkManage.CommitTran(); + + } + catch (Exception) + { + _unitOfWorkManage.RollbackTran(); + throw; + } + + content = WebResponseContent.Instance.OK("鎴愬姛",task); + + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error($"浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}"); + } + return content; + + } + /// <summary> /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟 /// </summary> @@ -155,6 +476,8 @@ return content; } + + /// <summary> /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏈墽琛岀殑浠诲姟 /// </summary> @@ -174,7 +497,8 @@ /// <returns></returns> public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress) { - return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); + //return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); + return null; } /// <summary> @@ -185,7 +509,8 @@ /// <returns></returns> public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress) { - return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); + //return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); + return null; } /// <summary> @@ -196,28 +521,64 @@ /// <returns></returns> public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null) { - if(taskTypeGroup == null) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); - if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); - if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); + //if(taskTypeGroup == null) + // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + //if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup) + // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); + //if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) + // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); return null; } /// <summary> - /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔� + /// 鏍规嵁璁惧缂栧彿 鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔� /// </summary> /// <param name="deviceNo">璁惧缂栧彿</param> /// <param name="currentAddress">褰撳墠鍦板潃</param> /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns> - public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") + public Dt_Task QueryStackerCraneTask(string deviceNo) { - if (string.IsNullOrEmpty(currentAddress)) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); - else - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew || TaskRelocationboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew || TaskOtherboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); } + + /// <summary> + /// 鏌ヨ灏忓爢鍨涙満浠诲姟 + /// </summary> + /// <returns></returns> + public Dt_Task QueryStackerCraneTask() + { + return BaseDal.QueryFirst(x => (x.Roadway =="SC02"|| x.Roadway == "SC03")&& x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); + } + + /// <summary> + /// 鏌ヨ灏忓爢鍨涙満鍑哄簱瀹屾垚浠诲姟 + /// </summary> + /// <returns></returns> + public Dt_Task QueryStackerCraneFinishTask() + { + return BaseDal.QueryFirst(x => (x.Roadway == "SC02" || x.Roadway == "SC03") && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish, TaskOrderBy); + } + + /// <summary> + /// 鏌ヨ鍏ュ簱浠诲姟 瀵瑰簲WMS璇锋眰 1001-AGV璇锋眰鏄惁鍏佽杩涘叆 + /// </summary> + /// <param name="deviceNo"></param> + /// <returns></returns> + public Dt_Task QueryStackerCraneTaskByAGVRequest(string deviceNo) + { + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew), TaskOrderBy); + } + /// <summary> + /// 瀵瑰簲WMS璇锋眰 3001-AGV鏀捐揣瀹屾垚 + /// </summary> + /// <param name="deviceNo"></param> + /// <returns></returns> + public Dt_Task QueryStackerCraneTaskByAGVPutFinish(string deviceNo) + { + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.AGV_InExecuting), TaskOrderBy); + } + + /// <summary> /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍏ュ簱绫诲瀷鐨勬柊澧炵殑浠诲姟 @@ -227,10 +588,11 @@ /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns> public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "") { - if (string.IsNullOrEmpty(currentAddress)) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); - else - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy); + //if (string.IsNullOrEmpty(currentAddress)) + // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); + //else + // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy); + return null; } /// <summary> @@ -296,13 +658,32 @@ /// <summary> /// 鏇存柊浠诲姟鐘舵�佷俊鎭紝骞跺悓姝ヨ嚦WMS /// </summary> - /// <param name="taskNum">浠诲姟鍙�</param> + /// <param name="taskId">浠诲姟ID</param> /// <param name="status">浠诲姟鐘舵��</param> - public void UpdateTaskStatus(int taskNum, int status) + public void UpdateTaskStatus(int taskId, int status) { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId); if (task == null) return; task.TaskState = status; + task.Modifier = "System"; + task.ModifyDate = DateTime.Now; + BaseDal.UpdateData(task); + } + + + /// <summary> + /// 鏇存柊浠诲姟鐘舵�佷俊鎭拰鏂扮殑浠诲姟鍙凤紙1001锛�3001鏃朵竴鏍蜂换鍔″彿锛� + /// </summary> + /// <param name="taskId">浠诲姟ID</param> + /// <param name="newtaskId">WMS鏂�(101)鐨勪换鍔″彿</param> + /// <param name="status">浠诲姟鐘舵��</param> + public void UpdateTaskStatus(int taskId,int newtaskId, int status) + { + Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId); + if (task == null) return; + task.TaskState = status; + task.Modifier = "System"; + task.NextAddress = newtaskId.ToString(); task.ModifyDate = DateTime.Now; BaseDal.UpdateData(task); } @@ -359,7 +740,7 @@ int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskState = nextStatus; - if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) + //if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) { Random random = new Random(); task.CurrentAddress = task.NextAddress; @@ -440,55 +821,173 @@ Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); + //寮傚父鍑哄簱銆佺┖杞﹀嚭搴� 缁堢偣涓嶄竴鏍� 1,寮傚父鍑哄簱锛堥��搴擄級 璺緞锛氬簱浣�-->鎻愬崌鏈哄簱浣� 2,绌鸿溅鍑哄簱 璺緞锛氭殏瀛樺簱浣�-->杈撻�佺嚎 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) - { - List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); - if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�"); + { + try + { + Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + srcLocation.LocationStatus = (int)LocationStatusEnum.Free; + UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�"); - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); - task.TaskState = nextStatus; - task.CurrentAddress = task.NextAddress; - task.NextAddress = routers.FirstOrDefault().ChildPosi; - task.ModifyDate = DateTime.Now; - task.Modifier = "System"; - BaseDal.UpdateData(task); + //寮�鍚簨鐗� + _unitOfWorkManage.BeginTran(); + UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish); + _locationInfoRepository.UpdateData(srcLocation); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍑哄簱浠诲姟瀹屾垚"); + //鎻愪氦浜嬪姟 + _unitOfWorkManage.CommitTran(); + //鍑哄簱瀹屾垚锛屽洖浼燱MS + //鍥炰紶鍒癢MS + MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 }; + MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); + if (res != null && res.code != 0) + { + content = WebResponseContent.Instance.Error($"澶у爢鍨涙満瀹屾垚鍑哄簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�"); + } - _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�"); - //todo 鍚屾鍒癢MS + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content = WebResponseContent.Instance.Error($"澶у爢鍨涙満鎵ц鍑哄簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�"); + } - //鏆備笉鑰冭檻澶氫釜鍑哄簱鍙� + + } + //鍏ュ簱 璺緞锛氭彁鍗囨満搴撲綅-->搴撲綅 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) { - //todo - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); - task.TaskState = nextStatus; - task.ModifyDate = DateTime.Now; - task.Modifier = "System"; - BaseDal.UpdateData(task); - _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�"); - - WMSTaskDTO taskDTO = new WMSTaskDTO() + try { - TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), - Grade = 1, - PalletCode = task.PalletCode + "S", - RoadWay = "SC01", - SourceAddress = task.TargetAddress, - TargetAddress = "CLOutAreaA", - TaskState = (int)TaskOutStatusEnum.OutNew, - Id = 0, - TaskType = (int)TaskOutboundTypeEnum.Outbound - }; + Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); + tarLocation.LocationStatus = (int)LocationStatusEnum.InStock;//搴撲綅鐘舵�佹洿鏂颁负鏈夎揣 - content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); + UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InFinish); + + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�"); + //寮�鍚簨鐗� + _unitOfWorkManage.BeginTran(); + + UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.InFinish); + + _locationInfoRepository.UpdateData(tarLocation); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍏ュ簱浠诲姟瀹屾垚"); + //鎻愪氦浜嬪姟 + _unitOfWorkManage.CommitTran(); + + //鍏ュ簱瀹屾垚锛屽洖浼燤ES 鍏ュ簱瀹屾垚鍥炰紶task.NextAddress 涔嬪墠101璇锋眰鏃跺瓨鐨勬柊浠诲姟鍙� + MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = int.Parse(task.NextAddress), status = 6 }; + MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); + if (res != null && res.code != 0) + { + content = WebResponseContent.Instance.Error($"澶у爢鍨涙満瀹屾垚鍏ュ簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�"); + } + + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content = WebResponseContent.Instance.Error($"澶у爢鍨涙満鎵ц鍏ュ簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�"); + } } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) + //绉诲簱浠诲姟锛堢Щ搴擄紝鍑哄簱鍏辩敤锛� 璺緞锛氬簱浣�-->搴撲綅/鏆傚瓨搴撲綅 + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) { - //todo 璋冪敤WMS绉诲簱瀹屾垚 + try + { + Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + srcLocation.LocationStatus = (int)LocationStatusEnum.Free; + + Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); + srcLocation.LocationStatus = (int)LocationStatusEnum.InStock; + UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�"); + + //寮�鍚簨鐗� + _unitOfWorkManage.BeginTran(); + UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish); + _locationInfoRepository.UpdateData(srcLocation); + _locationInfoRepository.UpdateData(tarLocation); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍑哄簱浠诲姟瀹屾垚"); + //鎻愪氦浜嬪姟 + _unitOfWorkManage.CommitTran(); + //绉诲簱瀹屾垚锛屽洖浼燤ES + //鍥炰紶鍒癢MS + MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 }; + MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); + if (res != null && res.code != 0) + { + content = WebResponseContent.Instance.Error($"澶у爢鍨涙満瀹屾垚鍑哄簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�"); + } + + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content = WebResponseContent.Instance.Error($"澶у爢鍨涙満鎵ц鍑哄簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�"); + } } + //涓婃枡 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) { + try + { + Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + //srcLocation.LocationStatus = (int)LocationStatusEnum.Free; + + + //寮�鍚簨鐗� + _unitOfWorkManage.BeginTran(); + UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�"); + //UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish); + //_locationInfoRepository.UpdateData(srcLocation); + //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍑哄簱浠诲姟瀹屾垚"); + //鎻愪氦浜嬪姟 + _unitOfWorkManage.CommitTran(); + //涓婃枡瀹屾垚锛屽洖浼燱MS + MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 }; + MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); + if (res != null && res.code != 0) + { + content = WebResponseContent.Instance.Error($"灏忓爢鍨涙満瀹屾垚鍑哄簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�"); + } + else + { + //鍒ゆ柇鏄惁瀹屾垚鐨勬渶鍚庝竴灞傦紝鑷姩鐢熸垚绌鸿溅鍑哄簱浠诲姟 + string[] Levels = task.Remark.Split("-"); + if (Levels.Length == 2) + { + if (!string.IsNullOrEmpty(Levels[0])&& !string.IsNullOrEmpty(Levels[1])) + { + //濡傛灉褰撳墠鎻愬彇灞傛暟绛変簬鎬诲眰鏂欙紝鍒欒〃绀烘枡杞︽墍鏈夌殑灞傛暟鍙栧畬 + if(Convert.ToInt16(Levels[0])== Convert.ToInt16(Levels[1])) + { + string[] SourceCodes = task.SourceAddress.Split("-"); + string startPlan = ""; + if (SourceCodes.Length == 4) + { + startPlan= "101"+ SourceCodes[2].Substring(1,2); + } + DeliveryPlan send = new DeliveryPlan { startPlan = startPlan, isQuit = false, CarId = task.PalletCode }; + ApiInvoke.DeliveryPlanCMD(send);//鍥炶皟MES鎺ュ彛鐢熸垚绌鸿溅鍑哄簱浠诲姟 + + } + + } + + } + } + + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content = WebResponseContent.Instance.Error($"灏忓爢鍨涙満鎵ц鍑哄簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�"); + } } else @@ -594,5 +1093,8 @@ } return content; } + + + } } -- Gitblit v1.9.3