Commit 367cf61e689099189b11cdf91810c548c8cab2dc

Authored by xp.Huang
2 parents d3bd8f23 6e4cb18b

Merge branch '20220424' into 'master'

refactor: 第三方平台用户绑定和解绑接口逻辑优化

See merge request huang/thingsboard3.3.2!85
... ... @@ -3,7 +3,6 @@ package org.thingsboard.server.controller.yunteng;
3 3 import io.swagger.annotations.Api;
4 4 import io.swagger.annotations.ApiOperation;
5 5 import lombok.RequiredArgsConstructor;
6   -import org.apache.commons.lang3.StringUtils;
7 6 import org.springframework.http.ResponseEntity;
8 7 import org.springframework.security.access.prepost.PreAuthorize;
9 8 import org.springframework.web.bind.annotation.GetMapping;
... ... @@ -11,8 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
11 10 import org.springframework.web.bind.annotation.RequestParam;
12 11 import org.springframework.web.bind.annotation.RestController;
13 12 import org.thingsboard.server.common.data.EntityType;
14   -import org.thingsboard.server.common.data.alarm.Alarm;
15   -import org.thingsboard.server.common.data.alarm.AlarmInfo;
  13 +import org.thingsboard.server.common.data.alarm.AlarmSeverity;
16 14 import org.thingsboard.server.common.data.alarm.AlarmStatus;
17 15 import org.thingsboard.server.common.data.exception.ThingsboardException;
18 16 import org.thingsboard.server.common.data.page.TimePageLink;
... ... @@ -24,7 +22,9 @@ import org.thingsboard.server.controller.BaseController;
24 22 import org.thingsboard.server.dao.yunteng.entities.YtAlarmEntity;
25 23 import org.thingsboard.server.dao.yunteng.service.YtAlarmInfoService;
26 24
27   -import java.util.*;
  25 +import java.util.HashMap;
  26 +import java.util.List;
  27 +import java.util.Map;
