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 { /// /// 工程预制库存 /// public static List materialStockItems_SHOP { get; set; } /// /// 现场安装库存 /// public static List materialStockItems_FIELD { get; set; } /// /// 获取材料信息 /// /// /// public static Model.HJGL_MaterialManage GetMaterialByMaterialId(string MaterialId) { return Funs.DB.HJGL_MaterialManage.FirstOrDefault(e => e.MaterialId == MaterialId); } /// /// 添加材料信息 /// /// 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(); } /// /// 修改材料信息 /// /// 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(); } } /// /// 根据主键删除材料信息 /// /// 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(); } } /// /// 工厂预制获取库存 /// /// /// /// 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 listStr = new List(); 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 listStr = new List(); 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; } /// /// 获取库存实体 /// /// /// 管线划分 /// public static List GetMaterialStockItems(string projectid, string PipeArea) { List list = new List(); 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(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; } /// /// 判断库存是否满足该数量的材料 /// /// /// /// /// public static bool isInStockByMaterialCode(string MaterialCode, decimal num,string PipeArea,string projectid) { bool state=false; List 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; } /// /// 判断库存是否满足此管线 /// /// /// /// 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 materialStockItems = new List(); 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 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; } } }