using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using gdbg.Services; using System.Collections.Generic; using Oracle.ManagedDataAccess.Client; using System.Data; namespace gdbg.Controllers { [ApiController] [Route("api/[controller]")] public class RefreshController : ControllerBase { private readonly OracleDbService _oracleDbService; public RefreshController(OracleDbService oracleDbService) { _oracleDbService = oracleDbService; } [HttpPost] public async Task RefreshStatus([FromBody] RefreshRequest request) { try { // 检查输入参数 if (string.IsNullOrEmpty(request.LineNo)) { return BadRequest(new { message = "LineNo is required." }); } // 定义存储过程调用的 SQL string procedureCall = @" BEGIN RefreshStatus( :p_lineNo, :p_orderNo, :p_sj, :p_xj, :p_checkedInspection, :p_checkedMaintenance ); END;"; // 定义输出参数 var sjParam = new OracleParameter("p_sj", OracleDbType.Int32, ParameterDirection.Output); var xjParam = new OracleParameter("p_xj", OracleDbType.Int32, ParameterDirection.Output); var checkedInspectionParam = new OracleParameter("p_checkedInspection", OracleDbType.Int32, ParameterDirection.Output); var checkedMaintenanceParam = new OracleParameter("p_checkedMaintenance", OracleDbType.Int32, ParameterDirection.Output); // 参数列表 var parameters = new List { new OracleParameter("p_lineNo", request.LineNo), new OracleParameter("p_orderNo", string.IsNullOrEmpty(request.OrderNo) ? DBNull.Value : request.OrderNo), sjParam, xjParam, checkedInspectionParam, checkedMaintenanceParam }; // 调用存储过程 await _oracleDbService.ExecuteProcedureAsync(procedureCall, parameters); // 安全检查和转换输出参数 int safeConvert(object value, int defaultValue = 0) { if (value == DBNull.Value) return defaultValue; if (value is Oracle.ManagedDataAccess.Types.OracleDecimal oracleDecimal) return Convert.ToInt32(oracleDecimal.Value); return Convert.ToInt32(value); } var result = new { CheckFirstPass = safeConvert(sjParam.Value, 3), // 默认未做 CheckXJ = safeConvert(xjParam.Value, 3), // 默认未做 CheckedInspection = safeConvert(checkedInspectionParam.Value, 0), // 默认未点检 CheckedMaintenance = safeConvert(checkedMaintenanceParam.Value, 0) // 默认未保养 }; return Ok(result); } catch (Exception ex) { return StatusCode(500, new { message = "An error occurred during refreshing status.", error = ex.Message }); } } } // 请求参数类 public class RefreshRequest { public string LineNo { get; set; } // 产线编号 public string OrderNo { get; set; } // 工单编号(可选) } }