dengjunjie
2025-06-06 7e7f17c08a0f18d83eb379ddff1689597fecefde
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
@@ -20,6 +21,7 @@
        /// <returns></returns>
        public WebResponseContent ShelfOutboundCarry(Dt_Task outTask)
        {
            //判断是否为电芯库,辅料库人工处理(立库目标地址转换成AGV站点地址)
            Dt_CachePoint cachePoint = GetCachePointByStartPoint(outTask.TargetAddress);
            Dt_Task task = new()
@@ -34,7 +36,7 @@
                TargetAddress = cachePoint.PointCode,
                SourceKey = outTask.TaskId,
                TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
                TaskStatus = AGVTaskStatusEnum.Create.ObjToInt(),
                TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
                CreateDate = DateTime.Now,
                Creater = App.User.UserId > 0 ? App.User.UserName : "System",
@@ -59,30 +61,49 @@
                Dt_Task task = new Dt_Task()
                {
                    CurrentAddress = cachePoint.PointCode,
                    CurrentAddress = "D02",// cachePoint.PointCode,
                    Grade = 0,
                    NextAddress = endPoint,
                    NextAddress = "C01",//endPoint,
                    OrderNo = "",
                    PalletCode = cachePoint.Remark,
                    PalletCode = "",//cachePoint.Remark,
                    Roadway = "",
                    SourceAddress = cachePoint.PointCode,
                    TargetAddress = endPoint,
                    SourceAddress = "D02",//cachePoint.PointCode,
                    TargetAddress = "C01",//endPoint,
                    SourceKey = 0,
                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
                    TaskStatus = AGVTaskStatusEnum.Create.ObjToInt(),
                    TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
                };
                cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
                Db.Ado.BeginTran();
                #region MyRegion
                AGVSendTaskModel aGVSendTask = new AGVSendTaskModel
                {
                    task_id = task.TaskNum.ToString(),// BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)).ToString(),
                    src_pos = task.CurrentAddress,// "C01",
                    site_value_type = 1,
                    dst_pos = task.NextAddress,// "E14"
                    src_level=3,
                };
                #endregion
                var response = HttpHelper.Post<WebResponseContent>(AGVurl + "sendTask/", aGVSendTask, "叫料任务下发");
                if (response.Code != 200)
                {
                    _unitOfWorkManage.RollbackTran();
                    return WebResponseContent.Instance.Error($"{response.Message}");
                }
                _basicService.CachePointService.Repository.UpdateData(cachePoint);
                Repository.AddData(task);
                Db.Ado.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
@@ -108,7 +129,7 @@
                    TargetAddress = cachePoint.PointCode,
                    SourceKey = 0,
                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(),
                    TaskStatus = AGVTaskStatusEnum.Create.ObjToInt(),
                    TaskType = TaskTypeEnum.AGVCarry.ObjToInt(),
                };
                cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt();
@@ -121,8 +142,13 @@
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
}
        }
        /// <summary>
        /// æ¬è¿
        /// </summary>
        /// <param name="startPoint"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        private Dt_CachePoint GetCachePointByStartPoint(string startPoint)
        {
            Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.StartArea == startPoint);
@@ -144,7 +170,12 @@
            return cachePoint;
        }
        /// <summary>
        /// å«æ–™
        /// </summary>
        /// <param name="endPoint"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        private Dt_CachePoint GetCachePointByEndPoint(string endPoint)
        {
            Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.NextArea == endPoint);
@@ -165,30 +196,78 @@
            }
            return cachePoint;
        }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€ä¸ŠæŠ¥
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public object AGVTaskFeedBack(AGVTaskFeedBackModel model)
        {
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == Convert.ToInt32(model.Task_id));
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == Convert.ToInt32(model.Task_id));
            if (task == null)
            {
                return new { code = 404, message = "未找到该任务!" };
            }
            Dt_CachePoint startCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.SourceAddress);
            if (startCachePoint != null)
            switch ((AGVTaskStatusEnum)Enum.Parse(typeof(AGVTaskStatusEnum), model.Task_status))
            {
                startCachePoint.PointStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.CachePointService.Repository.UpdateData(startCachePoint);
                case AGVTaskStatusEnum.Create:
                    break;
                case AGVTaskStatusEnum.Queuing:
                    task.TaskStatus = AGVTaskStatusEnum.Queuing.ObjToInt();
                    break;
                case AGVTaskStatusEnum.Running:
                    task.TaskStatus = AGVTaskStatusEnum.Running.ObjToInt();
                    break;
                case AGVTaskStatusEnum.DoneFetch:
                    {
                        task.TaskStatus = AGVTaskStatusEnum.DoneFetch.ObjToInt();
                        Dt_CachePoint startCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.SourceAddress);
                        if (startCachePoint != null)
                        {
                            startCachePoint.PointStatus = LocationStatusEnum.Free.ObjToInt();
                            if (startCachePoint.AreaId == 3)//判断是否为模组空栈板区域
                            {
                                var qty = (startCachePoint.Remark.ObjToInt() - 1);
                                if (qty > 0) startCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt();
                                startCachePoint.Remark = qty.ToString();
                            }
                            _basicService.CachePointService.Repository.UpdateData(startCachePoint);
                        }
                    }
                    break;
                case AGVTaskStatusEnum.DonePut:
                    {
                        task.TaskStatus = AGVTaskStatusEnum.DonePut.ObjToInt();
                        Dt_CachePoint endCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.TargetAddress);
                        if (endCachePoint != null)
                        {
                            endCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt();
                            _basicService.CachePointService.Repository.UpdateData(endCachePoint);
                        }
                    }
                    break;
                case AGVTaskStatusEnum.Finish:
                    {
                        task.TaskStatus = AGVTaskStatusEnum.Finish.ObjToInt();
                        BaseDal.DeleteAndMoveIntoHty(task, /*App.User.UserId == 0 ?*/ OperateType.自动完成 /*: OperateType.人工完成*/);
                        return new { code = 200, message = "成功" };
                    }
                case AGVTaskStatusEnum.Cancel:
                    {
                        task.TaskStatus = AGVTaskStatusEnum.Cancel.ObjToInt();
                        BaseDal.DeleteAndMoveIntoHty(task, OperateType.自动删除);
                        return new { code = 200, message = "成功" };
                    }
                case AGVTaskStatusEnum.Terminate:
                    task.TaskStatus = AGVTaskStatusEnum.Terminate.ObjToInt();
                    break;
                case AGVTaskStatusEnum.Error:
                    task.TaskStatus = AGVTaskStatusEnum.Error.ObjToInt();
                    break;
                default:
                    return new { code = 404, message = "未定义任务类型!" };
            }
            Dt_CachePoint endCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.TargetAddress);
            if (endCachePoint != null)
            {
                endCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt();
                _basicService.CachePointService.Repository.UpdateData(endCachePoint);
            }
            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
            BaseDal.UpdateData(task);
            return new { code = 200, message = "成功" };
        }
    }