using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Caching; using System.Web.UI.WebControls; namespace BLL { public class UnitWorkService { public static Model.SGGLDB db = Funs.DB; /// /// 添加单位工程信息 /// /// public static void AddUnitWork(Model.WBS_UnitWork UnitWork) { Model.SGGLDB db = Funs.DB; Model.WBS_UnitWork newUnitWork = new Model.WBS_UnitWork(); newUnitWork.UnitWorkId = UnitWork.UnitWorkId; newUnitWork.UnitWorkCode = UnitWork.UnitWorkCode; newUnitWork.UnitWorkName = UnitWork.UnitWorkName; newUnitWork.SuperUnitWork = UnitWork.SuperUnitWork; newUnitWork.IsChild = UnitWork.IsChild; newUnitWork.ProjectId = UnitWork.ProjectId; newUnitWork.ProjectType = UnitWork.ProjectType; newUnitWork.UnitId = UnitWork.UnitId; newUnitWork.SupervisorUnitId = UnitWork.SupervisorUnitId; newUnitWork.NDEUnit = UnitWork.NDEUnit; newUnitWork.Costs = UnitWork.Costs; newUnitWork.MainItemAndDesignProfessionalIds = UnitWork.MainItemAndDesignProfessionalIds; db.WBS_UnitWork.InsertOnSubmit(newUnitWork); db.SubmitChanges(); //GetWeights(UnitWork.ProjectId); } /// /// 修改单位工程信息 /// /// public static void UpdateUnitWork(Model.WBS_UnitWork UnitWork) { Model.SGGLDB db = Funs.DB; Model.WBS_UnitWork newUnitWork = db.WBS_UnitWork.FirstOrDefault(e => e.UnitWorkId == UnitWork.UnitWorkId); if (newUnitWork != null) { newUnitWork.UnitWorkId = UnitWork.UnitWorkId; newUnitWork.UnitWorkCode = UnitWork.UnitWorkCode; newUnitWork.UnitWorkName = UnitWork.UnitWorkName; newUnitWork.SuperUnitWork = UnitWork.SuperUnitWork; newUnitWork.IsChild = UnitWork.IsChild; newUnitWork.ProjectId = UnitWork.ProjectId; newUnitWork.ProjectType = UnitWork.ProjectType; newUnitWork.UnitId = UnitWork.UnitId; newUnitWork.SupervisorUnitId = UnitWork.SupervisorUnitId; newUnitWork.NDEUnit = UnitWork.NDEUnit; newUnitWork.Costs = UnitWork.Costs; newUnitWork.MainItemAndDesignProfessionalIds = UnitWork.MainItemAndDesignProfessionalIds; db.SubmitChanges(); } //GetWeights(UnitWork.ProjectId); //if (UnitWork.Costs != null) //{ // UpdateWBSCosts(UnitWork.UnitWorkId, Convert.ToDecimal(UnitWork.Costs)); //} } private static void GetWeights(string projectId) { Model.SGGLDB db = Funs.DB; decimal totalCosts = 0; var unitWorks = from x in db.WBS_UnitWork where x.ProjectId == projectId && x.Costs != null select x; foreach (var unitWork in unitWorks) { totalCosts += Convert.ToDecimal(unitWork.Costs); } foreach (var unitWork in unitWorks) { unitWork.Weights = unitWork.Costs / totalCosts * 100; db.SubmitChanges(); } var noCostUnitWorks = from x in db.WBS_UnitWork where x.ProjectId == projectId && x.Costs == null select x; foreach (var noCostUnitWork in noCostUnitWorks) { noCostUnitWork.Weights = null; db.SubmitChanges(); } } #region 更新计算单位工程WBS项的建安工程费 /// /// 更新计算单位工程WBS项的建安工程费 /// /// /// private static void UpdateWBSCosts(string unitWorkId, decimal costs) { Model.SGGLDB db = Funs.DB; var workPackages = from x in db.WBS_WorkPackage where x.UnitWorkId == unitWorkId && x.SuperWorkPackageId == null && x.IsApprove == true select x; foreach (var item in workPackages) { if (item.Weights != null) { item.Costs = item.Weights / 100 * costs; db.SubmitChanges(); UpdateWorkPackageCosts(item.WorkPackageId, Convert.ToDecimal(item.Costs)); } } } private static void UpdateWorkPackageCosts(string workPackageId, decimal costs) { Model.SGGLDB db = Funs.DB; var childWorkPackages = from x in db.WBS_WorkPackage where x.SuperWorkPackageId == workPackageId && x.IsApprove == true select x; if (childWorkPackages.Count() > 0) //存在子级 { foreach (var item in childWorkPackages) { if (item.Weights != null) { item.Costs = item.Weights / 100 * costs; db.SubmitChanges(); UpdateWorkPackageCosts(item.WorkPackageId, Convert.ToDecimal(item.Costs)); } } } else { //var controlItemAndCycles = from x in db.WBS_ControlItemAndCycle where x.WorkPackageId == workPackageId && x.IsApprove == true select x; //foreach (var item in controlItemAndCycles) //{ // if (item.Weights != null) // { // item.Costs = item.Weights / 100 * costs; // db.SubmitChanges(); // } //} } } #endregion /// /// 根据主键删除单位工程信息 /// /// public static void DeleteUnitWorkById(string UnitWorkId) { Model.SGGLDB db = Funs.DB; Model.WBS_UnitWork Unitwork = db.WBS_UnitWork.FirstOrDefault(e => e.UnitWorkId == UnitWorkId); if (Unitwork != null) { db.WBS_UnitWork.DeleteOnSubmit(Unitwork); db.SubmitChanges(); GetWeights(Unitwork.ProjectId); } } /// /// 获取单位工程信息 /// /// /// public static Model.WBS_UnitWork GetUnitWorkByUnitWorkId(string UnitWorkId) { return Funs.DB.WBS_UnitWork.FirstOrDefault(e => e.UnitWorkId == UnitWorkId); } public static Model.WBS_UnitWork GetUnitWorkByUnitWorkName(string projectId,string unitWorkName) { return Funs.DB.WBS_UnitWork.FirstOrDefault(e =>e.ProjectId ==projectId && e.UnitWorkName == unitWorkName); } /// /// 获取单位工程信息 /// /// /// public static Model.WBS_UnitWork GetUnitWorkByMainItemAndDesignProfessionalIds(string mainItemAndDesignProfessionalIds) { return Funs.DB.WBS_UnitWork.FirstOrDefault(e => e.MainItemAndDesignProfessionalIds.Contains(mainItemAndDesignProfessionalIds)); } /// /// 根据单位工程编号获取单位工程信息 /// /// /// public static List GetUnitWorkByUnitWorkCode(string UnitWorkCode) { return (from x in Funs.DB.WBS_UnitWork where x.UnitWorkCode == UnitWorkCode select x).ToList(); } /// /// 下拉框选择(获取 text value) /// /// /// public static string GetTextOrVal(string text, string val, string projectId) { string str = null; ListItem[] listitem = null; Cache cache = new Cache(); if (cache.Get("UnitWorkList") == null) { listitem = GetUnitWork(projectId); if (listitem.Count() > 0) { cache.Insert("UnitWorkList", listitem, null, DateTime.UtcNow.AddMinutes(10), TimeSpan.Zero, CacheItemPriority.Normal, null); } } else { listitem = (ListItem[])cache.Get("UnitWorkList"); } if (!string.IsNullOrWhiteSpace(text)) { foreach (var item in listitem) { if (text.Equals(item.Text)) { str = item.Value; } } } if (!string.IsNullOrWhiteSpace(val)) { foreach (var item in listitem) { if (val.Equals(item.Value)) { str = item.Text; } } } return str; } /// /// 获取单位工程名称项 /// /// 项目Id /// public static ListItem[] GetUnitWorkList(string projectId) { List q = (from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null orderby x.UnitWorkCode select x).ToList(); ListItem[] item = new ListItem[q.Count()]; for (int i = 0; i < q.Count(); i++) { item[i] = new ListItem((q[i].UnitWorkCode + "-" + q[i].UnitWorkName + GetProjectType(q[i].ProjectType)) ?? "", q[i].UnitWorkId.ToString()); } return item; } /// /// 根据工程类型获取名称 /// /// /// public static string GetProjectType(string projectType) { string name = string.Empty; if (projectType == "1") { name = "(建筑)"; } else if (projectType == "2") { name = "(安装)"; } return name; } /// /// 获取单位工程名称项 /// /// 项目Id /// public static List GetUnitWorkLists(string projectId) { return (from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null orderby x.UnitWorkCode select x).ToList(); } public static ListItem[] GetUnitWork(string projectId) { List q = (from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null orderby x.UnitWorkCode select x).ToList(); ListItem[] item = new ListItem[q.Count()]; for (int i = 0; i < q.Count(); i++) { item[i] = new ListItem((q[i].UnitWorkCode + "-" + q[i].UnitWorkName + GetProjectType(q[i].ProjectType)) ?? "", q[i].UnitWorkId.ToString()); } return item; } /// /// 获取单位名称 /// /// /// public static string GetNameById(string id) { string name = string.Empty; var UnitWork = Funs.DB.WBS_UnitWork.FirstOrDefault(x => x.UnitWorkId == id); if (UnitWork != null) { name = UnitWork.UnitWorkName + GetProjectType(UnitWork.ProjectType); } return name; } /// /// 单位工程表下拉框 /// /// 下拉框名字 /// 是否显示请选择 public static void InitUnitWorkDownList(FineUIPro.DropDownList dropName, string projectId, bool isShowPlease) { dropName.DataValueField = "Value"; dropName.DataTextField = "Text"; dropName.DataSource = BLL.UnitWorkService.GetUnitWorkList(projectId); dropName.DataBind(); if (isShowPlease) { Funs.FineUIPleaseSelect(dropName); } } /// /// 单位工程表下拉框 /// /// 下拉框名字 /// 是否显示请选择 public static void InitUnitWorkDownListByProjectType(FineUIPro.DropDownList dropName, string projectId, string projectType, bool isShowPlease) { dropName.DataValueField = "Value"; dropName.DataTextField = "Text"; dropName.DataSource = BLL.UnitWorkService.GetUnitWorkListByProjectType(projectId, projectType); dropName.DataBind(); if (isShowPlease) { Funs.FineUIPleaseSelect(dropName); } } /// /// 单位工程表下拉框 /// /// 下拉框名字 /// 是否显示请选择 public static void InitUnitWorkList(FineUIPro.DropDownList dropName, string projectId, bool isShowPlease) { dropName.DataValueField = "Text"; dropName.DataTextField = "Text"; dropName.DataSource = GetUnitWork(projectId); dropName.DataBind(); if (isShowPlease) { Funs.FineUIPleaseSelect(dropName); } } /// /// 根据项目id 获取单位工程 /// /// /// public static List GetUnitWorkListByPid(string projectId) { Model.SGGLDB db = Funs.DB; List q = (from x in db.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null orderby x.UnitWorkCode select x).ToList(); return q; } public static Model.WBS_UnitWork getUnitWorkByUnitWorkId(string UnitWorkId) { return Funs.DB.WBS_UnitWork.FirstOrDefault(e => e.UnitWorkId.ToString() == UnitWorkId); } public static List GetUnitWorkListByPidForApi(string projectId, string projectType) { string[] type = null; if (!string.IsNullOrEmpty(projectType)) type = projectType.Split(','); var unitWorks = from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && (type == null || type.Contains(x.ProjectType)) orderby x.UnitWorkCode select x; return unitWorks.ToList(); } /// /// 获取单位工程名称项 /// /// 项目Id /// public static ListItem[] GetUnitWorkListByProjectType(string projectId, string projectType) { List q = (from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null && x.ProjectType == projectType orderby x.UnitWorkCode select x).ToList(); ListItem[] item = new ListItem[q.Count()]; for (int i = 0; i < q.Count(); i++) { item[i] = new ListItem((q[i].UnitWorkCode + "-" + q[i].UnitWorkName + GetProjectType(q[i].ProjectType)) ?? "", q[i].UnitWorkId.ToString()); } return item; } /// /// 根据单位工程Id获取对应code的所有单位工程Id集合 /// /// /// public static string GetUnitWorkIdsByUnitWorkId(string unitWorkId) { string unitWorkIds = string.Empty; Model.WBS_UnitWork unitWork = GetUnitWorkByUnitWorkId(unitWorkId); if (unitWork != null) { var q = from x in Funs.DB.WBS_UnitWork where x.UnitWorkCode == unitWork.UnitWorkCode select x; foreach (var item in q) { unitWorkIds += item.UnitWorkId + ","; } } if (!string.IsNullOrEmpty(unitWorkIds)) { unitWorkIds = unitWorkIds.Substring(0, unitWorkIds.LastIndexOf(",")); } return unitWorkIds; } /// /// 根据单位工程类别获取单位工程 /// /// /// public static List GetUnitWorkDownList(string ProjectType, string ProjectId) { if (ProjectType == "1") { List lis = (from x in Funs.DB.WBS_UnitWork where x.ProjectType == "1" && x.ProjectId == ProjectId orderby x.UnitWorkCode select x).ToList(); return lis; } else if (ProjectType == "2") { List lis = (from x in Funs.DB.WBS_UnitWork where x.ProjectType == "2" && x.ProjectId == ProjectId orderby x.UnitWorkCode select x).ToList(); return lis; } else return null; } public static string GetUnitWorkName(string unitWorkIds) { string unitWorkName = string.Empty; if (!string.IsNullOrEmpty(unitWorkIds)) { string[] strs = unitWorkIds.Split(','); foreach (var item in strs) { var un = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(item); if (un != null) { unitWorkName += un.UnitWorkName + GetProjectType(un.ProjectType) + ","; } } if (!string.IsNullOrEmpty(unitWorkName)) { unitWorkName = unitWorkName.Substring(0, unitWorkName.LastIndexOf(",")); } } return unitWorkName; } /// /// 获取单位工程下拉列表 /// /// /// /// public static void InitUnitWorkDropDownList(FineUIPro.DropDownList dropName, string projectId, bool isShowPlease) { var unitWorks = from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null orderby x.UnitWorkCode select new { x.UnitWorkId, UnitWorkName = GetUnitWorkALLName(x.UnitWorkId) }; dropName.DataValueField = "UnitWorkId"; dropName.DataTextField = "UnitWorkName"; dropName.DataSource = unitWorks; dropName.DataBind(); if (isShowPlease) { Funs.FineUIPleaseSelect(dropName); } } /// /// 获取单位工程下拉列表 /// /// /// /// public static void InitUnitWorkNameDropDownList(FineUIPro.DropDownList dropName, string projectId, bool isShowPlease) { var unitWorks = from x in Funs.DB.WBS_UnitWork where x.ProjectId == projectId && x.SuperUnitWork == null orderby x.UnitWorkCode select new { x.UnitWorkId, UnitWorkName = GetUnitWorkALLName(x.UnitWorkId) }; dropName.DataValueField = "UnitWorkName"; dropName.DataTextField = "UnitWorkName"; dropName.DataSource = unitWorks; dropName.DataBind(); if (isShowPlease) { Funs.FineUIPleaseSelect(dropName); } } /// /// 获取单位工程名称 /// /// /// public static string GetUnitWorkALLName(string unitWorkId) { string name = string.Empty; var getu = Funs.DB.WBS_UnitWork.FirstOrDefault(x => x.UnitWorkId == unitWorkId && x.SuperUnitWork == null); if (getu != null) { if (!string.IsNullOrEmpty(getu.ProjectType)) { name = getu.UnitWorkName + "(" + Funs.GetUnitWorkType(getu.ProjectType) + ")"; } else { name = getu.UnitWorkName; } } return name; } /// /// 获取主项及设计专业名称 /// /// /// public static string GetMainItemAndDesignProfessionalName(string str, string projectId) { string name = string.Empty; Model.SGGLDB db = Funs.DB; var mainItems = from x in db.ProjectData_MainItem where x.ProjectId == projectId select x; var designProfessionals = from x in db.Base_DesignProfessional select x; if (!string.IsNullOrEmpty(str)) { string[] ids = str.Split(','); string mainItemId = string.Empty; foreach (var id in ids) { string[] strs = id.Split('|'); if (mainItemId != strs[0]) //新的主项内容 { if (!string.IsNullOrEmpty(name)) { name = name.Substring(0, name.Length - 1) + "),"; } var mainItem = mainItems.FirstOrDefault(x => x.MainItemId == strs[0]); if (mainItem != null) { name += mainItem.MainItemName + "("; } var designProfessional = designProfessionals.FirstOrDefault(x => x.DesignProfessionalId == strs[1]); if (designProfessional != null) { name += designProfessional.ProfessionalName + ","; } } else { var designProfessional = designProfessionals.FirstOrDefault(x => x.DesignProfessionalId == strs[1]); if (designProfessional != null) { name += designProfessional.ProfessionalName + ","; } } mainItemId = strs[0]; } if (!string.IsNullOrEmpty(name)) { name = name.Substring(0, name.Length - 1) + ")"; } } return name; } } }