change -交付

master
启龙 曹 2 weeks ago
parent 6f9e3eedd0
commit 0bfdf2f912

@ -962,22 +962,65 @@ VALUES
return ret > 0 ? true : false;
}
public string GetInsertConsumeInfoSql(DataRowView selectedConsumeRow, string newReportCode, string siteCode)
//public string GetInsertConsumeInfoSql(DataRowView selectedConsumeRow, string newReportCode, string siteCode)
//{
// string sql = $@" INSERT INTO [dbo].[mes_report_work_consume]
// ([record_id], [workorder_code], [material_code], [material_name], [material_spc],
// [quantity], [unit], [remark], [attr1], [attr2],
// [attr3], [attr4], [create_by], [create_time], [update_by],
// [update_time], [factory_code], [report_code], [del_flag],[parent_order],[recoil],[IP],[version],[rspos],[wastage])
// VALUES
// ('{Common.GetUUID()}', '{selectedConsumeRow["workorder_code"]}', '{selectedConsumeRow["material_code"]}', '{selectedConsumeRow["material_name"]}', '{selectedConsumeRow["material_spc"]}',
// '{selectedConsumeRow["qty"]}','{selectedConsumeRow["unit"]}', '{selectedConsumeRow["remark"]}', NULL, NULL,
// NULL, NULL, '{LoginUser.UserName}', GetDate(), '{LoginUser.UserName}',
// GetDate(), '{siteCode}', '{newReportCode}', '0','{selectedConsumeRow["parent_work_order"]}','{selectedConsumeRow["recoil"]}','{LoginUser.CurrDeviceIP}','{LoginUser.Version}','{selectedConsumeRow["attr1"]}', '{selectedConsumeRow["wastage"]}'); ";
// //int ret = Utils.netClientDBHelper.executeUpdate(sql);
// return sql;
//}
public string GetMergeConsumeInfoSql(DataRowView selectedConsumeRow, string newReportCode, string siteCode)
{
string sql = $@" INSERT INTO [dbo].[mes_report_work_consume]
([record_id], [workorder_code], [material_code], [material_name], [material_spc],
[quantity], [unit], [remark], [attr1], [attr2],
[attr3], [attr4], [create_by], [create_time], [update_by],
[update_time], [factory_code], [report_code], [del_flag],[parent_order],[recoil],[IP],[version],[rspos])
VALUES
('{Common.GetUUID()}', '{selectedConsumeRow["workorder_code"]}', '{selectedConsumeRow["material_code"]}', '{selectedConsumeRow["material_name"]}', '{selectedConsumeRow["material_spc"]}',
'{selectedConsumeRow["qty"]}','{selectedConsumeRow["unit"]}', '{selectedConsumeRow["remark"]}', NULL, NULL,
NULL, NULL, '{LoginUser.UserName}', GetDate(), '{LoginUser.UserName}',
GetDate(), '{siteCode}', '{newReportCode}', '0','{selectedConsumeRow["parent_work_order"]}','{selectedConsumeRow["recoil"]}','{LoginUser.CurrDeviceIP}','{LoginUser.Version}','{selectedConsumeRow["attr1"]}'); ";
//int ret = Utils.netClientDBHelper.executeUpdate(sql);
string sql = $@"
MERGE [dbo].[mes_report_work_consume] AS target
USING (SELECT
'{selectedConsumeRow["workorder_code"]}' AS workorder_code,
'{selectedConsumeRow["material_code"]}' AS material_code
) AS source
ON target.workorder_code = source.workorder_code
AND target.material_code = source.material_code
WHEN MATCHED THEN
UPDATE SET
material_name = '{selectedConsumeRow["material_name"]}',
material_spc = '{selectedConsumeRow["material_spc"]}',
quantity = '{selectedConsumeRow["qty"]}',
unit = '{selectedConsumeRow["unit"]}',
remark = '{selectedConsumeRow["remark"]}',
update_by = '{LoginUser.UserName}',
update_time = GETDATE(),
factory_code = '{siteCode}',
report_code = '{newReportCode}',
del_flag = '0',
parent_order = '{selectedConsumeRow["parent_work_order"]}',
recoil = '{selectedConsumeRow["recoil"]}',
IP = '{LoginUser.CurrDeviceIP}',
version = '{LoginUser.Version}',
rspos = '{selectedConsumeRow["attr1"]}',
wastage = '{selectedConsumeRow["wastage"]}'
WHEN NOT MATCHED THEN
INSERT ([record_id], [workorder_code], [material_code], [material_name], [material_spc],
[quantity], [unit], [remark], [attr1], [attr2],
[attr3], [attr4], [create_by], [create_time], [update_by],
[update_time], [factory_code], [report_code], [del_flag], [parent_order], [recoil], [IP], [version], [rspos], [wastage])
VALUES ('{Common.GetUUID()}', '{selectedConsumeRow["workorder_code"]}', '{selectedConsumeRow["material_code"]}', '{selectedConsumeRow["material_name"]}', '{selectedConsumeRow["material_spc"]}',
'{selectedConsumeRow["qty"]}', '{selectedConsumeRow["unit"]}', '{selectedConsumeRow["remark"]}', NULL, NULL,
NULL, NULL, '{LoginUser.UserName}', GETDATE(), '{LoginUser.UserName}',
GETDATE(), '{siteCode}', '{newReportCode}', '0', '{selectedConsumeRow["parent_work_order"]}', '{selectedConsumeRow["recoil"]}', '{LoginUser.CurrDeviceIP}', '{LoginUser.Version}', '{selectedConsumeRow["attr1"]}', '{selectedConsumeRow["wastage"]}');
";
return sql;
}
/// <summary>
/// 获取母单的包工人数
/// </summary>
@ -1701,9 +1744,23 @@ where machine_code = 'X1' and bind_status = '0' order by update_time DESC";
public bool UpdateProWorkBatchInWork(string lineCode, string batchCode, string workorderCode, string productCode, string productName, string productdescen, string boxType, string packType, string umrez, string status, string productDate)
{
string sql = $@"update pro_workbatch_inwork set workorder_code='{workorderCode}',batch='{batchCode}',product_code='{productCode}',status='{status}',product_name='{productName}',product_name_en='{productdescen}',box_type='{boxType}',pack_type='{packType}',umrez='{umrez}',product_date='{productDate}' where line_code='{lineCode}' ";
LogHelper.instance.log.Info($"sql:" + sql);
return Utils.netClientDBHelper.executeUpdate(sql) > 0;
}
///// <summary>
///// 恢复生产时再次写入装数
///// </summary>
///// <param name="umrez"></param>
///// <param name="lineCode"></param>
///// <returns></returns>
//public bool SecondUpdateProWorkBatchInWork(string umrez, string lineCode)
//{
// string sql = $@"update pro_workbatch_inwork set workorder_code='{workorderCode}',product_code='{productCode}',status='{status}',product_name='{productName}',product_name_en='{productdescen}',pack_type='{packType}',umrez='{umrez}',product_date='{productDate}' where line_code='{lineCode}' ";
// LogHelper.instance.log.Info($"sql:" + sql);
// return Utils.netClientDBHelper.executeUpdate(sql) > 0;
//}
public DataTable GetProductSize(string productCode)
{
string sql = $"SELECT length,width,height from base_product where product_code='{productCode}'";
@ -1732,9 +1789,9 @@ where machine_code = 'X1' and bind_status = '0' order by update_time DESC";
return null;
}
public bool UpdateProWorkBatchInWorkStatus(string lineCode, string status)
public bool UpdateProWorkBatchInWorkStatus(string lineCode, string status,string packType)
{
string sql = $@"update pro_workbatch_inwork set status='{status}' where line_code='{lineCode}' ";
string sql = $@"update pro_workbatch_inwork set status='{status}',pack_type='{packType}' where line_code='{lineCode}' ";
return Utils.netClientDBHelper.executeUpdate(sql) > 0;
}

