AcsTaskAssignController.cs 11.3 KB
using System;
using Infrastructure;
using Microsoft.AspNetCore.Mvc;
using WebApp;
using WebRepository;

namespace WebMvc
{
    /// <summary>
	/// 任务
	/// </summary>
    [Area("agv")]
    public class AcsTaskAssignController : BaseController
    {
        private IUnitWork _unitWork;
        private readonly AcsTaskAssignApp _app;

        public AcsTaskAssignController(IAuth authUtil, IUnitWork unitWork, AcsTaskAssignApp app) : base(authUtil)
        {
            _app = app;
            _unitWork = unitWork;
        }

        #region 视图功能
        /// <summary>
        /// 默认视图Action
        /// </summary>
        /// <returns></returns>
        [Authenticate]
        [ServiceFilter(typeof(OperLogFilter))]
        public ActionResult Index()
        {
            return View();
        }

        /// <summary>
        /// 站台对站台发送任务
        /// </summary>
        /// <returns></returns>
        [Authenticate]
        [ServiceFilter(typeof(OperLogFilter))]
        public ActionResult SendTask()
        {
            return View();
        }
        #endregion

        #region 自定义方法
        /// <summary>
        /// 加载起始区域
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string getStartZone()
        {
            return JsonHelper.Instance.Serialize(_app.getStartZone());
        }

        /// <summary>
        /// 加载起始站点
        /// </summary>
        /// <param name="StartZone">起始区域</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string getStartWs(string StartZone)
        {
            return JsonHelper.Instance.Serialize(_app.getStartWs(StartZone));
        }

        /// <summary>
        /// 加载目的区域
        /// </summary>
        /// <param name="StartZone">起始区域</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string getEndZone(string StartZone)
        {
            return JsonHelper.Instance.Serialize(_app.getEndZone(StartZone));
        }

        /// <summary>
        /// 加载目的站点
        /// </summary>
        /// <param name="EndZone">目的区域</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string getEndWs(string EndZone)
        {
            return JsonHelper.Instance.Serialize(_app.getEndWs(EndZone));
        }

        /// <summary>
        /// 加载区域
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string getZone()
        {
            return JsonHelper.Instance.Serialize(_app.getZone());
        }

        /// <summary>
        /// 加载站点
        /// </summary>
        /// <param name="Zone">区域</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string getWs(string Zone)
        {
            return JsonHelper.Instance.Serialize(_app.getWs(Zone));
        }

        /// <summary>
        /// 加载任务类型
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string GetTaskType()
        {
            return JsonHelper.Instance.Serialize(_app.GetTaskType());
        }

        /// <summary>
        /// 加载起始站台
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string GetStartStation(string tasktype)
        {
            return JsonHelper.Instance.Serialize(_app.GetStartStation(tasktype));
        }

        /// <summary>
        /// 加载目标站台
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string GetEndStation(string startzone)
        {
            return JsonHelper.Instance.Serialize(_app.GetEndStation(startzone));
        }

