- 仪表、门禁、摄像头状态统计
- 仪表层级树显示每层仪表数 - 仪表概况调整排序 - 小程序端接口更改
This commit is contained in:
@@ -54,6 +54,7 @@ public class SaPermissionImpl implements StpInterface {
|
||||
"xcx:unit:query",
|
||||
// 工单管理
|
||||
"xcx:workOrders:add",
|
||||
"xcx:workOrders:edit",
|
||||
"xcx:workOrders:query",
|
||||
// 工单类型管理
|
||||
"xcx:workOrdersType:query",
|
||||
|
@@ -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<Map<String, Object>> getMeterStatus() {
|
||||
List<TbMeterInfoVo> voList = tbMeterInfoService.queryList(new TbMeterInfoBo());
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
||||
Map<String, Long> 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<String, Long> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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<Void> edit(@Validated(AddGroup.class) @RequestBody ServiceWorkOrdersBo bo) {
|
||||
return toAjax(serviceWorkOrdersService.updateOrderByXcx(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序查询【工单处理】
|
||||
*/
|
||||
|
@@ -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<List<RemoteDictDataVo>> dictType(@PathVariable String dictType) {
|
||||
List<RemoteDictDataVo> data = RemoteDictDataVo.selectDictDataByType(dictType);
|
||||
if (ObjectUtil.isNull(data)) {
|
||||
data = new ArrayList<>();
|
||||
}
|
||||
return R.ok(data);
|
||||
}
|
||||
}
|
@@ -58,5 +58,9 @@ public class ServiceWorkOrdersRecordVo implements Serializable {
|
||||
@ExcelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 处理人名称
|
||||
*/
|
||||
private String handleName;
|
||||
|
||||
}
|
||||
|
@@ -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<ServiceWorkOrdersRecordVo> queryListByOrderId(Collection<Long> ids);
|
||||
}
|
@@ -74,16 +74,17 @@ public interface IServiceWorkOrdersService {
|
||||
|
||||
/**
|
||||
* 工单服务看板
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
ServiceWorkOrderAnalysisVo counts();
|
||||
|
||||
|
||||
|
||||
//小程序端新增
|
||||
|
||||
/**
|
||||
* 新增工单
|
||||
*
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
@@ -91,10 +92,12 @@ public interface IServiceWorkOrdersService {
|
||||
|
||||
/**
|
||||
* 查询工单处理人枚举
|
||||
*
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
List<Map<Object, Object>> 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查询本人上报工单
|
||||
|
@@ -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<ServiceWorkOrdersRecordVo> queryListByOrderId(Collection<Long> ids) {
|
||||
LambdaQueryWrapper<ServiceWorkOrdersRecord> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.in(ServiceWorkOrdersRecord::getOrderId, ids);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
}
|
@@ -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<ServiceWorkOrdersVo> ordersVos = baseMapper.selectVoList(qw);
|
||||
if (CollUtil.isNotEmpty(ordersVos)) {
|
||||
// 工单类型
|
||||
List<ServiceWorkOrdersTypeVo> typeVoLists = serviceWorkOrdersTypeService.queryList(new ServiceWorkOrdersTypeBo());
|
||||
|
||||
// 处理人
|
||||
List<Long> handlerIdList = ordersVos.stream().map(ServiceWorkOrdersVo::getHandler).distinct().toList();
|
||||
List<RemoteUserVo> remoteUserVos = remoteUserService.selectListByIds(handlerIdList);
|
||||
|
||||
// 工单记录
|
||||
Collection<Long> orderIdList = ordersVos.stream().map(ServiceWorkOrdersVo::getId).toList();
|
||||
List<ServiceWorkOrdersRecordVo> 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<ServiceWorkOrdersRecordVo> mapRecordVos = recordVos.stream().filter(o -> item.getId() == Long.parseLong(o.getOrderId())).toList();
|
||||
List<MServiceWorkOrdersRecordVo> mRecordVos = BeanUtil.copyToList(mapRecordVos, MServiceWorkOrdersRecordVo.class);
|
||||
mRecordVos.forEach(o -> {
|
||||
o.setHandlerName(StringUtils.isNotBlank(item.getHandlerText()) ? item.getHandlerText() : null);
|
||||
});
|
||||
item.setRecordVoList(mRecordVos);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ordersVos;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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<TbMeterInfoVo> meterInfoVos = this.queryList(bo);
|
||||
if (isMeter) {
|
||||
TbMeterInfoBo bo = new TbMeterInfoBo();
|
||||
bo.setMeterType(meterType);
|
||||
List<TbMeterInfoVo> meterInfoVos = this.queryList(bo);
|
||||
if (meterInfoVos != null && !meterInfoVos.isEmpty()) {
|
||||
List<TreeNode<Long>> l4 = meterInfoVos.stream().map(item -> {
|
||||
TreeNode<Long> node = new TreeNode<>();
|
||||
@@ -254,6 +256,13 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
|
||||
}).toList();
|
||||
treeList.addAll(l4);
|
||||
}
|
||||
} else {
|
||||
if (meterInfoVos != null && !meterInfoVos.isEmpty()) {
|
||||
for (TreeNode<Long> node : l3) {
|
||||
List<TbMeterInfoVo> 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<TbMeterInfoVo> 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<String, Long> 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<TbMeterInfoVo> 返回排序后的仪表列表
|
||||
*/
|
||||
private List<TbMeterInfoVo> meterSort(List<TbMeterInfoVo> meterInfoVoList) {
|
||||
// 创建比较器
|
||||
Comparator<TbMeterInfoVo> 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}; // 匹配失败时返回默认值
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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());
|
||||
|
@@ -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<AccessRecordFindRes> 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<Map<String, Long>> doorOnline() {
|
||||
List<AuthDoorDeviceFindRes> list = e8PlatformApi.getPageAuthDoorDeviceList();
|
||||
Map<String, Long> 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);
|
||||
}
|
||||
}
|
@@ -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<Map<String, Long>> getOnlineStatus() {
|
||||
List<SisDeviceManageVo> list = sisDeviceManageService.queryList(new SisDeviceManageBo());
|
||||
Map<String, Long> 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);
|
||||
}
|
||||
}
|
||||
|
@@ -61,6 +61,11 @@ public class SisDeviceManageVo implements Serializable {
|
||||
*/
|
||||
private Integer deviceType;
|
||||
|
||||
/**
|
||||
* 设备在线状态 0:离线 1:在线 2:未知
|
||||
*/
|
||||
private Integer deviceStatus;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
|
@@ -29,4 +29,9 @@ public class AuthDoorDeviceFindRes {
|
||||
* 门禁Id
|
||||
*/
|
||||
private Long deviceId;
|
||||
|
||||
/**
|
||||
* 门禁状态
|
||||
*/
|
||||
private Integer onlineStatus;
|
||||
}
|
||||
|
Reference in New Issue
Block a user