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

namespace WebApp
{
    /// <summary>
    /// 入库明细表
    /// </summary>

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

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

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

        public TableData Load(PageReq pageRequest, ReceiptDetail entity)
        {
            return _app.Load(pageRequest, entity);
        }

        public void Ins(ReceiptDetail entity)
        {
            ReceiptHeader receiptHeader = _unitWork.FindSingle<ReceiptHeader>(u => u.Id == entity.ReceiptId);
            if (receiptHeader.FirstStatus != ReceiptHeaderStatus.新建 || receiptHeader.LastStatus != ReceiptHeaderStatus.新建)
            {
                throw new Exception("单据进入订单池后,不允许修改明细");
            }

            entity.Price = 0;
            entity.QtyCompleted = 0;
            entity.Status = ReceiptHeaderStatus.新建;
            entity.Station = entity.Station ?? "";
            _app.Add(entity);

            receiptHeader.TotalLines = (short)(receiptHeader.TotalLines + 1);
            receiptHeader.TotalQty = receiptHeader.TotalQty + entity.Qty;
            _unitWork.Update(receiptHeader);
        }

        public void Upd(ReceiptDetail entity)
        {
            ReceiptHeader receiptHeader = _unitWork.FindSingle<ReceiptHeader>(u => u.Id == entity.ReceiptId);
            if (receiptHeader.FirstStatus != ReceiptHeaderStatus.新建 || receiptHeader.LastStatus != ReceiptHeaderStatus.新建)
            {
                throw new Exception("单据进入订单池后,不允许修改明细");
            }
            ReceiptDetail receiptDetail = _app.FindSingle(u => u.Id == entity.Id);
            entity.Station = entity.Station ?? "";
            _app.Update(entity);

            decimal? qty = receiptHeader.TotalQty + (entity.Qty - receiptDetail.Qty);
            _unitWork.Update<ReceiptHeader>(u => u.Id == entity.ReceiptId, u => new ReceiptHeader { TotalQty = qty });
        }

        public void DelByIds(int[] ids)
        {
            ReceiptDetail receiptDetail1 = _app.FindSingle(u => u.Id == ids[0]);
            ReceiptHeader receiptHeader = _unitWork.FindSingle<ReceiptHeader>(u => u.Id == receiptDetail1.ReceiptId);
            if (receiptHeader.FirstStatus != ReceiptHeaderStatus.新建 || receiptHeader.LastStatus != ReceiptHeaderStatus.新建)
            {
                throw new Exception("订单号:" + receiptHeader.Code + "进入订单池后,不允许删除");
            }

            foreach (var item in ids)
            {
                ReceiptDetail receiptDetail = _app.FindSingle(u => u.Id == item);
                _app.Delete(receiptDetail);

                receiptHeader.TotalLines = (short)(receiptHeader.TotalLines - 1);
                receiptHeader.TotalQty = receiptHeader.TotalQty - receiptDetail.Qty;
                _unitWork.Update(receiptHeader);
            }
            ReceiptDetail receiptDetail2 = _app.FindSingle(u => u.ReceiptId == receiptHeader.Id);
            if (receiptDetail2 == null)
            {
                _unitWork.Delete(receiptHeader);
            }
        }

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

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

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

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

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

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

            return result;
        }

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