コード例 #1
0
        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);
        }
コード例 #2
0
 public string AGVTaskNode([FromBody] TaskNodeModel taskNodeModel)
 {
     return(JsonHelper.Instance.Serialize(_app.AGVTaskNodeApp(taskNodeModel)));
 }
コード例 #3
0
ファイル: AGVInfoApp.cs プロジェクト: Edchen29/SanyMES-master
        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);
            }
        }