Bladeren bron

yinruoxi:

新增:
1.Dashboard接口开发
2.每日获取设备在线状态定时任务开发
tags/v0.8.5^2
kira 2 jaren geleden
bovenliggende
commit
c1737b1c5f
9 gewijzigde bestanden met toevoegingen van 148 en 0 verwijderingen
  1. +22
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/vo/DashboardVo.java
  2. +20
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/vo/NumberOfOnlineToChartVo.java
  3. +3
    -0
      xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/feign/RemoteManDeviceService.java
  4. +7
    -0
      xueyi-common/xueyi-common-core/src/main/java/com/xueyi/common/core/constant/digitalman/RedisDefinitionConstants.java
  5. +8
    -0
      xueyi-modules/xueyi-job/src/main/java/com/xueyi/job/task/DgmanTask.java
  6. +9
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmDigitalmanController.java
  7. +40
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmManDeviceController.java
  8. +3
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/IDmManDeviceService.java
  9. +36
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/impl/DmManDeviceServiceImpl.java

+ 22
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/vo/DashboardVo.java Bestand weergeven

@@ -0,0 +1,22 @@
package com.xueyi.system.api.digitalmans.domain.vo;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;

@Data
@NoArgsConstructor
public class DashboardVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

/**
* 数字人数
*/
private Integer digitalMans;
private Integer onlineDevices;
private Integer AlertNear7Days;
private Integer onProcessAlert;
}

+ 20
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/domain/vo/NumberOfOnlineToChartVo.java Bestand weergeven

@@ -0,0 +1,20 @@
package com.xueyi.system.api.digitalmans.domain.vo;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;

@Data
@NoArgsConstructor
public class NumberOfOnlineToChartVo implements Serializable {

@Serial
private static final long serialVersionUID = 1L;

private String numberOfOnline;

private String date;

}

+ 3
- 0
xueyi-api/xueyi-api-system/src/main/java/com/xueyi/system/api/digitalmans/feign/RemoteManDeviceService.java Bestand weergeven

@@ -35,4 +35,7 @@ public interface RemoteManDeviceService {
@PutMapping(value = "/manDevice/inner/info")
R<Integer> manDeviceInfoInnerUpdate(@RequestBody DmActiveVo vo);

@PostMapping(value = "/manDevice/inner/sync_numbers_of_online")
R<Integer> syncNumbersOfOnline();

}

+ 7
- 0
xueyi-common/xueyi-common-core/src/main/java/com/xueyi/common/core/constant/digitalman/RedisDefinitionConstants.java Bestand weergeven

@@ -0,0 +1,7 @@
package com.xueyi.common.core.constant.digitalman;

public class RedisDefinitionConstants {

/** 通用-当前在线数(List) */
public static final String GENERAL_CURRENT_NUMBER_OF_ONLINE = "general:current_number_of_online";
}

+ 8
- 0
xueyi-modules/xueyi-job/src/main/java/com/xueyi/job/task/DgmanTask.java Bestand weergeven

@@ -45,4 +45,12 @@ public class DgmanTask {
});
System.out.println("监控心跳执行完成");
}

/**
* 触发条件:0 0 10 * * *
* 每日十点触发,收集当前在线数
*/
public void dgmanDeviceOnlineState() {
remoteManDeviceService.syncNumbersOfOnline();
}
}

+ 9
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmDigitalmanController.java Bestand weergeven

@@ -3,6 +3,7 @@ package com.xueyi.system.digitalmans.controller;
import com.xueyi.common.core.constant.basic.BaseConstants;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.constant.digitalman.InitConstants;
import com.xueyi.common.core.constant.digitalman.MessageConstants;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.core.web.result.R;
import com.xueyi.common.core.web.validate.V_A;
@@ -31,6 +32,7 @@ import com.xueyi.system.digitalmans.service.IDmDigitalmanService;
import com.xueyi.system.digitalmans.service.IDmModelService;
import com.xueyi.system.digitalmans.service.IDmSkillService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@@ -61,6 +63,9 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
@Autowired
private RemoteTransferService remoteTransferService;

@Autowired
private RedisTemplate<String, Serializable> redisTemplate;

