yeg
2026-08-26 e12439d1f4a94957d68cda653cb666702bc71040
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?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>
 
    <resultMap id="ChannelResult" type="TDetectionChannel">
        <id property="channelId" column="channel_id"/>
        <result property="adapterId" column="adapter_id"/>
        <result property="cabinetId" column="cabinet_id"/>
        <result property="devtype" column="devtype"/>
        <result property="devid" column="devid"/>
        <result property="subdevid" column="subdevid"/>
        <result property="chlid" column="chlid"/>
        <result property="displayNo" column="display_no"/>
        <result property="onlineStatus" column="online_status"/>
        <result property="workStatus" column="work_status"/>
        <result property="lastSeenAtUtc" column="last_seen_at_utc"/>
        <result property="status" column="status"/>
    </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="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>
 
    <select id="selectCabinetIdByIdentity" resultType="Long">
        select cabinet_id from t_detection_cabinet
        where adapter_id=#{adapterId} and vendor_device_type=#{devtype} and vendor_device_id=#{devid} and del_flag=0 limit 1
    </select>
 
    <insert id="insertDetectedCabinet" parameterType="TDetectionCabinet" useGeneratedKeys="true" keyProperty="cabinetId">
        insert into t_detection_cabinet(adapter_id, cabinet_code, cabinet_name, capacity, channel_count,
            vendor_device_type, vendor_device_id, ip_address, online_status, last_seen_at_utc, status,
            create_by, create_time, del_flag)
        values(#{adapterId}, #{cabinetCode}, #{cabinetName}, 1, #{channelCount}, #{vendorDeviceType},
            #{vendorDeviceId}, #{ipAddress}, #{onlineStatus}, #{lastSeenAtUtc}, '0', 'system', sysdate(), 0)
    </insert>
 
    <update id="updateDetectedCabinet" parameterType="TDetectionCabinet">
        update t_detection_cabinet set channel_count=greatest(channel_count, #{channelCount}), ip_address=#{ipAddress},
            online_status=#{onlineStatus}, last_seen_at_utc=#{lastSeenAtUtc}, update_by='system', update_time=sysdate()
        where cabinet_id=#{cabinetId} and del_flag=0
    </update>
 
    <insert id="upsertDetectedChannel" parameterType="TDetectionChannel">
        insert into t_detection_channel(adapter_id, cabinet_id, devtype, devid, subdevid, chlid, display_no,
            online_status, work_status, last_seen_at_utc, status, create_time, del_flag)
        values(#{adapterId}, #{cabinetId}, #{devtype}, #{devid}, #{subdevid}, #{chlid}, #{displayNo},
            #{onlineStatus}, #{workStatus}, #{lastSeenAtUtc}, '0', sysdate(), 0)
        on duplicate key update cabinet_id=values(cabinet_id), display_no=values(display_no),
            online_status=values(online_status), last_seen_at_utc=values(last_seen_at_utc), update_time=sysdate()
    </insert>
 
    <select id="selectDetectionChannelsByAdapterId" resultMap="ChannelResult">
        select channel_id, adapter_id, cabinet_id, devtype, devid, subdevid, chlid, display_no,
            online_status, work_status, last_seen_at_utc, status
        from t_detection_channel where adapter_id=#{adapterId} and del_flag=0
        order by devtype, devid, subdevid, chlid
    </select>
</mapper>