| | |
| | | /// <summary> |
| | | /// å¼å¸¸ |
| | | /// </summary> |
| | | Abnormal |
| | | Abnormal, |
| | | /// <summary> |
| | | /// æ¡æ¶ä¸æ |
| | | /// </summary> |
| | | Load |
| | | } |
| | | } |
| | |
| | | using WIDESEA_Comm.LogInfo; |
| | | using WIDESEA_Comm.TaskNo; |
| | | using WIDESEA_Core.EFDbContext; |
| | | using WIDESEA_Core.Extensions; |
| | | using WIDESEA_Core.FreeDB; |
| | | using WIDESEA_Entity.DomainModels; |
| | | using WIDESEA_WCS.IRepositories; |
| | |
| | | station.heatNumber = Mes_Work.heatID; |
| | | station.tray_status = "StrogeTray"; |
| | | } |
| | | |
| | | station.remark = ""; |
| | | var count = stationinfoRepository.Update(station, true); |
| | | if (count < 1) |
| | | throw new Exception($"䏿ä½ä¿¡æ¯æ´æ°å¤±è´¥ï¼ä¸æä½ç¼å·ï¼{station.stationCode}"); |
| | |
| | | var Request = (bool)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Request_Load").First(), client); |
| | | if (!Request) continue; |
| | | |
| | | //var Area = client.ReadByOrder<Int16>("W_AreaNr", name);//读åè´§ä½å·ä¿¡æ¯ |
| | | //if (Area != 0) continue; |
| | | |
| | | #region è¯»åæ¡æ¶ä¿¡æ¯ |
| | | var Wheel_Type = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Wheel_Type").First(), client);//车轮类å |
| | |
| | | client.WriteByOrder("W_Enabl_Load", false, name);//ä¿¡å·ä¸ºfalseæ¡æ¶åæ¢è¿å
¥ |
| | | //WriteDBLog.Error(name, $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{Wheel_id}\n\næªæ¥è¯¢å°å·¥åä¿¡æ¯", "PCS"); |
| | | WriteLog.Write_Log(name + "ç³è¯·æ¾æå¼å¸¸", Wheel_id, "æ¥è¯¢æºå 工工å", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNå·ï¼{Wheel_id}æªæ¥è¯¢å°å·¥åä¿¡æ¯\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\næ¯å¦å
è®¸ä¸æï¼{false}"); |
| | | continue; |
| | | } |
| | | |
| | | |
| | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | var wheel = Pipeline.QueryMateriel(Work.drawingNo); |
| | | var wheel1 = Pipeline.QueryMateriel1(Work.drawingNo); |
| | | if (wheel == null && wheel1 == null) |
| | |
| | | #endregion |
| | | continue; |
| | | } |
| | | |
| | | #region æ¢å¾å·,䏿å£å
¶ä»å¾å·æçå
¨é¨å
¥åº |
| | | var stations = Stations.Where(x => x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).ToList(); |
| | | foreach (var station in stations) |
| | | { |
| | | if (station.stationCode == NGStation || name == "3åå
䏿åº") |
| | | agvtask(stationinfoRepository, station, Work, "TaskType_OutsourceInbound"); |
| | | else |
| | | agvtask(stationinfoRepository, station, Work, "TaskType_Inbound"); |
| | | } |
| | | #endregion |
| | | |
| | | var PartStatus = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PartStatus").First(), client);//1:ok;2:nok |
| | | |
| | |
| | | if (Stationinfo == null) |
| | | { |
| | | #region 触åNGä»»å¡ |
| | | var NG = Stations.Where(x => x.enable && x.stationCode == NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).FirstOrDefault(); |
| | | var NG = Stations.Where(x => x.enable && x.stationCode == NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.Number != Work.workOrder && x.quantity > 0).FirstOrDefault(); |
| | | if (NG != null) |
| | | { |
| | | if (NG.stationType != Work.drawingNo || NG.Number != Work.workOrder) |
| | | agvtask(stationinfoRepository, NG, Work, "TaskType_OutsourceInbound"); |
| | | } |
| | | #endregion |
| | | |
| | | Stationinfo = Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 0).FirstOrDefault(); |
| | |
| | | { |
| | | |
| | | #region æ¢ç±»åç´æ¥å
¥åº |
| | | var stationinfo1 = Stations.Where(x => x.enable && x.stationCode != NGStation && x.stationCode != Stationinfo.stationCode && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).FirstOrDefault(); |
| | | if (stationinfo1 != null) |
| | | agvtask(stationinfoRepository, stationinfo1, Work, name == "3åå
䏿åº" ? "TaskType_OutsourceInbound" : "TaskType_Inbound"); |
| | | //var stationinfo1 = Stations.Where(x => x.enable && x.stationCode != NGStation && x.stationCode != Stationinfo.stationCode && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0 && x.stationType != Work.drawingNo).FirstOrDefault(); |
| | | //if (stationinfo1 != null) |
| | | // agvtask(stationinfoRepository, stationinfo1, Work, name == "3åå
䏿åº" ? "TaskType_OutsourceInbound" : "TaskType_Inbound"); |
| | | #endregion |
| | | |
| | | #region æç车轮å å第å个æ¶ä¸åå¦å¤ä¸ä¸ªçå·çå
¥åºä»»å¡ |
| | |
| | | client.WriteByOrder("W_IndexNr", (Int16)(Stationinfo.quantity + 1), name);//æçä¸ç第å 个车轮 |
| | | client.WriteByOrder("W_Storage_Type", (Int16)1, name);//æçç±»å1-横æ¾;2-ç«æ¾(ææ¶åªææ¨ªæ¾æç) |
| | | client.WriteByOrder("W_Enabl_Load", true, name);//æ¯å¦å
许 |
| | | Stationinfo.remark = "æ¡æ¶ä¸æ"; |
| | | stationinfoRepository.Update(Stationinfo, true); |
| | | #region æ¥å¿è®°å½ |
| | | //WriteDBLog.Success(name + "å
è®¸æ¾æ", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{Wheel_id}\nè½®åIDï¼{Wheel_Type}\nè½¦è½®ç¶æï¼OK" +$"\n读åæçå
çµä¿¡å·ï¼{PalletSignal}" + |
| | | // $"\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\n䏿ä½å·ï¼{area}\n第å 个车轮ï¼{(Stationinfo.quantity + 1)}\næçç±»åï¼1\nW_Enabl_Loadï¼true", "PCS"); |
| | |
| | | #region 没æçå¯ç¨,触åå
¥åºä»»å¡ |
| | | if (!Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state != LocationStateEnum.Stroge.ToString()).Any()) |
| | | { |
| | | var station = Stations.Where(x => x.enable && x.stationCode != NGStation).OrderBy(x => x.lastUpdateTime).FirstOrDefault(); |
| | | var station = Stations.Where(x => x.enable && x.stationCode != NGStation && x.location_state == LocationStateEnum.Stroge.ToString()).OrderBy(x => x.lastUpdateTime).FirstOrDefault(); |
| | | agvtask(stationinfoRepository, station, Work, name == "3åå
䏿åº" ? "TaskType_OutsourceInbound" : "TaskType_Inbound"); |
| | | } |
| | | #endregion |
| | |
| | | Stationinfo.tray_type = Stationinfo.tray_type == "SmallTray" ? "SmallTray/LargeTray" : "LargeTray/SmallTray"; |
| | | Stationinfo.remark = "æçç±»åä¸ä¸è´éæ´æ¢æç"; |
| | | stationinfoRepository.Update(Stationinfo, true); |
| | | continue; |
| | | } |
| | | #endregion |
| | | var Pipelinedetails = plcRepository.Find(x => x.plcdetail_iotype == Pipelineplc.plcinfo_iotyep && x.plcdetail_number == Stationinfo.stationCode).ToList(); |
| | |
| | | client.WriteByOrder("W_IndexNr", (Int16)(Stationinfo.quantity + 1), name);//æçä¸ç第å 个车轮 |
| | | client.WriteByOrder("W_Storage_Type", (Int16)1, name);//æçç±»å1-横æ¾;2-ç«æ¾(ææ¶åªææ¨ªæ¾æç) |
| | | client.WriteByOrder("W_Enabl_Load", true, name);//æ¯å¦å
许 |
| | | Stationinfo.remark = "æ¡æ¶ä¸æ"; |
| | | stationinfoRepository.Update(Stationinfo, true); |
| | | #region æ¥å¿è®°å½ |
| | | //WriteDBLog.Success(name + "å
è®¸æ¾æ", $"è¯»åæ¡æ¶ä¿¡æ¯ï¼\n车轮SNï¼{Wheel_id}\nè½®åIDï¼{Wheel_Type}\nè½¦è½®ç¶æï¼NG" +$"\n读åæçå
çµä¿¡å·ï¼{PalletSignal}" + |
| | | // $"\n\nåå
¥æ¡æ¶ä¿¡æ¯ï¼\n䏿ä½å·ï¼{area}\n第å 个车轮ï¼{(Stationinfo.quantity + 1)}\næçç±»åï¼1\nW_Enabl_Loadï¼true", "PCS"); |
| | |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); |
| | | IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(Context); |
| | | Work = workinfoRepository.Find(x => x.workOrder == stationinfo.Number && x.processCode == "17").FirstOrDefault(); |
| | | var task = agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).FirstOrDefault(); |
| | | if (task != null) return; |
| | | if (!string.IsNullOrEmpty(Work.area)) |
| | |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); |
| | | List<string> strings = new List<string>() { }; |
| | | var stations = stationinfoRepository.Find(x => x.stationCode.Contains("X") || x.stationCode.Contains("W01001004") || x.stationCode.Contains("W01001005")).ToList(); |
| | | stations = stations.Where(x => x.location_state == "Empty" && x.enable).ToList(); |
| | | stations = stations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable).ToList(); |
| | | foreach (var station in stations) |
| | | { |
| | | if (agvtaskRepository.Find(x => x.agv_toaddress == station.stationCode).Any()) |
| | | continue; |
| | | var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", station.stationCode);//读åæçä¿¡å·:1:æ,2æ |
| | | var MaterialSignal = Pipeline_client.ReadByOrder<Int16>("R_MaterialSignal", station.stationCode);//读åè´§ç©ä¿¡å·:1:æ,2æ |
| | | |
| | | if (PalletSignal == 2 && MaterialSignal == 2) |
| | | { |
| | | var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); |
| | | if (station.remark == TrayTypeEnum.SmallTray.ToString() || station.remark == TrayTypeEnum.LargeTray.ToString()) station.tray_type = station.remark; |
| | | |
| | | var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress) && x.agv_Traytype == station.tray_type).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); |
| | | if (agv_task != null) |
| | | { |
| | | agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); |
| | |
| | | agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), |
| | | agv_grade = station.stationCode.Contains("W0100100") ? 3 : 2, |
| | | agv_createtime = DateTime.Now, |
| | | agv_taskstate = "Queue", |
| | | agv_taskstate = AGVTaskStateEnum.Queue.ToString(), |
| | | agv_qty = 1, |
| | | agv_tasktype = "TaskType_EmptyPallet", |
| | | agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(), |
| | | agv_toaddress = station.stationCode, |
| | | agv_userid = "ç³»ç»", |
| | | agv_TrayStatus = "EmptyTray",// station.tray_status, |
| | | agv_TrayStatus = TrayStateEnum.EmptyTray.ToString(),// station.tray_status, |
| | | agv_Traytype = station.tray_type |
| | | }; |
| | | station.location_state = LocationStateEnum.Busy.ToString(); |
| | |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); |
| | | if (station.area == "10" || station.area == "11") |
| | | { |
| | | OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); |
| | | } |
| | | else |
| | | { |
| | | OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | var area = task.agv_Traytype == "SmallTray" ? "11" : "10"; |
| | | |
| | | #region ä¼å
åº3åºåºå
空æç |
| | | //if (area == "11") |
| | | //{ |
| | | // EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); |
| | | // if (EmptyStation == null) |
| | | // EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002"/* && x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); |
| | | // if (EmptyStation != null) |
| | | // EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == EmptyStation.area && x.line == EmptyStation.line /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); |
| | | // if (EmptyStation != null)//空æè´§ä½ä¸ä¸ºç©ºå¤ææ¯å¦åå¨å
¶ä»ä»»å¡ |
| | | // if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; |
| | | // //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null; |
| | | //} |
| | | #endregion |
| | | |
| | | #region æ¥æ¾ABåºåºå¯åºåºç©ºæè´§ä½ |
| | | if (area == "11") |
| | | { |
| | | EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01004002" /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); |
| | | if (EmptyStation == null) |
| | | EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.stationCode == "C01005002"/* && x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).FirstOrDefault(); |
| | | if (EmptyStation != null) |
| | | EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == EmptyStation.area && x.line == EmptyStation.line /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); |
| | | if (EmptyStation != null)//空æè´§ä½ä¸ä¸ºç©ºå¤ææ¯å¦åå¨å
¶ä»ä»»å¡ |
| | | if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; |
| | | //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null; |
| | | //EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault(); |
| | | EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderBy(x => x.area).ThenBy(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); |
| | | if (EmptyStation != null)//å¿
é¡»åºå®ABåºç©ºææè½åºç©ºæåº |
| | | if (QueueStation(EmptyStation.stationCode) || stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) return;// EmptyStation = null; |
| | | } |
| | | #endregion |
| | | |
| | | #region æ¥æ¾ç©ºæåºåº |
| | | if (EmptyStation == null) |
| | | EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == area /*&& x.location_state == "Stroge"*/ && x.tray_status == "EmptyTray" && x.enable).OrderBy(x => x.column).FirstOrDefault(); |
| | | EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && x.area == area && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); |
| | | #endregion |
| | | |
| | | #region 空æè´§ä½ä¸ä¸ºç©ºå¤ææ¯å¦åå¨å
¶ä»ä»»å¡ |
| | | if (EmptyStation != null) |
| | | if (stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; |
| | | //if (EmptyStation.location_state == LocationStateEnum.Busy.ToString()) EmptyStation = null; |
| | | if (QueueStation(EmptyStation.stationCode) || stationinfoRepository.Find(x => x.line == EmptyStation.line && x.area == EmptyStation.area && x.location_state.Contains("Busy")).Any()) EmptyStation = null; |
| | | #endregion |
| | | |
| | | #region æ´æ°è¡¥ç©ºæéåä»»å¡ |
| | | if (EmptyStation != null) |
| | | { |
| | | var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", task.agv_toaddress);//读åæçä¿¡å·:1:æ,2æ |
| | |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); |
| | | IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); |
| | | |
| | | var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderBy(x => x.CreateTime).ToList(); |
| | | var Mes_Works = workinfoRepository.Find(x => x.processCode == "28").OrderByDescending(x => x.CreateTime).ToList(); |
| | | foreach (var Mes_Work in Mes_Works) |
| | | { |
| | | var inventory = inventoryRepository.Find(x => x.SN == Mes_Work.SN).FirstOrDefault(); |
| | |
| | | stationinfo = stationinfoRepository.Find(x => x.line == Station.line && x.area == Station.area && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.column).FirstOrDefault(); |
| | | if (stationinfo != null) |
| | | { |
| | | if (agvtaskRepository.Find(x => x.agv_fromaddress == stationinfo.stationCode).Any()) continue; |
| | | |
| | | if (stationinfoRepository.Find(x => x.line == stationinfo.line && x.area == stationinfo.area && x.column > stationinfo.column && !x.enable).Any()) |
| | | continue; |
| | | if (string.IsNullOrEmpty(stationinfo.bindSN)) |
| | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// åå»ºæ´æ¢æçä»»å¡ |
| | | /// åå»ºæ´æ¢æçä»»å¡,éä¿®æ¹ |
| | | /// </summary> |
| | | public static void ReplaceTrayTask() |
| | | { |
| | |
| | | else |
| | | GetStation.EmptyPalletStation(agvtask); |
| | | } |
| | | WriteDBLog.Success("æ´æ°ç©ºæéåä»»å¡", $"ä»»å¡ç¼å·ï¼{agvtask.agv_tasknum}", "PCS"); |
| | | } |
| | | else if (agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString() || agvtask.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString())//å¤ååºå
¥åº/ABåºå
¥åº |
| | | { |
| | |
| | | dt_stationinfo TargetLocation = null; |
| | | |
| | | #region 寻æ¾å·²åé
åå¾å·å
¥åºä»»å¡åºä½ |
| | | TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3")).FirstOrDefault(); |
| | | TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.enable && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3") && x.enable).FirstOrDefault(); |
| | | if (TargetLocation != null) |
| | | { |
| | | TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault(); |
| | |
| | | |
| | | #region æªæ¾å°åºåæå½ååºåè¡å·²æ»¡,å¯»æ¾æ°çä¸è¡ |
| | | var area = GetArea(mesinfo.quantity, agvtask.agv_Traytype); |
| | | TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault(); |
| | | TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault(); |
| | | if (TargetLocation == null && area != "4") |
| | | { |
| | | area = area == "2" ? "3" : "2"; |
| | | TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault(); |
| | | TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault(); |
| | | } |
| | | |
| | | #region æ¥çå½å空货ä½åæ¯å¦å卿æ |
| | |
| | | "Connection": { |
| | | "DBType": "MsSql", //MySql/MsSql/PgSql //æ°æ®åºç±»åï¼å¦æä½¿ç¨çæ¯sqlserveræ¤å¤åºè®¾ç½®ä¸ºMsSql |
| | | //sqlserverè¿æ¥å符串P@ssw0rd |
| | | "DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", |
| | | //"DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", |
| | | //"DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", |
| | | "DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", |
| | | |
| | | //mysqlè¿æ¥å符串(å级EFCore3.1å°æ¶å·²å°mysqlè¿æ¥å符串修æ¹,2019-12-20) |
| | | // "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;", |
| | |
| | | #endregion |
| | | } |
| | | /// <summary> |
| | | /// èµ·ç¹ä»»å¡ä¸åä¿¡æ¯ |
| | | /// </summary> |
| | | public class RequestFromTask |
| | | { |
| | | /// <summary> |
| | | /// ä½ä¸ä»»å¡å· |
| | | /// </summary> |
| | | public string TASK_NO { get; set; } |
| | | /// <summary> |
| | | /// èµ·ç¹ |
| | | /// </summary> |
| | | public string FROM_POSITION { get; set; } |
| | | /// <summary> |
| | | /// ç»ç¹ |
| | | /// </summary> |
| | | //public string TO_POSITION { get; set; } |
| | | /// <summary> |
| | | /// ä»»å¡ç级 |
| | | /// </summary> |
| | | public int? Grade { get; set; } = 0; |
| | | /// <summary> |
| | | /// æ°é |
| | | /// </summary> |
| | | public int Quantity { get; set; } |
| | | |
| | | ///<summary> |
| | | /// è½¬è¿æçæ¶ï¼èµ·ç¹åºé¨å 个æçï¼å
¥å å å®å
¨é¨è½¬è¿å为0ï¼å¦æè½¬è¿äºå±ä¸çä¸ä¸ªå为4ï¼ä¸é¢æ°éå为1 |
| | | ///</summary> |
| | | public int StarQuantity { get; set; } |
| | | |
| | | ///<summary> |
| | | /// è½¬è¿æçæ¶ï¼ç»ç¹åºé¨å 个æçï¼å
¥å å å®å
¨é¨è½¬è¿å为0ï¼å¦æè½¬è¿äºå±ä¸çä¸ä¸ªå为4ï¼ä¸é¢æ°éå为1 |
| | | ///</summary> |
| | | public int EndQuantity { get; set; } |
| | | /// <summary> |
| | | /// æçç±»å 1å°æçï¼2大æç |
| | | /// </summary> |
| | | public int TrayType { get; set; } |
| | | /// <summary> |
| | | /// ä»»å¡ç±»å 1转è¿è½¦è½®ä»»å¡ï¼2转è¿ç©ºæçä»»å¡ |
| | | /// </summary> |
| | | public int TaskType { get; set; } |
| | | /// <summary> |
| | | /// ç©æä¿¡æ¯ |
| | | /// </summary> |
| | | public string Material { get; set; } |
| | | #region è½¦è½®æ°æ® |
| | | public float A { get; set; } |
| | | public float B { get; set; } |
| | | public float C { get; set; } |
| | | public float D { get; set; } |
| | | public float E { get; set; } |
| | | public float F { get; set; } |
| | | public float G { get; set; } |
| | | public float H { get; set; } |
| | | #endregion |
| | | } |
| | | /// <summary> |
| | | /// ç»ç¹ä»»å¡ä¸åä¿¡æ¯ |
| | | /// </summary> |
| | | public class RequestToaddTask |
| | | { |
| | | /// <summary> |
| | | /// ä½ä¸ä»»å¡å· |
| | | /// </summary> |
| | | public string TASK_NO { get; set; } |
| | | /// <summary> |
| | | /// èµ·ç¹ |
| | | /// </summary> |
| | | //public string FROM_POSITION { get; set; } |
| | | /// <summary> |
| | | /// ç»ç¹ |
| | | /// </summary> |
| | | public string TO_POSITION { get; set; } |
| | | /// <summary> |
| | | /// ä»»å¡ç级 |
| | | /// </summary> |
| | | public int? Grade { get; set; } = 0; |
| | | /// <summary> |
| | | /// æ°é |
| | | /// </summary> |
| | | public int Quantity { get; set; } |
| | | |
| | | ///<summary> |
| | | /// è½¬è¿æçæ¶ï¼èµ·ç¹åºé¨å 个æçï¼å
¥å å å®å
¨é¨è½¬è¿å为0ï¼å¦æè½¬è¿äºå±ä¸çä¸ä¸ªå为4ï¼ä¸é¢æ°éå为1 |
| | | ///</summary> |
| | | public int StarQuantity { get; set; } |
| | | |
| | | ///<summary> |
| | | /// è½¬è¿æçæ¶ï¼ç»ç¹åºé¨å 个æçï¼å
¥å å å®å
¨é¨è½¬è¿å为0ï¼å¦æè½¬è¿äºå±ä¸çä¸ä¸ªå为4ï¼ä¸é¢æ°éå为1 |
| | | ///</summary> |
| | | public int EndQuantity { get; set; } |
| | | /// <summary> |
| | | /// æçç±»å 1å°æçï¼2大æç |
| | | /// </summary> |
| | | public int TrayType { get; set; } |
| | | /// <summary> |
| | | /// ä»»å¡ç±»å 1转è¿è½¦è½®ä»»å¡ï¼2转è¿ç©ºæçä»»å¡ |
| | | /// </summary> |
| | | public int TaskType { get; set; } |
| | | /// <summary> |
| | | /// ç©æä¿¡æ¯ |
| | | /// </summary> |
| | | public string Material { get; set; } |
| | | #region è½¦è½®æ°æ® |
| | | public float A { get; set; } |
| | | public float B { get; set; } |
| | | public float C { get; set; } |
| | | public float D { get; set; } |
| | | public float E { get; set; } |
| | | public float F { get; set; } |
| | | public float G { get; set; } |
| | | public float H { get; set; } |
| | | #endregion |
| | | } |
| | | /// <summary> |
| | | /// AGVåé¦ä¿¡æ¯ |
| | | /// </summary> |
| | | public class Respone |
| | |
| | | RequestTask requestTask = new RequestTask(); |
| | | string postJson = string.Empty; |
| | | string report = string.Empty; |
| | | try |
| | | { |
| | | |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); |
| | | var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == "Create" && string.IsNullOrEmpty(x.agv_remark)).OrderByDescending(x => x.agv_grade) |
| | |
| | | if (agv_tasks.Count > 0) |
| | | { |
| | | foreach (var agv_task in agv_tasks) |
| | | { |
| | | try |
| | | { |
| | | var Materiel = QueryData.QueryMateriel(agv_task.agv_materielid);//æ¥æ¾è½¦è½®æ°æ® |
| | | var Materiel1 = QueryData.QueryMateriel1(agv_task.agv_materielid);//æ¥æ¾è½¦è½®æ°æ® |
| | |
| | | requestTask.H = Materiel == null ? Materiel1.h : Materiel.h; |
| | | } |
| | | postJson = JsonConvert.SerializeObject(requestTask); |
| | | report = Request.RequestData(postJson, "http://192.168.12.204:5000/api/TaskCreat/CreatTask"); |
| | | respone = JsonConvert.DeserializeObject<Respone>(report); |
| | | if (respone.Success) |
| | | { |
| | | agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString(); |
| | | agv_task.agv_realesstime = DateTime.Now; |
| | | agvtaskRepository.Update(agv_task, true); |
| | | WriteWMSLog.LogAdd(requestTask.TASK_NO, "æå ", "AGV", "WMS", postJson, report, "ä¸åAGVä»»å¡", "SendAGVTask", respone.Msg); |
| | | } |
| | | else |
| | | { |
| | | agv_task.agv_remark = respone.Msg; |
| | | var task = agvtaskRepository.Find(x => x.agv_tasknum == agv_task.agv_tasknum && x.agv_remark == agv_task.agv_remark).FirstOrDefault();//.Exists |
| | | if (task == null) |
| | | agvtaskRepository.Update(agv_task, true); |
| | | WriteWMSLog.LogAdd(requestTask.TASK_NO, "失败 ", "AGV", "WMS", postJson, report, "ä¸åAGVä»»å¡", "SendAGVTask", respone.Msg); |
| | | } |
| | | } |
| | | } |
| | | //report = Request.RequestData(postJson, AGVAPIAddress.IPAddress_AGVTask);//"http://192.168.12.204:5000/api/TaskCreat/CreatTask" |
| | | RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVTask); |
| | | //respone = JsonConvert.DeserializeObject<Respone>(report); |
| | | //if (respone.Success) |
| | | //{ |
| | | // agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString(); |
| | | // agv_task.agv_realesstime = DateTime.Now; |
| | | // agvtaskRepository.Update(agv_task, true); |
| | | // WriteWMSLog.LogAdd(requestTask.TASK_NO, "æå ", "AGV", "WMS", postJson, report, "ä¸åAGVä»»å¡", "SendAGVTask", respone.Msg); |
| | | //} |
| | | //else |
| | | //{ |
| | | // agv_task.agv_remark = respone.Msg; |
| | | // var task = agvtaskRepository.Find(x => x.agv_tasknum == agv_task.agv_tasknum && x.agv_remark == agv_task.agv_remark).FirstOrDefault();//.Exists |
| | | // if (task == null) |
| | | // agvtaskRepository.Update(agv_task, true); |
| | | // WriteWMSLog.LogAdd(requestTask.TASK_NO, "失败 ", "AGV", "WMS", postJson, report, "ä¸åAGVä»»å¡", "SendAGVTask", respone.Msg); |
| | | //} |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | |
| | | #region å çåºæ»¡5个å
¥åº |
| | | #region å çåºæ»¡5个å
¥åº éä¼å |
| | | var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.enable).ToList(); |
| | | var EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity == 5).FirstOrDefault(); |
| | | if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD); |
| | | //EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0&&x.lastUpdateTime.).FirstOrDefault();//æ¶é´è¶
è¿6å°æ¶å
¥åº |
| | | #endregion |
| | | var agv_task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); |
| | | if (agv_task != null) |
| | | |
| | | var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList(); |
| | | foreach (var agv_task in agv_tasks) |
| | | { |
| | | try |
| | | { |
| | | tasknum = agv_task.agv_tasknum; |
| | | #region MyRegion |
| | |
| | | // return; |
| | | //} |
| | | #endregion |
| | | dt_stationinfo EmptyStation = null; |
| | | #region æ£æµä¸æç空æå ç |
| | | if (agv_task.agv_fromaddress.Contains("S")) |
| | | { |
| | | //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); |
| | | EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); |
| | | if (EmptyStation == null) |
| | | EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); |
| | | if (EmptyStation == null) |
| | | { |
| | | EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault(); |
| | | if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD); |
| | | } |
| | | } |
| | | #endregion |
| | | else |
| | | { |
| | | EmptyStation = GetStation.EmptyPalletStation(agv_task.agv_Traytype == "SmallTray" ? "11" : "10"); |
| | | } |
| | | #region MyRegion |
| | | //dt_stationinfo EmptyStation = null; |
| | | //#region æ£æµä¸æç空æå ç |
| | | //if (agv_task.agv_fromaddress.Contains("S")) |
| | | //{ |
| | | // //var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); |
| | | // EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); |
| | | // if (EmptyStation == null) |
| | | // EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); |
| | | // if (EmptyStation == null) |
| | | // { |
| | | // EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault(); |
| | | // if (EmptyD != null) EmptyTray.CreateEmptyTrayIn(stationinfoRepository, EmptyD); |
| | | // } |
| | | //} |
| | | //#endregion |
| | | //else |
| | | //{ |
| | | // EmptyStation = GetStation.EmptyPalletStation1(agv_task.agv_Traytype == "SmallTray" ? "11" : "10"); |
| | | //} |
| | | |
| | | #endregion |
| | | |
| | | var EmptyStation = EmptyTray.GetEmptyTrayStation(stationinfoRepository, agv_task); |
| | | if (EmptyStation != null) |
| | | { |
| | | agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); |
| | |
| | | WriteDBLog.Success("æ´æ°èªå¨å空æéåä»»å¡", $"ä»»å¡ç¼å·ï¼{agv_task.agv_tasknum}", "WMS"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("æ¥éæ¥å¿", "æ´æ°èªå¨å空æéåä»»å¡", "é误信æ¯ï¼", $"{tasknum}ï¼é误信æ¯ï¼{ex.Message}"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | VOLContext context = new VOLContext(); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); |
| | | var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress); |
| | | var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress); |
| | | |
| | | if (task.agv_taskstate == AGVTaskStateEnum.Complete1.ToString()) |
| | | { |
| | | var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress); |
| | | ////空æä»»å¡éä¿®æ¹é»è¾ |
| | | if (station2.stationCode.Contains("X")) |
| | | station2.quantity = 0;// task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 0 : task.agv_qty; //task.agv_qty; |
| | |
| | | } |
| | | else if (task.agv_taskstate == AGVTaskStateEnum.Complete.ToString()) |
| | | { |
| | | var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress); |
| | | #region MyRegion |
| | | //if (station1.stationCode.Contains("S")) |
| | | // station1.quantity = 0; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Comm.LogInfo; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Entity.DomainModels; |
| | | using WIDESEA_Entity.ToAGV; |
| | | using WIDESEA_WMS.IRepositories; |
| | | |
| | | namespace WIDESEA_WMS.Common |
| | | { |
| | | public partial class AGVServer |
| | | { |
| | | /// <summary> |
| | | /// åAGVè¯·æ± |
| | | /// </summary> |
| | | public static Respone RequestAGV(Idt_agvtaskRepository agvtaskRepository, dt_agvtask agv_task, string postJson, string IP) |
| | | { |
| | | var report = Request.RequestData(postJson, IP); |
| | | var respone = JsonConvert.DeserializeObject<Respone>(report); |
| | | if (respone.Success) |
| | | { |
| | | if (agv_task.agv_taskstate != AGVTaskStateEnum.Complete.ToString()) |
| | | agv_task.agv_taskstate = AGVTaskStateEnum.SendOut.ToString(); |
| | | if (agv_task.agv_taskstate == AGVTaskStateEnum.Complete.ToString()) |
| | | agv_task.agv_completeBeginTime = DateTime.Now; |
| | | else |
| | | agv_task.agv_realesstime = DateTime.Now; |
| | | agvtaskRepository.Update(agv_task, true); |
| | | WriteWMSLog.LogAdd(agv_task.agv_tasknum, "æå ", "AGV", "WMS", postJson, report, "ä¸åAGVä»»å¡", "SendAGVTask", respone.Msg); |
| | | } |
| | | else |
| | | { |
| | | if (agv_task.agv_remark != respone.Msg) |
| | | agv_task.agv_remark = respone.Msg; |
| | | agvtaskRepository.Update(agv_task, true); |
| | | WriteWMSLog.LogAdd(agv_task.agv_tasknum, "失败 ", "AGV", "WMS", postJson, report, "ä¸åAGVä»»å¡", "SendAGVTask", respone.Msg); |
| | | } |
| | | return respone; |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Comm.LogInfo; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Core.EFDbContext; |
| | | using WIDESEA_Entity.ToAGV; |
| | | using WIDESEA_WMS.IRepositories; |
| | | using WIDESEA_WMS.Repositories; |
| | | |
| | | namespace WIDESEA_WMS.Common |
| | | { |
| | | public partial class AGVServer |
| | | { |
| | | /// <summary> |
| | | /// ä¸åèµ·ç¹ä»»å¡ |
| | | /// </summary> |
| | | public static void SendFromaddress() |
| | | { |
| | | try |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); |
| | | RequestFromTask requestFromTask = new RequestFromTask(); |
| | | var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList(); |
| | | foreach (var agv_task in agv_tasks) |
| | | { |
| | | try |
| | | { |
| | | requestFromTask.TASK_NO = agv_task.agv_tasknum; |
| | | requestFromTask.FROM_POSITION = agv_task.agv_fromaddress; |
| | | requestFromTask.Material = agv_task.agv_materielid; |
| | | requestFromTask.Grade = agv_task.agv_grade; |
| | | requestFromTask.Quantity = agv_task.agv_qty; |
| | | requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2; |
| | | requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1; |
| | | #region ç»/æç©ºçä»»å¡éå¤ç |
| | | requestFromTask.StarQuantity = agv_task.StarQuantity; |
| | | requestFromTask.EndQuantity = agv_task.EndQuantity; |
| | | #endregion |
| | | var postJson = JsonConvert.SerializeObject(requestFromTask); |
| | | RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVFromaddTask); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Comm.LogInfo; |
| | | using WIDESEA_Comm; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Core.EFDbContext; |
| | | using WIDESEA_Entity.ToAGV; |
| | | using WIDESEA_WCS.JobsPart.Common; |
| | | using WIDESEA_WMS.IRepositories; |
| | | using WIDESEA_WMS.Repositories; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; |
| | | |
| | | namespace WIDESEA_WMS.Common |
| | | { |
| | | public partial class AGVServer |
| | | { |
| | | /// <summary> |
| | | /// ä¸åç»ç¹ä»»å¡ |
| | | /// </summary> |
| | | public static void SendToaddress() |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | RequestToaddTask requestFromTask = new RequestToaddTask(); |
| | | var agv_tasks = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Complete.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && string.IsNullOrEmpty(x.agv_toaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).ToList(); |
| | | foreach (var agv_task in agv_tasks) |
| | | { |
| | | try |
| | | { |
| | | #region æ¥æ¾æ»¡è¶³æ¡ä»¶ç补空æä»»å¡ |
| | | var task = agvtaskRepository.Find(x => x.agv_taskstate == AGVTaskStateEnum.Queue.ToString() && x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString() && x.agv_Traytype == agv_task.agv_Traytype && string.IsNullOrEmpty(x.agv_fromaddress)).OrderByDescending(x => x.agv_grade).ThenBy(x => x.agv_createtime).FirstOrDefault(); |
| | | if (task != null) |
| | | { |
| | | requestFromTask.TASK_NO = agv_task.agv_tasknum; |
| | | requestFromTask.TO_POSITION = task.agv_toaddress; |
| | | requestFromTask.Material = agv_task.agv_materielid; |
| | | requestFromTask.Grade = agv_task.agv_grade; |
| | | requestFromTask.Quantity = agv_task.agv_qty; |
| | | requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2; |
| | | requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1; |
| | | #region ç»/æç©ºçä»»å¡éå¤ç |
| | | requestFromTask.StarQuantity = agv_task.StarQuantity; |
| | | requestFromTask.EndQuantity = task.EndQuantity; |
| | | #endregion |
| | | var postJson = JsonConvert.SerializeObject(requestFromTask); |
| | | var respone = RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVToaddTask); |
| | | if (respone.Success) |
| | | { |
| | | agv_task.EndQuantity = task.EndQuantity; |
| | | agv_task.agv_toaddress = task.agv_toaddress; |
| | | agvtaskRepository.Update(agv_task, true); |
| | | agvtaskRepository.Delete(task, true); |
| | | } |
| | | else |
| | | throw new Exception(respone.Msg); |
| | | WriteDBLog.Success("æ´æ°èªå¨å空æéåä»»å¡", $"ä»»å¡ç¼å·ï¼{agv_task.agv_tasknum}", "WMS"); |
| | | } |
| | | #endregion |
| | | else |
| | | { |
| | | #region æ¥æ¾æ»¡è¶³ä»»å¡æ¡ä»¶çå°å |
| | | var EmptyStation = EmptyTray.GetEmptyTrayStation(stationinfoRepository, agv_task); |
| | | if (EmptyStation != null) |
| | | { |
| | | //agv_task.agv_taskstate = AGVTaskStateEnum.Create.ToString(); |
| | | //agvtaskRepository.Update(agv_task, true);//æ¥çAGV任塿°æ®æ¯å¦å¨å¦ä¸ä¸ªæ¹æ³å
è¿è¡äºæ°æ®æ´æ° |
| | | |
| | | requestFromTask.TASK_NO = agv_task.agv_tasknum; |
| | | requestFromTask.TO_POSITION = EmptyStation.stationCode; |
| | | requestFromTask.Material = agv_task.agv_materielid; |
| | | requestFromTask.Grade = agv_task.agv_grade; |
| | | requestFromTask.Quantity = agv_task.agv_qty; |
| | | requestFromTask.TrayType = agv_task.agv_Traytype.Contains("Small") ? 1 : 2; |
| | | requestFromTask.TaskType = agv_task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 2 : 1; |
| | | #region ç»/æç©ºçä»»å¡éå¤ç |
| | | requestFromTask.StarQuantity = agv_task.StarQuantity; |
| | | requestFromTask.EndQuantity = EmptyStation.quantity; |
| | | #endregion |
| | | var postJson = JsonConvert.SerializeObject(requestFromTask); |
| | | var respone = RequestAGV(agvtaskRepository, agv_task, postJson, AGVAPIAddress.IPAddress_AGVToaddTask); |
| | | if (respone.Success) |
| | | { |
| | | agv_task.EndQuantity = EmptyStation.quantity; |
| | | agv_task.agv_toaddress = EmptyStation.stationCode; |
| | | agvtaskRepository.Update(agv_task, true); |
| | | EmptyStation.location_state = LocationStateEnum.Busy.ToString(); |
| | | stationinfoRepository.Update(EmptyStation, true); |
| | | } |
| | | else |
| | | throw new Exception(respone.Msg); |
| | | WriteDBLog.Success("æ´æ°èªå¨å空æéåä»»å¡", $"ä»»å¡ç¼å·ï¼{agv_task.agv_tasknum}", "WMS"); |
| | | } |
| | | #endregion |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteDBLog.Error("æ´æ°èªå¨å空æéåä»»å¡", $"ä»»å¡ç¼å·ï¼{agv_task.agv_tasknum}ï¼é误信æ¯ï¼{ex.Message}", "WMS"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace WIDESEA_WMS.Common |
| | | { |
| | | public class AGVAPIAddress |
| | | { |
| | | /// <summary> |
| | | /// 宿´AGVä»»å¡ä¸åå°å |
| | | /// </summary> |
| | | public const string IPAddress_AGVTask = "http://192.168.12.204:5000/api/TaskCreat/CreatTask"; |
| | | /// <summary> |
| | | /// AGVèµ·ç¹ä»»å¡ä¸åå°å |
| | | /// </summary> |
| | | public const string IPAddress_AGVFromaddTask = "http://192.168.12.204:5000/api/TaskCreat/CreatGetPalletTask"; |
| | | /// <summary> |
| | | /// AGVç»ç¹ä»»å¡ä¸åå°å |
| | | /// </summary> |
| | | public const string IPAddress_AGVToaddTask = "http://192.168.12.204:5000/api/TaskCreat/CreatPutPalletTask"; |
| | | } |
| | | } |
| | |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | var station = stationinfoRepository.Find(x => x.stationCode == StationCode).FirstOrDefault(); |
| | | if (station.area == "10" || station.area == "11") |
| | | { |
| | | OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column < station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); |
| | | } |
| | | else |
| | | { |
| | | OK = stationinfoRepository.Find(x => x.area == station.area && x.line == station.line && x.column > station.column && x.location_state != LocationStateEnum.Empty.ToString()).Any(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥æ¾å½åè¡å¯å
¥åºç©ºè´§ä½ |
| | | /// </summary> |
| | | /// <param name="EmptyStation"></param> |
| | | /// <param name="stationinfoRepository"></param> |
| | | /// <returns></returns> |
| | | public static dt_stationinfo Station(dt_stationinfo EmptyStation, Idt_stationinfoRepository stationinfoRepository) |
| | | { |
| | | dt_stationinfo stationinfo = null; |
| | |
| | | |
| | | stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.quantity > 0 && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); |
| | | if (stationinfo != null) |
| | | { |
| | | if (stationinfo.quantity < 5) return stationinfo; |
| | | else |
| | | |
| | | stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); |
| | | } |
| | | else |
| | | { |
| | | stationinfo = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.column).FirstOrDefault(); |
| | | } |
| | | //if (stationinfo == null) |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | return stationinfo; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空æå¯å
¥åºè´§ä½ |
| | | /// </summary> |
| | | /// <param name="area"></param> |
| | | /// <returns></returns> |
| | | public static dt_stationinfo EmptyPalletStation1(string area) |
| | | { |
| | | dt_stationinfo stationinfo = null; |
| | | try |
| | | { |
| | | VOLContext Context = new VOLContext(); |
| | | Idt_agvtaskRepository agvtaskService = new dt_agvtaskRepository(Context); |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | |
| | | #region æ¥æ¾ABåºå¯å
¥ç©ºæç©ºè´§ä½ |
| | | if (area == "11" && stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) |
| | | { |
| | | #region MyRegion |
| | | var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.area).ThenByDescending(x => x.line).ThenByDescending(x => x.column).FirstOrDefault(); |
| | | #endregion |
| | | |
| | | #region æ¥æ¾åºåº2ååºåº3ç空æè´§ä½ |
| | | //var EmptyStation = stationinfoRepository.Find(x => x.quantity > 0 && (x.area == "2" || x.area == "3") |
| | | // && x.tray_status == TrayStateEnum.EmptyTray.ToString() && x.enable).OrderByDescending(x => x.lastUpdateTime).FirstOrDefault(); |
| | | |
| | | if (EmptyStation != null) |
| | | { |
| | | stationinfo = Station(EmptyStation, stationinfoRepository); |
| | | if (stationinfo != null) |
| | | if (!QueueStation(stationinfo.stationCode)) return stationinfo; |
| | | |
| | | EmptyStation = stationinfoRepository.Find(x => x.area == EmptyStation.area && x.line == EmptyStation.line && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); |
| | | if (EmptyStation.quantity != 5) return null; |
| | | } |
| | | #endregion |
| | | |
| | | #region æªæ¾å°ç©ºæè´§ä½æå½åè¡å·²æ»¡,å¯»æ¾æ°çä¸è¡ |
| | | stationinfo = stationinfoRepository.Find(x => x.column == 2 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); |
| | | if (stationinfo == null) |
| | | stationinfo = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.line).FirstOrDefault(); |
| | | #endregion |
| | | } |
| | | #endregion |
| | | |
| | | #region æ¥æ¾ç©ºæåºåº |
| | | else |
| | | { |
| | | if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any()) return stationinfo; |
| | | stationinfo = stationinfoRepository.Find(x => x.area == area && x.quantity > 0 && x.enable).OrderBy(x => x.column).FirstOrDefault(); |
| | | if (stationinfo != null) |
| | | if (!QueueStation(stationinfo.stationCode) && stationinfo.quantity < 5) return stationinfo; |
| | | stationinfo = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderByDescending(x => x.column).FirstOrDefault(); |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region æ¥çå½å空货ä½åæ¯å¦å卿æ |
| | | if (stationinfo != null) |
| | | if (GetStation.QueueStation(stationinfo.stationCode)) stationinfo = null; |
| | | #endregion |
| | | |
| | | #region 夿å½åè´§ä½æ¯å¦åå¨ä»»å¡ |
| | | if (stationinfo != null) |
| | | if (agvtaskService.Find(x => x.agv_toaddress == stationinfo.stationCode).Any()) stationinfo = null; |
| | | #endregion |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw; |
| | | } |
| | | return stationinfo; |
| | | } |
| | |
| | | Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); |
| | | |
| | | #region æ¥æ¾ç©ºæçåºåº |
| | | //if (stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Busy.ToString()).Any() && area != "10") |
| | | if (stationinfoRepository.Find(x => x.stationCode == "A01001001" && x.quantity == 5 && x.location_state == LocationStateEnum.Stroge.ToString()).Any()) |
| | | { |
| | | var EmptyStation = stationinfoRepository.Find(x => x.stationCode == "C01005002" && x.location_state == LocationStateEnum.Empty.ToString()).FirstOrDefault(); |
| | |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// è·åå¯å
¥ç©ºæè´§ä½ |
| | | /// </summary> |
| | | public static dt_stationinfo GetEmptyTrayStation(Idt_stationinfoRepository stationinfoRepository,dt_agvtask agv_task) |
| | | { |
| | | dt_stationinfo EmptyStation = null; |
| | | #region æ£æµä¸æç空æå ç |
| | | if (agv_task.agv_fromaddress.Contains("S")) |
| | | { |
| | | var EmptyStations = stationinfoRepository.Find(x => x.stationCode.Contains("DD") && x.quantity < 5 && x.enable).ToList(); |
| | | EmptyStation = EmptyStations.Where(x => x.tray_type == agv_task.agv_Traytype && x.quantity < 5 && x.location_state == LocationStateEnum.Stroge.ToString()).FirstOrDefault(); |
| | | if (EmptyStation == null) |
| | | EmptyStation = EmptyStations.Where(x => x.location_state == LocationStateEnum.Empty.ToString() && x.quantity == 0).FirstOrDefault(); |
| | | if (EmptyStation == null) |
| | | { |
| | | var EmptyD = EmptyStations.Where(x => x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity > 0).OrderByDescending(x => x.quantity).FirstOrDefault(); |
| | | if (EmptyD != null) CreateEmptyTrayIn(stationinfoRepository, EmptyD); |
| | | } |
| | | } |
| | | #endregion |
| | | else |
| | | { |
| | | EmptyStation = GetStation.EmptyPalletStation1(agv_task.agv_Traytype == "SmallTray" ? "11" : "10"); |
| | | } |
| | | return EmptyStation; |
| | | } |
| | | /// <summary> |
| | | /// å建空æå çå
¥åºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="stationinfoRepository"></param> |
| | |
| | | { |
| | | if (agvtaskRepository.Find(x => x.agv_fromaddress == EmptyStation.stationCode || x.agv_toaddress == EmptyStation.stationCode).Any()) return; |
| | | var area = EmptyStation.tray_type == "SmallTray" ? "11" : "10"; |
| | | var toEmptyStation = GetStation.EmptyPalletStation(area); |
| | | var toEmptyStation = GetStation.EmptyPalletStation1(area); |
| | | if (toEmptyStation != null) |
| | | { |
| | | #region åä¸ä¸ªç©ºæä½åªè½åæ¶çæä¸ä¸ªç©ºæä»»å¡ |
| | |
| | | if (station2 == null) return content.Error("请è¾å
¥æ£ç¡®çèµ·ç¹å°åï¼"); |
| | | if (!station1.tray_type.Contains("Small") && station2.area != "4") |
| | | throw new Exception($"大æçåªè½åæ¾å¨åºåº4ï¼"); |
| | | if (station1.tray_type.Contains("Small") && station2.area != "3" && station2.area != "2") |
| | | throw new Exception($"å°æçåªè½åæ¾å¨åºåº2/åºåº3ï¼"); |
| | | if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(from_address) || x.agv_toaddress.Contains(from_address)).Any()) |
| | | throw new Exception($"èµ·ç¹{from_address}å·²åå¨ä»»å¡ï¼"); |
| | | if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(to_address) || x.agv_toaddress.Contains(to_address)).Any()) |
| | |
| | | if (string.IsNullOrEmpty(station1.stationType)) |
| | | throw new Exception($"èµ·ç¹{from_address}æªç»å®ç©æç±»åï¼"); |
| | | |
| | | if (station2.area == "1") |
| | | { |
| | | if (stationinfoRepository.Find(x => x.area == station2.area && x.column == station2.column && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any()) |
| | | throw new Exception($"ç»ç¹{to_address}åååå¨ä¸èµ·ç¹ç©æç±»åä¸å¹é
ï¼"); |
| | | } |
| | | else |
| | | { |
| | | if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any()) |
| | | if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.enable && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any()) |
| | | throw new Exception($"ç»ç¹{to_address}åè¡åå¨ä¸èµ·ç¹ç©æç±»åä¸å¹é
ï¼"); |
| | | } |
| | | var inventory = inventoryRepository.Find(x => x.stationCode == station1.stationCode).FirstOrDefault(); |
| | | if (inventory == null) throw new Exception($"èµ·ç¹{from_address}æªæ¾å°åºåä¿¡æ¯ï¼"); |
| | | |
| | |
| | | station2.location_state = LocationStateEnum.InBusy.ToString(); |
| | | station2.heatNumber = station1.heatNumber; |
| | | station2.Number = station1.Number; |
| | | station2.billetID = station1.billetID; |
| | | station2.stationType = station1.stationType; |
| | | stationinfoRepository.Update(station2, true); |
| | | content.OK(); |
| | |
| | | { |
| | | AGVServer.UpdateEmptyPalletTask(); |
| | | AGVServer.SendAgvTask(); |
| | | AGVServer.SendFromaddress(); |
| | | AGVServer.SendToaddress(); |
| | | } |
| | | } |
| | | } |
| | |
| | | "Connection": { |
| | | "DBType": "MsSql", //MySql/MsSql/PgSql //æ°æ®åºç±»åï¼å¦æä½¿ç¨çæ¯sqlserveræ¤å¤åºè®¾ç½®ä¸ºMsSql |
| | | //sqlserverè¿æ¥å符串 |
| | | "DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", |
| | | "DbConnectionString": "Data Source=192.168.12.101;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;", |
| | | //"DbConnectionString": "Data Source=.;Initial Catalog=WIDESEA_DB;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;Connect Timeout=500;", |
| | | |
| | | //mysqlè¿æ¥å符串(å级EFCore3.1å°æ¶å·²å°mysqlè¿æ¥å符串修æ¹,2019-12-20) |
| | | // "DbConnectionString": " Data Source=127.0.0.1;Database=netcoredev;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;", |