28 28
29 29 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
30 30
... ... @@ -44,7 +44,7 @@ public class YtAlarmInfoController extends BaseController {
44 44
45 45 //分页测试通过
46 46 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
47   - @ApiOperation(value="查询")
  47 + @ApiOperation(value = "查询")
48 48 @GetMapping(params = {PAGE_SIZE, PAGE})
49 49 public YtPageData<YtAlarmEntity> pageAlarmInfo(
50 50 @RequestParam(PAGE_SIZE) int pageSize,
... ... @@ -52,6 +52,7 @@ public class YtAlarmInfoController extends BaseController {
52 52 @RequestParam(value = "status", required = false) List<AlarmStatus> status,
53 53 @RequestParam(value = "textSearch", required = false) String textSearch,
54 54 @RequestParam(value = "alarmType", required = false) String alarmType,
  55 + @RequestParam(value = "severity", required = false) AlarmSeverity severity,
55 56 @RequestParam(value = "organizationId", required = false) String organizationId,
56 57 @RequestParam(value = "deviceId", required = false) String deviceId,
57 58 @RequestParam(value = "deviceType", required = false) DeviceTypeEnum deviceType,
... ... @@ -67,12 +68,11 @@ public class YtAlarmInfoController extends BaseController {
67 68 if (orderType != null) {
68 69 pageFilter.put(ORDER_TYPE, orderType.name());
69 70 }
70   - return alarmInfoService.alarmPage(pageFilter,getCurrentUser().getTenantId(),alarmType,startTime,endTime,status,deviceId,deviceType, EntityType.DEVICE,organizationId);
  71 + return alarmInfoService.alarmPage(pageFilter, getCurrentUser().getTenantId(), severity,alarmType, startTime, endTime, status, deviceId, deviceType, EntityType.DEVICE, organizationId);
71 72 }
72 73
73 74
74   -
75   - @ApiOperation(value="告警类型")
  75 + @ApiOperation(value = "告警类型")
76 76 @GetMapping()
77 77 public ResponseEntity<List<SysDictDTO>> alarmType() throws ThingsboardException {
78 78 List result = alarmInfoService.alarmType(getCurrentUser().getTenantId());
... ... @@ -80,5 +80,4 @@ public class YtAlarmInfoController extends BaseController {
80 80 }
81 81
82 82
83   -
84 83 }
... ...
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import io.swagger.annotations.Api;
  5 +import io.swagger.annotations.ApiOperation;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.springframework.web.bind.annotation.GetMapping;
  8 +import org.springframework.web.bind.annotation.RequestMapping;
  9 +import org.springframework.web.bind.annotation.RequestParam;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  12 +import org.thingsboard.server.common.data.id.DeviceId;
  13 +import org.thingsboard.server.common.data.id.EntityId;
  14 +import org.thingsboard.server.common.data.rpc.RpcStatus;
  15 +import org.thingsboard.server.common.data.yunteng.dto.YtRpcRecordDTO;
  16 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  17 +import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  18 +import org.thingsboard.server.controller.BaseController;
  19 +import org.thingsboard.server.dao.yunteng.entities.YtRpcRecordEntity;
  20 +import org.thingsboard.server.dao.yunteng.service.YtRpcRecordService;
  21 +
  22 +import java.util.UUID;
  23 +
  24 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  25 +
  26 +/**
  27 + * @author Administrator
  28 + */
  29 +@RestController
  30 +@RequestMapping("api/yt/rpc")
  31 +@Api(tags = {"命令下发记录"})
  32 +@RequiredArgsConstructor
  33 +public class YtRpcRecordController extends BaseController {
  34 + private final YtRpcRecordService recordService;
  35 +
  36 + @GetMapping(params = {PAGE_SIZE, PAGE})
  37 + @ApiOperation("分页")
  38 + public YtPageData<YtRpcRecordDTO> pageAlarmProfile(
  39 + @RequestParam(PAGE_SIZE) int pageSize,
  40 + @RequestParam(PAGE) int page,
  41 + @RequestParam(value = "status", required = false) RpcStatus status,
  42 + @RequestParam(value = "name", required = false) String name,
  43 + @RequestParam(value = "tbDeviceId", required = false) String tbDeviceId,
  44 +// @RequestParam(value = "oneway", required = false) Boolean oneway,
  45 + @RequestParam(value = "organizationId", required = false) String organizationId,
  46 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  47 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  48 + throws ThingsboardException {
  49 +
  50 +
  51 + IPage<YtRpcRecordEntity> pageInfrom = recordService.getPage(page, pageSize, orderBy, orderType);
  52 + return recordService.pageDatas(pageInfrom, getCurrentUser().getCurrentTenantId(), tbDeviceId,null, status, organizationId, name);
  53 + }
  54 +
  55 +
  56 +}
... ...
... ... @@ -65,16 +65,15 @@ public class YtThirdPlatformController extends BaseController {
65 65 @ApiOperation("绑定")
66 66 public JwtTokenPair saveOrUpdateAlarmProfile(
67 67 @Validated @RequestBody YtThirdUserDTO dto) throws ThingsboardException {
68   - UserDTO userDto = thirdService.saveOrUpdate(dto);
  68 + UserDTO userDto = thirdService.bindUser(dto);
69 69 return buildJwtToken(userDto);
70 70 }
71 71
72 72 @DeleteMapping
73   - @ApiOperation("删除")
74   - public boolean deleteAlarmProfile(@Validated(DeleteGroup.class) @RequestBody DeleteDTO deleteDTO)
  73 + @ApiOperation("解绑")
  74 + public boolean deleteAlarmProfile(@Validated(DeleteGroup.class) @RequestBody YtThirdUserDTO dto)
75 75 throws ThingsboardException {
76   - deleteDTO.setTenantId(getCurrentUser().getCurrentTenantId());
77   - return thirdService.deleteDataByIds(deleteDTO);
  76 + return thirdService.unbindUser(getCurrentUser().getCurrentTenantId(), dto.getAppUserId(),dto.getThirdUserId());
78 77 }
79 78
80 79 @GetMapping("login/{thirdId}")
... ...
... ... @@ -59,7 +59,8 @@ public enum ErrorMessage {
59 59 DEVICE_LOSED(400039,"设备相关参数丢失"),
60 60 SCENE_REACT_NOT_EXTIED(400040,"场景联动不存在"),
61 61 DEVICE_USED_SCENE_REACT(400041,"场景联动【%s】正在使用该设备"),
62   - SCENE_REACT_USED_ALARM_PROFILE(400041,"场景联动正在使用该告警配置"),
  62 + SCENE_REACT_USED_ALARM_PROFILE(400042,"场景联动正在使用该告警配置"),
  63 + APP_USER_BINDED(400043,"账号【%s】已绑定"),
63 64 HAVE_NO_PERMISSION(500002,"没有修改权限");
64 65 private final int code;
65 66 private String message;
... ...
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.fasterxml.jackson.databind.JsonNode;
  5 +import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  6 +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
  7 +import io.swagger.annotations.ApiModelProperty;
  8 +import lombok.Data;
  9 +import lombok.EqualsAndHashCode;
  10 +import org.thingsboard.server.common.data.TenantProfile;
  11 +import org.thingsboard.server.common.data.rpc.RpcStatus;
  12 +import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum;
  13 +import org.thingsboard.server.common.data.yunteng.enums.LoginMethodEnum;
  14 +import org.thingsboard.server.common.data.yunteng.enums.ThirdPlatformEnum;
  15 +
  16 +import javax.validation.constraints.NotEmpty;
  17 +import java.time.LocalDateTime;
  18 +
  19 +/**
  20 + * @author Administrator
  21 + */
  22 +@Data
  23 +public class YtRpcRecordDTO {
  24 + private String id;
  25 +
  26 + @ApiModelProperty(value = "设备主键")
  27 + private String deviceId;
  28 + private String deviceName;
  29 + private String tbDeviceId;
  30 + @ApiModelProperty(value = "设备类型:GATEWAY,DIRECT_CONNECTION,SENSOR")
  31 + private DeviceTypeEnum deviceType;
  32 + private String deviceSn;
  33 +
  34 +
  35 + @ApiModelProperty(value = "设备组织ID")
  36 + private String organizationId;
  37 + @ApiModelProperty(value = "设备组织名称")
  38 + private String organizationName;
  39 +
  40 + @ApiModelProperty(value = "租户ID")
  41 + private String tenantId;
  42 + @ApiModelProperty(value = "租户名称")
  43 + private String tenantName;
  44 +
  45 +
  46 + private Long createTime;
  47 + private Long expirationTime;
  48 +
  49 + @ApiModelProperty(value = "RPC请求内容")
  50 + private JsonNode request;
  51 +
  52 + @ApiModelProperty(value = "RPC响应内容")
  53 + private JsonNode response;
  54 + @ApiModelProperty(value = "RPC扩展信息")
  55 + private JsonNode additionalInfo;
  56 + @ApiModelProperty(value = "RPC状态")
  57 + private RpcStatus status;
  58 +
  59 +
  60 +
  61 +
  62 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableField;
  4 +import com.baomidou.mybatisplus.annotation.TableName;
  5 +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
  6 +import com.fasterxml.jackson.databind.JsonNode;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +import org.apache.ibatis.type.EnumTypeHandler;
  10 +import org.hibernate.annotations.Type;
  11 +import org.thingsboard.server.common.data.rpc.RpcStatus;
  12 +import org.thingsboard.server.common.data.yunteng.enums.ThirdPlatformEnum;
  13 +import org.thingsboard.server.dao.model.ModelConstants;
  14 +
  15 +import javax.persistence.Column;
  16 +import javax.persistence.EnumType;
  17 +import javax.persistence.Enumerated;
  18 +import java.util.UUID;
  19 +
  20 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  21 +
  22 +/**
  23 + * @author Administrator
  24 + */
  25 +@Data
  26 +@EqualsAndHashCode(callSuper = true)
  27 +@TableName(ModelConstants.RPC_TABLE_NAME)
  28 +public class YtRpcRecordEntity extends TenantBaseEntity {
  29 +
  30 + private String deviceId;
  31 +
  32 + private long expirationTime;
  33 +
  34 + @TableField(typeHandler = JacksonTypeHandler.class)
  35 + private JsonNode request;
  36 + @TableField(typeHandler = JacksonTypeHandler.class)
  37 + private JsonNode response;
  38 + @TableField(typeHandler = JacksonTypeHandler.class)
  39 + private JsonNode additionalInfo;
  40 +
  41 + @TableField(typeHandler = EnumTypeHandler.class)
  42 + private RpcStatus status;
  43 +
  44 +
  45 +}
... ...
... ... @@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
9 9 import org.springframework.stereotype.Service;
10 10 import org.thingsboard.server.common.data.EntityType;
11 11 import org.thingsboard.server.common.data.alarm.AlarmInfo;
  12 +import org.thingsboard.server.common.data.alarm.AlarmSeverity;
12 13 import org.thingsboard.server.common.data.alarm.AlarmStatus;
13 14 import org.thingsboard.server.common.data.id.TenantId;
14 15 import org.thingsboard.server.common.data.page.PageData;
... ... @@ -42,7 +43,7 @@ public class YtAlarmInfoServiceImpl implements YtAlarmInfoService {
42 43 private final YtAlarmMapper ytJpaAarmDao;
43 44 private final OrganizationMapper organizationMapper;
44 45 @Override
45   - public YtPageData<YtAlarmEntity> alarmPage(Map<String, Object> pageMap, TenantId tenantId, String alarmType, Long startTime, Long endTime, List<AlarmStatus> status, String deviceId, DeviceTypeEnum deviceType, EntityType originatorType, String organizationId) {
  46 + public YtPageData<YtAlarmEntity> alarmPage(Map<String, Object> pageMap, TenantId tenantId, AlarmSeverity severity, String alarmType, Long startTime, Long endTime, List<AlarmStatus> status, String deviceId, DeviceTypeEnum deviceType, EntityType originatorType, String organizationId) {
46 47 IPage<YtAlarmEntity> page= getPage(pageMap, ModelConstants.CREATED_TIME_PROPERTY,false);
47 48 List<String> ids =new ArrayList<>();
48 49 if(StringUtils.isNotBlank(organizationId)){
... ... @@ -55,7 +56,7 @@ private final OrganizationMapper organizationMapper;
55 56
56 57 }
57 58
58   - IPage<YtAlarmEntity> tbDatas = ytJpaAarmDao.alarmPage(page,tenantId.getId(),alarmType,startTime,endTime,status,deviceId,deviceType, originatorType,ids.size()>0?ids:null);
  59 + IPage<YtAlarmEntity> tbDatas = ytJpaAarmDao.alarmPage(page,tenantId.getId(),severity,alarmType,startTime,endTime,status,deviceId,deviceType, originatorType,ids.size()>0?ids:null);
59 60 YtPageData<YtAlarmEntity> result = new YtPageData<>(tbDatas.getRecords(), tbDatas.getTotal());
60 61 return result;
61 62 }
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.thingsboard.server.common.data.StringUtils;
  8 +import org.thingsboard.server.common.data.id.DeviceId;
  9 +import org.thingsboard.server.common.data.id.EntityId;
  10 +import org.thingsboard.server.common.data.id.TenantId;
  11 +import org.thingsboard.server.common.data.rpc.RpcStatus;
  12 +import org.thingsboard.server.common.data.yunteng.dto.YtRpcRecordDTO;
  13 +import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  14 +import org.thingsboard.server.dao.yunteng.entities.YtRpcRecordEntity;
  15 +import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
  16 +import org.thingsboard.server.dao.yunteng.mapper.YtRpcRecordMapper;
  17 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  18 +import org.thingsboard.server.dao.yunteng.service.YtRpcRecordService;
  19 +
  20 +import java.util.ArrayList;
  21 +import java.util.List;
  22 +import java.util.UUID;
  23 +import java.util.stream.Collectors;
  24 +
  25 +/**
  26 + * @author Administrator
  27 + */
  28 +@Slf4j
  29 +@Service
  30 +@RequiredArgsConstructor
  31 +public class YtRpcRecordServiceImpl extends AbstractBaseService<YtRpcRecordMapper, YtRpcRecordEntity>
  32 + implements YtRpcRecordService {
  33 +
  34 +
  35 + private final OrganizationMapper organizationMapper;
  36 +
  37 + @Override
  38 + public YtPageData<YtRpcRecordDTO> pageDatas(IPage<YtRpcRecordEntity> pageInfrom, String tenantId, String deviceId, Boolean oneway, RpcStatus status, String organizationId, String name) {
  39 + List<String> organization = null;
  40 + if (StringUtils.isNotEmpty(organizationId)) {
  41 + List<String> organizationFilter = new ArrayList<>();
  42 + organizationFilter.add(organizationId);
  43 + organization = organizationMapper.findOrganizationTreeList(tenantId, organizationFilter).stream().map(org -> org.getId()).collect(Collectors.toList());
  44 + }
  45 +
  46 + IPage<YtRpcRecordDTO> page = baseMapper.getPageDatas(pageInfrom, tenantId, deviceId,name, status, organization, null);
  47 + return getPageData(page, YtRpcRecordDTO.class);
  48 + }
  49 +
  50 +
  51 +}
... ...
... ... @@ -60,7 +60,7 @@ public class YtThirdPlatformServiceImpl extends AbstractBaseService<YtThirdPlatf
60 60
61 61 @Override
62 62 @Transactional(rollbackFor = Exception.class)
63   - public UserDTO saveOrUpdate(YtThirdUserDTO dto) {
  63 + public UserDTO bindUser(YtThirdUserDTO dto) {
64 64 User user = null;
65 65 switch (dto.getLoginMethod()) {
66 66 case PHONE:
... ... @@ -73,21 +73,21 @@ public class YtThirdPlatformServiceImpl extends AbstractBaseService<YtThirdPlatf
73 73 if (user == null) {
74 74 throw new YtDataValidationException(ErrorMessage.USER_NOT_EXISTS.getMessage());
75 75 }
  76 +
  77 + Wrapper filter = new QueryWrapper<YtThirdUserEntity>().lambda()
  78 + .eq(YtThirdUserEntity::getAppUserId, user.getId());
  79 + YtThirdUserEntity oldBind = baseMapper.selectOne(filter);
  80 + if(oldBind != null){
  81 + throw new YtDataValidationException(String.format(ErrorMessage.APP_USER_BINDED.getMessage(),user.getUsername()));
  82 + }
  83 +
76 84 if (StringUtils.isEmpty(user.getAvatar()) && StringUtils.isNotEmpty(dto.getAvatarUrl())) {
77 85 user.setAvatar(dto.getAvatarUrl());
78 86 userMapper.updateById(user);
79 87 }
80 88 dto.setAppUserId(user.getId());
  89 + baseMapper.insert(dto.getEntity(YtThirdUserEntity.class));
81 90
82   - Wrapper filter = new QueryWrapper<YtThirdUserEntity>().lambda()
83   - .eq(YtThirdUserEntity::getThirdUserId, dto.getThirdUserId());
84   - YtThirdUserEntity oldVideo = baseMapper.selectOne(filter);
85   - if (null == oldVideo) {
86   - baseMapper.insert(dto.getEntity(YtThirdUserEntity.class));
87   - } else {
88   - dto.setId(oldVideo.getId());
89   - baseMapper.updateById(dto.getEntity(YtThirdUserEntity.class));
90   - }
91 91 return user.getDTO(UserDTO.class);
92 92 }
93 93
... ... @@ -159,16 +159,22 @@ public class YtThirdPlatformServiceImpl extends AbstractBaseService<YtThirdPlatf
159 159
160 160 @Override
161 161 @Transactional(rollbackFor = Exception.class)
162   - public boolean deleteDataByIds(DeleteDTO deleteDTO) {
  162 + public boolean unbindUser(String tenantId,String appUserId,String thirdUserId) {
  163 +
  164 + User user = userMapper.selectById(appUserId);
  165 + if(!tenantId.equals(user.getTenantId())){
  166 + throw new YtDataValidationException(ErrorMessage.NO_PERMISSION.getMessage());
  167 + }
163 168 Wrapper filter = new QueryWrapper<YtThirdUserEntity>().lambda()
164   - .in(YtThirdUserEntity::getId, deleteDTO.getIds());
  169 + .eq(YtThirdUserEntity::getAppUserId,appUserId)
  170 + .eq(YtThirdUserEntity::getThirdUserId,thirdUserId);
165 171 return baseMapper.delete(filter) > 0;
166 172 }
167 173
168 174 @Override
169 175 public UserDTO login(String thirdUserId) {
170   - return baseMapper.login(thirdUserId)
171   - .getDTO(UserDTO.class);
  176 + User user = baseMapper.login(thirdUserId);
  177 + return user==null?null:user.getDTO(UserDTO.class);
172 178 }
173 179
174 180 @Override
... ...
... ... @@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Mapper;
6 6 import org.apache.ibatis.annotations.Param;
7 7 import org.thingsboard.server.common.data.EntityType;
8 8 import org.thingsboard.server.common.data.alarm.AlarmInfo;
  9 +import org.thingsboard.server.common.data.alarm.AlarmSeverity;
9 10 import org.thingsboard.server.common.data.alarm.AlarmStatus;
10 11 import org.thingsboard.server.common.data.id.TenantId;
11 12 import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
... ... @@ -25,6 +26,7 @@ public interface YtAlarmMapper extends BaseMapper<YtAlarmEntity> {
25 26 IPage<YtAlarmEntity> alarmPage(
26 27 IPage<?> page
27 28 ,@Param("tenantId") UUID tenantId
  29 + ,@Param("severity") AlarmSeverity severity
28 30 ,@Param("alarmType")String alarmType
29 31 ,@Param("startTime")Long startTime
30 32 ,@Param("endTime")Long endTime
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Param;
  7 +import org.thingsboard.server.common.data.id.DeviceId;
  8 +import org.thingsboard.server.common.data.id.EntityId;
  9 +import org.thingsboard.server.common.data.id.TenantId;
  10 +import org.thingsboard.server.common.data.rpc.RpcStatus;
  11 +import org.thingsboard.server.common.data.yunteng.dto.YtRpcRecordDTO;
  12 +import org.thingsboard.server.dao.yunteng.entities.YtRpcRecordEntity;
  13 +
  14 +import java.util.List;
  15 +import java.util.UUID;
  16 +
  17 +/**
  18 + * @author Administrator
  19 + */
  20 +@Mapper
  21 +public interface YtRpcRecordMapper extends BaseMapper<YtRpcRecordEntity> {
  22 + /**
  23 + * @param page
  24 + * @param tenantId
  25 + * @param name
  26 + * @param status
  27 + * @param organizationId
  28 + * @return
  29 + */
  30 + IPage<YtRpcRecordDTO> getPageDatas(IPage<?> page, @Param("tenantId") String tenantId, @Param("tbDeviceId") String tbDeviceId, @Param("name") String name, @Param("status") RpcStatus status, @Param("organization") List<String> organizationId, @Param("oneway") String oneway);
  31 +}
... ...
... ... @@ -3,6 +3,7 @@ package org.thingsboard.server.dao.yunteng.service;
3 3 import org.thingsboard.server.common.data.EntityType;
4 4 import org.thingsboard.server.common.data.alarm.Alarm;
5 5 import org.thingsboard.server.common.data.alarm.AlarmInfo;
  6 +import org.thingsboard.server.common.data.alarm.AlarmSeverity;
6 7 import org.thingsboard.server.common.data.alarm.AlarmStatus;
7 8 import org.thingsboard.server.common.data.id.TenantId;
8 9 import org.thingsboard.server.common.data.page.TimePageLink;
... ... @@ -35,7 +36,7 @@ public interface YtAlarmInfoService {
35 36 * @param organizationId 告警所属组织
36 37 * @return
37 38 */
38   - YtPageData<YtAlarmEntity> alarmPage(Map<String, Object> pageMap, TenantId tenantId, String alarmType, Long startTime, Long endTime, List<AlarmStatus> status, String deviceId, DeviceTypeEnum deviceType, EntityType originatorType, String organizationId);
  39 + YtPageData<YtAlarmEntity> alarmPage(Map<String, Object> pageMap, TenantId tenantId, AlarmSeverity severity,String alarmType, Long startTime, Long endTime, List<AlarmStatus> status, String deviceId, DeviceTypeEnum deviceType, EntityType originatorType, String organizationId);
39 40
40 41
41 42 /**
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import com.fasterxml.jackson.databind.JsonNode;
  5 +import org.thingsboard.server.common.data.id.DeviceId;
  6 +import org.thingsboard.server.common.data.id.EntityId;
  7 +import org.thingsboard.server.common.data.id.TenantId;
  8 +import org.thingsboard.server.common.data.rpc.RpcStatus;
  9 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  10 +import org.thingsboard.server.common.data.yunteng.dto.YtRpcRecordDTO;
  11 +import org.thingsboard.server.common.data.yunteng.dto.YtThirdUserDTO;
  12 +import org.thingsboard.server.common.data.yunteng.enums.ThirdPlatformEnum;
  13 +import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  14 +import org.thingsboard.server.dao.yunteng.entities.YtRpcRecordEntity;
  15 +import org.thingsboard.server.dao.yunteng.entities.YtThirdUserEntity;
  16 +
  17 +import java.util.UUID;
  18 +
  19 +/**
  20 + * 第三方平台用户管理相关接口
  21 + * 例如:微信小程序、钉钉等。
  22 + * @author Administrator
  23 + */
  24 +public interface YtRpcRecordService extends BaseService<YtRpcRecordEntity> {
  25 +
  26 + /**
  27 + *
  28 + * RPC记录分页数据
  29 + * @param pageInfrom 分页信息
  30 + * @param tenantId 租户ID
  31 + * @param oneway 响应方式:是否单向
  32 + * @param status RPC状态
  33 + * @param organizationId 组织ID
  34 + * @param name 名称,例如:设备、命令、组织、租户
  35 + * @return
  36 + */
  37 + YtPageData<YtRpcRecordDTO> pageDatas(IPage<YtRpcRecordEntity> pageInfrom, String tenantId, String deviceId, Boolean oneway, RpcStatus status, String organizationId, String name);
  38 +
  39 +
  40 +}
... ...
... ... @@ -7,7 +7,6 @@ import org.thingsboard.server.common.data.yunteng.dto.UserDTO;
7 7 import org.thingsboard.server.common.data.yunteng.dto.YtThirdUserDTO;
8 8 import org.thingsboard.server.common.data.yunteng.enums.ThirdPlatformEnum;
9 9 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
10   -import org.thingsboard.server.dao.yunteng.entities.User;
11 10 import org.thingsboard.server.dao.yunteng.entities.YtThirdUserEntity;
12 11
13 12 /**
... ... @@ -32,13 +31,15 @@ public interface YtThirdPlatformService extends BaseService<YtThirdUserEntity> {
32 31 * @param dto
33 32 * @return
34 33 */
35   - UserDTO saveOrUpdate(YtThirdUserDTO dto);
  34 + UserDTO bindUser(YtThirdUserDTO dto);
36 35
37 36 /**
38   - * @param deleteDTO
  37 + * 第三方平台用户与系统用户解绑
  38 + * @param appUserId
  39 + * @param thirdUserId
39 40 * @return
40 41 */
41   - boolean deleteDataByIds(DeleteDTO deleteDTO);
  42 + boolean unbindUser(String tenantId,String appUserId,String thirdUserId);
42 43
43 44 /**
44 45 * 第三方登录
... ...
... ... @@ -43,6 +43,9 @@
43 43 LEFT JOIN iotfs_organization org ON org.id = d.organization_id
44 44 <where>
45 45 m.tenant_id = #{tenantId}
  46 + <if test="severity!=null">
  47 + AND severity = #{severity}
  48 + </if>
46 49 <if test="alarmType!=null">
47 50 AND type LIKE CONCAT('%',#{alarmType},'%')
48 51 </if>
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.YtRpcRecordMapper">
  5 + <resultMap type="org.thingsboard.server.common.data.yunteng.dto.YtRpcRecordDTO" id="dataMap">
  6 + <result property="id" column="id"/>
  7 + <result property="deviceName" column="device_name"/>
  8 + <result property="tbDeviceId" column="tb_device_id"/>
  9 + <result property="deviceId" column="device_id"/>
  10 + <result property="deviceType" column="device_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler" />
  11 + <result property="deviceSn" column="sn"/>
  12 + <result property="createTime" column="create_time"/>
  13 + <result property="expirationTime" column="expiration_time"/>
  14 + <result property="request" column="request"
  15 + typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
  16 + <result property="response" column="response"
  17 + typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
  18 + <result property="additionalInfo" column="additional_info"
  19 + typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
  20 + <result property="status" column="status" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  21 + <result property="organizationId" column="organization_id"/>
  22 + <result property="organizationName" column="organization_name"/>
  23 + <result column="tenant_name" property="tenantName"/>
  24 + <result column="tenant_id" property="tenantId"/>
  25 +<!-- <association property="request" javaType="org.thingsboard.server.common.data.yunteng.dto.YtRpcRequestDTO">-->
  26 +<!-- <result column="deviceId" property="deviceId" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>-->
  27 +<!-- <result column="oneway" property="oneway"/>-->
  28 +<!-- <result column="tenant_enabled" property="retries"/>-->
  29 +<!-- <result column="tenant_expire_time" property="body" />-->
  30 +<!-- </association>-->
  31 + </resultMap>
  32 +
  33 +
  34 +
  35 + <sql id="basicColumns">
  36 + base.id,base.created_time AS create_time,base.expiration_time,base.request,base.response,base.additional_info,base.status
  37 + </sql>
  38 +
  39 + <sql id="detailColumns">
  40 + <include refid="basicColumns"/>
  41 + ,org.id AS organization_id,org.name AS organization_name
  42 + ,dev.name AS device_name,dev.tb_device_id,dev.device_type,dev.sn,dev.tenant_id,dev.id AS device_id
  43 + ,ten.title AS tenant_name
  44 + </sql>
  45 + <select id="getPageDatas" resultMap="dataMap">
  46 + SELECT <include refid="detailColumns"/>
  47 + FROM rpc base
  48 + LEFT JOIN iotfs_device dev ON base.device_id =dev.tb_device_id::uuid
  49 + LEFT JOIN iotfs_organization org ON dev.organization_id = org.id
  50 + LEFT JOIN tenant ten ON base.tenant_id = ten.id
  51 + <where>
  52 + 1=1
  53 + <if test="tenantId !=null and tenantId !=''">
  54 + AND base.tenant_id = #{tenantId}::uuid
  55 + </if>
  56 + <if test="tbDeviceId !=null ">
  57 + AND base.device_id = #{tbDeviceId}::uuid
  58 + </if>
  59 + <if test="name !=null and name !=''">
  60 + AND (
  61 + dev.name LIKE concat('%',#{name}::TEXT,'%')
  62 + OR
  63 + org.name LIKE concat('%',#{name}::TEXT,'%')
  64 + OR
  65 + ten.title LIKE concat('%',#{name}::TEXT,'%')
  66 + OR
  67 + base.request LIKE concat('%',#{name}::TEXT,'%')
  68 + )
  69 + </if>
  70 + <if test="oneway !=null and name !=''">
  71 + AND base.request LIKE concat('%',#{oneway}::TEXT,'%')
  72 + </if>
  73 + <if test="status !=null">
  74 + AND base.status = #{status}
  75 + </if>
  76 + <if test="organization !=null">
  77 + AND dev.organization_id IN
  78 + <foreach collection="organization" item="organizationId" open="(" separator="," close=")">
  79 + #{organizationId}
  80 + </foreach>
  81 + </if>
  82 + </where>
  83 + </select>
  84 +
  85 +
  86 +
  87 +
  88 +
  89 +
  90 +</mapper>
... ...