user_lt преди 1 година
родител
ревизия
64ad03d545
променени са 1 файла, в които са добавени 434 реда и са изтрити 100 реда
  1. 434 100
      BlankApp1/BlankApp1/ViewModels/BusinessManageViewModel/AutoTestViewModel.cs

+ 434 - 100
BlankApp1/BlankApp1/ViewModels/BusinessManageViewModel/AutoTestViewModel.cs

@@ -38,9 +38,11 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
         private DateTime endTime = DateTime.Now;
         private int testStatus = 0;  //测试状态 
         private int testResult = 0; //测试结果
-        private long schDetailId = 0; //测试方案明细ID
+        private long schId = 0; //方案ID
+        private long globalSchDetailId = 0; //测试方案明细ID
+        private BizTestRecordDtlDto bizTestRecordDtlDto = new BizTestRecordDtlDto(); //测试方案明细表
+        private const string TestMode = "手动测试";
 
-        private const string TestMode = "自动测试";
         public AutoTestViewModel(IDialogService dialog, IEventAggregator aggregator, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService, IBizTestRecordService iBizTestRecordService, IBizTestRecordDtlService iBizTestRecordDtlService, IMapper mapper, ILogger logger)
         {
             _dialog = dialog;
@@ -54,18 +56,21 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
             _logger = logger;
             CloseCommand = new DelegateCommand(Close);
             StartCommand = new DelegateCommand<object>(Start);
+            PreviousCommand = new DelegateCommand<object>(Previous);
+            NextCommand = new DelegateCommand<object>(Next);
             DoneCommand = new DelegateCommand<object>(Done);
             BeforeConList = new ObservableCollection<BasPlcItemConfigDto>();
             InConList = new ObservableCollection<BasPlcItemConfigDto>();
             OutConList = new ObservableCollection<BasPlcItemConfigDto>();
             GetConfigOption();
+
         }
 
 
 
 
         #region idialog接口实现
-        public string Title { set; get; } = "动测试";
+        public string Title { set; get; } = "动测试";
 
         public event Action<IDialogResult> RequestClose;
 
