<!-- 扫码记录列表 -->
<ListView x:Name="ScanListView" Grid.Row="3" ItemsSource="{Binding scanItems}"> 这个没有 更新,没有加载数据 MainWindows.xaml.cs using Oracle.ManagedDataAccess.Client;
using PackingApp.Services;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Data;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using static PackingApp.Services.Logic;
namespace PackingApp
{
public partial class MainWindow : Window
{
private ObservableCollection<ScanItem> scanItems = new ObservableCollection<ScanItem>();
private int currentIndex = 1;
private string currentBoxNumber = "未创建";
private string prodtype = "未创建";
private string proddesc = "未创建";
public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
private string dbConnectString = ConfigurationManager.AppSettings["Conn"].ToString();
// 保存到数据库
private string insertHistorySql = @" INSERT INTO rm_Pack_history (PackID, PackDate, PackBarcode) VALUES (:PackID, :PackDate, :PackBarcode)";
private string updatePackInfoSql = @" UPDATE rm_pack_info SET currquantity = currquantity + 1 WHERE PackID = :PackID";
public MainWindow()
{
InitializeComponent();
loginfo.Info("MainWindow APP start Done.");
DataContext = this; // 必须设置,否则绑定找不到 scanItems
LoadComboBox();
ModelComboBox.SelectedIndex = -1;
}
private void ScanInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
string code = ScanInput.Text.Trim();
if (!string.IsNullOrEmpty(code))
{
SaveScan(BoxNumberText.Text, DateTime.Now, code);
scanItems.Add(new ScanItem
{
Index = currentIndex++,
PackID = BoxNumberText.Text,
PackDate = DateTime.Now,
PackBarcode = code
});
UpdateDisplay();
ScanInput.Clear();
StatusMessage.Text = "打包成功";
}
else
{
StatusMessage.Text = "打包失败:扫码内容为空";
}
}
}
private void CreatePackage_Click(object sender, RoutedEventArgs e)
{
CreatePackage();
UpdateDisplay();
}
private async void OpenPackage_Click(object sender, RoutedEventArgs e)
{
OracleDBHelper dbHelper = new OracleDBHelper(dbConnectString);
string packid = BoxNoInput.Text.Trim();
string Packinfo_sql = string.Format(@"select a.prodtype,b.proddesc,b.packsize,a.currquantity from rm_pack_info a join rm_pack_generator b on a.prodtype = b.prodtype where a.packid= '{0}'", packid);
DataTable Packdate = await dbHelper.ExecuteQueryAsync(Packinfo_sql);
if (Packdate.Rows.Count > 0)
{
CurrentModelText.Text = Packdate.Rows[0]["prodtype"].ToString();
DescModelText.Text = Packdate.Rows[0]["proddesc"].ToString();
PackSizeText.Text = Packdate.Rows[0]["packsize"].ToString();
BoxNumberText.Text = packid;
OpenPackageHistory(packid);
}
}
private async void CreatePackage()
{
if (ModelComboBox.SelectedItem != null)
{
OracleDBHelper dbHelper = new OracleDBHelper(dbConnectString);
string[] parts = ModelComboBox.SelectedItem.ToString().Split('-');
if (parts.Length > 0)
{
prodtype = parts[0].Trim(); // index = 0 的部分
proddesc = string.Join("-", parts, 1, parts.Length - 1); // 剩余部分用 "-" 连接起来作为 proddesc
loginfo.Info("Prodtype: " + prodtype);
var packinfo = await CreatePackId(prodtype);
currentBoxNumber = packinfo.PackId;
CurrentModelText.Text = prodtype;
DescModelText.Text = proddesc;
PackSizeText.Text = packinfo.PackSize;
BoxNumberText.Text = currentBoxNumber;
StatusMessage.Text = "已打开包装:" + currentBoxNumber;
scanItems.Clear();
}
else
{
MessageBox.Show("型号不存在");
ModelComboBox.SelectedIndex = 0;
}
}
}
private void UpdateDisplay()
{
int count = 0;
int PackSize = Convert.ToInt32(PackSizeText.Text);
foreach (var item in scanItems)
{
if (item.PackID == BoxNumberText.Text)
count++;
}
QuantityText.Text = count.ToString();
}
private async void LoadComboBox()
{
OracleDBHelper dbHelper = new OracleDBHelper(dbConnectString);
string sql = "SELECT PRODTYPE, PRODDESC FROM rm_pack_generator WHERE ACTIVE = 1";
DataTable dt = await dbHelper.ExecuteQueryAsync(sql); // 使用 await 等待异步结果
List<string> items = new List<string>();
foreach (DataRow row in dt.Rows)
{
items.Add($"{row["PRODTYPE"]} - {row["PRODDESC"]}");
}
ModelComboBox.ItemsSource = items;
}
private async Task<PackInfo> CreatePackId(string Prodtype)
{
string Packid = "";
OracleDBHelper dbHelper = new OracleDBHelper(dbConnectString);
string GetLashPackid_sql = $"select Lastpackid,packsize from rm_pack_generator WHERE Prodtype = '{Prodtype}' and ACTIVE = 1";
DataTable dt = await dbHelper.ExecuteQueryAsync(GetLashPackid_sql);
if (dt.Rows.Count == 0)
{
MessageBox.Show("箱号创建失败,最新箱号没有找到");
loginfo.Info("箱号创建失败,最新箱号没有找到");
return null;
}
string packsize = dt.Rows[0]["packsize"].ToString();
string LastPackId = dt.Rows[0]["Lastpackid"].ToString();
string PackidType = LastPackId.Substring(0, 3);
string PackID_Year = LastPackId.Substring(3, 2);
string PackNo = LastPackId.Substring(5, 4);
int No = Convert.ToInt32(PackNo);
if (Logic.IsNewYear(PackID_Year))
{
PackID_Year = DateTime.Now.Year.ToString().Substring(2, 2);
PackNo = "0001";
}
else if (No + 1 > 9999)
{
MessageBox.Show("箱号创建失败,今年箱号已达最大9999");
loginfo.Info("箱号创建失败,今年箱号已达最大9999");
return null;
}
else
{
No = No + 1;
PackNo = No.ToString().PadLeft(4, '0');
}
try
{
Packid = PackidType + PackID_Year + PackNo;
string CreatePackid_InsertSql = string.Format("insert into rm_pack_INFO values ('{0}','{1}','{2}',0,1,sysdate)", Packid, Prodtype, packsize);
loginfo.Info(CreatePackid_InsertSql);
int i = dbHelper.ExecuteNonQuery(CreatePackid_InsertSql);
loginfo.Info("Save Pack info DB " + i + " Succer");
}
catch (Exception e)
{
MessageBox.Show("箱号创建失败存储失败");
loginfo.Info("SaveDB Fail" + e.Message);
return null;
}
return new PackInfo
{
PackId = Packid,
PackSize = packsize
};
}
private async void OpenPackageHistory(string PackID)
{
if (PackID != null)
{
OracleDBHelper dbHelper = new OracleDBHelper(dbConnectString);
string PackHistory_sql = string.Format("select packid,Packdate,packBarcode from rm_Pack_history where packid = '{0}'",PackID);
DataTable PackHistory_dt = await dbHelper.ExecuteQueryAsync(PackHistory_sql);
ConvertToScanItems(PackHistory_dt);
}
}
//scanItems
private ObservableCollection<ScanItem> ConvertToScanItems(DataTable table)
{
ObservableCollection<ScanItem> result = new ObservableCollection<ScanItem>();
int index = 1;
foreach (DataRow row in table.Rows)
{
result.Add(new ScanItem
{
Index = index++,
PackID = row.Field<string>("PackID"),
PackDate = row.Field<DateTime>("PackDate"),
PackBarcode = row.Field<string>("PackBarcode")
});
}
return result;
}
public async void SaveScan(string packId, DateTime packDate, string barcode)
{
OracleDBHelper dbHelper = new OracleDBHelper(dbConnectString);
var Inserparameters = new OracleParameter[]
{
new OracleParameter("PackID", packId),
new OracleParameter("PackDate", packDate),
new OracleParameter("PackBarcode", barcode)
};
var Updateparameters = new OracleParameter[]
{
new OracleParameter("PackID", packId)
};
try
{
int insertRows = await dbHelper.ExecuteNonQueryAsync(insertHistorySql, Inserparameters);
loginfo.Info("History Insert Rows " + insertRows);
int updatedRows = await dbHelper.ExecuteNonQueryAsync(updatePackInfoSql, Updateparameters);
loginfo.Info("Packinfo update Rows " + updatedRows);
}
catch (Exception e)
{
loginfo.Info("Save Scan Info error!");
loginfo.Info(e.Message);
}
}
}
}
最新发布