/// <summary>
        /// 根据工站的缓存区,找到物料没有耗尽呼叫,找不到就新增呼叫
        /// </summary>
        /// <param name="robot"></param>
        /// <returns></returns>
        public BllResult materialCall(Equipment robot)
        {
            //找到工站对应的缓存位
            var locationResult = AppSession.Dal.GetCommonModelByCondition <Location>($"where srmCode = '{robot.Code}'");

            if (locationResult.Success)
            {
                //找到对应的工站中,材料还未耗尽的呼叫
                var callHeaderResult = AppSession.Dal.GetCommonModelByCondition <MaterialCallHeader>($"needStation = '{robot.Code}' and status <> '{MaterialCallStatus.配送使用完毕.GetIndexString()}'");
                foreach (var item in locationResult.Data)
                {
                    //判断是否呼叫过
                    if (callHeaderResult.Success)
                    {
                        if (callHeaderResult.Data.Exists(t => t.LocationCode == item.Code))
                        {
                            continue;
                        }
                    }
                    //新增一条呼叫
                    MaterialCallHeader materialCallHeader = new MaterialCallHeader();

                    var result = AppSession.Dal.InsertCommonModel <MaterialCallHeader>(materialCallHeader);
                    if (result.Success == false)
                    {
                        return(BllResultFactory.Error(result.Msg));
                    }
                }
            }
            return(BllResultFactory.Sucess());
        }
Esempio n. 2
0
        public TableData Query(MaterialCallHeader entity)
        {
            var result = new TableData();
            var data   = _app.Find(EntityToExpression <MaterialCallHeader> .GetExpressions(entity));

            GetData(data, result);
            result.count = data.Count();

            return(result);
        }
 public string Upd(MaterialCallHeader Table_entity)
 {
     try
     {
         _app.Upd(Table_entity);
     }
     catch (Exception ex)
     {
         Result.Status  = false;
         Result.Message = ex.Message;
     }
     return(JsonHelper.Instance.Serialize(Result));
 }
        public string GetTemplate()
        {
            var result = new TableData();
            List <MaterialCallHeader> listMaterialCall = new List <MaterialCallHeader>();
            MaterialCallHeader        entity           = _app.FindSingle(u => u.Id > 0);

            if (entity != null)
            {
                listMaterialCall.Add(entity);
            }
            else
            {
                listMaterialCall.Add(new MaterialCallHeader());
            }

            result.data  = listMaterialCall;
            result.count = listMaterialCall.Count;

            return(JsonHelper.Instance.Serialize(result));
        }
Esempio n. 5
0
        public Response ImportIn(IFormFile excelfile)
        {
            Response result = new Infrastructure.Response();
            List <MaterialCallHeader> exp = imp.ConvertToModel <MaterialCallHeader>(excelfile);
            string sErrorMsg = "";

            for (int i = 0; i < exp.Count; i++)
            {
                try
                {
                    MaterialCallHeader e = exp[i];
                    e.Id = null;
                    _app.Add(e);
                }
                catch (Exception ex)
                {
                    sErrorMsg     += "第" + (i + 2) + "行:" + ex.Message + "<br>";
                    result.Message = sErrorMsg;
                    break;
                }
            }
            if (sErrorMsg.Equals(string.Empty))
            {
                if (exp.Count == 0)
                {
                    sErrorMsg     += "没有发现有效数据, 请确定模板是否正确, 或是否有填充数据!";
                    result.Message = sErrorMsg;
                }
                else
                {
                    result.Message = "导入完成";
                }
            }
            else
            {
                result.Status  = false;
                result.Message = result.Message;
            }
            return(result);
        }
Esempio n. 6
0
 public void Upd(MaterialCallHeader entity)
 {
     _app.Update(entity);
 }
Esempio n. 7
0
 public void Ins(MaterialCallHeader entity)
 {
     _app.Add(entity);
 }
Esempio n. 8
0
 public TableData Load(PageReq pageRequest, MaterialCallHeader entity)
 {
     return(_app.Load(pageRequest, entity));
 }
