yeg
2026-08-30 20b346ef9d4fcbbbe05abfe08e4f4f0303b0812e
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
103
104
105
106
107
108
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.TDeviceAdapterMapper">
    <resultMap id="AdapterResult" type="TDeviceAdapter">
        <id property="adapterId" column="adapter_id"/>
        <result property="adapterCode" column="adapter_code"/>
        <result property="adapterName" column="adapter_name"/>
        <result property="adapterType" column="adapter_type"/>
        <result property="host" column="host"/>
        <result property="port" column="port"/>
        <result property="pollIntervalMs" column="poll_interval_ms"/>
        <result property="timezoneId" column="timezone_id"/>
        <result property="capabilities" column="capabilities"/>
        <result property="readOnly" column="read_only"/>
        <result property="status" column="status"/>
        <result property="connectionStatus" column="connection_status"/>
        <result property="lastErrorCode" column="last_error_code"/>
        <result property="lastErrorMessage" column="last_error_message"/>
        <result property="lastAttemptAtUtc" column="last_attempt_at_utc"/>
        <result property="lastObservedAtUtc" column="last_observed_at_utc"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="remark" column="remark"/>
        <result property="delFlag" column="del_flag"/>
    </resultMap>
 
    <sql id="adapterColumns">
        adapter_id, adapter_code, adapter_name, adapter_type, host, port, poll_interval_ms, timezone_id,
        capabilities, (json_extract(capabilities, '$.control') = false) read_only, status,
        connection_status, last_error_code, last_error_message, last_attempt_at_utc, last_observed_at_utc,
        create_by, create_time, update_by, update_time, remark, del_flag
    </sql>
 
    <select id="selectDeviceAdapterList" parameterType="TDeviceAdapter" resultMap="AdapterResult">
        select <include refid="adapterColumns"/> from t_device_adapter
        <where>
            del_flag = 0
            <if test="adapterName != null and adapterName != ''">
                and (adapter_name like concat('%', #{adapterName}, '%') or adapter_code like concat('%', #{adapterName}, '%'))
            </if>
            <if test="status != null and status != ''">and status = #{status}</if>
            <if test="connectionStatus != null and connectionStatus != ''">and connection_status = #{connectionStatus}</if>
        </where>
        order by adapter_id desc
    </select>
 
    <select id="selectEnabledDeviceAdapters" resultMap="AdapterResult">
        select <include refid="adapterColumns"/> from t_device_adapter where status = '0' and del_flag = 0
    </select>
 
    <select id="selectDeviceAdapterById" resultMap="AdapterResult">
        select <include refid="adapterColumns"/> from t_device_adapter where adapter_id = #{adapterId} and del_flag = 0
    </select>
 
    <select id="selectDeviceAdapterByCode" resultMap="AdapterResult">
        select <include refid="adapterColumns"/> from t_device_adapter where adapter_code = #{adapterCode} and del_flag = 0 limit 1
    </select>
 
    <!-- 应用装配层提供托管配置;持久化层仅负责按稳定编码幂等恢复。 -->
    <insert id="upsertManagedDeviceAdapter" parameterType="TDeviceAdapter">
        insert into t_device_adapter(adapter_code, adapter_name, adapter_type, host, port, poll_interval_ms,
            timezone_id, capabilities, status, connection_status, create_by, create_time, update_by, update_time,
            remark, del_flag)
        values(#{adapterCode}, #{adapterName}, #{adapterType}, #{host}, #{port}, #{pollIntervalMs}, #{timezoneId},
            #{capabilities}, '0', 'DISCONNECTED', 'system', sysdate(), 'system', sysdate(), #{remark}, 0)
        on duplicate key update adapter_name=values(adapter_name), adapter_type=values(adapter_type),
            host=values(host), port=values(port), poll_interval_ms=values(poll_interval_ms),
            timezone_id=values(timezone_id), capabilities=values(capabilities), status='0',
            connection_status='DISCONNECTED', last_error_code=null, last_error_message=null,
            update_by='system', update_time=sysdate(), remark=values(remark), del_flag=0
    </insert>
 
    <insert id="insertDeviceAdapter" parameterType="TDeviceAdapter" useGeneratedKeys="true" keyProperty="adapterId">
        insert into t_device_adapter(adapter_code, adapter_name, adapter_type, host, port, poll_interval_ms,
            timezone_id, capabilities, status, connection_status, create_by, create_time, remark, del_flag)
        values(#{adapterCode}, #{adapterName}, #{adapterType}, #{host}, #{port}, #{pollIntervalMs},
            #{timezoneId}, #{capabilities}, #{status}, 'DISCONNECTED', #{createBy}, sysdate(), #{remark}, 0)
    </insert>
 
    <update id="updateDeviceAdapter" parameterType="TDeviceAdapter">
        update t_device_adapter set adapter_name=#{adapterName}, adapter_type=#{adapterType}, host=#{host}, port=#{port},
            poll_interval_ms=#{pollIntervalMs}, timezone_id=#{timezoneId}, capabilities=#{capabilities},
            connection_status='DISCONNECTED', last_error_code=null, last_error_message=null,
            update_by=#{updateBy}, update_time=sysdate()
        where adapter_id=#{adapterId} and del_flag=0
    </update>
 
    <update id="updateDeviceAdapterStatus">
        update t_device_adapter set status=#{status}, connection_status='DISCONNECTED',
            last_error_code=null, last_error_message=null, update_by=#{updateBy}, update_time=sysdate()
        where adapter_id=#{adapterId} and del_flag=0
    </update>
 
    <update id="updateDiscoverySuccess">
        update t_device_adapter set connection_status='CONNECTED', last_error_code=null, last_error_message=null,
            last_attempt_at_utc=#{observedAt}, last_observed_at_utc=#{observedAt}, update_time=sysdate()
        where adapter_id=#{adapterId} and del_flag=0
    </update>
 
    <update id="updateDiscoveryFailure">
        update t_device_adapter set connection_status='ERROR', last_error_code=#{errorCode},
            last_error_message=left(#{errorMessage}, 500), last_attempt_at_utc=utc_timestamp(3), update_time=sysdate()
        where adapter_id=#{adapterId} and del_flag=0
    </update>
 
</mapper>