293 lines
13 KiB
C#
293 lines
13 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>
|
|
/// <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.MaterialMade,
|
|
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.MaterialMade,
|
|
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> list = GetMaterialStockItems(projectid, pipemodel.PipeArea);
|
|
if (list != null && list.Count > 0) //判断是否有库存信息
|
|
{
|
|
foreach (var item in q)
|
|
{
|
|
var StockMater = list.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;
|
|
|
|
}
|
|
|
|
}
|
|
}
|