Esempio n. 9
0
 public TableData ExportData(MaterialCallHeader entity)
 {
     return(_app.ExportData(entity));
 }
 public string Load(PageReq pageRequest, MaterialCallHeader entity)
 {
     return(JsonHelper.Instance.Serialize(_app.Load(pageRequest, entity)));
 }
 public string Export(MaterialCallHeader entity)
 {
     return(JsonHelper.Instance.Serialize(_app.ExportData(entity)));
 }
        public void Upd(MaterialDistributeTaskHeader entity)
        {
            if (entity.Status == AGVTaskState.配送完成 || entity.Status == AGVTaskState.放料车完成)
            {
                //同步更新物料呼叫状态为完成
                MaterialCallHeader materialCallHeader = _unitWork.FindSingle <MaterialCallHeader>(u => u.Id.Equals(entity.MaterialCallId));
                materialCallHeader.Status     = CallStatus.完成;
                materialCallHeader.UpdateTime = DateTime.Now;
                materialCallHeader.UpdateBy   = _app._loginInfo.Account;
                _unitWork.Update(materialCallHeader);
                if (entity.Status == AGVTaskState.配送完成)
                {
                    List <MaterialCallDetail> materialCallDetail = _unitWork.Find <MaterialCallDetail>(u => u.CallHeaderId.Equals(materialCallHeader.Id)).ToList();
                    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   = _app._loginInfo.Account;
                            _unitWork.Update(md);
                        }
                    }
                }

                //更新缓存区位置存放的料框编号和状态
                Location location = _unitWork.Find <Location>(u => u.Code == entity.LocationCode).FirstOrDefault();
                location.UpdateTime    = DateTime.Now;
                location.UpdateBy      = _app._loginInfo.Account;
                location.ContainerCode = entity.ContainerCode;
                location.Status        = LocationStatus.货;
                _unitWork.Update(location);

                //容器
                Container container = _unitWork.Find <Container>(u => u.Code == entity.ContainerCode).FirstOrDefault();
                container.UpdateTime   = DateTime.Now;
                container.UpdateBy     = _app._loginInfo.Account;
                container.LocationCode = entity.LocationCode;
                container.Status       = ContainerStatus.;
                _unitWork.Update(container);
            }
            if (entity.Status == AGVTaskState.回收料框完成 || entity.Status == AGVTaskState.取工件完成)
            {
                //更新缓存区位置存放的料框编号和状态
                Location location = _unitWork.Find <Location>(u => u.Code == entity.LocationCode).FirstOrDefault();
                location.UpdateTime    = DateTime.Now;
                location.UpdateBy      = _app._loginInfo.Account;
                location.ContainerCode = "";
                location.Status        = LocationStatus.空仓位;
                _unitWork.Update(location);

                //容器
                Container container = _unitWork.Find <Container>(u => u.Code == entity.ContainerCode).FirstOrDefault();
                container.UpdateTime   = DateTime.Now;
                container.UpdateBy     = _app._loginInfo.Account;
                container.LocationCode = "";
                container.Status       = ContainerStatus.空;
                _unitWork.Update(container);
            }
            entity.Status = AGVTaskState.任务完成;
            _app.Update(entity);
        }