/** 定义节点名称 */
@Override
protected String getNodeName() {
@@ -93,6 +98,10 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
if (extList != null && extList.size() > 0) {
extList.get(0).setIsOnline(Integer.parseInt(ar.get("msg").toString()));
dmDigitalmanExtService.update(extList.get(0));
// 更新缓存
DmManDeviceDto redisDto = (DmManDeviceDto)redisTemplate.opsForHash().get(MessageConstants.REDIS_GROUP_DEVICE_HEADER,item.getDeviceId());
redisDto.setOnlineStatus(ar.get("msg").toString());
redisTemplate.opsForHash().putIfAbsent(MessageConstants.REDIS_GROUP_DEVICE_HEADER,item.getDeviceId(),redisDto);
}
});
return R.ok();


+ 40
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmManDeviceController.java Bestand weergeven

@@ -3,6 +3,7 @@ package com.xueyi.system.digitalmans.controller;
import com.xueyi.common.cache.utils.SourceUtil;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.constant.digitalman.InitConstants;
import com.xueyi.common.core.constant.digitalman.MessageConstants;
import com.xueyi.common.core.utils.core.IdUtil;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.core.web.result.R;
@@ -17,6 +18,7 @@ import com.xueyi.message.api.transfer.domain.vo.DmActiveVo;
import com.xueyi.message.api.transfer.feign.RemoteTransferService;
import com.xueyi.system.api.device.domain.dto.DmDeviceTenantMergeDto;
import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto;
import com.xueyi.system.api.digitalmans.domain.vo.NumberOfOnlineToChartVo;
import com.xueyi.system.api.digitalmans.feign.RemoteDigitalmanService;
import com.xueyi.system.api.model.Source;
import com.xueyi.system.api.organize.domain.dto.SysEnterpriseDto;
@@ -26,8 +28,11 @@ import com.xueyi.system.digitalmans.domain.query.DmManDeviceQuery;
import com.xueyi.system.digitalmans.service.IDmDigitalmanExtService;
import com.xueyi.system.digitalmans.service.IDmDigitalmanService;
import com.xueyi.system.digitalmans.service.IDmManDeviceService;
import com.xueyi.system.emcs.domain.query.DmExceptionLogQuery;
import com.xueyi.system.emcs.service.IDmExceptionLogService;
import com.xueyi.system.organize.service.ISysEnterpriseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -38,9 +43,13 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import static com.xueyi.common.core.constant.digitalman.RedisDefinitionConstants.GENERAL_CURRENT_NUMBER_OF_ONLINE;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* 数字人设备管理管理 业务处理
@@ -72,6 +81,12 @@ public class DmManDeviceController extends BaseController<DmManDeviceQuery, DmMa
@Autowired
RemoteTransferService remoteTransferService;

@Autowired
RedisTemplate<String,Serializable> redisTemplate;

@Autowired
IDmExceptionLogService dmExceptionLogService;



/** 定义节点名称 */
@@ -108,6 +123,24 @@ public class DmManDeviceController extends BaseController<DmManDeviceQuery, DmMa
R<Integer> manDeviceInfoInnerUpdate(@RequestBody DmActiveVo vo) {
return R.ok(super.baseService.manDeviceInfoInnerUpdate(vo));
}
@PostMapping(value = "/inner/sync_numbers_of_online")
R<Integer> syncNumbersOfOnline() {
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd");
List<Object> manDeviceDtos = (List<Object>)redisTemplate.opsForHash().values(MessageConstants.REDIS_GROUP_DEVICE_HEADER);
Long total = manDeviceDtos.stream().filter(item->(!((DmManDeviceDto)item).getOnlineStatus().isEmpty()) &&
((DmManDeviceDto)item).getOnlineStatus().equalsIgnoreCase("1")).count();
NumberOfOnlineToChartVo vo = new NumberOfOnlineToChartVo();
vo.setNumberOfOnline(total.toString());
vo.setDate(currentDate.format(formatter));
// 获取当前日期并将数据同步到redis
redisTemplate.opsForList().leftPush(GENERAL_CURRENT_NUMBER_OF_ONLINE,vo);
if (redisTemplate.opsForList().size(GENERAL_CURRENT_NUMBER_OF_ONLINE) > 150) {
redisTemplate.opsForList().rightPop(GENERAL_CURRENT_NUMBER_OF_ONLINE,1, TimeUnit.MINUTES);
}

return R.ok(Integer.parseInt(vo.getNumberOfOnline()));
}
/**
* 查询数字人设备管理列表
*/
@@ -190,6 +223,13 @@ public class DmManDeviceController extends BaseController<DmManDeviceQuery, DmMa
return super.batchRemove(idList);
}


