liujie
2026-08-11 323764c813a09cd56cdab780155ef659dbe0b364
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
144
145
146
147
148
149
150
151
package com.ruoyi.web.controller.api;
 
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.dto.SysDoorDeviceAddRequest;
import com.ruoyi.system.dto.SysDoorDeviceDeleteRequest;
import com.ruoyi.system.dto.SysDoorDeviceDetailRequest;
import com.ruoyi.system.dto.SysDoorDeviceEditRequest;
import com.ruoyi.system.dto.SysDoorDeviceLogoutRequest;
import com.ruoyi.system.dto.SysDoorDevicePageRequest;
import com.ruoyi.system.dto.SysDoorDeviceStatusRequest;
import com.ruoyi.system.service.ISysDoorDeviceService;
import com.ruoyi.web.controller.tool.MiddlePlatformDataQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.io.IOException;
 
/**
 * 门禁设备管理接口
 *
 * @author ruoyi
 */
@RestController
@RequestMapping("/system/door/device")
public class SysDoorDeviceController extends BaseController
{
    @Autowired
    private ISysDoorDeviceService doorDeviceService;
 
    @Autowired
    private RuoYiConfig ruoyiConfig;
 
    /**
     * 分页查询门禁设备列表
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.SELECT)
    @PreAuthorize("@ss.hasPermi('visitor:door:view')")
    @PostMapping("/page")
    public AjaxResult page(@RequestBody(required = false) SysDoorDevicePageRequest request)
    {
        // 集群版对接中台时,门禁设备查询使用中台海康设备列表。
        if (ruoyiConfig.isConnectMiddlePlatform())
        {
            try
            {
                return success(MiddlePlatformDataQuery.doorDevicePage(request));
            }
            catch (IOException e)
            {
                return middlePlatformError(e);
            }
        }
        return success(doorDeviceService.pageList(request));
    }
 
    /**
     * 查看门禁设备详情
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.SELECT)
    @PreAuthorize("@ss.hasPermi('visitor:door:view')")
    @PostMapping("/detail")
    public AjaxResult detail(@RequestBody SysDoorDeviceDetailRequest request)
    {
        // 详情接口按中台设备标识查询,并由适配器补齐前端使用的 doorId/deviceId 字段。
        if (ruoyiConfig.isConnectMiddlePlatform())
        {
            try
            {
                return success(MiddlePlatformDataQuery.doorDeviceDetail(request.getDoorId()));
            }
            catch (IOException e)
            {
                return middlePlatformError(e);
            }
        }
        return success(doorDeviceService.detail(request));
    }
 
    /**
     * 新增门禁设备
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.INSERT,
            excludeParamNames = {"loginPassword"})
    @PreAuthorize("@ss.hasPermi('visitor:door:add')")
    @PostMapping("/add")
    public AjaxResult add(@RequestBody SysDoorDeviceAddRequest request)
    {
        return toAjax(doorDeviceService.add(request, getUsername()));
    }
 
    /**
     * 编辑门禁设备
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.UPDATE,
            excludeParamNames = {"loginPassword"})
    @PreAuthorize("@ss.hasPermi('visitor:door:edit')")
    @PostMapping("/edit")
    public AjaxResult edit(@RequestBody SysDoorDeviceEditRequest request)
    {
        return toAjax(doorDeviceService.edit(request, getUsername()));
    }
 
    /**
     * 启用或禁用门禁设备
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.UPDATE)
    @PreAuthorize("@ss.hasPermi('visitor:door:status')")
    @PostMapping("/changeStatus")
    public AjaxResult changeStatus(@RequestBody SysDoorDeviceStatusRequest request)
    {
        return toAjax(doorDeviceService.changeStatus(request, getUsername()));
    }
 
    /**
     * 注销门禁设备
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.UPDATE)
    @PreAuthorize("@ss.hasPermi('visitor:door:logout')")
    @PostMapping("/logout")
    public AjaxResult logout(@RequestBody SysDoorDeviceLogoutRequest request)
    {
        return toAjax(doorDeviceService.logout(request, getUsername()));
    }
 
    /**
     * 删除门禁设备
     */
    @Log(title = "门禁设备管理", businessType = BusinessType.DELETE)
    @PreAuthorize("@ss.hasPermi('visitor:door:remove')")
    @PostMapping("/delete")
    public AjaxResult delete(@RequestBody SysDoorDeviceDeleteRequest request)
    {
        return toAjax(doorDeviceService.delete(request, getUsername()));
    }
 
    /**
     * 目的:中台查询异常时返回统一业务错误,避免异常栈直接暴露给前端。
     */
    private AjaxResult middlePlatformError(IOException e)
    {
        return error("中台数据查询失败:" + e.getMessage());
    }
}