using gregn6Lib; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using DM_Weight.Models; using System.Configuration; using DM_Weight.util; using DM_Weight.Views; using System.Diagnostics; using log4net; using log4net.Repository.Hierarchy; using DM_Weight.ViewModels; namespace DM_Weight.Report { public class GridReportUtil { // 定义Grid++Report报表主对象 public static GridppReport Report = new GridppReport(); public static string gridConnectionString = ConfigurationManager.AppSettings["gridConnectionString"]; /** * 打印预览 * tempname: 模板文件名称 * data: 模板数据 */ public static void PrintReport(string tempname, object data) { // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + tempname); string s = JsonConvert.SerializeObject(data); // 加载数据 Report.LoadDataFromXML(JsonConvert.SerializeObject(data)); Report.PrintPreview(true); } public static void PrintReportStock() { // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() => { Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); }); string machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); string SQL = $@"SELECT cl.`row_no` AS drawerNo,cl.`col_no` AS colNo,cl.`quantity` AS quantity,cl.`manu_no` AS manuNo,cl.`eff_date` AS effDate, di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit,di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity, cl.`drug_id` AS drugId FROM channel_stock cl INNER JOIN drug_info di ON di.`drug_id` = cl.`drug_id` WHERE cl.`machine_id` = '{machine_id}' AND cl.`drawer_type` = 1 ORDER BY cl.`drug_id`"; // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "stock_template.grf"); Report.DetailGrid.Recordset.ConnectionString = gridConnectionString; Report.DetailGrid.Recordset.QuerySQL = SQL; //Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "stock_template.pdf"; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } /// /// 导出盘点后库存信息 /// /// /// public static void PrintReportStockNew(DateTime? startDate, DateTime? endDate) { DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); //Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() => //{ // Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); //}); string machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); string SQL = $@"SELECT cl.`row_no` AS drawerNo,cl.`col_no` AS colNo,cl.`quantity` AS quantity,cl.`manu_no` AS manuNo,cl.`eff_date` AS effDate, `drug_name` AS drugName,`drug_spec` AS drugSpec,`pack_unit` AS packUnit,`manufactory` AS manuFactory,`max_stock` AS baseQuantity, cl.`drug_id` AS drugId,cl.manuquantity, cl.`optdate` FROM check_stock cl WHERE cl.`machine_id` = '{machine_id}' AND cl.`optdate` > '{p_startDate}' AND cl.`optdate` < '{p_endDate}' ORDER BY cl.`optdate` desc, cl.`drug_id`"; // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_check_new2.grf"); Report.DetailGrid.Recordset.ConnectionString = gridConnectionString; Report.DetailGrid.Recordset.QuerySQL = SQL; // Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "machine_log_check_new2.pdf"; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } public static Task PrintReportStockNewTest(DateTime? startDate, DateTime? endDate) { return Task.Run(() => { string filePath = string.Empty; DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); //Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() => //{ // Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); //}); string machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); string SQL = $@"SELECT cl.`row_no` AS drawerNo,cl.`col_no` AS colNo,cl.`quantity` AS quantity,cl.`manu_no` AS manuNo,cl.`eff_date` AS effDate, `drug_name` AS drugName,`drug_spec` AS drugSpec,`pack_unit` AS packUnit,`manufactory` AS manuFactory,`max_stock` AS baseQuantity, cl.`drug_id` AS drugId,cl.manuquantity, cl.`optdate` FROM check_stock cl WHERE cl.`machine_id` = '{machine_id}' AND cl.`optdate` > '{p_startDate}' AND cl.`optdate` < '{p_endDate}' ORDER BY cl.`optdate` desc, cl.`drug_id`"; // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_check_new2.grf"); Report.DetailGrid.Recordset.ConnectionString = gridConnectionString; Report.DetailGrid.Recordset.QuerySQL = SQL; // Report.PrintPreview(true); //Report.SaveToFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "Test.pdf"); bool isSave = Report.ExportDirect(GRExportType.gretPDF, new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_check_new2.pdf", false, false); if (isSave) { filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp\\" + "machine_log_check_new2.pdf"; } return filePath; }); } public static void PrintReportAccountBook(DateTime? startDate, DateTime? endDate, int type, string drug_id) { DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "account_book_temp.grf"); string SQL = string.Empty; Report.DetailGrid.Recordset.ConnectionString = gridConnectionString; Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() => { Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); Report.ParameterByName("startDate").Value = startDate ?? Convert.ToDateTime("2010-1-1"); Report.ParameterByName("endDate").Value = endDate ?? DateTime.Now.AddDays(1); }); //Report.DetailGrid.Recordset.QuerySQL = SQL; SQL = $@"SELECT TYPE, stockQuantity,inQuantity,outQuantity,operationTime,invoiceId,drugName,drugId,drugSpec,packUnit,dosage,manufactory,manuNo,effDate, operatorName,reviewerName,supplierDept,receiveDept,bigUnit FROM (SELECT mr.type, mr.`stock_quantity` AS `stockQuantity`, IF(mr.`type` IN (1, 31), mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` > 0, mr.`quantity`, IF(mr.`type` = 5,mr.return_quantity1,0))) AS `inQuantity`, IF(mr.`type` = 2, mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` < 0, (0 - mr.`quantity`), IF(mr.`type` = 5,mr.return_quantity2,0))) AS `outQuantity`, mr.`operation_time` AS `operationTime`,IF(mr.`type`=1||mr.type=5,mr.`invoice_id`,NULL) AS `invoiceId`, di.`drug_name` AS `drugName`, di.`drug_id` AS `drugId`, di.`drug_spec` AS `drugSpec`, di.`pack_unit` AS `packUnit`,di.big_unit as bigUnit, di.`dosage` AS `dosage`, di.`manufactory` AS `manufactory`, mr.`manu_no` AS `manuNo`, mr.`eff_date` AS `effDate`, u1.`user_name` AS `operatorName`, u2.`user_name` AS `reviewerName`,mr.supplierDept,mr.receiveDept FROM dm_machine_record mr LEFT JOIN drug_info di ON mr.`drug_id` = di.`drug_id` LEFT JOIN user_list u1 ON mr.`operator` = u1.`id` LEFT JOIN user_list u2 ON mr.`reviewer` = u2.`id` WHERE mr.`machine_id` = '{p_machine_id}' AND mr.`operation_time` > '{p_startDate}' AND mr.`operation_time` < '{p_endDate}' and IF(mr.`type` = 4 AND mr.`quantity` = 0, 99999, mr.`quantity`) <>99999 "; if (!string.IsNullOrEmpty(drug_id)) { SQL += " AND mr.drug_id='" + drug_id + "' "; } SQL += " ORDER BY mr.`drug_id`, mr.`operation_time`, mr.`id`) AS T"; if (type > 0) { if (type == 1) { SQL += " WHERE inQuantity>0 "; } if (type == 2) { SQL += " WHERE outQuantity>0 "; } if (type == 5) { SQL += " WHERE type=5 "; } } Report.DetailGrid.Recordset.QuerySQL = SQL; //Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "account_book_temp.pdf"; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } public static void PrintReportMechineRecord(int type, DateTime? startDate, DateTime? endDate) { string saveFileName = string.Empty; // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); string SQL = string.Empty; Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() => { Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); Report.ParameterByName("startDate").Value = startDate ?? DateTime.Now.AddYears(-10); Report.ParameterByName("endDate").Value = endDate ?? DateTime.Now.AddDays(1); }); // 加载模板文件 if (type == 1) { saveFileName = "machine_log_add.pdf"; Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_add.grf"); SQL = $@"SELECT dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`,dmr.`quantity` AS quantity, dmr.`manu_no` AS manuNo,dmr.`eff_date` AS effDate,dmr.`operation_time` AS operationTime, di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit, di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity,dmr.`drug_id` AS drugId, ul.`user_name` AS nickname FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id` LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` WHERE dmr.`type` = 1 AND dmr.`machine_id` = '{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}' AND dmr.`operation_time` < '{p_endDate}'"; } else if (type == 2) { saveFileName = "machine_log_take.pdf"; Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_take.grf"); SQL = $@" SELECT dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`,dmr.`quantity` AS quantity, dmr.`manu_no` AS manuNo,dmr.`eff_date` AS effDate,dmr.`operation_time` AS operationTime, di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit, di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity,dmr.`drug_id` AS drugId, ul.`user_name` AS nickname FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id` LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` WHERE dmr.`type` = 2 AND dmr.`machine_id` ='{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}' AND dmr.`operation_time` < '{p_endDate}'"; } else if (type == 3) { saveFileName = "machine_log_return.pdf"; Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_return.grf"); SQL = $@" SELECT dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`, CONCAT(dmr.`quantity`,IF(dmr.`type`=32,""(空瓶)"","""")) AS quantity,dmr.`manu_no` AS manuNo, dmr.`eff_date` AS effDate,dmr.`operation_time` AS operationTime,di.`drug_name` AS drugName, di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit, di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity, dmr.`drug_id` AS drugId,ul.`user_name` AS nickname FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id` LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` WHERE dmr.`type` in (31, 32) AND dmr.`machine_id` = '{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}' AND dmr.`operation_time` < '{p_endDate}'"; } else { saveFileName = "machine_log_check.pdf"; Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_check.grf"); SQL = $@" SELECT dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`,dmr.`check_quantity` AS quantity, dmr.`manu_no` AS manuNo,dmr.`eff_date` AS effDate,dmr.`operation_time` AS operationTime, di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit, di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity,dmr.`drug_id` AS drugId, ul.`user_name` AS nickname,u2.`user_name` as reviewer FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id` LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` LEFT JOIN user_list u2 ON dmr.`reviewer` = u2.`id` WHERE dmr.`type` = 4 AND dmr.`machine_id` = '{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}' AND dmr.`operation_time` < '{p_endDate}'"; } Report.DetailGrid.Recordset.ConnectionString = gridConnectionString; Report.DetailGrid.Recordset.QuerySQL = SQL; //Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + saveFileName; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } public static bool FindAndKillProcess() { foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Contains("wps")||clsProcess.ProcessName.Contains("msedge")) { clsProcess.Kill(); //return true; } } //process not found, return false return false; } /** * 打印预览 * tempname: 模板文件名称 * data: 模板数据 */ public static void PrintMachineRecordReport(List data) { // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//machine_log.grf"); // 加载数据 Report.ParameterByName("type").AsInteger = 1; //Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "machine_log.pdf"; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } //交接班记录报表 public static void PrintChangeShiftsReport(DateTime? startDate, DateTime? endDate) { DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "changeShifts_temp.grf"); string SQL = string.Empty; Report.DetailGrid.Recordset.ConnectionString = gridConnectionString; Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() => { Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1"); Report.ParameterByName("startDate").Value = startDate ?? Convert.ToDateTime("2010-1-1"); Report.ParameterByName("endDate").Value = endDate ?? DateTime.Now.AddDays(1); }); SQL = $@"SELECT opt_date,drug_name,drug_spec,beforenum,getnum,usenum,manu_no,surplus,CONCAT(fromoperator,' ',fromreviewer) as fromoperator, CONCAT(tooperator,' ',toreviewer) as tooperator from `hkc_shiftsreport` WHERE `machineid` = '{p_machine_id}' AND `opt_date` > '{p_startDate}' AND opt_date < '{p_endDate}' ORDER BY opt_date"; Report.DetailGrid.Recordset.QuerySQL = SQL; //Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "changeShifts_temp.pdf"; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } /// /// 盘点页面导出记录,按选中行进行导出 /// /// /// /// public static void PrintReportMechineRecordForSelect(List data) { // 定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); // 加载模板文件 Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//machine_log_check.grf"); Dictionary> records = new Dictionary>(); records.Add("table", data); string str = JsonConvert.SerializeObject(records); Report.LoadDataFromXML(str); // 加载数据 //Report.PrintPreview(true); string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "machine_log_check.pdf"; if (File.Exists(filePath)) { try { File.Delete(filePath); } catch (Exception ex) { FindAndKillProcess(); } } Report.ExportDirect(GRExportType.gretPDF, filePath, false, true); } } }