using 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 { /// /// 更新实验室测试委托状态,并保存文件信息 /// 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 WHERE ID = :mesid"; var updateParams = new[] { new OracleParameter(":status", testResultDto.Status), new OracleParameter(":mesid", testResultDto.MesId) }; sqlHelper.ExecuteNonQueryWithTransaction(sqlUpdate, updateParams, connection, transaction); // 2. 保存文件信息(TEST_RESULT_FILE) -> 先删再插 var sqlDeleteFile = "DELETE FROM TEST_RESULT_FILE WHERE TESTRESULTID = :testResultId"; sqlHelper.ExecuteNonQueryWithTransaction(sqlDeleteFile, new[] { new OracleParameter(":testResultId", testResultDto.MesId) }, connection, transaction); 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); } } // 3. 保存测试结果(SYS_TestResults) -> 先删再插 var sqlDeleteTestResults = "DELETE FROM SYS_TestResults WHERE TESTRESULTID = :testResultId"; sqlHelper.ExecuteNonQueryWithTransaction(sqlDeleteTestResults, new[] { new OracleParameter(":testResultId", testResultDto.MesId) }, connection, transaction); if (testResultDto.TestResults != null && testResultDto.TestResults.Count > 0) { foreach (var testResult in testResultDto.TestResults) { var sqlTestResult = @" INSERT INTO SYS_TestResults ( ID, TESTRESULTID, TESTRESULT ) VALUES ( SEQ_SYS_TESTRESULTS.NEXTVAL, :testResultId, :TestResult )"; var insertParams = new[] { new OracleParameter(":testResultId", testResultDto.MesId), new OracleParameter(":TestResult", testResult) }; sqlHelper.ExecuteNonQueryWithTransaction(sqlTestResult, insertParams, connection, transaction); } } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); msg[0] = "false"; msg[1] = ex.Message; throw; } finally { sqlHelper.CloseConnection(connection); } return msg; } } }