@ -297,7 +297,7 @@ where CONVERT(VARCHAR(10), create_time , 120)= CONVERT(VARCHAR(10), '{LoginUser.
public DataTable GetCosumeData(string workorder)
{
string sql = $@"select DISTINCT '0' as qty,'' as remark, pre.workorder_code, SUBSTRING(material_code, 8, LEN(material_code)) as material_code1,material_code,material_name,detail.prod_type,material_spc,detail.unit,quantity,
string sql = $@"select DISTINCT '0' as qty,'0' as wastage,'' as remark, pre.workorder_code, SUBSTRING(material_code, 8, LEN(material_code)) as material_code1,material_code,material_name,detail.prod_type,material_spc,detail.unit,quantity,
detail.create_by,detail.create_time,detail.update_by,detail.update_time,locator,need_date,
recoil,fund_quanlity,detail.del_flag,parent_work_order,detail.attr1,orders.workorder_code_sap
from mes_prepare_detail detail
@ -700,7 +700,9 @@ select a.TrayCode,a.ProductBarNo,a.carcode,a.createtime,a.lineno,b.HadNumber
// workorder.parent_order ='0' and CONVERT(VARCHAR(10), workorder.product_date , 120)= CONVERT(VARCHAR(10), '{date}' , 120) and workorder.prod_line_code like '%{deviceCode}%' order by sort_no,batch_code";
////string sql = $"WITH LatestCheck AS (\r\n SELECT \r\n *,\r\n ROW_NUMBER() OVER (PARTITION BY order_no, income_batch_no ORDER BY create_time DESC) AS rn\r\n FROM \r\n qc_check_task\r\n WHERE \r\n check_type = 'checkTypeCPPC' \r\n AND del_flag = 0\r\n)\r\nSELECT \r\n workorder.factory_code,\r\n workorder.product_date AS plan_time,\r\n workorder.workorder_id,\r\n workorder.workorder_code,\r\n product_code,\r\n product_name,\r\n product_spc,\r\n shifts.shift_desc,\r\n prod_line_code,\r\n workorder.status,\r\n route_code,\r\n quantity_split,\r\n workorder.unit,\r\n workorder.shift_id,\r\n batch.batch_code,\r\n batch.batch_quantity,\r\n sort_no,\r\n workorder.parent_order,\r\n batch.qc_status,\r\n ISNULL(batch.qc_result, '') AS qc_result,\r\n batch.status AS batchStatus,\r\n workorder_code_sap,\r\n salary_flag,\r\n qty.batchQty,\r\n batch.batch_quantity - qty.batchQty AS diffQty,\r\n chack.create_time,\r\n chack.check_status\r\nFROM \r\n pro_order_workorder workorder WITH (NOLOCK)\r\nLEFT JOIN \r\n base_shifts_t shifts WITH (NOLOCK) ON workorder.shift_id = shifts.shift_id\r\nLEFT JOIN \r\n pro_order_workorder_batch batch WITH (NOLOCK) ON workorder.workorder_id = batch.workorder_id\r\nOUTER APPLY \r\n (SELECT TOP 1 * \r\n FROM LatestCheck \r\n WHERE rn = 1 \r\n AND workorder.workorder_code = LatestCheck.order_no \r\n AND batch.batch_code = LatestCheck.income_batch_no) chack\r\nLEFT JOIN \r\n (SELECT sum(quantity_feedback) AS batchQty, workorder_code, batch \r\n FROM [dbo].[mes_report_work] \r\n WHERE del_flag = 0 \r\n GROUP BY workorder_code, batch) qty \r\n ON qty.workorder_code = workorder.workorder_code AND batch.batch_code = qty.batch\r\nWHERE \r\n 1 = 1 \r\n AND batch.del_flag = 0 \r\n AND workorder.del_flag = 0 \r\n AND workorder.parent_order = '0' \r\n AND CONVERT(VARCHAR(10), workorder.product_date, 120) = CONVERT(VARCHAR(10), '{date}', 120) \r\n AND workorder.prod_line_code LIKE '%{deviceCode}%'\r\nORDER BY \r\n sort_no, batch_code;\r\n";
string sql = $"WITH LatestCheck AS (\r\n SELECT \r\n *,\r\n ROW_NUMBER() OVER (PARTITION BY order_no, income_batch_no ORDER BY create_time DESC) AS rn\r\n FROM \r\n qc_check_task\r\n WHERE \r\n check_type = 'checkTypeCPPC' \r\n AND del_flag = 0\r\n)\r\nSELECT \r\n workorder.factory_code,\r\n workorder.product_date AS plan_time,\r\n workorder.workorder_id,\r\n workorder.workorder_code,\r\n product_code,\r\n product_name,\r\n product_spc,\r\n shifts.shift_desc,\r\n prod_line_code,\r\n workorder.status,\r\n route_code,\r\n quantity_split,\r\n workorder.unit,\r\n workorder.shift_id,\r\n batch.batch_code,\r\n batch.batch_quantity,\r\n sort_no,\r\n workorder.parent_order,\r\n batch.qc_status,\r\n ISNULL(batch.qc_result, '') AS qc_result,\r\n batch.status AS batchStatus,\r\n workorder_code_sap,\r\n salary_flag,\r\n qty.batchQty,\r\n batch.batch_quantity - qty.batchQty AS diffQty,\r\n chack.create_time,\r\n chack.check_status,CASE\r\n WHEN batch.attr1 = '1' THEN 'false'\r\n ELSE 'true'\r\n END AS IsEnabled,\r\n CASE\r\n WHEN batch.attr1 = '1' THEN '结束'\r\n ELSE '开始'\r\n END AS BtnTest ,\r\n batch.batch_id AS batchId \r\nFROM \r\n pro_order_workorder workorder WITH (NOLOCK)\r\nLEFT JOIN \r\n base_shifts_t shifts WITH (NOLOCK) ON workorder.shift_id = shifts.shift_id\r\nLEFT JOIN \r\n pro_order_workorder_batch batch WITH (NOLOCK) ON workorder.workorder_id = batch.workorder_id\r\nOUTER APPLY \r\n (SELECT TOP 1 * \r\n FROM LatestCheck \r\n WHERE rn = 1 \r\n AND workorder.workorder_code = LatestCheck.order_no \r\n AND batch.batch_code = LatestCheck.income_batch_no) chack\r\nLEFT JOIN \r\n (SELECT sum(quantity_feedback) AS batchQty, workorder_code, batch \r\n FROM [dbo].[mes_report_work] \r\n WHERE del_flag = 0 \r\n GROUP BY workorder_code, batch) qty \r\n ON qty.workorder_code = workorder.workorder_code AND batch.batch_code = qty.batch\r\nWHERE \r\n 1 = 1 \r\n AND batch.del_flag = 0 \r\n AND workorder.del_flag = 0 \r\n AND workorder.parent_order = '0' \r\n AND CONVERT(VARCHAR(10), workorder.product_date, 120) = CONVERT(VARCHAR(10), '{date}', 120) \r\n AND workorder.prod_line_code LIKE '%{deviceCode}%'\r\nORDER BY \r\n sort_no, batch_code;\r\n";
//string sql = $"WITH LatestCheck AS (\r\n SELECT \r\n *,\r\n ROW_NUMBER() OVER (PARTITION BY order_no, income_batch_no ORDER BY create_time DESC) AS rn\r\n FROM \r\n qc_check_task\r\n WHERE \r\n check_type = 'checkTypeCPPC' \r\n AND del_flag = 0\r\n)\r\nSELECT \r\n workorder.factory_code,\r\n workorder.product_date AS plan_time,\r\n workorder.workorder_id,\r\n workorder.workorder_code,\r\n product_code,\r\n product_name,\r\n product_spc,\r\n shifts.shift_desc,\r\n prod_line_code,\r\n workorder.status,\r\n route_code,\r\n quantity_split,\r\n workorder.unit,\r\n workorder.shift_id,\r\n batch.batch_code,\r\n batch.batch_quantity,\r\n sort_no,\r\n workorder.parent_order,\r\n batch.qc_status,\r\n ISNULL(batch.qc_result, '') AS qc_result,\r\n batch.status AS batchStatus,\r\n workorder_code_sap,\r\n salary_flag,\r\n qty.batchQty,\r\n batch.batch_quantity - qty.batchQty AS diffQty,\r\n chack.create_time,\r\n chack.check_status,CASE\r\n WHEN batch.attr1 = '1' THEN 'false'\r\n ELSE 'true'\r\n END AS IsEnabled,\r\n CASE\r\n WHEN batch.attr1 = '1' THEN '结束'\r\n ELSE '开始'\r\n END AS BtnTest ,\r\n batch.batch_id AS batchId \r\nFROM \r\n pro_order_workorder workorder WITH (NOLOCK)\r\nLEFT JOIN \r\n base_shifts_t shifts WITH (NOLOCK) ON workorder.shift_id = shifts.shift_id\r\nLEFT JOIN \r\n pro_order_workorder_batch batch WITH (NOLOCK) ON workorder.workorder_id = batch.workorder_id\r\nOUTER APPLY \r\n (SELECT TOP 1 * \r\n FROM LatestCheck \r\n WHERE rn = 1 \r\n AND workorder.workorder_code = LatestCheck.order_no \r\n AND batch.batch_code = LatestCheck.income_batch_no) chack\r\nLEFT JOIN \r\n (SELECT sum(quantity_feedback) AS batchQty, workorder_code, batch \r\n FROM [dbo].[mes_report_work] \r\n WHERE del_flag = 0 \r\n GROUP BY workorder_code, batch) qty \r\n ON qty.workorder_code = workorder.workorder_code AND batch.batch_code = qty.batch\r\nWHERE \r\n 1 = 1 \r\n AND batch.del_flag = 0 \r\n AND workorder.del_flag = 0 \r\n AND workorder.parent_order = '0' \r\n AND CONVERT(VARCHAR(10), workorder.product_date, 120) = CONVERT(VARCHAR(10), '{date}', 120) \r\n AND workorder.prod_line_code LIKE '%{deviceCode}%'\r\nORDER BY \r\n sort_no, batch_code;\r\n";
//string sql = $"WITH LatestCheck AS (\r\n SELECT\r\n *,\r\n ROW_NUMBER() OVER (PARTITION BY order_no, income_batch_no ORDER BY create_time DESC) AS rn\r\n FROM\r\n qc_check_task\r\n WHERE\r\n check_type = 'checkTypeCPPC'\r\n AND del_flag = 0\r\n)\r\nSELECT\r\n workorder.factory_code,\r\n workorder.product_date AS plan_time,\r\n workorder.workorder_id,\r\n workorder.workorder_code,\r\n workorder.product_code,\r\n product_name,\r\n product_spc,\r\n shifts.shift_desc,\r\n prod_line_code,\r\n workorder.status,\r\n route_code,\r\n quantity_split,\r\n workorder.unit,\r\n workorder.shift_id,\r\n batch.batch_code,\r\n batch.batch_quantity,\r\n sort_no,\r\n workorder.parent_order,\r\n batch.qc_status,\r\n ISNULL(batch.qc_result, '') AS qc_result,\r\n batch.status AS batchStatus,\r\n workorder_code_sap,\r\n salary_flag,\r\n qty.batchQty,\r\n batch.batch_quantity - qty.batchQty AS diffQty,\r\n chack.create_time,\r\n chack.check_status,\r\n CASE\r\n WHEN batch.attr1 = '1' THEN 'false'\r\n ELSE 'true'\r\n END AS IsEnabled,\r\n CASE\r\n WHEN batch.attr1 = '1' THEN '结束'\r\n ELSE '开始'\r\n END AS BtnTest,\r\n batch.batch_id AS batchId,\r\n bpa.man_standar\r\nFROM\r\n pro_order_workorder workorder WITH (NOLOCK)\r\nLEFT JOIN\r\n base_shifts_t shifts WITH (NOLOCK) ON workorder.shift_id = shifts.shift_id\r\nLEFT JOIN\r\n pro_order_workorder_batch batch WITH (NOLOCK) ON workorder.workorder_id = batch.workorder_id\r\nOUTER APPLY\r\n (SELECT TOP 1 *\r\n FROM LatestCheck\r\n WHERE rn = 1\r\n AND workorder.workorder_code = LatestCheck.order_no\r\n AND batch.batch_code = LatestCheck.income_batch_no) chack\r\nLEFT JOIN\r\n (SELECT sum(quantity_feedback) AS batchQty, workorder_code, batch\r\n FROM [dbo].[mes_report_work]\r\n WHERE del_flag = 0\r\n GROUP BY workorder_code, batch) qty\r\n ON qty.workorder_code = workorder.workorder_code AND batch.batch_code = qty.batch\r\nLEFT JOIN base_product_attached bpa\r\n ON bpa.product_code =\r\n STUFF(workorder.product_code, 1, PATINDEX('%[^0]%', workorder.product_code)-1, '')\r\nWHERE\r\n 1 = 1\r\n AND batch.del_flag = 0\r\n AND workorder.del_flag = 0\r\n AND workorder.parent_order = '0'\r\n AND CONVERT(VARCHAR(10), workorder.product_date, 120) = CONVERT(VARCHAR(10), '{date}', 120)\r\n AND workorder.prod_line_code LIKE '%{deviceCode}%'\r\nORDER BY\r\n sort_no, batch_code;";
string sql = $"WITH LatestCheck AS (SELECT *,\r\n ROW_NUMBER() OVER (PARTITION BY order_no, income_batch_no ORDER BY create_time DESC) AS rn\r\n FROM qc_check_task\r\n WHERE check_type = 'checkTypeCPPC'\r\n AND del_flag = 0)\r\nSELECT workorder.factory_code,\r\n workorder.product_date AS plan_time,\r\n workorder.workorder_id,\r\n workorder.workorder_code,\r\n workorder.product_code,\r\n workorder.product_name,\r\n product_spc,\r\n shifts.shift_desc,\r\n prod_line_code,\r\n workorder.status,\r\n route_code,\r\n quantity_split,\r\n workorder.unit,\r\n workorder.shift_id,\r\n batch.batch_code,\r\n batch.batch_quantity,\r\n sort_no,\r\n workorder.parent_order,\r\n batch.qc_status,\r\n ISNULL(batch.qc_result, '') AS qc_result,\r\n batch.status AS batchStatus,\r\n workorder_code_sap,\r\n salary_flag,\r\n qty.batchQty,\r\n batch.batch_quantity - qty.batchQty AS diffQty,\r\n chack.create_time,\r\n chack.check_status,\r\n CASE WHEN batch.attr1 = '1' THEN 'false' ELSE 'true' END AS IsEnabled,\r\n CASE WHEN batch.attr1 = '1' THEN '结束' ELSE '开始' END AS BtnTest,\r\n batch.batch_id AS batchId,\r\n mlp.use_man\r\nFROM pro_order_workorder workorder WITH (NOLOCK)\r\n LEFT JOIN base_shifts_t shifts WITH (NOLOCK) ON workorder.shift_id = shifts.shift_id\r\n LEFT JOIN pro_order_workorder_batch batch WITH (NOLOCK) ON workorder.workorder_id = batch.workorder_id\r\n OUTER APPLY (SELECT TOP 1 *\r\n FROM LatestCheck\r\n WHERE rn = 1\r\n AND workorder.workorder_code = LatestCheck.order_no\r\n AND batch.batch_code = LatestCheck.income_batch_no) chack\r\n LEFT JOIN (SELECT sum(quantity_feedback) AS batchQty, workorder_code, batch\r\n FROM [dbo].[mes_report_work]\r\n WHERE del_flag = 0\r\n GROUP BY workorder_code, batch) qty\r\n ON qty.workorder_code = workorder.workorder_code AND batch.batch_code = qty.batch\r\n LEFT JOIN mes_line_product mlp ON mlp.product_code = workorder.product_code AND mlp.del_flag = '0' AND mlp.line_code LIKE '%{deviceCode}%'\r\nWHERE 1 = 1\r\n AND batch.del_flag = 0\r\n AND workorder.del_flag = 0\r\n AND workorder.parent_order = '0'\r\n AND CONVERT(VARCHAR(10), workorder.product_date, 120) = CONVERT(VARCHAR(10), '{date}', 120)\r\n AND workorder.prod_line_code LIKE '%{deviceCode}%'\r\nORDER BY sort_no, batch_code;";
DataSet dtset = Utils.netClientDBHelper.getDataSet(sql);
if (dtset != null && dtset.Tables.Count > 0 && dtset.Tables[0].Rows.Count > 0)
{

@ -195,6 +195,5 @@ public partial class AreaPlc : TBase
sb.Append(")");
return sb.ToString();
}
}

@ -10,7 +10,7 @@
<!--车间编码-->
<add key="SiteCode" value="1000" />
<!--设备编码-->
<add key="DeviceCode" value="XL03" />
<add key="DeviceCode" value="XL05" />
<!--上位机类型 0:工单准备1成型机\shoupei2烘房,3:人员登录,4:称重系统-->
<add key="ClientMode" value="1" />

@ -574,6 +574,11 @@
Binding="{Binding qty}"
Header="实际用量"
IsReadOnly="False" />
<DataGridTextColumn
Width="120"
Binding="{Binding wastage}"
Header="损耗"
IsReadOnly="False" />
<DataGridTextColumn
Width="100"
Binding="{Binding parent_work_order}"

@ -48,6 +48,7 @@ namespace XGLFinishPro.Views
public bool? _isEndReport = false;
public string _deviceCode = "";
public string _siteCode = "";
public string _lossCode = "";
DataRowView selectedRow = null;
int sortNo = 0; //定义一个整数,记录子集级数
@ -508,15 +509,18 @@ namespace XGLFinishPro.Views
if (_isEndReport.Value == true || selectedRow["status"].ToString().Equals("w4"))//20240424添加预报工功能暂停状态下添加消耗数据录入功能
{
CreateBaseQty();//将=0的根据公式填充进去
//CreateBaseWastage();//将=0的根据公式填充进去/
foreach (var row in dgConsumeInfo.Items)
{
var selectedConsumeRow = (row as DataRowView);
var qty = selectedConsumeRow["qty"].ToString() == "" ? "0" : selectedConsumeRow["qty"].ToString();
var wastage = selectedConsumeRow["wastage"].ToString() == "" ? "0" : selectedConsumeRow["wastage"].ToString();
var remark = selectedConsumeRow["remark"].ToString();
string insertConsumeSql = formingMachineService.GetInsertConsumeInfoSql(selectedConsumeRow, newReportCode, _siteCode);
string insertConsumeSql = formingMachineService.GetMergeConsumeInfoSql(selectedConsumeRow, newReportCode, _siteCode);
reportWorkSqlList.Add(insertConsumeSql);
LogHelper.instance.log.Error("报工SQL生成" + insertConsumeSql);
#region
@ -829,6 +833,22 @@ namespace XGLFinishPro.Views
}
}
//private void CreateBaseWastage()
//{
// if (_siteCode == "")
// return;
// //生成推荐实际消耗量
// double rate = GetOrderRate();
// if (rate == 0)
// return;
// foreach (System.Data.DataRow item in dtCosumeData.Rows)
// {
// //变更为只有等于0的时候才填值
// if (item["wastage"].ToString().Equals("0"))
// item["wastage"] = Math.Round(Convert.ToDouble(item["wastage"]) * rate, 2);
// }
//}
private void txtQuantity_TextChanged(object sender, TextChangedEventArgs e)
{
if (!Regex.IsMatch(this.txtQuantity.Text, @"^\d+(\.\d+)?$"))

@ -0,0 +1,13 @@
<Window x:Class="XGLFinishPro.Views.InputNumberDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="叫料数量" Height="180" Width="300" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
<StackPanel Margin="20">
<TextBlock Text="请输入叫料数量:" Margin="0,0,0,10"/>
<TextBox x:Name="txtNumber" PreviewTextInput="txtNumber_PreviewTextInput" Width="200" MaxLength="8"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,20,0,0">
<Button Content="确定" Width="60" Margin="0,0,10,0" Click="BtnOk_Click"/>
<Button Content="取消" Width="60" Click="BtnCancel_Click"/>
</StackPanel>
</StackPanel>
</Window>

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace XGLFinishPro.Views
{
/// <summary>
/// InputNumberDialog.xaml 的交互逻辑
/// </summary>
public partial class InputNumberDialog : Window
{
public string InputValue { get; private set; }
public InputNumberDialog()
{
InitializeComponent();
}
private void BtnOk_Click(object sender, RoutedEventArgs e)
{
InputValue = txtNumber.Text;
DialogResult = true;
}
private void BtnCancel_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
}
private void txtNumber_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
// 只允许输入数字
e.Handled = !Regex.IsMatch(e.Text, "^[0-9]+$");
}
}
}

