395 lines
18 KiB
C#
395 lines
18 KiB
C#
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Linq;
|
|
using System.Web.UI.WebControls;
|
|
|
|
namespace BLL
|
|
{
|
|
public class HJGL_MaterialService
|
|
{
|
|
/// <summary>
|
|
/// 工程预制库存
|
|
/// </summary>
|
|
public static List<Model.MaterialStockItem> materialStockItems_SHOP
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
/// <summary>
|
|
/// 现场安装库存
|
|
/// </summary>
|
|
public static List<Model.MaterialStockItem> materialStockItems_FIELD
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
/// <summary>
|
|
/// 获取材料信息
|
|
/// </summary>
|
|
/// <param name="UnitWorkId"></param>
|
|
/// <returns></returns>
|
|
public static Model.HJGL_MaterialManage GetMaterialByMaterialId(string MaterialId)
|
|
{
|
|
return Funs.DB.HJGL_MaterialManage.FirstOrDefault(e => e.MaterialId == MaterialId);
|
|
}
|
|
/// <summary>
|
|
/// 添加材料信息
|
|
/// </summary>
|
|
/// <param name="WPQ"></param>
|
|
public static void AddMaterial(Model.HJGL_MaterialManage Material)
|
|
{
|
|
Model.SGGLDB db = Funs.DB;
|
|
Model.HJGL_MaterialManage newMaterial = new Model.HJGL_MaterialManage();
|
|
newMaterial.MaterialId = Material.MaterialId;
|
|
newMaterial.ProjectId = Material.ProjectId;
|
|
newMaterial.ContractNo = Material.ContractNo;
|
|
newMaterial.UnitId = Material.UnitId;
|
|
newMaterial.MainItemId = Material.MainItemId;
|
|
newMaterial.MaterialName = Material.MaterialName;
|
|
newMaterial.SpecificationAndModel = Material.SpecificationAndModel;
|
|
newMaterial.MaterialCode = Material.MaterialCode;
|
|
newMaterial.Material = Material.Material;
|
|
newMaterial.PressClass = Material.PressClass;
|
|
newMaterial.Unit = Material.Unit;
|
|
newMaterial.Num = Material.Num;
|
|
newMaterial.ArrivalDate = Material.ArrivalDate;
|
|
newMaterial.CompileMan = Material.CompileMan;
|
|
newMaterial.CompileDate = Material.CompileDate;
|
|
db.HJGL_MaterialManage.InsertOnSubmit(newMaterial);
|
|
db.SubmitChanges();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改材料信息
|
|
/// </summary>
|
|
/// <param name="WPQ"></param>
|
|
public static void UpdateMaterial(Model.HJGL_MaterialManage Material)
|
|
{
|
|
Model.SGGLDB db = Funs.DB;
|
|
Model.HJGL_MaterialManage newMaterial = db.HJGL_MaterialManage.FirstOrDefault(e => e.MaterialId == Material.MaterialId);
|
|
if (newMaterial != null)
|
|
{
|
|
newMaterial.ContractNo = Material.ContractNo;
|
|
newMaterial.UnitId = Material.UnitId;
|
|
newMaterial.MainItemId = Material.MainItemId;
|
|
newMaterial.MaterialName = Material.MaterialName;
|
|
newMaterial.SpecificationAndModel = Material.SpecificationAndModel;
|
|
newMaterial.MaterialCode = Material.MaterialCode;
|
|
newMaterial.Material = Material.Material;
|
|
newMaterial.PressClass = Material.PressClass;
|
|
newMaterial.Unit = Material.Unit;
|
|
newMaterial.Num = Material.Num;
|
|
newMaterial.ArrivalDate = Material.ArrivalDate;
|
|
newMaterial.InspectionId = Material.InspectionId;
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 根据主键删除材料信息
|
|
/// </summary>
|
|
/// <param name="checkerId"></param>
|
|
public static void DeleteMaterialById(string MaterialId)
|
|
{
|
|
Model.SGGLDB db = Funs.DB;
|
|
Model.HJGL_MaterialManage Material = db.HJGL_MaterialManage.FirstOrDefault(e => e.MaterialId == MaterialId);
|
|
if (Material != null)
|
|
{
|
|
db.HJGL_MaterialManage.DeleteOnSubmit(Material);
|
|
db.SubmitChanges();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 工厂预制获取库存
|
|
/// </summary>
|
|
/// <param name="projectid"></param>
|
|
/// <param name="PipeArea"></param>
|
|
/// <returns></returns>
|
|
public static DataTable GetSHOPStockDt( string projectid)
|
|
{
|
|
string strSql = @" SELECT mat.MaterialCode,
|
|
lib.MaterialName,
|
|
lib.MaterialSpec,
|
|
lib.MaterialUnit,
|
|
sum( mat.Num)+ISNULL( aa.Num,
|
|
0) AS MaterialNum
|
|
FROM HJGL_MaterialManage mat
|
|
LEFT JOIN HJGL_MaterialCodeLib lib
|
|
ON mat.MaterialCode=lib.MaterialCode
|
|
LEFT JOIN
|
|
(SELECT stockused.MaterialCode,
|
|
stockused.MaterialName,
|
|
stockused.MaterialUnit,
|
|
stockused.MaterialSpec,
|
|
stockused.MaterialMade,
|
|
-sum( stockused.num) AS num
|
|
FROM
|
|
(SELECT lib.MaterialCode,
|
|
lib.MaterialName,
|
|
lib.MaterialUnit,
|
|
lib.MaterialSpec,
|
|
lib.MaterialMade,
|
|
-sum( pipe.Number) AS num
|
|
FROM dbo.HJGL_PipeLineMat pipe
|
|
LEFT JOIN HJGL_Pipeline_Component com
|
|
ON com.PipelineComponentCode =pipe.PrefabricatedComponents
|
|
LEFT JOIN HJGL_MaterialCodeLib lib
|
|
ON lib.MaterialCode = pipe.MaterialCode
|
|
WHERE com.ProductionState=1
|
|
GROUP BY lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, lib.MaterialSpec,lib.MaterialMade
|
|
UNION
|
|
SELECT lib.MaterialCode,
|
|
lib.MaterialName,
|
|
lib.MaterialUnit,
|
|
lib.MaterialSpec,
|
|
lib.MaterialMade,
|
|
-sum( pipe.Number) AS num
|
|
FROM dbo.HJGL_PipeLineMat pipe
|
|
LEFT JOIN HJGL_MaterialCodeLib lib
|
|
ON lib.MaterialCode = pipe.MaterialCode
|
|
LEFT JOIN HJGL_Pipeline line
|
|
ON pipe.PipelineId=line.PipelineId
|
|
LEFT JOIN View_HJGL_WeldJoint weldjoint
|
|
ON weldjoint.PipelineId=line.PipelineId
|
|
WHERE weldjoint.JointAttribute='安装口'
|
|
AND weldjoint .WeldingDailyId !=''
|
|
GROUP BY lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, lib.MaterialSpec,lib.MaterialMade ) AS stockused
|
|
GROUP BY stockused.MaterialCode,stockused.MaterialName,stockused.MaterialUnit,stockused.MaterialSpec,stockused.MaterialMade ) AS aa
|
|
ON mat.MaterialCode=aa.MaterialCode
|
|
WHERE mat.projectid=@projectid
|
|
GROUP BY mat.MaterialCode,lib.MaterialName,lib.MaterialSpec,lib.MaterialMade,lib.MaterialUnit,aa.num
|
|
|
|
";
|
|
List<SqlParameter> listStr = new List<SqlParameter>();
|
|
listStr.Add(new SqlParameter("@Projectid", projectid));
|
|
listStr.Add(new SqlParameter("@PipeArea", BLL.PipelineService.PipeArea_SHOP));
|
|
SqlParameter[] parameter = listStr.ToArray();
|
|
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
|
|
return tb;
|
|
}
|
|
public static DataTable GetFIELDStockDt(string projectid)
|
|
{
|
|
string strSql = @"
|
|
SELECT mat.MaterialCode,
|
|
lib.MaterialName,
|
|
lib.MaterialSpec,
|
|
lib.MaterialUnit,
|
|
sum( mat.Num)+ISNULL( aa.Num,
|
|
0) AS MaterialNum
|
|
FROM Material_Material mat
|
|
LEFT JOIN HJGL_MaterialCodeLib lib
|
|
ON mat.MaterialCode=lib.MaterialCode
|
|
LEFT JOIN Material_Inspection Ins
|
|
ON mat.InspectionId=Ins.InspectionId
|
|
LEFT JOIN
|
|
(SELECT stockused.MaterialCode,
|
|
stockused.MaterialName,
|
|
stockused.MaterialUnit,
|
|
stockused.MaterialSpec,
|
|
stockused.MaterialMade,
|
|
-sum( stockused.num) AS num
|
|
FROM
|
|
(SELECT lib.MaterialCode,
|
|
lib.MaterialName,
|
|
lib.MaterialUnit,
|
|
lib.MaterialSpec,
|
|
lib.MaterialMade,
|
|
-sum( pipe.Number) AS num
|
|
FROM dbo.HJGL_PipeLineMat pipe
|
|
LEFT JOIN HJGL_Pipeline_ComponentJoint comjoint
|
|
ON comjoint.PipelineComponentCode =pipe.PrefabricatedComponents
|
|
LEFT JOIN HJGL_MaterialCodeLib lib
|
|
ON lib.MaterialCode = pipe.MaterialCode
|
|
WHERE comjoint.State=1
|
|
GROUP BY lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, lib.MaterialSpec,lib.MaterialMade
|
|
UNION
|
|
SELECT lib.MaterialCode,
|
|
lib.MaterialName,
|
|
lib.MaterialUnit,
|
|
lib.MaterialSpec,
|
|
lib.MaterialMade,
|
|
-sum( pipe.Number) AS num
|
|
FROM dbo.HJGL_PipeLineMat pipe
|
|
LEFT JOIN HJGL_MaterialCodeLib lib
|
|
ON lib.MaterialCode = pipe.MaterialCode
|
|
LEFT JOIN HJGL_Pipeline line
|
|
ON pipe.PipelineId=line.PipelineId
|
|
LEFT JOIN View_HJGL_WeldJoint weldjoint
|
|
ON weldjoint.PipelineId=line.PipelineId
|
|
WHERE weldjoint.JointAttribute='安装口'
|
|
AND weldjoint .WeldingDailyId !=''
|
|
GROUP BY lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, lib.MaterialSpec,lib.MaterialMade ) AS stockused
|
|
GROUP BY stockused.MaterialCode,stockused.MaterialName,stockused.MaterialUnit,stockused.MaterialSpec,stockused.MaterialMade ) AS aa
|
|
ON mat.MaterialCode=aa.MaterialCode
|
|
WHERE mat.projectid=@Projectid
|
|
AND Ins.State=@State
|
|
GROUP BY mat.MaterialCode,lib.MaterialName,lib.MaterialSpec,lib.MaterialMade,lib.MaterialUnit,aa.num ";
|
|
List<SqlParameter> listStr = new List<SqlParameter>();
|
|
listStr.Add(new SqlParameter("@Projectid", projectid));
|
|
listStr.Add(new SqlParameter("@PipeArea", BLL.PipelineService.PipeArea_SHOP));
|
|
listStr.Add(new SqlParameter("@State", Const.Inspection_Complete));
|
|
SqlParameter[] parameter = listStr.ToArray();
|
|
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
|
|
return tb;
|
|
}
|
|
/// <summary>
|
|
/// 获取库存实体
|
|
/// </summary>
|
|
/// <param name="projectid"></param>
|
|
/// <param name="PipeArea">管线划分</param>
|
|
/// <returns></returns>
|
|
public static List<Model.MaterialStockItem> GetMaterialStockItems(string projectid, string PipeArea)
|
|
{
|
|
List<Model.MaterialStockItem> list = new List<Model.MaterialStockItem>();
|
|
DataTable dataTable = new DataTable();
|
|
switch (PipeArea)
|
|
{
|
|
case PipelineService.PipeArea_SHOP:
|
|
dataTable = GetSHOPStockDt(projectid);
|
|
break;
|
|
case PipelineService.PipeArea_FIELD:
|
|
dataTable = GetFIELDStockDt(projectid);
|
|
break;
|
|
}
|
|
if (dataTable!=null)
|
|
{
|
|
list =Funs.TableToEntity<Model.MaterialStockItem>(dataTable);
|
|
}
|
|
return list;
|
|
}
|
|
public static decimal GetStockNumByCode(string materialcode, string projectid, string PipeArea)
|
|
{
|
|
decimal num = 0;
|
|
|
|
var list = GetMaterialStockItems(projectid, PipeArea);
|
|
if (list!=null && list.Count>0)
|
|
{
|
|
var item = list.Where(x => x.MaterialCode == materialcode).FirstOrDefault();
|
|
if (item != null)
|
|
{
|
|
num = item.MaterialNum;
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
/// <summary>
|
|
/// 判断库存是否满足该数量的材料
|
|
/// </summary>
|
|
/// <param name="MaterialCode"></param>
|
|
/// <param name="num"></param>
|
|
/// <param name="projectid"></param>
|
|
/// <returns></returns>
|
|
public static bool isInStockByMaterialCode(string MaterialCode, decimal num,string PipeArea,string projectid)
|
|
{
|
|
bool state=false;
|
|
List<Model.MaterialStockItem> list = GetMaterialStockItems(projectid, PipeArea);
|
|
if (list != null && list.Count > 0)
|
|
{
|
|
var Material = list.Where(x => x.MaterialCode == MaterialCode).FirstOrDefault();
|
|
if (Material!=null)
|
|
{
|
|
var StockNum = Material.MaterialNum;
|
|
if (num<= StockNum)
|
|
{
|
|
state = true;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
return state;
|
|
|
|
}
|
|
/// <summary>
|
|
/// 判断库存是否满足此管线
|
|
/// </summary>
|
|
/// <param name="pipelineid"></param>
|
|
/// <param name="projectid"></param>
|
|
/// <returns></returns>
|
|
public static bool isInStockByPipeline(string pipelineid,string projectid)
|
|
{
|
|
bool state = true ;
|
|
try
|
|
{
|
|
var q = from x in Funs.DB.HJGL_PipeLineMat
|
|
where x.PipelineId == pipelineid
|
|
group x by x.MaterialCode into s
|
|
select new
|
|
{
|
|
MaterialCode = s.Key,
|
|
Number = s.Sum(p => p.Number)
|
|
};//获取管线所用材料
|
|
if (q != null && q.Count() > 0) //判断管线是否有关联材料
|
|
{
|
|
var pipemodel = BLL.PipelineService.GetPipelineByPipelineId(pipelineid);
|
|
List<Model.MaterialStockItem> materialStockItems = new List<Model.MaterialStockItem>();
|
|
if (pipemodel.PipeArea==PipelineService.PipeArea_SHOP)
|
|
{
|
|
if (HJGL_MaterialService.materialStockItems_SHOP.Count == 0)
|
|
{
|
|
HJGL_MaterialService.materialStockItems_SHOP = GetMaterialStockItems(projectid, pipemodel.PipeArea);
|
|
}
|
|
materialStockItems = materialStockItems_SHOP;
|
|
}
|
|
else if (pipemodel.PipeArea == PipelineService.PipeArea_FIELD)
|
|
{
|
|
if(HJGL_MaterialService.materialStockItems_FIELD.Count == 0)
|
|
{
|
|
HJGL_MaterialService.materialStockItems_FIELD = GetMaterialStockItems(projectid, pipemodel.PipeArea);
|
|
}
|
|
materialStockItems = materialStockItems_FIELD;
|
|
}
|
|
|
|
//List<Model.MaterialStockItem> materialStockItems = GetMaterialStockItems(projectid, pipemodel.PipeArea);
|
|
if (materialStockItems != null && materialStockItems.Count > 0) //判断是否有库存信息
|
|
{
|
|
foreach (var item in q)
|
|
{
|
|
var StockMater = materialStockItems.Where(x => x.MaterialCode == item.MaterialCode).FirstOrDefault();
|
|
if (StockMater != null) //判断该材料是否存在库存
|
|
{
|
|
var StockNum = StockMater.MaterialNum;
|
|
if ((decimal)item.Number > StockNum) //实际大于库存
|
|
{
|
|
state = false; //库存不足
|
|
return state;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
state = false; //库存不足
|
|
return state;
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
state = false; //库存不足
|
|
return state;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
state = false; //库存不足
|
|
return state;
|
|
}
|
|
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
|
|
state = false;
|
|
ErrLogInfo.WriteLog(ex.ToString ());
|
|
}
|
|
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
}
|
|
}
|