From 31c9cb02f04a654d3517237860464c75f6bfdbc4 Mon Sep 17 00:00:00 2001
From: zjh <2207896513@qq.com>
Date: 星期四, 18 九月 2025 15:30:21 +0800
Subject: [PATCH] 1、实验室结果更新接口上传2、一致性选项保存接口优化

---
 StandardPda/MES.Service/service/QC/LljService.cs                       |  103 ++++++++++++++--
 StandardPda/MESApplication/Controllers/Warehouse/WorkflowController.cs |   86 ++++++++++++++
 StandardPda/MES.Service/Dto/service/TestResultDto.cs                   |   30 +++++
 StandardPda/MES.Service/service/Warehouse/WorkflowManager.cs           |   89 ++++++++++++++
 4 files changed, 291 insertions(+), 17 deletions(-)

diff --git a/StandardPda/MES.Service/Dto/service/TestResultDto.cs b/StandardPda/MES.Service/Dto/service/TestResultDto.cs
new file mode 100644
index 0000000..9650e21
--- /dev/null
+++ b/StandardPda/MES.Service/Dto/service/TestResultDto.cs
@@ -0,0 +1,30 @@
+锘縩amespace MES.Service.Dto.service
+{
+    /// <summary>
+    /// 瀹為獙瀹ゆ祴璇曠粨鏋淒TO
+    /// </summary>
+    public class TestResultDto
+    {
+        /// <summary>
+        /// MES ID
+        /// </summary>
+        public string MesId { get; set; }
+
+        /// <summary>
+        /// 鐘舵��0锛氬凡鍙栨秷 1:寰呮彁浜� 2:寰呭鏍� 3:寰呮帴鏀� 4:寰呮帓鏈� 5:娴嬭瘯涓� 6:寰呭鏍告姤鍛� 7:宸插畬鎴�
+        /// </summary>
+        public string Status { get; set; }
+
+        /// <summary>
+        /// 娴嬭瘯缁撴灉1锛氬悎鏍�  2锛氫笉鍚堟牸
+        /// </summary>
+        public string TestResults { get; set; }
+
+        /// <summary>
+        /// 鏂囦欢鍒楄〃
+        /// </summary>
+        public List<string> FileList { get; set; }
+    }
+
+
+}
diff --git a/StandardPda/MES.Service/service/QC/LljService.cs b/StandardPda/MES.Service/service/QC/LljService.cs
index 9ec05f4..f4f6268 100644
--- a/StandardPda/MES.Service/service/QC/LljService.cs
+++ b/StandardPda/MES.Service/service/QC/LljService.cs
@@ -6,6 +6,7 @@
 using MES.Service.util;
 using Microsoft.Extensions.Configuration;
 using Newtonsoft.Json;
+using Oracle.ManagedDataAccess.Client;
 using SqlSugar;
 using System.Data;
 using System.Security.Cryptography;
@@ -1502,29 +1503,97 @@
         return SQLHelper.ExecuteQuery(sql1);
     }
 
