feat: 完善焊接质量检查和材料管理

补齐焊前专项审核和焊缝外观检测流程,统一质检查询、附件处理与材料明细导出,提升业务数据追溯和组件匹配使用效率。
This commit is contained in:
2026-08-10 17:58:55 +08:00
parent bd73295ff8
commit 2de696fad2
48 changed files with 2252 additions and 131 deletions
@@ -523,7 +523,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage
&& x.PipelineId == item.PipelineId
&& x.PrefabricatedComponents == item.PrefabricatedComponents
&& x.PipeArea == item.PipeArea
&& (string.IsNullOrEmpty(item.MaterialCode) || x.MaterialCode == item.MaterialCode)
// && (string.IsNullOrEmpty(item.MaterialCode) || x.MaterialCode == item.MaterialCode)
select x;
if (pipeLineMat.Count() == 0 || pipeLineMat == null)
{
@@ -533,12 +533,13 @@ namespace FineUIPro.Web.HJGL.WeldingManage
else
{
var oldPipeLineMat = pipeLineMat.First();
item.PipeLineMatId = oldPipeLineMat.PipeLineMatId;
if (string.IsNullOrEmpty(item.MaterialCode))
oldPipeLineMat.Number=item.Number;
oldPipeLineMat.MaterialCode2 = item.MaterialCode2;
if (!string.IsNullOrEmpty(item.MaterialCode))
{
item.MaterialCode = oldPipeLineMat.MaterialCode;
oldPipeLineMat.MaterialCode = item.MaterialCode;
}
BLL.PipelineMatService.UpdatePipeLineMat(item);
BLL.PipelineMatService.UpdatePipeLineMat(oldPipeLineMat);
}
BLL.HJGL_PipelineComponentService.SyncPipelineComponentByMatId(item.PipeLineMatId);
}
@@ -0,0 +1,106 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeldAppearanceCheck.aspx.cs" Inherits="FineUIPro.Web.HJGL.WeldingManage.WeldAppearanceCheck" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>焊缝外观检测记录</title>
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
<link href="../../res/css/viewer.min.css" rel="stylesheet" />
<script src="../../res/js/viewer.min.js" type="text/javascript"></script>
<style type="text/css">
.img {
cursor: zoom-in;
object-fit: cover;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
ShowHeader="false" Layout="VBox">
<Items>
<f:Grid ID="Grid1" runat="server" BoxFlex="1" ShowBorder="true" ShowHeader="false"
EnableColumnLines="true" DataKeyNames="AppearanceCheckId" DataIDField="AppearanceCheckId"
AllowPaging="true" IsDatabasePaging="true" PageSize="15"
OnPageIndexChange="Grid1_PageIndexChange" EnableRowDoubleClickEvent="true"
OnRowDoubleClick="Grid1_RowDoubleClick">
<Toolbars>
<f:Toolbar runat="server">
<Items>
<f:TextBox ID="txtPipelineCode" runat="server" Label="管线号" Width="250px"
LabelWidth="70px" />
<f:TextBox ID="txtWeldJointCode" runat="server" Label="焊口号" Width="220px"
LabelWidth="70px" />
<f:DropDownList ID="ddlQualified" runat="server" Label="是否合格" Width="190px"
LabelWidth="80px">
<f:ListItem Text="全部" Value="" />
<f:ListItem Text="合格" Value="1" />
<f:ListItem Text="不合格" Value="0" />
</f:DropDownList>
<f:Button ID="btnQuery" runat="server" Text="查询" Icon="SystemSearch"
OnClick="btnQuery_Click" />
<f:ToolbarFill runat="server" />
<f:Button ID="btnNew" runat="server" Text="新增" Icon="Add"
OnClick="btnNew_Click" />
<f:Button ID="btnEdit" runat="server" Text="修改" Icon="Pencil"
OnClick="btnEdit_Click" />
<f:Button ID="btnDelete" runat="server" Text="删除" Icon="Delete"
ConfirmText="确认删除选中的外观检测记录?" OnClick="btnDelete_Click" />
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField Width="60px" HeaderText="序号" TextAlign="Center" />
<f:RenderField Width="220px" DataField="PipelineCode" HeaderText="管线号" />
<f:RenderField Width="130px" DataField="WeldJointCode" HeaderText="焊口号" />
<f:RenderField Width="100px" DataField="QualifiedText" HeaderText="外观是否合格"
TextAlign="Center" />
<f:RenderField Width="120px" DataField="CheckPersonName" HeaderText="检测人"
TextAlign="Center" />
<f:RenderField Width="170px" DataField="CheckTime" FieldType="Date"
RendererArgument="yyyy-MM-dd HH:mm" HeaderText="检测时间" TextAlign="Center" />
<f:TemplateField ColumnID="AttachUrl" MinWidth="120px" HeaderText="照片"
HeaderTextAlign="Center" TextAlign="Center">
<ItemTemplate>
<asp:Label ID="lbAttachUrl" runat="server"
Text='<%# ConvertImageUrlByImage(Eval("AttachUrl")) %>'></asp:Label>
</ItemTemplate>
</f:TemplateField>
<f:RenderField Width="300px" DataField="Remark" HeaderText="备注" />
</Columns>
</f:Grid>
</Items>
</f:Panel>
<f:Window ID="Window1" Title="焊缝外观检测" Hidden="true" EnableIFrame="true"
EnableMaximize="true" Target="Top" runat="server" OnClose="Window1_Close" IsModal="true"
Width="760px" Height="560px" />
</form>
<script type="text/javascript">
var gridImageSelector = '#<%= Grid1.ClientID %> img.img';
F.ready(function () {
$(document).off('click.weldappearance', gridImageSelector)
.on('click.weldappearance', gridImageSelector, function () {
var imageUrl = $(this).attr('src');
if (!imageUrl) {
return;
}
var container = document.createElement('div');
var image = document.createElement('img');
container.style.display = 'none';
image.src = imageUrl;
container.appendChild(image);
document.body.appendChild(container);
var viewer = new Viewer(image);
viewer.show();
viewer.on('hidden', function () {
document.body.removeChild(container);
});
});
});
</script>
</body>
</html>
@@ -0,0 +1,85 @@
using BLL;
using System;
using System.Web;
namespace FineUIPro.Web.HJGL.WeldingManage
{
public partial class WeldAppearanceCheck : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) BindGrid();
}
private void BindGrid()
{
var result = WeldAppearanceCheckService.GetList(CurrUser.LoginProjectId, txtPipelineCode.Text.Trim(),
txtWeldJointCode.Text.Trim(), ddlQualified.SelectedValue, Grid1.PageIndex, Grid1.PageSize);
Grid1.RecordCount = result.Item2;
Grid1.DataSource = result.Item1;
Grid1.DataBind();
}
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; BindGrid(); }
protected void btnQuery_Click(object sender, EventArgs e) { Grid1.PageIndex = 0; BindGrid(); }
protected void Window1_Close(object sender, WindowCloseEventArgs e) { BindGrid(); }
/// <summary>
/// 将附件地址转换为列表缩略图。
/// </summary>
/// <param name="photoUrl">以逗号分隔的照片地址。</param>
/// <returns>照片缩略图HTML。</returns>
protected string ConvertImageUrlByImage(object photoUrl)
{
if (photoUrl == null || string.IsNullOrWhiteSpace(photoUrl.ToString()))
{
return string.Empty;
}
string html = "<table cellpadding='5' cellspacing='5' style=\"width: 100%\">";
foreach (string item in photoUrl.ToString().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
{
string imageUrl = "../../" + item.Trim().Replace('\\', '/');
html += "<tr><td align='center'><img class='img' width='100' height='100' src='"
+ HttpUtility.HtmlAttributeEncode(imageUrl) + "' alt='外观检测照片' /></td></tr>";
}
return html + "</table>";
}
protected void btnNew_Click(object sender, EventArgs e)
{
if (HasPower(Const.BtnAdd)) PageContext.RegisterStartupScript(Window1.GetShowReference("WeldAppearanceCheckEdit.aspx"));
}
protected void btnEdit_Click(object sender, EventArgs e) { OpenSelectedRecord(); }
protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e) { OpenSelectedRecord(); }
protected void btnDelete_Click(object sender, EventArgs e)
{
if (!EnsureSelected() || !HasPower(Const.BtnDelete)) return;
WeldAppearanceCheckService.Delete(Grid1.SelectedRowID);
BindGrid();
}
private void OpenSelectedRecord()
{
if (!EnsureSelected() || !HasPower(Const.BtnModify)) return;
PageContext.RegisterStartupScript(Window1.GetShowReference("WeldAppearanceCheckEdit.aspx?AppearanceCheckId=" + Grid1.SelectedRowID));
}
private bool EnsureSelected()
{
if (Grid1.SelectedRowIndexArray.Length > 0) return true;
Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning);
return false;
}
private bool HasPower(string button)
{
bool hasPower = CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.PersonId,
Const.HJGL_WeldAppearanceCheckMenuId, button);
if (!hasPower) Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
return hasPower;
}
}
}
@@ -0,0 +1,134 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.HJGL.WeldingManage
{
public partial class WeldAppearanceCheck
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// Grid1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// txtPipelineCode 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox txtPipelineCode;
/// <summary>
/// txtWeldJointCode 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox txtWeldJointCode;
/// <summary>
/// ddlQualified 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlQualified;
/// <summary>
/// btnQuery 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnQuery;
/// <summary>
/// btnNew 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnNew;
/// <summary>
/// btnEdit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnEdit;
/// <summary>
/// btnDelete 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnDelete;
/// <summary>
/// lbAttachUrl 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.Label lbAttachUrl;
/// <summary>
/// Window1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Window Window1;
}
}
@@ -0,0 +1,72 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeldAppearanceCheckEdit.aspx.cs" Inherits="FineUIPro.Web.HJGL.WeldingManage.WeldAppearanceCheckEdit" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>编辑焊缝外观检测</title>
<base target="_self" />
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="SimpleForm1" runat="server" />
<f:Form ID="SimpleForm1" ShowBorder="false" ShowHeader="false" AutoScroll="true"
BodyPadding="10px" runat="server" RedStarPosition="BeforeText">
<Rows>
<f:FormRow>
<Items>
<f:DropDownList ID="ddlWeldJoint" runat="server" Label="已焊接焊口" Required="true"
ShowRedStar="true" EnableEdit="true" LabelWidth="130px" />
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:DropDownList ID="ddlQualified" runat="server" Label="外观是否合格" Required="true"
ShowRedStar="true" LabelWidth="130px">
<f:ListItem Text="合格" Value="1" />
<f:ListItem Text="不合格" Value="0" />
</f:DropDownList>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:DropDownList ID="ddlCheckPerson" runat="server" Label="检测人" Required="true"
ShowRedStar="true" EnableEdit="true" LabelWidth="130px" />
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:DatePicker ID="dpCheckTime" runat="server" Label="检测时间" Required="true"
ShowRedStar="true" LabelWidth="130px" />
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:TextArea ID="txtRemark" runat="server" Label="备注" MaxLength="500"
LabelWidth="130px" />
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:Button ID="btnAttach" runat="server" Text="上传/查看照片(必填)" Icon="TableCell"
OnClick="btnAttach_Click" />
</Items>
</f:FormRow>
</Rows>
<Toolbars>
<f:Toolbar runat="server" Position="Bottom" ToolbarAlign="Right">
<Items>
<f:Button ID="btnSave" runat="server" Text="保存" Icon="SystemSave"
ValidateForms="SimpleForm1" OnClick="btnSave_Click" />
<f:Button ID="btnClose" runat="server" Text="关闭" Icon="SystemClose"
EnablePostBack="false" />
</Items>
</f:Toolbar>
</Toolbars>
</f:Form>
<f:Window ID="WindowAtt" Title="外观检测照片" Hidden="true" EnableIFrame="true"
EnableMaximize="true" Target="Parent" runat="server" IsModal="true" Width="720px"
Height="440px" />
</form>
</body>
</html>
@@ -0,0 +1,85 @@
using BLL;
using System;
using System.Linq;
namespace FineUIPro.Web.HJGL.WeldingManage
{
public partial class WeldAppearanceCheckEdit : PageBase
{
private string AppearanceCheckId
{
get { return (string)ViewState["AppearanceCheckId"]; }
set { ViewState["AppearanceCheckId"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
btnClose.OnClientClick = ActiveWindow.GetHideReference();
AppearanceCheckId = Request.Params["AppearanceCheckId"] ?? Guid.NewGuid().ToString();
BindWeldJoints();
Person_PersonsService.InitUserProjectIdUnitIdRoleIdDropDownList(ddlCheckPerson, CurrUser.LoginProjectId, null, null, true);
var model = WeldAppearanceCheckService.GetById(AppearanceCheckId);
if (model == null)
{
ddlQualified.SelectedValue = "1";
ddlCheckPerson.SelectedValue = CurrUser.PersonId;
dpCheckTime.SelectedDate = DateTime.Now;
return;
}
ddlWeldJoint.SelectedValue = model.WeldJointId;
ddlQualified.SelectedValue = model.IsQualified ? "1" : "0";
ddlCheckPerson.SelectedValue = model.CheckPerson;
dpCheckTime.SelectedDate = model.CheckTime;
txtRemark.Text = model.Remark;
}
private void BindWeldJoints()
{
var data = WeldAppearanceCheckService.GetWeldedJoints(CurrUser.LoginProjectId, null, null, 0, 10000)
.Select(x => new { x.WeldJointId, Name = x.PipelineCode + " / " + x.WeldJointCode }).ToList();
ddlWeldJoint.DataTextField = "Name";
ddlWeldJoint.DataValueField = "WeldJointId";
ddlWeldJoint.DataSource = data;
ddlWeldJoint.DataBind();
}
protected void btnSave_Click(object sender, EventArgs e)
{
if (!CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.PersonId,
Const.HJGL_WeldAppearanceCheckMenuId, Const.BtnSave))
{
Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
return;
}
try
{
WeldAppearanceCheckService.Save(new Model.WeldAppearanceCheckInput
{
AppearanceCheckId = AppearanceCheckId,
ProjectId = CurrUser.LoginProjectId,
WeldJointId = ddlWeldJoint.SelectedValue,
IsQualified = ddlQualified.SelectedValue == "1",
CheckPerson = ddlCheckPerson.SelectedValue,
CheckTime = dpCheckTime.SelectedDate,
Remark = txtRemark.Text.Trim(),
CreateUser = CurrUser.PersonId
});
ShowNotify("保存成功!", MessageBoxIcon.Success);
PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
}
catch (Exception ex)
{
Alert.ShowInTop(ex.Message, MessageBoxIcon.Warning);
}
}
protected void btnAttach_Click(object sender, EventArgs e)
{
PageContext.RegisterStartupScript(WindowAtt.GetShowReference(string.Format(
"../../AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/HJGL/WeldingManage/WeldAppearanceCheck&menuId={1}&edit=1",
AppearanceCheckId, Const.HJGL_WeldAppearanceCheckMenuId)));
}
}
}
@@ -0,0 +1,125 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.HJGL.WeldingManage
{
public partial class WeldAppearanceCheckEdit
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// SimpleForm1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Form SimpleForm1;
/// <summary>
/// ddlWeldJoint 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlWeldJoint;
/// <summary>
/// ddlQualified 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlQualified;
/// <summary>
/// ddlCheckPerson 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlCheckPerson;
/// <summary>
/// dpCheckTime 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker dpCheckTime;
/// <summary>
/// txtRemark 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextArea txtRemark;
/// <summary>
/// btnAttach 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnAttach;
/// <summary>
/// btnSave 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnSave;
/// <summary>
/// btnClose 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnClose;
/// <summary>
/// WindowAtt 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Window WindowAtt;
}
}
@@ -91,7 +91,7 @@
</f:Button>
<f:Button ID="btnStatisticsMat" ToolTip="匹配材料" Icon="TabGo" runat="server" OnClick="btnStatisticsMat_Click" Hidden="true">
</f:Button>
<f:Button ID="btnExportPartialComponents" Text="导出部分已焊组件" ToolTip="按当前区域导出所选单位工程的部分已焊组件"
<f:Button ID="btnExportPartialComponents" Text="导出部组件" ToolTip="按当前区域导出所选单位工程的部组件"
Icon="TableGo" runat="server" OnClick="btnExportPartialComponents_Click" EnableAjax="false"
DisableControlBeforePostBack="true" EnablePostBack="true">
</f:Button>
@@ -728,7 +728,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage
}
/// <summary>
/// 按当前材料区域导出所选单位工程下全部部分已焊接组件。
/// 按当前材料区域导出所选单位工程下全部组件。
/// </summary>
protected void btnExportPartialComponents_Click(object sender, EventArgs e)
{
@@ -748,24 +748,40 @@ namespace FineUIPro.Web.HJGL.WeldingManage
drpWarehouse.SelectedValue);
if (!components.Any())
{
ShowNotify("当前单位工程和区域下没有部分已焊接组件!", MessageBoxIcon.Warning);
ShowNotify("当前单位工程和区域下没有可导出的组件!", MessageBoxIcon.Warning);
return;
}
var exportData = components.Select(x => new
// 列顺序保持未焊口数后追加未焊达因量、材料编码、数量,便于后续导入使用;每个材料编码单独导出一行。
var exportData = components.SelectMany(x =>
{
= x.UnitWorkName,
= x.PipeAreaText,
线 = x.PipelineCode,
= x.PrefabricatedComponents,
= x.TotalWeldJointCount,
= x.WeldedWeldJointCount,
= x.UnweldedWeldJointCount,
= x.ComponentMatchRateString
List<string> materialCodes = SplitExportValues(x.MaterialCode);
List<string> materialQuantities = SplitExportValues(x.MaterialQuantity);
int materialRowCount = Math.Max(materialCodes.Count, materialQuantities.Count);
if (materialRowCount == 0)
{
materialRowCount = 1;
}
return Enumerable.Range(0, materialRowCount).Select(index => new
{
= x.UnitWorkName,
= x.PipeAreaText,
线 = x.PipelineCode,
= x.PrefabricatedComponents,
= x.TotalWeldJointCount,
= x.WeldedWeldJointCount,
= x.UnweldedWeldJointCount,
= x.UnweldedDin ?? 0,
= index < materialCodes.Count ? materialCodes[index] : string.Empty,
= index < materialQuantities.Count ? materialQuantities[index] : string.Empty,
= x.ComponentMatchRateString,
= GetComponentStatus(x.TotalWeldJointCount, x.UnweldedWeldJointCount)
});
}).ToList();
string areaText = PipeArea == PipelineService.PipeArea_SHOP ? "工厂预制" : "现场安装";
string fileName = GetSafeFileName(unitWork.UnitWorkName) + "_" + areaText + "_部分已焊组件_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
string fileName = GetSafeFileName(unitWork.UnitWorkName) + "_" + areaText + "_部组件_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
string tempDirectory = Path.Combine(Funs.RootPath, @"File\Excel\Temp");
Directory.CreateDirectory(tempDirectory);
string filePath = Path.Combine(tempDirectory, Guid.NewGuid().ToString("N") + ".xlsx");
@@ -794,6 +810,29 @@ namespace FineUIPro.Web.HJGL.WeldingManage
return safeFileName;
}
private static List<string> SplitExportValues(string values)
{
return string.IsNullOrEmpty(values)
? new List<string>()
: values.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Trim())
.ToList();
}
private static string GetComponentStatus(int totalWeldJointCount, int unweldedWeldJointCount)
{
// 以总焊口数和未焊口数判断组件进度:全部未焊为未开始、无未焊口为已完成,其余为进行中。
if (unweldedWeldJointCount == totalWeldJointCount)
{
return "未开始";
}
if (unweldedWeldJointCount == 0)
{
return "已完成";
}
return "进行中";
}
/// <summary>
/// 按树节点获取可加入本次匹配的管线。单位工程节点会展开到其下所有试压包,再套用当前仓库和页面筛选条件。
/// </summary>