/// <summary>
        /// 历史记录
        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseObject <List <HistoryInventory> > > History(HistoryInventoryQuery requestObject, CurrentUser currentUser)
        {
            List <HistoryInventory> result = new List <HistoryInventory>();

            //其他出库
            var otherOut = _db.Instance.Queryable <TWMOtherWhDetailDbModel, TWMOtherWhMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "其他入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //
            var otherIn = _db.Instance.Queryable <TWMOtherWhSendDetailDbModel, TWMOtherWhSendMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 2,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "其他出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });


            //盘盈入库
            var profitDetail = _db.Instance.Queryable <TWMProfitDetailDbModel, TWMProfitMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "盘盈入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //盘亏出库
            var deficit = _db.Instance.Queryable <TWMDeficitDetailDbModel, TWMDeficitMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 2,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "盘亏出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNumber,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //生产入库
            var productionIn = _db.Instance.Queryable <TWMProductionWhDetailDbModel, TWMProductionWhMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrderNo,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "生产入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //生产出库
            var productionOut = _db.Instance.Queryable <TWMProductionDetailDbModel, TWMProductionMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 2,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "生产出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });



            //销售出库
            var saleDetail = _db.Instance.Queryable <TWMSalesDetailDbModel, TWMSalesMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WhSendOrder,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WhSendDate,
                TypeName        = "销售出库",
                InventoryType   = t2.WhSendType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });

            //采购入库
            var purchaseIn = _db.Instance.Queryable <TWMPurchaseDetailDbModel, TWMPurchaseMainDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] {
                JoinType.Inner,
                t1.MainId == t2.ID,
                JoinType.Inner,
                t1.MaterialId == t3.ID
            }).Where((t1, t2, t3) => t2.DeleteFlag == false && t2.AuditStatus == 2 && t2.CompanyId == currentUser.CompanyID).Select((t1, t2, t3) => new HistoryInventory
            {
                ID              = t2.ID,
                OrderNO         = t2.WarehousingOrderNo,
                MaterialId      = t1.MaterialId,
                BaseUnitId      = t3.BaseUnitId,
                OperateType     = 1,
                WarehouseId     = t1.WarehouseId,
                OpearateDate    = t2.WarehousingDate,
                TypeName        = "采购入库",
                InventoryType   = t2.WarehousingType,
                WarehouseAmount = t1.ActualNum,
                WarehouseUnitId = t3.WarehouseUnitId,
                WarehouseRate   = t3.WarehouseRate
            });


            //单位
            var unitList = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>(
                (t, t0) => new object[]
            {
                JoinType.Left, t.TypeId == t0.ID,
            }).Where((t, t0) => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID &&
                     SqlFunc.IsNull(t0.DeleteFlag, false) == false
                     ).ToList();

            //出入库数量
            var allCountOrgin = _db.Instance.UnionAll(otherOut, otherIn, profitDetail,
                                                      deficit, productionIn, productionOut, saleDetail, purchaseIn)
                                .Where(p => p.MaterialId == requestObject.MaterialId && p.WarehouseId == requestObject.WarehouseId);

            //排序条件
            if (requestObject.OrderByConditions != null && requestObject.OrderByConditions.Count > 0)
            {
                foreach (var item in requestObject.OrderByConditions)
                {
                    var exp = SqlSugarUtil.GetOrderByLambda <HistoryInventory>(item.Column);
                    if (exp == null)
                    {
                        continue;
                    }
                    if (item.Condition.ToLower() != "asc" &&
                        item.Condition.ToLower() != "desc")
                    {
                        continue;
                    }
                    allCountOrgin.OrderBy($"{item.Column} {item.Condition}");
                }
            }

            var allCount = allCountOrgin.AS("t101");


            int totalNum = -1;

            if (requestObject.IsPaging)
            {
                int skipNum = requestObject.PageSize * (requestObject.PageIndex - 1);
                result = await allCount.Skip(skipNum).Take(requestObject.PageSize).ToListAsync();

                totalNum = allCount.Count();
            }
            else
            {
                result = await allCount.ToListAsync();
            }
            result.ForEach((x) =>
            {
                var unit = unitList.Where(p => p.ID == x.WarehouseUnitId).FirstOrDefault();
                if (unit != null)
                {
                    x.WarehouseUnitName = unit.DicValue;
                }

                var basicunit = unitList.Where(p => p.ID == x.BaseUnitId).FirstOrDefault();
                if (basicunit != null)
                {
                    x.BaseUnitName = basicunit.DicValue;
                }
            });

            return(ResponseUtil <List <HistoryInventory> > .SuccessResult(result, totalNum));
        }
        public async Task <ResponseObject <List <HistoryInventory> > > History(HistoryInventoryQuery requestObject)
        {
            CurrentUser currentUser = TokenManager.GetCurentUserbyToken(HttpContext.Request.Headers);

            return(await _inventoryReportService.History(requestObject, currentUser));
        }