@@ -88,103 +93,114 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
             {
                 foreach (var item in getMsg)
                 {
-                    schDetailId = item; //测试方案明细ID
+                    globalSchDetailId = item; //测试方案明细ID
                     int id = Convert.ToInt32(item);
-                    //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
-                    var findEntity = _basicPlcTestSchemeDtlService.Find(id);
-                    var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
-                    if (findresult != null)
+                    // 根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
+                    GetDetailInfo(id);
+
+                }
+
+            }
+        }
+
+        /// <summary>
+        /// //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
+        /// </summary>
+        /// <param name="id"></param>
+        private void GetDetailInfo(int schDetailId)
+        {
+            //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
+            var findEntity = _basicPlcTestSchemeDtlService.Find(schDetailId);
+            var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
+            if (findresult != null)
+            {
+                //根据方案id 在方案表中查找方案名 设备名
+                schId = findresult.SchemeId.Value; //方案id,方便下一步查找
+                int intSchId = Convert.ToInt32(findresult.SchemeId);
+
+                var findSch = _basicPlcTestSchemeService.Find(intSchId);
+                if (findSch != null)
+                {
+                    ScheduleName = findSch.scheme_name;
+                    DeviceName = findSch.device_name;
+
+                }
+                TestName = findresult.ItemName;
+                SelectTest = findresult.ItemType;
+                //前置项解析
+                string preconStr = findresult.Precondition.ToString();
+                if (!string.IsNullOrEmpty(preconStr))
+                {
+                    JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
+                    BeforeSelectJudge = preconditionModel.ItemType;
+                    SelectLogic = preconditionModel.ItemLogical;
+                    BeforeDetail = preconditionModel.Description;
+                    BeforeConList.Clear();
+                    foreach (var detail in preconditionModel.DetailInfo)
                     {
-                        //根据方案id 在方案表中查找方案名 设备名
-                        int schID = Convert.ToInt32(findresult.SchemeId);
-                        var findSch = _basicPlcTestSchemeService.Find(schID);
-                        if (findSch != null)
-                        {
-                            ScheduleName = findSch.scheme_name;
-                            DeviceName = findSch.device_name;
-
-                        }
-                        TestName = findresult.ItemName;
-                        SelectTest = findresult.ItemType;
-                        //前置项解析
-                        string preconStr = findresult.Precondition.ToString();
-                        if (!string.IsNullOrEmpty(preconStr))
-                        {
-                            JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
-                            BeforeSelectJudge = preconditionModel.ItemType;
-                            SelectLogic = preconditionModel.ItemLogical;
-                            BeforeDetail = preconditionModel.Description;
-                            BeforeConList.Clear();
-                            foreach (var detail in preconditionModel.DetailInfo)
-                            {
-                                BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
-                                basPlcItemConfigDto.PlcItem = detail.PlcItem;
-                                basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
-                                basPlcItemConfigDto.PlcValue = detail.PlcValue;
-                                basPlcItemConfigDto.Remark = detail.Remark;
-                                beforeConList.Add(basPlcItemConfigDto);
-                            }
-                        }
-
-                        //输入项解析
-                        string inStr = findresult.Action.ToString();
-                        if (!string.IsNullOrEmpty(inStr))
-                        {
-                            JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
-                            SelectInJudge = inModel.ItemType;
-                            InSelectLogic = inModel.ItemLogical;
-                            InDetail = inModel.Description;
-                            InConList.Clear();
-                            foreach (var detail in inModel.DetailInfo)
-                            {
-                                BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
-                                basPlcItemConfigDto.PlcItem = detail.PlcItem;
-                                basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
-                                basPlcItemConfigDto.PlcValue = detail.PlcValue;
-                                basPlcItemConfigDto.Remark = detail.Remark;
-                                InConList.Add(basPlcItemConfigDto);
-                            }
-                        }
-
-                        //输出项解析
-                        string outStr = findresult.JudgementResult.ToString();
-                        if (!string.IsNullOrEmpty(outStr))
-                        {
-                            JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
-                            SelectOutJudge = outModel.ItemType;
-                            OutSelectLogic = outModel.ItemLogical;
-                            OutDetail = outModel.Description;
-                            OutConList.Clear();
-                            foreach (var detail in outModel.DetailInfo)
-                            {
-                                BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
-                                basPlcItemConfigDto.PlcItem = detail.PlcItem;
-                                basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
-                                basPlcItemConfigDto.PlcValue = detail.PlcValue;
-                                basPlcItemConfigDto.Remark = detail.Remark;
-                                OutConList.Add(basPlcItemConfigDto);
-                            }
-                        }
+                        BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
+                        basPlcItemConfigDto.PlcItem = detail.PlcItem;
+                        basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
+                        basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
+                        basPlcItemConfigDto.PlcValue = detail.PlcValue;
+                        basPlcItemConfigDto.Remark = detail.Remark;
+                        BeforeConList.Add(basPlcItemConfigDto);
+                    }
+                }
 
+                //输入项解析
+                string inStr = findresult.Action.ToString();
+                if (!string.IsNullOrEmpty(inStr))
+                {
+                    JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
+                    SelectInJudge = inModel.ItemType;
+                    InSelectLogic = inModel.ItemLogical;
+                    InDetail = inModel.Description;
+                    InConList.Clear();
+                    foreach (var detail in inModel.DetailInfo)
+                    {
+                        BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
+                        basPlcItemConfigDto.PlcItem = detail.PlcItem;
+                        basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
+                        basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
+                        basPlcItemConfigDto.PlcValue = detail.PlcValue;
+                        basPlcItemConfigDto.Remark = detail.Remark;
+                        InConList.Add(basPlcItemConfigDto);
                     }
+                }
 
+                //输出项解析
+                string outStr = findresult.JudgementResult.ToString();
+                if (!string.IsNullOrEmpty(outStr))
+                {
+                    JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
+                    SelectOutJudge = outModel.ItemType;
+                    OutSelectLogic = outModel.ItemLogical;
+                    OutDetail = outModel.Description;
+                    OutConList.Clear();
+                    foreach (var detail in outModel.DetailInfo)
+                    {
+                        BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
+                        basPlcItemConfigDto.PlcItem = detail.PlcItem;
+                        basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
+                        basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
+                        basPlcItemConfigDto.PlcValue = detail.PlcValue;
+                        basPlcItemConfigDto.Remark = detail.Remark;
+                        OutConList.Add(basPlcItemConfigDto);
+                    }
                 }
 
             }
         }
-
         #endregion
 
         #region 私有发方法
-
-
         /// <summary>
-        /// 完成时间
+        /// 增加或更新测试记录
         /// </summary>