+    //public void saveYzxBDlist(string id, DataTable DB)
+    //{
+    //    OracleSQLHelper SQLHelper = new();
+    //    //鍏堟妸缁撴灉娓呯┖
+    //    var sql1 =
+    //        string.Format(
+    //            @"update MES_IQC_CONSISTENCY_ck set ISCHACK=0 where PID='" +
+    //            id + "' ");
+    //    SQLHelper.ExecuteQuery(sql1);
+    //    var rowId = "";
+    //    for (var i = 0; i < DB.Rows.Count; i++)
+    //        rowId += "'" + DB.Rows[i]["id"] + "',";
+    //    rowId = rowId.Substring(0, rowId.Length - 1);
+
+
+    //    //淇敼缁撴灉
+    //    var sql2 =
+    //        string.Format(
+    //            @"update MES_IQC_CONSISTENCY_ck set ISCHACK=1 where PID='" +
+    //            id + "'and id in(" + rowId + ") ");
+    //    SQLHelper.ExecuteQuery(sql2);
+    //}
+
     public void saveYzxBDlist(string id, DataTable DB)
     {
-        OracleSQLHelper SQLHelper = new();
-        //鍏堟妸缁撴灉娓呯┖
-        var sql1 =
-            string.Format(
-                @"update MES_IQC_CONSISTENCY_ck set ISCHACK=0 where PID='" +
-                id + "' ");
-        SQLHelper.ExecuteQuery(sql1);
-        var rowId = "";
-        for (var i = 0; i < DB.Rows.Count; i++)
-            rowId += "'" + DB.Rows[i]["id"] + "',";
-        rowId = rowId.Substring(0, rowId.Length - 1);
+        var sqlHelper = new OracleSQLHelper();
 
+        using (var connection = new OracleConnection(AppsettingsUtility.Settings.DataBaseConn))
+        {
+            connection.Open();
+            using (var transaction = connection.BeginTransaction())
+            {
+                try
+                {
+                    // 1. 娓呯┖ ISCHACK
+                    var sql1 = @"UPDATE MES_IQC_CONSISTENCY_ck 
+                             SET ISCHACK = 0 
+                             WHERE PID = :pid";
 
-        //淇敼缁撴灉
-        var sql2 =
-            string.Format(
-                @"update MES_IQC_CONSISTENCY_ck set ISCHACK=1 where PID='" +
-                id + "'and id in(" + rowId + ") ");
-        SQLHelper.ExecuteQuery(sql2);
+                    using (var cmd1 = new OracleCommand(sql1, connection))
+                    {
+                        cmd1.Transaction = transaction;
+                        cmd1.Parameters.Add(new OracleParameter(":pid", id));
+                        cmd1.ExecuteNonQuery();
+                    }
+
+                    // 2. 濡傛灉 DataTable 閲屾湁瑕佹洿鏂扮殑 id
+                    if (DB != null && DB.Rows.Count > 0)
+                    {
+                        // 鎷兼帴 in 鏉′欢锛堝弬鏁板寲锛�
+                        var inParams = new List<string>();
+                        var parameters = new List<OracleParameter>
+                    {
+                        new OracleParameter(":pid", id)
+                    };
+
+                        for (int i = 0; i < DB.Rows.Count; i++)
+                        {
+                            string paramName = ":id" + i;
+                            inParams.Add(paramName);
+                            parameters.Add(new OracleParameter(paramName, DB.Rows[i]["id"]));
+                        }
+
+                        var sql2 = $@"
+                        UPDATE MES_IQC_CONSISTENCY_ck 
+                           SET ISCHACK = 1 
+                         WHERE PID = :pid 
+                           AND id IN ({string.Join(",", inParams)})";
+
+                        using (var cmd2 = new OracleCommand(sql2, connection))
+                        {
+                            cmd2.Transaction = transaction;
+                            cmd2.Parameters.AddRange(parameters.ToArray());
+                            cmd2.ExecuteNonQuery();
+                        }
+                    }
+
+                    // 鍏ㄩ儴鎴愬姛锛屾彁浜�
+                    transaction.Commit();
+                }
+                catch (Exception ex)
+                {
+                    // 鍑洪敊鍥炴粴
+                    transaction.Rollback();
+                    throw new Exception("鎵ц saveYzxBDlist 鍑洪敊: " + ex.Message, ex);
+                }
+            }
+        }
     }
 
