admin
11 小时以前 daf065f5894352e5b739c66fb6fa12d8d028d5c3
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -1,8 +1,10 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Net.WebSockets;
using System.Runtime.Intrinsics.X86;
using System.Security.Claims;
using System.Text;
@@ -14,6 +16,7 @@
using Model.ModelVm.SysVm;
using MySqlConnector;
using SqlSugar;
using Talk.Extensions;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllQualityEntity;
@@ -28,12 +31,155 @@
    public class StockServer : DbHelper<DataStock>, IStockServer
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
        public StockServer() : base(Db)
        {
        }
        /// <summary>
        /// 获取库存物料类型分布
        /// </summary>
        /// <returns></returns>
        public IEnumerable<IdNameNumRateDto> GetGoodsTypeFb()
        {
            string stockNumSql = $@"select a.Type,sum(b.num) as num
   from SysMaterials a
   inner join (select SkuNo,sum(Qty) as num from DataStockDetail where IsDel='0' group by SkuNo) b on b.SkuNo=a.SkuNo
   where a.IsDel='0'
   group by a.Type";
            DataTable stockNumDt = Db.Ado.GetDataTable(stockNumSql);
            var stockNumIE = stockNumDt.Rows.Cast<DataRow>().Select(e => new
            {
                typeName = e["Type"] + "",
                num = e["num"] + ""
            });
            //物料类型
            string goodsTypeSql = $@"select DictNo,DictName,0.00 as num
   from SysDictionary
   where IsDel='0' and ParentNo='MaterialType'
   order by Id";
            DataTable goodsTypeDt = Db.Ado.GetDataTable(goodsTypeSql);
            IEnumerable<IdNameNumRateDto> result = goodsTypeDt.Rows.Cast<DataRow>().Select(e => new IdNameNumRateDto
            {
                TypeId = e["DictNo"] + "",
                TypeName = e["DictName"] + "",
                TypeNum = Convert.ToDouble((stockNumIE.FirstOrDefault(f => f.typeName == e["DictNo"] + "") == null) ? "0.00" : stockNumIE.First(f => f.typeName == e["DictNo"] + "").num),
            });
            return result;
        }
        /// <summary>
        /// 获取库存质量状态分布
        /// </summary>
        /// <returns></returns>
        public IEnumerable<IdNameNumRateDto> GetQualityStatusFb()
        {
            string stockNumSql = $@"select InspectStatus,sum(Qty) as num
   from DataStockDetail
   where IsDel='0' and InspectStatus is not null
   group by InspectStatus";
            DataTable stockNumDt = Db.Ado.GetDataTable(stockNumSql);
            object totalObj = stockNumDt.Compute("sum(num)", "");
            var stockNumIE = stockNumDt.Rows.Cast<DataRow>().Select(e => new
            {
                typeName = e["InspectStatus"] + "",
                num = e["num"] + ""
            });
            //物料类型
            string inspectStatusSql = $@"select DictNo,DictName,0.00 as num,'0%' as rate
   from SysDictionary
   where IsDel='0' and ParentNo='InspectStatus'
   order by Id";
            DataTable goodsTypeDt = Db.Ado.GetDataTable(inspectStatusSql);
            foreach (DataRow dr in goodsTypeDt.Rows)
            {
                var stockNum = stockNumIE.FirstOrDefault(e => e.typeName == dr["DictNo"] + "");
                if (stockNum != null)
                {
                    dr["num"] = stockNum.num;
                    dr["rate"] = (stockNum.num.ToDouble() / Convert.ToDouble(totalObj) * 100.00).ToString("0.00") + "%";
                }
            }
            IEnumerable<IdNameNumRateDto> result = goodsTypeDt.Rows.Cast<DataRow>().Select(e => new IdNameNumRateDto
            {
                TypeId = e["DictNo"] + "",
                TypeName = e["DictName"] + "",
                TypeNum = Convert.ToDouble(e["num"]),
                TypeRate = e["rate"] + ""
            });
            return result;
        }
        /// <summary>
        /// 获取仓库状况总
        /// </summary>
        /// <returns></returns>
        public WarehouseStateDto GetWareHouseState()
        {
            //库区总数
            string houseNumSql = $@"select count(Id) as num
   from SysWareHouse
   where IsDel='0'";
            int houseNum = Db.Ado.GetInt(houseNumSql);
            //库位总数
            string stockNumSql = $@"select count(Id) as num
   from SysStorageLocat
   where IsDel='0'";
            int stockNum = Db.Ado.GetInt(stockNumSql);
            //已使用库位
            string stockUseNumSql = $@"select count(Id) as num
   from SysStorageLocat
   where IsDel='0' and Status='1'";
            int stockUseNum = Db.Ado.GetInt(stockUseNumSql);
            WarehouseStateDto result = new WarehouseStateDto()
            {
                WarehouseNum = houseNum + "",
                StockAllNum = stockNum + "",
                StockUseNum = stockUseNum + "",
                StockUseRate = ((double)stockUseNum / stockNum * 100.00).ToString("0.00") + "%"
            };
            return result;
        }
        /// <summary>
        /// 获取仓库详情
        /// </summary>
        /// <returns></returns>
        public IEnumerable<WarehouseUseDto> GetWareHouseStateInfo()
        {
            string stockUseSql = $@"select a.Id,a.WareHouseNo,a.WareHouseName,b.num as stockNum,c.num as useNum
   from SysWareHouse a
   left join (select WareHouseNo,count(Id) as num from SysStorageLocat where IsDel='0' group by WareHouseNo) b on b.WareHouseNo=a.WareHouseNo
   left join (select WareHouseNo,count(Id) as num from SysStorageLocat where IsDel='0' and Status='1' group by WareHouseNo) c on c.WareHouseNo=a.WareHouseNo
   where a.IsDel='0'
   order by a.WareHouseNo";
            DataTable stockUseDt = Db.Ado.GetDataTable(stockUseSql);
            IEnumerable<WarehouseUseDto> result = stockUseDt.Rows.Cast<DataRow>().Select(e => new WarehouseUseDto
            {
                WarehouseName = e["WareHouseName"] + "",
                StockAllNum = e["stockNum"] + "",
                StockUseNum = e["useNum"] + ""
            });
            return result;
        }
        #region 库存明细
        /// <summary>