-        /// <param name="obj"></param>
-        private void Done(object obj)
+        private void AddTestRecord()
         {
-            endTime = DateTime.Now;
+
             //记录记录主表中是否有这个方案的记录,没有则添加
             var findRecord = _iBizTestRecordService.FindRecorddBySchname(ScheduleName);
             if (findRecord == null)
@@ -203,6 +219,13 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
                 var testRecord = _mapper.Map<BizTestRecordDto, biz_test_record>(bizTestRecordDto);
                 _iBizTestRecordService.Add(testRecord);
             }
+
+        }
+        /// <summary>
+        /// 增加测试记录明细
+        /// </summary>
+        private void AddTesDtltRecord(long schDetailId)
+        {
             //查找record ID
             long recordId = 0;
             var findRecordID = _iBizTestRecordService.FindRecorddBySchname(ScheduleName);
@@ -216,10 +239,9 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
             if (findRecordDetail == null)
             {
                 //状态status 没有赋值
-                BizTestRecordDtlDto bizTestRecordDtlDto = new BizTestRecordDtlDto();
+
                 bizTestRecordDtlDto.RecordId = recordId;
                 bizTestRecordDtlDto.SchemeDtlId = schDetailId;
-
                 bizTestRecordDtlDto.StartTestTime = startTime;
                 bizTestRecordDtlDto.FinishTestTime = endTime;
                 bizTestRecordDtlDto.TestMode = TestMode;
@@ -232,22 +254,55 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
                 var testRecordDtl = _mapper.Map<BizTestRecordDtlDto, biz_test_record_dtl>(bizTestRecordDtlDto);
                 _iBizTestRecordDtlService.Add(testRecordDtl);
             }
-            else
-            {
-                //如果有,则更新测试状态和测试结果
-                findRecordDetail.start_test_time = startTime;
-                findRecordDetail.finish_test_time = endTime;
-                findRecordDetail.update_by = Appsession.UserName;
-                findRecordDetail.update_time = DateTime.Now;
-                findRecordDetail.status = testStatus;
-                findRecordDetail.test_result = testResult;
-                _iBizTestRecordDtlService.Edit(findRecordDetail);
-            }
+
+        }
+
+
+        private void UpdateTesDtltRecord()
+        {
+
+            var testRecordDtl = _mapper.Map<BizTestRecordDtlDto, biz_test_record_dtl>(bizTestRecordDtlDto);
+            _iBizTestRecordDtlService.Edit(testRecordDtl);
+        }
+        /// <summary>
+        /// 完成时间
+        /// </summary>
+        /// <param name="obj"></param>
+        private void Done(object obj)
+        {
+            endTime = DateTime.Now;
         }
 
         private void Next(object obj)
         {
+            ///查找方案下的所有方案明细,并排序,
+            var basicSchDtls = _basicPlcTestSchemeDtlService.FindAllBySchId(schId)?.OrderBy(x => x.scheme_dtl_id);
+            foreach (var item in basicSchDtls)
+            {
+                //在测试结果明细中查看
+                long schDetailId = item.scheme_dtl_id;
+                if (schDetailId > globalSchDetailId)
+                {
+                    globalSchDetailId = schDetailId;
+                    int id = Convert.ToInt32(schDetailId);
+                    //界面显示
+                    GetDetailInfo(id);
+                    //记录记录明细表中是否有这个方案明细ID的记录,没有则添加,有则更新记录状态
+                    var findRecordDetail = _iBizTestRecordDtlService.FindRecordDetailBySchDtlID(schDetailId);
+                    if (findRecordDetail == null)
+                    {
+
+                        //增加测试记录明细
+                        AddTesDtltRecord(globalSchDetailId);
+
+                    }
+                    break;
+
+
+                }
+
 
+            }
         }
 
         private void Previous(object obj)
