public TableData SendAGVTaskApp(List <MaterialDistributeTaskHeader> mhlist, string url) { TableData tab = new TableData { code = 200 }; int hcount = 0; int listcount = 0; string sErrorMsg = ""; listcount = mhlist.Count; dynamic temp = new ExpandoObject(); try { HttpHelper httpHelper = new HttpHelper(url); //if (string.IsNullOrEmpty(httpHelper.GetCookie("Token", cookies))) if (cookies.Count == 0) { string loginjson = "{\"username\":\"System\",\"password\":\"Aa123456\"}"; string result = httpHelper.HttpPostLogin("http://localhost:23512/api/Login/Login", loginjson, cookies); //登录接口有返回TOKEN码,直接把token写入cookie JObject jresult = JObject.Parse(result); if (jresult["code"].ToString() == "200") { Cookie cookie1 = new Cookie("Token", jresult["token"].ToString()); cookie1.Expires = DateTime.Now.AddDays(100); cookie1.Domain = "localhost"; cookies.Add(cookie1); } //----适用于直接从登录接口回应头中解析读取Token码或解析loginjson = "{\"username\":\"System\",\"password\":\"Aa123456\"}"直接把账号密码写入cookie进行认证 //JObject jresult = JObject.Parse(result); //if (!string.IsNullOrEmpty(result)) //{ // foreach (string s in result.Split(';')) // { // string name = s.Split('=')[0].Trim(); // string value = s.Contains("=") ? s.Split('=')[1].Trim() : ""; // Cookie cookie1 = new Cookie(name, value); // cookie1.Domain = "localhost"; // cookies.Add(cookie1); // } //} //--------end------- } foreach (MaterialDistributeTaskHeader mdth in mhlist) { if (mdth.Status == 1) { //temp.postmodel = new List<dynamic>(); //temp.postmodel.Add(new //{ // OrderCode = mdth.OrderCode, // SerialNumber = "", // CarNo = "", // ContainerCode = "", // Status = "", //}); TaskNodeModel tm = new TaskNodeModel(); tm.TaskNo = mdth.TaskNo; var pdata = JsonHelper.Instance.Serialize(tm); var responsedata = httpHelper.HttpPost(url, pdata, cookies); // var responsedata = httpHelper.Post(tm, url); JObject jo = JObject.Parse(responsedata); JObject jr = JObject.Parse(jo["Result"].ToString()); if (jo["Code"].ToString() == "200") { //获取上料工位的缓存位置是否有料框 //string emptyc = _unitWork.Find<Location>(u => u.Code == mdth.LocationCode).Select(a => a.ContainerCode).FirstOrDefault(); MaterialDistributeTaskHeader materialDistributeTaskHeader = _unitWork.Find <MaterialDistributeTaskHeader>(u => u.TaskNo == mdth.TaskNo).FirstOrDefault(); materialDistributeTaskHeader.Status = AGVTaskState.任务下发; //如果缓存位有空料框,任务状态为先拉空料框,否则任务为直接配送物料 //if (string.IsNullOrEmpty(emptyc)) //{ // materialDistributeTaskHeader.Status = 50; //} //else //{ // materialDistributeTaskHeader.Status = 10; //} materialDistributeTaskHeader.CarNo = jr["CarNo"].ToString(); materialDistributeTaskHeader.ContainerCode = jr["ContainerCode"].ToString(); _app.Update(materialDistributeTaskHeader); hcount = hcount + 1; List <MaterialDistributeTaskDetail> materialDistributeTaskDetails = _unitWork.Find <MaterialDistributeTaskDetail>(u => u.MaterialDistributeTaskHeaderId.Equals(materialDistributeTaskHeader.Id)).ToList(); foreach (MaterialDistributeTaskDetail mdtDetail in materialDistributeTaskDetails) { mdtDetail.ContainerCode = jr["ContainerCode"].ToString(); _appd.Update(mdtDetail); } } else { sErrorMsg += "任务号为:" + mdth.TaskNo + "接口下发失败,错误信息:" + jo["Message"].ToString() + "<br>"; tab.msg = sErrorMsg; } } else { sErrorMsg += "任务号为:" + mdth.TaskNo + "接口下发失败,错误信息:此任务状态不在可下发状态!<br>"; tab.msg = sErrorMsg; } } if (listcount == hcount) { tab.code = 200; tab.msg = "任务全部成功下发!"; } else { tab.code = 200; tab.msg = "下发执行完成!部分下发失败的信息如下:<br>" + tab.msg; } } catch (Exception ex) { tab.code = 300; tab.msg += ex.Message; } return(tab); }
public string AGVTaskNode([FromBody] TaskNodeModel taskNodeModel) { return(JsonHelper.Instance.Serialize(_app.AGVTaskNodeApp(taskNodeModel))); }
public Response AGVTaskNodeApp(TaskNodeModel taskNodeModel) { using (var tran = _context.Database.BeginTransaction()) { Response <TaskNodeModel> Response = new Response <TaskNodeModel>(); string sErrorMsg = ""; Location location = null; Container container = null; if (!CheckLogin()) { Response.Code = 500; Response.Status = false; Response.Message = "请先登录!"; return(Response); } try { MaterialDistributeTaskHeader materialDistributeTaskHeader = _unitWork.FindSingle <MaterialDistributeTaskHeader>(u => u.TaskNo.Equals(taskNodeModel.TaskNo)); if (materialDistributeTaskHeader == null) { sErrorMsg += "任务号为:" + taskNodeModel.TaskNo + "不存在,请确认<br>"; Response.Message = sErrorMsg; } else { MaterialCallHeader materialCallHeader = _unitWork.FindSingle <MaterialCallHeader>(u => u.Id.Equals(materialDistributeTaskHeader.MaterialCallId)); List <MaterialCallDetail> materialCallDetail = _unitWork.Find <MaterialCallDetail>(u => u.CallHeaderId.Equals(materialCallHeader.Id)).ToList(); //更新配送状态 if (materialDistributeTaskHeader.Status < AGVTaskState.任务完成) { if (taskNodeModel.Status == AGVTaskState.配送完成 || taskNodeModel.Status == AGVTaskState.放料车完成) { //更新配送任务头表状态为完成 materialDistributeTaskHeader.Status = AGVTaskState.任务完成; //同步更新物料呼叫状态为完成 materialCallHeader.Status = CallStatus.完成; materialCallHeader.UpdateTime = DateTime.Now; materialCallHeader.UpdateBy = "AGVapi"; _unitWork.Update(materialCallHeader); if (materialCallDetail.Count > 0) { foreach (MaterialCallDetail mcdetail in materialCallDetail) { //同步更新物料需求状态 List <MaterialDemand> materialDemands = _unitWork.Find <MaterialDemand>(u => u.OrderCode.Equals(mcdetail.OrderCode) && u.ProductCode == mcdetail.ProductCode).ToList(); foreach (MaterialDemand md in materialDemands) { md.Status = CallStatus.完成; md.UpdateTime = DateTime.Now; md.UpdateBy = "AGVapi"; _unitWork.Update(md); } } } //上料缓存区域 if (_unitWork.IsExist <Location>(u => u.Code == materialDistributeTaskHeader.LocationCode)) { //更新缓存区位置存放的料框编号和状态 location = _unitWork.Find <Location>(u => u.Code == materialDistributeTaskHeader.LocationCode).FirstOrDefault(); location.UpdateTime = DateTime.Now; location.UpdateBy = "AGVapi"; location.ContainerCode = materialDistributeTaskHeader.ContainerCode; location.Status = LocationStatus.货; _unitWork.Update(location); } else { throw new Exception("缓存位置为:" + materialDistributeTaskHeader.LocationCode + "不存在,请先建立!"); } //容器 if (_unitWork.IsExist <Container>(u => u.Code == materialDistributeTaskHeader.ContainerCode)) { container = _unitWork.Find <Container>(u => u.Code == materialDistributeTaskHeader.ContainerCode).FirstOrDefault(); container.UpdateTime = DateTime.Now; container.UpdateBy = "AGVapi"; container.LocationCode = materialDistributeTaskHeader.LocationCode; container.Status = ContainerStatus.; _unitWork.Update(container); } else { throw new Exception("料框为:" + materialDistributeTaskHeader.ContainerCode + "不存在,请先建立!"); } } else if (taskNodeModel.Status == AGVTaskState.回收料框完成 || taskNodeModel.Status == AGVTaskState.取工件完成) { //更新缓存区位置存放的料框编号和状态 materialDistributeTaskHeader.Status = AGVTaskState.任务完成; if (_unitWork.IsExist <Location>(u => u.Code == materialDistributeTaskHeader.LocationCode)) { //更新缓存区位置存放的料框编号和状态 location = _unitWork.Find <Location>(u => u.Code == materialDistributeTaskHeader.LocationCode).FirstOrDefault(); location.UpdateTime = DateTime.Now; location.UpdateBy = "AGVapi"; location.ContainerCode = ""; location.Status = LocationStatus.空仓位; _unitWork.Update(location); } else { throw new Exception("缓存位置为:" + materialDistributeTaskHeader.LocationCode + "不存在,请先建立!"); } //容器 if (_unitWork.IsExist <Container>(u => u.Code == materialDistributeTaskHeader.ContainerCode)) { container = _unitWork.Find <Container>(u => u.Code == materialDistributeTaskHeader.ContainerCode).FirstOrDefault(); container.UpdateTime = DateTime.Now; container.UpdateBy = "AGVapi"; container.LocationCode = ""; container.Status = ContainerStatus.空; _unitWork.Update(container); } else { throw new Exception("料框为:" + materialDistributeTaskHeader.ContainerCode + "不存在,请先建立!"); } } else if (taskNodeModel.Status == AGVTaskState.回收料框开始 || taskNodeModel.Status == AGVTaskState.取工件开始 || taskNodeModel.Status == AGVTaskState.放料车开始) { //更新配送任务头表的小车编号和料框编号 // materialDistributeTaskHeader.Status = AGVTaskState.回收料框开始; materialDistributeTaskHeader.Status = taskNodeModel.Status; if (taskNodeModel.Status == AGVTaskState.放料车开始) { materialDistributeTaskHeader.ContainerCode = taskNodeModel.ContainerCode; } materialDistributeTaskHeader.CarNo = taskNodeModel.CarNo; //同步更新物料呼叫状态 materialCallHeader.Status = CallStatus.执行; materialCallHeader.UpdateTime = DateTime.Now; materialCallHeader.UpdateBy = "AGVapi"; _unitWork.UpdateByTracking(materialCallHeader); } else if (taskNodeModel.Status == AGVTaskState.配送开始) { //更新配送任务头表的小车编号和料框编号 materialDistributeTaskHeader.Status = AGVTaskState.配送开始; materialDistributeTaskHeader.CarNo = taskNodeModel.CarNo; materialDistributeTaskHeader.ContainerCode = taskNodeModel.ContainerCode; List <MaterialDistributeTaskDetail> materialDistributeTaskDetails = _unitWork.Find <MaterialDistributeTaskDetail>(u => u.MaterialDistributeTaskHeaderId.Equals(materialDistributeTaskHeader.Id)).ToList(); //更新配送明细 foreach (MaterialDistributeTaskDetail mdtdetail in materialDistributeTaskDetails) { mdtdetail.ContainerCode = taskNodeModel.ContainerCode; mdtdetail.UpdateTime = DateTime.Now; mdtdetail.UpdateBy = "AGVapi"; _unitWork.Update(mdtdetail); } //同步更新物料呼叫状态为完成 materialCallHeader.Status = CallStatus.执行; materialCallHeader.UpdateTime = DateTime.Now; materialCallHeader.UpdateBy = "AGVapi"; _unitWork.UpdateByTracking(materialCallHeader); foreach (MaterialCallDetail mcdetail in materialCallDetail) { //同步更新物料需求状态 List <MaterialDemand> materialDemands = _unitWork.Find <MaterialDemand>(u => u.OrderCode.Equals(mcdetail.OrderCode) && u.ProductCode == mcdetail.ProductCode).ToList(); foreach (MaterialDemand md in materialDemands) { md.Status = CallStatus.执行; md.UpdateTime = DateTime.Now; md.UpdateBy = "AGVapi"; _unitWork.UpdateByTracking(md); } } } else { materialDistributeTaskHeader.Status = taskNodeModel.Status; } materialDistributeTaskHeader.UpdateTime = DateTime.Now; materialDistributeTaskHeader.UpdateBy = "AGVapi"; _unitWork.Update(materialDistributeTaskHeader); } else { sErrorMsg += "任务号为:" + taskNodeModel.TaskNo + "任务已经结束,无法更新状态<br>"; Response.Message = sErrorMsg; } } tran.Commit(); } catch (Exception ex) { tran.Rollback(); Response.Code = 500; Response.Status = false; Response.Message = (Response.Message == "操作成功" ? "" : Response.Message) + "\r\n" + "TaskNo:" + taskNodeModel.TaskNo + "AGV反馈失败!" + ex.Message; } return(Response); } }