/* *所有关于Dt_agvtask类的业务代码应在此处编写 *可使用repository.调用常用方法,获取EF/Dapper等信息 *如果需要事务请使用repository.DbContextBeginTransaction *也可使用DBServerProvider.手动获取数据库相关信息 *用户信息、权限、角色等使用UserContext.Current操作 *Dt_agvtaskService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter */ using System; using System.Collections.Generic; using System.Linq; using WIDESEA_Common; using WIDESEA_Common.DBHelper; using WIDESEA_Common.Tools; using WIDESEA_Core.EFDbContext; using WIDESEA_Core.ManageUser; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; namespace WIDESEA_Services.Services { public partial class dt_agvtaskService { FreeDB freeDB = new FreeDB(); /// /// 取消任务 /// /// /// /// public override WebResponseContent Del(object[] keys, bool delList = true) { WebResponseContent content = new WebResponseContent(); try { var task = dt_agvtaskRepository.Instance .Find(t => t.agv_tasknum == keys[0].ToString()) .FirstOrDefault(); VOLContext Context = new VOLContext(); Ibase_ware_locationRepository locationRepository = new base_ware_locationRepository(Context); Idt_stationinfoRepository stationinfoRepository=new dt_stationinfoRepository(Context); if (task != null) { base_ware_location loc_from = locationRepository.FindFirst(t => t.upper_code == task.agv_fromaddress); base_ware_location loc_to = locationRepository.FindFirst(t => t.upper_code == task.agv_toaddress); if (loc_from != null && loc_to != null) { if (loc_to.upper_code.Contains("GFHCJ")) { if (loc_to.upper_code.Contains("ZJ-GFHCJ10-")) { //string NUM = loc_to.upper_code.Remove(11) + "4"; //base_ware_location loc_gf = locationRepository.FindFirst(t => t.upper_code == NUM); //if (loc_gf != null) //{ loc_to.logic_col = 0; loc_to.task = 2; freeDB.Update(loc_to).UpdateColumns(t => new { t.location_state, t.logic_col, t.task }).ExecuteAffrows(); } else { //string NUM = loc_to.upper_code.Remove(10) + "4"; //base_ware_location loc_gf = locationRepository.FindFirst(t => t.upper_code == NUM); //if (loc_gf != null) { dt_agvtask Agvtask = dt_agvtaskRepository.Instance.FindFirst(d => d.agv_tasknum != task.agv_tasknum && d.agv_toaddress.Contains(loc_to.upper_code)); if (Agvtask == null) { loc_to.logic_col = 0; loc_to.task = 2; int A = freeDB.Update(loc_from).UpdateColumns(t => new { t.logic_col, t.task }).ExecuteAffrows(); } } } } else if (loc_from != null && loc_to == null) { if (task.agv_toaddress.Contains("GFHCJ")) { string NUM = ""; string upcode = ""; if (task.agv_toaddress.Contains("ZJ-GFHCJ10-")) { NUM = task.agv_toaddress.Remove(11); } else { NUM = task.agv_toaddress.Remove(10); } if (NUM != "") { upcode = NUM + "4"; } base_ware_location loc_gf = locationRepository.FindFirst(t => t.upper_code == upcode); if (loc_gf != null) { loc_gf.logic_col = 0; loc_gf.task = 2; freeDB.Update(loc_gf).UpdateColumns(t => new { t.logic_col, t.task }).ExecuteAffrows(); } AddHtyTask(task, "手动取消"); return content.OK($"任务{keys[0]},取消成功"); } } if (loc_from != null) { loc_from.logic_col = 0; loc_from.task = 2; //loc_from.light_color = "0"; int a = freeDB.Update(loc_from).UpdateColumns(t => new { t.logic_col, t.task }).ExecuteAffrows(); } if (loc_to != null) { loc_to.logic_col = 0; loc_to.task = 2; int a = freeDB.Update(loc_to).UpdateColumns(t => new { t.logic_col, t.task }).ExecuteAffrows(); } //一二楼铝壳缓存架任务取消 dt_stationinfo Stationinfo_from = stationinfoRepository.FindFirst(d => d.stationCode== task.agv_fromaddress); dt_stationinfo Stationinfo_to = stationinfoRepository.FindFirst(d => d.stationCode == task.agv_toaddress); if (Stationinfo_from != null) { Stationinfo_from.task = false; //loc_from.light_color = "0"; int a = freeDB.Update(Stationinfo_from).UpdateColumns(t => new { t.task }).ExecuteAffrows(); } if (Stationinfo_to != null) { Stationinfo_to.task = false; int a = freeDB.Update(Stationinfo_to).UpdateColumns(t => new { t.task }).ExecuteAffrows(); } AddHtyTask(task, "手动取消"); content.OK($"任务{keys[0]},取消成功"); //} } else { content.Error($"未找到任务信息"); } //} //else //{ // task.agv_taskstate = AGVTaskStateEnum.WaitCancel.ToString(); // freeDB.Update(task).UpdateColumns(t => t.agv_taskstate).ExecuteAffrows(); //} //else //{ // throw new Exception($"任务{keys[0]},已不存在"); //} } catch (Exception ex) { //if (ex.Message.Contains("成功")) //{ // content.OK(ex.Message); //} //else //{ // content.Error(ex.Message); //} } return content; } private void AddHtyTask(dt_agvtask task, string agv_taskstate) { freeDB.Add(new dt_agvtask_hty() { hty_pkid = Guid.NewGuid(), agv_id = Guid.Empty, 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 = DateTime.Now, agv_taskstate = agv_taskstate, agv_tasktype = task.agv_tasktype, agv_fromaddress = task.agv_fromaddress, agv_toaddress = task.agv_toaddress, agv_operatetype = string.Empty, agv_compeletor = "wcs", agv_completedate = DateTime.Now, agv_grade = task.agv_grade, agv_userid = UserContext.Current.UserName, agv_barcode = task.agv_barcode, agv_code = task.agv_code, agv_worktype = task.agv_worktype }); int a = freeDB.Remove(task); } /// /// 手动任务完成 /// /// public WebResponseContent FinishTask(string agv_tasknum) { VOLContext Context = new VOLContext(); Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context); List base_Ware_Locations_zj = locRepository.Find(t => t.upper_code.Contains("ZJ-BC") || t.upper_code.Contains("ZJ-TB")).OrderBy(t => t.order_num).ToList(); WebResponseContent content = new WebResponseContent(); try { var task = dt_agvtaskRepository.Instance .Find(t => t.agv_tasknum == agv_tasknum) .FirstOrDefault(); if (task != null) { AddHtyTask(task, "手动完成"); //更新最后操作时间 FreeDB.DB.Update() .Set(t => t.lastUpdateTime, DateTime.Now) .Where(t => t.stationCode == task.agv_fromaddress || t.stationCode == task.agv_toaddress) .ExecuteAffrows(); } else { throw new Exception($"任务{agv_tasknum},已不存在"); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 手动下发任务 /// /// public WebResponseContent sendTask(string fromaddress, string toaddress) { WebResponseContent content = new WebResponseContent(); FreeDB freeDB = new FreeDB(); try { if (fromaddress == null || toaddress == null) { content.Message = "数据不完整!"; content.Status = false; throw new Exception(content.Message); } var from_location = freeDB.Select().Where(x => x.upper_code == fromaddress); var to_location = freeDB.Select().Where(x => x.upper_code == toaddress); //var from_location = base_ware_locationRepository.Instance.FindFirst(x => x.upper_code == fromaddress); //var to_location = base_ware_locationRepository.Instance.FindFirst(x => x.upper_code == toaddress); if (from_location == null) { content.Message = "起点地址不存在!"; content.Status = false; throw new Exception(content.Message); } if (to_location == null) { content.Message = "终点地址不存在!"; content.Status = false; throw new Exception(content.Message); } //if ((!fromaddress.Contains("ZJ-JKHCJ") && !fromaddress.Contains("ZJ-QJHCJ"))) //{ // content.Message = "起始货位不允许手动下发"; // content.Status = false; // throw new Exception(content.Message); //} //if ((!toaddress.Contains("ZJ-JKHCJ") && !toaddress.Contains("ZJ-QJHCJ"))) //{ // content.Message = "目的货位不允许手动下发"; // content.Status = false; // throw new Exception(content.Message); //} //判断首尾地址是否存在执行中任务 var task_to = dt_agvtaskRepository.Instance .Find(t => t.agv_toaddress == toaddress || t.agv_fromaddress == toaddress) .FirstOrDefault(); var task_from = dt_agvtaskRepository.Instance .Find(t => t.agv_fromaddress == fromaddress || t.agv_toaddress == fromaddress) .FirstOrDefault(); // var location_to=base_ware_locationRepository.Instance.Find(t=>t) //判断路由合法性 //var rout = base_routing_tableRepository.Instance.Find(t => t.route_began == fromaddress && t.route_end == toaddress).FirstOrDefault(); if (task_to == null && task_from == null)//&& rout != null) { dt_agvtask agvtask = new dt_agvtask(); agvtask.agv_id = Guid.NewGuid(); agvtask.agv_fromaddress = fromaddress; agvtask.agv_toaddress = toaddress; agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo(); agvtask.agv_code = "组装AGV调度"; agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString(); agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString(); agvtask.agv_worktype = 2;//工作类型 agvtask.agv_materielid = "A23"; agvtask.agv_qty = 1; agvtask.agv_createtime = DateTime.Now; agvtask.agv_grade = 0;//任务优先级 agvtask.agv_userid = UserContext.Current.UserName; agvtask.agv_remark = "手动生成"; freeDB.Add(agvtask); content.Status = true; content.Message = "任务创建成功,正在通知AGV调度中心"; } else { if (task_from != null) { content.Status = false; content.Message += "起始地址正在执行任务! "; } if (task_to != null) { content.Status = false; content.Message += "目的地址正在执行任务! "; } //if (rout == null) //{ // content.Status = false; // content.Message += "非法的路由规则! "; //} throw new Exception(content.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } public List PDATask(List agvtask) { WebResponseContent content = new WebResponseContent(); VOLContext Context = new VOLContext(); Ibase_pda_locationRepository pdaloctionRepository = new base_pda_locationRepository(Context); Idt_containerRepository containerRepository = new dt_containerRepository(Context); IVV_ContainerInfoRepository VV_ContainerInfoRepository = new VV_ContainerInfoRepository(Context); Idt_materielinfoRepository materielinfoRepository = new dt_materielinfoRepository(Context); Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context); Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context); Ibase_ware_locationRepository ibase_Ware_Location = new base_ware_locationRepository(Context); try { List agvtasks = agvRepository.Find(d => d.agv_remark.Contains("PDA")).ToList(); return agvtasks; } catch (Exception ex) { throw; } } } }