liujie
2026-07-22 228c1e07d117d1f7f11dec8381eb951d92bcf2e8
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
package com.ruoyi.other.controller;
 
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.other.api.domain.TDevice;
import com.ruoyi.other.query.DevicePageList;
import com.ruoyi.other.service.TDeviceService;
import com.ruoyi.other.util.EzvizOpenApiUtils;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
import java.util.Arrays;
 
/**
 * 设备管理前端控制器
 *
 * @author ruoyi
 */
@RestController
@RequestMapping("/t-device")
public class TDeviceController {
 
    @Resource
    private TDeviceService deviceService;
 
    @Resource
    private EzvizOpenApiUtils ezvizOpenApiUtils;
 
    @RequiresPermissions(value = {"/deviceManagement/list"}, logical = Logical.OR)
    @ResponseBody
    @GetMapping("/pageList")
    @ApiOperation(value = "获取设备列表", tags = {"管理后台-设备管理"})
    public AjaxResult<PageInfo<TDevice>> pageList(DevicePageList pageList) {
        PageInfo<TDevice> pageInfo = deviceService.pageList(pageList);
        return AjaxResult.success(pageInfo);
    }
 
    @RequiresPermissions(value = {"/deviceManagement/add"}, logical = Logical.OR)
    @ResponseBody
    @PostMapping("/addDevice")
    @ApiOperation(value = "添加设备", tags = {"管理后台-设备管理"})
    @Log(title = "【设备管理】添加设备", businessType = BusinessType.INSERT)
    public AjaxResult addDevice(@RequestBody TDevice device) {
        AjaxResult validateResult = validateDevice(device, null);
        if (validateResult != null) {
            return validateResult;
        }
        if (device.getOnlineStatus() == null) {
            device.setOnlineStatus(1);
        }
        if (device.getIssueStatus() == null) {
            device.setIssueStatus(0);
        }
        deviceService.save(device);
        return AjaxResult.success();
    }
 
    @RequiresPermissions(value = {"/deviceManagement/select", "/deviceManagement/update"}, logical = Logical.OR)
    @ResponseBody
    @GetMapping("/getDeviceInfo/{id}")
    @ApiOperation(value = "获取设备详情", tags = {"管理后台-设备管理"})
    public AjaxResult<TDevice> getDeviceInfo(@PathVariable Integer id) {
        return AjaxResult.success(deviceService.getById(id));
    }
 
    @RequiresPermissions(value = {"/deviceManagement/update"}, logical = Logical.OR)
    @ResponseBody
    @PostMapping("/editDevice")
    @ApiOperation(value = "编辑设备", tags = {"管理后台-设备管理"})
    @Log(title = "【设备管理】编辑设备", businessType = BusinessType.UPDATE)
    public AjaxResult editDevice(@RequestBody TDevice device) {
        if (device.getId() == null) {
            return AjaxResult.error("设备ID不能为空");
        }
        AjaxResult validateResult = validateDevice(device, device.getId());
        if (validateResult != null) {
            return validateResult;
        }
        deviceService.updateById(device);
        return AjaxResult.success();
    }
 
    @RequiresPermissions(value = {"/deviceManagement/issue"}, logical = Logical.OR)
    @ResponseBody
    @PostMapping("/issueDevice/{id}")
    @ApiOperation(value = "下发设备到萤石平台", tags = {"管理后台-设备管理"})
    @Log(title = "【设备管理】下发设备到萤石平台", businessType = BusinessType.UPDATE)
    public AjaxResult issueDevice(@PathVariable Integer id) {
        TDevice device = deviceService.getById(id);
        if (device == null) {
            return AjaxResult.error("设备不存在");
        }
        if (Integer.valueOf(1).equals(device.getIssueStatus())) {
            return AjaxResult.success("设备已下发");
        }
        JSONObject ezvizResult;
        try {
            ezvizResult = ezvizOpenApiUtils.addDevice(device.getDeviceSerial(), device.getValidateCode());
        } catch (Exception e) {
            device.setIssueStatus(2);
            device.setIssueMsg("萤石设备下发失败:" + e.getMessage());
            deviceService.updateById(device);
            return AjaxResult.error(device.getIssueMsg());
        }
        if (!isEzvizSuccess(ezvizResult)) {
            device.setIssueStatus(2);
            device.setIssueMsg(ezvizErrorMessage("萤石设备下发失败", ezvizResult));
            deviceService.updateById(device);
            return AjaxResult.error(device.getIssueMsg());
        }
        device.setIssueStatus(1);
        device.setIssueMsg("下发成功");
        deviceService.updateById(device);
        return AjaxResult.success();
    }
 
    @RequiresPermissions(value = {"/deviceManagement/del"}, logical = Logical.OR)
    @ResponseBody
    @DeleteMapping("/delDevice")
    @ApiOperation(value = "删除设备", tags = {"管理后台-设备管理"})
    @Log(title = "【设备管理】删除设备", businessType = BusinessType.DELETE)
    public AjaxResult<TDevice> delDevice(Integer[] id) {
        if (id == null || id.length == 0) {
            return AjaxResult.error("请选择要删除的设备");
        }
        for (TDevice device : deviceService.listByIds(Arrays.asList(id))) {
            if (Integer.valueOf(1).equals(device.getIssueStatus())) {
                JSONObject ezvizResult;
                try {
                    ezvizResult = ezvizOpenApiUtils.deleteDevice(device.getDeviceSerial());
                } catch (Exception e) {
                    return AjaxResult.error("萤石设备删除失败:" + e.getMessage());
                }
                if (!isEzvizSuccess(ezvizResult)) {
                    return AjaxResult.error(ezvizErrorMessage("萤石设备删除失败", ezvizResult));
                }
            }
        }
        deviceService.removeByIds(Arrays.asList(id));
        return AjaxResult.success();
    }
 
    private AjaxResult validateDevice(TDevice device, Integer excludeId) {
        if (device == null) {
            return AjaxResult.error("设备信息不能为空");
        }
        if (!StringUtils.hasText(device.getDeviceName())) {
            return AjaxResult.error("设备名称不能为空");
        }
        if (!StringUtils.hasText(device.getDeviceSerial())) {
            return AjaxResult.error("设备序列号不能为空");
        }
        if (device.getDeviceBrand() == null) {
            return AjaxResult.error("设备品牌不能为空");
        }
        if (!StringUtils.hasText(device.getValidateCode())) {
            return AjaxResult.error("设备验证码不能为空");
        }
        if (device.getPartnerId() == null) {
            return AjaxResult.error("合作商不能为空");
        }
        if (deviceService.existsByDeviceSerial(device.getDeviceSerial(), excludeId)) {
            return AjaxResult.error("设备序列号已存在");
        }
        return null;
    }
 
    private boolean isEzvizSuccess(JSONObject result) {
        return result != null && "200".equals(result.getString("code"));
    }
 
    private String ezvizErrorMessage(String defaultMessage, JSONObject result) {
        if (result == null) {
            return defaultMessage;
        }
        String message = result.getString("msg");
        return StringUtils.hasText(message) ? message : defaultMessage;
    }
}