@ -178,7 +178,7 @@
Margin="10"
Background="#2B7EE6"
Click="Submit_Click"
Content="提交"
Content="保存"
FontSize="20"
Foreground="White" />
<Button

@ -123,7 +123,7 @@
<Button Content="刷新" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Refresh_Click"/>
<Button x:Name="Add" Content="新增一列" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Add_Click"/>
<Button x:Name="IsFinalSubmit" Content="最终提交" Background="Red" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Submit_Click"/>
<Button x:Name="Commit" Content="提交" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Submit_Click"/>
<Button x:Name="Commit" Content="保存" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Submit_Click"/>
<Button Content="关闭" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Close_Click"/>
</StackPanel>

@ -135,7 +135,7 @@
<Button Content="刷新" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Refresh_Click"/>
<Button x:Name="Add" Content="新增一列" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Add_Click"/>
<Button x:Name="IsFinalSubmit" Content="最终提交" Background="Red" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Submit_Click"/>
<Button x:Name="Commit" Content="提交" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Submit_Click"/>
<Button x:Name="Commit" Content="保存" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Submit_Click"/>
<Button Content="关闭" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Close_Click"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="0">

@ -93,172 +93,214 @@ namespace XGLFinishPro.Views
private void LoadData(bool addLine = false)
{
isUpdate = true;
list.Clear();
DataTable dataTable = dbService.GetProOrderWorkorder(workId);
if (dataTable != null && dataTable.Rows.Count > 0)
try
{
//LProductName = dataTable.Rows[0]["product_name"].ToString();
//this.RightProductName.Text = dataTable.Rows[0]["product_name"].ToString();
product_code = dataTable.Rows[0]["product_code"].ToString();
}
var leftHearList = dbService.GetSelfCheckInfo("first_inspection_left").OrderBy(t => t.dict_sort).ToList();
var leftMainList = dbService.GetSelfCheckInfo("first_inspection_left_info").OrderBy(t => t.dict_sort).ToList();
var rightHearList = dbService.GetSelfCheckInfo("first_inspection_right").OrderBy(t => t.dict_sort).ToList();
var rightMainList = dbService.GetSelfCheckInfo("first_inspection_right_info").OrderBy(t => t.dict_sort).ToList();
isUpdate = true;
list.Clear();
DataTable dataTable = dbService.GetProOrderWorkorder(workId);
if (dataTable == null || dataTable.Rows.Count == 0)
{
Console.WriteLine("[Error] 未获取到工单信息workId: " + workId);
LogHelper.instance.log.Error("[Error] 未获取到工单信息workId: " + workId);
}
else
{
if (dataTable.Rows.Count > 0)
{
product_code = dataTable.Rows[0]["product_code"].ToString();
}
}
var leftHearList = dbService.GetSelfCheckInfo("first_inspection_left").OrderBy(t => t.dict_sort).ToList();
if (leftHearList == null || !leftHearList.Any())
{
Console.WriteLine("[Error] 未获取到左侧检查信息。");
LogHelper.instance.log.Error("[Error] 未获取到左侧检查信息。");
}
var leftMainList = dbService.GetSelfCheckInfo("first_inspection_left_info").OrderBy(t => t.dict_sort).ToList();
if (leftMainList == null || !leftMainList.Any())
{
Console.WriteLine("[Error] 未获取到左侧主检查信息。");
LogHelper.instance.log.Error("[Error] 未获取到左侧主检查信息。");
}
var rightHearList = dbService.GetSelfCheckInfo("first_inspection_right").OrderBy(t => t.dict_sort).ToList();
if (rightHearList == null || !rightHearList.Any())
{
Console.WriteLine("[Error] 未获取到右侧检查信息。");
LogHelper.instance.log.Error("[Error] 未获取到右侧检查信息。");
}
var rightMainList = dbService.GetSelfCheckInfo("first_inspection_right_info").OrderBy(t => t.dict_sort).ToList();
if (rightMainList == null || !rightMainList.Any())
{
Console.WriteLine("[Error] 未获取到右侧主检查信息。");
LogHelper.instance.log.Error("[Error] 未获取到右侧主检查信息。");
}
GetMesTableSeft();
leftData = dbService.GetMesTableSelfDetial(leftbelong_to, 6);
rightData = dbService.GetMesTableSelfDetial(rightbelong_to, 6);
if (addLine)
{
int leftLine = leftData.Max(t => t.table_line) + 1;
leftData.ForEach(t => { t.index++; });
leftData.Insert(0, new MesTableSelfDetialModel() { index = 0 });
leftData.RemoveAll(t => t.index == 6);
GetMesTableSeft();
leftData = dbService.GetMesTableSelfDetial(leftbelong_to, 6);
if (leftData == null || !leftData.Any())
{
Console.WriteLine("[Error] 未获取到左侧详细检查数据。");
LogHelper.instance.log.Error("[Error] 未获取到左侧详细检查数据。");
}
rightData = dbService.GetMesTableSelfDetial(rightbelong_to, 6);
if (rightData == null || !rightData.Any())
{
Console.WriteLine("[Error] 未获取到右侧详细检查数据。");
LogHelper.instance.log.Error("[Error] 未获取到右侧详细检查数据。");
}
int rightLine = rightData.Max(t => t.table_line) + 1;
rightData.ForEach(t => { t.index++; });
rightData.Insert(0, new MesTableSelfDetialModel() { index = 0 });
rightData.RemoveAll(t => t.index == 6);
}
if (addLine)
{
int leftLine = leftData.Max(t => t.table_line) + 1;
leftData.ForEach(t => { t.index++; });
leftData.Insert(0, new MesTableSelfDetialModel() { index = 0 });
leftData.RemoveAll(t => t.index == 6);
int rightLine = rightData.Max(t => t.table_line) + 1;
rightData.ForEach(t => { t.index++; });
rightData.Insert(0, new MesTableSelfDetialModel() { index = 0 });
rightData.RemoveAll(t => t.index == 6);
}
for (var i = 0; i < 7; i++)
{
foreach (var item in leftHearList)
{
bool hasData = leftData.Where(t => t.index == i && t.info_name == item.dict_label).Any();
if (!hasData)
{
int tableLine = 0;
MesTableSelfDetialModel mesTableSelfDetialModel = leftData.Where(t => t.index == i).Where(t => t.table_line != 0).FirstOrDefault();
if (mesTableSelfDetialModel != null)
{
tableLine = mesTableSelfDetialModel.table_line;
}
else
{
try
{
tableLine = leftData.Max(t => t.table_line) + 1;
}
catch
{
for (var i = 0; i < 7; i++)
{
}
}
leftData.Add(new MesTableSelfDetialModel()
{
index = i,
table_line = tableLine,
info_name = item.dict_label,
info_code = leftHearList.FirstOrDefault(t => t.dict_label == item.dict_label)?.dict_code,
});
list.Add(new ConveterData()
{
label = item.dict_label,
value = MD5Provider.Hash(item.dict_label),
});
}
}
foreach (var item in rightHearList)
{
bool hasData = rightData.Where(t => t.index == i && t.info_name == item.dict_label).Any();
if (!hasData)
{
int tableLine = 0;
MesTableSelfDetialModel mesTableSelfDetialModel = rightData.Where(t => t.index == i).Where(t => t.table_line != 0).FirstOrDefault();
if (mesTableSelfDetialModel != null)
{
tableLine = mesTableSelfDetialModel.table_line;
}
else
{
try
{
tableLine = rightData.Max(t => t.table_line) + 1;
}
catch
{
}
}
rightData.Add(new MesTableSelfDetialModel()
{
index = i,
table_line = tableLine,
info_name = item.dict_label,
info_code = rightHearList.FirstOrDefault(t => t.dict_label == item.dict_label)?.dict_code,
});
list.Add(new ConveterData()
{
label = item.dict_label,
value = MD5Provider.Hash(item.dict_label),
});
}
}
}
var leftDic = new Dictionary<string, Dictionary<int, MesTableSelfDetialModel>>();
foreach (var item in leftData)
{
if (item.info_name == null || leftDic.Keys.Contains(item.info_name))
{
continue;
}
var mesTableSelfDetialModels = leftData.Where(t => t.info_name == item.info_name).ToList();
var dictionary = mesTableSelfDetialModels.ToDictionary(t => t.index);
leftDic.Add(item.info_name, dictionary);
}
var rightDic = new Dictionary<string, Dictionary<int, MesTableSelfDetialModel>>();
foreach (var item in rightData)
{
if (item.info_name == null || rightDic.Keys.Contains(item.info_name))
{
continue;
}
var mesTableSelfDetialModels = rightData.Where(t => t.info_name == item.info_name).ToList();
var dictionary = mesTableSelfDetialModels.ToDictionary(t => t.index);
rightDic.Add(item.info_name, dictionary);
}
list.ForEach(t => t.value.Remove(9, 11));
list.ForEach(t => t.value = t.value.Insert(0, "A"));
MakeHeaderData(this.Left);
//MakeHeaderData(this.Right);
var leftTypeDic = new Dictionary<string, List<string>>();
foreach (var item in leftHearList)
{
bool hasData = leftData.Where(t => t.index == i && t.info_name == item.dict_label).Any();
if (!hasData)
var defaultDic = leftMainList.Where(t => string.IsNullOrEmpty(t.remark)).Select(t => t.dict_value).ToList();
var typeDic = leftMainList.Where(t => t.remark == item.dict_label).Select(t => t.dict_value).ToList();
defaultDic.AddRange(typeDic);
if (!leftTypeDic.ContainsKey(item.dict_label))
{
int tableLine = 0;
MesTableSelfDetialModel mesTableSelfDetialModel = leftData.Where(t => t.index == i).Where(t => t.table_line != 0).FirstOrDefault();
if (mesTableSelfDetialModel != null)
{
tableLine = mesTableSelfDetialModel.table_line;
}
else
{
try
{
tableLine = leftData.Max(t => t.table_line) + 1;
}
catch
{
}
}
leftData.Add(new MesTableSelfDetialModel()
{
index = i,
table_line = tableLine,
info_name = item.dict_label,
info_code = leftHearList.FirstOrDefault(t => t.dict_label == item.dict_label)?.dict_code,
});
list.Add(new ConveterData()
{
label = item.dict_label,
value = MD5Provider.Hash(item.dict_label),
});
leftTypeDic.Add(item.dict_label, defaultDic);
}
}
var rightTypeDic = new Dictionary<string, List<string>>();
foreach (var item in rightHearList)
{
bool hasData = rightData.Where(t => t.index == i && t.info_name == item.dict_label).Any();
if (!hasData)
var defaultDic = rightMainList.Where(t => string.IsNullOrEmpty(t.remark)).Select(t => t.dict_value).ToList();
var typeDic = rightMainList.Where(t => t.remark == item.dict_label).Select(t => t.dict_value).ToList();
defaultDic.AddRange(typeDic);
if (!rightTypeDic.ContainsKey(item.dict_label))
{
int tableLine = 0;
MesTableSelfDetialModel mesTableSelfDetialModel = rightData.Where(t => t.index == i).Where(t => t.table_line != 0).FirstOrDefault();
if (mesTableSelfDetialModel != null)
{
tableLine = mesTableSelfDetialModel.table_line;
}
else
{
try
{
tableLine = rightData.Max(t => t.table_line) + 1;
}
catch
{
}
}
rightData.Add(new MesTableSelfDetialModel()
{
index = i,
table_line = tableLine,
info_name = item.dict_label,
info_code = rightHearList.FirstOrDefault(t => t.dict_label == item.dict_label)?.dict_code,
});
list.Add(new ConveterData()
{
label = item.dict_label,
value = MD5Provider.Hash(item.dict_label),
});
rightTypeDic.Add(item.dict_label, defaultDic);
}
}
MainValueData(this.Left, leftHearList, leftDic, leftTypeDic);
//MainValueData(this.Right, rightHearList, rightDic, rightTypeDic);
UpdateUi(this.Left);
//UpdateUi(this.Right);
isUpdate = false;
}
var leftDic = new Dictionary<string, Dictionary<int, MesTableSelfDetialModel>>();
foreach (var item in leftData)
catch (Exception ex)
{
if (item.info_name == null || leftDic.Keys.Contains(item.info_name))
{
continue;
}
var mesTableSelfDetialModels = leftData.Where(t => t.info_name == item.info_name).ToList();
var dictionary = mesTableSelfDetialModels.ToDictionary(t => t.index);
leftDic.Add(item.info_name, dictionary);
LogHelper.instance.log.Error("[Error] 加载数据异常!" + ex.Message);
}
var rightDic = new Dictionary<string, Dictionary<int, MesTableSelfDetialModel>>();
foreach (var item in rightData)
{
if (item.info_name == null || rightDic.Keys.Contains(item.info_name))
{
continue;
}
var mesTableSelfDetialModels = rightData.Where(t => t.info_name == item.info_name).ToList();
var dictionary = mesTableSelfDetialModels.ToDictionary(t => t.index);
rightDic.Add(item.info_name, dictionary);
}
list.ForEach(t => t.value.Remove(9, 11));
list.ForEach(t => t.value = t.value.Insert(0, "A"));
MakeHeaderData(this.Left);
//MakeHeaderData(this.Right);
var leftTypeDic = new Dictionary<string, List<string>>();
foreach (var item in leftHearList)
{
var defaultDic = leftMainList.Where(t => string.IsNullOrEmpty(t.remark)).Select(t => t.dict_value).ToList();
var typeDic = leftMainList.Where(t => t.remark == item.dict_label).Select(t => t.dict_value).ToList();
defaultDic.AddRange(typeDic);
if (!leftTypeDic.ContainsKey(item.dict_label))
{
leftTypeDic.Add(item.dict_label, defaultDic);
}
}
var rightTypeDic = new Dictionary<string, List<string>>();
foreach (var item in rightHearList)
{
var defaultDic = rightMainList.Where(t => string.IsNullOrEmpty(t.remark)).Select(t => t.dict_value).ToList();
var typeDic = rightMainList.Where(t => t.remark == item.dict_label).Select(t => t.dict_value).ToList();
defaultDic.AddRange(typeDic);
if (!rightTypeDic.ContainsKey(item.dict_label))
{
rightTypeDic.Add(item.dict_label, defaultDic);
}
}
MainValueData(this.Left, leftHearList, leftDic, leftTypeDic);
//MainValueData(this.Right, rightHearList, rightDic, rightTypeDic);
UpdateUi(this.Left);
//UpdateUi(this.Right);
isUpdate = false;
}
private MesTableSelf leftmesTableSelf;
private void GetMesTableSeft()
@ -871,6 +913,7 @@ namespace XGLFinishPro.Views
private void Submit_Click(object sender, RoutedEventArgs e)
{
bool isSuccess = false;
string isFinal = "0";
if (sender is Button button)
{
@ -897,6 +940,7 @@ namespace XGLFinishPro.Views
});
foreach (var item in leftData)
{
int resultLeft = 0;
if (item.table_line == 0)
{
item.table_line = 1;
@ -908,15 +952,21 @@ namespace XGLFinishPro.Views
var mesTableSelfDetialModel = tempLeftData.FirstOrDefault(t => t.id == item.id);
if (mesTableSelfDetialModel == null)
{
dbService.InsertMesTableSelfDetial(item);
resultLeft = dbService.InsertMesTableSelfDetial(item);
}
else
{
dbService.UpdateMesTableSelfDetial(item);
resultLeft = dbService.UpdateMesTableSelfDetial(item);
}
if (resultLeft > 0)
{
isSuccess = true;
}
}
foreach (var item in rightData)
{
int resultRight = 0;
if (item.table_line == 0)
{
item.table_line = 1;
@ -928,16 +978,29 @@ namespace XGLFinishPro.Views
var mesTableSelfDetialModel = tempRightData.FirstOrDefault(t => t.id == item.id);
if (mesTableSelfDetialModel == null)
{
dbService.InsertMesTableSelfDetial(item);
resultRight = dbService.InsertMesTableSelfDetial(item);
}
else
{
dbService.UpdateMesTableSelfDetial(item);
resultRight = dbService.UpdateMesTableSelfDetial(item);
}
if (resultRight > 0)
{
isSuccess = true;
}
}
dbService.UpdateMesTableSelf(leftbelong_to, "", LoginUser.UserName, isFinal);
//dbService.UpdateMesTableSelf(rightbelong_to, "", LoginUser.UserName);
MessageBox.Show("提交成功!");
if (isSuccess)
{
MessageBox.Show("保存成功!");
}
else
{
MessageBox.Show("保存失败!");
LogHelper.instance.log.Error("[Error] 保存失败!");
}
LoadData();
}
@ -958,33 +1021,41 @@ namespace XGLFinishPro.Views
private void LeftCheckDate_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e)
{
this.date = this.LeftCheckDate.SelectedDate.Value.ToString("yyyy-MM-dd");
DataTable dataTable = dbService.GetProOrderWorkorder(deviceCode, date);
List<OrderWork> orderWorks = new List<OrderWork>();
if (dataTable == null || dataTable.Rows.Count == 0)
try
{
MessageBox.Show("没有查询到工单信息!");
}
else
{
foreach (DataRow row in dataTable.Rows)
this.date = this.LeftCheckDate.SelectedDate.Value.ToString("yyyy-MM-dd");
DataTable dataTable = dbService.GetProOrderWorkorder(deviceCode, date);
List<OrderWork> orderWorks = new List<OrderWork>();
if (dataTable == null || dataTable.Rows.Count == 0)
{
if (orderWorks.Where(t => t.WorkName == row["product_name"].ToString()).Any())
{
continue;
}
orderWorks.Add(new OrderWork()
{
WorkId = row["workorder_id"].ToString(),
WorkName = row["product_name"].ToString(),
});
LogHelper.instance.log.Error("没有查询到工单信息!");
MessageBox.Show("没有查询到工单信息!");
}
else
{
foreach (DataRow row in dataTable.Rows)
{
if (orderWorks.Where(t => t.WorkName == row["product_name"].ToString()).Any())
{
continue;
}
orderWorks.Add(new OrderWork()
{
WorkId = row["workorder_id"].ToString(),
WorkName = row["product_name"].ToString(),
});
}
}
this.LeftProductName.ItemsSource = orderWorks.Distinct();
this.LeftProductName.Items.Refresh();
this.workId = string.Empty;
this.LProductName = string.Empty;
LoadData();
}
catch (Exception ex)
{
LogHelper.instance.log.Error("首检记录获取工单出现异常!" + ex.Message);
}
this.LeftProductName.ItemsSource = orderWorks.Distinct();
this.LeftProductName.Items.Refresh();
this.workId = string.Empty;
this.LProductName = string.Empty;
LoadData();
}
private void LeftProductName_SelectionChanged(object sender, SelectionChangedEventArgs e)