        /// <summary>
        /// 创建任务
        /// </summary>
        /// <param name="OrderNo">工作令</param>
        /// <param name="TaskType">任务类型</param>
        /// <param name="StartSt">起始站台</param>
        /// <param name="EndSt">目标站台</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string TaskAssign(string OrderNo, string TaskType, string StartSt, string EndSt)
        {
            try
            {
                string BeginPoint = "";
                string EndPoint = "";
                string TaskGroup = "";
                if (!string.IsNullOrEmpty(StartSt))
                {
                    AcsWorkstation workstation1 = _unitWork.FindSingle<AcsWorkstation>(u => u.Code.Equals(StartSt));
                    if (workstation1 == null)
                    {
                        throw new Exception("出发地不存在");
                    }
                    BeginPoint = workstation1.Barcode;
                    //if (workstation1.Zonename == "GuanHan" || workstation1.Zonename == "DianYuan")
                    //{
                    //    TaskGroup = workstation1.Zonename;
                    //}
                }
                if (!string.IsNullOrEmpty(EndSt))
                {
                    AcsWorkstation workstation2 = _unitWork.FindSingle<AcsWorkstation>(u => u.Code.Equals(EndSt));
                    if (workstation2 == null)
                    {
                        throw new Exception("目的地不存在");
                    }
                    EndPoint = workstation2.Barcode;
                    //if (workstation2.Zonename == "GuanHan" || workstation2.Zonename == "DianYuan")
                    //{
                    //    TaskGroup = workstation2.Zonename;
                    //}
                }

                string TaskNo = _unitWork.GetTaskNo("DC");
                AcsTask acsTask = new AcsTask();
                acsTask.TaskNo = TaskNo;
                acsTask.OrderNo = OrderNo;
                acsTask.TaskType = TaskType;
                acsTask.StartStation = StartSt;
                acsTask.EndStation = EndSt;
                acsTask.CreateTime = DateTime.Now;
                acsTask.CreateBy = _loginInfo.Account;
                acsTask.Status = 0;
                if (BeginPoint != "" && EndPoint != "")
                {
                    TaskAssignModel2 taskAssign = new TaskAssignModel2()
                    {
                        TaskNo = TaskNo,
                        TaskGroup = TaskGroup,
                        TaskType = TaskType,
                        AgvNo = "",
                        BeginBarcode = BeginPoint,
                        EndBarcode = EndPoint,
                        Status = "0",
                    };
                    var postJson = JsonHelper.Instance.Serialize(taskAssign);
                    ApiRequest apiRequest = new ApiRequest("RCS");
                    Response response = apiRequest.Post<Response>(postJson, "TaskAssign", "RCS");
                    if (response.Code != 0)
                    {
                        throw new Exception(response.Message);
                    }

                    acsTask.UpdateTime = DateTime.Now;
                    acsTask.UpdateBy = _loginInfo.Account;
                }
                _unitWork.Add(acsTask);
            }
            catch (Exception ex)
            {
                Result.Code = 500;
                Result.Status = false;
                Result.Message = ex.Message;
            }
            return JsonHelper.Instance.Serialize(Result);
        }

        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity">任务</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(OperLogFilter))]
        public string TaskSend(AcsTask entity)
        {
            AcsTask acsTask = _unitWork.FindSingle<AcsTask>(u=>u.Id.Equals(entity.Id));
            try
            {
                if (acsTask == null)
                {
                    throw new Exception("任务不存在!");
                }

                string OrderNo = acsTask.OrderNo;
                string TaskType = acsTask.TaskType;
                string StartSt = entity.StartStation;
                string EndSt = entity.EndStation;

                string BeginPoint = "";
                string EndPoint = "";
                string TaskGroup = "";

                if (!string.IsNullOrEmpty(StartSt))
                {
                    AcsWorkstation workstation1 = _unitWork.FindSingle<AcsWorkstation>(u => u.Code.Equals(StartSt));
                    if (workstation1 == null)
                    {
                        throw new Exception("出发地不存在");
                    }
                    BeginPoint = workstation1.Barcode;
                    if (workstation1.Zonename == "GuanHan" || workstation1.Zonename == "DianYuan")
                    {
                        TaskGroup = workstation1.Zonename;
                    }
                }
                if (!string.IsNullOrEmpty(EndSt))
                {
                    AcsWorkstation workstation2 = _unitWork.FindSingle<AcsWorkstation>(u => u.Code.Equals(EndSt));
                    if (workstation2 == null)
                    {
                        throw new Exception("目的地不存在");
                    }
                    EndPoint = workstation2.Barcode;
                    if (workstation2.Zonename == "GuanHan" || workstation2.Zonename == "DianYuan")
                    {
                        TaskGroup = workstation2.Zonename;
                    }
                }

                string TaskNo = acsTask.TaskNo;
                if (BeginPoint != "" && EndPoint != "")
                {
                    TaskAssignModel2 taskAssign = new TaskAssignModel2()
                    {
                        TaskNo = TaskNo,
                        TaskGroup = TaskGroup,
                        AgvNo = "",
                        BeginBarcode = BeginPoint,
                        EndBarcode = EndPoint,
                        Status = "0",
                    };
                    var postJson = JsonHelper.Instance.Serialize(taskAssign);

                    ApiRequest apiRequest = new ApiRequest("RCS");
                    Response response = apiRequest.Post<Response>(postJson, "TaskAssign", "RCS");
                    if (response.Code != 0)
                    {
                        throw new Exception(response.Message);
                    }
                    acsTask.StartStation = entity.StartStation;
                    acsTask.EndStation = entity.EndStation;
                    acsTask.UpdateTime = DateTime.Now;
                    acsTask.UpdateBy = _loginInfo.Account;
                    _unitWork.Update(acsTask);
                }
                else
                {
                    throw new Exception("任务的出发地或目的地不存在!");
                }
            }
            catch (Exception ex)
            {
                Result.Code = 500;
                Result.Status = false;
                Result.Message = ex.Message;
            }
            return JsonHelper.Instance.Serialize(Result);
        }
        #endregion
    }
}