TaskDetailApp.cs 11.3 KB
using Infrastructure;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using WebRepository;


namespace WebApp
{
    /// <summary>
    /// 立库任务明细表
    /// </summary>

    public partial class TaskDetailApp
    {
        private IUnitWork _unitWork;
        public IRepository<TaskDetail> _app;
        private static IHostingEnvironment _hostingEnvironment;
        ExcelHelper imp = new ExcelHelper(_hostingEnvironment);

        public TaskDetailApp(IUnitWork unitWork, IRepository<TaskDetail> repository, IHostingEnvironment hostingEnvironment)
        {
            _unitWork = unitWork;
            _app = repository;
            _hostingEnvironment = hostingEnvironment;
        }

        public TaskDetailApp SetLoginInfo(LoginInfo loginInfo)
        {
            _app._loginInfo = loginInfo;
            return this;
        }

        public TableData Load(PageReq pageRequest, TaskDetail entity)
        {
            TableData tab = _app.Load(pageRequest, entity);
            List<TaskDetail> list = tab.data;
            if (list != null)
            {
                tab.data = list.Where(n => n.TaskType != TaskType.整盘出库);
            }
            return tab;
            //return _app.Load(pageRequest, entity);
        }

        public void Ins(TaskDetail entity)
        {
            _app.Add(entity);
        }

        public void Upd(TaskDetail entity)
        {
            _app.Update(entity);
        }

        public void DelByIds(int[] ids)
        {
            _app.Delete(u => ids.Contains(u.Id.Value));
        }

        public TaskDetail FindSingle(Expression<Func<TaskDetail, bool>> exp)
        {
            return _app.FindSingle(exp);
        }

        public IQueryable<TaskDetail> Find(Expression<Func<TaskDetail, bool>> exp)
        {
            return _app.Find(exp);
        }

