change -交付

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

@ -962,22 +962,65 @@ VALUES
return ret > 0 ? true : false; 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] string sql = $@"
([record_id], [workorder_code], [material_code], [material_name], [material_spc], 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], [quantity], [unit], [remark], [attr1], [attr2],
[attr3], [attr4], [create_by], [create_time], [update_by], [attr3], [attr4], [create_by], [create_time], [update_by],
[update_time], [factory_code], [report_code], [del_flag],[parent_order],[recoil],[IP],[version],[rspos]) [update_time], [factory_code], [report_code], [del_flag], [parent_order], [recoil], [IP], [version], [rspos], [wastage])
VALUES VALUES ('{Common.GetUUID()}', '{selectedConsumeRow["workorder_code"]}', '{selectedConsumeRow["material_code"]}', '{selectedConsumeRow["material_name"]}', '{selectedConsumeRow["material_spc"]}',
('{Common.GetUUID()}', '{selectedConsumeRow["workorder_code"]}', '{selectedConsumeRow["material_code"]}', '{selectedConsumeRow["material_name"]}', '{selectedConsumeRow["material_spc"]}',
'{selectedConsumeRow["qty"]}', '{selectedConsumeRow["unit"]}', '{selectedConsumeRow["remark"]}', NULL, NULL, '{selectedConsumeRow["qty"]}', '{selectedConsumeRow["unit"]}', '{selectedConsumeRow["remark"]}', NULL, NULL,
NULL, NULL, '{LoginUser.UserName}', GetDate(), '{LoginUser.UserName}', NULL, NULL, '{LoginUser.UserName}', GETDATE(), '{LoginUser.UserName}',
GetDate(), '{siteCode}', '{newReportCode}', '0','{selectedConsumeRow["parent_work_order"]}','{selectedConsumeRow["recoil"]}','{LoginUser.CurrDeviceIP}','{LoginUser.Version}','{selectedConsumeRow["attr1"]}'); "; 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; return sql;
} }
/// <summary> /// <summary>
/// 获取母单的包工人数 /// 获取母单的包工人数
/// </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) 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}' "; 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; 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) public DataTable GetProductSize(string productCode)
{ {
string sql = $"SELECT length,width,height from base_product where product_code='{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; 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; 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) 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, 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 recoil,fund_quanlity,detail.del_flag,parent_work_order,detail.attr1,orders.workorder_code_sap
from mes_prepare_detail detail 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"; // 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\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); DataSet dtset = Utils.netClientDBHelper.getDataSet(sql);
if (dtset != null && dtset.Tables.Count > 0 && dtset.Tables[0].Rows.Count > 0) if (dtset != null && dtset.Tables.Count > 0 && dtset.Tables[0].Rows.Count > 0)
{ {

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

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

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

@ -48,6 +48,7 @@ namespace XGLFinishPro.Views
public bool? _isEndReport = false; public bool? _isEndReport = false;
public string _deviceCode = ""; public string _deviceCode = "";
public string _siteCode = ""; public string _siteCode = "";
public string _lossCode = "";
DataRowView selectedRow = null; DataRowView selectedRow = null;
int sortNo = 0; //定义一个整数,记录子集级数 int sortNo = 0; //定义一个整数,记录子集级数
@ -508,15 +509,18 @@ namespace XGLFinishPro.Views
if (_isEndReport.Value == true || selectedRow["status"].ToString().Equals("w4"))//20240424添加预报工功能暂停状态下添加消耗数据录入功能 if (_isEndReport.Value == true || selectedRow["status"].ToString().Equals("w4"))//20240424添加预报工功能暂停状态下添加消耗数据录入功能
{ {
CreateBaseQty();//将=0的根据公式填充进去 CreateBaseQty();//将=0的根据公式填充进去
//CreateBaseWastage();//将=0的根据公式填充进去/
foreach (var row in dgConsumeInfo.Items) foreach (var row in dgConsumeInfo.Items)
{ {
var selectedConsumeRow = (row as DataRowView); var selectedConsumeRow = (row as DataRowView);
var qty = selectedConsumeRow["qty"].ToString() == "" ? "0" : selectedConsumeRow["qty"].ToString(); var qty = selectedConsumeRow["qty"].ToString() == "" ? "0" : selectedConsumeRow["qty"].ToString();
var wastage = selectedConsumeRow["wastage"].ToString() == "" ? "0" : selectedConsumeRow["wastage"].ToString();
var remark = selectedConsumeRow["remark"].ToString(); var remark = selectedConsumeRow["remark"].ToString();
string insertConsumeSql = formingMachineService.GetInsertConsumeInfoSql(selectedConsumeRow, newReportCode, _siteCode); string insertConsumeSql = formingMachineService.GetMergeConsumeInfoSql(selectedConsumeRow, newReportCode, _siteCode);
reportWorkSqlList.Add(insertConsumeSql); reportWorkSqlList.Add(insertConsumeSql);
LogHelper.instance.log.Error("报工SQL生成" + insertConsumeSql); LogHelper.instance.log.Error("报工SQL生成" + insertConsumeSql);
#region #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) private void txtQuantity_TextChanged(object sender, TextChangedEventArgs e)
{ {
if (!Regex.IsMatch(this.txtQuantity.Text, @"^\d+(\.\d+)?$")) 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" Margin="10"
Background="#2B7EE6" Background="#2B7EE6"
Click="Submit_Click" Click="Submit_Click"
Content="提交" Content="保存"
FontSize="20" FontSize="20"
Foreground="White" /> Foreground="White" />
<Button <Button

@ -123,7 +123,7 @@
<Button Content="刷新" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Refresh_Click"/> <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="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="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"/> <Button Content="关闭" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Close_Click"/>
</StackPanel> </StackPanel>

@ -135,7 +135,7 @@
<Button Content="刷新" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Refresh_Click"/> <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="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="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"/> <Button Content="关闭" Background="#2B7EE6" Foreground="White" Width="100" FontSize="20" Height="50" Margin="10" Click="Close_Click"/>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="0"> <StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="0">

@ -92,24 +92,63 @@ namespace XGLFinishPro.Views
} }
private void LoadData(bool addLine = false) private void LoadData(bool addLine = false)
{
try
{ {
isUpdate = true; isUpdate = true;
list.Clear(); list.Clear();
DataTable dataTable = dbService.GetProOrderWorkorder(workId); DataTable dataTable = dbService.GetProOrderWorkorder(workId);
if (dataTable != null && dataTable.Rows.Count > 0) 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)
{ {
//LProductName = dataTable.Rows[0]["product_name"].ToString();
//this.RightProductName.Text = dataTable.Rows[0]["product_name"].ToString();
product_code = dataTable.Rows[0]["product_code"].ToString(); product_code = dataTable.Rows[0]["product_code"].ToString();
} }
}
var leftHearList = dbService.GetSelfCheckInfo("first_inspection_left").OrderBy(t => t.dict_sort).ToList(); 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(); 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(); 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(); 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(); GetMesTableSeft();
leftData = dbService.GetMesTableSelfDetial(leftbelong_to, 6); 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); rightData = dbService.GetMesTableSelfDetial(rightbelong_to, 6);
if (rightData == null || !rightData.Any())
{
Console.WriteLine("[Error] 未获取到右侧详细检查数据。");
LogHelper.instance.log.Error("[Error] 未获取到右侧详细检查数据。");
}
if (addLine) if (addLine)
{ {
int leftLine = leftData.Max(t => t.table_line) + 1; int leftLine = leftData.Max(t => t.table_line) + 1;
@ -123,8 +162,6 @@ namespace XGLFinishPro.Views
rightData.RemoveAll(t => t.index == 6); rightData.RemoveAll(t => t.index == 6);
} }
for (var i = 0; i < 7; i++) for (var i = 0; i < 7; i++)
{ {
foreach (var item in leftHearList) foreach (var item in leftHearList)
@ -260,6 +297,11 @@ namespace XGLFinishPro.Views
//UpdateUi(this.Right); //UpdateUi(this.Right);
isUpdate = false; isUpdate = false;
} }
catch (Exception ex)
{
LogHelper.instance.log.Error("[Error] 加载数据异常!" + ex.Message);
}
}
private MesTableSelf leftmesTableSelf; private MesTableSelf leftmesTableSelf;
private void GetMesTableSeft() private void GetMesTableSeft()
{ {
@ -871,6 +913,7 @@ namespace XGLFinishPro.Views
private void Submit_Click(object sender, RoutedEventArgs e) private void Submit_Click(object sender, RoutedEventArgs e)
{ {
bool isSuccess = false;
string isFinal = "0"; string isFinal = "0";
if (sender is Button button) if (sender is Button button)
{ {
@ -897,6 +940,7 @@ namespace XGLFinishPro.Views
}); });
foreach (var item in leftData) foreach (var item in leftData)
{ {
int resultLeft = 0;
if (item.table_line == 0) if (item.table_line == 0)
{ {
item.table_line = 1; item.table_line = 1;
@ -908,15 +952,21 @@ namespace XGLFinishPro.Views
var mesTableSelfDetialModel = tempLeftData.FirstOrDefault(t => t.id == item.id); var mesTableSelfDetialModel = tempLeftData.FirstOrDefault(t => t.id == item.id);
if (mesTableSelfDetialModel == null) if (mesTableSelfDetialModel == null)
{ {
dbService.InsertMesTableSelfDetial(item); resultLeft = dbService.InsertMesTableSelfDetial(item);
} }
else else
{ {
dbService.UpdateMesTableSelfDetial(item); resultLeft = dbService.UpdateMesTableSelfDetial(item);
}
if (resultLeft > 0)
{
isSuccess = true;
} }
} }
foreach (var item in rightData) foreach (var item in rightData)
{ {
int resultRight = 0;
if (item.table_line == 0) if (item.table_line == 0)
{ {
item.table_line = 1; item.table_line = 1;
@ -928,16 +978,29 @@ namespace XGLFinishPro.Views
var mesTableSelfDetialModel = tempRightData.FirstOrDefault(t => t.id == item.id); var mesTableSelfDetialModel = tempRightData.FirstOrDefault(t => t.id == item.id);
if (mesTableSelfDetialModel == null) if (mesTableSelfDetialModel == null)
{ {
dbService.InsertMesTableSelfDetial(item); resultRight = dbService.InsertMesTableSelfDetial(item);
} }
else else
{ {
dbService.UpdateMesTableSelfDetial(item); resultRight = dbService.UpdateMesTableSelfDetial(item);
}
if (resultRight > 0)
{
isSuccess = true;
} }
} }
dbService.UpdateMesTableSelf(leftbelong_to, "", LoginUser.UserName, isFinal); dbService.UpdateMesTableSelf(leftbelong_to, "", LoginUser.UserName, isFinal);
//dbService.UpdateMesTableSelf(rightbelong_to, "", LoginUser.UserName); //dbService.UpdateMesTableSelf(rightbelong_to, "", LoginUser.UserName);
MessageBox.Show("提交成功!"); if (isSuccess)
{
MessageBox.Show("保存成功!");
}
else
{
MessageBox.Show("保存失败!");
LogHelper.instance.log.Error("[Error] 保存失败!");
}
LoadData(); LoadData();
} }
@ -957,12 +1020,15 @@ namespace XGLFinishPro.Views
//} //}
private void LeftCheckDate_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e) private void LeftCheckDate_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e)
{
try
{ {
this.date = this.LeftCheckDate.SelectedDate.Value.ToString("yyyy-MM-dd"); this.date = this.LeftCheckDate.SelectedDate.Value.ToString("yyyy-MM-dd");
DataTable dataTable = dbService.GetProOrderWorkorder(deviceCode, date); DataTable dataTable = dbService.GetProOrderWorkorder(deviceCode, date);
List<OrderWork> orderWorks = new List<OrderWork>(); List<OrderWork> orderWorks = new List<OrderWork>();
if (dataTable == null || dataTable.Rows.Count == 0) if (dataTable == null || dataTable.Rows.Count == 0)
{ {
LogHelper.instance.log.Error("没有查询到工单信息!");
MessageBox.Show("没有查询到工单信息!"); MessageBox.Show("没有查询到工单信息!");
} }
else else
@ -986,6 +1052,11 @@ namespace XGLFinishPro.Views
this.LProductName = string.Empty; this.LProductName = string.Empty;
LoadData(); LoadData();
} }
catch (Exception ex)
{
LogHelper.instance.log.Error("首检记录获取工单出现异常!" + ex.Message);
}
}
private void LeftProductName_SelectionChanged(object sender, SelectionChangedEventArgs e) private void LeftProductName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ {

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

@ -15,6 +15,7 @@ using System.Threading.Tasks;
using System.Timers; using System.Timers;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using NLog;
using Xceed.Wpf.Toolkit.Primitives; using Xceed.Wpf.Toolkit.Primitives;
using XGL.Data; using XGL.Data;
using XGL.Data.DBService; using XGL.Data.DBService;
@ -42,6 +43,12 @@ namespace XGLFinishPro.Views
public static LanJu_Operator lanJu_Operator; public static LanJu_Operator lanJu_Operator;
Frame frame = new Frame() { Content = new Views.LanJu_InOut() }; Frame frame = new Frame() { Content = new Views.LanJu_InOut() };
string deviceCode = Utils.GetAppSetting("DeviceCode"); 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(); Timer timerDeciveState = new Timer();
string _workOrderCode = ""; string _workOrderCode = "";
userDB usdb = new userDB(); userDB usdb = new userDB();
@ -434,8 +441,11 @@ namespace XGLFinishPro.Views
if (pauseOrderWin.ShowDialog() == true) if (pauseOrderWin.ShowDialog() == true)
{ {
PauseRecoverOrderS(workordercode, "w2", pauseOrderWin); PauseRecoverOrderS(workordercode, "w2", pauseOrderWin);
ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 2); ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 0);
//formingMachineService.UpdateWorkOrder(workordercode, "w2", pauseOrderWin.remark, pauseOrderWin.type, deviceCode); // 添加写入PLC尺寸信息的逻辑
string materialCode = selectedRow["product_code"].ToString();
WritePlcBoxMessage(materialCode);
GetWorkOrderInfo(); GetWorkOrderInfo();
} }
@ -667,6 +677,13 @@ namespace XGLFinishPro.Views
// CustomMessageBox.Show("请先校验用户!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); // CustomMessageBox.Show("请先校验用户!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
// return; // return;
//} //}
bool connectResult = plc.Connection(PlcIp);
if (!connectResult)
{
LogHelper.instance.log.Info("PLC连接失败");
CustomMessageBox.Show("PLC连接失败无法开始工单");
return;
}
if (dgWorkOrderInfo.SelectedItems.Count == 0) if (dgWorkOrderInfo.SelectedItems.Count == 0)
{ {
CustomMessageBox.Show("请选择要开始的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); CustomMessageBox.Show("请选择要开始的工单!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
@ -734,7 +751,12 @@ namespace XGLFinishPro.Views
string materialDesc = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_name"].ToString(); string materialDesc = (dgWorkOrderInfo.SelectedItem as DataRowView)["product_name"].ToString();
userDbWareHouse.InsertOperationLog(workorderID, "w2", "", "开始工单", deviceCode, materialCode, materialDesc); userDbWareHouse.InsertOperationLog(workorderID, "w2", "", "开始工单", deviceCode, materialCode, materialDesc);
ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 0); ProWorkBatchInWork("w2", dgWorkOrderInfo.SelectedItem as DataRowView, 0);
LogHelper.instance.log.Info("问题跟踪:设备编号是否为空:"+ deviceCode);
if (!string.IsNullOrEmpty(deviceCode) && lineList.Contains(deviceCode))
{
LogHelper.instance.log.Info("问题跟踪尝试将箱型信息写给PLC"+ materialCode );
WritePlcBoxMessage(materialCode); WritePlcBoxMessage(materialCode);
}
// await CallCheckApi("checkTypeSCXJ");20240403赵啸林因为切线方案调整要求取消上位机生成巡检任务的功能 // await CallCheckApi("checkTypeSCXJ");20240403赵啸林因为切线方案调整要求取消上位机生成巡检任务的功能
GetWorkOrderInfo(); GetWorkOrderInfo();
} }
@ -784,9 +806,11 @@ namespace XGLFinishPro.Views
if (type == 0) if (type == 0)
{ {
batchCode = ""; 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)) if (!formingMachineService.UpdateProWorkBatchInWork(lineCode, batchCode, workorderCode, productCode, productName, productdescen, boxType, packType, umrez, status, LoginUser.WorkDate))
{ {
CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Info($"更新打印机表状态失败:" + CustomMessageBoxButton.OK +";"+ CustomMessageBoxIcon.Warning);
return false; return false;
} }
} }
@ -795,14 +819,16 @@ namespace XGLFinishPro.Views
if (!formingMachineService.UpdateProWorkBatchInWorkBatchCode(lineCode, batchCode, status, productCode, productName)) if (!formingMachineService.UpdateProWorkBatchInWorkBatchCode(lineCode, batchCode, status, productCode, productName))
{ {
CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Info($"更新打印机表状态失败:" + CustomMessageBoxButton.OK + ";" + CustomMessageBoxIcon.Warning);
return false; return false;
} }
} }
else if (type == 2) else if (type == 2)
{ {
if (!formingMachineService.UpdateProWorkBatchInWorkStatus(lineCode, status)) if (!formingMachineService.UpdateProWorkBatchInWorkStatus(lineCode, status, packType))
{ {
CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning); CustomMessageBox.Show("更新打印机表状态失败!", CustomMessageBoxButton.OK, CustomMessageBoxIcon.Warning);
LogHelper.instance.log.Info($"更新打印机表状态失败:" + CustomMessageBoxButton.OK + ";" + CustomMessageBoxIcon.Warning);
return false; return false;
} }
} }
@ -967,6 +993,7 @@ namespace XGLFinishPro.Views
string quality = (dgWorkOrderInfo.SelectedItem as DataRowView)["quantity_split"].ToString(); string quality = (dgWorkOrderInfo.SelectedItem as DataRowView)["quantity_split"].ToString();
string unit = (dgWorkOrderInfo.SelectedItem as DataRowView)["unit"].ToString(); string unit = (dgWorkOrderInfo.SelectedItem as DataRowView)["unit"].ToString();
string plan_time = (dgWorkOrderInfo.SelectedItem as DataRowView)["plan_time"].ToString(); string plan_time = (dgWorkOrderInfo.SelectedItem as DataRowView)["plan_time"].ToString();
plan_time = plan_time.Replace("/", "-");
//调用首件检验接口 //调用首件检验接口
string apiUrl = formingMachineService.GetInterfaceUrl("createCheckProduceTask"); string apiUrl = formingMachineService.GetInterfaceUrl("createCheckProduceTask");
FirstCheckModel firstCheck = new FirstCheckModel(); FirstCheckModel firstCheck = new FirstCheckModel();
@ -1150,7 +1177,12 @@ namespace XGLFinishPro.Views
// WritePlcBoxMessage(row["product_code"].ToString()); // 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 == "结束") else if (content == "结束")
{ {
@ -1192,10 +1224,12 @@ namespace XGLFinishPro.Views
DataTable pointsDt = formingMachineService.GetWcsPlcPoint(plcPointNo, "ProductSize"); DataTable pointsDt = formingMachineService.GetWcsPlcPoint(plcPointNo, "ProductSize");
if (pointsDt == null || pointsDt.Rows.Count == 0) if (pointsDt == null || pointsDt.Rows.Count == 0)
{ {
LogHelper.instance.log.Info("问题跟踪pointsDt为空或者数量为零");
return; return;
} }
if (dt != null && dt.Rows.Count > 0) if (dt != null && dt.Rows.Count > 0)
{ {
LogHelper.instance.log.Info("问题跟踪dt不为空" );
string heigh = dt.Rows[0]["height"].ToString(); string heigh = dt.Rows[0]["height"].ToString();
string width = dt.Rows[0]["width"].ToString(); string width = dt.Rows[0]["width"].ToString();
string length = dt.Rows[0]["length"].ToString(); string length = dt.Rows[0]["length"].ToString();
@ -1207,7 +1241,16 @@ namespace XGLFinishPro.Views
try try
{ {
count++; count++;
plc.Connection(PlcIp); //bool connectResult = plc.Connection(PlcIp);
//if (!connectResult)
//{
// LogHelper.instance.log.Info("问题跟踪PLC连接失败");
//}
//else
//{
//}
if (pointsDt != null && pointsDt.Rows.Count > 0) if (pointsDt != null && pointsDt.Rows.Count > 0)
{ {
bool writeResult = false; bool writeResult = false;
@ -1240,11 +1283,19 @@ namespace XGLFinishPro.Views
if (writeResult) 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 else
{ {
LogHelper.instance.log.Info($"写入PLC尺寸信息失败"); LogHelper.instance.log.Info($"写入PLC尺寸信息失败");
Dispatcher.Invoke(() =>
{
CustomMessageBox.Show($"写入PLC尺寸信息失败");
});
} }
} }
isSuccess = writeResult; isSuccess = writeResult;
@ -1254,7 +1305,7 @@ namespace XGLFinishPro.Views
catch (Exception ex) catch (Exception ex)
{ {
isSuccess = false; isSuccess = false;
LogHelper.instance.log.Info($"写入PLC尺寸信息失败第{count}次重试{ex}"); LogHelper.instance.log.Error($"写入PLC尺寸信息失败第{count}次重试,异常信息:{ex.Message}", ex);
plc = new PlcHelper(); 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; 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 public class ReportWorkModel
{ {

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

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

@ -26,6 +26,7 @@ namespace XGLFinishPro.Views
{ {
FinishProdDBService userDbWareHouse = new FinishProdDBService(); FinishProdDBService userDbWareHouse = new FinishProdDBService();
string _workOrderCode = ""; string _workOrderCode = "";
public QitaoLvUC() public QitaoLvUC()
{ {
InitializeComponent(); InitializeComponent();
@ -42,6 +43,29 @@ namespace XGLFinishPro.Views
e.Row.Header = (e.Row.GetIndex() + 1).ToString(); 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) private void UserControl_Loaded(object sender, RoutedEventArgs e)
{ {
try try
@ -62,5 +86,13 @@ namespace XGLFinishPro.Views
LogHelper.instance.log.Error("获取工单齐套信息时发生异常:" + ex.Message); 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"> <Compile Include="Views\HBLogWin.xaml.cs">
<DependentUpon>HBLogWin.xaml</DependentUpon> <DependentUpon>HBLogWin.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Views\InputNumberDialog.xaml.cs">
<DependentUpon>InputNumberDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Views\LanJu_Check_Report.xaml.cs"> <Compile Include="Views\LanJu_Check_Report.xaml.cs">
<DependentUpon>LanJu_Check_Report.xaml</DependentUpon> <DependentUpon>LanJu_Check_Report.xaml</DependentUpon>
</Compile> </Compile>
@ -739,6 +742,10 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="Views\InputNumberDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\LanJu_Check_Report.xaml"> <Page Include="Views\LanJu_Check_Report.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>

Loading…
Cancel
Save