@@ -262,9 +317,282 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
         {
             //开始时间
             startTime = DateTime.Now;
+            //增加测试记录主表
+            AddTestRecord();
+            //增加测试记录明细表
+            AddTesDtltRecord(globalSchDetailId);
+            //前置项
+            TestPreceditionMethod();
+            MessageBox.Show("前置项测试完成!", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
+            //输入项
+            TestActionMethod();
+            MessageBox.Show("输入项测试完成!", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
+            //输出项
+            TestJudgementMethod();
+            MessageBox.Show("输出项测试完成!", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
+        }
+
+        private void TestPreceditionMethod()
+        {
+            switch (BeforeSelectJudge)
+            {
+                case "人工判定":
+                    //弹出确认的对话框
+                    MessageBoxResult boxResult = MessageBox.Show(BeforeDetail, "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
+                    if (boxResult == MessageBoxResult.OK)
+                    {
+                        bizTestRecordDtlDto.PreconditionResult = "合格";
+                        StepIndex = 1;
+                    }
+
+                    break;
+                case "自动判定":
+                    //读取plc的值
+                    switch (SelectLogic)
+                    {
+                        case "NULL":
+                            break;
+                        case "AND":
+                        case "ONLY":
+                            int countCond = 0;
+                            foreach (var item in BeforeConList)
+                            {
+                                string plcAddress = item.PlcAddress;
+                                string plcAddType = item.PlcAddType;
+                                string plcValue = item.PlcValue;
+
+                                switch (plcAddType)
+                                {
+                                    case "bool":
+                                        // string readResult = PLCCom.GetInstance().ReadPlcObject(plcAddress, VarType.Bit);
+                                        ///实时值记录
+                                        string readResult = "1";
+                                        item.RealValue = readResult;
+                                        item.TestTime = DateTime.Now;
+                                        if (readResult.Trim() == plcValue.Trim())
+                                        {
+                                            item.TestResult = "合格";
+                                            countCond++;
+                                        }
+                                        else
+                                        {
+                                            item.TestResult = "不合格";
+                                        }
+
+                                        break;
+                                    case "word":
+                                        break;
+
+                                }
+
+                            }
+                            //测试记录存入数据库
+                            //前置项测试结果json转化
+                            string prefixJsonStr = ModelToJsonToStr(BeforeSelectJudge, SelectLogic, BeforeDetail, BeforeConList);
+                            //json字符串
+                            bizTestRecordDtlDto.PreconditionFinal = prefixJsonStr;
+                            //条件满足
+                            if (countCond == BeforeConList.Count)
+                            {
+                                bizTestRecordDtlDto.PreconditionResult = "合格";
+                                StepIndex = 1;
+                            }
+                            else
+                            {
+                                bizTestRecordDtlDto.PreconditionResult = "不合格";
+                            }
+
+                            break;
+                        case "OR":
+                            break;
+
+                        case "ORDER":
+                            break;
+                    }
+                    break;
+            }
+            //更新测试记录
+            UpdateTesDtltRecord();
+        }
+        private void TestActionMethod()
+        {
+            switch (SelectInJudge)
+            {
+                case "人工判定":
+                    //弹出确认的对话框
+                    MessageBoxResult boxResult = MessageBox.Show(InDetail, "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
+                    if (boxResult == MessageBoxResult.OK)
+                    {
+                        bizTestRecordDtlDto.ActionResult = "合格";
+                        StepIndex = 2;
+                    }
+
+                    break;
+                case "自动判定":
+                    //读取plc的值
+                    switch (InSelectLogic)
+                    {
+                        case "NULL":
+                            break;
+                        case "AND":
+                        case "ONLY":
+                            int countCond = 0;
+                            foreach (var item in InConList)
+                            {
+                                string plcAddress = item.PlcAddress;
+                                string plcAddType = item.PlcAddType;
+                                string plcValue = item.PlcValue;
+
+                                switch (plcAddType)
+                                {
+                                    case "bool":
+
+                                        DialogParameters parm = new DialogParameters();
+                                        parm.Add("Key", plcAddress);
+                                        parm.Add("Key2", plcValue);
+                                        //弹出写入对话框
+                                        _dialog.ShowDialog("WritePLCView", parm, async callback =>
+                                        {
+                                            if (callback.Result == ButtonResult.OK)
+                                            {
+                                                // bool writeResult = PLCCom.GetInstance().WritePlcObject(plcAddress, VarType.Bit, plcValue);
+                                                ///实时值记录
+                                                bool writeResult = true;
+                                                item.TestTime = DateTime.Now;
+                                                if (writeResult)
+                                                {
+                                                    ///单个测试项合格
+                                                    item.TestResult = "合格";
+                                                }
+                                                else
+                                                {
+                                                    item.TestResult = "不合格";
+                                                }
+                                            }
+
+                                        });
+
+
+
+
+                                        break;
+                                    case "word":
+                                        break;
+
+                                }
+
+                            }
+                            //测试记录存入数据库
+                            //前置项测试结果json转化
+                            string actionJsonStr = ModelToJsonToStr(SelectInJudge, InSelectLogic, InDetail, InConList);
+                            //json字符串
+                            bizTestRecordDtlDto.ActionFinal = actionJsonStr;
+                            //条件满足
+                            if ((countCond == InConList.Count) && (countCond != 0))
+                            {
+                                bizTestRecordDtlDto.ActionResult = "合格";
+                                StepIndex = 2;
+                            }
+                            else
+                            {
+                                bizTestRecordDtlDto.ActionResult = "不合格";
+                            }
 
+                            break;
+                        case "OR":
+                            break;
+
+                        case "ORDER":
+                            break;
+                    }
+                    break;
+            }
+            //更新测试记录
+            UpdateTesDtltRecord();
         }
+        private void TestJudgementMethod()
+        {
+            switch (SelectOutJudge)
+            {
+                case "人工判定":
+                    //弹出确认的对话框
+                    MessageBoxResult boxResult = MessageBox.Show(OutDetail, "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
+                    if (boxResult == MessageBoxResult.OK)
+                    {
+                        bizTestRecordDtlDto.JudgementResult = "合格";
+                        StepIndex = 3;
+                    }
 
+                    break;
+                case "自动判定":
+                    //读取plc的值
+                    switch (OutSelectLogic)
+                    {
+                        case "NULL":
+                            break;
+                        case "AND":
+                        case "ONLY":
+                            int countCond = 0;
+                            foreach (var item in OutConList)
+                            {
+                                string plcAddress = item.PlcAddress;
+                                string plcAddType = item.PlcAddType;
+                                string plcValue = item.PlcValue;
+
+                                switch (plcAddType)
+                                {
+
+                                    case "bool":
+                                        //string readResult = PLCCom.GetInstance().ReadPlcObject(plcAddress, VarType.Bit);
+                                        string readResult = "1";
+                                        ///实时值记录
+                                        item.RealValue = readResult;
+                                        item.TestTime = DateTime.Now;
+                                        if (readResult.Trim() == plcValue.Trim())
+                                        {
+                                            item.TestResult = "合格";
+                                            countCond++;
+                                        }
+                                        else
+                                        {
+                                            item.TestResult = "不合格";
+                                        }
+
+                                        break;
+                                    case "word":
+                                        break;
+
+                                }
+
+                            }
+                            //测试记录存入数据库
+                            //前置项测试结果json转化
+                            string prefixJsonStr = ModelToJsonToStr(BeforeSelectJudge, SelectLogic, BeforeDetail, BeforeConList);
+                            //json字符串
+                            bizTestRecordDtlDto.JudgementResultFinal = prefixJsonStr;
+                            //条件满足
+                            if ((countCond == OutConList.Count) && (countCond != 0))
+                            {
+                                bizTestRecordDtlDto.JudgementResult = "合格";
+                                StepIndex = 3;
+                            }
+                            else
+                            {
+                                bizTestRecordDtlDto.JudgementResult = "不合格";
+                            }
+
+                            break;
+                        case "OR":
+                            break;
+
+                        case "ORDER":
+                            break;
+                    }
+                    break;
+            }
+            //更新测试记录
+            UpdateTesDtltRecord();
+        }
         /// <summary>
         /// 获取配置
         /// </summary>
@@ -338,7 +666,11 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
                 DetailPLC plcItem = new DetailPLC();
                 plcItem.PlcItem = item.PlcItem;
                 plcItem.PlcAddress = item.PlcAddress;
+                plcItem.PlcAddType = item.PlcAddType;
                 plcItem.PlcValue = item.PlcValue;
+                plcItem.RealValue = item.RealValue;
+                plcItem.TestTime = item.TestTime;
+                plcItem.TestResult = item.TestResult;
                 plcItem.Remark = item.Remark;
                 prefixJsonModel.DetailInfo.Add(plcItem);
 
@@ -347,7 +679,6 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
             return prefixJsonStr;
         }
 
-
         #endregion
 
 
@@ -355,7 +686,10 @@ namespace PLCTool.ViewModels.BusinessManageViewModel
         public DelegateCommand CloseCommand { set; get; }
 
         public DelegateCommand<object> StartCommand { set; get; }
-   
+        public DelegateCommand<object> PreviousCommand { set; get; }
+
+        public DelegateCommand<object> NextCommand { set; get; }
+
         public DelegateCommand<object> DoneCommand { set; get; }