        public Response ImportIn(IFormFile excelfile)
        {
            Response result = new Infrastructure.Response();
            List<TaskDetail> exp = imp.ConvertToModel<TaskDetail>(excelfile);
            string sErrorMsg = "";

            for (int i = 0; i < exp.Count; i++)
            {
                try
                {
                    TaskDetail 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;
        }

        public TableData ExportData(TaskDetail entity)
        {
            return _app.ExportData(entity);
        }

        public TableData Query(TaskDetail entity)
        {
            var result = new TableData();
            var data = _app.Find(EntityToExpression<TaskDetail>.GetExpressions(entity));

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

            return result;
        }

        public void GetData(IQueryable<TaskDetail> data, TableData result, PageReq pageRequest = null)
        {
            _app.GetData(data, result, pageRequest);
        }
        public TableData FindTaskDtlApp(TaskDetail taskDtl)
        {
            TableData tab = new TableData();
            try
            {
                List<TaskDetail> list = _unitWork.Find<TaskDetail>(n => (n.Status == TaskStatus.已经到站台 || n.Status == TaskStatus.放货中) && n.ContainerCode == taskDtl.ContainerCode).ToList();
                tab.data = list;
            }
            catch (Exception ex)
            {
                tab.code = 300;
                tab.msg = ex.Message;
            }
            return tab;
        }
        /// <summary>
        /// 满入异常处理,堆垛机扫描托盘错误异常处理
        /// </summary>
        /// <param name="Id">任务ID</param>
        /// /// <param name="type">处理类型0:满入;1:托盘码错误</param>
        /// <param name="Name">处理人名字</param>
        /// <returns></returns>
        public TableData FullInHandle(int Id,int type, string Name)
        {
            TableData tab = new TableData();
            tab.code = 200;
            using (var tran = _unitWork.GetDbContext().Database.BeginTransaction())
            {
                try
                {
                    TaskDetail taskDetail = _unitWork.Find<TaskDetail>(n => n.Id == Id).FirstOrDefault();
                    if (taskDetail == null)
                    {
                        tab.code = 300;
                        tab.msg = "未找到任务,请刷新后重新选择!!";
                        return tab;
                    }
                    else if (taskDetail.TaskType == TaskType.容器回库 || taskDetail.TaskType == TaskType.空容器入库)
                    {
                        if (!taskDetail.DestinationLocation.Contains("WareCell"))
                        {
                            //原始库位
                            Location location = _unitWork.Find<Location>(n => n.Code == taskDetail.DestinationLocation && n.ContainerCode == taskDetail.ContainerCode).FirstOrDefault();
                            var to = "";
                            if (taskDetail.ContainerCode.Contains("N5PJ"))
                            {
                                to = "ProductStationB02_14";
                            }
                            else if (taskDetail.ContainerCode.Contains("N5PP"))
                            {
                                to = "ExitStationC01(P2039)";
                            }
                            else if (taskDetail.ContainerCode.Contains("N5TB"))
                            {
                                to = "EntranceStationD02(P1004)";
                            }
                            //满入
                            if (type == 0 && location != null)
                            {
                                Container container = _unitWork.Find<Container>(n => n.Code == taskDetail.ContainerCode + "Full").FirstOrDefault();
                                if (container == null)
                                {
                                    Container con = new Container
                                    {
                                        Code = taskDetail.ContainerCode + "Full",
                                        IsLock = 0,
                                        LocationCode = location.Code,
                                        Status = ContainerStatus.,
                                        PrintCount = 0,
                                        Type = ContainerType.普通栈板,
                                        CreateTime = DateTime.Now
                                    };
                                    _unitWork.Add(con);
                                }
                                else
                                {
                                    container.IsLock = 0;
                                    container.LocationCode = location.Code;
                                    container.Status = ContainerStatus.;
                                    container.UpdateTime = DateTime.Now;
                                    _unitWork.Update(container);
                                }
                                int i = _unitWork.Update<Location>(n => n.Id == location.Id && n.Version == location.Version, n => new Location
                                {
                                    Status = LocationStatus.有货,
                                    ContainerCode = taskDetail.ContainerCode + "Full",
                                    UpdateTime = DateTime.Now
                                });
                                if (i != 1)
                                {
                                    tran.Rollback();
                                    tab.code = 300;
                                    tab.msg = "修改库位信息失败!!";
                                    return tab;
                                }
                                taskDetail.TaskType = TaskType.容器出库;
                                taskDetail.SourceLocation = taskDetail.DestinationLocation;
                                taskDetail.DestinationLocation = to;
                                taskDetail.Station = to;
                                taskDetail.Error += Name + "对该任务满入处理,将该托盘从" + location.Code + "出库到了"+ to +",原本库位上的托盘号改为了" + taskDetail.ContainerCode + "Full";
                            }
                            //托盘码扫描错误
                            else if (type == 1 && location != null)
                            {
                                taskDetail.TaskType = TaskType.容器出库;
                                taskDetail.SourceLocation = taskDetail.DestinationLocation;
                                taskDetail.DestinationLocation = to;
                                taskDetail.Station = to;
                                taskDetail.Error += Name + "对该任务扫码异常处理,将该托盘从" + location.Code + "出库到了"+ to;
                            }
                            _unitWork.Update(taskDetail);

                            ApiRequest apiRequest = new ApiRequest("WCS");
                            AbType abType = new AbType
                            {
                                code = taskDetail.TaskNo,
                                type = "Transformation"
                            };
                            Response<AbType> response = new Response<AbType>();
                            response = apiRequest.Post<Response<AbType>>(JsonHelper.Instance.Serialize(abType), "WcsWebApi/AbnormalTask", "满入扫码异常处理");
                            if (response.Code != 200)
                            {
                                tran.Rollback();
                                tab.code = 300;
                                tab.msg = response.Message;
                                return tab;
                            }
                            tran.Commit();
                        }
                        else
                        {
                            tab.code = 300;
                            tab.msg = "该任务未找到仓位,不允许满入处理!!";
                            return tab;
                        }
                    }
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    tab.code = 500;
                    tab.msg = ex.Message;
                    return tab;

                }
                return tab;
            }
        }
    }
}