hao
2025-05-21 711fd971275401adc48b6a25865ea4594bc7fb75
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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<IActionResult> 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<OracleParameter>
        {
            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; } // 工单编号(可选)
    }
}