Merge remote-tracking branch 'origin/5.X' into 5.X

This commit is contained in:
sunyuehai 2024-08-22 21:58:21 +08:00
commit 7129a9b825
18 changed files with 848 additions and 269 deletions

View File

@ -18,12 +18,14 @@ public class CommonYmlConfig {
public static String URL_IOT_TELEMETRY = "遥测"; public static String URL_IOT_TELEMETRY = "遥测";
public static String URL_IOT_OPERATE = "操作控制"; public static String URL_IOT_OPERATE = "操作控制";
public static String URL_IOT_DEVICE = "设备信息"; public static String URL_IOT_DEVICE = "设备信息";
public static String URL_IOT_DEVICE_BY_NAME = "设备名称查询设备信息";
public String baseurl = ""; public String baseurl = "";
public String scopeAttribute = ""; public String scopeAttribute = "";
public String telemetry = ""; public String telemetry = "";
public String operate = ""; public String operate = "";
public String device = ""; public String device = "";
public String deviceByName = "";
@Value("${iot.url.scopeAttribute}") @Value("${iot.url.scopeAttribute}")
public String setScopeAttribute(String scopeAttribute) { public String setScopeAttribute(String scopeAttribute) {
@ -49,4 +51,11 @@ public class CommonYmlConfig {
public String setDevice(String device) { public String setDevice(String device) {
return URL_IOT_DEVICE = device; return URL_IOT_DEVICE = device;
} }
@Value("${iot.url.deviceByName}")
public String setDeviceByName(String deviceByName) {
return URL_IOT_DEVICE_BY_NAME = deviceByName;
}
} }

View File

@ -1,5 +1,6 @@
package org.dromara.web.controller.app; package org.dromara.web.controller.app;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -16,16 +17,14 @@ import org.dromara.system.domain.vo.SysDictDataVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysDictTypeService; import org.dromara.system.service.ISysDictTypeService;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.dromara.web.device.iot.DeviceByDeviceName;
import org.dromara.web.device.iot.DeviceDto; import org.dromara.web.device.iot.DeviceDto;
import org.dromara.web.domain.bo.*; import org.dromara.web.domain.bo.*;
import org.dromara.web.domain.vo.*; import org.dromara.web.domain.vo.*;
import org.dromara.web.service.*; import org.dromara.web.service.*;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -136,7 +135,7 @@ public class EqDeviceController extends BaseController {
* @return todo * @return todo
*/ */
@GetMapping("/getDeviceLogs") @GetMapping("/getDeviceLogs")
public Map<String, List<EqEquipmentLogVo>> getDeviceLogs(EqAppHomeBo bo,PageQuery pageQuery){ public Map<String, List<EqEquipmentLogVo>> getDeviceLogs(EqAppHomeBo bo,String createdYearDay,PageQuery pageQuery){
if (bo.getEquipmentId() == null) throw new ServiceException("设备ID不能为空"); if (bo.getEquipmentId() == null) throw new ServiceException("设备ID不能为空");
String zoneId = bo.getZoneId(); String zoneId = bo.getZoneId();
if (StringUtils.isEmpty(zoneId)) throw new ServiceException("时区zoneId(如 UTC+08:00)不能为空"); if (StringUtils.isEmpty(zoneId)) throw new ServiceException("时区zoneId(如 UTC+08:00)不能为空");
@ -149,6 +148,8 @@ public class EqDeviceController extends BaseController {
if (zoneId.contains(" ")) zoneId = zoneId.replace(" ", "+"); if (zoneId.contains(" ")) zoneId = zoneId.replace(" ", "+");
EqEquipmentLogBo eqEquipmentLogBo = new EqEquipmentLogBo(); EqEquipmentLogBo eqEquipmentLogBo = new EqEquipmentLogBo();
eqEquipmentLogBo.setEquipmentId(bo.getEquipmentId()); eqEquipmentLogBo.setEquipmentId(bo.getEquipmentId());
BeanUtil.copyProperties(bo, eqEquipmentLogBo);
eqEquipmentLogBo.setCreatedYearDay(createdYearDay);
TableDataInfo<EqEquipmentLogVo> data = logService.queryPageList(eqEquipmentLogBo, pageQuery); TableDataInfo<EqEquipmentLogVo> data = logService.queryPageList(eqEquipmentLogBo, pageQuery);
List<EqEquipmentLogVo> rows = data.getRows(); List<EqEquipmentLogVo> rows = data.getRows();
if (CollUtil.isEmpty(rows)) return new HashMap<>(); if (CollUtil.isEmpty(rows)) return new HashMap<>();
@ -179,15 +180,23 @@ public class EqDeviceController extends BaseController {
* 保存日志(iot使用 设备状态变动时会触发该状态) * 保存日志(iot使用 设备状态变动时会触发该状态)
* @param eqEquipmentLogBo * @param eqEquipmentLogBo
*/ */
@GetMapping("/saveDeviceLogs") @PostMapping("/saveDeviceLogs")
public void saveDeviceLogs(EqEquipmentLogBo eqEquipmentLogBo){ public void saveDeviceLogs(@RequestBody EqEquipmentLogBo eqEquipmentLogBo){
String equipmentName = eqEquipmentLogBo.getEquipmentName();
Integer status = eqEquipmentLogBo.getStatus();
//设备id查询
DeviceByDeviceName deviceByNameDto = iotService.apiTenantDevicesByName(equipmentName);//无信息会抛异常 无需判断
if (deviceByNameDto==null) throw new RuntimeException("设备不存在");
String equipmentCode = deviceByNameDto.getId().getId();
//设备查询
EqEquipmentBo eqEquipmentBo = new EqEquipmentBo(); EqEquipmentBo eqEquipmentBo = new EqEquipmentBo();
eqEquipmentBo.setEquipmentCode(eqEquipmentLogBo.getEquipmentCode()); eqEquipmentBo.setEquipmentCode(equipmentCode);
List<EqEquipmentVo> eqEquipmentVos = eqEquipmentService.queryList(eqEquipmentBo); List<EqEquipmentVo> eqEquipmentVos = eqEquipmentService.queryList(eqEquipmentBo);
if (CollectionUtils.isEmpty(eqEquipmentVos)) return; if (CollectionUtils.isEmpty(eqEquipmentVos)) return;
EqEquipmentVo eqEquipmentVo = eqEquipmentVos.get(0); EqEquipmentVo eqEquipmentVo = eqEquipmentVos.get(0);
eqEquipmentBo.setEquipmentId(eqEquipmentVo.getEquipmentId()); //日志数据组装
eqEquipmentLogBo.setEquipmentCode(equipmentCode);
eqEquipmentLogBo.setEquipmentName(equipmentName);
eqEquipmentLogBo.setUserId(eqEquipmentVo.getUserId()); eqEquipmentLogBo.setUserId(eqEquipmentVo.getUserId());
eqEquipmentLogBo.setUserName(eqEquipmentVo.getUserName()); eqEquipmentLogBo.setUserName(eqEquipmentVo.getUserName());
eqEquipmentLogBo.setNickName(eqEquipmentVo.getNickName()); eqEquipmentLogBo.setNickName(eqEquipmentVo.getNickName());
@ -202,6 +211,7 @@ public class EqDeviceController extends BaseController {
String[] timeStr = formattedDate.split(" "); String[] timeStr = formattedDate.split(" ");
eqEquipmentLogBo.setCreatedYearDay(timeStr[0]);//年月日 eqEquipmentLogBo.setCreatedYearDay(timeStr[0]);//年月日
eqEquipmentLogBo.setCreatedHourSecond(timeStr[1]);//时分秒 eqEquipmentLogBo.setCreatedHourSecond(timeStr[1]);//时分秒
eqEquipmentLogBo.setStatus(status);//状态
//星期 //星期
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTime(createTime); calendar.setTime(createTime);
@ -212,9 +222,15 @@ public class EqDeviceController extends BaseController {
logService.insertByBo(eqEquipmentLogBo); logService.insertByBo(eqEquipmentLogBo);
//更新开合度状态到设备 //更新开合度状态到设备
eqEquipmentBo.setStatus(eqEquipmentLogBo.getOpenStatus()); eqEquipmentBo.setEquipmentId(eqEquipmentVo.getEquipmentId());
eqEquipmentBo.setFaultStatus(eqEquipmentBo.getFaultStatus()); // eqEquipmentBo.setStatus(eqEquipmentLogBo.getOpenStatus());//该参数暂时无用
eqEquipmentBo.setLineStatus(eqEquipmentBo.getLineStatus()); if (status == 500||status==501){
eqEquipmentBo.setLineStatus(status-500);
}
if (status>=10&&status<=14){
eqEquipmentBo.setFaultStatus(eqEquipmentBo.getFaultStatus());
}
eqEquipmentService.updateByBo(eqEquipmentBo); eqEquipmentService.updateByBo(eqEquipmentBo);
} }

View File

@ -44,7 +44,6 @@ public class EqHomeController extends BaseController {
private final IEqAreaService eqAreaService; private final IEqAreaService eqAreaService;
private final IEqFamilyService eqFamilyService; private final IEqFamilyService eqFamilyService;
private final IEqEquipmentService eqEquipmentService; private final IEqEquipmentService eqEquipmentService;
private final IEqShareService shareService; private final IEqShareService shareService;
private final ISysUserService userService; private final ISysUserService userService;
private final IEqUserConfigService eqUserConfigService; private final IEqUserConfigService eqUserConfigService;
@ -249,9 +248,9 @@ public class EqHomeController extends BaseController {
} }
bo.setSharedUserId(sysUserVo.getUserId()); bo.setSharedUserId(sysUserVo.getUserId());
bo.setSharedUserName(sysUserVo.getUserName()); bo.setSharedUserName(sysUserVo.getUserName());
List<EqShareVo> eqShareVos = eqShareService.queryList(bo); List<EqShareVo> eqShareVos = shareService.queryList(bo);
if (!eqShareVos.isEmpty()) throw new RuntimeException("该成员已被分享"); if (!eqShareVos.isEmpty()) throw new RuntimeException("该成员已被分享");
return toAjax(eqShareService.insertByBo(bo)); return toAjax(shareService.insertByBo(bo));
} }
/** /**
@ -263,7 +262,7 @@ public class EqHomeController extends BaseController {
@DeleteMapping("/deleteFamily/{sharedId}") @DeleteMapping("/deleteFamily/{sharedId}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String sharedId) { @PathVariable String sharedId) {
return toAjax(eqShareService.deleteBySharedId(sharedId)); return toAjax(shareService.deleteBySharedId(sharedId));
} }
/** /**
@ -275,7 +274,7 @@ public class EqHomeController extends BaseController {
@DeleteMapping("/deleteMember/{shareId}") @DeleteMapping("/deleteMember/{shareId}")
public R<Void> removeShare(@NotEmpty(message = "主键不能为空") public R<Void> removeShare(@NotEmpty(message = "主键不能为空")
@PathVariable String shareId) { @PathVariable String shareId) {
return toAjax(eqShareService.deleteByShareId(shareId)); return toAjax(shareService.deleteByShareId(shareId));
} }
/** /**
@ -379,7 +378,7 @@ public class EqHomeController extends BaseController {
} }
private final IEqShareService eqShareService;
} }

View File

@ -61,55 +61,85 @@ public class EqTextController extends BaseController {
@GetMapping("/allText") @GetMapping("/allText")
public R<Map<String,List<String>>> allText(){ public R<Map<String,List<String>>> allText(){
Map<String, List<String>> result = new HashMap<>(); Map<String, List<String>> result = new HashMap<>();
//登录login
result.put("login",Arrays.asList( result.put("login",Arrays.asList(
MessageUtils.message("login.name0"), MessageUtils.message("login.name0"),
MessageUtils.message("login.name1"), MessageUtils.message("login.name1"),
MessageUtils.message("login.name2"), MessageUtils.message("login.name2"),
MessageUtils.message("login.name3"), MessageUtils.message("login.name3"),
MessageUtils.message("login.name4") MessageUtils.message("login.name4"),
MessageUtils.message("login.name5")
)); ));
//注册register
result.put("register",Arrays.asList( result.put("register",Arrays.asList(
MessageUtils.message("register.name0"), MessageUtils.message("register.name0"),
MessageUtils.message("register.name1"), MessageUtils.message("register.name0"),
MessageUtils.message("register.name2"), MessageUtils.message("register.name2"),
MessageUtils.message("register.name3"), MessageUtils.message("register.name3"),
MessageUtils.message("register.name4") MessageUtils.message("register.name4"),
MessageUtils.message("register.name5")
)); ));
//注册成功registerSuccess
result.put("registerSuccess",Arrays.asList( result.put("registerSuccess",Arrays.asList(
MessageUtils.message("registerSuccess.name0"), MessageUtils.message("registerSuccess.name0"),
MessageUtils.message("registerSuccess.name1"), MessageUtils.message("registerSuccess.name1"),
MessageUtils.message("registerSuccess.name2"), MessageUtils.message("registerSuccess.name2"),
MessageUtils.message("registerSuccess.name3") MessageUtils.message("registerSuccess.name3")
)); ));
//首页homepage
result.put("homepage",Arrays.asList( result.put("homepage",Arrays.asList(
MessageUtils.message("homepage.name0"), MessageUtils.message("homepage.name0"),
MessageUtils.message("homepage.name1"), MessageUtils.message("homepage.name1"),
MessageUtils.message("homepage.name2"), MessageUtils.message("homepage.name2"),
MessageUtils.message("homepage.name3") MessageUtils.message("homepage.name3"),
MessageUtils.message("homepage.name4"),
MessageUtils.message("homepage.name5"),
MessageUtils.message("homepage.name6"),
MessageUtils.message("homepage.name7"),
MessageUtils.message("homepage.name8"),
MessageUtils.message("homepage.name9"),
MessageUtils.message("homepage.name10")
)); ));
//关门提醒warningClose
result.put("warningClose",Arrays.asList( result.put("warningClose",Arrays.asList(
MessageUtils.message("warningClose.name0"), MessageUtils.message("warningClose.name0"),
MessageUtils.message("warningClose.name1"), MessageUtils.message("warningClose.name1"),
MessageUtils.message("warningClose.name2"), MessageUtils.message("warningClose.name2"),
MessageUtils.message("warningClose.name3") MessageUtils.message("warningClose.name3"),
MessageUtils.message("warningClose.name4"),
MessageUtils.message("warningClose.name5"),
MessageUtils.message("warningClose.name6")
)); ));
//添加设备add
result.put("add",Arrays.asList( result.put("add",Arrays.asList(
MessageUtils.message("add.name0"), MessageUtils.message("add.name0"),
MessageUtils.message("add.name1"), MessageUtils.message("add.name1"),
MessageUtils.message("add.name2"), MessageUtils.message("add.name2"),
MessageUtils.message("add.name3") MessageUtils.message("add.name3")
)); ));
//添加成功addSuccess
result.put("addSuccess",Arrays.asList( result.put("addSuccess",Arrays.asList(
MessageUtils.message("addSuccess.name0"), MessageUtils.message("addSuccess.name0"),
MessageUtils.message("addSuccess.name1"), MessageUtils.message("addSuccess.name1"),
MessageUtils.message("addSuccess.name2") MessageUtils.message("addSuccess.name2")
)); ));
//添加失败addFailure
result.put("addFailure",Arrays.asList( result.put("addFailure",Arrays.asList(
MessageUtils.message("addFailure.name0"), MessageUtils.message("addFailure.name0"),
MessageUtils.message("addFailure.name1"), MessageUtils.message("addFailure.name1"),
MessageUtils.message("addFailure.name2"), // MessageUtils.message("addFailure.name2"),
MessageUtils.message("addFailure.name3") MessageUtils.message("addFailure.name3")
)); ));
//设备详情detail
result.put("detail",Arrays.asList( result.put("detail",Arrays.asList(
MessageUtils.message("detail.name0"), MessageUtils.message("detail.name0"),
MessageUtils.message("detail.name1"), MessageUtils.message("detail.name1"),
@ -129,13 +159,19 @@ public class EqTextController extends BaseController {
MessageUtils.message("detail.name15"), MessageUtils.message("detail.name15"),
MessageUtils.message("detail.name16"), MessageUtils.message("detail.name16"),
MessageUtils.message("detail.name17"), MessageUtils.message("detail.name17"),
MessageUtils.message("detail.name18") MessageUtils.message("detail.name18"),
MessageUtils.message("detail.name19"),
MessageUtils.message("detail.name20")
)); ));
//倒计时设置countdown
result.put("countdown",Arrays.asList( result.put("countdown",Arrays.asList(
MessageUtils.message("countdown.name0"), MessageUtils.message("countdown.name0"),
MessageUtils.message("countdown.name1"), MessageUtils.message("countdown.name1"),
MessageUtils.message("countdown.name2") MessageUtils.message("countdown.name2")
)); ));
//数据日志log
result.put("log",Arrays.asList( result.put("log",Arrays.asList(
MessageUtils.message("log.name0"), MessageUtils.message("log.name0"),
MessageUtils.message("log.name1"), MessageUtils.message("log.name1"),
@ -147,9 +183,16 @@ public class EqTextController extends BaseController {
MessageUtils.message("log.name7"), MessageUtils.message("log.name7"),
MessageUtils.message("log.name8"), MessageUtils.message("log.name8"),
MessageUtils.message("log.name9"), MessageUtils.message("log.name9"),
MessageUtils.message("log.name10") MessageUtils.message("log.name10"),
MessageUtils.message("log.name11"),
MessageUtils.message("log.name12"),
MessageUtils.message("log.name13"),
MessageUtils.message("log.name14"),
MessageUtils.message("log.name15"),
MessageUtils.message("log.name16")
)); ));
//对码clearcode
result.put("checkcode",Arrays.asList( result.put("checkcode",Arrays.asList(
MessageUtils.message("checkcode.name0"), MessageUtils.message("checkcode.name0"),
MessageUtils.message("checkcode.name1"), MessageUtils.message("checkcode.name1"),
@ -157,6 +200,7 @@ public class EqTextController extends BaseController {
MessageUtils.message("checkcode.name3") MessageUtils.message("checkcode.name3")
)); ));
//清码checkcode
result.put("clearcode",Arrays.asList( result.put("clearcode",Arrays.asList(
MessageUtils.message("clearcode.name0"), MessageUtils.message("clearcode.name0"),
MessageUtils.message("clearcode.name1"), MessageUtils.message("clearcode.name1"),
@ -166,12 +210,13 @@ public class EqTextController extends BaseController {
MessageUtils.message("clearcode.name5") MessageUtils.message("clearcode.name5")
)); ));
//设备掉线详情offDetail
result.put("offDetail",Arrays.asList( result.put("offDetail",Arrays.asList(
MessageUtils.message("offDetail.name0"), MessageUtils.message("offDetail.name0"),
MessageUtils.message("offDetail.name1") MessageUtils.message("offDetail.name1")
)); ));
//优化-设置set
result.put("set",Arrays.asList( result.put("set",Arrays.asList(
MessageUtils.message("set.name0"), MessageUtils.message("set.name0"),
MessageUtils.message("set.name1"), MessageUtils.message("set.name1"),
@ -194,10 +239,11 @@ public class EqTextController extends BaseController {
MessageUtils.message("set.name18"), MessageUtils.message("set.name18"),
MessageUtils.message("set.name19"), MessageUtils.message("set.name19"),
MessageUtils.message("set.name20"), MessageUtils.message("set.name20"),
MessageUtils.message("set.name21") MessageUtils.message("set.name21"),
MessageUtils.message("set.name22")
)); ));
//通用setCommon
result.put("setCommon",Arrays.asList( result.put("setCommon",Arrays.asList(
MessageUtils.message("setCommon.detail"), MessageUtils.message("setCommon.detail"),
MessageUtils.message("setCommon.add"), MessageUtils.message("setCommon.add"),
@ -208,6 +254,7 @@ public class EqTextController extends BaseController {
MessageUtils.message("setCommon.confirm") MessageUtils.message("setCommon.confirm")
)); ));
//未设置详情noinit
result.put("noinit",Arrays.asList( result.put("noinit",Arrays.asList(
MessageUtils.message("noinit.name0"), MessageUtils.message("noinit.name0"),
MessageUtils.message("noinit.name1"), MessageUtils.message("noinit.name1"),
@ -230,6 +277,7 @@ public class EqTextController extends BaseController {
MessageUtils.message("noinit.name18") MessageUtils.message("noinit.name18")
)); ));
//修改设备名称setEqname
result.put("setEqname",Arrays.asList( result.put("setEqname",Arrays.asList(
MessageUtils.message("setEqname.name0"), MessageUtils.message("setEqname.name0"),
MessageUtils.message("setEqname.name1"), MessageUtils.message("setEqname.name1"),
@ -238,13 +286,14 @@ public class EqTextController extends BaseController {
MessageUtils.message("setEqname.name4") MessageUtils.message("setEqname.name4")
)); ));
//设备位置修改setEqarea
result.put("setEqarea",Arrays.asList( result.put("setEqarea",Arrays.asList(
MessageUtils.message("setEqarea.name0"), MessageUtils.message("setEqarea.name0"),
MessageUtils.message("setEqarea.name1"), MessageUtils.message("setEqarea.name1"),
MessageUtils.message("setEqarea.name2") MessageUtils.message("setEqarea.name2")
)); ));
//反弹力设置setRebound
result.put("setRebound",Arrays.asList( result.put("setRebound",Arrays.asList(
MessageUtils.message("setRebound.name0"), MessageUtils.message("setRebound.name0"),
MessageUtils.message("setRebound.name1"), MessageUtils.message("setRebound.name1"),
@ -252,6 +301,7 @@ public class EqTextController extends BaseController {
MessageUtils.message("setRebound.name3") MessageUtils.message("setRebound.name3")
)); ));
//删除设备setDelete
result.put("setDelete",Arrays.asList( result.put("setDelete",Arrays.asList(
MessageUtils.message("setDelete.name0"), MessageUtils.message("setDelete.name0"),
MessageUtils.message("setDelete.name1"), MessageUtils.message("setDelete.name1"),
@ -260,19 +310,206 @@ public class EqTextController extends BaseController {
MessageUtils.message("setDelete.name4") MessageUtils.message("setDelete.name4")
)); ));
//时区设置setZone
result.put("setZone",Arrays.asList( result.put("setZone",Arrays.asList(
MessageUtils.message("setZone.name0"), MessageUtils.message("setZone.name0"),
MessageUtils.message("setZone.name1") MessageUtils.message("setZone.name1"),
MessageUtils.message("setZone.name2")
)); ));
//wifi网络setWifi
result.put("setWifi",Arrays.asList( result.put("setWifi",Arrays.asList(
MessageUtils.message("setWifi.name0"), MessageUtils.message("setWifi.name0"),
MessageUtils.message("setWifi.name1"), MessageUtils.message("setWifi.name1"),
MessageUtils.message("setWifi.name2"), MessageUtils.message("setWifi.name2"),
MessageUtils.message("setWifi.name3"), MessageUtils.message("setWifi.name3"),
MessageUtils.message("setWifi.name4"), MessageUtils.message("setWifi.name4"),
MessageUtils.message("setWifi.name5"), MessageUtils.message("setWifi.name5")
MessageUtils.message("setWifi.name6") ));
//设备共享deviceShare
result.put("deviceShare",Arrays.asList(
MessageUtils.message("deviceShare.name0"),
MessageUtils.message("deviceShare.name1"),
MessageUtils.message("deviceShare.name2"),
MessageUtils.message("deviceShare.name3"),
MessageUtils.message("deviceShare.name4")
));
//我的noinit
result.put("my",Arrays.asList(
MessageUtils.message("my.name0"),
MessageUtils.message("my.name1"),
MessageUtils.message("my.name2"),
MessageUtils.message("my.name3"),
MessageUtils.message("my.name4"),
MessageUtils.message("my.name5"),
MessageUtils.message("my.name6"),
MessageUtils.message("my.name7")
));
//我的账号account
result.put("account",Arrays.asList(
MessageUtils.message("account.name0"),
MessageUtils.message("account.name1"),
MessageUtils.message("account.name2"),
MessageUtils.message("account.name3"),
MessageUtils.message("account.name4"),
MessageUtils.message("account.name5"),
MessageUtils.message("account.name6"),
MessageUtils.message("account.name7"),
MessageUtils.message("account.name8"),
MessageUtils.message("account.name9"),
MessageUtils.message("account.name10"),
MessageUtils.message("account.name11"),
MessageUtils.message("account.name12"),
MessageUtils.message("account.name13"),
MessageUtils.message("account.name14"),
MessageUtils.message("account.name15"),
MessageUtils.message("account.name16")
));
//修改昵称accountForm
result.put("accountForm",Arrays.asList(
MessageUtils.message("accountForm.name0"),
MessageUtils.message("accountForm.name1"),
MessageUtils.message("accountForm.name2"),
MessageUtils.message("accountForm.name3"),
MessageUtils.message("accountForm.name4"),
MessageUtils.message("accountForm.name5"),
MessageUtils.message("accountForm.name6"),
MessageUtils.message("accountForm.name7"),
MessageUtils.message("accountForm.name8"),
MessageUtils.message("accountForm.name9"),
MessageUtils.message("accountForm.name10"),
MessageUtils.message("accountForm.name11"),
MessageUtils.message("accountForm.name12"),
MessageUtils.message("accountForm.name13"),
MessageUtils.message("accountForm.name14"),
MessageUtils.message("accountForm.name15"),
MessageUtils.message("accountForm.name16"),
MessageUtils.message("accountForm.name17"),
MessageUtils.message("accountForm.name18"),
MessageUtils.message("accountForm.name19"),
MessageUtils.message("accountForm.name20"),
MessageUtils.message("accountForm.name21"),
MessageUtils.message("accountForm.name22"),
MessageUtils.message("accountForm.name23"),
MessageUtils.message("accountForm.name24"),
MessageUtils.message("accountForm.name25")
));
//修改昵称devForm
result.put("devForm",Arrays.asList(
MessageUtils.message("devForm.name0"),
MessageUtils.message("devForm.name1"),
MessageUtils.message("devForm.name2"),
MessageUtils.message("devForm.name3"),
MessageUtils.message("devForm.name4"),
MessageUtils.message("devForm.name5"),
MessageUtils.message("devForm.name6")
));
//分布管理distribution
result.put("distribution",Arrays.asList(
MessageUtils.message("distribution.name0"),
MessageUtils.message("distribution.name1")
));
//家庭管理family
result.put("family",Arrays.asList(
MessageUtils.message("family.name0"),
MessageUtils.message("family.name1"),
MessageUtils.message("family.name2"),
MessageUtils.message("family.name3"),
MessageUtils.message("family.name4")
));
//成员管理familyDetail
result.put("familyDetail",Arrays.asList(
MessageUtils.message("familyDetail.name0"),
MessageUtils.message("familyDetail.name1"),
MessageUtils.message("familyDetail.name2"),
MessageUtils.message("familyDetail.name3"),
MessageUtils.message("familyDetail.name4"),
MessageUtils.message("familyDetail.name5"),
MessageUtils.message("familyDetail.name6"),
MessageUtils.message("familyDetail.name7"),
MessageUtils.message("familyDetail.name8")
));
//设置语言setLanguage
result.put("setLanguage",Arrays.asList(
MessageUtils.message("setLanguage.name0")
));
//配网ble
result.put("ble",Arrays.asList(
MessageUtils.message("ble.name0"),
MessageUtils.message("ble.name1"),
MessageUtils.message("ble.name2"),
MessageUtils.message("ble.name3"),
MessageUtils.message("ble.name4"),
MessageUtils.message("ble.name5"),
MessageUtils.message("ble.name6"),
MessageUtils.message("ble.name7"),
MessageUtils.message("ble.name8"),
MessageUtils.message("ble.name9"),
MessageUtils.message("ble.name10"),
MessageUtils.message("ble.name11"),
MessageUtils.message("ble.name12"),
MessageUtils.message("ble.name13"),
MessageUtils.message("ble.name14"),
MessageUtils.message("ble.name15"),
MessageUtils.message("ble.name16"),
MessageUtils.message("ble.name17"),
MessageUtils.message("ble.name18"),
MessageUtils.message("ble.name19"),
MessageUtils.message("ble.name20"),
MessageUtils.message("ble.name21"),
MessageUtils.message("ble.name22"),
MessageUtils.message("ble.name23"),
MessageUtils.message("ble.name24"),
MessageUtils.message("ble.name25"),
MessageUtils.message("ble.name26"),
MessageUtils.message("ble.name27"),
MessageUtils.message("ble.name28"),
MessageUtils.message("ble.name29"),
MessageUtils.message("ble.name30"),
MessageUtils.message("ble.name31"),
MessageUtils.message("ble.name32"),
MessageUtils.message("ble.name33"),
MessageUtils.message("ble.name34"),
MessageUtils.message("ble.name35"),
MessageUtils.message("ble.name36"),
MessageUtils.message("ble.name37"),
MessageUtils.message("ble.name38"),
MessageUtils.message("ble.name39"),
MessageUtils.message("ble.name40"),
MessageUtils.message("ble.name41"),
MessageUtils.message("ble.name42"),
MessageUtils.message("ble.name43"),
MessageUtils.message("ble.name44"),
MessageUtils.message("ble.name45"),
MessageUtils.message("ble.name46"),
MessageUtils.message("ble.name47"),
MessageUtils.message("ble.name48"),
MessageUtils.message("ble.name49"),
MessageUtils.message("ble.name50"),
MessageUtils.message("ble.name51"),
MessageUtils.message("ble.name52"),
MessageUtils.message("ble.name53"),
MessageUtils.message("ble.name54"),
MessageUtils.message("ble.name55"),
MessageUtils.message("ble.name56"),
MessageUtils.message("ble.name57"),
MessageUtils.message("ble.name58"),
MessageUtils.message("ble.name59"),
MessageUtils.message("ble.name60"),
MessageUtils.message("ble.name61"),
MessageUtils.message("ble.name62"),
MessageUtils.message("ble.name63"),
MessageUtils.message("ble.name64")
)); ));
return R.ok(result); return R.ok(result);

View File

@ -1,24 +1,14 @@
package org.dromara.web.controller.show; package org.dromara.web.controller.show;
import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.web.domain.vo.EqEquipmentStatisticsVo; import org.dromara.web.domain.vo.EqEquipmentStatisticsVo;
import org.dromara.web.service.IEqEquipmentService; import org.dromara.web.service.IEqEquipmentService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.web.domain.vo.EqEquipmentLogVo; import org.dromara.web.domain.vo.EqEquipmentLogVo;
import org.dromara.web.domain.bo.EqEquipmentLogBo; import org.dromara.web.domain.bo.EqEquipmentLogBo;
import org.dromara.web.service.IEqEquipmentLogService; import org.dromara.web.service.IEqEquipmentLogService;
@ -53,10 +43,10 @@ public class EqShowEquipmentLogController extends BaseController {
/** /**
* 设备类型统计 * 设备类型统计
*/ */
@SaCheckPermission("device:showEquipmentLog:list") // @SaCheckPermission("device:showEquipmentLog:list")
@GetMapping("/statisticEquipmentList") @GetMapping("/selectEquipmentStatistic")
public R<EqEquipmentStatisticsVo> statisticEquipmentList(Integer type, String startTime, String endTime) { public R<EqEquipmentStatisticsVo> selectEquipmentStatistic(Integer type, String startTime, String endTime) {
return R.ok(eqEquipmentService.statisticEquipmentList(type,startTime,endTime)); return R.ok(eqEquipmentService.selectEquipmentStatistic(type,startTime,endTime));
} }

View File

@ -0,0 +1,91 @@
package org.dromara.web.device.iot;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ClassName : DeviceByDeviceName
* @Author : ZZC
* @Date : 2024/8/20 0:26
* @Description : 根据设备名称查询的信息 /api/tenant/devices
**/
@NoArgsConstructor
@Data
public class DeviceByDeviceName {
private IdDTO id;
private Long createdTime;
private AdditionalInfoDTO additionalInfo;
private TenantIdDTO tenantId;
private CustomerIdDTO customerId;
private String name;
private String type;
private String label;
private DeviceProfileIdDTO deviceProfileId;
private DeviceDataDTO deviceData;
private FirmwareIdDTO firmwareId;
private Object softwareId;
@NoArgsConstructor
@Data
public static class IdDTO {
private String entityType;
private String id;
}
@NoArgsConstructor
@Data
public static class AdditionalInfoDTO {
private Boolean gateway;
private Boolean overwriteActivityTime;
private String description;
}
@NoArgsConstructor
@Data
public static class TenantIdDTO {
private String entityType;
private String id;
}
@NoArgsConstructor
@Data
public static class CustomerIdDTO {
private String entityType;
private String id;
}
@NoArgsConstructor
@Data
public static class DeviceProfileIdDTO {
private String entityType;
private String id;
}
@NoArgsConstructor
@Data
public static class DeviceDataDTO {
private ConfigurationDTO configuration;
private TransportConfigurationDTO transportConfiguration;
@NoArgsConstructor
@Data
public static class ConfigurationDTO {
private String type;
}
@NoArgsConstructor
@Data
public static class TransportConfigurationDTO {
private String type;
}
}
@NoArgsConstructor
@Data
public static class FirmwareIdDTO {
private String entityType;
private String id;
}
}

View File

@ -74,7 +74,7 @@ public class EqEquipmentBo extends BaseEntity {
/** /**
* 设备状态 * 设备状态
*/ */
@NotNull(message = "设备状态不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "设备运行状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status; private Integer status;
/** /**

View File

@ -31,7 +31,7 @@ public class EqEquipmentLogBo extends BaseEntity {
/** /**
* 用户id * 用户id
*/ */
@NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId; private Long userId;
/** /**
@ -47,17 +47,23 @@ public class EqEquipmentLogBo extends BaseEntity {
/** /**
* 设备ID * 设备ID
*/ */
@NotNull(message = "设备ID不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "设备ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long equipmentId; private Long equipmentId;
/** /**
* 设备编码 * 设备编码
*/ */
@NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "设备编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String equipmentCode; private String equipmentCode;
/**
* 设备名称
*/
private String equipmentName;
/** /**
* 状态 eq_status_log_type * 状态 eq_status_log_type
*
* 0.停止中 stop * 0.停止中 stop
* 1.关闭中 closing * 1.关闭中 closing
* 2.开启中 openning * 2.开启中 openning
@ -82,8 +88,11 @@ public class EqEquipmentLogBo extends BaseEntity {
* 112.门体手动开启提醒 * 112.门体手动开启提醒
* 113.半开门运行提醒 * 113.半开门运行提醒
* 114.门体停止运行提醒 * 114.门体停止运行提醒
*
* 500.设备离线 offline
* 501.设备在线 online
*/ */
@NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status; private Integer status;
/** /**

View File

@ -9,7 +9,7 @@ import java.io.Serializable;
/** /**
* 设备信息视图对象 eq_user_equipment * 设备信息视图对象 eq_equipment_statistics
* *
* @author zzc * @author zzc
* @date 2024-08-13 * @date 2024-08-13

View File

@ -2,15 +2,12 @@ package org.dromara.web.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.web.domain.EqEquipment; import org.dromara.web.domain.EqEquipment;
import org.dromara.web.domain.vo.EqEquipmentStatisticsVo; import org.dromara.web.domain.vo.EqEquipmentStatisticsVo;
import org.dromara.web.domain.vo.EqEquipmentVo; import org.dromara.web.domain.vo.EqEquipmentVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.web.domain.vo.EqUserEquipmentVo; import org.dromara.web.domain.vo.EqUserEquipmentVo;
import java.util.List;
/** /**
* 设备信息Mapper接口 * 设备信息Mapper接口
* *
@ -26,5 +23,5 @@ public interface EqEquipmentMapper extends BaseMapperPlus<EqEquipment, EqEquipme
* @param type * @param type
* @return * @return
*/ */
EqEquipmentStatisticsVo selectStatisticEquipmentList(Integer type, String startTime, String endTime); EqEquipmentStatisticsVo selectEquipmentStatistic(Integer type, String startTime, String endTime);
} }

View File

@ -105,5 +105,5 @@ public interface IEqEquipmentService {
* @param type * @param type
* @return * @return
*/ */
EqEquipmentStatisticsVo statisticEquipmentList(Integer type, String startTime, String endTime); EqEquipmentStatisticsVo selectEquipmentStatistic(Integer type, String startTime, String endTime);
} }

View File

@ -60,6 +60,7 @@ public class IotService {
map.put("entityType","DEVICE"); map.put("entityType","DEVICE");
map.put("entityId",deviceCode); map.put("entityId",deviceCode);
String send = getSend(CommonYmlConfig.URL_IOT_TELEMETRY, map); String send = getSend(CommonYmlConfig.URL_IOT_TELEMETRY, map);
if (send.startsWith("{\"status\":")) return null;
JSONObject jsonObject = JSON.parseObject(send); JSONObject jsonObject = JSON.parseObject(send);
//转换 //转换
Map<String, String> resultMap = new HashMap<>(); Map<String, String> resultMap = new HashMap<>();
@ -176,6 +177,21 @@ public class IotService {
return deviceDto; return deviceDto;
} }
/**
* 根据设备名称获取获取设备信息
* @param deviceName
* @return
*/
public DeviceByDeviceName apiTenantDevicesByName(String deviceName){
Map<String, String> map = new HashMap<>();
map.put("deviceName",deviceName);
String send = getSend(CommonYmlConfig.URL_IOT_DEVICE_BY_NAME, map);
JSONObject jsonObject = JSON.parseObject(send);
DeviceByDeviceName deviceDto = jsonObject.toJavaObject(DeviceByDeviceName.class);
if (deviceDto.getId()==null) throw new RuntimeException(MessageUtils.message("message.fault.device.notfound"));
return deviceDto;
}
public String getToken() { public String getToken() {
String token = tokenCache.getIfPresent("token"); String token = tokenCache.getIfPresent("token");

View File

@ -78,7 +78,7 @@ public class EqEquipmentLogServiceImpl implements IEqEquipmentLogService {
lqw.eq(bo.getStatus() != null, EqEquipmentLog::getStatus, bo.getStatus()); lqw.eq(bo.getStatus() != null, EqEquipmentLog::getStatus, bo.getStatus());
lqw.eq(bo.getFaultStatus() != null, EqEquipmentLog::getFaultStatus, bo.getFaultStatus()); lqw.eq(bo.getFaultStatus() != null, EqEquipmentLog::getFaultStatus, bo.getFaultStatus());
lqw.eq(bo.getLineStatus() != null, EqEquipmentLog::getLineStatus, bo.getLineStatus()); lqw.eq(bo.getLineStatus() != null, EqEquipmentLog::getLineStatus, bo.getLineStatus());
lqw.eq(bo.getCreatedYearDay() != null, EqEquipmentLog::getCreatedYearDay, bo.getCreatedYearDay()); lqw.eq(StringUtils.isNotBlank(bo.getCreatedYearDay()), EqEquipmentLog::getCreatedYearDay, bo.getCreatedYearDay());
lqw.eq(bo.getCreatedHourSecond() != null, EqEquipmentLog::getCreatedHourSecond, bo.getCreatedHourSecond()); lqw.eq(bo.getCreatedHourSecond() != null, EqEquipmentLog::getCreatedHourSecond, bo.getCreatedHourSecond());
lqw.eq(bo.getDayOfWeek() != null, EqEquipmentLog::getDayOfWeek, bo.getDayOfWeek()); lqw.eq(bo.getDayOfWeek() != null, EqEquipmentLog::getDayOfWeek, bo.getDayOfWeek());
// lqw.between(params.get("beginTime") != null && params.get("endTime") != null, // lqw.between(params.get("beginTime") != null && params.get("endTime") != null,

View File

@ -1,6 +1,6 @@
package org.dromara.web.service.impl; package org.dromara.web.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
@ -14,10 +14,7 @@ import lombok.RequiredArgsConstructor;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.dromara.web.device.*; import org.dromara.web.device.*;
import org.dromara.web.device.iot.DeviceClientMsgDto; import org.dromara.web.device.iot.*;
import org.dromara.web.device.iot.DeviceDto;
import org.dromara.web.device.iot.DeviceMsgDto;
import org.dromara.web.device.iot.DeviceServerMsgDto;
import org.dromara.web.domain.EqArea; import org.dromara.web.domain.EqArea;
import org.dromara.web.domain.bo.*; import org.dromara.web.domain.bo.*;
import org.dromara.web.domain.vo.EqEquipmentDetailVo; import org.dromara.web.domain.vo.EqEquipmentDetailVo;
@ -73,6 +70,21 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService {
public TableDataInfo<EqEquipmentVo> queryPageList(EqEquipmentBo bo, PageQuery pageQuery) { public TableDataInfo<EqEquipmentVo> queryPageList(EqEquipmentBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<EqEquipment> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<EqEquipment> lqw = buildQueryWrapper(bo);
Page<EqEquipmentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<EqEquipmentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
List<EqEquipmentVo> records = result.getRecords();
if (CollUtil.isEmpty(records)) return TableDataInfo.build(result);
//获取遥测数据
for (EqEquipmentVo record : records) {
String equipmentCode = record.getEquipmentCode();
DeviceMsgDto telemetryMsg = iotService.httpTelemetryGetSend(equipmentCode);
if (telemetryMsg == null) {
record.setLineStatus(0);//未获取到数据统一为离线
continue;
}
record.setStatus(telemetryMsg.getOpenPercentage());
record.setFaultStatus(telemetryMsg.getGarageException());
}
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@ -222,7 +234,7 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService {
//获取服务属性状态 //获取服务属性状态
DeviceServerMsgDto serverMsg = iotService.httpServerGetSend(bo.getEquipmentCode()); DeviceServerMsgDto serverMsg = iotService.httpServerGetSend(bo.getEquipmentCode());
result.setLineStatus(serverMsg.getLineStatus()?1:0); result.setLineStatus(serverMsg.getLineStatus()?1:0);
if (!serverMsg.getLineStatus()) return result;
//获取客户端属性 //获取客户端属性
DeviceClientMsgDto clientMsg = iotService.httpClientGetSend(bo.getEquipmentCode()); DeviceClientMsgDto clientMsg = iotService.httpClientGetSend(bo.getEquipmentCode());
result.setEquipmentType(clientMsg.getEquipmentType()); result.setEquipmentType(clientMsg.getEquipmentType());
@ -233,7 +245,10 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService {
//获取遥测数据 //获取遥测数据
DeviceMsgDto telemetryMsg = iotService.httpTelemetryGetSend(bo.getEquipmentCode()); DeviceMsgDto telemetryMsg = iotService.httpTelemetryGetSend(bo.getEquipmentCode());
if (telemetryMsg == null) {
System.out.println("未获取到设备信息");
result.setLineStatus(0);
}
//开合状态 //开合状态
result.setOpenStatus(telemetryMsg.getOpenPercentage()); result.setOpenStatus(telemetryMsg.getOpenPercentage());
result.setOpenStatusText( result.setOpenStatusText(
@ -254,15 +269,27 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService {
@Override @Override
public Boolean bindDevice(EqAppHomeBo bo) { public Boolean bindDevice(EqAppHomeBo bo) {
String equipmentCode = bo.getEquipmentCode(); String equipmentCode = bo.getEquipmentCode(); //这里的设备编码改成了设备mac地址
//通过设备mac地址查询设备编码
final String macPrefix = "mock_";
equipmentCode = macPrefix + equipmentCode;
//根据设备名称地址查询设备id设备code
DeviceByDeviceName deviceByNameDto = iotService.apiTenantDevicesByName(equipmentCode);//无信息会抛异常 无需判断
if (deviceByNameDto==null) throw new RuntimeException(MessageUtils.message("iot.device.notFound"));
String equipmentName = equipmentCode;//暂时不存设备名称 下面从其他接口获取并存入了
equipmentCode = deviceByNameDto.getId().getId();
LambdaQueryWrapper<EqEquipment> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<EqEquipment> lqw = Wrappers.lambdaQuery();
lqw.eq( EqEquipment::getEquipmentCode,equipmentCode); lqw.eq( EqEquipment::getEquipmentCode,equipmentCode);
EqEquipmentVo eqEquipmentVo = baseMapper.selectVoOne(lqw); EqEquipmentVo eqEquipmentVo = baseMapper.selectVoOne(lqw);
if (eqEquipmentVo!=null) throw new RuntimeException("设备已绑定"); if (eqEquipmentVo!=null) throw new RuntimeException(MessageUtils.message("message.fault.device.isbind"));
DeviceServerMsgDto deviceServerMsgDto = iotService.httpServerGetSend(equipmentCode); DeviceServerMsgDto deviceServerMsgDto = iotService.httpServerGetSend(equipmentCode);
if (!deviceServerMsgDto.getLineStatus()) throw new RuntimeException("设备未连接 无法绑定"); if (!deviceServerMsgDto.getLineStatus()) throw new RuntimeException(MessageUtils.message("message.fault.device.offline"));
//从iot平台设置用户绑定 并获取设备信息 //从iot平台设置用户绑定 并获取设备信息
DeviceDto deviceDto = iotService.httpDeviceGetSend(equipmentCode);//无信息会抛异常 无需判断 DeviceDto deviceDto = iotService.httpDeviceGetSend(equipmentCode);//无信息会抛异常 无需判断
@ -277,14 +304,17 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService {
eqEquipmentBo.setUserName(sysUserVo.getUserName()); eqEquipmentBo.setUserName(sysUserVo.getUserName());
eqEquipmentBo.setNickName(sysUserVo.getNickName()); eqEquipmentBo.setNickName(sysUserVo.getNickName());
DeviceMsgDto deviceMsgDto = iotService.httpTelemetryGetSend(equipmentCode); DeviceMsgDto deviceMsgDto = iotService.httpTelemetryGetSend(equipmentCode);
if (deviceMsgDto==null){
eqEquipmentBo.setStatus(deviceMsgDto.getOpenPercentage());//使用半开作为状态值
eqEquipmentBo.setFaultStatus(deviceMsgDto.getGarageException());
eqEquipmentBo.setLineStatus(1);//在线
}else{
eqEquipmentBo.setLineStatus(0);//离线
}
eqEquipmentBo.setStatus(deviceMsgDto.getOpenPercentage());//使用半开作为状态值
eqEquipmentBo.setFaultStatus(deviceMsgDto.getGarageException());
eqEquipmentBo.setLineStatus(1);//在线
//判断是否获取到信息 无信息会抛异常 无需判断 //判断是否获取到信息 无信息会抛异常 无需判断
EqEquipment add = MapstructUtils.convert(eqEquipmentBo, EqEquipment.class); EqEquipment add = MapstructUtils.convert(eqEquipmentBo, EqEquipment.class);
validEntityBeforeSave(add);
baseMapper.insert(add); baseMapper.insert(add);
return true; return true;
} }
@ -308,8 +338,8 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService {
} }
@Override @Override
public EqEquipmentStatisticsVo statisticEquipmentList(Integer type, String startTime, String endTime) { public EqEquipmentStatisticsVo selectEquipmentStatistic(Integer type, String startTime, String endTime) {
EqEquipmentStatisticsVo result = baseMapper.selectStatisticEquipmentList(type, startTime, endTime); EqEquipmentStatisticsVo result = baseMapper.selectEquipmentStatistic(type, startTime, endTime);
result.setType(type); result.setType(type);
return result; return result;
} }

View File

@ -95,7 +95,7 @@ spring.data:
# 端口默认为6379 # 端口默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 2
# redis 密码必须配置 # redis 密码必须配置
password: ruoyi123 password: ruoyi123
# 连接超时时间 # 连接超时时间
@ -264,3 +264,4 @@ iot:
telemetry: /api/plugins/telemetry/{entityType}/{entityId}/values/timeseries telemetry: /api/plugins/telemetry/{entityType}/{entityId}/values/timeseries
operate: /api/plugins/rpc/oneway/{deviceId} operate: /api/plugins/rpc/oneway/{deviceId}
device: /api/device/{deviceId} device: /api/device/{deviceId}
deviceByName: /api/tenant/devices?deviceName={deviceName}

View File

@ -259,3 +259,5 @@ runStatus.name14=deviceException
message.fault.device.notfound = Device not found message.fault.device.notfound = Device not found
message.fault.device.isbind = Device is offline
message.fault.device.offline = Device is offline

View File

@ -60,191 +60,6 @@ tenant.not.exists=对不起, 您的租户不存在,请联系管理员
tenant.blocked=对不起,您的租户已禁用,请联系管理员 tenant.blocked=对不起,您的租户已禁用,请联系管理员
tenant.expired=对不起,您的租户已过期,请联系管理员 tenant.expired=对不起,您的租户已过期,请联系管理员
##《登录》login
login.name0=登录
login.name1=请输入账号
login.name2=请输入密码
login.name3=我已阅读并同意签署
login.name4=立即注册
##《注册》register
register.name0=注册
register.name1=注册账号
register.name2=请输入账号
register.name3=请输入密码
register.name4=请再次输入密码
##《注册成功》registerSuccess
registerSuccess.name0=注册成功
registerSuccess.name1=您的登录账号
registerSuccess.name2=您的密码
registerSuccess.name3=立即登录
##《首页》homepage
homepage.name0=首页
homepage.name1=状态
homepage.name2=已关闭
homepage.name3=打开
##《关门提醒》warningClose
warningClose.name0=关门提醒
warningClose.name1=设备-deviceName-已开门-num-分钟了,请记得关门
warningClose.name2=关门
warningClose.name3=我知道了
##《添加设备》add
add.name0=添加设备
add.name1=请输入设备编码
add.name2=请输入
add.name3=添加
## 《添加成功》addSuccess
addSuccess.name0=添加成功
addSuccess.name1=返回
addSuccess.name2=继续搜索
##《添加失败》addFailure
addFailure.name0=添加失败
addFailure.name1=请正确的设备编号后再试
addFailure.name2=返回
addFailure.name3=重新添加
##《设备详情》detail
detail.name0=详情
##(已关闭 打开10% 打开100%
detail.name1=状态
detail.name2=已关闭
detail.name3=打开
detail.name4=运行状态
detail.name5=半开
detail.name6=
detail.name7=
detail.name8=
detail.name9=半开门
detail.name10=灯管理
detail.name11=设置
detail.name12=min分second秒后关灯
detail.name13=倒计时重置
detail.name14=运行次数
detail.name15=操作次数
detail.name16=数据日志
detail.name17=清码
detail.name18=对码
##《倒计时设置》countdown
countdown.name0=倒计时设置
countdown.name1=取消
countdown.name2=确认
##《数据日志》log
log.name0=数据日志
log.name1=选择日期
log.name2=今天
log.name3=周日
log.name4=周一
log.name5=周二
log.name6=周三
log.name7=周四
log.name8=周五
log.name9=周六
log.name10=开门提醒
##《对码》checkcode
checkcode.name0=对码
checkcode.name1=对码中
checkcode.name2=对码成功
checkcode.name3=对码失败请重试
##《清码》clearcode
clearcode.name0=提示
clearcode.name1=请输入登录密码
clearcode.name2=请输入登录密码才能进行设备清码
clearcode.name3=取消
clearcode.name4=确认
clearcode.name5=密码错误请重试
##《设备掉线详情》offDetail
offDetail.name0=详情
offDetail.name1=设备已离线
##《优化-设置》set
set.name0=设置
set.name1=设备名称
set.name2=设备位置
set.name3=反弹力设置
set.name4=红外感应
set.name5=开启此功能,电机关门时,如有人或物在门下经过则触发红外感应器 ,门会立即停止关闭,并打开。
set.name6=行程距离限制
set.name7=半开门功能开关
set.name8=半开门高度设置
set.name9=提醒关门功能开关
set.name10=提醒关门时间设置
set.name11=自动关门 (提示 启动自动开门功能,需要先打开红外保护感应功能)
set.name12=打开此功能,当门开到最大时,在设置的倒计时时间内,门没有被控制,则在倒计时结束后,门会自动关闭。
set.name13=自动关门时间设置
set.name14=运行次数
set.name15=WiFi网络
set.name16=时区
set.name17=设备型号
set.name18=序列号
set.name19=模组版本
set.name20=MCU版本
set.name21=删除设备
##《通用》setCommon
setCommon.detail=详情
setCommon.add=添加
setCommon.edit=编辑
setCommon.delete=删除
setCommon.alert=提示
setCommon.cancel=取消
setCommon.confirm=确认
##《未设置详情》noinit
noinit.name0=详情
noinit.name1=行程未校准
noinit.name2=设备未校准行程,将不能进行设备控制
noinit.name3=行程校准教程
noinit.name4=请在设备上操作
noinit.name5=设置开门位置:
noinit.name6=1.请长按“SET”键
noinit.name7=观察:显示器显示”1”闪烁
noinit.name8=2.再次按下"SET"键
noinit.name9=观察:显示器显示为”1”常亮
noinit.name10=3.长按"UP"键,使门至最大开门位置后松手停止
noinit.name11=观察:门向开门方向运行,当门达到最大开门位置后
noinit.name12=设置关门位置:
noinit.name13=4.再次按下”SET"键
noinit.name14=观察:显示器显示为”2”常亮
noinit.name15=5.长按“向下”键至关闭位置后松手
noinit.name16=观察:门向关门方向运行,当门达到关闭位置后停止
noinit.name17=自动校验:
noinit.name18=6.再次按下"SET"键
##《修改设备名称》setEqname
setEqname.name0=修改设备名称
setEqname.name1=请输入名称
setEqname.name2=上一页
setEqname.name3=确认
##《设备位置修改》setEqarea
setEqarea.name0=修改设备位置
setEqarea.name1=上一页
setEqarea.name2=确认
##《反弹力设置》setRebound
setRebound.name0=电机反弹力
setRebound.name1=调节反弹力
setRebound.name2=电机在开门时,若开门的力超出设定范围值,门会立即停止开门;
setRebound.name3=若关门的力超出设定范围值,门会立即停止关闭并开门,此功能可以调整开/关门感应力的范围值。
##《删除设备》setDelete
setDelete.name0=删除设备
setDelete.name1=提示
setDelete.name2=删除设备后,将不能管理设备请谨慎操作!
setDelete.name3=取消
setDelete.name4=确认删除
##《时区设置》setZone
setZone.name0=时区
setZone.name1=时间格式
##《wifi网络》setWifi
setWifi.name0=wifi网络
setWifi.name1=提示
setWifi.name2=已链接WiFiXXXXXXXX
setWifi.name3=若需更换网络,请确保你在设备旁
setWifi.name4=边后点击重置WiFi按钮
setWifi.name5=确认删除
setWifi.name6=取消
## 《开合状态》 ## 《开合状态》
openStatus.name0=已关闭 openStatus.name0=已关闭
openStatus.name1=打开 openStatus.name1=打开
@ -285,3 +100,368 @@ logStatus.name113=半开门运行提醒
logStatus.name114=门体停止运行提醒 logStatus.name114=门体停止运行提醒
message.fault.device.notfound = 设备不存在 message.fault.device.notfound = 设备不存在
message.fault.device.isbind = 设备已绑定
message.fault.device.offline = 设备未连接 无法绑定
#====== app =========
##《登录》login
login.name0=登录
login.name1=请输入账号
login.name2=请输入密码
login.name3=我已阅读并同意签署
login.name4=立即注册
login.name5=支持手机号/邮箱登录
##《注册》register
register.name0=注册
register.name1=注册账号
register.name2=请输入账号
register.name3=请输入密码
register.name4=请再次输入密码
register.name5=两次输入的密码不一致
##《注册成功》registerSuccess
registerSuccess.name0=注册成功
registerSuccess.name1=您的登录账号
registerSuccess.name2=您的密码
registerSuccess.name3=立即登录
##《首页》homepage
homepage.name0=首页
homepage.name1=状态
homepage.name2=已关闭
homepage.name3=打开
homepage.name4=关门提醒
homepage.name5=开门提醒
homepage.name6=暂停提醒
homepage.name7=已关门
homepage.name8=是否开门?
homepage.name9=是否暂停
homepage.name10=请选择
##《关门提醒》warningClose
warningClose.name0=关门提醒
warningClose.name1=设备-deviceName-已开门-num-分钟了,请记得关门
warningClose.name2=设备
warningClose.name3=已开门
warningClose.name4=分钟了,请记得关门
warningClose.name5=关门
warningClose.name6=我知道了
##《添加设备》add
add.name0=添加设备
add.name1=请输入设备编码
add.name2=请输入
add.name3=添加
## 《添加成功》addSuccess
addSuccess.name0=添加成功
addSuccess.name1=返回
addSuccess.name2=继续搜索
##《添加失败》addFailure
addFailure.name0=添加失败
addFailure.name1=请输入正确的设备编号后再试
addFailure.name3=重新添加
##《设备详情》detail
detail.name0=详情
##(已关闭 打开10% 打开100%
detail.name1=状态
detail.name2=已关闭
detail.name3=打开
detail.name4=运行状态
detail.name5=半开
detail.name6=
detail.name7=
detail.name8=
detail.name9=半开门
detail.name10=灯管理
detail.name11=设置
detail.name12=min分second秒后关灯
detail.name13=倒计时重置
detail.name14=运行次数
detail.name15=操作次数
detail.name16=数据日志
detail.name17=清码
detail.name18=对码
detail.name19=开门设置
detail.name20=已打开
##《倒计时设置》countdown
countdown.name0=倒计时设置
countdown.name1=取消
countdown.name2=确认
##《数据日志》log
log.name0=数据日志
log.name1=选择日期
log.name2=今天
log.name3=周日
log.name4=周一
log.name5=周二
log.name6=周三
log.name7=周四
log.name8=周五
log.name9=周六
log.name10=开门提醒
log.name11=
log.name12=
log.name13=
log.name14=
log.name15=
log.name16=
##《对码》checkcode
checkcode.name0=对码
checkcode.name1=对码中
checkcode.name2=对码成功
checkcode.name3=对码失败请重试
##《清码》clearcode
clearcode.name0=提示
clearcode.name1=请输入登录密码
clearcode.name2=请输入登录密码才能进行设备清码
clearcode.name3=取消
clearcode.name4=确认
clearcode.name5=密码错误请重试
##《设备掉线详情》offDetail
offDetail.name0=详情
offDetail.name1=设备已离线
##《优化-设置》set
set.name0=设置
set.name1=设备名称
set.name2=设备位置
set.name3=反弹力设置
set.name4=红外感应
set.name5=开启此功能,电机关门时,如有人或物在门下经过则触发红外感应器 ,门会立即停止关闭,并打开。
set.name6=行程距离限制
set.name7=半开门功能开关
set.name8=半开门高度设置
set.name9=提醒关门功能开关
set.name10=提醒关门时间设置
set.name11=自动关门
set.name12=打开此功能,当门开到最大时,在设置的倒计时时间内,门没有被控制,则在倒计时结束后,门会自动关闭。
set.name13=自动关门时间设置
set.name14=运行次数
set.name15=WiFi网络
set.name16=时区
set.name17=设备型号
set.name18=序列号
set.name19=模组版本
set.name20=MCU版本
set.name21=删除设备
set.name22=启动自动开门功能,需要先打开红外保护感应功能
##《通用》setCommon
setCommon.detail=详情
setCommon.add=添加
setCommon.edit=编辑
setCommon.delete=删除
setCommon.alert=提示
setCommon.cancel=取消
setCommon.confirm=确认
##《未设置详情》noinit
noinit.name0=详情
noinit.name1=行程未校准
noinit.name2=设备未校准行程,将不能进行设备控制
noinit.name3=行程校准教程
noinit.name4=请在设备上操作
noinit.name5=设置开门位置
noinit.name6=1.请长按“SET”键
noinit.name7=观察:显示器显示“1”闪烁
noinit.name8=2.再次按下"SET"键
noinit.name9=观察:显示器显示为“1”常亮
noinit.name10=3.长按“UP”键,使门至最大开门位置后松手停止
noinit.name11=观察:门向开门方向运行,当门达到最大开门位置后
noinit.name12=设置关门位置:
noinit.name13=4.再次按下“SET”键
noinit.name14=观察:显示器显示为“2”常亮
noinit.name15=5.长按“向下”键至关闭位置后松手
noinit.name16=观察:门向关门方向运行,当门达到关闭位置后停止
noinit.name17=自动校验:
noinit.name18=6.再次按下“SET”键
##《修改设备名称》setEqname
setEqname.name0=修改设备名称
setEqname.name1=请输入名称
setEqname.name2=上一页
setEqname.name3=确认
##《设备位置修改》setEqarea
setEqarea.name0=修改设备位置
setEqarea.name1=上一页
setEqarea.name2=确认
##《反弹力设置》setRebound
setRebound.name0=电机反弹力
setRebound.name1=调节反弹力
setRebound.name2=电机在开门时,若开门的力超出设定范围值,门会立即停止开门;
setRebound.name3=若关门的力超出设定范围值,门会立即停止关闭并开门,此功能可以调整开/关门感应力的范围值。
##《删除设备》setDelete
setDelete.name0=删除设备
setDelete.name1=提示
setDelete.name2=删除设备后,将不能管理设备请谨慎操作!
setDelete.name3=取消
setDelete.name4=确认删除
##《时区设置》setZone
setZone.name0=时区
setZone.name1=选择时间格式
setZone.name2=时间格式
##《wifi网络》setWifi
setWifi.name0=wifi网络
setWifi.name1=提示
setWifi.name2=已连接WiFi
setWifi.name3=若需更换网络请确保你在设备旁边后点击重置WiFi按钮
setWifi.name4=确认删除
setWifi.name5=取消
# 《设备共享》deviceShare
deviceShare.name1 = 设备共享
deviceShare.name2 = 请输入对方登录账号
deviceShare.name3 = 温馨提示
deviceShare.name4 = 设备共享后,对方账号也可以访问管理当前账号所有设备,对方不可删除当前账号设备。
# 《我的》my
my.name0 = 登录账号
my.name1 = 账号管理
my.name2 = 分布管理
my.name3 = 家庭管理
my.name4 = 设备共享
my.name5 = 切换语言
my.name6 = 我的
my.name7 = 设备配网
# 《我的账号》account
account.name0=我的账号
account.name1=退出登录
account.name2=头像
account.name3=昵称
account.name4=邮箱
account.name5=设置登录密码
account.name6=修改密码
account.name7=注销账号
account.name8=注销后无法恢复,请谨慎操作
account.name9=退出登录会清除您的登录信息,确认退出吗?
account.name10=重选
account.name11=关闭
account.name12=旋转
account.name13=预览
account.name14=上传
account.name15=注销账号后无法恢复,确认注销吗?
account.name16=注销账号
# 《修改昵称》accountForm
accountForm.name0=修改昵称
accountForm.name1=修改登录密码
accountForm.name2=绑定邮箱
accountForm.name3=添加
accountForm.name4=家庭名称
accountForm.name5=请输入昵称
accountForm.name6=请输入名称
accountForm.name7=请输入旧密码
accountForm.name8=请输入新密码
accountForm.name9=请再次输入密码
accountForm.name10=请输入邮箱
accountForm.name11=请输入验证码
accountForm.name12=发送验证码
accountForm.name13=请稍候……
accountForm.name14=s后获取
accountForm.name15=您当前邮箱号为
accountForm.name16=上一页
accountForm.name17=确认
accountForm.name18=两次输入的密码不一致
accountForm.name19=请输入正确的邮箱
accountForm.name20=请上传图片
accountForm.name21=上传/拍照
accountForm.name22=上传中...
accountForm.name23=上传失败
accountForm.name24=重新上传
accountForm.name25=修改头像
# 《设备共享》devForm
devForm.name0 = 设备共享
devForm.name1 = 请输入对方登录账号
devForm.name2 = 温馨提示
devForm.name3 = 设备共享后,对方账号也可以访问管理当前账号所有设备,对方不可删除当前账号设备。
devForm.name4 = 上一页
devForm.name5 = 添加
devForm.name6 = 设备共享成功,是否继续共享?
# 《分布管理》distribution
distribution.name0=分布管理
distribution.name1=默认
# 《家庭管理》 family
family.name0=家庭管理
family.name1=我的家
family.name2=我加入的家庭
family.name3=个区域
family.name4=个设备
# 《成员管理》familyDetail
familyDetail.name0=成员管理
familyDetail.name1=家庭名称
familyDetail.name2=我加入的家庭
familyDetail.name3=提示
familyDetail.name4=移除当前成员后,对方将不能访问当前家庭进行设备管理!
familyDetail.name5=取消
familyDetail.name6=确定
familyDetail.name7=删除
familyDetail.name8=主人
# 《设置语言》setLanguage
setLanguage.name0=设置语言
#《配网》ble
ble.name0=设备配网
ble.name1=执行成功!
ble.name2=环境已存在,不需要重复初始化!
ble.name3=配网环境未得到初始化,请先执行环境初始化!
ble.name4=搜索蓝牙任务,已经停止运行,无需重复停止!
ble.name5=搜索蓝牙任务,已经在运行,无需重复运行!
ble.name6=蓝牙设备不具备扫描WIFI列表的能力!
ble.name7=蓝牙设备未连接,请先连接设备!
ble.name8=传递参数错误!
ble.name9=初始化会话失败,请重新初始化!
ble.name10=预留!
ble.name11=环境检查OK!
ble.name12=位置权限未打开!
ble.name13=GPS未打开!
ble.name14=此设备不支持蓝牙!
ble.name15=需要打开蓝牙开关,才能继续!
ble.name16=需要位置权限,才能继续!
ble.name17=请允许位置权限,才能继续!
ble.name18=需要位置权限,才能继续!
ble.name19=正在连接蓝牙设备,请允许配对或稍后重试!!
ble.name20=已经连接蓝牙设备,请断开蓝牙后重新尝试!
ble.name21=正在供应配网数据,稍后重试!
ble.name22=需要蓝牙权限,才能继续!
ble.name23=需要蓝牙权限,才能继续!
ble.name24= 无需密码,点击确定开始配网!
ble.name25=请输入
ble.name26= 的密码!
ble.name27=APP需要位置权限,才能继续!
ble.name28=APP需要蓝牙权限,才能继续!
ble.name29=需要根据提示处理!
ble.name30=正在扫描蓝牙设备....
ble.name31=正在连接蓝牙设备....(最长40S)
ble.name32=参数错误,请重试!
ble.name33=正在获取WIFI列表....
ble.name34=配网中....
ble.name35=扫描完成!
ble.name36=请打开蓝牙!
ble.name37=未知错误!
ble.name38=连接蓝牙成功!
ble.name39=连接蓝牙失败!可尝试重新搜索,重启蓝牙,或重启应用!
ble.name40=蓝牙连接断开!
ble.name41=未知错误!尝试手动重启蓝牙,或重启应用!
ble.name42=配网成功!
ble.name43=密码错误,重新尝试!
ble.name44=无法找到网络,重新尝试!
ble.name45=设备断开连接,重新尝试!
ble.name46=失败,可重启APP或重新尝试!
ble.name47=初始化配网环境
ble.name48=操作说明
ble.name49=第一步
ble.name50=第二步
ble.name51=下一步
ble.name52=扫描蓝牙设备结果
ble.name53=提示:没有扫描到蓝牙设备!
ble.name54=提示:点击需要配网的蓝牙设备,进入下一步。
ble.name55=重新搜索
ble.name56=获取WIFI列表结果
ble.name57=提示:没有扫描到可用的WIFI网络!
ble.name58=提示:点击要连接的WIFI网络,输入密码,开始配网!
ble.name59=重新获取
ble.name60=长按设备WIFI按键10秒以上,LED灯快速闪烁后,松手。
ble.name61=点击,下一步,按提示输入信息,开始配网。
ble.name62=提示输入wifi密码
ble.name63=提示:开始配网
ble.name64=返回首页

View File

@ -28,24 +28,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
e.user_id, e.user_id,
s.nick_name, s.nick_name,
e.user_name, e.user_name,
COUNT(*) AS bind_num, -- 设备总数 COUNT(e.equipment_id) AS bind_num, -- 设备总数
SUM(CASE WHEN e.line_status = 0 THEN 1 ELSE 0 END) AS offline_num, -- 离线个数 SUM(CASE WHEN e.line_status = 0 THEN 1 ELSE 0 END) AS offline_num, -- 离线个数
SUM(CASE WHEN e.line_status = 1 THEN 1 ELSE 0 END) AS online_num -- 在线个数 SUM(CASE WHEN e.line_status = 1 THEN 1 ELSE 0 END) AS online_num -- 在线个数
FROM FROM
eq_equipment e sys_user s
JOIN left JOIN
sys_user s ON e.user_id = s.user_id eq_equipment e
ON e.user_id = s.user_id
<where> <where>
s.user_type='app_user'
<if test="nickName != null and nickName != ''"> <if test="nickName != null and nickName != ''">
AND nick_name like AND s.nick_name like
CONCAT('%', #{nickName}, '%') CONCAT('%', #{nickName}, '%')
</if> </if>
</where> </where>
GROUP BY GROUP BY
e.user_name, s.nick_name; e.user_id,e.user_name, s.nick_name
</select> </select>
<select id="selectStatisticEquipmentList" resultType="org.dromara.web.domain.vo.EqEquipmentStatisticsVo"> <select id="selectEquipmentStatistic" resultType="org.dromara.web.domain.vo.EqEquipmentStatisticsVo">
SELECT SELECT
COUNT(*) AS bind_num, -- 设备总数 COUNT(*) AS bind_num, -- 设备总数
SUM(CASE WHEN line_status = 0 THEN 1 ELSE 0 END) AS offline_num, -- 离线个数 SUM(CASE WHEN line_status = 0 THEN 1 ELSE 0 END) AS offline_num, -- 离线个数