feat(clgl): 完善材料匹配与入库条码查询

通过按材料编码优化库存匹配并增加条码查询入口,减少材料主编码选择歧义,便于按项目追溯入库条码。
This commit is contained in:
2026-09-16 15:47:51 +08:00
parent ffb9c2a95c
commit 9810280e42
14 changed files with 450 additions and 12 deletions
@@ -0,0 +1,133 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="InputBarCodeQuery.aspx.cs" Inherits="FineUIPro.Web.CLGL.InputBarCodeQuery" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>入库条码查询</title>
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
</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" BoxConfigAlign="Stretch">
<Items>
<f:Grid ID="Grid1" runat="server" BoxFlex="1" ShowBorder="true" ShowHeader="false"
Title="入库条码查询" DataKeyNames="Id" DataIDField="Id" EnableColumnLines="true"
EnableTextSelection="true" AllowPaging="true" IsDatabasePaging="true" PageSize="20"
OnPageIndexChange="Grid1_PageIndexChange" OnRowCommand="Grid1_RowCommand" AllowColumnLocking="true">
<Toolbars>
<f:Toolbar ID="Toolbar1" Position="Top" runat="server">
<Items>
<f:TextBox ID="txtMaterialCode" runat="server" Label="材料主编码" LabelWidth="100px"
LabelAlign="Right" Width="300px" EmptyText="请输入材料主编码"></f:TextBox>
<f:TextBox ID="txtBarCode" runat="server" Label="条码内容" LabelWidth="80px"
LabelAlign="Right" Width="300px" EmptyText="请输入条码内容"></f:TextBox>
<f:ToolbarFill ID="ToolbarFill1" runat="server"></f:ToolbarFill>
<f:Button ID="btnSearch" runat="server" Text="查询" Icon="SystemSearch" OnClick="btnSearch_Click"></f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:TemplateField ColumnID="tfNumber" Width="50px" HeaderText="序号" HeaderTextAlign="Center" TextAlign="Center">
<ItemTemplate>
<asp:Label ID="lblNumber" runat="server" Text='<%# Grid1.PageIndex * Grid1.PageSize + Container.DataItemIndex + 1 %>'></asp:Label>
</ItemTemplate>
</f:TemplateField>
<f:RenderField Width="220px" ColumnID="CusBillCode" DataField="CusBillCode" SortField="CusBillCode"
FieldType="String" HeaderText="入库单编号" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="180px" ColumnID="MaterialCode" DataField="MaterialCode" SortField="MaterialCode"
FieldType="String" HeaderText="材料主编码" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="150px" ColumnID="Code" DataField="Code" SortField="Code"
FieldType="String" HeaderText="材料编码" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="120px" ColumnID="HeatNo" DataField="HeatNo" SortField="HeatNo"
FieldType="String" HeaderText="炉号" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="120px" ColumnID="BatchNo" DataField="BatchNo" SortField="BatchNo"
FieldType="String" HeaderText="批号" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="150px" ColumnID="MaterialName" DataField="MaterialName" SortField="MaterialName"
FieldType="String" HeaderText="材料名称" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="150px" ColumnID="MaterialSpec" DataField="MaterialSpec" SortField="MaterialSpec"
FieldType="String" HeaderText="规格" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="100px" ColumnID="MaterialUnit" DataField="MaterialUnit" SortField="MaterialUnit"
FieldType="String" HeaderText="单位" TextAlign="Center" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="300px" ColumnID="BarCode" DataField="BarCode" SortField="BarCode"
FieldType="String" HeaderText="条码内容" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
<f:RenderField Width="100px" ColumnID="Quantity" DataField="Quantity" SortField="Quantity"
FieldType="String" HeaderText="数量" TextAlign="Right" HeaderTextAlign="Center"></f:RenderField>
<f:LinkButtonField Width="120px" ColumnID="btnBarCodePrint" TextAlign="Center"
CommandName="btnBarCodePrint" Text="入库条码打印" Locked="true" />
</Columns>
<PageItems>
<f:ToolbarSeparator ID="ToolbarSeparator1" runat="server"></f:ToolbarSeparator>
<f:ToolbarText ID="ToolbarText1" runat="server" Text="每页记录数:"></f:ToolbarText>
<f:DropDownList ID="ddlPageSize" runat="server" Width="80px" AutoPostBack="true"
OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
<f:ListItem Text="10" Value="10" />
<f:ListItem Text="20" Value="20" />
<f:ListItem Text="50" Value="50" />
<f:ListItem Text="100" Value="100" />
</f:DropDownList>
</PageItems>
</f:Grid>
</Items>
</f:Panel>
</form>
<script type="text/javascript">
function printByHiddenFrame(url) {
var frameId = 'fastreport-print-frame-' + new Date().getTime();
var frame = document.createElement('iframe');
frame.id = frameId;
frame.name = frameId;
frame.style.position = 'fixed';
frame.style.left = '-10000px';
frame.style.top = '-10000px';
frame.style.width = '1px';
frame.style.height = '1px';
frame.style.border = '0';
frame.style.opacity = '0';
frame.onload = function () {
setTimeout(function () {
try {
frame.contentWindow.onafterprint = cleanupPrintFrame;
frame.contentWindow.focus();
frame.contentWindow.print();
} catch (e) {
window.print();
}
}, 500);
};
frame.src = url;
document.body.appendChild(frame);
var cleaned = false;
function cleanupPrintFrame() {
if (cleaned) {
return;
}
cleaned = true;
if (frame && frame.parentNode) {
frame.parentNode.removeChild(frame);
}
window.removeEventListener('afterprint', cleanupPrintFrame);
}
window.addEventListener('afterprint', cleanupPrintFrame);
setTimeout(cleanupPrintFrame, 300000);
}
window.addEventListener('message', function (event) {
if (!event.data || event.data.type !== 'fastreport-print-finished') {
return;
}
var frame = document.getElementById(event.data.frameId);
if (frame && frame.parentNode) {
frame.parentNode.removeChild(frame);
}
});
</script>
</body>
</html>
@@ -0,0 +1,84 @@
using BLL;
using System;
using System.Data;
using System.IO;
namespace FineUIPro.Web.CLGL
{
public partial class InputBarCodeQuery : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
BindGrid();
}
}
private void BindGrid()
{
var query = new Model.Tw_InputDetailBarCodeOutput
{
ProjectId = CurrUser.LoginProjectId,
MaterialCode = txtMaterialCode.Text.Trim(),
BarCode = txtBarCode.Text.Trim()
};
Grid1.DataSource = TwInputdetailBarCodeService.GetListData(query, Grid1);
Grid1.RecordCount = TwInputdetailBarCodeService.Count;
Grid1.DataBind();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
Grid1.PageIndex = 0;
BindGrid();
}
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{
Grid1.PageIndex = e.NewPageIndex;
BindGrid();
}
protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
{
if (e.CommandName != "btnBarCodePrint")
{
return;
}
FastReportService.ResetData();
var query = new Model.Tw_InputDetailBarCodeOutput
{
Id = e.RowID,
ProjectId = CurrUser.LoginProjectId
};
var list = TwInputdetailBarCodeService.GetListData(query);
if (list.Count == 0)
{
ShowNotify("未找到入库条码明细。", MessageBoxIcon.Warning);
return;
}
DataTable table = LINQToDataTable(list);
table.TableName = "Table1";
FastReportService.AddFastreportTable(table);
string rootPath = Server.MapPath("~/");
string templatePath = "File\\Fastreport\\材料入库条码.frx";
if (File.Exists(rootPath + templatePath))
{
string printUrl = ResolveUrl(FastReportService.ExportReport(rootPath + templatePath));
PageContext.RegisterStartupScript(string.Format("printByHiddenFrame('{0}');", printUrl));
}
}
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
Grid1.PageIndex = 0;
BindGrid();
}
}
}
@@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.CLGL
{
public partial class InputBarCodeQuery
{
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
protected global::FineUIPro.PageManager PageManager1;
protected global::FineUIPro.Panel Panel1;
protected global::FineUIPro.Grid Grid1;
protected global::FineUIPro.Toolbar Toolbar1;
protected global::FineUIPro.TextBox txtMaterialCode;
protected global::FineUIPro.TextBox txtBarCode;
protected global::FineUIPro.ToolbarFill ToolbarFill1;
protected global::FineUIPro.Button btnSearch;
protected global::System.Web.UI.WebControls.Label lblNumber;
protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1;
protected global::FineUIPro.ToolbarText ToolbarText1;
protected global::FineUIPro.DropDownList ddlPageSize;
}
}
+1 -1
View File
@@ -91,7 +91,7 @@
<f:RenderField Width="150px" ColumnID="StockNum" DataField="StockNum" SortField="StockNum"
FieldType="String" HeaderText="库存数量" TextAlign="Left" HeaderTextAlign="Center">
</f:RenderField>
<f:LinkButtonField Width="120px" ColumnID="btnBarCodePrint" TextAlign="Center" CommandName="btnBarCodePrint" Text="入库条码打印" Locked="true" />
<f:LinkButtonField Width="120px" ColumnID="btnBarCodePrint" TextAlign="Center" CommandName="btnBarCodePrint" Text="入库条码打印" Locked="true" Hidden="true"/>
</Columns>
<%-- <Listeners>
+9 -1
View File
@@ -355,6 +355,7 @@
<Content Include="CLGL\InPlanMaster.aspx" />
<Content Include="CLGL\InPlanMasterDataIn.aspx" />
<Content Include="CLGL\InPlanMasterEdit.aspx" />
<Content Include="CLGL\InputBarCodeQuery.aspx" />
<Content Include="CLGL\InputMaster.aspx" />
<Content Include="CLGL\InputMasterEdit.aspx" />
<Content Include="CLGL\MaterialStock.aspx" />
@@ -8304,6 +8305,13 @@
<DependentUpon>InputMaster.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="CLGL\InputBarCodeQuery.aspx.cs">
<DependentUpon>InputBarCodeQuery.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="CLGL\InputBarCodeQuery.aspx.designer.cs">
<DependentUpon>InputBarCodeQuery.aspx</DependentUpon>
</Compile>
<Compile Include="CLGL\InputMaster.aspx.designer.cs">
<DependentUpon>InputMaster.aspx</DependentUpon>
</Compile>
@@ -17369,4 +17377,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>
@@ -91,6 +91,10 @@
</f:Button>
<f:Button ID="btnMatImport" Text="材料导入" ToolTip="材料导入" Icon="PackageIn" runat="server" OnClick="btnMatImport_Click">
</f:Button>
<f:Button ID="btnCalibrateSharedMaterialCode" Text="校准共用材料编码"
ToolTip="批量校准选中管线的零数量材料,先查左侧相邻焊口,再查右侧"
runat="server" OnClick="btnCalibrateSharedMaterialCode_Click">
</f:Button>
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出" ToolTip="导出" Icon="FolderUp"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
@@ -949,6 +949,34 @@ namespace FineUIPro.Web.HJGL.DataImport
this.BindGrid2(this.tvControlItem.SelectedNodeID, this.hdUnitWorkId.Text);
}
/// <summary>
/// 对选中管线的全部零数量材料校准主编码,不受列表筛选和勾选状态影响。
/// </summary>
protected void btnCalibrateSharedMaterialCode_Click(object sender, EventArgs e)
{
if (!CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.PersonId,
Const.HJGL_WeldJointMenuId, Const.BtnModify))
{
ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
return;
}
var pipeline = PipelineService.GetPipelineByPipelineId(this.tvControlItem.SelectedNodeID);
if (pipeline == null)
{
ShowNotify("请先选择需要校准的管线!", MessageBoxIcon.Warning);
return;
}
int count = PipelineMatService.CalibrateSharedMaterialCodes(pipeline.PipelineId);
this.hdUnitWorkId.Text = pipeline.UnitWorkId;
this.BindGrid1(pipeline.PipelineId, pipeline.UnitWorkId);
this.BindGrid2(pipeline.PipelineId, pipeline.UnitWorkId);
this.BindGrid3(pipeline.PipelineId, pipeline.UnitWorkId);
ShowNotify(string.Format("校准完成,共处理 {0} 条材料。", count), MessageBoxIcon.Success);
}
#region 管线材料导入
/// <summary>
@@ -185,6 +185,11 @@ namespace FineUIPro.Web.HJGL.DataImport
/// </remarks>
protected global::FineUIPro.Button btnMatImport;
/// <summary>
/// 校准共用材料编码按钮。
/// </summary>
protected global::FineUIPro.Button btnCalibrateSharedMaterialCode;
/// <summary>
/// btnOut 控件。
/// </summary>
+1
View File
@@ -38,6 +38,7 @@
<TreeNode id="EEC0D060-C15E-4D25-B015-C2B91F735DAC" Text="发货管理" NavigateUrl="HJGL/PreDesign/TrainNumberManager.aspx"></TreeNode>
</TreeNode>
<TreeNode id="9B828E92-733B-4AF9-9DD0-55ECD8B64AB8" Text="材料管理" NavigateUrl=""><TreeNode id="E29C1839-3530-45EC-A752-B26A0027E2CD" Text="入库管理" NavigateUrl=""><TreeNode id="324C72AF-447A-4308-AFB7-ABF788C58240" Text="入库申请" NavigateUrl="CLGL/InPlanMaster.aspx"></TreeNode>
<TreeNode id="74048E7D-C9D3-45A1-B985-DCE1DB5723F5" Text="入库条码查询" NavigateUrl="CLGL/InputBarCodeQuery.aspx"></TreeNode>
<TreeNode id="4A55351A-2440-4A2D-8509-3FFEE5FC8861" Text="入库单管理" NavigateUrl="CLGL/InputMaster.aspx"></TreeNode>
</TreeNode>
<TreeNode id="16A22282-4966-4946-B0F8-855E1300AE2B" Text="出库管理" NavigateUrl=""><TreeNode id="E910F410-07FB-41C3-AA80-8E30D1563BC1" Text="出库申请" NavigateUrl="CLGL/OutPlanMaster.aspx"></TreeNode>