Showing
7 changed files
with
150 additions
and
0 deletions
... | ... | @@ -64,6 +64,7 @@ import org.thingsboard.server.common.data.page.PageData; |
64 | 64 | import org.thingsboard.server.common.data.page.PageLink; |
65 | 65 | import org.thingsboard.server.common.data.page.TimePageLink; |
66 | 66 | import org.thingsboard.server.common.data.security.DeviceCredentials; |
67 | +import org.thingsboard.server.common.data.yunteng.dto.TkCustomerDeviceDTO; | |
67 | 68 | import org.thingsboard.server.common.msg.TbMsg; |
68 | 69 | import org.thingsboard.server.common.msg.TbMsgDataType; |
69 | 70 | import org.thingsboard.server.common.msg.TbMsgMetaData; |
... | ... | @@ -72,6 +73,7 @@ import org.thingsboard.server.dao.device.claim.ClaimResult; |
72 | 73 | import org.thingsboard.server.dao.device.claim.ReclaimResult; |
73 | 74 | import org.thingsboard.server.dao.exception.IncorrectParameterException; |
74 | 75 | import org.thingsboard.server.dao.model.ModelConstants; |
76 | +import org.thingsboard.server.dao.yunteng.service.TkCustomerDevice; | |
75 | 77 | import org.thingsboard.server.queue.util.TbCoreComponent; |
76 | 78 | import org.thingsboard.server.service.device.DeviceBulkImportService; |
77 | 79 | import org.thingsboard.server.service.gateway_device.GatewayNotificationsService; |
... | ... | @@ -132,6 +134,8 @@ public class DeviceController extends BaseController { |
132 | 134 | |
133 | 135 | private final GatewayNotificationsService gatewayNotificationsService; |
134 | 136 | |
137 | + private final TkCustomerDevice tkCustomerDevice; | |
138 | + | |
135 | 139 | @ApiOperation(value = "Get Device (getDeviceById)", |
136 | 140 | notes = "Fetch the Device object based on the provided Device Id. " + |
137 | 141 | "If the user has the authority of 'TENANT_ADMIN', the server checks that the device is owned by the same tenant. " + |
... | ... | @@ -311,6 +315,8 @@ public class DeviceController extends BaseController { |
311 | 315 | sendEntityAssignToCustomerNotificationMsg(savedDevice.getTenantId(), savedDevice.getId(), |
312 | 316 | customerId, EdgeEventActionType.ASSIGNED_TO_CUSTOMER); |
313 | 317 | |
318 | + //ThingsKit save | |
319 | + tkCustomerDevice.saveCustomerDeviceMapping(new TkCustomerDeviceDTO(strCustomerId,strDeviceId)); | |
314 | 320 | return savedDevice; |
315 | 321 | } catch (Exception e) { |
316 | 322 | logEntityAction(emptyId(EntityType.DEVICE), null, |
... | ... | @@ -345,6 +351,8 @@ public class DeviceController extends BaseController { |
345 | 351 | sendEntityAssignToCustomerNotificationMsg(savedDevice.getTenantId(), savedDevice.getId(), |
346 | 352 | customer.getId(), EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER); |
347 | 353 | |
354 | + //ThingsKit delete | |
355 | + tkCustomerDevice.deleteCustomerDeviceMapping(List.of(strDeviceId)); | |
348 | 356 | return savedDevice; |
349 | 357 | } catch (Exception e) { |
350 | 358 | logEntityAction(emptyId(EntityType.DEVICE), null, | ... | ... |
... | ... | @@ -108,6 +108,8 @@ public final class ModelConstants { |
108 | 108 | public static final String TK_DATA_COMPONENT_NAME = "tk_data_component"; |
109 | 109 | /** 物模型 */ |
110 | 110 | public static final String TK_THING_MODEL = "tk_things_model"; |
111 | + /** 客户和设备的映射表 */ | |
112 | + public static final String TK_CUSTOMER_DEVICE_NAME = "tk_customer_device"; | |
111 | 113 | } |
112 | 114 | |
113 | 115 | public static class TableFields { | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TkCustomerDeviceDTO.java
0 → 100644
1 | +package org.thingsboard.server.common.data.yunteng.dto; | |
2 | + | |
3 | +import io.swagger.annotations.ApiModelProperty; | |
4 | +import lombok.Data; | |
5 | +import lombok.RequiredArgsConstructor; | |
6 | +import org.thingsboard.server.common.data.yunteng.common.AddGroup; | |
7 | +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; | |
8 | + | |
9 | +import javax.validation.constraints.NotEmpty; | |
10 | + | |
11 | +@Data | |
12 | +public class TkCustomerDeviceDTO { | |
13 | + | |
14 | + @ApiModelProperty(value = "客户ID", required = true) | |
15 | + @NotEmpty( | |
16 | + message = "客户ID不能为空或空字符串", | |
17 | + groups = {AddGroup.class, DeleteGroup.class}) | |
18 | + private String customerId; | |
19 | + @ApiModelProperty(value = "TB设备ID", required = true) | |
20 | + @NotEmpty( | |
21 | + message = "设备ID不能为空或空字符串", | |
22 | + groups = {AddGroup.class, DeleteGroup.class}) | |
23 | + private String deviceId; | |
24 | + | |
25 | + public TkCustomerDeviceDTO(String customerId, String deviceId) { | |
26 | + this.customerId = customerId; | |
27 | + this.deviceId = deviceId; | |
28 | + } | |
29 | + public TkCustomerDeviceDTO(){ | |
30 | + | |
31 | + | |
32 | + } | |
33 | +} | ... | ... |
dao/src/main/java/org/thingsboard/server/dao/yunteng/entities/TkCustomerDeviceEntity.java
0 → 100644
1 | +package org.thingsboard.server.dao.yunteng.entities; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.annotation.TableName; | |
4 | +import lombok.Data; | |
5 | +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | |
6 | + | |
7 | +import java.io.Serializable; | |
8 | + | |
9 | +@Data | |
10 | +@TableName(ModelConstants.Table.TK_CUSTOMER_DEVICE_NAME) | |
11 | +public class TkCustomerDeviceEntity implements Serializable { | |
12 | + | |
13 | + private static final long serialVersionUID = -3419023927666636379L; | |
14 | + private String customerId; | |
15 | + private String deviceId; | |
16 | +} | ... | ... |
1 | +package org.thingsboard.server.dao.yunteng.impl; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
4 | +import lombok.RequiredArgsConstructor; | |
5 | +import org.springframework.beans.BeanUtils; | |
6 | +import org.springframework.stereotype.Service; | |
7 | +import org.thingsboard.server.common.data.StringUtils; | |
8 | +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; | |
9 | +import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; | |
10 | +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; | |
11 | +import org.thingsboard.server.common.data.yunteng.dto.TkCustomerDeviceDTO; | |
12 | +import org.thingsboard.server.dao.yunteng.entities.TkCustomerDeviceEntity; | |
13 | +import org.thingsboard.server.dao.yunteng.mapper.TkCustomerDeviceMapper; | |
14 | +import org.thingsboard.server.dao.yunteng.service.TkCustomerDevice; | |
15 | +import java.util.List; | |
16 | +import java.util.Optional; | |
17 | +import java.util.stream.Collectors; | |
18 | + | |
19 | +@Service | |
20 | +@RequiredArgsConstructor | |
21 | +public class TkCustomerDeviceImpl implements TkCustomerDevice { | |
22 | + private final TkCustomerDeviceMapper tkCustomerDeviceMapper; | |
23 | + | |
24 | + @Override | |
25 | + public List<TkCustomerDeviceDTO> getMappingByCustomerId(String customerId) { | |
26 | + if (StringUtils.isEmpty(customerId)) { | |
27 | + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
28 | + } | |
29 | + List<TkCustomerDeviceEntity> entities = | |
30 | + tkCustomerDeviceMapper.selectList( | |
31 | + new LambdaQueryWrapper<TkCustomerDeviceEntity>() | |
32 | + .eq(TkCustomerDeviceEntity::getCustomerId, customerId)); | |
33 | + return Optional.ofNullable(entities) | |
34 | + .map( | |
35 | + list -> | |
36 | + list.stream() | |
37 | + .map( | |
38 | + obj -> { | |
39 | + TkCustomerDeviceDTO target = new TkCustomerDeviceDTO(); | |
40 | + BeanUtils.copyProperties(obj, target); | |
41 | + return target; | |
42 | + }) | |
43 | + .collect(Collectors.toList())) | |
44 | + .orElse(null); | |
45 | + } | |
46 | + | |
47 | + @Override | |
48 | + public TkCustomerDeviceDTO saveCustomerDeviceMapping(TkCustomerDeviceDTO tkCustomerDeviceDTO) { | |
49 | + if (StringUtils.isEmpty(tkCustomerDeviceDTO.getCustomerId()) | |
50 | + || StringUtils.isEmpty(tkCustomerDeviceDTO.getDeviceId())) { | |
51 | + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
52 | + } | |
53 | + TkCustomerDeviceEntity entity = new TkCustomerDeviceEntity(); | |
54 | + BeanUtils.copyProperties(tkCustomerDeviceDTO, entity); | |
55 | + tkCustomerDeviceMapper.insert(entity); | |
56 | + return tkCustomerDeviceDTO; | |
57 | + } | |
58 | + | |
59 | + @Override | |
60 | + public boolean deleteCustomerDeviceMapping(List<String> deviceList) { | |
61 | + if (null == deviceList || deviceList.isEmpty()) { | |
62 | + throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
63 | + } | |
64 | + return tkCustomerDeviceMapper.delete( | |
65 | + new LambdaQueryWrapper<TkCustomerDeviceEntity>() | |
66 | + .in(TkCustomerDeviceEntity::getDeviceId, deviceList)) | |
67 | + > FastIotConstants.MagicNumber.ZERO; | |
68 | + } | |
69 | +} | ... | ... |
1 | +package org.thingsboard.server.dao.yunteng.mapper; | |
2 | + | |
3 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
4 | +import org.apache.ibatis.annotations.Mapper; | |
5 | +import org.thingsboard.server.dao.yunteng.entities.TkCustomerDeviceEntity; | |
6 | + | |
7 | +@Mapper | |
8 | +public interface TkCustomerDeviceMapper extends BaseMapper<TkCustomerDeviceEntity> {} | ... | ... |
1 | +package org.thingsboard.server.dao.yunteng.service; | |
2 | + | |
3 | +import org.thingsboard.server.common.data.yunteng.dto.TkCustomerDeviceDTO; | |
4 | + | |
5 | +import java.util.List; | |
6 | + | |
7 | +public interface TkCustomerDevice { | |
8 | + | |
9 | + List<TkCustomerDeviceDTO> getMappingByCustomerId(String customerId); | |
10 | + | |
11 | + TkCustomerDeviceDTO saveCustomerDeviceMapping(TkCustomerDeviceDTO tkCustomerDeviceDTO); | |
12 | + | |
13 | + boolean deleteCustomerDeviceMapping(List<String> deviceList); | |
14 | +} | ... | ... |