SGGL_SHJ/SGGL/BLL/HJGL/PreDesign/HJGL_MaterialService.cs

325 lines
14 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 lib.MaterialCode,lib.MaterialName,lib.MaterialUnit,
lib.MaterialSpec,lib.MaterialMade,-sum( pipe.Number) as num
FROM dbo.HJGL_PipeLineMat pipe
LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode
LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId
WHERE line.PipeArea=@PipeArea and line.State=1
group by lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, lib.MaterialSpec,lib.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 lib.MaterialCode,lib.MaterialName,lib.MaterialUnit,
lib.MaterialSpec,lib.MaterialMade,-sum( pipe.Number) as num
FROM dbo.HJGL_PipeLineMat pipe
LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode
LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId
WHERE line.PipeArea=@PipeArea
group by lib.MaterialCode,lib.MaterialName,lib.MaterialUnit, lib.MaterialSpec,lib.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; //库存不足
}
}
else
{
state = false; //库存不足
}
}
}
else
{
state = false; //库存不足
}
}
else
{
state = false; //库存不足
}
}
catch (System.Exception ex)
{
state = false;
ErrLogInfo.WriteLog(ex.ToString ());
}
return state;
}
}
}