using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Comm; using WIDESEA_Common; using WIDESEA_Core.EFDbContext; using WIDESEA_Core.FreeDB; using WIDESEA_Entity.DomainModels; using WIDESEA_WMS.IRepositories; using WIDESEA_WMS.Repositories; using static FreeSql.Internal.GlobalFilter; using static System.Collections.Specialized.BitVector32; namespace WIDESEA_WMS.Common { public class HandleTask { public static FreeDB freeDB = new FreeDB(); /// /// 添加历史任务 /// /// 任务 /// 操作类型 public static void AddHtyTask(dt_agvtask task, string operatetype = "Complete", string compeletor = "AGV") { VOLContext context = new VOLContext(); Idt_agvtask_htyRepository htyRepository = new dt_agvtask_htyRepository(context); Idt_agvtaskRepository repository = new dt_agvtaskRepository(context); Idt_mes_headRepository idt_Mes_Head = new dt_mes_headRepository(context); Idt_mes_detailRepository idt_Mes_Detail=new dt_mes_detailRepository(context); if (task.agv_worktype == 17) { string[] bindSNs = task.bindSN.Split(","); foreach (var item in bindSNs) { var mes_detail = idt_Mes_Detail.Find(x => x.SN == item).FirstOrDefault(); var mes_head= idt_Mes_Head.Find(x=>x.jobID==mes_detail.jobID).FirstOrDefault(); if(mes_head != null) { mes_head.agv_finishNum = mes_head.agv_finishNum == null ? task.agv_qty : mes_head.agv_finishNum + task.agv_qty; idt_Mes_Head.Update(mes_head, x => new { x.agv_finishNum }, true); break; } } } dt_agvtask_hty agvtask_Hty = new dt_agvtask_hty() { hty_pkid = Guid.NewGuid(), agv_id = task.agv_id, agv_tasknum = task.agv_tasknum, agv_materielid = task.agv_materielid, agv_qty = task.agv_qty, agv_createtime = task.agv_createtime, agv_realesstime = task.agv_realesstime, agv_executingBeginTime = task.agv_executingBeginTime, agv_executingEndTime = task.agv_executingEndTime, agv_completeBeginTime = task.agv_completeBeginTime, agv_finishedtime = task.agv_finishedtime, agv_taskstate = task.agv_taskstate, agv_tasktype = task.agv_tasktype, agv_fromaddress = task.agv_fromaddress, agv_toaddress = task.agv_toaddress, agv_operatetype = operatetype, agv_compeletor = compeletor, agv_completedate = DateTime.Now, agv_grade = task.agv_grade, agv_userid = task.agv_userid, agv_Traytype = task.agv_Traytype, agv_TrayStatus = task.agv_TrayStatus, agv_worktype = task.agv_worktype, agv_remark = task.agv_remark, bindSN = task.bindSN, jobID = task.jobID, agv_materbarcode = task.agv_materbarcode, }; htyRepository.Add(agvtask_Hty, true); repository.Delete(task, true); } /// /// 库存处理 /// /// public static void Updateinventory(dt_agvtask task) { VOLContext context = new VOLContext(); Idt_inventoryRepository inventoryRepository = new dt_inventoryRepository(context); if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Carry.ToString()) { var inventorys = inventoryRepository.Find(x => x.stationCode == task.agv_fromaddress).ToList(); foreach (var inventory in inventorys) { inventory.stationCode = task.agv_toaddress; inventoryRepository.Update(inventory, true); } } else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()) { string[] bindSNs = task.bindSN.Split(","); int count = 0; foreach (var bindSN in bindSNs) { //List inventorys = new List(); var inventory = freeDB.Select().Where(x => x.SN == bindSN).First(); //inventorys.Add(inventory); count = freeDB.Remove(inventory); if (count < 1) throw new Exception("库存清除失败!SN号:" + bindSN); } } else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString()) { string[] bindSNs = task.bindSN.Split(","); int count = 0; List inventorys = new List(); foreach (string bindSN in bindSNs) { var mes_Work = freeDB.Select().Where(x => x.SN == bindSN && x.processCode == "17").OrderByDescending(x => x.CreateTime).First(); if (mes_Work == null) throw new Exception("未找到工单信息!"); var station = freeDB.Select().Where(x => x.stationCode == task.agv_toaddress).First(); dt_inventory inventory = new dt_inventory() { SN = bindSN, Name = mes_Work.productName, FigureNumber = mes_Work.drawingNo, materialCode = task.agv_materbarcode, HeatNumber = mes_Work.heatID, drawingNoVer = mes_Work.drawingNoVer, BilletNumber = mes_Work.billetID, OnlineTime = task.agv_finishedtime, Operator = "admin", stationCode = task.agv_toaddress, area = station.area, jobID = mes_Work.jobID, workOrder = mes_Work.workOrder, ID = Guid.NewGuid() }; inventorys.Add(inventory); } count = freeDB.AddRange(inventorys); if (count < 1) throw new Exception("库存添加失败!库位号:" + task.agv_toaddress); } #region MyRegion //var Materiel = QueryData.QueryMateriel(task.agv_materielid); //List inventorys = new List(); //foreach (string bindSN in bindSNs) //{ // dt_inventory inventory = new dt_inventory() // { // SN = bindSN,//待完善 // Name = "", // FigureNumber = "", // //HearthNumber = "", // HeatNumber = "", // //BilletNumber=, // OnlineTime = task.agv_finishedtime, // Operator = "admin", // stationCode = task.agv_toaddress, // area = "", // jobID = "", // }; // inventorys.Add(inventory); //} //if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString()) // freeDB.AddRange(inventorys); //else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceOutbound.ToString()) // freeDB.Remove(inventorys); #endregion //} } /// /// 自动更新缓存架状态 /// /// public static void AutoUpdateHCJState(dt_agvtask task) { VOLContext context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); if (task.agv_taskstate == AGVTaskStateEnum.Complete1.ToString()) { var station2 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_toaddress); if (station2 == null) throw new Exception("未找到终点地址!"); ////空托任务需修改逻辑 if (station2.stationCode.Contains("X")) station2.quantity = 0;// task.agv_tasktype.Contains("TaskType_EmptyPallet") ? 0 : task.agv_qty; //task.agv_qty; else if (station2.area == "10" || station2.area == "11" || (station2.stationCode.Contains("C") && task.agv_tasktype == "TaskType_EmptyPallet") || station2.stationCode.Contains("DD")) //入库空托任务 station2.quantity = station2.quantity + task.agv_qty; else station2.quantity = task.agv_qty; station2.bindSN = task.bindSN; station2.location_state = LocationStateEnum.Stroge.ToString(); station2.Number = task.jobID; //station2.heatNumber = station1.heatNumber; station2.stationType = task.agv_materielid; station2.tray_status = task.agv_TrayStatus;//横放/竖放 station2.tray_type = task.agv_Traytype; station2.lastUpdateTime = DateTime.Now; stationinfoRepository.Update(station2, true); } else if (task.agv_taskstate == AGVTaskStateEnum.Complete.ToString()) { var station1 = stationinfoRepository.FindFirst(t => t.stationCode == task.agv_fromaddress); if (station1 == null) throw new Exception("未找到起点地址!"); #region MyRegion //if (station1.stationCode.Contains("S")) // station1.quantity = 0; //else if (station2.stationCode.Contains("X") || station2.stationCode.Contains("W01001004") || station2.stationCode.Contains("W01001005"))//出库空托任务 //{ // station1.location_state = LocationStateEnum.Stroge.ToString(); // station1.quantity = station1.quantity - 1; //} //else // station1.quantity = 0; #endregion if (station1.stationCode.Contains("DD"))//叠盘库位 { station1.quantity = station1.quantity - task.agv_qty; station1.location_state = LocationStateEnum.Stroge.ToString(); } else if (station1.area == "10" || station1.area == "11" || ((station1.stationCode.Contains("C") || station1.stationCode.Contains("B")) && task.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString())) //出库空托任务 { station1.location_state = LocationStateEnum.Stroge.ToString(); station1.quantity = station1.quantity - 1; } else station1.quantity = 0; station1.bindSN = string.Empty; //station1.location_state = station1.quantity == 0 ? LocationStateEnum.Empty.ToString() : LocationStateEnum.Stroge.ToString(); if (station1.quantity == 0) { station1.location_state = LocationStateEnum.Empty.ToString(); station1.Number = string.Empty; station1.billetID = string.Empty; station1.heatNumber = string.Empty; station1.stationType = string.Empty; station1.tray_status = string.Empty; station1.remark = string.Empty; //if (!station1.stationCode.Contains("X") && !station1.stationCode.Contains("S") && !station1.stationCode.Contains("W01001004") && !station1.stationCode.Contains("W01001005")) // station1.tray_type = string.Empty; } if (!station1.stationCode.Contains("DD")) station1.lastUpdateTime = DateTime.Now; stationinfoRepository.Update(station1, true); } } } }