HandTaskApp.cs 8.38 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 HandTaskApp
    {
        private IUnitWork _unitWork;
        public IRepository<Task> _app;
        public IRepository<Container> _appc;
        public IRepository<Inventory> _appi;
        public IRepository<Location> _appl;
        public IRepository<ReceiptDetail> _apprd;
        public IRepository<ReceiptHeader> _apprh;
        public IRepository<ShipmentHeader> _apph;
        public IRepository<ShipmentDetail> _appsd;
        public IRepository<TaskDetail> _apptd;
        public IRepository<InventoryTransaction> _appit;
        private BaseDBContext _context;
        private static IHostingEnvironment _hostingEnvironment;
        private IAuth _auth;
        ExcelHelper imp = new ExcelHelper(_hostingEnvironment);

        public HandTaskApp(IUnitWork unitWork, IAuth auth, IRepository<Inventory> inventory, IRepository<InventoryTransaction> inventoryTransaction, IRepository<Container> Icontainer, IRepository<ReceiptHeader> receiptHeader, IRepository<ReceiptDetail> receiptDetail, IRepository<Task> repository, IRepository<Location> repositoryl, IRepository<ShipmentHeader> repositoryh, IRepository<TaskDetail> repositorytd, IRepository<ShipmentDetail> repositorysd, IHostingEnvironment hostingEnvironment, BaseDBContext context)
        {
            _unitWork = unitWork;
            _app = repository;
            _appl = repositoryl;
            _apph = repositoryh;
            _appsd = repositorysd;
            _apptd = repositorytd;
            _apprd = receiptDetail;
            _apprh = receiptHeader;
            _appc = Icontainer;
            _appi = inventory;
            _appit = inventoryTransaction;
            _hostingEnvironment = hostingEnvironment;
            _context = context;
            _auth = auth;
        }

        public HandTaskApp SetLoginInfo(LoginInfo loginInfo)
        {
            _app._loginInfo = loginInfo;
            _appl._loginInfo = loginInfo;
            _apph._loginInfo = loginInfo;
            _appsd._loginInfo = loginInfo;
            _apptd._loginInfo = loginInfo;
            _appc._loginInfo = loginInfo;
            _apprd._loginInfo = loginInfo;
            _apprh._loginInfo = loginInfo;
            _appi._loginInfo = loginInfo;
            _appit._loginInfo = loginInfo;
            return this;
        }

        public TableData Load(PageReq pageRequest, Task entity)
        {
            var result = new TableData();
            var data = _app.Find(EntityToExpression<Task>.GetExpressions(entity));
            data = data.Where(u => u.LastStatus != TaskStatus.已经完成);

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

            return result;
        }

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

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


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

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

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

            for (int i = 0; i < exp.Count; i++)
            {
                try
                {
                    Task 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(Task entity)
        {
            return _app.ExportData(entity);
        }

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

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

            return result;
        }

        public void GetData(IQueryable<Task> data, TableData result, PageReq pageRequest = null)
        {
            _app.GetData(data, result, pageRequest);
        }

        //设备异常恢复
        public Response AbnormalRepairApp(string code, string type)
        {
            Response<AbType> response = new Response<AbType>();
            try
            {
                ApiRequest apiRequest = new ApiRequest("WCS");
                AbType abType = new AbType
                {
                    code = code,
                    type = type
                };
                response = apiRequest.Post<Response<AbType>>(JsonHelper.Instance.Serialize(abType), "WcsWebApi/AbnormalRepair", "任务下发");
                if (response.Code != 200)
                {
                    response.Code = 300;
                    response.Message = response.Message;
                }
            }
            catch (Exception ex)
            {
                response.Code = 300;
                response.Message = ex.Message;
            }
            return response;
        }

        //请求站台数据
        public TableData RequestStation()
        {
            TableData tab = new TableData();
            try
            {
               List <Station> station = _unitWork.Find<Station>(n => n.Containercode != "").ToList();
                if (station == null)
                {
                    tab.code = 300;
                    tab.msg = "没有被托盘占用的站台!!";
                }
                else
                {
                    tab.code = 200;
                    tab.data = station;
                }
            }
            catch (Exception ex)
            {
                tab.code = 500;
                tab.msg = ex.Message;
                return tab;
            }
            return tab;
        }

        //清空站台数据
        public TableData EmptyStation(string code,string Name)
        {
            TableData tab = new TableData();
            try
            {
                Station station = _unitWork.Find<Station>(n => n.Code == code).FirstOrDefault();
                if (station == null)
                {
                    tab.code = 500;
                    tab.msg = "没有找到该站台!!";
                    return tab;
                }
                else
                {
                    TaskDetailHistory taskDetail = new TaskDetailHistory
                    {
                        TaskNo = Name + "手动清除站台:" + station.Code,
                        ContainerCode = station.Containercode,
                        OrderCode = Name + "手动清除站台:" + station.Code,
                        Station = station.Code,
                        Error = Name + "手动清除站台:" + station.Code,
                        CreateTime = DateTime.Now,
                        CreateBy = Name
                    };
                    _unitWork.Add(taskDetail);
                    station.Containercode = "";
                    _unitWork.Update(station);
                    
                    tab.code = 200;
                    tab.msg = "清除站台成功";
                }
            }
            catch (Exception ex)
            {
                tab.code = 500;
                tab.msg = ex.Message;
                return tab;
            }
            return tab;
        }
    }
}