From 24fffc56780f738d772dfcbd9d974e3f1aa2774b Mon Sep 17 00:00:00 2001 From: geh <1923421292@qq.com> Date: Fri, 9 Jan 2026 15:36:54 +0800 Subject: [PATCH] 11 --- .../SUBQHSE_V2026-01-08-gh(考勤预警).sql | 6 + SGGL/BLL/JDGL/SGManPower/SGManPowerService.cs | 207 +++++++++++++- .../JDGL/SGManPower/SGWarningDetails.aspx | 141 +++++----- .../JDGL/SGManPower/SGWarningDetails.aspx.cs | 254 ++++++++++++------ .../SGWarningDetails.aspx.designer.cs | 44 +-- .../SGManPower/SGWarningDetailsEdit.aspx.cs | 2 +- SGGL/FineUIPro.Web/WorkBench.aspx.cs | 7 +- 7 files changed, 471 insertions(+), 190 deletions(-) diff --git a/DataBase/版本日志/SUBQHSE_V2026-01-08-gh(考勤预警).sql b/DataBase/版本日志/SUBQHSE_V2026-01-08-gh(考勤预警).sql index 6a90e1a0..4f6bbc82 100644 --- a/DataBase/版本日志/SUBQHSE_V2026-01-08-gh(考勤预警).sql +++ b/DataBase/版本日志/SUBQHSE_V2026-01-08-gh(考勤预警).sql @@ -1,3 +1,9 @@ +DROP VIEW IF EXISTS View_EmployInOutRecord; + + + + + ---考勤预警表 CREATE TABLE [dbo].[SGManPower_WarningResult] ( [WarningId] nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL, diff --git a/SGGL/BLL/JDGL/SGManPower/SGManPowerService.cs b/SGGL/BLL/JDGL/SGManPower/SGManPowerService.cs index cc3a40a8..481ac3ef 100644 --- a/SGGL/BLL/JDGL/SGManPower/SGManPowerService.cs +++ b/SGGL/BLL/JDGL/SGManPower/SGManPowerService.cs @@ -542,13 +542,15 @@ namespace BLL private static IEnumerable GetWarningItemsFromTable(string projectId) { - var strSql = @"SELECT * FROM SGManPower_WarningResult + var strSql = @"SELECT UnitId,WarningType,SUM(PlanQuantity) as SumPlanQuantity, SUM(ActualQuantity) as SumActualQuantity FROM SGManPower_WarningResult WHERE ProjectId = @ProjectId "; var parameters = new List { new System.Data.SqlClient.SqlParameter("@ProjectId", projectId) }; + + strSql += " GROUP BY UnitId,WarningType "; var dt = SQLHelper.GetDataTableRunText(strSql, parameters.ToArray()); var warningItems = new List(); @@ -557,26 +559,209 @@ namespace BLL { var warningType = row["WarningType"].ToString(); var unitId = row["UnitId"].ToString(); - var workPostId = row["WorkPostId"].ToString(); - var unitWorkId = row["UnitWorkId"].ToString(); - var startDate = Convert.ToDateTime(row["StartDate"]); - var endDate = Convert.ToDateTime(row["EndDate"]); - var planQuantity = Convert.ToInt32(row["PlanQuantity"]); - var actualQuantity = Convert.ToInt32(row["ActualQuantity"]); + // var workPostId = row["WorkPostId"].ToString(); + // var unitWorkId = row["UnitWorkId"].ToString(); + // var startDate = Convert.ToDateTime(row["StartDate"]); + // var endDate = Convert.ToDateTime(row["EndDate"]); + var planQuantity = Convert.ToInt32(row["SumPlanQuantity"]); + var actualQuantity = Convert.ToInt32(row["SumActualQuantity"]); if (warningType == "Shortage") { - warningItems.AddRange(SendManagerWarning(unitId, projectId, workPostId, unitWorkId, - startDate, endDate, planQuantity, actualQuantity)); + warningItems.AddRange(SendManagerWarning(unitId, projectId,warningType, planQuantity, actualQuantity)); } else if (warningType == "Deviation") { - warningItems.AddRange(SendWorkerDeviationWarning(unitId, projectId, workPostId, unitWorkId, - startDate, endDate, planQuantity, actualQuantity)); + warningItems.AddRange(SendWorkerDeviationWarning(unitId, projectId,warningType, planQuantity, actualQuantity)); } } return warningItems; } + + + private static List SendManagerWarning(string unitId, string projectId,string warningType, int? quantity, int num) + { + // 发送预警信息 + var toDoItems = new List(); + + var projectUnits = (from x in Funs.DB.Project_ProjectUnit + join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId + where x.UnitId == unitId + select new { x.UnitId, y.UnitName, x.UnitType }).FirstOrDefault(); + if (projectUnits != null) + { + List toUserIds = new List(); + + // 施工单位人员推送至施工单位项目经理和总包单位施工经理 + if (projectUnits.UnitType == Const.ProjectUnitType_2) // 施工分包单位 + { + // 获取施工单位项目经理 + var constructionManagers = (from x in Funs.DB.Project_ProjectUser + where x.ProjectId == projectId && x.UnitId == unitId && x.IsPost == true && + x.RoleId.Contains(Const.ProjectManager) + select x).ToList(); + + if (constructionManagers.Count > 0) + { + foreach (var projectUser in constructionManagers) + { + toUserIds.Add(projectUser.UserId); + } + } + + // 获取总包单位施工经理 + var generalContractorUnit = Funs.DB.Project_ProjectUnit.FirstOrDefault(pu => + pu.ProjectId == projectId && pu.UnitType == Const.ProjectUnitType_1); // 总包单位 + + if (generalContractorUnit != null) + { + var constructionManagerGCs = (from x in Funs.DB.Project_ProjectUser + where x.ProjectId == projectId && x.UnitId == generalContractorUnit.UnitId && + x.IsPost == true && x.RoleId.Contains(Const.ConstructionManager) + select x).ToList(); + if (constructionManagerGCs.Count > 0) + { + foreach (var projectUser in constructionManagerGCs) + { + toUserIds.Add(projectUser.UserId); + } + } + } + } + // 总包单位人员推送到总包单位施工经理和项目经理 + else if (projectUnits.UnitType == Const.ProjectUnitType_1) // 总包单位 + { + // 获取总包单位施工经理 + var constructionManagers = (from x in Funs.DB.Project_ProjectUser + where x.ProjectId == projectId && x.UnitId == unitId && x.IsPost == true && + x.RoleId.Contains(Const.ConstructionManager) + select x).ToList(); + if (constructionManagers.Count() > 0) + { + foreach (var projectUser in constructionManagers) + { + toUserIds.Add(projectUser.UserId); + } + } + + // 获取总包单位项目经理 + var projectManagers = (from x in Funs.DB.Project_ProjectUser + where x.ProjectId == projectId && x.UnitId == unitId && x.IsPost == true && + x.RoleId.Contains(Const.ProjectManager) + select x).ToList(); + if (projectManagers.Count() > 0) + { + foreach (var projectUser in projectManagers) + { + toUserIds.Add(projectUser.UserId); + } + } + } + + string warningContent = $"{projectUnits.UnitName}单位计划投入人力{quantity}人,实际考勤为{num}人。"; + + string urlParams = "JDGL/SGManPower/SGWarningDetails.aspx?projectId=" + projectId; + // 添加单位参数 + if (!string.IsNullOrEmpty(warningType)) + { + urlParams += "&warningType=" + warningType; + } + + foreach (var userId in toUserIds) + { + Model.ToDoItem toDoItem = new Model.ToDoItem(); + toDoItem.DataId = SQLHelper.GetNewID(typeof(Model.ToDoItem)); + toDoItem.MenuId = ""; + toDoItem.MenuName = "管理人员到岗预警"; + toDoItem.ProjectCode = ""; + toDoItem.Content = warningContent; + toDoItem.UserId = userId; + toDoItem.UserName = UserService.GetUserNameByUserId(userId); + toDoItem.DataTime = DateTime.Now; + toDoItem.DataTimeStr = DateTime.Now.ToString("yyyy-MM-dd"); + toDoItem.PCUrl = urlParams; + toDoItems.Add(toDoItem); + } + } + + return toDoItems; + } + + + private static List SendWorkerDeviationWarning(string unitId, string projectId,string warningType, int? quantity, int num) + { + // 发送预警信息 + var toDoItems = new List(); + List toUserIds = new List(); + + + var projectUnits = (from x in Funs.DB.Project_ProjectUnit + join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId + where x.UnitId == unitId + select new { x.UnitId, y.UnitName, x.UnitType }).FirstOrDefault(); + + // 获取施工单位项目经理 + var constructionManagers = (from x in Funs.DB.Project_ProjectUser + where x.ProjectId == projectId && x.UnitId == unitId && x.IsPost == true && + x.RoleId.Contains(Const.ProjectManager) + select x).ToList(); + + if (constructionManagers.Count > 0) + { + foreach (var projectUser in constructionManagers) + { + toUserIds.Add(projectUser.UserId); + } + } + + // 获取总包单位施工经理 + var generalContractorUnit = Funs.DB.Project_ProjectUnit.FirstOrDefault(pu => + pu.ProjectId == projectId && pu.UnitType == Const.ProjectUnitType_1); // 总包单位 + + if (generalContractorUnit != null) + { + var constructionManagerGCs = (from x in Funs.DB.Project_ProjectUser + where x.ProjectId == projectId && x.UnitId == generalContractorUnit.UnitId && + x.IsPost == true && x.RoleId.Contains(Const.ConstructionManager) + select x).ToList(); + if (constructionManagerGCs.Count > 0) + { + foreach (var projectUser in constructionManagerGCs) + { + toUserIds.Add(projectUser.UserId); + } + } + } + + // 构建预警信息内容 + string warningContent = $"{projectUnits.UnitName}单位计划投入人力{quantity}人,实际考勤为{num}人。"; + + string urlParams = "JDGL/SGManPower/SGWarningDetails.aspx?projectId=" + projectId; + // 添加单位参数 + if (!string.IsNullOrEmpty(warningType)) + { + urlParams += "&warningType=" + warningType; + } + + // 发送预警信息 + foreach (var userId in toUserIds) + { + Model.ToDoItem toDoItem = new Model.ToDoItem(); + toDoItem.DataId = SQLHelper.GetNewID(typeof(Model.ToDoItem)); + toDoItem.MenuId = ""; + toDoItem.MenuName = "人力资源偏差预警"; + toDoItem.ProjectCode = ""; + toDoItem.Content = warningContent; + toDoItem.UserId = userId; + toDoItem.UserName = UserService.GetUserNameByUserId(userId); + toDoItem.DataTime = DateTime.Now; + toDoItem.DataTimeStr = DateTime.Now.ToString("yyyy-MM-dd"); + toDoItem.PCUrl = urlParams; + toDoItems.Add(toDoItem); + } + + return toDoItems; + } } } \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx index 991a3074..b28d4da0 100644 --- a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx +++ b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx @@ -10,75 +10,80 @@
- - + + + + + + + + + + + + + + + + + + + + + + + + + <%-- --%> + <%-- --%> + <%-- --%> + <%-- --%> + <%-- --%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%-- - - - - --%> - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.cs b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.cs index 52312655..6591e4e3 100644 --- a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.cs +++ b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.cs @@ -1,5 +1,8 @@ using BLL; using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; using System.Linq; @@ -18,40 +21,12 @@ namespace FineUIPro.Web.JDGL.SGManPower set { ViewState["ProjectId"] = value; } } - public string UnitId + public string WarningType { - get => (string)ViewState["UnitId"]; - set => ViewState["UnitId"] = value; + get => (string)ViewState["WarningType"]; + set => ViewState["WarningType"] = value; } - public string UnitWorkId - { - get => (string)ViewState["UnitWorkId"]; - set => ViewState["UnitWorkId"] = value; - } - - public string WorkPostId - { - get => (string)ViewState["WorkPostId"]; - set => ViewState["WorkPostId"] = value; - } - public string PlanDate - { - get => (string)ViewState["PlanDate"]; - set => ViewState["PlanDate"] = value; - } - - public string Quantity - { - get => (string)ViewState["Quantity"]; - set => ViewState["Quantity"] = value; - } - - public string Num - { - get => (string)ViewState["Num"]; - set => ViewState["Num"] = value; - } #endregion @@ -59,65 +34,170 @@ namespace FineUIPro.Web.JDGL.SGManPower { if (!IsPostBack) { - this.btnClose.OnClientClick = ActiveWindow.GetHideReference(); + Funs.DropDownPageSize(this.ddlPageSize); + ddlPageSize.SelectedValue = Grid1.PageSize.ToString(); this.ProjectId = Request.Params["projectId"]; - this.UnitId = Request.Params["unitId"]; - this.UnitWorkId = Request.Params["unitWorkId"]; - this.WorkPostId = Request.Params["workPostId"]; - this.PlanDate = Request.Params["planDate"]; - this.Quantity = Request.Params["quantity"]; - this.Num = Request.Params["num"]; - if (!string.IsNullOrEmpty(ProjectId)) - { - var project = BLL.ProjectService.GetProjectByProjectId(ProjectId); //项目 - if (project != null) - { - this.lProject.Text = project.ProjectName; - } - } + this.WarningType = Request.Params["warningType"]; + // 绑定表格 + BindGrid(); - if (!string.IsNullOrEmpty(UnitId)) - { - var unit = BLL.UnitService.GetUnitByUnitId(UnitId); //单位 - if (unit != null) - { - this.lUnit.Text = unit.UnitName; - } - } - - if (!string.IsNullOrEmpty(UnitWorkId)) - { - var unitWork = BLL.UnitWorkService.GetUnitWorkByUnitWorkId(UnitWorkId); //单位工程(装置) - if (unitWork != null) - { - this.lUnitWork.Text = unitWork.UnitWorkName; - } - } - - if (!string.IsNullOrEmpty(WorkPostId)) - { - var workPost = BLL.WorkPostService.GetWorkPostById(WorkPostId); //岗位 - if (workPost != null) - { - this.lWorkPost.Text = workPost.WorkPostName; - } - } - - if (!string.IsNullOrEmpty(PlanDate)) - { - this.lPlanDate.Text = PlanDate; - } - - if (!string.IsNullOrEmpty(Quantity)) - { - this.lQuantity.Text = Quantity; - } - - if (!string.IsNullOrEmpty(Num)) - { - this.lNumber.Text = Num; - } } } + + + private void BindGrid() + { + string strSql = + @"SELECT * from SGManPower_WarningResult where 1=1 "; + List listStr = new List(); + + if (!string.IsNullOrEmpty(this.ProjectId)) + { + strSql += " AND ProjectId = @ProjectId "; + listStr.Add(new SqlParameter("@ProjectId", this.ProjectId)); + } + + if (!string.IsNullOrEmpty(this.WarningType)) + { + strSql += " AND WarningType = @WarningType "; + listStr.Add(new SqlParameter("@WarningType", this.WarningType)); + } + + strSql += " ORDER BY UnitId"; + + SqlParameter[] parameter = listStr.ToArray(); + DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); + Grid1.RecordCount = tb.Rows.Count; + var table = this.GetPagedDataTable(Grid1, tb); + Grid1.DataSource = table; + Grid1.DataBind(); + + + } + + + /// + /// 右键编辑事件 + /// + /// + /// + protected void btnMenuView_Click(object sender, EventArgs e) + { + this.EditData(); + } + + /// + /// 编辑数据方法 + /// + private void EditData() + { + if (Grid1.SelectedRowIndexArray.Length == 0) + { + Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning); + return; + } + + var result = Funs.DB.SGManPower_WarningResult.FirstOrDefault(x => x.WarningId == Grid1.SelectedRowID); + + + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("SGWarningDetailsEdit.aspx?projectId={0}&unitId={1}&unitWorkId={2}&workPostId={3}&startTime={4}&endTime={5}", result.ProjectId, result.UnitId, result.UnitWorkId, result.WorkPostId, result.StartDate, result.EndDate, "编辑 - "))); + } + + #region 分页、关闭窗口 + + /// + /// 分页 + /// + /// + /// + protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) + { + Grid1.PageIndex = e.NewPageIndex; + BindGrid(); + } + + /// + /// 分页显示条数下拉框 + /// + /// + /// + protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) + { + Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); + BindGrid(); + } + + /// + /// 排序 + /// + /// + /// + protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e) + { + BindGrid(); + } + + #endregion + + + #region 格式化字符串 + + /// + /// 格式化受伤情况 + /// + /// + /// + protected string ConvertWorkPostName(object workPostId) + { + string name = string.Empty; + if (workPostId != null) + { + name = BLL.WorkPostService.getWorkPostNameById(workPostId.ToString()); + } + + return name; + } + + protected string ConvertUnitName(object unitId) + { + string name = string.Empty; + if (unitId != null) + { + name = UnitService.GetUnitNameByUnitId(unitId); + } + + return name; + } + + /// + /// 格式装置 + /// + /// + /// + protected string ConvertUnitWorkName(object unitWorkId) + { + string name = string.Empty; + if (unitWorkId != null) + { + name = BLL.UnitWorkService.GetNameById(unitWorkId.ToString()); + } + + return name; + } + + + // 在页面中添加格式化方法 + protected string ConvertBiasPercent(object biasValue) + { + if (biasValue != null && decimal.TryParse(biasValue.ToString(), out decimal value)) + { + return (value * 100).ToString("F2") + "%"; + } + return "0.00%"; + } + + #endregion + + } } \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.designer.cs b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.designer.cs index 65812cdb..34352dc0 100644 --- a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetails.aspx.designer.cs @@ -33,102 +33,102 @@ namespace FineUIPro.Web.JDGL.SGManPower protected global::FineUIPro.PageManager PageManager1; /// - /// SimpleForm1 控件。 + /// Panel1 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Form SimpleForm1; + protected global::FineUIPro.Panel Panel1; /// - /// lProject 控件。 + /// Grid1 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lProject; + protected global::FineUIPro.Grid Grid1; /// - /// lUnit 控件。 + /// lbUnitName 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lUnit; + protected global::System.Web.UI.WebControls.Label lbUnitName; /// - /// lUnitWork 控件。 + /// lbUnitWorkName 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lUnitWork; + protected global::System.Web.UI.WebControls.Label lbUnitWorkName; /// - /// lWorkPost 控件。 + /// lbtfWorkPostName 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lWorkPost; + protected global::System.Web.UI.WebControls.Label lbtfWorkPostName; /// - /// lPlanDate 控件。 + /// ToolbarSeparator1 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lPlanDate; + protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; /// - /// lQuantity 控件。 + /// ToolbarText1 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lQuantity; + protected global::FineUIPro.ToolbarText ToolbarText1; /// - /// lNumber 控件。 + /// ddlPageSize 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Label lNumber; + protected global::FineUIPro.DropDownList ddlPageSize; /// - /// Toolbar1 控件。 + /// Window1 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Toolbar Toolbar1; + protected global::FineUIPro.Window Window1; /// - /// ToolbarFill1 控件。 + /// Menu1 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.ToolbarFill ToolbarFill1; + protected global::FineUIPro.Menu Menu1; /// - /// btnClose 控件。 + /// btnMenuView 控件。 /// /// /// 自动生成的字段。 /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// - protected global::FineUIPro.Button btnClose; + protected global::FineUIPro.MenuButton btnMenuView; } } diff --git a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetailsEdit.aspx.cs b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetailsEdit.aspx.cs index f54a4bb5..141b04ac 100644 --- a/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetailsEdit.aspx.cs +++ b/SGGL/FineUIPro.Web/JDGL/SGManPower/SGWarningDetailsEdit.aspx.cs @@ -180,7 +180,7 @@ namespace FineUIPro.Web.JDGL.SGManPower listStr.Add(new SqlParameter("@EndTime", Convert.ToDateTime(this.txtEndTime.Text))); } - strSql += " ORDER BY p.PlanDate, p.UnitId, p.UnitWorkId, p.WorkPostId"; + strSql += " ORDER BY p.PlanDate desc, p.UnitId, p.UnitWorkId, p.WorkPostId"; SqlParameter[] parameter = listStr.ToArray(); DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); diff --git a/SGGL/FineUIPro.Web/WorkBench.aspx.cs b/SGGL/FineUIPro.Web/WorkBench.aspx.cs index 5cd0360d..0f7a9bc4 100644 --- a/SGGL/FineUIPro.Web/WorkBench.aspx.cs +++ b/SGGL/FineUIPro.Web/WorkBench.aspx.cs @@ -158,7 +158,12 @@ namespace FineUIPro.Web //把getDataList和sgList的数据合并 foreach (var item in getDataList) { - returnDbHtml += "

" + item.ProjectCode + " " + "" + item.MenuName + " " + item.Content + "

" + item.DataTime.ToString().Replace('/', '-').Split(' ')[0] + "

"; + // returnDbHtml += "

" + item.ProjectCode + " " + "" + item.MenuName + " " + item.Content + "

" + item.DataTime.ToString().Replace('/', '-').Split(' ')[0] + "

"; + string fullContent = item.ProjectCode + " " + item.MenuName + " " + item.Content; + returnDbHtml += $"
" + + $"

{item.ProjectCode} " + + $"{item.MenuName} {item.Content}

" + + $"

{item.DataTime.ToString().Replace('/', '-').Split(' ')[0]}

"; } return returnDbHtml; }