| | |
| | | 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; |
| | |
| | | using Model.ModelVm.SysVm; |
| | | using MySqlConnector; |
| | | using SqlSugar; |
| | | using Talk.Extensions; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllQualityEntity; |
| | |
| | | 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> |