Esempio n. 13
0
        public void Execute()
        {
            DbHelp  dbHelp = new DbHelp(ConnString);
            string  sql    = string.Format(@"SELECT [id],[needStation],[locationCode],[callTime],[callType] FROM [dbo].[material_call_header] WHERE [dbo].[material_call_header].[status] = '{0}'; ", CallStatus.已准备);
            DataSet ds     = dbHelp.SelectGet(sql);
            var     ccode  = "";
            List <MaterialCallHeader> chlist = new List <MaterialCallHeader>();

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                MaterialCallHeader callheader = new MaterialCallHeader();
                callheader.Id           = int.Parse(dr["id"].ToString());
                callheader.NeedStation  = dr["needStation"].ToString();
                callheader.LocationCode = dr["locationCode"].ToString();
                callheader.CallTime     = DateTime.Parse(dr["callTime"].ToString());
                callheader.CallType     = dr["callType"].ToString();
                chlist.Add(callheader);
            }
            if (chlist.Count == ds.Tables[0].Rows.Count)
            {
                foreach (MaterialCallHeader callhd in chlist)
                {
                    string  sqlmdth      = string.Format(@"SELECT * FROM [dbo].[material_distribute_task_header] WHERE [dbo].[material_distribute_task_header].materialCallId = {0}; ", callhd.Id);
                    DataSet materialdthd = dbHelp.SelectGet(sqlmdth);
                    if (materialdthd.Tables[0].Rows.Count < 1)
                    {   //读取叫料明细数据
                        string  calldtsql = string.Format("SELECT * FROM dbo.material_call_detail where dbo.material_call_detail.callHeaderId = {0}; ", callhd.Id);
                        DataSet calldtds  = dbHelp.SelectGet(calldtsql);
                        //取料框ABC类别
                        string  ABCsql = string.Format("SELECT * FROM dbo.location where dbo.location.code = '{0}'; ", callhd.LocationCode);
                        DataSet ABCds  = dbHelp.SelectGet(ABCsql);
                        if (!string.IsNullOrEmpty(ABCds.Tables[0].Rows[0]["ContainerCode"].ToString()))
                        {
                            ccode = ABCds.Tables[0].Rows[0]["ContainerCode"].ToString();
                        }
                        string taskNo = "";
                        if (callhd.CallType == CallType.料)
                        {
                            string product   = "";
                            string productid = "";
                            string confirm   = MaterialConfirm.已确认.ToString();
                            if (ABCds.Tables[0].Rows[0]["type"].ToString() != "C")
                            {
                                product   = calldtds.Tables[0].Rows[0]["productCode"].ToString();
                                productid = calldtds.Tables[0].Rows[0]["productId"].ToString();
                                confirm   = MaterialConfirm.未确认.ToString();
                            }
                            if (ABCds.Tables[0].Rows[0]["Status"].ToString() == LocationStatus.空仓位)
                            {//第一次叫料,直接生成配送任务
                                SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@TASKTYPE", AGVTaskNo.工位叫料), new SqlParameter("@NEW_ID", SqlDbType.VarChar, 32) };
                                parameters[1].Direction = ParameterDirection.Output;
                                taskNo = dbHelp.ProcOutput("Proc_GetTaskNo", parameters, "@NEW_ID").ToString();//生成任务号
                                //写入物料配送任务主表
                                string intaskhdsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_header] ([taskNo],[materialCallId],[productCode],[containerType],[userCode],[needStation],[locationCode],[containerCode],[needTime],[status],[createTime],[createBy],[callType],[startPlace],[EndPlace],[productId],[materialConfirm])
                                    VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}'); ",
                                                                   taskNo, callhd.Id, product, ABCds.Tables[0].Rows[0]["type"].ToString(), "AutoJob", callhd.NeedStation, callhd.LocationCode, "", callhd.CallTime, "1", DateTime.Now, "AutoJob", TaskType.料配送, "", callhd.LocationCode, productid, confirm);
                                dbHelp.DataOperator(intaskhdsql);
                            }
                            else
                            {//先生成取空料框任务
                                SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@TASKTYPE", AGVTaskNo.取空料框), new SqlParameter("@NEW_ID", SqlDbType.VarChar, 32) };
                                parameters[1].Direction = ParameterDirection.Output;
                                string emptyTaskNo = dbHelp.ProcOutput("Proc_GetTaskNo", parameters, "@NEW_ID").ToString();//生成任务号
                                //写入物料配送任务主表
                                string intaskhdsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_header] ([taskNo],[materialCallId],[productCode],[containerType],[userCode],[needStation],[locationCode],[containerCode],[needTime],[status],[createTime],[createBy],[callType],[startPlace],[EndPlace],[materialConfirm])
                                    VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}'); ",
                                                                   emptyTaskNo, callhd.Id, "", ABCds.Tables[0].Rows[0]["type"].ToString(), "AutoJob", callhd.NeedStation, callhd.LocationCode, ccode, callhd.CallTime, "1", DateTime.Now, "AutoJob", TaskType.回收料框, callhd.LocationCode, "", MaterialConfirm.已确认);
                                dbHelp.DataOperator(intaskhdsql);
                                //再生成配送任务
                                SqlParameter[] gparameters = new SqlParameter[] { new SqlParameter("@TASKTYPE", AGVTaskNo.工位叫料), new SqlParameter("@NEW_ID", SqlDbType.VarChar, 32) };
                                gparameters[1].Direction = ParameterDirection.Output;
                                taskNo = dbHelp.ProcOutput("Proc_GetTaskNo", gparameters, "@NEW_ID").ToString();//生成任务号
                                //写入物料配送任务主表
                                string gintaskhdsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_header] ([taskNo],[materialCallId],[productCode],[containerType],[userCode],[needStation],[locationCode],[containerCode],[needTime],[status],[createTime],[createBy],[callType],[startPlace],[EndPlace],[productId],[materialConfirm])
                                    VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}'); ",
                                                                    taskNo, callhd.Id, product, ABCds.Tables[0].Rows[0]["type"].ToString(), "AutoJob", callhd.NeedStation, callhd.LocationCode, "", callhd.CallTime, "1", DateTime.Now, "AutoJob", TaskType.料配送, "", callhd.LocationCode, productid, confirm);
                                dbHelp.DataOperator(gintaskhdsql);
                            }
                            //写入配送明细表逻辑
                            if (calldtds.Tables[0].Rows.Count > 0)
                            {
                                //遍历叫料明细数据
                                foreach (DataRow item in calldtds.Tables[0].Rows)
                                {
                                    //获取写入的配送头表信息
                                    string  dtaskheadersql = string.Format(@"SELECT * FROM [dbo].[material_distribute_task_header] WHERE [dbo].[material_distribute_task_header].taskNo = '{0}'; ", taskNo);
                                    DataSet dtaskheaderds  = dbHelp.SelectGet(dtaskheadersql);
                                    if (dtaskheaderds.Tables[0].Rows.Count > 0)
                                    {
                                        //获取物料需求表数据
                                        string  materialmdsql = string.Format(@"SELECT * FROM dbo.material_demand where dbo.material_demand.orderCode = '{0}'; ", item["orderCode"].ToString());
                                        DataSet materialmdds  = dbHelp.SelectGet(materialmdsql);
                                        if (materialmdds.Tables[0].Rows.Count > 0)
                                        {
                                            //遍历物料需求数据
                                            foreach (DataRow mditem in materialmdds.Tables[0].Rows)
                                            {
                                                if (mditem["classABC"].ToString() == ABCds.Tables[0].Rows[0]["type"].ToString())
                                                {
                                                    string intaskdtsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_detail] ([materialDistributeTaskHeaderId],[orderCode],[materialCode],[serialNumber],[qty],[userCode],[createTime],[createBy])
                                         VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}'); ",
                                                                                       dtaskheaderds.Tables[0].Rows[0]["id"].ToString(), mditem["orderCode"].ToString(), mditem["materialCode"].ToString(), item["serialNumber"].ToString(), mditem["distributeQty"].ToString(), "AutoJob", DateTime.Now, "AutoJob");
                                                    dbHelp.DataOperator(intaskdtsql);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (callhd.CallType == CallType.料)
                        {
                            if (ABCds.Tables[0].Rows[0]["Status"].ToString() == LocationStatus.空仓位)
                            {//第一次呼叫下料,先补空料框
                                SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@TASKTYPE", AGVTaskNo.补给空框), new SqlParameter("@NEW_ID", SqlDbType.VarChar, 32) };
                                parameters[1].Direction = ParameterDirection.Output;
                                taskNo = dbHelp.ProcOutput("Proc_GetTaskNo", parameters, "@NEW_ID").ToString(); //生成任务号
                                                                                                                //写入物料配送任务主表
                                string intaskhdsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_header] ([taskNo],[materialCallId],[productCode],[containerType],[userCode],[needStation],[locationCode],[containerCode],[needTime],[status],[createTime],[createBy],[callType],[startPlace],[EndPlace],[materialConfirm])
                                    VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}'); ",
                                                                   taskNo, callhd.Id, "", ABCds.Tables[0].Rows[0]["type"].ToString(), "AutoJob", callhd.NeedStation, callhd.LocationCode, "", callhd.CallTime, "1", DateTime.Now, "AutoJob", TaskType.补给料框, "", callhd.LocationCode, MaterialConfirm.已确认);
                                dbHelp.DataOperator(intaskhdsql);
                            }
                            else
                            {//生成下料任务
                                SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@TASKTYPE", AGVTaskNo.成品下料), new SqlParameter("@NEW_ID", SqlDbType.VarChar, 32) };
                                parameters[1].Direction = ParameterDirection.Output;
                                taskNo = dbHelp.ProcOutput("Proc_GetTaskNo", parameters, "@NEW_ID").ToString();//生成任务号
                                //写入物料配送任务主表
                                string intaskhdsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_header] ([taskNo],[materialCallId],[productCode],[containerType],[userCode],[needStation],[locationCode],[containerCode],[needTime],[status],[createTime],[createBy],[callType],[startPlace],[EndPlace],[materialConfirm])
                                    VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}'); ",
                                                                   taskNo, callhd.Id, "", ABCds.Tables[0].Rows[0]["type"].ToString(), "AutoJob", callhd.NeedStation, callhd.LocationCode, ccode, callhd.CallTime, "1", DateTime.Now, "AutoJob", TaskType.料取件, callhd.LocationCode, "", MaterialConfirm.已确认);
                                dbHelp.DataOperator(intaskhdsql);

                                //下料完成后,补给空料框任务
                                SqlParameter[] bparameters = new SqlParameter[] { new SqlParameter("@TASKTYPE", AGVTaskNo.补给空框), new SqlParameter("@NEW_ID", SqlDbType.VarChar, 32) };
                                bparameters[1].Direction = ParameterDirection.Output;
                                taskNo = dbHelp.ProcOutput("Proc_GetTaskNo", bparameters, "@NEW_ID").ToString();//生成任务号
                                //写入物料配送任务主表
                                string bintaskhdsql = string.Format(@"INSERT INTO [dbo].[material_distribute_task_header] ([taskNo],[materialCallId],[productCode],[containerType],[userCode],[needStation],[locationCode],[containerCode],[needTime],[status],[createTime],[createBy],[callType],[startPlace],[EndPlace],[materialConfirm])
                                    VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}'); ",
                                                                    taskNo, callhd.Id, "", ABCds.Tables[0].Rows[0]["type"].ToString(), "AutoJob", callhd.NeedStation, callhd.LocationCode, "", callhd.CallTime, "1", DateTime.Now, "AutoJob", TaskType.补给料框, "", callhd.LocationCode, MaterialConfirm.已确认);
                                dbHelp.DataOperator(bintaskhdsql);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 14
0
        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);
            }
        }