@ -527,6 +527,22 @@
Style="{StaticResource btnKey}"
Visibility="Collapsed" />
</StackPanel>
<StackPanel
Grid.Row="0"
Grid.Column="9"
Background="#F2F3F5">
<Button
x:Name="btnCallMaterialRequest"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Background="#2B7EE6"
Click="btnCallMaterialRequest_Click"
Content="叫料"
FontSize="20"
Foreground="White"
Visibility="Visible"
Style="{StaticResource btnKey}" />
</StackPanel>
</StackPanel>
</ScrollViewer>
@ -579,7 +595,7 @@
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--<DataGridTextColumn Width="60" Header="母单" Binding="{Binding parent_order,Converter={StaticResource ParentOrderConverter}}"/>-->
<DataGridTemplateColumn Width="100" Header="状态">
<DataGridTemplateColumn Width="80" Header="状态">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
@ -600,16 +616,16 @@
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="200"
Width="170"
Binding="{Binding workorder_code_sap}"
Header="SAP工单" />
<!--<DataGridTextColumn Width="120" Header="RFID" Binding="{Binding rfid}"/>-->
<DataGridTextColumn
Width="480"
Width="400"
Binding="{Binding product_name}"
Header="产品名称" />
<DataGridTextColumn
Width="320"
Width="340"
Binding="{Binding batch_code}"
Header="批次号" />
@ -640,6 +656,10 @@
Width="100"
Binding="{Binding diffQty}"
Header="剩余数量" />
<DataGridTextColumn
Width="80"
Binding="{Binding use_man}"
Header="标准用人"/>
<DataGridTextColumn
Width="100"
Binding="{Binding batchStatus, Converter={StaticResource BatchStatusConverter}}"
@ -813,13 +833,15 @@
HorizontalAlignment="Center"
VerticalAlignment="Top"
Background="LightGray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="63*"/>
<ColumnDefinition Width="577*"/>
</Grid.ColumnDefinitions>
<ContentControl
x:Name="Window1"
Grid.ColumnSpan="2"
Width="1920"
Height="300"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" />
Height="300" />
</Grid>

