zjh
16 小时以前 c8ec9ec6d9d149eaac6ad78bedd980c3be1c3b5f
StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs
@@ -3,6 +3,7 @@
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;
@@ -465,5 +466,91 @@
        }
        /// <summary>
        /// 处理解绑 / 撤销解绑
        /// </summary>
        public bool ProcessSn(UnbindAsnInfoDto dto)
        {
            if (dto == null || dto.snList == null || dto.snList.Count == 0)
                throw new ArgumentException("输入参数无效");
            var sqlHelper = new OracleSQLHelper();
            bool result = true;
            var (connection, transaction) = sqlHelper.BeginTransaction();
            try
            {
                foreach (var sn in dto.snList)
                {
                    if (dto.ActionType == 0) // 解绑
                    {
                        string sql = @"
                            UPDATE MES_SN_STATUS_DETAILS
                               SET IS_UNBIND   = 1,
                                   UNBIND_DATE = SYSDATE,
                                   UNBIND_USER = :LoginId
                             WHERE TICKET_NO   = :TicketNo
                               AND SN_NO       = :SnNo
                               AND NVL(IS_UNBIND, 0) = 0";
                        var parameters = new[]
                        {
                            new OracleParameter(":LoginId", dto.loginId),
                            new OracleParameter(":TicketNo", sn.tickeNo),
                            new OracleParameter(":SnNo", sn.snNo)
                        };
                        int rows = sqlHelper.ExecuteNonQueryWithTransaction(sql, parameters, connection, transaction);
                        if (rows == 0)
                        {
                            throw new Exception($"解绑失败: 工单[{sn.tickeNo}], SN[{sn.snNo}] 未找到可解绑记录或已解绑!");
                        }
                    }
                    else if (dto.ActionType == 1) // 撤销解绑
                    {
                        string sql = @"
                            UPDATE MES_SN_STATUS_DETAILS
                               SET IS_UNBIND   = 0,
                                   UNBIND_DATE = NULL,
                                   UNBIND_USER = NULL
                             WHERE TICKET_NO   = :TicketNo
                               AND SN_NO       = :SnNo
                               AND NVL(IS_UNBIND, 0) = 1";
                        var parameters = new[]
                        {
                            new OracleParameter(":TicketNo", sn.tickeNo),
                            new OracleParameter(":SnNo", sn.snNo)
                        };
                        int rows = sqlHelper.ExecuteNonQueryWithTransaction(sql, parameters, connection, transaction);
                        if (rows == 0)
                        {
                            throw new Exception($"撤销解绑失败: 工单[{sn.tickeNo}], SN[{sn.snNo}] 未找到已解绑记录!");
                        }
                    }
                    else
                    {
                        throw new Exception("无效的操作类型!只能是 0=解绑 或 1=撤销解绑");
                    }
                }
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                result = false;
                // 建议这里写日志 ex.Message
                throw;
            }
            finally
            {
                connection.Close();
            }
            return result;
        }
    }
}