获取企业每个堆场的在库数量

This commit is contained in:
陈向学 2024-06-27 16:55:42 +08:00
parent d73f83e340
commit 1c52322414
5 changed files with 251 additions and 76 deletions

View File

@ -19,6 +19,8 @@ using System.Data;
using System.Collections.Generic;
using Maticsoft.Common;
using Competition.Mysql.Model;
using Competition.Mysql.Other;
using System.Reflection.Metadata;
namespace Competition.Mysql.BLL
{
/// <summary>
@ -148,10 +150,29 @@ namespace Competition.Mysql.BLL
return modelList;
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetAllList()
public List<Competition.Mysql.Other.YardStorageCheck> DataTableToList_YardStorageCheck(DataTable dt)
{
List<Competition.Mysql.Other.YardStorageCheck> modelList = new List<Competition.Mysql.Other.YardStorageCheck>();
int rowsCount = dt.Rows.Count;
if (rowsCount > 0)
{
Competition.Mysql.Other.YardStorageCheck model;
for (int n = 0; n < rowsCount; n++)
{
model = dal.DataRowToModel_YardStorageCheck(dt.Rows[n]);
if (model != null)
{
modelList.Add(model);
}
}
}
return modelList;
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetAllList()
{
return GetList("");
}
@ -190,6 +211,17 @@ namespace Competition.Mysql.BLL
DataSet ds = dal.GetYardStorage(siloCode);
return DataTableToList(ds.Tables[0]);
}
/// <summary>
/// 获取堆库存
/// </summary>
/// <param name="monotorid"></param>
/// <returns></returns>
public List<YardStorageCheck> GetYardLastStorage(string monotorid)
{
DataSet ds = dal.GetYardLastStorage(monotorid);
return DataTableToList_YardStorageCheck(ds.Tables[0]);
}
#endregion ExtensionMethod
}
}

View File

@ -583,10 +583,67 @@ namespace Competition.Mysql.DAL
return model;
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
public Competition.Mysql.Other.YardStorageCheck DataRowToModel_YardStorageCheck(DataRow row)
{
Competition.Mysql.Other.YardStorageCheck model = new Competition.Mysql.Other.YardStorageCheck();
if (row != null)
{
if (row["STORAGE_CODE"] != null && row["STORAGE_CODE"].ToString() != "")
{
model.STORAGE_CODE = new Guid(row["STORAGE_CODE"].ToString());
}
if (row["GOODS_CODE"] != null)
{
model.GOODS_CODE = row["GOODS_CODE"].ToString();
}
if (row["GOODS_TYPE"] != null && row["GOODS_TYPE"].ToString() != "")
{
model.GOODS_TYPE = int.Parse(row["GOODS_TYPE"].ToString());
}
if (row["STANDARD_NAME"] != null)
{
model.STANDARD_NAME = row["STANDARD_NAME"].ToString();
}
if (row["MONITOR_ID"] != null)
{
model.MONITOR_ID = row["MONITOR_ID"].ToString();
}
if (row["MONITOR_NAME"] != null)
{
model.MONITOR_NAME = row["MONITOR_NAME"].ToString();
}
if (row["CUSTOMS_CODE"] != null)
{
model.CUSTOMS_CODE = row["CUSTOMS_CODE"].ToString();
}
if (row["STOCK_BALANCE"] != null && row["STOCK_BALANCE"].ToString() != "")
{
model.STOCK_BALANCE = decimal.Parse(row["STOCK_BALANCE"].ToString());
}
if (row["INSTRG_DATE"] != null && row["INSTRG_DATE"].ToString() != "")
{
model.INSTRG_DATE = DateTime.Parse(row["INSTRG_DATE"].ToString());
}
if (row["STORAGE_SILO_CODE"] !=null && row["STORAGE_SILO_CODE"].ToString() != "")
{
model.STORAGE_SILO_CODE = new Guid(row["STORAGE_SILO_CODE"].ToString());
}
if (row["SILO_CODE"]!=null && row["SILO_CODE"].ToString()!="")
{
model.SILO_CODE = row["SILO_CODE"].ToString();
}
if (row["SILO_NAME"]!=null && row["SILO_NAME"].ToString()!="")
{
model.SILO_NAME = row["SILO_NAME"].ToString();
}
}
return model;
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select STORAGE_CODE,GOODS_CODE,GOODS_TYPE,STANDARD_NAME,MONITOR_ID,MONITOR_NAME,CUSTOMS_CODE,BILL_NO,TRAF_MODE,I_E_FLAG,VOYAGE_NO,SHIP_NAME_EN,DECL_NAME,I_E_DATE,SHIP_ID,BILL_GROSS_WT,TRADE_RELEASE,TRADE_UNRELEASE,STOCK_BALANCE,SHIPMENTS,INSTRG_DATE,LIMIT_DATE,CREATE_DATE,MODIFY_DATE,MEMO,FIELD_CHAR1,FIELD_CHAR2,FIELD_CHAR3,FIELD_DECIMAL1,FIELD_DECIMAL2,FIELD_DECIMAL3,GOODS_OWNERID,BILL_ORIGIN,PACK_NO_RELEASE,PACK_NO_UNRELEASE,SING_WT,SING_VL,BILL_GROSS_WT_NO,STOCK_BALANCE_NO,SHIPMENTS_NO,GOODSARRIVE_CODE,GOODSARRIVEDTL_CODE,GOODSARRIVE_BEGIN_TIME,GOODSARRIVE_END_TIME,IS_DIRECT,RELEASE_TYPE ");
@ -718,6 +775,22 @@ namespace Competition.Mysql.DAL
StringBuilder strSql = new StringBuilder();
strSql.Append(sql);
return DbHelperSQL.Query(strSql.ToString());
}
public DataSet GetYardLastStorage(string monitorid)
{
string sql = string.Format(
"select T1.STORAGE_CODE,T1.GOODS_CODE,T1.GOODS_TYPE,T1.STANDARD_NAME,T1.MONITOR_ID,T1.MONITOR_NAME,T1.CUSTOMS_CODE,T1.STOCK_BALANCE,T1.INSTRG_DATE,T2.STORAGE_SILO_CODE,T2.SILO_CODE,T2.SILO_NAME FROM "+
"(select * FROM T_STK_STORAGE where STOCK_BALANCE > 0 AND MONITOR_ID = '{0}') T1 "+
"INNER JOIN "+
"T_STK_STORAGE_SILO T2 "+
"ON T1.STORAGE_CODE = T2.STORAGE_CODE"
, monitorid);
StringBuilder strSql = new StringBuilder();
strSql.Append(sql);
return DbHelperSQL.Query(strSql.ToString());
}
#endregion ExtensionMethod

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Competition.Mysql.Other
{
public class YardStorageCheck
{
public Guid STORAGE_CODE;
public string GOODS_CODE;
public int GOODS_TYPE;
public string STANDARD_NAME;
public string MONITOR_ID;
public string MONITOR_NAME;
public string CUSTOMS_CODE;
public decimal STOCK_BALANCE;
public DateTime INSTRG_DATE;
public Guid STORAGE_SILO_CODE;
public string SILO_CODE;
public string SILO_NAME;
}
}