@ -15,6 +15,7 @@ using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using NLog;
using Xceed.Wpf.Toolkit.Primitives;
using XGL.Data;
using XGL.Data.DBService;
@ -42,6 +43,12 @@ namespace XGLFinishPro.Views
public static LanJu_Operator lanJu_Operator;
Frame frame = new Frame() { Content = new Views.LanJu_InOut() };
string deviceCode = Utils.GetAppSetting("DeviceCode");
private List<string> lineList = new List<string> //用于过滤产线来写入PLC箱型尺寸
{
"XL01", "XL02", "XL03", "XL04", "XL05",
"XL06", "XL07", "XL08", "XL09", "XL10", "XL11"
};
Timer timerDeciveState = new Timer();
string _workOrderCode = "";
userDB usdb = new userDB();
@ -434,8 +441,11 @@ namespace XGLFinishPro.Views
if (pauseOrderWin.ShowDialog() == true)
{
PauseRecoverOrderS(workordercode, "w2", pauseOrderWin);
ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 2);
//formingMachineService.UpdateWorkOrder(workordercode, "w2", pauseOrderWin.remark, pauseOrderWin.type, deviceCode);
ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 0);
// 添加写入PLC尺寸信息的逻辑
string materialCode = selectedRow["product_code"].ToString();
WritePlcBoxMessage(materialCode);
GetWorkOrderInfo();
}
@ -667,6 +677,13 @@ namespace XGLFinishPro.Views
// CustomMessageBox.Show("请先校验用户!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
// return;
//}
bool connectResult = plc.Connection(PlcIp);
if (!connectResult)
{
LogHelper.instance.log.Info("PLC连接失败");
CustomMessageBox.Show("PLC连接失败无法开始工单");
return;
}
if (dgWorkOrderInfo.SelectedItems.Count == 0)
{
CustomMessageBox.Show("请选择要开始的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
@ -734,7 +751,12 @@ namespace XGLFinishPro.Views
string materialDesc = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_name"].ToString();
userDbWareHouse.InsertOperationLog(workorderID, "w2", "", "开始工单", deviceCode, materialCode, materialDesc);
ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 0);
WritePlcBoxMessage(materialCode);
LogHelper.instance.log.Info("问题跟踪:设备编号是否为空:"+ deviceCode);
if (!string.IsNullOrEmpty(deviceCode) && lineList.Contains(deviceCode))
{
LogHelper.instance.log.Info("问题跟踪尝试将箱型信息写给PLC"+ materialCode );
WritePlcBoxMessage(materialCode);
}
// await CallCheckApi("checkTypeSCXJ");20240403赵啸林因为切线方案调整要求取消上位机生成巡检任务的功能
GetWorkOrderInfo();
}
@ -784,9 +806,11 @@ namespace XGLFinishPro.Views
if (type == 0)
{
batchCode = "";
LogHelper.instance.log.Info($"开始工单:" + lineCode + "," + batchCode + "," + workorderCode + "," + productCode + "," + productName + "," + productdescen + "," + boxType + "," + packType + "," + umrez + "," + status + "," + LoginUser.WorkDate);
if (!formingMachineService.UpdateProWorkBatchInWork(lineCode, batchCode, workorderCode, productCode, productName, productdescen, boxType, packType, umrez, status, LoginUser.WorkDate))
{
CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Info($"更新打印机表状态失败:" + CustomMessageBoxButton.OK +";"+ CustomMessageBoxIcon.Warning);
return false;
}
}
@ -795,14 +819,16 @@ namespace XGLFinishPro.Views
if (!formingMachineService.UpdateProWorkBatchInWorkBatchCode(lineCode, batchCode, status, productCode, productName))
{
CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Info($"更新打印机表状态失败:" + CustomMessageBoxButton.OK + ";" + CustomMessageBoxIcon.Warning);
return false;
}
}
else if (type == 2)
{
if (!formingMachineService.UpdateProWorkBatchInWorkStatus(lineCode, status))
if (!formingMachineService.UpdateProWorkBatchInWorkStatus(lineCode, status, packType))
{
CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Info($"更新打印机表状态失败:" + CustomMessageBoxButton.OK + ";" + CustomMessageBoxIcon.Warning);
return false;
}
}
@ -967,6 +993,7 @@ namespace XGLFinishPro.Views
string quality = (dgWorkOrderInfo.SelectedItem as DataRowView)["quantity_split"].ToString();
string unit = (dgWorkOrderInfo.SelectedItem as DataRowView)["unit"].ToString();
string plan_time = (dgWorkOrderInfo.SelectedItem as DataRowView)["plan_time"].ToString();
plan_time = plan_time.Replace("/", "-");
//调用首件检验接口
string apiUrl = formingMachineService.GetInterfaceUrl("createCheckProduceTask");
FirstCheckModel firstCheck = new FirstCheckModel();
@ -1150,7 +1177,12 @@ namespace XGLFinishPro.Views
// WritePlcBoxMessage(row["product_code"].ToString());
// }
//}
ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 1);
if (ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 1))
{
DataRowView temp = dgWorkOrderInfo.SelectedItem as DataRowView;
var batchCode = temp["batch_code"].ToString();
LogHelper.instance.log.Info(DateTime.Now + $"已开始批次:" + batchCode);
}
}
else if (content == "结束")
{
@ -1192,10 +1224,12 @@ namespace XGLFinishPro.Views
DataTable pointsDt = formingMachineService.GetWcsPlcPoint(plcPointNo, "ProductSize");
if (pointsDt == null || pointsDt.Rows.Count == 0)
{
LogHelper.instance.log.Info("问题跟踪pointsDt为空或者数量为零");
return;
}
if (dt != null && dt.Rows.Count > 0)
{
LogHelper.instance.log.Info("问题跟踪dt不为空" );
string heigh = dt.Rows[0]["height"].ToString();
string width = dt.Rows[0]["width"].ToString();
string length = dt.Rows[0]["length"].ToString();
@ -1207,7 +1241,16 @@ namespace XGLFinishPro.Views
try
{
count++;
plc.Connection(PlcIp);
//bool connectResult = plc.Connection(PlcIp);
//if (!connectResult)
//{
// LogHelper.instance.log.Info("问题跟踪PLC连接失败");
//}
//else
//{
//}
if (pointsDt != null && pointsDt.Rows.Count > 0)
{
bool writeResult = false;
@ -1240,11 +1283,19 @@ namespace XGLFinishPro.Views
if (writeResult)
{
LogHelper.instance.log.Info($"写入PLC尺寸信息成功新高度{h},新宽度{w},新长度{l}");
LogHelper.instance.log.Info($"写入PLC尺寸信息成功,新高度{h},新宽度{w},新长度{l}");
Dispatcher.Invoke(() =>
{
CustomMessageBox.Show($"写入PLC尺寸信息成功,新高度{h},新宽度{w},新长度{l}");
});
}
else
{
LogHelper.instance.log.Info($"写入PLC尺寸信息失败");
Dispatcher.Invoke(() =>
{
CustomMessageBox.Show($"写入PLC尺寸信息失败");
});
}
}
isSuccess = writeResult;
@ -1254,7 +1305,7 @@ namespace XGLFinishPro.Views
catch (Exception ex)
{
isSuccess = false;
LogHelper.instance.log.Info($"写入PLC尺寸信息失败第{count}次重试{ex}");
LogHelper.instance.log.Error($"写入PLC尺寸信息失败第{count}次重试,异常信息:{ex.Message}", ex);
plc = new PlcHelper();
}
}
@ -1267,9 +1318,9 @@ namespace XGLFinishPro.Views
}
}
}
catch
catch(Exception ex)
{
LogHelper.instance.log.Info("问题跟踪异常:" + ex);
}
});
}
@ -1283,6 +1334,48 @@ namespace XGLFinishPro.Views
IsWrite = false;
}
}
/// <summary>
/// 叫料按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnCallMaterialRequest_Click(object sender, RoutedEventArgs e)
{
// 判断当前窗口内容是否为QitaoLvUC
if (Window1.Content is Frame frame && frame.Content is XGLFinishPro.Views.QitaoLvUC qitaoLvUC)
{
var selectedRow = qitaoLvUC.SelectedMaterialRow;
if (selectedRow == null)
{
CustomMessageBox.Show("请先选中一条领料记录!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
return;
}
// 组装数据
string materialCode = selectedRow["material_code"].ToString();
string materialName = selectedRow["material_name"].ToString();
string quantity = qitaoLvUC.InputQuantity ?? selectedRow["quantity"].ToString();
string locator = selectedRow["locator"].ToString();
// TODO: 这里根据实际需求组装更多字段
// 发送请求(伪代码,需替换为实际接口调用)
try
{
// 这里可以用HttpClient或RestHelper等工具发送请求
// var result = await SomeApiHelper.SendMaterialRequest(materialCode, materialName, quantity, locator);
// 假设成功
CustomMessageBox.Show($"叫料请求已发送!\n物料编码{materialCode}\n物料名称{materialName}\n数量{quantity}\n库位{locator}", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Success);
}
catch (Exception ex)
{
CustomMessageBox.Show($"叫料请求失败:{ex.Message}", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Error);
}
}
else
{
CustomMessageBox.Show("请先点击领料单并选中一条记录!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
}
}
}
public class ReportWorkModel
{

@ -160,7 +160,7 @@
Margin="10"
Background="#2B7EE6"
Click="Submit_Click"
Content="提交"
Content="保存"
FontSize="20"
Foreground="White" />

@ -39,7 +39,8 @@
AutoGenerateColumns="False"
FrozenColumnCount="1"
EnableColumnVirtualization="False"
ScrollViewer.HorizontalScrollBarVisibility="Visible" IsReadOnly="True" CanUserAddRows="False">
ScrollViewer.HorizontalScrollBarVisibility="Visible" IsReadOnly="True" CanUserAddRows="False"
SelectionChanged="dgMaterialInfo_SelectionChanged">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />

@ -26,6 +26,7 @@ namespace XGLFinishPro.Views
{
FinishProdDBService userDbWareHouse = new FinishProdDBService();
string _workOrderCode = "";
public QitaoLvUC()
{
InitializeComponent();
@ -42,6 +43,29 @@ namespace XGLFinishPro.Views
e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}
public string InputQuantity { get; set; }
private void dgMaterialInfo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (dgMaterialInfo.SelectedItem is DataRowView row)
{
string code = row["material_code"].ToString();
string name = row["material_name"].ToString();
// 弹出自定义输入数量窗口
var inputDialog = new InputNumberDialog();
if (inputDialog.ShowDialog() == true)
{
InputQuantity = inputDialog.InputValue;
CustomMessageBox.Show($"物料编码:{code}\n物料名称{name}\n数量{InputQuantity}", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Success);
}
else
{
InputQuantity = null;
}
}
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
try
@ -62,5 +86,13 @@ namespace XGLFinishPro.Views
LogHelper.instance.log.Error("获取工单齐套信息时发生异常:" + ex.Message);
}
}
public DataRowView SelectedMaterialRow
{
get
{
return this.dgMaterialInfo?.SelectedItem as DataRowView;
}
}
}
}