@GetMapping("/dashboard_data")
@RequiresPermissions(Auth.DM_MAN_DEVICE_LIST)
public AjaxResult dashboardData() {
return AjaxResult.success(super.baseService.dashboardData());
}

/**
* 获取数字人设备管理选择框列表
*/


+ 3
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/IDmManDeviceService.java Bestand weergeven

@@ -4,6 +4,7 @@ import com.xueyi.common.web.entity.service.IBaseService;
import com.xueyi.message.api.transfer.domain.vo.DmActiveVo;
import com.xueyi.system.api.digitalmans.domain.po.DmManDevicePo;
import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto;
import com.xueyi.system.api.digitalmans.domain.vo.DashboardVo;
import com.xueyi.system.digitalmans.domain.query.DmManDeviceQuery;

import java.util.List;
@@ -19,4 +20,6 @@ public interface IDmManDeviceService extends IBaseService<DmManDeviceQuery, DmMa

List<DmManDeviceDto> manDeviceListNotNullByTenantId(Long tenantId);
DmManDevicePo getOne(String devId);

DashboardVo dashboardData();
}

+ 36
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/service/impl/DmManDeviceServiceImpl.java Bestand weergeven

@@ -1,5 +1,6 @@
package com.xueyi.system.digitalmans.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.Page;
import com.xueyi.common.core.constant.digitalman.InitConstants;
import com.xueyi.common.core.constant.digitalman.MessageConstants;
@@ -12,16 +13,23 @@ import com.xueyi.message.api.transfer.domain.vo.DmDeviceVo;
import com.xueyi.message.api.transfer.feign.RemoteTransferService;
import com.xueyi.system.api.digitalmans.domain.po.DmManDevicePo;
import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto;
import com.xueyi.system.api.digitalmans.domain.vo.DashboardVo;
import com.xueyi.system.digitalmans.domain.query.DmManDeviceQuery;
import com.xueyi.system.digitalmans.manager.IDmManDeviceManager;
import com.xueyi.system.digitalmans.mapper.DmManDeviceMapper;
import com.xueyi.system.digitalmans.service.IDmManDeviceService;
import com.xueyi.system.emcs.domain.po.DmExceptionLogPo;
import com.xueyi.system.emcs.domain.query.DmExceptionLogQuery;
import com.xueyi.system.emcs.mapper.DmExceptionLogMapper;
import com.xueyi.system.resource.service.IDmResourcesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
@@ -46,6 +54,8 @@ public class DmManDeviceServiceImpl extends BaseServiceImpl<DmManDeviceQuery, Dm
@Autowired
RedisTemplate<String, Serializable> manDeviceDtoRedisTemplate;

@Autowired
DmExceptionLogMapper exceptionLogMapper;

/**
* 查询数字人设备管理对象列表 | 数据权限
@@ -114,4 +124,30 @@ public class DmManDeviceServiceImpl extends BaseServiceImpl<DmManDeviceQuery, Dm
public List<DmManDeviceDto> manDeviceListNotNullByTenantId(Long tenantId) {
return super.baseManager.selectManDeviceListNotNullByTenantId(tenantId);
}

@Override
public DashboardVo dashboardData() {
DashboardVo vo = new DashboardVo();

List<DmManDeviceDto> manDeviceDtoList = this.selectList(new DmManDeviceQuery());
// 获取数字员工总数
vo.setDigitalMans(manDeviceDtoList.size());
// 获取当前在线率
Long total = manDeviceDtoList.stream().count();
Long onlineTotal = manDeviceDtoList.stream().filter(item->(!((DmManDeviceDto)item).getOnlineStatus().isEmpty()) &&
((DmManDeviceDto)item).getOnlineStatus().equalsIgnoreCase("1")).count();
int percent = total == 0?0 : (int)(onlineTotal/total);
vo.setOnlineDevices(percent);
// 近七天预警
LocalDateTime currentDate = LocalDateTime.now();
LocalDateTime sevenDaysAgo =currentDate.minusDays(7).withHour(0).withMinute(0).withSecond(0);

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
vo.setAlertNear7Days(exceptionLogMapper.selectList(Wrappers.<DmExceptionLogPo>query().lambda()
.ge(DmExceptionLogPo::getCreateTime,sevenDaysAgo.format(formatter))).size());
// 当前未解除预警数
vo.setOnProcessAlert(exceptionLogMapper.selectList(Wrappers.<DmExceptionLogPo>query().lambda()
.eq(DmExceptionLogPo::getAlertStatus,0)).size());
return vo;
}
}

Laden…
Annuleren
Opslaan