From 632ca534679eca830cdcc3654869c5d500b9476e Mon Sep 17 00:00:00 2001 From: jackchenyang <874821510@qq.com> Date: Thu, 6 Jun 2024 20:39:00 +0800 Subject: [PATCH] 1221 --- HJGL/.vs/HJGL/v17/.suo | Bin 1045504 -> 1090560 bytes HJGL/BLL/Common/Const.cs | 4 + .../WelderTest/WelderTestService.cs | 46 +- HJGL/FineUIPro.Web/FineUIPro.Web.csproj | 24 + .../WelderManage/WelderTestInfo.aspx | 144 ++++ .../WelderManage/WelderTestInfo.aspx.cs | 650 ++++++++++++++++++ .../WelderTestInfo.aspx.designer.cs | 287 ++++++++ .../WelderManage/WelderTestInfoEdit.aspx | 75 ++ .../WelderManage/WelderTestInfoEdit.aspx.cs | 118 ++++ .../WelderTestInfoEdit.aspx.designer.cs | 152 ++++ .../WelderTestInfoImportError.aspx | 30 + .../WelderTestInfoImportError.aspx.cs | 30 + ...WelderTestInfoImportError.aspx.designer.cs | 53 ++ .../TestPackageManage/ImportError.aspx | 48 +- HJGL/Model/Model.cs | 70 +- HJGL/Model/Model.csproj | 1 + HJGL/Model/ViewModels/ImportErrorViewModel.cs | 23 + 17 files changed, 1694 insertions(+), 61 deletions(-) create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.cs create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.designer.cs create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.cs create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.designer.cs create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.cs create mode 100644 HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.designer.cs create mode 100644 HJGL/Model/ViewModels/ImportErrorViewModel.cs diff --git a/HJGL/.vs/HJGL/v17/.suo b/HJGL/.vs/HJGL/v17/.suo index 1108781d240c59eaedef681fca67ad4466847d0e..a87ca48600e6823856116d6c1d333fbb43070bfe 100644 GIT binary patch delta 29950 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 LfB&F;cG`ac-afMq diff --git a/HJGL/BLL/Common/Const.cs b/HJGL/BLL/Common/Const.cs index 53fe3ce..37f33fd 100644 --- a/HJGL/BLL/Common/Const.cs +++ b/HJGL/BLL/Common/Const.cs @@ -243,6 +243,10 @@ namespace BLL /// public const string WelderQueTemplateUrl = "File\\Excel\\WelderQue.xlsx"; + /// + /// 焊工考试情况 + /// + public const string WelderTestInfoTemplateUrl = "File\\Excel\\焊工考试情况.xlsx"; /// /// 委托单导入模板 /// diff --git a/HJGL/BLL/WeldingProcess/WelderTest/WelderTestService.cs b/HJGL/BLL/WeldingProcess/WelderTest/WelderTestService.cs index 51feec2..19084de 100644 --- a/HJGL/BLL/WeldingProcess/WelderTest/WelderTestService.cs +++ b/HJGL/BLL/WeldingProcess/WelderTest/WelderTestService.cs @@ -10,49 +10,43 @@ namespace BLL { public class WelderTestService { - public bool Add(Model.Welder_TestInfo input) + public static void Add(Model.Welder_TestInfo input) { - try - { - var model = new Model.Welder_TestInfo(); - model.Id = SQLHelper.GetNewID(typeof(Welder_TestInfo)); - model.WeldMethod = input.WeldMethod; - model.MaterialId = input.MaterialId; - model.Remark = input.Remark; - model.CreatedDate = input.CreatedDate; - model.IsPass = input.IsPass; - Funs.DB.Welder_TestInfo.InsertOnSubmit(model); - Funs.DB.SubmitChanges(); - return true; - } - catch (Exception ex) - { - ErrLogInfo.WriteLog(ex, "添加焊工考试错误"); - return false; - } + var model = new Model.Welder_TestInfo(); + model.Id = SQLHelper.GetNewID(typeof(Welder_TestInfo)); + model.WeldMethodId = input.WeldMethodId; + model.MaterialId = input.MaterialId; + model.Remark = input.Remark; + model.ProjectId = input.ProjectId; + model.CreatedDate = input.CreatedDate; + model.ProjectId = input.ProjectId; + model.WelderId = input.WelderId; + model.IsPass = input.IsPass; + Funs.DB.Welder_TestInfo.InsertOnSubmit(model); + Funs.DB.SubmitChanges(); } - public bool Edit(Model.Welder_TestInfo input) + public static void Edit(Model.Welder_TestInfo input) { var result=Funs.DB.Welder_TestInfo.FirstOrDefault(t=>t.Id== input.Id); if (result == null) { - return false; + return ; } - result.WeldMethod = input.WeldMethod; + result.WelderId = input.WelderId; + result.WeldMethodId = input.WeldMethodId; result.MaterialId = input.MaterialId; result.Remark = input.Remark; result.CreatedDate = input.CreatedDate; result.IsPass = input.IsPass; Funs.DB.SubmitChanges(); - return true; + } - public Model.Welder_TestInfo Get(string Id) + public static Model.Welder_TestInfo Get(string Id) { var result = Funs.DB.Welder_TestInfo.FirstOrDefault(t => t.Id == Id); return result; } - - public bool Delete(string Id) + public static bool Delete(string Id) { var result = Funs.DB.Welder_TestInfo.FirstOrDefault(t => t.Id == Id); if (result == null) diff --git a/HJGL/FineUIPro.Web/FineUIPro.Web.csproj b/HJGL/FineUIPro.Web/FineUIPro.Web.csproj index f843a5d..7c53860 100644 --- a/HJGL/FineUIPro.Web/FineUIPro.Web.csproj +++ b/HJGL/FineUIPro.Web/FineUIPro.Web.csproj @@ -1081,6 +1081,7 @@ + @@ -1225,6 +1226,8 @@ + + @@ -4410,6 +4413,13 @@ QualifiedProjectEdit.aspx + + WelderTestInfoImportError.aspx + ASPXCodeBehind + + + WelderTestInfoImportError.aspx + WelderManage.aspx ASPXCodeBehind @@ -5353,6 +5363,20 @@ imageUp.ashx + + WelderTestInfo.aspx + ASPXCodeBehind + + + WelderTestInfo.aspx + + + WelderTestInfoEdit.aspx + ASPXCodeBehind + + + WelderTestInfoEdit.aspx + CheckManage.aspx ASPXCodeBehind diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx new file mode 100644 index 0000000..72b23e5 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx @@ -0,0 +1,144 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WelderTestInfo.aspx.cs" Inherits="FineUIPro.Web.WelderManage.WelderTestInfo" %> + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.cs b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.cs new file mode 100644 index 0000000..834e21b --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.cs @@ -0,0 +1,650 @@ +using BLL; +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Data; +using System.IO; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using System.Web.Configuration; +using System.Security.Principal; + +namespace FineUIPro.Web.WelderManage +{ + public partial class WelderTestInfo : PageBase + { + //定义变量 + /// + /// 上传预设的虚拟路径 + /// + private string initPath = Const.ExcelUrl; + /// + /// 错误集合 + /// + public static string errorInfos = string.Empty; + + #region 加载 + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + ddlPageSize.SelectedValue = Grid1.PageSize.ToString(); + + this.drpUnitId.DataTextField = "UnitName"; + this.drpUnitId.DataValueField = "UnitId"; + this.drpUnitId.DataSource = (from x in Funs.DB.Base_Unit select x).ToList(); + this.drpUnitId.DataBind(); + Funs.FineUIPleaseSelect(this.drpUnitId); + + this.InitTreeMenu();//加载树 + } + } + + /// + /// 加载树 + /// + private void InitTreeMenu() + { + this.tvControlItem.Nodes.Clear(); + TreeNode rootNode = new TreeNode(); + rootNode.Text = "单位-焊工"; + rootNode.ToolTip = "单位"; + rootNode.NodeID = "0"; + rootNode.Expanded = true; + this.tvControlItem.Nodes.Add(rootNode); + + List welders = new List(); + List units = (from x in Funs.DB.Base_Unit select x).ToList(); + if (this.drpUnitId.SelectedValue != BLL.Const._Null) + { + units = units.Where(e => e.UnitId == this.drpUnitId.SelectedValue).ToList(); + } + foreach (var item in units) + { + TreeNode rootProjectNode = new TreeNode();//定义根节点 + rootProjectNode.Text = item.UnitName; + rootProjectNode.NodeID = item.UnitId; + //rootProjectNode.Expanded = true; + rootProjectNode.ToolTip = "单位"; + rootNode.Nodes.Add(rootProjectNode); + + welders = (from x in Funs.DB.Welder_Welder + where x.UnitId == item.UnitId + select x).ToList(); + + + this.BindNodes(rootProjectNode, welders); + } + } + #endregion + + #region 绑定树节点 + /// + /// 绑定树节点 + /// + /// + private void BindNodes(TreeNode node, List welders) + { + if (node.ToolTip == "单位") + { + if (!string.IsNullOrEmpty(this.txtWelderCodeS.Text.Trim())) + { + welders = welders.Where(e => e.WelderCode.Contains(this.txtWelderCodeS.Text.Trim())).ToList(); + } + if (!string.IsNullOrEmpty(txtWelderNameS.Text.Trim())) + { + welders = welders.Where(e => e.WelderName.Contains(this.txtWelderNameS.Text.Trim())).ToList(); + } + + welders = welders.OrderBy(x => x.WelderCode).ToList(); + foreach (var item in welders) + { + TreeNode newNode = new TreeNode(); + newNode.Text = item.WelderName + "(" + item.WelderCode + ")"; + newNode.NodeID = item.WelderId; + newNode.ToolTip = item.WelderCode; + newNode.EnableClickEvent = true; + node.Nodes.Add(newNode); + } + } + } + #endregion + + #region 点击TreeView + /// + /// 点击TreeView + /// + /// + /// + protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e) + { + this.BindGrid(); + } + #endregion + + #region Grid 绑定 + private void BindGrid() + { + var welder = BLL.WelderService.GetWelderById(this.tvControlItem.SelectedNodeID); + if (welder != null) + { + this.lblCode.Text = welder.WelderCode; + this.lblName.Text = welder.WelderName; + } + string strSql = @"SELECT A.*,b.WeldingMethodCode,C.MaterialCode, + (case when A.IsPass=1 then '是' else '否' end ) As PassName , + convert(varchar,A.CreatedDate,23) as TestDate + FROM Welder_TestInfo AS A + inner join Base_WeldingMethod as B + on A.WeldMethodId=B.WeldingMethodId + inner join Base_Material as C on + A.MaterialId=C.MaterialId + WHERE A.WelderId=@WelderId"; + List listStr = new List(); + listStr.Add(new SqlParameter("@WelderId", this.tvControlItem.SelectedNodeID)); + + SqlParameter[] parameter = listStr.ToArray(); + DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); + + // 2.获取当前分页数据 + //var table = this.GetPagedDataTable(Grid1, tb1); + Grid1.RecordCount = tb.Rows.Count; + tb = GetFilteredTable(Grid1.FilteredData, tb); + var table = this.GetPagedDataTable(Grid1, tb); + + Grid1.DataSource = table; + Grid1.DataBind(); + } + #endregion + + #region 双击事件 + /// + /// Grid行双击事件 + /// + /// + /// + protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e) + { + if (Grid1.SelectedRowIndexArray.Length == 0) + { + Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning); + return; + } + if (CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.Welder_QualifiedProjectMenuId, Const.BtnAdd)) + { + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("WelderTestInfoEdit.aspx?Id={0}", Grid1.SelectedRowID, "维护 - "))); + } + else + { + ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning); + } + } + #endregion + + #region 右键编辑 + protected void btnMenuEdit_Click(object sender, EventArgs e) + { + if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.Welder_QualifiedProjectMenuId, BLL.Const.BtnModify)) + { + if (Grid1.SelectedRowIndexArray.Length == 0) + { + Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning); + return; + } + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("WelderTestInfoEdit.aspx?Id={0}", Grid1.SelectedRowID, "维护 - "))); + } + else + { + ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning); + } + } + + + /// + /// 删除 + /// + /// + /// + protected void btnMenuDelete_Click(object sender, EventArgs e) + { + if (CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.Welder_QualifiedProjectMenuId, Const.BtnDelete)) + { + if (Grid1.SelectedRowIndexArray.Length == 0) + { + Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning); + return; + } + + bool isShow = true; + if (Grid1.SelectedRowIndexArray.Length > 1) + { + isShow = false; + } + foreach (int rowIndex in Grid1.SelectedRowIndexArray) + { + string rowID = Grid1.DataKeys[rowIndex][0].ToString(); + if (judgementDelete(rowID, isShow)) + { + BLL.WelderTestService.Delete(rowID); + //BLL.Sys_LogService.AddLog(Const.System_1, this.CurrUser.LoginProjectId, this.CurrUser.UserId, "删除合格项目焊工"); + } + } + + ShowNotify("删除成功!", MessageBoxIcon.Success); + this.BindGrid(); + } + else + { + ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning); + } + } + #endregion + + #region 判断是否可删除 + /// + /// 判断是否可以删除 + /// + /// + private bool judgementDelete(string id, bool isShow) + { + string content = string.Empty; + + if (string.IsNullOrEmpty(content)) + { + return true; + } + else + { + if (isShow) + { + Alert.ShowInTop(content, MessageBoxIcon.Error); + } + return false; + } + } + #endregion + + #region 模板下载 + /// + /// 模板下载 + /// + /// + /// + protected void btnDownLoad_Click(object sender, EventArgs e) + { + string rootPath = Server.MapPath("~/"); + string uploadfilepath = rootPath + Const.WelderTestInfoTemplateUrl; + string filePath = Const.WelderTestInfoTemplateUrl; + string fileName = Path.GetFileName(filePath); + FileInfo info = new FileInfo(uploadfilepath); + long fileSize = info.Length; + Response.ClearContent(); + Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); + Response.ContentType = "excel/plain"; + Response.ContentEncoding = System.Text.Encoding.UTF8; + Response.AddHeader("Content-Length", fileSize.ToString().Trim()); + Response.TransmitFile(uploadfilepath, 0, fileSize); + Response.End(); + //PageContext.RegisterStartupScript(Confirm.GetShowReference("确定要下载焊工资质导入模板?", String.Empty, MessageBoxIcon.Question, PageManager1.GetCustomEventReference(false, "Confirm_OK"), PageManager1.GetCustomEventReference("Confirm_Cancel"))); + } + + /// + /// 下载导入模板 + /// + /// + /// + protected void PageManager1_CustomEvent(object sender, CustomEventArgs e) + { + if (e.EventArgument == "Confirm_OK") + { + string rootPath = Server.MapPath("~/"); + string uploadfilepath = rootPath + Const.WelderQueTemplateUrl; + string filePath = Const.WelderQueTemplateUrl; + string fileName = Path.GetFileName(filePath); + FileInfo info = new FileInfo(uploadfilepath); + long fileSize = info.Length; + Response.ClearContent(); + Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); + Response.ContentType = "excel/plain"; + Response.ContentEncoding = System.Text.Encoding.UTF8; + Response.AddHeader("Content-Length", fileSize.ToString().Trim()); + Response.TransmitFile(uploadfilepath, 0, fileSize); + Response.End(); + } + } + #endregion + + protected void btnImport_Click(object sender, EventArgs e) + { + string message = string.Empty; + errorInfos = string.Empty; + try + { + if (this.fileUpload.HasFile == false) + { + ShowNotify("请选择Excel文件!", MessageBoxIcon.Warning); + return; + } + string IsXls = Path.GetExtension(this.fileUpload.FileName).ToString().Trim().ToLower(); + if (IsXls != ".xls" && IsXls != ".xlsx") + { + ShowNotify("只能选择Excel文件!", MessageBoxIcon.Warning); + return; + } + + string rootPath = Server.MapPath("~/"); + string initFullPath = rootPath + initPath; + if (!Directory.Exists(initFullPath)) + { + Directory.CreateDirectory(initFullPath); + } + //指定上传文件名称 + this.hidFileName.Text = BLL.Funs.GetNewFileName() + IsXls; + //上传文件路径 + string filePath = initFullPath + this.hidFileName.Text; + //文件上传服务器 + this.fileUpload.PostedFile.SaveAs(filePath); + //文件上传服务器后的名称 + string fileName = rootPath + initPath + this.hidFileName.Text; + //读取Excel + DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out errorInfos, true); + //验证Excel读取是否有误 + if (!string.IsNullOrEmpty(errorInfos)) + { + ShowNotify(errorInfos, MessageBoxIcon.Warning); + return; + } + DataTable dt = ds.Tables[0]; + if (dt.Rows.Count > 0) + { + List listData = new List(); + var validate = ValidateImportFileds(dt); + if(validate!=null && validate.Count > 0) + { + Cache["errLog"] = validate; + //提示错误信息 + PageContext.RegisterStartupScript(Window2.GetShowReference("WelderTestInfoImportError.aspx")); + } + else + { + foreach (DataRow dr in dt.Rows) + { + Model.Welder_TestInfo model = new Model.Welder_TestInfo(); + string welderCode = dr[0].ToString(); + string weldMethod = dr[1].ToString(); + string weldMeatrail = dr[2].ToString(); + string isPass = dr[3].ToString(); + string testDate = dr[4].ToString(); + string remark = dr[5].ToString(); + + var welderId = Funs.DB.Welder_Welder.FirstOrDefault(t => t.WelderCode == welderCode)?.WelderId; + var methodId = Funs.DB.Base_WeldingMethod.FirstOrDefault(t => t.WeldingMethodCode == weldMethod)?.WeldingMethodId; + var materId = Funs.DB.Base_Material.FirstOrDefault(t => t.MaterialCode == weldMeatrail)?.MaterialId; + model.Id = SQLHelper.GetNewID(typeof(Model.Welder_TestInfo)); + model.WeldMethodId= methodId; + model.MaterialId= materId; + model.IsPass = isPass == "是" ? true : false; + model.ProjectId = this.CurrUser.LoginProjectId; + model.WelderId= welderId; + model.CreatedDate = DateTime.Parse(testDate); + model.Remark = remark; + listData.Add(model); + } + } + + if(listData.Count > 0) + { + Funs.DB.Welder_TestInfo.InsertAllOnSubmit(listData); + Funs.DB.SubmitChanges(); + ShowNotify("导入成功", MessageBoxIcon.Success); + this.BindGrid(); + } + } + else + { + ShowAlert("没有数据!", MessageBoxIcon.Warning); + return; + } + + } + catch (Exception ex) + { + ShowAlert("'" + ex.Message + "'", MessageBoxIcon.Warning); + } + } + + #region 弹出编辑窗口关闭事件 + /// + /// 弹出编辑窗体关闭事件 + /// + /// + /// + protected void Window1_Close(object sender, WindowCloseEventArgs e) + { + BindGrid(); + } + #endregion + + #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) + { + Grid1.SortDirection = e.SortDirection; + Grid1.SortField = e.SortField; + BindGrid(); + } + #endregion + + #region 查询 + /// + /// 查询 + /// + /// + /// + protected void TextBox_TextChanged(object sender, EventArgs e) + { + this.InitTreeMenu(); + this.BindGrid(); + } + #endregion + + #region 增加 + /// + /// 增加 + /// + /// + /// + protected void btnAdd_Click(object sender, EventArgs e) + { + if (CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.Welder_QualifiedProjectMenuId, Const.BtnAdd)) + { + if (!string.IsNullOrEmpty(this.tvControlItem.SelectedNodeID)) + { + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("WelderTestInfoEdit.aspx?WelderId={0}", this.tvControlItem.SelectedNodeID, "新增 - "))); + } + else + { + Alert.ShowInTop("请选择一名焊工!", MessageBoxIcon.Warning); + return; + } + } + else + { + ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning); + } + } + #endregion + + protected void Window2_Close(object sender, EventArgs e) + { + Cache["errLog"] = null; + } + + private List ValidateImportFileds(DataTable dt) + { + var listData = new List(); + int i = 0; + foreach (DataRow dr in dt.Rows) + { + i++; + + string welderCode = dr[0].ToString(); + string weldMethod = dr[1].ToString(); + string weldMeatrail = dr[2].ToString(); + string isPass = dr[3].ToString(); + string testDate = dr[4].ToString(); + string remark = dr[5].ToString(); + + //验证焊工号 + if (string.IsNullOrEmpty(welderCode)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊工号"; + model.errMsg = "焊工号不能为空"; + model.isSuccess = false; + listData.Add(model); + } + + if (string.IsNullOrEmpty(weldMethod)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊接方法"; + model.errMsg = "焊接方法不能为空"; + model.isSuccess = false; + listData.Add(model); + } + if (string.IsNullOrEmpty(weldMeatrail)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊接材质"; + model.errMsg = "焊接材质不能为空"; + model.isSuccess = false; + listData.Add(model); + } + if (string.IsNullOrEmpty(weldMeatrail)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊接材质"; + model.errMsg = "焊接材质不能为空"; + model.isSuccess = false; + listData.Add(model); + } + if (string.IsNullOrEmpty(isPass)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "是否合格"; + model.errMsg = "是否合格不能为空"; + model.isSuccess = false; + listData.Add(model); + } + if(isPass!="是" && isPass != "否") + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "是否合格"; + model.errMsg = "合格字段只能是或者否"; + model.isSuccess = false; + listData.Add(model); + } + if (string.IsNullOrEmpty(testDate)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "考试日期"; + model.errMsg = "考试日期不能为空"; + model.isSuccess = false; + listData.Add(model); + } + DateTime t1 = new DateTime(); + if(!DateTime.TryParse(testDate,out t1)) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "考试日期"; + model.errMsg = "请输入正确的考试日期(yyyy-MM-dd)"; + model.isSuccess = false; + listData.Add(model); + } + //验证是否存在 + var isAnyWelderCode = Funs.DB.Welder_Welder.Any(t => t.WelderCode == welderCode); + if (!isAnyWelderCode) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊工号"; + model.errMsg = "焊工号不存在"; + model.isSuccess = false; + listData.Add(model); + } + var isAnyWeldMethod = Funs.DB.Base_WeldingMethod.Any(t => t.WeldingMethodCode == weldMethod); + if (!isAnyWeldMethod) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊接方法"; + model.errMsg = "焊接方法不存在"; + model.isSuccess = false; + listData.Add(model); + } + var isAnyMeaterail = Funs.DB.Base_Material.Any(t => t.MaterialCode == weldMeatrail); + if (!isAnyMeaterail) + { + var model = new Model.ViewModels.ImportErrorViewModel(); + model.rowId = i; + model.createdTime = DateTime.Now; + model.columnName = "焊接材质"; + model.errMsg = "焊接材质不存在"; + model.isSuccess = false; + listData.Add(model); + } + } + return listData; + } + + } + +} \ No newline at end of file diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.designer.cs b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.designer.cs new file mode 100644 index 0000000..4c29c43 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfo.aspx.designer.cs @@ -0,0 +1,287 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUIPro.Web.WelderManage +{ + + + public partial class WelderTestInfo + { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.PageManager PageManager1; + + /// + /// Panel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Panel Panel1; + + /// + /// panelLeftRegion 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Panel panelLeftRegion; + + /// + /// Toolbar4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Toolbar Toolbar4; + + /// + /// drpUnitId 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DropDownList drpUnitId; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Toolbar Toolbar1; + + /// + /// txtWelderCodeS 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextBox txtWelderCodeS; + + /// + /// Toolbar3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Toolbar Toolbar3; + + /// + /// txtWelderNameS 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextBox txtWelderNameS; + + /// + /// tvControlItem 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Tree tvControlItem; + + /// + /// panelCenterRegion 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Panel panelCenterRegion; + + /// + /// Grid1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Grid Grid1; + + /// + /// Toolbar2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Toolbar Toolbar2; + + /// + /// lblCode 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label lblCode; + + /// + /// lblName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label lblName; + + /// + /// ToolbarFill1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.ToolbarFill ToolbarFill1; + + /// + /// fileUpload 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.FileUpload fileUpload; + + /// + /// btnImport 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnImport; + + /// + /// btnDownLoad 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnDownLoad; + + /// + /// btnAdd 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnAdd; + + /// + /// hidFileName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.HiddenField hidFileName; + + /// + /// ToolbarSeparator1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; + + /// + /// ToolbarText1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.ToolbarText ToolbarText1; + + /// + /// ddlPageSize 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DropDownList ddlPageSize; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Window Window1; + + /// + /// Window2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Window Window2; + + /// + /// Menu1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Menu Menu1; + + /// + /// btnMenuEdit 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.MenuButton btnMenuEdit; + + /// + /// btnMenuDelete 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.MenuButton btnMenuDelete; + } +} diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx new file mode 100644 index 0000000..24b49b9 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx @@ -0,0 +1,75 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WelderTestInfoEdit.aspx.cs" Inherits="FineUIPro.Web.WelderManage.WelderTestInfoEdit" %> + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.cs b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.cs new file mode 100644 index 0000000..e673e0f --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.cs @@ -0,0 +1,118 @@ +using BLL; +using Microsoft.JScript; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUIPro.Web.WelderManage +{ + public partial class WelderTestInfoEdit : PageBase + { + private string Id = string.Empty; + private string welderId=string.Empty; + protected void Page_Load(object sender, EventArgs e) + { + this.welderId = Request.Params["WelderId"]; + this.Id= Request.Params["id"]; + if (!IsPostBack) + { + this.BindDrpInit(); + this.GetWelderInfo(); + if(!string.IsNullOrEmpty(this.Id)) + this.GetTestInfo(); + } + } + public void GetTestInfo() { + var result=Funs.DB.Welder_TestInfo.FirstOrDefault(t=>t.Id==this.Id); + if (result == null) + { + ShowNotify("请不要非法操作",MessageBoxIcon.Error); + return; + } + drpIsPass.SelectedValue = result.IsPass.ToString(); + drpMaterial.SelectedValue=result.MaterialId.ToString(); + drpWeldMethod.SelectedValue = result.WeldMethodId.ToString(); + txtCheckDate.Text = result.CreatedDate.Value.ToString("yyyy-MM-dd"); + txtRemark.Text = result.Remark.ToString(); + } + private void GetWelderInfo() + { + var result = Funs.DB.Welder_Welder.FirstOrDefault(t => t.WelderId == this.welderId); + if(result == null) + { + return; + } + lbWedlerName.Text= result.WelderName; + lbWedlerCode.Text= result.WelderCode; + } + private void BindDrpInit() + { + var methodList = Funs.DB.Base_WeldingMethod.OrderBy(t=>t.WeldingMethodCode).ToList(); + drpWeldMethod.DataSource= methodList; + drpWeldMethod.DataTextField = "WeldingMethodCode"; + drpWeldMethod.DataValueField = "WeldingMethodId"; + drpWeldMethod.DataBind(); + drpWeldMethod.Items.Insert(0, new ListItem("请选择", "")); + + var materList = Funs.DB.Base_Material.OrderBy(t=>t.MaterialCode).ToList(); + drpMaterial.DataSource= materList; + drpMaterial.DataTextField = "MaterialCode"; + drpMaterial.DataValueField = "MaterialId"; + drpMaterial.DataBind(); + drpMaterial.Items.Insert(0, new ListItem("请选择", "")); + } + protected void btnSave_Click(object sender, EventArgs e) + { + var result = SaveData(); + if (result.Item1) + { + ShowNotify("保存成功", MessageBoxIcon.Success); + PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); + } + else + { + ShowNotify(result.Item2, MessageBoxIcon.Error); + } + + + + } + + (bool,string) SaveData() + { + try + { + + var input = new Model.Welder_TestInfo(); + input.CreatedDate = System.Convert.ToDateTime(txtCheckDate.Text); + input.ProjectId = this.CurrUser.LoginProjectId; + input.WeldMethodId = drpWeldMethod.SelectedValue; + input.WelderId = this.welderId; + input.MaterialId = drpMaterial.SelectedValue; + input.Remark = txtRemark.Text.Trim(); + input.IsPass = drpIsPass.SelectedValue == "是" ? true : false; + + if (string.IsNullOrEmpty(this.Id)) + { + BLL.WelderTestService.Add(input); + } + else + { + input.Id = this.Id; + BLL.WelderTestService.Edit(input); + } + return (true, "保存成功"); + + } + catch (Exception ex) + { + BLL.ErrLogInfo.WriteLog(ex, "保存焊工考试结果失败"); + return (false, ex.Message); + } + } + + } +} \ No newline at end of file diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.designer.cs b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.designer.cs new file mode 100644 index 0000000..f1a0743 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoEdit.aspx.designer.cs @@ -0,0 +1,152 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUIPro.Web.WelderManage +{ + + + public partial class WelderTestInfoEdit + { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Form SimpleForm1; + + /// + /// lbWedlerName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label lbWedlerName; + + /// + /// lbWedlerCode 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label lbWedlerCode; + + /// + /// drpWeldMethod 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DropDownList drpWeldMethod; + + /// + /// drpMaterial 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DropDownList drpMaterial; + + /// + /// txtCheckDate 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DatePicker txtCheckDate; + + /// + /// drpIsPass 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.DropDownList drpIsPass; + + /// + /// txtRemark 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextArea txtRemark; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Toolbar Toolbar1; + + /// + /// lbTemp 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Label lbTemp; + + /// + /// ToolbarFill1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.ToolbarFill ToolbarFill1; + + /// + /// btnSave 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnSave; + + /// + /// btnClose 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnClose; + } +} diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx new file mode 100644 index 0000000..01d02d5 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx @@ -0,0 +1,30 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WelderTestInfoImportError.aspx.cs" Inherits="FineUIPro.Web.WelderManage.WelderImportError" %> + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.cs b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.cs new file mode 100644 index 0000000..64e3176 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUIPro.Web.WelderManage +{ + public partial class WelderImportError : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + this.BindGrid(); + } + } + void BindGrid() + { + var cacheData = Cache["errLog"]; + if(cacheData != null) + { + var listData = Cache["errLog"] as List; + Grid1.DataSource= listData; + Grid1.DataBind(); + } + } + } +} \ No newline at end of file diff --git a/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.designer.cs b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.designer.cs new file mode 100644 index 0000000..1291252 --- /dev/null +++ b/HJGL/FineUIPro.Web/WelderManage/WelderTestInfoImportError.aspx.designer.cs @@ -0,0 +1,53 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUIPro.Web.WelderManage +{ + + + public partial class WelderImportError + { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.PageManager PageManager1; + + /// + /// Grid1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Grid Grid1; + + /// + /// lablRemark 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label lablRemark; + } +} diff --git a/HJGL/FineUIPro.Web/WeldingProcess/TestPackageManage/ImportError.aspx b/HJGL/FineUIPro.Web/WeldingProcess/TestPackageManage/ImportError.aspx index 82ab602..2c37247 100644 --- a/HJGL/FineUIPro.Web/WeldingProcess/TestPackageManage/ImportError.aspx +++ b/HJGL/FineUIPro.Web/WeldingProcess/TestPackageManage/ImportError.aspx @@ -4,34 +4,34 @@ - + 试压包导入错误日志
- - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/HJGL/Model/Model.cs b/HJGL/Model/Model.cs index 6f44473..bd39254 100644 --- a/HJGL/Model/Model.cs +++ b/HJGL/Model/Model.cs @@ -20711,6 +20711,8 @@ namespace Model private System.Nullable _IsPMI; + private System.Nullable _AuditStatus; + private EntitySet _Batch_BatchTrustItem; private EntitySet _Batch_PointBatchItem; @@ -20851,6 +20853,8 @@ namespace Model partial void OnANSISCHChanged(); partial void OnIsPMIChanging(System.Nullable value); partial void OnIsPMIChanged(); + partial void OnAuditStatusChanging(System.Nullable value); + partial void OnAuditStatusChanged(); #endregion public Pipeline_WeldJoint() @@ -21905,6 +21909,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AuditStatus", DbType="Int")] + public System.Nullable AuditStatus + { + get + { + return this._AuditStatus; + } + set + { + if ((this._AuditStatus != value)) + { + this.OnAuditStatusChanging(value); + this.SendPropertyChanging(); + this._AuditStatus = value; + this.SendPropertyChanged("AuditStatus"); + this.OnAuditStatusChanged(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_Batch_BatchTrustItem_Pipeline_WeldJoint", Storage="_Batch_BatchTrustItem", ThisKey="WeldJointId", OtherKey="WeldJointId", DeleteRule="NO ACTION")] public EntitySet Batch_BatchTrustItem { @@ -45900,7 +45924,7 @@ namespace Model private bool _IsPass; - private string _WeldMethod; + private string _WeldMethodId; private string _MaterialId; @@ -45908,6 +45932,8 @@ namespace Model private string _Remark; + private string _WelderId; + #region 可扩展性方法定义 partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); @@ -45918,14 +45944,16 @@ namespace Model partial void OnProjectIdChanged(); partial void OnIsPassChanging(bool value); partial void OnIsPassChanged(); - partial void OnWeldMethodChanging(string value); - partial void OnWeldMethodChanged(); + partial void OnWeldMethodIdChanging(string value); + partial void OnWeldMethodIdChanged(); partial void OnMaterialIdChanging(string value); partial void OnMaterialIdChanged(); partial void OnCreatedDateChanging(System.Nullable value); partial void OnCreatedDateChanged(); partial void OnRemarkChanging(string value); partial void OnRemarkChanged(); + partial void OnWelderIdChanging(string value); + partial void OnWelderIdChanged(); #endregion public Welder_TestInfo() @@ -45993,22 +46021,22 @@ namespace Model } } - [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_WeldMethod", DbType="NVarChar(50) NOT NULL", CanBeNull=false)] - public string WeldMethod + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_WeldMethodId", DbType="NVarChar(50) NOT NULL", CanBeNull=false)] + public string WeldMethodId { get { - return this._WeldMethod; + return this._WeldMethodId; } set { - if ((this._WeldMethod != value)) + if ((this._WeldMethodId != value)) { - this.OnWeldMethodChanging(value); + this.OnWeldMethodIdChanging(value); this.SendPropertyChanging(); - this._WeldMethod = value; - this.SendPropertyChanged("WeldMethod"); - this.OnWeldMethodChanged(); + this._WeldMethodId = value; + this.SendPropertyChanged("WeldMethodId"); + this.OnWeldMethodIdChanged(); } } } @@ -46073,6 +46101,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_WelderId", DbType="NVarChar(50)")] + public string WelderId + { + get + { + return this._WelderId; + } + set + { + if ((this._WelderId != value)) + { + this.OnWelderIdChanging(value); + this.SendPropertyChanging(); + this._WelderId = value; + this.SendPropertyChanged("WelderId"); + this.OnWelderIdChanged(); + } + } + } + public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged; diff --git a/HJGL/Model/Model.csproj b/HJGL/Model/Model.csproj index 390d058..8deb4ce 100644 --- a/HJGL/Model/Model.csproj +++ b/HJGL/Model/Model.csproj @@ -75,6 +75,7 @@ + diff --git a/HJGL/Model/ViewModels/ImportErrorViewModel.cs b/HJGL/Model/ViewModels/ImportErrorViewModel.cs new file mode 100644 index 0000000..3bce362 --- /dev/null +++ b/HJGL/Model/ViewModels/ImportErrorViewModel.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model.ViewModels +{ + public class ImportErrorViewModel + { + public int rowId { get; set; } + + public string columnName { get; set; } + + public string errMsg { get; set; } + + public bool isSuccess { get; set; } = true; + + public DateTime createdTime { get; set; } + + + } +}