/* *所有关于dt_agvtask类的业务代码应在此处编写 *可使用repository.调用常用方法,获取EF/Dapper等信息 *如果需要事务请使用repository.DbContextBeginTransaction *也可使用DBServerProvider.手动获取数据库相关信息 *用户信息、权限、角色等使用UserContext.Current操作 *dt_agvtaskService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter */ using WIDESEA_Core.BaseProvider; using WIDESEA_Core.Extensions.AutofacManager; using WIDESEA_Entity.DomainModels; using System.Linq; using WIDESEA_Core.Utilities; using System.Linq.Expressions; using WIDESEA_Core.Extensions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Http; using WIDESEA_WMS.IRepositories; using WIDESEA_WMS.Repositories; using WIDESEA_Core.EFDbContext; using static System.Collections.Specialized.BitVector32; using WIDESEA_Comm.TaskNo; using WIDESEA_Common; using WIDESEA_Core.ManageUser; using WIDESEA_Comm.LogInfo; using StackExchange.Redis; using WIDESEA_Comm; using WIDESEA_Entity.DomainModels.Mes; using WIDESEA_WMS.Common; using System.Reflection.Emit; using System.Threading.Tasks; namespace WIDESEA_WMS.Services { public partial class dt_agvtaskService { private readonly IHttpContextAccessor _httpContextAccessor; private readonly Idt_agvtaskRepository _repository;//访问数据库 [ActivatorUtilitiesConstructor] public dt_agvtaskService( Idt_agvtaskRepository dbRepository, IHttpContextAccessor httpContextAccessor ) : base(dbRepository) { _httpContextAccessor = httpContextAccessor; _repository = dbRepository; //多租户会用到这init代码,其他情况可以不用 //base.Init(dbRepository); } public override WebResponseContent Del(object[] keys, bool delList = true) { #region 批量修改货位状态 //VOLContext context = new VOLContext(); //Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); //var fromaddress = repository.Find(x => keys.Contains(x.agv_id)).Select(x => x.agv_fromaddress).ToList(); //var stations = stationinfoRepository.Find(x => fromaddress.Contains(x.stationCode)).ToList(); //foreach (var station in stations) //{ // station.location_state = LocationStateEnum.Stroge.ToString(); // //station.tray_type= TrayTypeEnum.SmallTray.ToString(); // //station.tray_status= TrayStateEnum.StrogeTray.ToString(); //} //stationinfoRepository.UpdateRange(stations, x => new { x.location_state }, true); #endregion VOLContext volContext = new VOLContext(); Idt_agvtask_htyRepository agvtask_HtyRepository=new dt_agvtask_htyRepository(volContext); var agvtasks = repository.Find(x => keys.Contains(x.agv_id)).ToList(); List dt_Agvtask_Hties = new List(); foreach (var task in agvtasks) { 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 = "Del", agv_compeletor = UserContext.Current.UserName, 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, }; dt_Agvtask_Hties.Add(agvtask_Hty); } agvtask_HtyRepository.AddRange(dt_Agvtask_Hties,true); return base.Del(keys, delList); } public WebResponseContent addNgTask(MesRequestTemp requestTemp) { WebResponseContent content = new WebResponseContent(); try { var fromaddress = requestTemp.from_address; VOLContext context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); var station = stationinfoRepository.Find(x => x.stationCode == fromaddress).FirstOrDefault(); if (_repository.Find(x => x.agv_fromaddress == fromaddress || x.agv_toaddress == fromaddress).Any()) throw new Exception($"货位{fromaddress}已存在任务!"); if (station == null) throw new Exception($"未找到货位{fromaddress}!"); if (!station.enable) throw new Exception($"货位{fromaddress}未启用!"); if (station.quantity < 1) throw new Exception($"货位{fromaddress}无车轮!"); var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault(); if (Work == null) throw new Exception($"未找到货位{fromaddress}的机加工工单信息"); dt_agvtask agvtask = new dt_agvtask() { agv_fromaddress = station.stationCode, agv_id = Guid.NewGuid(), agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), agv_grade = 2, agv_createtime = DateTime.Now, agv_taskstate = "Queue", agv_materielid = station.stationType, agv_qty = station.quantity, agv_tasktype = "TaskType_OutsourceInbound", agv_toaddress = "", agv_userid = UserContext.Current.UserName, bindSN = station.bindSN, agv_worktype = Convert.ToInt32(Work.processCode), agv_materbarcode = Work.materialCode, agv_Traytype = station.tray_type, jobID = station.Number, agv_TrayStatus = station.tray_status }; _repository.Add(agvtask, true); station.location_state = LocationStateEnum.InBusy.ToString(); stationinfoRepository.Update(station, true); content.OK(); } catch (Exception ex) { content.Message = ex.Message; } return content; } public override WebResponseContent Update(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); var agv_id = saveModel.MainData["agv_id"].ToString(); var task = _repository.Find(x => x.agv_id.ToString() == agv_id).FirstOrDefault(); if (task.agv_taskstate != AGVTaskStateEnum.Queue.ToString()) return content.Error("当前任务不可更改!"); WriteDBLog.Success($"手动修改任务", new { 数据 = saveModel }, "WMS", UserContext.Current.UserName); return base.Update(saveModel); } #region 添加NG任务 public override WebResponseContent Add(SaveModel saveDataModel) { WebResponseContent content = new WebResponseContent(); try { var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString(); VOLContext context = new VOLContext(); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); var station = stationinfoRepository.Find(x => x.stationCode == fromaddress).FirstOrDefault(); if (_repository.Find(x => x.agv_fromaddress == fromaddress || x.agv_toaddress == fromaddress).Any()) throw new Exception($"货位{fromaddress}已存在任务!"); if (station == null) throw new Exception($"未找到货位{fromaddress}!"); if (!station.enable) throw new Exception($"货位{fromaddress}未启用!"); if (station.quantity < 1) throw new Exception($"货位{fromaddress}无车轮!"); var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault(); if (Work == null) throw new Exception($"未找到货位{fromaddress}的机加工工单信息"); dt_agvtask agvtask = new dt_agvtask() { agv_fromaddress = station.stationCode, agv_id = Guid.NewGuid(), agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), agv_grade = 2, agv_createtime = DateTime.Now, agv_taskstate = "Queue", agv_materielid = station.stationType, agv_qty = station.quantity, agv_tasktype = "TaskType_OutsourceInbound", agv_toaddress = "", agv_userid = UserContext.Current.UserName, bindSN = station.bindSN, agv_worktype = Convert.ToInt32(Work.processCode), agv_materbarcode = Work.materialCode, agv_Traytype = station.tray_type, jobID = station.Number, agv_TrayStatus = station.tray_status }; _repository.Add(agvtask, true); station.location_state = LocationStateEnum.InBusy.ToString(); stationinfoRepository.Update(station, true); content.OK(); } catch (Exception ex) { content.Message = ex.Message; } return content; } #endregion #region 添加任务 /// /// 添加任务 /// /// /// //public override WebResponseContent Add(SaveModel saveDataModel) //{ // WebResponseContent content = new WebResponseContent(); // try // { // VOLContext context = new VOLContext(); // Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context); // var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString(); // var toaddress = saveDataModel.MainData["agv_toaddress"].ToString(); // var tasktype = saveDataModel.MainData["agv_tasktype"].ToString(); // var grade = saveDataModel.MainData["agv_grade"].ToInt(); // var worktype = saveDataModel.MainData["agv_worktype"].ToInt(); // var station1 = stationinfoRepository.FindFirst(x => x.stationCode == fromaddress); // var station2 = stationinfoRepository.FindFirst(x => x.stationCode == toaddress); // if (station1 == null || station2 == null) // throw new Exception($"起点地址{fromaddress}或终点地址{toaddress}不存在!"); // if (string.IsNullOrEmpty(station1.stationType)) // throw new Exception($"起点{fromaddress}未绑定物料类型!"); // var task = _repository.Find(t => t.agv_fromaddress == fromaddress // || t.agv_fromaddress == toaddress // || t.agv_toaddress == fromaddress // || t.agv_toaddress == toaddress // ).Any(); // if (task) // throw new Exception("起始或目的地址,已存在任务中!"); // dt_agvtask agvtask = new dt_agvtask(); // agvtask.agv_id = Guid.NewGuid(); // agvtask.agv_fromaddress = fromaddress; // agvtask.agv_toaddress = toaddress; // agvtask.agv_tasknum = IdenxManager.GetTaskNo("KH-"); // agvtask.agv_TrayStatus = station1.tray_status; // agvtask.agv_Traytype = station1.tray_type; // agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString(); // agvtask.agv_tasktype = tasktype; // agvtask.agv_worktype = worktype;//工作类型 // agvtask.bindSN = station1.bindSN; // agvtask.agv_materielid = station1.stationType;//物料类型 // agvtask.agv_qty = station1.quantity; // agvtask.agv_createtime = DateTime.Now; // agvtask.agv_grade = grade;//任务优先级 // agvtask.agv_userid = UserContext.Current.UserName; // _repository.Add(agvtask, true); // content.OK(); // WriteDBLog.Success($"手动添加任务", new { 数据 = saveDataModel }, "WMS", UserContext.Current.UserName); // } // catch (Exception ex) // { // WriteDBLog.Error($"手动添加任务", new { 数据 = saveDataModel, 异常信息 = ex.Message }, "WMS", UserContext.Current.UserName); // content.Error(ex.Message); // } // return content; //} #endregion } }