diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java index 4d169a21..1e212643 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java @@ -54,6 +54,7 @@ public class SaPermissionImpl implements StpInterface { "xcx:unit:query", // 工单管理 "xcx:workOrders:add", + "xcx:workOrders:edit", "xcx:workOrders:query", // 工单类型管理 "xcx:workOrdersType:query", diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java index 716e3bfa..14de09d4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java @@ -1,6 +1,8 @@ package org.dromara.property.controller.smartDevicesController; +import java.util.HashMap; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; @@ -131,4 +133,27 @@ public class TbMeterInfoController extends BaseController { return R.ok(); } + /** + * 获取水/电/表状态统计 + * + * @return map + */ + @GetMapping("/statusCount") + public R> getMeterStatus() { + List voList = tbMeterInfoService.queryList(new TbMeterInfoBo()); + Map map = new HashMap<>(); + + Map powerMeter = new HashMap<>(); + powerMeter.put("on", voList.stream().filter(o -> o.getMeterType() == 1 && o.getCommunicationState() == 1).count()); + powerMeter.put("off", voList.stream().filter(o -> o.getMeterType() == 1 && o.getCommunicationState() == 0).count()); + + Map waterMeter = new HashMap<>(); + waterMeter.put("on", voList.stream().filter(o -> o.getMeterType() == 2 && o.getCommunicationState() == 1).count()); + waterMeter.put("off", voList.stream().filter(o -> o.getMeterType() == 2 && o.getCommunicationState() == 0).count()); + + map.put("water", waterMeter); + map.put("power", powerMeter); + return R.ok(map); + } + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java index b6e41568..e372351d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java @@ -39,6 +39,16 @@ public class XServiceWorkOrdersController extends BaseController { return toAjax(serviceWorkOrdersService.insertOrderByXcx(bo)); } + /** + * 小程序新增【工单处理】 + */ + @PutMapping() + @SaCheckPermission("xcx:workOrders:edit") + @Log(title = "【小程序新增工单处理】", businessType = BusinessType.UPDATE) + public R edit(@Validated(AddGroup.class) @RequestBody ServiceWorkOrdersBo bo) { + return toAjax(serviceWorkOrdersService.updateOrderByXcx(bo)); + } + /** * 小程序查询【工单处理】 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java new file mode 100644 index 00000000..86c45e66 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java @@ -0,0 +1,41 @@ +package org.dromara.property.controller.xcx; + +import cn.hutool.core.util.ObjectUtil; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; +import org.dromara.system.api.RemoteDictService; +import org.dromara.system.api.domain.vo.RemoteDictDataVo; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lsm + * @apiNote XSystemController + * @since 2025/9/9 + */ +@RestController +@RequestMapping("/xcx/system") +public class XSystemController { + + @DubboReference + private RemoteDictService RemoteDictDataVo; + + /** + * 根据字典类型查询字典数据信息 + * + * @param dictType 字典类型 + */ + @GetMapping(value = "/type/{dictType}") + public R> dictType(@PathVariable String dictType) { + List data = RemoteDictDataVo.selectDictDataByType(dictType); + if (ObjectUtil.isNull(data)) { + data = new ArrayList<>(); + } + return R.ok(data); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java index 8471f476..5e6818f1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java @@ -58,5 +58,9 @@ public class ServiceWorkOrdersRecordVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 处理人名称 + */ + private String handleName; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java new file mode 100644 index 00000000..08bfae25 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java @@ -0,0 +1,22 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.vo.ServiceWorkOrdersRecordVo; + +import java.util.Collection; +import java.util.List; + +/** + * @author lsm + * @apiNote IServiceWorkOrdersRecordService + * @since 2025/9/9 + */ +public interface IServiceWorkOrdersRecordService { + + /** + * 通过工单id查询记录 + * + * @param ids 工单id + * @return list + */ + List queryListByOrderId(Collection ids); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java index ca0dcaf7..b8f74e69 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java @@ -74,16 +74,17 @@ public interface IServiceWorkOrdersService { /** * 工单服务看板 + * * @return */ ServiceWorkOrderAnalysisVo counts(); - //小程序端新增 /** * 新增工单 + * * @param bo * @return */ @@ -91,10 +92,12 @@ public interface IServiceWorkOrdersService { /** * 查询工单处理人枚举 + * * @param type * @return */ List> getServiceWorkOrdersHandler(String type); + /** * 分页查询【工单处理】列表 * @@ -112,6 +115,13 @@ public interface IServiceWorkOrdersService { */ Boolean insertOrderByXcx(ServiceWorkOrdersBo bo); + /** + * xcx更新工单详情 + * + * @param bo bean + * @return Boolean + */ + Boolean updateOrderByXcx(ServiceWorkOrdersBo bo); /** * xcx查询本人上报工单 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java new file mode 100644 index 00000000..a4558278 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java @@ -0,0 +1,39 @@ +package org.dromara.property.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.ServiceWorkOrdersRecord; +import org.dromara.property.domain.vo.ServiceWorkOrdersRecordVo; +import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; +import org.dromara.property.service.IServiceWorkOrdersRecordService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; + +/** + * @author lsm + * @apiNote ServiceWorkOrdersRecordImpl + * @since 2025/9/9 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ServiceWorkOrdersRecordImpl implements IServiceWorkOrdersRecordService { + + private final ServiceWorkOrdersRecordMapper baseMapper; + + /** + * 通过工单id查询记录 + * + * @param ids 工单id + * @return list + */ + @Override + public List queryListByOrderId(Collection ids) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(ServiceWorkOrdersRecord::getOrderId, ids); + return baseMapper.selectVoList(lqw); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index e54e1b34..b5d81de8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -22,6 +22,8 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.property.api.model.LoginResidentPerson; import org.dromara.property.domain.*; import org.dromara.property.domain.bo.ServiceWorkOrdersBo; +import org.dromara.property.domain.bo.ServiceWorkOrdersRecordBo; +import org.dromara.property.domain.bo.ServiceWorkOrdersTypeBo; import org.dromara.property.domain.bo.mobile.MServiceWorkOrdersBo; import org.dromara.property.domain.enums.OrderReportingTypeEnum; import org.dromara.property.domain.enums.OrderTypeOperationEnum; @@ -34,6 +36,7 @@ import org.dromara.property.mapper.ServiceWorkOrdersMapper; import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper; import org.dromara.property.mapper.attendanceMapper.AttendanceUserGroupMapper; +import org.dromara.property.service.IServiceWorkOrdersRecordService; import org.dromara.property.service.IServiceWorkOrdersService; import org.dromara.property.service.IServiceWorkOrdersTypeService; import org.dromara.system.api.RemoteUserService; @@ -68,6 +71,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { /******************************xcx**************************************/ private final IServiceWorkOrdersTypeService serviceWorkOrdersTypeService; + private final IServiceWorkOrdersRecordService serviceWorkOrdersRecordService; /** @@ -719,6 +723,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { Assert.notNull(typeVo, "工单类型不存在"); assert add != null; + add.setOrderName("工单名称"); add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr()); add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue()); add.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue()); @@ -745,6 +750,23 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { return flag; } + /** + * xcx更新工单详情 + * + * @param bo bean + * @return Boolean + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateOrderByXcx(ServiceWorkOrdersBo bo) { + ServiceWorkOrders update = MapstructUtils.convert(bo, ServiceWorkOrders.class); + Assert.notNull(update, "数据处理失败"); + + boolean flag = baseMapper.updateById(update) > 0; + Assert.isTrue(flag, "小程序修改工单信息失败"); + return flag; + } + /** * xcx查询本人上报工单 * @@ -759,7 +781,37 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { assert person != null; qw.like(ServiceWorkOrders::getInitiatorPeople, person.getNickname()) .orderByDesc(ServiceWorkOrders::getCreateTime); - return baseMapper.selectVoList(qw); + List ordersVos = baseMapper.selectVoList(qw); + if (CollUtil.isNotEmpty(ordersVos)) { + // 工单类型 + List typeVoLists = serviceWorkOrdersTypeService.queryList(new ServiceWorkOrdersTypeBo()); + + // 处理人 + List handlerIdList = ordersVos.stream().map(ServiceWorkOrdersVo::getHandler).distinct().toList(); + List remoteUserVos = remoteUserService.selectListByIds(handlerIdList); + + // 工单记录 + Collection orderIdList = ordersVos.stream().map(ServiceWorkOrdersVo::getId).toList(); + List recordVos = serviceWorkOrdersRecordService.queryListByOrderId(orderIdList); + + for (ServiceWorkOrdersVo item : ordersVos) { + // 工单类型 + typeVoLists.stream().filter(type -> type.getId().equals(item.getType())).findFirst().ifPresent(typeVo -> item.setTypeName(typeVo.getOrderTypeName())); + + // 处理人 + remoteUserVos.stream().filter(user -> user.getUserId().equals(item.getHandler())).findFirst().ifPresent(remoteUserVo -> item.setHandlerText(remoteUserVo.getNickName())); + + if (CollUtil.isNotEmpty(recordVos)) { + List mapRecordVos = recordVos.stream().filter(o -> item.getId() == Long.parseLong(o.getOrderId())).toList(); + List mRecordVos = BeanUtil.copyToList(mapRecordVos, MServiceWorkOrdersRecordVo.class); + mRecordVos.forEach(o -> { + o.setHandlerName(StringUtils.isNotBlank(item.getHandlerText()) ? item.getHandlerText() : null); + }); + item.setRecordVoList(mRecordVos); + } + } + } + return ordersVos; } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java index dff02dba..78f4a58c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java @@ -43,6 +43,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -239,10 +241,10 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { }).toList(); treeList.addAll(l3); + TbMeterInfoBo bo = new TbMeterInfoBo(); + bo.setMeterType(meterType); + List meterInfoVos = this.queryList(bo); if (isMeter) { - TbMeterInfoBo bo = new TbMeterInfoBo(); - bo.setMeterType(meterType); - List meterInfoVos = this.queryList(bo); if (meterInfoVos != null && !meterInfoVos.isEmpty()) { List> l4 = meterInfoVos.stream().map(item -> { TreeNode node = new TreeNode<>(); @@ -254,6 +256,13 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { }).toList(); treeList.addAll(l4); } + } else { + if (meterInfoVos != null && !meterInfoVos.isEmpty()) { + for (TreeNode node : l3) { + List vo = meterInfoVos.stream().filter(item -> item.getFloorId().equals(node.getCode())).toList(); + node.setLabel(node.getLabel() + "(" + vo.size() + ")"); + } + } } return TreeUtils.build(treeList, 0L); } @@ -299,8 +308,10 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { return; } + List sortedMeterInfoVoList = meterSort(meterInfoVoList); + // 获取唯一的主机IP列表 - String[] hostIpArr = meterInfoVoList.stream().map(TbMeterInfoVo::getHostIp).distinct().toArray(String[]::new); + String[] hostIpArr = sortedMeterInfoVoList.stream().map(TbMeterInfoVo::getHostIp).distinct().toArray(String[]::new); // 统计每个IP对应的仪表数量 Map ipCountMap = new HashMap<>(); @@ -319,13 +330,52 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { log.info("仪表数据获取耗时:{}ms", timeInterval.interval()); } catch (Exception e) { // 获取数据失败,设置所有仪表通信状态为0并发送消息 - handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, tokenValue); + handleMeterCommunicationFailure(user, jsonObject, sortedMeterInfoVoList, tokenValue); return; } // 处理仪表读数和状态 - processMeterResults(user, jsonObject, meterResults, meterInfoVoList, tokenValue); - }, 30000,300000); + processMeterResults(user, jsonObject, meterResults, sortedMeterInfoVoList, tokenValue); + }, 30000, 180000); + } + + /** + * 仪表排序 + * + * @param meterInfoVoList 仪表列表 + * @return List 返回排序后的仪表列表 + */ + private List meterSort(List meterInfoVoList) { + // 创建比较器 + Comparator comparator = (m1, m2) -> { + // 提取楼层和编号数值 + int[] parts1 = extractNumbers(m1.getMeterName()); + int[] parts2 = extractNumbers(m2.getMeterName()); + + // 先比较楼层 + if (parts1[0] != parts2[0]) { + return Integer.compare(parts1[0], parts2[0]); + } + // 楼层相同则比较编号 + return Integer.compare(parts1[1], parts2[1]); + }; + + return meterInfoVoList.stream().sorted(comparator).toList(); + } + + /** + * 从字符串提取数字(返回[楼层, 编号]) + * + * @param name 仪表名称 + * @return int[] + */ + private int[] extractNumbers(String name) { + Pattern pattern = Pattern.compile("(\\d+)楼电表(\\d+)号"); + Matcher matcher = pattern.matcher(name); + if (matcher.find()) { + return new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))}; + } + return new int[]{0, 0}; // 匹配失败时返回默认值 } /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index 5e917eab..0fe94eb6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo; +import org.dromara.property.domain.entity.smartDevices.TbMeterInfo; import org.dromara.property.domain.enums.MeterRecordTypeEnum; import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo; import org.dromara.property.rocketmq.domain.MeterResult; @@ -27,6 +29,7 @@ import org.dromara.property.service.smartDevicesService.ITbMeterRecordService; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -209,6 +212,14 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setCurrentReading(BigDecimal.ZERO); } + if (record.getCurrentReading().compareTo(BigDecimal.ZERO) == 0){ + // 通信状态改为离线 + TbMeterInfoBo bo = new TbMeterInfoBo(); + bo.setId(info.getId()); + bo.setCommunicationState(0L); + tbMeterInfoService.updateByBo(bo); + } + // 设置上次读数 if (hasOldRecords) { TbMeterRecord oldRecord = oldRecordMap.get(info.getId()); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisVisitorController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java similarity index 77% rename from ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisVisitorController.java rename to ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java index 01d34f98..c4e21d33 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisVisitorController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java @@ -4,11 +4,13 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.sdk.e8.E8PlatformApi; import org.dromara.sis.sdk.e8.domain.QueryDto; import org.dromara.sis.sdk.e8.domain.accessControl.req.AccessRecordFindReq; import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes; +import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author yuyongle @@ -25,14 +30,16 @@ import java.util.Date; @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/visitor") -public class SisVisitorController { +@RequestMapping("/e8") +public class E8Controller { private final E8PlatformApi e8PlatformApi; /** * 查询人员通行记录 + * + * @return tableDataInfo */ - @GetMapping("/list") + @GetMapping("/visitor/list") public TableDataInfo list(@RequestParam(required = false) String begTime, @RequestParam(required = false) String endTime, @NotNull(message = "页码不能为空") @RequestParam Integer pageNum, @@ -67,4 +74,18 @@ public class SisVisitorController { dto.setMaxResultCount(pageSize); return e8PlatformApi.getPageAccessRecordList(dto); } + + /** + * 查询门禁设备在线情况 + * + * @return Map + */ + @GetMapping("/door/online") + public R> doorOnline() { + List list = e8PlatformApi.getPageAuthDoorDeviceList(); + Map map = new HashMap<>(); + map.put("on", list.stream().filter(o -> o.getOnlineStatus() == 1).count()); + map.put("off", list.stream().filter(o -> o.getOnlineStatus() == 0).count()); + return R.ok(map); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java index f31ed593..ce98bf55 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java @@ -23,7 +23,9 @@ import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 设备管理 @@ -114,5 +116,17 @@ public class SisDeviceManageController extends BaseController { return R.ok(sisDeviceManageService.tree()); } - + /** + * 统计设备在线状态 + * + * @return map + */ + @GetMapping("/online") + public R> getOnlineStatus() { + List list = sisDeviceManageService.queryList(new SisDeviceManageBo()); + Map map = new HashMap<>(); + map.put("on", list.stream().filter(o -> o.getDeviceStatus() == 1).count()); + map.put("off", list.stream().filter(o -> o.getDeviceStatus() == 0).count()); + return R.ok(map); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java index f6190037..46c1aefe 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java @@ -61,6 +61,11 @@ public class SisDeviceManageVo implements Serializable { */ private Integer deviceType; + /** + * 设备在线状态 0:离线 1:在线 2:未知 + */ + private Integer deviceStatus; + /** * 设备类型 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java index 0f58f525..34844bf5 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java @@ -29,4 +29,9 @@ public class AuthDoorDeviceFindRes { * 门禁Id */ private Long deviceId; + + /** + * 门禁状态 + */ + private Integer onlineStatus; }