From daf065f5894352e5b739c66fb6fa12d8d028d5c3 Mon Sep 17 00:00:00 2001
From: admin <qiutairan163@163.com>
Date: 星期二, 11 十一月 2025 11:20:03 +0800
Subject: [PATCH] 首页库存和仓库
---
Wms/WMS.BLL/DataServer/StockServer.cs | 246 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 196 insertions(+), 50 deletions(-)
diff --git a/Wms/WMS.BLL/DataServer/StockServer.cs b/Wms/WMS.BLL/DataServer/StockServer.cs
index 2ecb669..093a005 100644
--- a/Wms/WMS.BLL/DataServer/StockServer.cs
+++ b/Wms/WMS.BLL/DataServer/StockServer.cs
@@ -1,8 +1,10 @@
锘縰sing 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,9 +31,152 @@
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;
}
@@ -50,7 +196,7 @@
/// <param name="wareHouseNo">鎵�灞炰粨搴�</param>
/// <param name="areaNo">鎵�灞炲尯鍩�</param>
/// <returns></returns>
- public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo,
+ public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo,
string ownerName, string lotNo, string status, string inspectStatus, string wareHouseNo, string areaNo)
{
Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
@@ -70,53 +216,53 @@
var data = Db.Queryable<DataStockDetail>().Where(item);
List<MateDataStockDto> data2;
- switch (selectType)
+ switch (selectType)
{
// 鎸夌墿鏂欑粺璁�
case "0":
- data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard })
- .Select(a => new MateDataStockDto()
- {
- SkuNo = a.SkuNo, //鐗╂枡缂栫爜
- SkuName = a.SkuName, //鐗╂枡鍚嶇О
- Standard = a.Standard, //瑙勬牸
- //LotNo = a.LotNo, //鎵规
- //LotText = a.LotText, //鎵规鎻忚堪
- //OwnerNo = a.OwnerNo, //璐т富缂栫爜
- //OwnerName = a.OwnerName, //璐т富鍚嶇О
- Status = status, //搴撳瓨鐘舵��
- InspectStatus = inspectStatus, //璐ㄦ鐘舵��
- Qty = SqlFunc.AggregateSumNoNull(a.Qty), //搴撳瓨鏁伴噺
- LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //閿佸畾鏁伴噺
- FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
- InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty)
- }).ToListAsync();
+ data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard })
+ .Select(a => new MateDataStockDto()
+ {
+ SkuNo = a.SkuNo, //鐗╂枡缂栫爜
+ SkuName = a.SkuName, //鐗╂枡鍚嶇О
+ Standard = a.Standard, //瑙勬牸
+ //LotNo = a.LotNo, //鎵规
+ //LotText = a.LotText, //鎵规鎻忚堪
+ //OwnerNo = a.OwnerNo, //璐т富缂栫爜
+ //OwnerName = a.OwnerName, //璐т富鍚嶇О
+ Status = status, //搴撳瓨鐘舵��
+ InspectStatus = inspectStatus, //璐ㄦ鐘舵��
+ Qty = SqlFunc.AggregateSumNoNull(a.Qty), //搴撳瓨鏁伴噺
+ LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //閿佸畾鏁伴噺
+ FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
+ InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty)
+ }).ToListAsync();
break;
// 鎸夋壒娆$粺璁�
case "1":
- data2 = await data.GroupBy(a => new { a.LotNo, a.LotText, a.SkuNo, a.SkuName, a.Standard })
- .Select(a => new MateDataStockDto()
- {
- SkuNo = a.SkuNo, //鐗╂枡缂栫爜
- SkuName = a.SkuName, //鐗╂枡鍚嶇О
- Standard = a.Standard, //瑙勬牸
- LotNo = a.LotNo, //鎵规
- LotText = a.LotText, //鎵规鎻忚堪
- //OwnerNo = a.OwnerNo, //璐т富缂栫爜
- //OwnerName = a.OwnerName, //璐т富鍚嶇О
- Status = status, //搴撳瓨鐘舵��
- InspectStatus = inspectStatus, //璐ㄦ鐘舵��
- Qty = SqlFunc.AggregateSumNoNull(a.Qty), //搴撳瓨鏁伴噺
- LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //閿佸畾鏁伴噺
- FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
- InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty)
- }).ToListAsync();
+ data2 = await data.GroupBy(a => new { a.LotNo, a.LotText, a.SkuNo, a.SkuName, a.Standard })
+ .Select(a => new MateDataStockDto()
+ {
+ SkuNo = a.SkuNo, //鐗╂枡缂栫爜
+ SkuName = a.SkuName, //鐗╂枡鍚嶇О
+ Standard = a.Standard, //瑙勬牸
+ LotNo = a.LotNo, //鎵规
+ LotText = a.LotText, //鎵规鎻忚堪
+ //OwnerNo = a.OwnerNo, //璐т富缂栫爜
+ //OwnerName = a.OwnerName, //璐т富鍚嶇О
+ Status = status, //搴撳瓨鐘舵��
+ InspectStatus = inspectStatus, //璐ㄦ鐘舵��
+ Qty = SqlFunc.AggregateSumNoNull(a.Qty), //搴撳瓨鏁伴噺
+ LockQty = SqlFunc.AggregateSumNoNull(a.LockQty), //閿佸畾鏁伴噺
+ FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
+ InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty)
+ }).ToListAsync();
break;
// 鎸夎川妫�鐘舵�佺粺璁�
case "2":
- data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard,a.InspectStatus})
+ data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard, a.InspectStatus })
.Select(a => new MateDataStockDto()
{
SkuNo = a.SkuNo, //鐗╂枡缂栫爜
@@ -133,7 +279,7 @@
FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty),
}).ToListAsync();
- break;
+ break;
// 鎸夎揣涓荤粺璁�
case "3":
@@ -154,11 +300,11 @@
FrozenQty = SqlFunc.AggregateSumNoNull(a.LockQty),
InspectQty = SqlFunc.AggregateSumNoNull(a.InspectQty),
}).ToListAsync();
- break;
+ break;
// 榛樿缁熻锛堢墿鏂� 鎵规 璐ㄦ 搴撳瓨鐘舵�� 璐т富)
default:
- data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard ,a.LotNo, a.LotText, a.OwnerNo, a.OwnerName , a.InspectStatus })
+ data2 = await data.GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard, a.LotNo, a.LotText, a.OwnerNo, a.OwnerName, a.InspectStatus })
.Select(a => new MateDataStockDto()
{
SkuNo = a.SkuNo, //鐗╂枡缂栫爜
@@ -348,9 +494,9 @@
.GroupBy(a => new { a.LotNo, a.SkuNo, a.SkuName })
.Select(a => new TotalRecordDto()
{
- LotNo=a.LotNo,
- SkuNo=a.SkuNo,
- SkuName=a.SkuName,
+ LotNo = a.LotNo,
+ SkuNo = a.SkuNo,
+ SkuName = a.SkuName,
RQty = SqlFunc.AggregateSumNoNull(a.Qty),
RFactQty = (decimal)SqlFunc.AggregateSum(a.FactQty),
RCompleteQty = (decimal)SqlFunc.AggregateSum(a.CompleteQty),
@@ -435,22 +581,22 @@
/// <param name="startTime">寮�濮嬫椂闂�</param>
/// <param name="endTime">缁撴潫鏃堕棿</param>
/// <returns></returns>
- public List<TotalRecordDto> GetDetailedRecord(string skuNo, string skuName, string lotNo, string palletNo,string startTime, string endTime)
+ public List<TotalRecordDto> GetDetailedRecord(string skuNo, string skuName, string lotNo, string palletNo, string startTime, string endTime)
{
// 鑾峰彇鍏ュ簱鍗曟槑缁嗕俊鎭�
- var asnList = Db.Queryable<BllPalletBind,BllArrivalNoticeDetail>
- ((tb1,tb2)=>new JoinQueryInfos(
+ var asnList = Db.Queryable<BllPalletBind, BllArrivalNoticeDetail>
+ ((tb1, tb2) => new JoinQueryInfos(
JoinType.Left, tb1.ASNDetailNo == tb2.Id
))
- .Where((tb1,tb2) => tb1.IsDel == "0" && tb2.IsDel == "0")
+ .Where((tb1, tb2) => tb1.IsDel == "0" && tb2.IsDel == "0")
.WhereIF(!string.IsNullOrWhiteSpace(startTime), tb1 => tb1.CompleteTime >= Convert.ToDateTime(startTime))
.WhereIF(!string.IsNullOrWhiteSpace(endTime), tb1 => tb1.CompleteTime <= Convert.ToDateTime(endTime).AddDays(1))
.WhereIF(!string.IsNullOrEmpty(palletNo), tb1 => tb1.PalletNo.Contains(palletNo))
- .WhereIF(!string.IsNullOrEmpty(skuNo), (tb1,tb2) => tb2.SkuNo.Contains(skuNo))
+ .WhereIF(!string.IsNullOrEmpty(skuNo), (tb1, tb2) => tb2.SkuNo.Contains(skuNo))
.WhereIF(!string.IsNullOrEmpty(skuName), (tb1, tb2) => tb2.SkuName.Contains(skuName))
.WhereIF(!string.IsNullOrEmpty(lotNo), (tb1, tb2) => tb2.LotNo.Contains(lotNo))
//.GroupBy((tb1,tb2) => new { tb2.LotNo, tb2.SkuNo, tb2.SkuName })
- .Select((tb1,tb2) => new TotalRecordDto()
+ .Select((tb1, tb2) => new TotalRecordDto()
{
ASNNo = tb2.ASNNo,
LotNo = tb1.LotNo,
@@ -463,7 +609,7 @@
CompleteTime = tb2.CreateTime,
LotText = tb1.LotText,
SupplierLot = tb2.SupplierLot,
-
+
SONo = "",
CTaskNo = "",
CCreateTime = null,
--
Gitblit v1.8.0