+
     public string[] YzxImgVerify(string id)
     {
         var msgStr = new string[2];
diff --git a/StandardPda/MES.Service/service/Warehouse/WorkflowManager.cs b/StandardPda/MES.Service/service/Warehouse/WorkflowManager.cs
new file mode 100644
index 0000000..b7dac3b
--- /dev/null
+++ b/StandardPda/MES.Service/service/Warehouse/WorkflowManager.cs
@@ -0,0 +1,89 @@
+锘縰sing Masuit.Tools;
+using MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service.BasicData;
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.service.Warehouse
+{
+    public class WorkflowManager
+    {
+        /// <summary>
+        /// 鏇存柊瀹為獙瀹ゆ祴璇曞鎵樼姸鎬侊紝骞朵繚瀛樻枃浠朵俊鎭�
+        /// </summary>
+        public string[] SetTestResultDto(TestResultDto testResultDto)
+        {
+            var sqlHelper = new OracleSQLHelper();
+            string[] msg = new string[2];
+            msg[0] = "true";
+
+            var (connection, transaction) = sqlHelper.BeginTransaction();
+
+            try
+            {
+                // 1. 鏇存柊 MES_QA_ITEMS_DETECT_01 鐘舵�佷笌缁撴灉
+                var sqlUpdate = @"
+            UPDATE MES_QA_ITEMS_DETECT_01 
+               SET SYS_STATES = :status,
+                   SYS_TEST_RESULTS = :testResults
+             WHERE ID = :mesid";
+
+                var updateParams = new[]
+                {
+            new OracleParameter(":status", testResultDto.Status),
+            new OracleParameter(":testResults", testResultDto.TestResults),
+            new OracleParameter(":mesid", testResultDto.MesId)
+        };
+
+                sqlHelper.ExecuteNonQueryWithTransaction(sqlUpdate, updateParams, connection, transaction);
+
+                // 2. 淇濆瓨鏂囦欢淇℃伅锛圱EST_RESULT_FILE锛�
+                if (testResultDto.FileList != null && testResultDto.FileList.Count > 0)
+                {
+                    foreach (var fileUrl in testResultDto.FileList)
+                    {
+                        var sqlInsertFile = @"
+                    INSERT INTO TEST_RESULT_FILE (
+                        ID, TESTRESULTID, FILE_URL
+                    ) VALUES (
+                        SEQ_TEST_RESULT_FILE.NEXTVAL, :testResultId, :fileUrl
+                    )";
+
+                        var insertParams = new[]
+                        {
+                    new OracleParameter(":testResultId", testResultDto.MesId),
+                    new OracleParameter(":fileUrl", fileUrl)
+                };
+
+                        sqlHelper.ExecuteNonQueryWithTransaction(sqlInsertFile, insertParams, connection, transaction);
+                    }
+                }
+
+                transaction.Commit();
+            }
+            catch (Exception ex)
+            {
+                transaction.Rollback();
+                msg[0] = "false";
+                msg[1] = ex.Message;
+                throw;
+            }
+            finally
+            {
+                sqlHelper.CloseConnection(connection);
+            }
+
+            return msg;
+        }
+
+
+
+    }
+}
diff --git a/StandardPda/MESApplication/Controllers/Warehouse/WorkflowController.cs b/StandardPda/MESApplication/Controllers/Warehouse/WorkflowController.cs
new file mode 100644
index 0000000..cb636f9
--- /dev/null
+++ b/StandardPda/MESApplication/Controllers/Warehouse/WorkflowController.cs
@@ -0,0 +1,86 @@
+锘縰sing AngleSharp.Text;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Metadata.Internal;
+using System.Dynamic;
+
+namespace MESApplication.Controllers.Warehouse
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class WorkflowController : ControllerBase
+    {
+
+        private readonly WorkflowManager m = new();
+
+        private readonly MessageCenterManager _manager = new();
+        
+        private readonly string METHOD = "POST";
+
+        private readonly string TableName = "Workflow";
+
+        private readonly string URL = "http://localhost:10054/api/Workflow/";
+      
+       
+        /// <summary>
+        ///鏇存柊瀹為獙瀹ゆ祴璇曞鎵樼姸鎬�
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("TestResult")]
+        public ResponseResult TestResult(TestResultDto testResultDto)
+        {
+            var entity = new MessageCenter();
+            entity.TableName = TableName;
+            entity.Url = URL + "TestResult";
+            entity.Method = METHOD;
+            entity.Data = Newtonsoft.Json.JsonConvert.SerializeObject(testResultDto);
+            entity.Status = 1;
+            entity.CreateBy = "PL017";
+            try
+            {
+                dynamic resultInfos = new ExpandoObject();
+                var result = m.SetTestResultDto(testResultDto);
+                resultInfos.tbBillList = result;
+
+                entity.Result = 0;
+                if (result[0].ToBoolean()) entity.Result = 1;
+                entity.DealWith = 1;
+                _manager.save(entity);
+
+                if (result[0].ToBoolean())
+                {
+                    return new ResponseResult
+                    {
+                        status = 0,
+                        message = "OK",
+                        data = resultInfos
+                    };
+                }
+                else {
+                    return new ResponseResult
+                    {
+                        status = 1,
+                        message = result[1],
+                        data = resultInfos
+                    };
+                }
+               
+            }
+            catch (Exception ex)
+            {
+                entity.Result = 0;
+                entity.DealWith = 0;
+                entity.ResultData = ex.Message;
+                _manager.save(entity);
+
+                return ResponseResult.ResponseError(ex);
+            }
+        }
+         
+    }
+}

--
Gitblit v1.9.3