@ -437,6 +437,9 @@
<Compile Include="Views\HBLogWin.xaml.cs">
<DependentUpon>HBLogWin.xaml</DependentUpon>
</Compile>
<Compile Include="Views\InputNumberDialog.xaml.cs">
<DependentUpon>InputNumberDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Views\LanJu_Check_Report.xaml.cs">
<DependentUpon>LanJu_Check_Report.xaml</DependentUpon>
</Compile>
@ -739,6 +742,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\InputNumberDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\LanJu_Check_Report.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>

@ -3,10 +3,10 @@
<Recommand>强烈建议:对数据库以及本软件的参数更改,不要在此页进行.可以通过系统配置页进行更新.</Recommand>
<!--本地的业务数据库-->
<MESClientConnectionString>vadMWi9D6ZBkwIr78LoLmGwiSCvVnpY3nMB7IyQlxFiV2OD5s5WUgOabwGwWK3THofFvPL2rHpOvJVIvtz0oZU/NFQyT8KQlbk0rHjUXoU7wgRdUumDJ1RrSFmIjPm8S</MESClientConnectionString>
<!--榄菊业务数据库-->
<!--榄菊业务数据库-->
<MESNetClientConnectionString>vadMWi9D6ZC3usVUY51rbTRH8TjL6CxlHbduXNDkc8suJwqe10me6ktk8XD3QU91A7V9zSnfhmhLWUQKZQdqof6chkC37l6QElb57z876mZdo9764iNmLGULHBiQyMu6PXowBdyaQVt17BPsWFn4EUs7Z7zTZwBP+2iJBVXitA3OF6EZXxAztmeZk/1iCwni+JzeWNpXqeOoGzkmSSzmVQH2Yf9m/mlqag2TbldSCcnUQl6lE7tcGg==</MESNetClientConnectionString>
<!--榄菊云数据库-->
<CloudConnectionString>vadMWi9D6ZC3usVUY51rbTRH8TjL6CxlHbduXNDkc8suJwqe10me6ktk8XD3QU91ML11cYCqHcHmTXJFsNQamIbW3UEpkjgNPUcBwRfgP6AWftvk9YFyv7y7/6nzX/c+6z6xMDIdcjYVvfteU+7YtOQhJXTfF5ScosAA0GliBfD8dWAunW+ZCos5LemAj2xb2wvvCxlbnrof8IunWslCaBEAGrdC/KhE0qEfNbxydwc=</CloudConnectionString>
<!--榄菊云数据库-->
<CloudConnectionString>vadMWi9D6ZC3usVUY51rbTRH8TjL6CxlHbduXNDkc8suJwqe10me6ktk8XD3QU91ML11cYCqHcHmTXJFsNQamIbW3UEpkjgNPUcBwRfgP6AWftvk9YFyv7y7/6nzX/c+6z6xMDIdcjYVvfteU+7YtOQhJXTfF5ScosAA0GliBfD8dWAunW+ZCos5LemAj2xb2wvvCxlbnrof8IunWslCaBEAGrdC/KhE0qEfNbxydwc=</CloudConnectionString>

Loading…
Cancel
Save