View File

@ -1,5 +1,6 @@
using Competition.Common.Util;
using Microsoft.AspNetCore.Mvc;
using NPOI.POIFS.Crypt.Dsig;
namespace CompetitionAPI.Controllers.api
{
@ -36,87 +37,99 @@ namespace CompetitionAPI.Controllers.api
var mysql = Configuration.GetConnectionString("MySQL").ToString();
//福州海关下的,本年度,按货种分类
var list_good = bll_good.GetModelList("");
var list = bll_storage.GetModelList("YEAR(INSTRG_DATE) = YEAR(GETDATE())").FindAll(a=> Tool.IsFuZhouCustom(a.CUSTOMS_CODE));
//var list = bll_storage.GetModelList("YEAR(INSTRG_DATE) = YEAR(GETDATE())").FindAll(a=> Tool.IsFuZhouCustom(a.CUSTOMS_CODE));
var list = bll_storage.GetModelList(string.Format("YEAR(INSTRG_DATE) = {0}",year)).FindAll(a => Tool.IsFuZhouCustom(a.CUSTOMS_CODE));
//总进出口重量
decimal allWT = 0;
//商品编号,重量
Dictionary<string,decimal> dic = new Dictionary<string,decimal>();
//所有商品按种类累计重量
list.ForEach(a =>
if(list.Count > 0)
{
allWT += a.BILL_GROSS_WT.Value;
if(!dic.ContainsKey(a.GOODS_CODE))
//商品编号,重量
Dictionary<string, decimal> dic = new Dictionary<string, decimal>();
//所有商品按种类累计重量
list.ForEach(a =>
{
dic.Add(a.GOODS_CODE,a.BILL_GROSS_WT.Value);
allWT += a.BILL_GROSS_WT.Value;
if (!dic.ContainsKey(a.GOODS_CODE))
{
dic.Add(a.GOODS_CODE, a.BILL_GROSS_WT.Value);
}
else
{
dic[a.GOODS_CODE] += a.BILL_GROSS_WT.Value;
}
});
var tmp = dic.OrderByDescending(a => a.Value).ToList();
//取前三个商品+其他
Dictionary<string, decimal> dic2 = new Dictionary<string, decimal>();
if (tmp.Count == 1)
{
//1种货物
dic2.Add(tmp[0].Key, tmp[0].Value);
}
else if (tmp.Count == 2)
{
//2种货物
dic2.Add(tmp[0].Key, tmp[0].Value);
dic2.Add(tmp[1].Key, tmp[1].Value);
}
else if (tmp.Count == 3)
{
//3种货物
dic2.Add(tmp[0].Key, tmp[0].Value);
dic2.Add(tmp[1].Key, tmp[1].Value);
dic2.Add(tmp[2].Key, tmp[2].Value);
}
else
{
dic[a.GOODS_CODE] += a.BILL_GROSS_WT.Value;
//大于三种
dic2.Add(tmp[0].Key, tmp[0].Value);
dic2.Add(tmp[1].Key, tmp[1].Value);
dic2.Add(tmp[2].Key, tmp[2].Value);
dic2.Add("other", 0);
//其他总和
decimal other = 0;
for (int i = 3; i < tmp.Count; i++)
{
other += tmp[i].Value;
}
dic2["other"] = other;
}
});
var tmp=dic.OrderByDescending(a => a.Value).ToList();
//取前三个商品+其他
Dictionary<string,decimal> dic2 = new Dictionary<string,decimal>();
if(tmp.Count==1)
{
//1种货物
dic2.Add(tmp[0].Key, tmp[0].Value);
}
else if(tmp.Count == 2)
{
//2种货物
dic2.Add(tmp[0].Key, tmp[0].Value);
dic2.Add(tmp[1].Key, tmp[1].Value);
}
else if(tmp.Count==3)
{
//3种货物
dic2.Add(tmp[0].Key, tmp[0].Value);
dic2.Add(tmp[1].Key, tmp[1].Value);
dic2.Add(tmp[2].Key, tmp[2].Value);
//构造分类数据
List<object> showData = new List<object>();
//临时索引
int index = 1;
dic2.Keys.ToList().ForEach(a =>
{
object lastTmp;
if (index <= 3)
{
//商品名称,重量,单位,占比
lastTmp = new { goodCode = a, goodName = list_good.Find(b => b.GOODS_CODE == a).STANDARD_NAME, wt = dic2[a], danWei = "kg", percent = dic2[a] / allWT };
}
else
{
lastTmp = new { goodName = "其他", wt = dic2[a], danWei = "kg", percent = dic2[a] / allWT };
}
showData.Add(lastTmp);
index++;
});
//响应数据
var data = new { allNum = list_good.Count, showData = showData };
return Json(Tool.GetJsonWithCode(APICode.Success, data));
}
else
{
//大于三种
dic2.Add(tmp[0].Key, tmp[0].Value);
dic2.Add(tmp[1].Key, tmp[1].Value);
dic2.Add(tmp[2].Key, tmp[2].Value);
dic2.Add("other", 0);
//其他总和
decimal other = 0;
for (int i = 3; i < tmp.Count; i++)
{
other += tmp[i].Value;
}
dic2["other"] = other;
//响应数据
var data = new { allNum = list_good.Count, showData = new List<object>() };
return Json(Tool.GetJsonWithCode(APICode.Success, data));
}
//构造分类数据
List<object> showData = new List<object>();
//临时索引
int index = 1;
dic2.Keys.ToList().ForEach(a =>
{
object lastTmp;
if (index <= 3)
{
//商品名称,重量,单位,占比
lastTmp = new { goodCode=a ,goodName = list_good.Find(b => b.GOODS_CODE == a).STANDARD_NAME, wt = dic2[a], danWei = "kg", percent = dic2[a] / allWT };
}
else
{
lastTmp = new { goodName = "其他", wt = dic2[a], danWei = "kg", percent = dic2[a] / allWT };
}
showData.Add(lastTmp);
index++;
});
//响应数据
var data = new { allNum= list_good.Count, showData = showData };
return Json(Tool.GetJsonWithCode(APICode.Success, data));
}
/// <summary>

View File

@ -102,6 +102,39 @@ namespace CompetitionAPI.Controllers.api
return Json(Tool.GetJsonWithCode(APICode.Success, list));
}
/// <summary>
/// 获取企业每个堆场的在库数量
/// </summary>
/// <param name="monitorId"></param>
/// <returns></returns>
[HttpGet]
public JsonResult GetYardLastStorage(string monitorId)
{
var mysql = Configuration.GetConnectionString("MySQL").ToString();
var list = bll_storage.GetYardLastStorage(monitorId);
//堆场id重量
Dictionary<string,decimal> dic=new Dictionary<string, decimal>();
//当库存放到多个堆场,看作平均分配货物
list.GroupBy(a => a.STORAGE_CODE).ToList().ForEach(a =>
{
//平均每份货物重量
decimal one = a.First().STOCK_BALANCE / a.Count();
foreach (YardStorageCheck item in a)
{
if(!dic.ContainsKey(item.SILO_CODE))
{
dic.Add(item.SILO_CODE, 0);
}
//累计
dic[item.SILO_CODE] += one;
}
});
return Json(Tool.GetJsonWithCode(APICode.Success, dic));
}
/// <summary>
/// 堆场模糊查询
/// </summary>