|
@@ -4,9 +4,18 @@ using Microsoft.Extensions.Logging;
|
|
|
using MiniExcelLibs;
|
|
|
using Model.Dto;
|
|
|
using Model.Entities;
|
|
|
+using NetTaste;
|
|
|
+using Newtonsoft.Json;
|
|
|
+using PLCTool.Pdf;
|
|
|
using Prism.Commands;
|
|
|
using Prism.Mvvm;
|
|
|
using Prism.Services.Dialogs;
|
|
|
+using QuestPDF;
|
|
|
+using QuestPDF.Fluent;
|
|
|
+using QuestPDF.Helpers;
|
|
|
+using QuestPDF.Infrastructure;
|
|
|
+using QuestPDF.Previewer;
|
|
|
+using SqlSugar;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Collections.ObjectModel;
|
|
@@ -15,6 +24,7 @@ using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows;
|
|
|
using WPFDevelopers.Controls.Runtimes.Shell32;
|
|
|
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
|
|
|
|
|
|
namespace PLCTool.ViewModels.BusinessManageViewModel
|
|
|
{
|
|
@@ -48,15 +58,218 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
|
|
|
ExportCommand = new DelegateCommand<string>(Export);
|
|
|
OnLoadCommand = new DelegateCommand(OnLoad);
|
|
|
CheckDetailCommand = new DelegateCommand<object>(CheckDetail);
|
|
|
+ PdfReportCommand = new DelegateCommand<object>(CreatePdf);
|
|
|
GetConfigOption();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
#region 私有方法
|
|
|
|
|
|
+ private InvoiceModel GetReportPLCInfo(int schDtlId)
|
|
|
+ {
|
|
|
+ //测试方案明细主键ID
|
|
|
+
|
|
|
+ InvoiceModel invoiceModel = new InvoiceModel();
|
|
|
+
|
|
|
+ invoiceModel.ReportPLCModels = new List<ReportPLCModel>();
|
|
|
+
|
|
|
+ //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
|
|
|
+ var findEntity = _basicPlcTestSchemeDtlService.Find(schDtlId);
|
|
|
+ var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
|
|
|
+ if (findresult != null)
|
|
|
+ {
|
|
|
+ //根据方案id 在方案表中查找方案名 设备名
|
|
|
+ int schID = Convert.ToInt32(findresult.SchemeId);
|
|
|
+ var findSch = _basicPlcTestSchemeService.Find(schID);
|
|
|
+ if (findSch != null)
|
|
|
+ {
|
|
|
+ invoiceModel.SchemeName = findSch.scheme_name;
|
|
|
+ invoiceModel.DeviceName = findSch.device_name;
|
|
|
+
|
|
|
+ }
|
|
|
+ //此测试方案下的所有测试项
|
|
|
+ var allResult = allConfigList.FindAll(X => X.SchemeName == findSch.scheme_name);
|
|
|
+ foreach (var each in allResult)
|
|
|
+ {
|
|
|
+ long schDetailId = each.SchemeId;
|
|
|
+
|
|
|
+ //根据测试方案明细id查找结果
|
|
|
+ var recordDetail = _iBizTestRecordDtlService.FindRecordDetailBySchDtlID(schDetailId);
|
|
|
+ if (recordDetail != null)
|
|
|
+ { //前置项结果解析
|
|
|
+ string preconStr = recordDetail.precondition_final?.ToString();
|
|
|
+ if (!string.IsNullOrEmpty(preconStr))
|
|
|
+ {
|
|
|
+ JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
|
|
|
+
|
|
|
+ foreach (var detail in preconditionModel.DetailInfo)
|
|
|
+ {
|
|
|
+
|
|
|
+ invoiceModel.ReportPLCModels.Add(new ReportPLCModel()
|
|
|
+ {
|
|
|
+ ItemName = each.ItemName,
|
|
|
+ ItemType = each.ItemType,
|
|
|
+ Type = "前置项",
|
|
|
+ JudgeType = preconditionModel.ItemType,
|
|
|
+ SelectLogic = preconditionModel.ItemLogical,
|
|
|
+ Detail = preconditionModel.Description,
|
|
|
+ Id = detail.Id,
|
|
|
+ PlcAddress = detail.PlcAddress,
|
|
|
+ PlcItem = detail.PlcItem,
|
|
|
+ PlcValue = detail.PlcValue,
|
|
|
+ Remark = detail.Remark,
|
|
|
+ TestTime = detail.TestTime,
|
|
|
+ RealValue = detail.RealValue,
|
|
|
+ TestResult = detail.TestResult,
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //输入项解析
|
|
|
+ string inStr = recordDetail.action_final?.ToString();
|
|
|
+ if (!string.IsNullOrEmpty(inStr))
|
|
|
+ {
|
|
|
+ JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
|
|
|
+
|
|
|
+ foreach (var detail in inModel.DetailInfo)
|
|
|
+ {
|
|
|
+ invoiceModel.ReportPLCModels.Add(new ReportPLCModel()
|
|
|
+ {
|
|
|
+ ItemName = each.ItemName,
|
|
|
+ ItemType = each.ItemType,
|
|
|
+ Type = "输入项",
|
|
|
+ JudgeType = inModel.ItemType,
|
|
|
+ SelectLogic = inModel.ItemLogical,
|
|
|
+ Detail = inModel.Description,
|
|
|
+ Id = detail.Id,
|
|
|
+ PlcAddress = detail.PlcAddress,
|
|
|
+ PlcItem = detail.PlcItem,
|
|
|
+ PlcValue = detail.PlcValue,
|
|
|
+ Remark = detail.Remark,
|
|
|
+ TestTime = detail.TestTime,
|
|
|
+ RealValue = detail.RealValue,
|
|
|
+ TestResult = detail.TestResult,
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //输出项解析
|
|
|
+ string outStr = recordDetail.judgement_result_final?.ToString();
|
|
|
+ if (!string.IsNullOrEmpty(outStr))
|
|
|
+ {
|
|
|
+ JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
|
|
|
+
|
|
|
+ foreach (var detail in outModel.DetailInfo)
|
|
|
+ {
|
|
|
+ invoiceModel.ReportPLCModels.Add(new ReportPLCModel()
|
|
|
+ {
|
|
|
+ ItemName = each.ItemName,
|
|
|
+ ItemType = each.ItemType,
|
|
|
+ Type = "结果项",
|
|
|
+ JudgeType = outModel.ItemType,
|
|
|
+ SelectLogic = outModel.ItemLogical,
|
|
|
+ Detail = outModel.Description,
|
|
|
+ Id = detail.Id,
|
|
|
+ PlcAddress = detail.PlcAddress,
|
|
|
+ PlcItem = detail.PlcItem,
|
|
|
+ PlcValue = detail.PlcValue,
|
|
|
+ Remark = detail.Remark,
|
|
|
+ TestTime = detail.TestTime,
|
|
|
+ RealValue = detail.RealValue,
|
|
|
+ TestResult = detail.TestResult,
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断方案结果是否合格
|
|
|
+ var testCount = allConfigList.FindAll(X => X.SchemeName == findSch.scheme_name&&X.TestResult=="通过")?.Count;
|
|
|
+ if(testCount== allResult.Count)
|
|
|
+ {
|
|
|
+ invoiceModel.FinalReuslt = "通过";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ invoiceModel.FinalReuslt = "不通过";
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return invoiceModel;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 生成pdf
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="obj"></param>
|
|
|
+ public void CreatePdf(object obj)
|
|
|
+ {
|
|
|
+ int id = Convert.ToInt32(obj);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Settings.License = LicenseType.Community;
|
|
|
+ var model = GetReportPLCInfo(id);
|
|
|
+ var document = new InvoiceDocument(model);
|
|
|
+ //pdf名称为轴编号+时间
|
|
|
+ string strDt = "报表" + string.Format("{0:yyyyMMddHHmm}", DateTime.Now)+ ".pdf"; ;
|
|
|
+ string pathToPDF = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "PDF", strDt);
|
|
|
+
|
|
|
+ //输出文件
|
|
|
+
|
|
|
+ document.GeneratePdf(pathToPDF);
|
|
|
+ }
|
|
|
+ catch(Exception ex)
|
|
|
+ {
|
|
|
+ _logger.LogError(ex.ToString());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
+ //using (System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog()
|
|
|
+ //{
|
|
|
+ // //设置文件类型
|
|
|
+ // //书写规则例如:txt files(*.txt)|*.txt
|
|
|
+ // Filter = "pdf文|*.pdf",
|
|
|
+ // //设置默认文件名(可以不设置)
|
|
|
+ // FileName = "报表" + string.Format("{0:yyyyMMddHHmm}", DateTime.Now),
|
|
|
+
|
|
|
+ // //获取或设置一个值,该值指示如果用户省略扩展名,文件对话框是否自动在文件名中添加扩展名。(可以不设置)
|
|
|
+ // AddExtension = true,
|
|
|
+
|
|
|
+ // //保存对话框是否记忆上次打开的目录
|
|
|
+ // RestoreDirectory = true
|
|
|
+ //})
|
|
|
+ //{
|
|
|
+
|
|
|
+
|
|
|
+ // //点了保存按钮进入
|
|
|
+ // if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
|
+ // {
|
|
|
+ // try
|
|
|
+ // {
|
|
|
+ // //获得文件路径
|
|
|
+ // string localFilePath = saveFileDialog.FileName.ToString();
|
|
|
+
|
|
|
+
|
|
|
+ // document.GeneratePdf(localFilePath);
|
|
|
+ // }
|
|
|
+ // catch (Exception ex)
|
|
|
+ // {
|
|
|
+
|
|
|
+ // }
|
|
|
+
|
|
|
+
|
|
|
+ // }
|
|
|
+
|
|
|
+ //}
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
private void CheckDetail(object obj)
|
|
|
{
|
|
@@ -291,7 +504,8 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
|
|
|
public DelegateCommand<string> ExportCommand { set; get; }
|
|
|
|
|
|
public DelegateCommand OnLoadCommand { set; get; }
|
|
|
-
|
|
|
+
|
|
|
+ public DelegateCommand<object> PdfReportCommand { set; get; }
|
|
|
public DelegateCommand<object> CheckDetailCommand { set; get; }
|
|
|
#endregion
|
|
|
#region 数据绑定
|