Showing
37 changed files
with
1140 additions
and
107 deletions
@@ -557,7 +557,7 @@ public abstract class BaseController { | @@ -557,7 +557,7 @@ public abstract class BaseController { | ||
557 | } | 557 | } |
558 | } | 558 | } |
559 | 559 | ||
560 | - DeviceProfile checkDeviceProfileId(DeviceProfileId deviceProfileId, Operation operation) throws ThingsboardException { | 560 | + protected DeviceProfile checkDeviceProfileId(DeviceProfileId deviceProfileId, Operation operation) throws ThingsboardException { |
561 | try { | 561 | try { |
562 | validateId(deviceProfileId, "Incorrect deviceProfileId " + deviceProfileId); | 562 | validateId(deviceProfileId, "Incorrect deviceProfileId " + deviceProfileId); |
563 | DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(getCurrentUser().getTenantId(), deviceProfileId); | 563 | DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(getCurrentUser().getTenantId(), deviceProfileId); |
@@ -105,6 +105,8 @@ public class YtDeviceController extends BaseController { | @@ -105,6 +105,8 @@ public class YtDeviceController extends BaseController { | ||
105 | @RequestParam(value = "deviceState", required = false) DeviceState deviceState, | 105 | @RequestParam(value = "deviceState", required = false) DeviceState deviceState, |
106 | @RequestParam(value = "deviceType", required = false) DeviceTypeEnum deviceType, | 106 | @RequestParam(value = "deviceType", required = false) DeviceTypeEnum deviceType, |
107 | @RequestParam(value = "organizationId",required = false) String organizationId, | 107 | @RequestParam(value = "organizationId",required = false) String organizationId, |
108 | + @RequestParam(value = "alarmStatus",required = false) Integer alarmStatus, | ||
109 | + @RequestParam(value = "profileId",required = false) String profileId, | ||
108 | @RequestParam(value = ORDER_FILED, required = false) String orderBy, | 110 | @RequestParam(value = ORDER_FILED, required = false) String orderBy, |
109 | @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException { | 111 | @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType) throws ThingsboardException { |
110 | HashMap<String, Object> queryMap = new HashMap<>(); | 112 | HashMap<String, Object> queryMap = new HashMap<>(); |
@@ -112,6 +114,8 @@ public class YtDeviceController extends BaseController { | @@ -112,6 +114,8 @@ public class YtDeviceController extends BaseController { | ||
112 | queryMap.put(PAGE, page); | 114 | queryMap.put(PAGE, page); |
113 | queryMap.put(ORDER_FILED, orderBy); | 115 | queryMap.put(ORDER_FILED, orderBy); |
114 | queryMap.put("name", name); | 116 | queryMap.put("name", name); |
117 | + queryMap.put("alarmStatus", alarmStatus); | ||
118 | + queryMap.put("profileId", profileId); | ||
115 | if (deviceState != null) { | 119 | if (deviceState != null) { |
116 | queryMap.put("deviceState", deviceState.name()); | 120 | queryMap.put("deviceState", deviceState.name()); |
117 | } | 121 | } |
application/src/main/java/org/thingsboard/server/controller/yunteng/YtSceneLinkageController.java
0 → 100644
1 | +package org.thingsboard.server.controller.yunteng; | ||
2 | + | ||
3 | +import io.swagger.annotations.Api; | ||
4 | +import io.swagger.annotations.ApiOperation; | ||
5 | +import lombok.RequiredArgsConstructor; | ||
6 | +import org.springframework.http.HttpStatus; | ||
7 | +import org.springframework.http.ResponseEntity; | ||
8 | +import org.springframework.validation.annotation.Validated; | ||
9 | +import org.springframework.web.bind.annotation.*; | ||
10 | +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; | ||
11 | +import org.thingsboard.server.common.data.exception.ThingsboardException; | ||
12 | +import org.thingsboard.server.common.data.yunteng.common.AddGroup; | ||
13 | +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; | ||
14 | +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup; | ||
15 | +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; | ||
16 | +import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; | ||
17 | +import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | ||
18 | +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData; | ||
19 | +import org.thingsboard.server.controller.BaseController; | ||
20 | +import org.thingsboard.server.dao.yunteng.service.SceneLinkageService; | ||
21 | + | ||
22 | +import java.net.URI; | ||
23 | +import java.util.HashMap; | ||
24 | +import java.util.List; | ||
25 | +import java.util.Map; | ||
26 | +import java.util.Optional; | ||
27 | + | ||
28 | +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE; | ||
29 | +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE; | ||
30 | + | ||
31 | +/** @Description 场景联动 @Author cxy @Date 2021/11/25 11:25 */ | ||
32 | +@RestController | ||
33 | +@RequestMapping("/api/yt/sceneLinkage") | ||
34 | +@RequiredArgsConstructor | ||
35 | +@Api(tags = "场景联动") | ||
36 | +public class YtSceneLinkageController extends BaseController { | ||
37 | + | ||
38 | + private final SceneLinkageService sceneLinkageService; | ||
39 | + | ||
40 | + @ApiOperation(value = "保存新增的场景联动数据") | ||
41 | + @PostMapping | ||
42 | + public ResponseEntity<SceneLinkageDTO> saveSceneLinkage( | ||
43 | + @Validated(AddGroup.class) @RequestBody SceneLinkageDTO sceneLinkageDTO) | ||
44 | + throws ThingsboardException { | ||
45 | + SceneLinkageDTO newSceneLinkageDTO = | ||
46 | + sceneLinkageService.saveScenelinkage( | ||
47 | + sceneLinkageDTO, getCurrentUser().getCurrentTenantId()); | ||
48 | + return Optional.ofNullable(newSceneLinkageDTO) | ||
49 | + .map( | ||
50 | + dto -> { | ||
51 | + URI location = | ||
52 | + ServletUriComponentsBuilder.fromCurrentRequest() | ||
53 | + .path("/{id}") | ||
54 | + .buildAndExpand(newSceneLinkageDTO.getId()) | ||
55 | + .toUri(); | ||
56 | + return ResponseEntity.created(location).body(newSceneLinkageDTO); | ||
57 | + }) | ||
58 | + .orElse(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build()); | ||
59 | + } | ||
60 | + | ||
61 | + @ApiOperation("修改场景联动的数据") | ||
62 | + @PostMapping("/update") | ||
63 | + public void updateSceneLinkage( | ||
64 | + @Validated(UpdateGroup.class) @RequestBody SceneLinkageDTO sceneLinkageDTO) { | ||
65 | + sceneLinkageService.updateSceneLinkage(sceneLinkageDTO); | ||
66 | + } | ||
67 | + | ||
68 | + @ApiOperation("场景联动的分页") | ||
69 | + @GetMapping(params = {PAGE_SIZE, PAGE}) | ||
70 | + public PageData<SceneLinkageDTO> page( | ||
71 | + @RequestParam(PAGE_SIZE) int pageSize, | ||
72 | + @RequestParam(PAGE) int page, | ||
73 | + @RequestParam(value = "name", required = false) String name, | ||
74 | + @RequestParam(value = "status", required = false) Integer status, | ||
75 | + @RequestParam(value = "organizationId", required = false) String organizationId, | ||
76 | + @RequestParam(value = "triggers", required = false) List<TriggerDTO> triggers) | ||
77 | + throws ThingsboardException { | ||
78 | + HashMap<String, Object> queryMap = new HashMap<>(); | ||
79 | + queryMap.put(PAGE_SIZE, pageSize); | ||
80 | + queryMap.put(PAGE, page); | ||
81 | + queryMap.put("name", name); | ||
82 | + queryMap.put("status", status); | ||
83 | + queryMap.put("organizationId", organizationId); | ||
84 | + queryMap.put("triggers", triggers); | ||
85 | + return sceneLinkageService.page(queryMap, getCurrentUser().getCurrentTenantId()); | ||
86 | + } | ||
87 | + | ||
88 | + @ApiOperation(value = "删除场景联动") | ||
89 | + @DeleteMapping | ||
90 | + public void delete(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) | ||
91 | + throws ThingsboardException { | ||
92 | + sceneLinkageService.deleteSceneLinkage( | ||
93 | + deleteDTO.getIds(), getCurrentUser().getCurrentTenantId()); | ||
94 | + } | ||
95 | + | ||
96 | + @ApiOperation(value = "修改场景联动所属状态") | ||
97 | + @PutMapping("/updateSceneStatus/{sceneLinkageId}/{status}") | ||
98 | + public void updateRoleStatus( | ||
99 | + @PathVariable String sceneLinkageId, @PathVariable("status") int status) | ||
100 | + throws ThingsboardException { | ||
101 | + | ||
102 | + sceneLinkageService.updateSceneStatus( | ||
103 | + sceneLinkageId, status, getCurrentUser().getCurrentTenantId()); | ||
104 | + } | ||
105 | + | ||
106 | + @ApiOperation(value = "通过场景id获取所属组织的设备集合") | ||
107 | + @GetMapping("/device") | ||
108 | + public ResponseEntity<Map> findDeviceList(@RequestParam String organizationId) { | ||
109 | + HashMap<String, Object> map = | ||
110 | + new HashMap<>() { | ||
111 | + { | ||
112 | + put("items", sceneLinkageService.findDeviceList(organizationId)); | ||
113 | + } | ||
114 | + }; | ||
115 | + return ResponseEntity.ok(map); | ||
116 | + } | ||
117 | +} |
@@ -60,6 +60,14 @@ public final class ModelConstants { | @@ -60,6 +60,14 @@ public final class ModelConstants { | ||
60 | public static final String SYS_APP_DESIGN_TABLE_NAME = "sys_app_design"; | 60 | public static final String SYS_APP_DESIGN_TABLE_NAME = "sys_app_design"; |
61 | /** 中国城镇区街 */ | 61 | /** 中国城镇区街 */ |
62 | public static final String SYS_TOWN_TABLE_NAME = "sys_town"; | 62 | public static final String SYS_TOWN_TABLE_NAME = "sys_town"; |
63 | + /** 场景联动表 */ | ||
64 | + public static final String IOTFS_SCENE_LINKAGE_TABLE_NAME = "iotfs_scene_linkage"; | ||
65 | + /** 场景触发器 */ | ||
66 | + public static final String IOTFS_TRIGGER_TABLE_NAME = "iotfs_trigger"; | ||
67 | + /** 执行条件表 */ | ||
68 | + public static final String IOTFS_DO_CONDITION_TABLE_NAME = "iotfs_do_condition"; | ||
69 | + /** 条件动作表 */ | ||
70 | + public static final String IOTFS_DO_ACTION_TABLE_NAME = "iotfs_do_action"; | ||
63 | } | 71 | } |
64 | 72 | ||
65 | public static class TableFields { | 73 | public static class TableFields { |
@@ -70,5 +70,6 @@ public class DeviceDTO extends TenantDTO { | @@ -70,5 +70,6 @@ public class DeviceDTO extends TenantDTO { | ||
70 | /** 设备凭证 */ | 70 | /** 设备凭证 */ |
71 | private DeviceCredentialsType deviceCredentials; | 71 | private DeviceCredentialsType deviceCredentials; |
72 | /** 告警状态:0:正常 1:告警 */ | 72 | /** 告警状态:0:正常 1:告警 */ |
73 | + @ApiModelProperty(value="告警状态:0正常,1告警") | ||
73 | private Integer alarmStatus; | 74 | private Integer alarmStatus; |
74 | } | 75 | } |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/DoActionDTO.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.EqualsAndHashCode; | ||
6 | + | ||
7 | +import java.util.List; | ||
8 | + | ||
9 | +/** | ||
10 | + * @Description 场景联动执行动作数据传输表 | ||
11 | + * @Author cxy | ||
12 | + * @Date 2021/11/24 17:32 | ||
13 | + */ | ||
14 | +@Data | ||
15 | +@EqualsAndHashCode(callSuper = true) | ||
16 | +public class DoActionDTO extends TenantDTO{ | ||
17 | + | ||
18 | + @ApiModelProperty(value = "所属设备id") | ||
19 | + private String deviceId; | ||
20 | + | ||
21 | + @ApiModelProperty(value = "设备输出方式") | ||
22 | + private String outPut; | ||
23 | + | ||
24 | + @ApiModelProperty(value = "下发指令") | ||
25 | + private String command; | ||
26 | + | ||
27 | + @ApiModelProperty(value = "输出目标:设备,场景,其他") | ||
28 | + private String outTarget; | ||
29 | + | ||
30 | + @ApiModelProperty(value = "场景联动id") | ||
31 | + private String sceneLinkageId; | ||
32 | + | ||
33 | + @ApiModelProperty(value = "所属设备集合") | ||
34 | + private List<DeviceDTO> deviceDTOList; | ||
35 | +} |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/DoConditionDTO.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.EqualsAndHashCode; | ||
6 | + | ||
7 | +import java.util.List; | ||
8 | + | ||
9 | +/** | ||
10 | + * @Description 场景联动执行条件数据传输表 | ||
11 | + * @Author cxy | ||
12 | + * @Date 2021/11/24 17:33 | ||
13 | + */ | ||
14 | +@Data | ||
15 | +@EqualsAndHashCode(callSuper = true) | ||
16 | +public class DoConditionDTO extends TenantDTO{ | ||
17 | + | ||
18 | + @ApiModelProperty(value = "所属设备id") | ||
19 | + private String deviceId; | ||
20 | + | ||
21 | + @ApiModelProperty(value = "设备状态") | ||
22 | + private String status; | ||
23 | + | ||
24 | + @ApiModelProperty(value = "属性") | ||
25 | + private String property; | ||
26 | + | ||
27 | + @ApiModelProperty(value = "比较大小,0为=, 1为<, 2为 >,3为<=, 4为>=") | ||
28 | + private Integer compare; | ||
29 | + | ||
30 | + @ApiModelProperty(value = "请输入比较值") | ||
31 | + private String value; | ||
32 | + | ||
33 | + @ApiModelProperty(value = "场景联动id") | ||
34 | + private String sceneLinkageId; | ||
35 | + | ||
36 | + @ApiModelProperty(value = "所属设备集合") | ||
37 | + private List<DeviceDTO> deviceDTOList; | ||
38 | +} |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/SceneLinkageDTO.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.EqualsAndHashCode; | ||
6 | +import org.thingsboard.server.common.data.yunteng.common.AddGroup; | ||
7 | + | ||
8 | +import javax.validation.constraints.NotEmpty; | ||
9 | +import java.util.List; | ||
10 | + | ||
11 | +/** | ||
12 | + * @Description 场景联动数据传输表 | ||
13 | + * @Author cxy | ||
14 | + * @Date 2021/11/24 17:31 | ||
15 | + */ | ||
16 | +@Data | ||
17 | +@EqualsAndHashCode(callSuper = true) | ||
18 | +public class SceneLinkageDTO extends TenantDTO{ | ||
19 | + | ||
20 | + @ApiModelProperty(value = "场景联动名称", required = true) | ||
21 | + @NotEmpty(message = "名称不能为空或字符串", groups = AddGroup.class) | ||
22 | + private String name; | ||
23 | + | ||
24 | + @ApiModelProperty(value = "状态:0表示已停用,1表示启用") | ||
25 | + private Integer status; | ||
26 | + | ||
27 | + @ApiModelProperty(value = "描述") | ||
28 | + private String description; | ||
29 | + | ||
30 | + @NotEmpty(message = "所属组织不能为空或者空字符串", groups = {AddGroup.class}) | ||
31 | + @ApiModelProperty(value = "所属组织id",required = true) | ||
32 | + private String organizationId; | ||
33 | + | ||
34 | + @ApiModelProperty(value = "触发器") | ||
35 | + private List<TriggerDTO> triggers; | ||
36 | + | ||
37 | + @ApiModelProperty(value = "执行动作") | ||
38 | + private List<DoActionDTO> doActions; | ||
39 | + | ||
40 | + @ApiModelProperty(value = "执行条件") | ||
41 | + private List<DoConditionDTO> doConditions; | ||
42 | + | ||
43 | +} |
@@ -32,20 +32,9 @@ public class SysEnterpriseDTO extends BaseDTO { | @@ -32,20 +32,9 @@ public class SysEnterpriseDTO extends BaseDTO { | ||
32 | private String area; | 32 | private String area; |
33 | @ApiModelProperty(value = "联系电话") | 33 | @ApiModelProperty(value = "联系电话") |
34 | private String tel; | 34 | private String tel; |
35 | - @ApiModelProperty(value = "省") | ||
36 | - private String nameProv; | ||
37 | - @ApiModelProperty(value = "省code") | ||
38 | - private String codeProv; | ||
39 | - @ApiModelProperty(value = "市") | ||
40 | - private String nameCity; | ||
41 | - @ApiModelProperty(value = "市code") | ||
42 | - private String codeCity; | ||
43 | - @ApiModelProperty(value = "区") | ||
44 | - private String nameCoun; | ||
45 | - @ApiModelProperty(value = "区code") | ||
46 | - private String codeCoun; | ||
47 | - @ApiModelProperty(value = "县") | ||
48 | - private String nameTown; | ||
49 | - @ApiModelProperty(value = "县code") | 35 | + @ApiModelProperty(value = "区域信息") |
36 | + private SysTownDTO sysTown; | ||
50 | private String codeTown; | 37 | private String codeTown; |
38 | + @ApiModelProperty(value = "二维码") | ||
39 | + private String qrCode; | ||
51 | } | 40 | } |
1 | +package org.thingsboard.server.common.data.yunteng.dto; | ||
2 | + | ||
3 | +import io.swagger.annotations.ApiModel; | ||
4 | +import io.swagger.annotations.ApiModelProperty; | ||
5 | +import lombok.Data; | ||
6 | +import lombok.RequiredArgsConstructor; | ||
7 | + | ||
8 | +@Data | ||
9 | +@ApiModel(value = "区域信息") | ||
10 | +@RequiredArgsConstructor | ||
11 | +public class SysTownDTO { | ||
12 | + @ApiModelProperty(value = "省") | ||
13 | + private String nameProv; | ||
14 | + @ApiModelProperty(value = "省code") | ||
15 | + private String codeProv; | ||
16 | + @ApiModelProperty(value = "市") | ||
17 | + private String nameCity; | ||
18 | + @ApiModelProperty(value = "市code") | ||
19 | + private String codeCity; | ||
20 | + @ApiModelProperty(value = "区") | ||
21 | + private String nameCoun; | ||
22 | + @ApiModelProperty(value = "区code") | ||
23 | + private String codeCoun; | ||
24 | + @ApiModelProperty(value = "县") | ||
25 | + private String nameTown; | ||
26 | + @ApiModelProperty(value = "县code") | ||
27 | + private String codeTown; | ||
28 | +} |
1 | +package org.thingsboard.server.common.data.yunteng.dto; | ||
2 | + | ||
3 | +import io.swagger.annotations.ApiModelProperty; | ||
4 | +import lombok.Data; | ||
5 | +import lombok.EqualsAndHashCode; | ||
6 | + | ||
7 | +import java.util.List; | ||
8 | + | ||
9 | +/** | ||
10 | + * @Description 场景联动触发器数据传输表 | ||
11 | + * @Author cxy | ||
12 | + * @Date 2021/11/24 17:32 | ||
13 | + */ | ||
14 | +@Data | ||
15 | +@EqualsAndHashCode(callSuper = true) | ||
16 | +public class TriggerDTO extends TenantDTO{ | ||
17 | + | ||
18 | + @ApiModelProperty(value = "所属设备id") | ||
19 | + private String deviceId; | ||
20 | + | ||
21 | + @ApiModelProperty(value = "触发方式") | ||
22 | + private String touchWay; | ||
23 | + | ||
24 | + @ApiModelProperty(value = "触发事件") | ||
25 | + private String triggerEvent; | ||
26 | + | ||
27 | + @ApiModelProperty(value = "属性选择") | ||
28 | + private String attributeChoose; | ||
29 | + | ||
30 | + @ApiModelProperty(value = "场景联动id") | ||
31 | + private String sceneLinkageId; | ||
32 | + | ||
33 | + @ApiModelProperty(value = "比较大小,0为=, 1为<, 2为 >,3为<=, 4为>=") | ||
34 | + private Integer compare; | ||
35 | + | ||
36 | + @ApiModelProperty(value = "请输入比较值") | ||
37 | + private String value; | ||
38 | + | ||
39 | + @ApiModelProperty(value = "设备集合") | ||
40 | + private List<DeviceDTO> deviceDTOList; | ||
41 | +} |
1 | +package org.thingsboard.server.dao.yunteng.entities; | ||
2 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
3 | +import lombok.Data; | ||
4 | +import lombok.EqualsAndHashCode; | ||
5 | +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | ||
6 | + | ||
7 | +/** @Description 执行动作 @Author cxy @Date 2021/11/24 17:24 */ | ||
8 | +@Data | ||
9 | +@TableName(value = ModelConstants.Table.IOTFS_DO_ACTION_TABLE_NAME,autoResultMap = true) | ||
10 | +@EqualsAndHashCode(callSuper = true) | ||
11 | +public class DoAction extends TenantBaseEntity { | ||
12 | + | ||
13 | + private static final long serialVersionUID = -5459834451418047957L; | ||
14 | + | ||
15 | + private String deviceId; | ||
16 | + /** 设备输出方式 */ | ||
17 | + private String outPut; | ||
18 | + /** 下发指令 */ | ||
19 | + private String command; | ||
20 | + | ||
21 | + /** 输出目标:设备,场景,其他 */ | ||
22 | + private String outTarget; | ||
23 | + | ||
24 | + /** 场景联动id */ | ||
25 | + private String sceneLinkageId; | ||
26 | +} |
1 | +package org.thingsboard.server.dao.yunteng.entities; | ||
2 | + | ||
3 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
4 | +import lombok.Data; | ||
5 | +import lombok.EqualsAndHashCode; | ||
6 | +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | ||
7 | + | ||
8 | +/** @Description 执行条件实体表 @Author cxy @Date 2021/11/24 17:16 */ | ||
9 | +@Data | ||
10 | +@TableName(value = ModelConstants.Table.IOTFS_DO_CONDITION_TABLE_NAME) | ||
11 | +@EqualsAndHashCode(callSuper = true) | ||
12 | +public class DoCondition extends TenantBaseEntity { | ||
13 | + private static final long serialVersionUID = 2827674377416477646L; | ||
14 | + /** 设备 */ | ||
15 | + private String deviceId; | ||
16 | + /** 设备状态 */ | ||
17 | + private String status; | ||
18 | + /** 设备属性 */ | ||
19 | + private String property; | ||
20 | + | ||
21 | + /** 比较大小: 0为=, 1为<, 2为 >,3为<=, 4为>= */ | ||
22 | + private Integer compare; | ||
23 | + | ||
24 | + /** 请输入比较值 */ | ||
25 | + private String value; | ||
26 | + | ||
27 | + private String sceneLinkageId; | ||
28 | +} |
1 | +package org.thingsboard.server.dao.yunteng.entities; | ||
2 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
3 | +import lombok.Data; | ||
4 | +import lombok.EqualsAndHashCode; | ||
5 | +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | ||
6 | + | ||
7 | +/** @Description 场景联动实体表 @Author cxy @Date 2021/11/24 16:40 */ | ||
8 | +@Data | ||
9 | +@TableName(value = ModelConstants.Table.IOTFS_SCENE_LINKAGE_TABLE_NAME) | ||
10 | +@EqualsAndHashCode(callSuper = true) | ||
11 | +public class SceneLinkage extends TenantBaseEntity { | ||
12 | + | ||
13 | + private static final long serialVersionUID = -306446373876239910L; | ||
14 | + | ||
15 | + private String name; | ||
16 | + /** | ||
17 | + * 0表示已停用,1表示启用 | ||
18 | + */ | ||
19 | + private Integer status; | ||
20 | + | ||
21 | + private String description; | ||
22 | + | ||
23 | + private String organizationId; | ||
24 | +} |
1 | package org.thingsboard.server.dao.yunteng.entities; | 1 | package org.thingsboard.server.dao.yunteng.entities; |
2 | 2 | ||
3 | -import com.baomidou.mybatisplus.annotation.TableField; | ||
4 | import com.baomidou.mybatisplus.annotation.TableName; | 3 | import com.baomidou.mybatisplus.annotation.TableName; |
5 | import lombok.Data; | 4 | import lombok.Data; |
6 | import lombok.RequiredArgsConstructor; | 5 | import lombok.RequiredArgsConstructor; |
@@ -36,25 +35,6 @@ public class SysEnterprise extends TenantBaseEntity { | @@ -36,25 +35,6 @@ public class SysEnterprise extends TenantBaseEntity { | ||
36 | private String tel; | 35 | private String tel; |
37 | /** 县code */ | 36 | /** 县code */ |
38 | private String codeTown; | 37 | private String codeTown; |
39 | - /** 省 */ | ||
40 | - @TableField(exist = false) | ||
41 | - private String nameProv; | ||
42 | - /** 省code */ | ||
43 | - @TableField(exist = false) | ||
44 | - private String codeProv; | ||
45 | - /** 市 */ | ||
46 | - @TableField(exist = false) | ||
47 | - private String nameCity; | ||
48 | - /** 市code */ | ||
49 | - @TableField(exist = false) | ||
50 | - private String codeCity; | ||
51 | - /** 区 */ | ||
52 | - @TableField(exist = false) | ||
53 | - private String nameCoun; | ||
54 | - /** 区code */ | ||
55 | - @TableField(exist = false) | ||
56 | - private String codeCoun; | ||
57 | - /** 县 */ | ||
58 | - @TableField(exist = false) | ||
59 | - private String nameTown; | 38 | + /** 二维码 */ |
39 | + private String qrCode; | ||
60 | } | 40 | } |
1 | +package org.thingsboard.server.dao.yunteng.entities; | ||
2 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
3 | +import lombok.Data; | ||
4 | +import lombok.EqualsAndHashCode; | ||
5 | +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | ||
6 | + | ||
7 | +/** @Description 触发器实体表 @Author cxy @Date 2021/11/24 17:06 */ | ||
8 | +@Data | ||
9 | +@TableName(value = ModelConstants.Table.IOTFS_TRIGGER_TABLE_NAME) | ||
10 | +@EqualsAndHashCode(callSuper = true) | ||
11 | +public class Trigger extends TenantBaseEntity { | ||
12 | + | ||
13 | + private static final long serialVersionUID = -1847061176808850967L; | ||
14 | + /** 设备 */ | ||
15 | + private String deviceId; | ||
16 | + /** 触发方式 */ | ||
17 | + private String touchWay; | ||
18 | + /** 触发事件 */ | ||
19 | + private String triggerEvent; | ||
20 | + /** 属性选择 */ | ||
21 | + private String attributeChoose; | ||
22 | + /** 场景联动id */ | ||
23 | + private String sceneLinkageId; | ||
24 | + /** 比较大小: 0为=, 1为<, 2为 >,3为<=, 4为>= */ | ||
25 | + private Integer compare; | ||
26 | + /** 请输入比较值 */ | ||
27 | + private String value; | ||
28 | +} |
1 | +package org.thingsboard.server.dao.yunteng.impl; | ||
2 | +import lombok.RequiredArgsConstructor; | ||
3 | +import org.springframework.stereotype.Service; | ||
4 | +import org.thingsboard.server.dao.yunteng.entities.DoAction; | ||
5 | +import org.thingsboard.server.dao.yunteng.mapper.DoActionMapper; | ||
6 | +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; | ||
7 | +import org.thingsboard.server.dao.yunteng.service.DoActionService; | ||
8 | + | ||
9 | +/** | ||
10 | + * @Description | ||
11 | + * @Author cxy | ||
12 | + * @Date 2021/12/6 20:23 | ||
13 | + */ | ||
14 | +@Service | ||
15 | +@RequiredArgsConstructor | ||
16 | +public class DoActionServiceImpl extends AbstractBaseService<DoActionMapper, DoAction> | ||
17 | + implements DoActionService { | ||
18 | +} |
1 | +package org.thingsboard.server.dao.yunteng.impl; | ||
2 | +import lombok.RequiredArgsConstructor; | ||
3 | +import org.springframework.stereotype.Service; | ||
4 | +import org.thingsboard.server.dao.yunteng.entities.DoCondition; | ||
5 | +import org.thingsboard.server.dao.yunteng.mapper.DoConditionMapper; | ||
6 | +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; | ||
7 | +import org.thingsboard.server.dao.yunteng.service.DoConditionService; | ||
8 | + | ||
9 | +/** | ||
10 | + * @Description | ||
11 | + * @Author cxy | ||
12 | + * @Date 2021/12/6 20:16 | ||
13 | + */ | ||
14 | +@Service | ||
15 | +@RequiredArgsConstructor | ||
16 | +public class DoConditionServiceImpl extends AbstractBaseService<DoConditionMapper, DoCondition> | ||
17 | + implements DoConditionService { | ||
18 | +} |
@@ -46,7 +46,8 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -46,7 +46,8 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
46 | private final UserRoleMapper userRoleMapper; | 46 | private final UserRoleMapper userRoleMapper; |
47 | 47 | ||
48 | @Override | 48 | @Override |
49 | - public PageData<RoleDTO> page(boolean isSysadmin,boolean isPlatformAdmin, String tenantId,Map<String, Object> queryMap) { | 49 | + public PageData<RoleDTO> page( |
50 | + boolean isSysadmin, boolean isPlatformAdmin, String tenantId, Map<String, Object> queryMap) { | ||
50 | IPage<Role> roleIPage = | 51 | IPage<Role> roleIPage = |
51 | baseMapper.selectPage( | 52 | baseMapper.selectPage( |
52 | getPage(queryMap, "create_time", false), | 53 | getPage(queryMap, "create_time", false), |
@@ -56,14 +57,10 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -56,14 +57,10 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
56 | .eq(queryMap.get("roleType") != null, Role::getRoleType, queryMap.get("roleType")) | 57 | .eq(queryMap.get("roleType") != null, Role::getRoleType, queryMap.get("roleType")) |
57 | .ne(queryMap.get("roleType") == null, Role::getRoleType, RoleEnum.TENANT_ADMIN) | 58 | .ne(queryMap.get("roleType") == null, Role::getRoleType, RoleEnum.TENANT_ADMIN) |
58 | .ne( | 59 | .ne( |
59 | - queryMap.get("roleType") == null | ||
60 | - && isPlatformAdmin, | 60 | + queryMap.get("roleType") == null && isPlatformAdmin, |
61 | Role::getRoleType, | 61 | Role::getRoleType, |
62 | RoleEnum.SYS_ADMIN) | 62 | RoleEnum.SYS_ADMIN) |
63 | - .eq( | ||
64 | - !isSysadmin, | ||
65 | - Role::getTenantId, | ||
66 | - tenantId) | 63 | + .eq(!isSysadmin, Role::getTenantId, tenantId) |
67 | .like( | 64 | .like( |
68 | queryMap.get("roleName") != null, | 65 | queryMap.get("roleName") != null, |
69 | Role::getName, | 66 | Role::getName, |
@@ -73,14 +70,11 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -73,14 +70,11 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
73 | 70 | ||
74 | @Override | 71 | @Override |
75 | @Transactional | 72 | @Transactional |
76 | - public boolean deleteRole(String[] roleIds,String tenantId) { | 73 | + public boolean deleteRole(String[] roleIds, String tenantId) { |
77 | Set<String> ids = Set.of(roleIds); | 74 | Set<String> ids = Set.of(roleIds); |
78 | int notTenantMenuCount = | 75 | int notTenantMenuCount = |
79 | baseMapper.selectCount( | 76 | baseMapper.selectCount( |
80 | - new QueryWrapper<Role>() | ||
81 | - .lambda() | ||
82 | - .ne(Role::getTenantId, tenantId) | ||
83 | - .in(Role::getId, ids)); | 77 | + new QueryWrapper<Role>().lambda().ne(Role::getTenantId, tenantId).in(Role::getId, ids)); |
84 | if (notTenantMenuCount > 0) { | 78 | if (notTenantMenuCount > 0) { |
85 | throw new AccessDeniedException("cannot delete role that not create by you"); | 79 | throw new AccessDeniedException("cannot delete role that not create by you"); |
86 | } | 80 | } |
@@ -99,40 +93,32 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -99,40 +93,32 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
99 | } | 93 | } |
100 | 94 | ||
101 | @Override | 95 | @Override |
102 | - public Set<String> getPermissions(boolean isSysadmin,boolean isTenantAdmin,String tenantId,String useerId) { | 96 | + public Set<String> getPermissions( |
97 | + boolean isSysadmin, boolean isTenantAdmin, String tenantId, String useerId) { | ||
103 | Set<String> permissions = Sets.newHashSet(); | 98 | Set<String> permissions = Sets.newHashSet(); |
104 | Set<String> allPermission; | 99 | Set<String> allPermission; |
105 | String cacheKey; | 100 | String cacheKey; |
106 | boolean cachePresent; | 101 | boolean cachePresent; |
107 | if (isSysadmin) { | 102 | if (isSysadmin) { |
108 | - cacheKey = | ||
109 | - FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + RoleEnum.SYS_ADMIN.name(); | 103 | + cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + RoleEnum.SYS_ADMIN.name(); |
110 | Optional<Set<String>> optionalPermission = | 104 | Optional<Set<String>> optionalPermission = |
111 | cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey); | 105 | cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey); |
112 | cachePresent = optionalPermission.isPresent(); | 106 | cachePresent = optionalPermission.isPresent(); |
113 | allPermission = optionalPermission.orElseGet(menuMapper::getAllPermission); | 107 | allPermission = optionalPermission.orElseGet(menuMapper::getAllPermission); |
114 | } else if (isTenantAdmin) { | 108 | } else if (isTenantAdmin) { |
115 | - cacheKey = | ||
116 | - FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX | ||
117 | - + tenantId; | 109 | + cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + tenantId; |
118 | Optional<Set<String>> optionalPermission = | 110 | Optional<Set<String>> optionalPermission = |
119 | cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey); | 111 | cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey); |
120 | cachePresent = optionalPermission.isPresent(); | 112 | cachePresent = optionalPermission.isPresent(); |
121 | allPermission = | 113 | allPermission = |
122 | - optionalPermission.orElseGet( | ||
123 | - () -> | ||
124 | - menuMapper.getAllPermissionsByTenantId(tenantId)); | 114 | + optionalPermission.orElseGet(() -> menuMapper.getAllPermissionsByTenantId(tenantId)); |
125 | } else { | 115 | } else { |
126 | - cacheKey = | ||
127 | - FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX | ||
128 | - + useerId; | 116 | + cacheKey = FastIotConstants.CacheConfigKey.USER_PERMISSION_PREFIX + useerId; |
129 | Optional<Set<String>> optionalPermission = | 117 | Optional<Set<String>> optionalPermission = |
130 | cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey); | 118 | cacheUtils.get(FastIotConstants.CacheConfigKey.CACHE_CONFIG_KEY, cacheKey); |
131 | cachePresent = optionalPermission.isPresent(); | 119 | cachePresent = optionalPermission.isPresent(); |
132 | allPermission = | 120 | allPermission = |
133 | - optionalPermission.orElseGet( | ||
134 | - () -> | ||
135 | - menuMapper.getAllPermissionsByUserId(useerId)); | 121 | + optionalPermission.orElseGet(() -> menuMapper.getAllPermissionsByUserId(useerId)); |
136 | } | 122 | } |
137 | if (cachePresent) { | 123 | if (cachePresent) { |
138 | return allPermission; | 124 | return allPermission; |
@@ -146,16 +132,13 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -146,16 +132,13 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
146 | 132 | ||
147 | @Override | 133 | @Override |
148 | @Transactional | 134 | @Transactional |
149 | - public void updateRoleStatus(String roleId, int status,boolean isSysadmin,String tenantId) { | 135 | + public void updateRoleStatus(String roleId, int status, boolean isSysadmin, String tenantId) { |
150 | Optional.ofNullable( | 136 | Optional.ofNullable( |
151 | baseMapper.selectOne( | 137 | baseMapper.selectOne( |
152 | new QueryWrapper<Role>() | 138 | new QueryWrapper<Role>() |
153 | .lambda() | 139 | .lambda() |
154 | .eq(Role::getId, roleId) | 140 | .eq(Role::getId, roleId) |
155 | - .eq( | ||
156 | - !isSysadmin, | ||
157 | - Role::getTenantId, | ||
158 | - tenantId))) | 141 | + .eq(!isSysadmin, Role::getTenantId, tenantId))) |
159 | .ifPresent( | 142 | .ifPresent( |
160 | role -> { | 143 | role -> { |
161 | role.setEnabled(status == 1); | 144 | role.setEnabled(status == 1); |
@@ -165,15 +148,15 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -165,15 +148,15 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
165 | 148 | ||
166 | @Override | 149 | @Override |
167 | @Transactional | 150 | @Transactional |
168 | - public RoleDTO saveOrUpdateRoleInfoWithMenu(RoleReqDTO roleReqDTO,boolean isSysadmin,boolean isPlatformAdmin,String tenantId) { | 151 | + public RoleDTO saveOrUpdateRoleInfoWithMenu( |
152 | + RoleReqDTO roleReqDTO, boolean isSysadmin, boolean isPlatformAdmin, String tenantId) { | ||
169 | Role role; | 153 | Role role; |
170 | // 默认普通管理员角色,即租户管理员添加的角色 | 154 | // 默认普通管理员角色,即租户管理员添加的角色 |
171 | var roleType = RoleEnum.CUSTOMER_USER.name(); | 155 | var roleType = RoleEnum.CUSTOMER_USER.name(); |
172 | if (null != roleReqDTO.getRoleType()) { | 156 | if (null != roleReqDTO.getRoleType()) { |
173 | roleType = roleReqDTO.getRoleType().name(); | 157 | roleType = roleReqDTO.getRoleType().name(); |
174 | } else { | 158 | } else { |
175 | - if (isSysadmin | ||
176 | - || isPlatformAdmin) { | 159 | + if (isSysadmin || isPlatformAdmin) { |
177 | roleType = RoleEnum.PLATFORM_ADMIN.name(); | 160 | roleType = RoleEnum.PLATFORM_ADMIN.name(); |
178 | } | 161 | } |
179 | } | 162 | } |
@@ -185,10 +168,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -185,10 +168,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
185 | new QueryWrapper<Role>() | 168 | new QueryWrapper<Role>() |
186 | .lambda() | 169 | .lambda() |
187 | .eq(Role::getId, roleReqDTO.getId()) | 170 | .eq(Role::getId, roleReqDTO.getId()) |
188 | - .eq( | ||
189 | - !isSysadmin, | ||
190 | - Role::getTenantId, | ||
191 | - tenantId)); | 171 | + .eq(!isSysadmin, Role::getTenantId, tenantId)); |
192 | if (role == null) { | 172 | if (role == null) { |
193 | return null; | 173 | return null; |
194 | } else { | 174 | } else { |
@@ -223,27 +203,25 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | @@ -223,27 +203,25 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple | ||
223 | tenantRoles.forEach( | 203 | tenantRoles.forEach( |
224 | tenantRole -> { | 204 | tenantRole -> { |
225 | String updateTenantId = tenantRole.getTenantId(); | 205 | String updateTenantId = tenantRole.getTenantId(); |
226 | - int deleteCount = | ||
227 | - tenantMenuMapper.delete( | ||
228 | - new QueryWrapper<TenantMenu>() | ||
229 | - .lambda() | ||
230 | - .eq(TenantMenu::getTenantId, updateTenantId)); | ||
231 | - if (deleteCount > 0) { | ||
232 | - menus.forEach( | ||
233 | - menu -> { | ||
234 | - TenantMenu tenantMenu = new TenantMenu(); | ||
235 | - tenantMenu.setMenuId(menu); | ||
236 | - tenantMenu.setTenantId(updateTenantId); | ||
237 | - tenantMenuMapper.insert(tenantMenu); | ||
238 | - }); | ||
239 | - } | 206 | + tenantMenuMapper.delete( |
207 | + new QueryWrapper<TenantMenu>() | ||
208 | + .lambda() | ||
209 | + .eq(TenantMenu::getTenantId, updateTenantId)); | ||
210 | + menus.forEach( | ||
211 | + menu -> { | ||
212 | + TenantMenu tenantMenu = new TenantMenu(); | ||
213 | + tenantMenu.setMenuId(menu); | ||
214 | + tenantMenu.setTenantId(updateTenantId); | ||
215 | + tenantMenuMapper.insert(tenantMenu); | ||
216 | + }); | ||
240 | }); | 217 | }); |
241 | } | 218 | } |
242 | return role.getDTO(RoleDTO.class); | 219 | return role.getDTO(RoleDTO.class); |
243 | } | 220 | } |
244 | 221 | ||
245 | @Override | 222 | @Override |
246 | - public List<RoleDTO> findRoleInfo(boolean isTenantAdmin,String tenantId,String userId,RoleDTO roleDTO) { | 223 | + public List<RoleDTO> findRoleInfo( |
224 | + boolean isTenantAdmin, String tenantId, String userId, RoleDTO roleDTO) { | ||
247 | if (StringUtils.isEmpty(roleDTO.getTenantId())) { | 225 | if (StringUtils.isEmpty(roleDTO.getTenantId())) { |
248 | roleDTO.setTenantId(tenantId); | 226 | roleDTO.setTenantId(tenantId); |
249 | } | 227 | } |
1 | +package org.thingsboard.server.dao.yunteng.impl; | ||
2 | + | ||
3 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||
4 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
5 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
6 | +import lombok.RequiredArgsConstructor; | ||
7 | +import org.apache.commons.lang3.StringUtils; | ||
8 | +import org.springframework.stereotype.Service; | ||
9 | +import org.springframework.transaction.annotation.Transactional; | ||
10 | +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; | ||
11 | +import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; | ||
12 | +import org.thingsboard.server.common.data.yunteng.dto.*; | ||
13 | +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; | ||
14 | +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData; | ||
15 | +import org.thingsboard.server.dao.exception.DataValidationException; | ||
16 | +import org.thingsboard.server.dao.yunteng.entities.*; | ||
17 | +import org.thingsboard.server.dao.yunteng.mapper.*; | ||
18 | +import org.thingsboard.server.dao.yunteng.service.*; | ||
19 | + | ||
20 | +import java.util.*; | ||
21 | +import java.util.stream.Collectors; | ||
22 | + | ||
23 | +/** @Description 场景联动业务实现层 @Author cxy @Date 2021/11/25 11:22 */ | ||
24 | +@Service | ||
25 | +@RequiredArgsConstructor | ||
26 | +public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMapper, SceneLinkage> | ||
27 | + implements SceneLinkageService { | ||
28 | + | ||
29 | + private final SceneLinkageMapper sceneLinkageMapper; | ||
30 | + private final DeviceMapper deviceMapper; | ||
31 | + private final DoActionMapper doActionMapper; | ||
32 | + private final DoConditionMapper doConditionMapper; | ||
33 | + private final TriggerMapper triggerMapper; | ||
34 | + private final OrganizationMapper organizationMapper; | ||
35 | + private final TriggerServiceImpl triggerService; | ||
36 | + private final DoConditionServiceImpl doConditionService; | ||
37 | + private final DoActionServiceImpl doActionService; | ||
38 | + /** | ||
39 | + * 增加场景联动,触发器可以多个,执行条件可以多个,执行动作可以多个 | ||
40 | + * | ||
41 | + * @param sceneLinkageDTO 场景对象 | ||
42 | + * @return SceneLinkageDTO 场景 | ||
43 | + */ | ||
44 | + @Override | ||
45 | + @Transactional | ||
46 | + public SceneLinkageDTO saveScenelinkage(SceneLinkageDTO sceneLinkageDTO, String tenantId) { | ||
47 | + sceneLinkageDTO.setTenantId(tenantId); | ||
48 | + // 第一步保存场景,获取场景ID | ||
49 | + // 场景对象 | ||
50 | + SceneLinkage sceneLinkage = sceneLinkageDTO.getEntity(SceneLinkage.class); | ||
51 | + // 新增 | ||
52 | + int insert = sceneLinkageMapper.insert(sceneLinkage); | ||
53 | + if (insert > 0) { | ||
54 | + sceneLinkage.copyToDTO(sceneLinkageDTO); | ||
55 | + } | ||
56 | + // 拿到场景id | ||
57 | + String sceneLinkageId = sceneLinkage.getId(); | ||
58 | + // 拿到场景id的组织,假如是云腾公司的组织id | ||
59 | + String organizationId = sceneLinkage.getOrganizationId(); | ||
60 | + // 拿到当前组织id所包含的设备集合 | ||
61 | + List<YtDevice> deviceList = | ||
62 | + deviceMapper.selectList( | ||
63 | + new QueryWrapper<YtDevice>() | ||
64 | + .lambda() | ||
65 | + .select(YtDevice::getId) | ||
66 | + .eq( | ||
67 | + StringUtils.isNoneBlank(organizationId), | ||
68 | + YtDevice::getOrganizationId, | ||
69 | + organizationId)); | ||
70 | + // 判断设备id是否包含 | ||
71 | + List<TriggerDTO> triggerDTOS = sceneLinkageDTO.getTriggers(); | ||
72 | + if (triggerDTOS != null) { | ||
73 | + boolean condition = false; | ||
74 | + for (TriggerDTO triggerDTO : triggerDTOS) { | ||
75 | + String deviceId = triggerDTO.getDeviceId(); | ||
76 | + if (deviceId == null) { | ||
77 | + break; | ||
78 | + } | ||
79 | + for (YtDevice device : deviceList) { | ||
80 | + String id = device.getId(); | ||
81 | + if (deviceId.equals(id)) { | ||
82 | + triggerDTO.setDeviceId(id); | ||
83 | + condition = true; | ||
84 | + break; | ||
85 | + } | ||
86 | + } | ||
87 | + if (!condition) { | ||
88 | + throw new DataValidationException("触发器里面该设备不存在"); | ||
89 | + } | ||
90 | + } | ||
91 | + } | ||
92 | + List<DoConditionDTO> doConditionList = sceneLinkageDTO.getDoConditions(); | ||
93 | + // 定义常量,如果满足条件,则新增,循环完了不满足则抛出异常 | ||
94 | + if (doConditionList != null) { | ||
95 | + boolean conditionC = false; | ||
96 | + for (DoConditionDTO conditionDTO : doConditionList) { | ||
97 | + String deviceIdC = conditionDTO.getDeviceId(); | ||
98 | + if (deviceIdC == null) { | ||
99 | + break; | ||
100 | + } | ||
101 | + for (YtDevice deviceC : deviceList) { | ||
102 | + String id = deviceC.getId(); | ||
103 | + if (deviceIdC.equals(id)) { | ||
104 | + conditionDTO.setDeviceId(id); | ||
105 | + conditionC = true; | ||
106 | + break; | ||
107 | + } | ||
108 | + } | ||
109 | + if (!conditionC) { | ||
110 | + throw new DataValidationException("执行条件里面该设备不存在"); | ||
111 | + } | ||
112 | + } | ||
113 | + } | ||
114 | + List<DoActionDTO> doActionDTOList = sceneLinkageDTO.getDoActions(); | ||
115 | + // 定义常量,如果满足条件,则新增,循环完了不满足则抛出异常 | ||
116 | + if (doActionDTOList != null) { | ||
117 | + boolean conditionA = false; | ||
118 | + for (DoActionDTO actionDTO : doActionDTOList) { | ||
119 | + String deviceIdA = actionDTO.getDeviceId(); | ||
120 | + if (deviceIdA == null) { | ||
121 | + break; | ||
122 | + } | ||
123 | + for (YtDevice deviceA : deviceList) { | ||
124 | + String id = deviceA.getId(); | ||
125 | + if (deviceIdA.equals(id)) { | ||
126 | + actionDTO.setDeviceId(id); | ||
127 | + conditionA = true; | ||
128 | + break; | ||
129 | + } | ||
130 | + } | ||
131 | + if (!conditionA) { | ||
132 | + throw new DataValidationException("执行动作里面该设备不存在"); | ||
133 | + } | ||
134 | + } | ||
135 | + } | ||
136 | + // 3.批量新增Trigger | ||
137 | + List<Trigger> collect = | ||
138 | + sceneLinkageDTO.getTriggers().stream() | ||
139 | + .peek(triggerDTO -> triggerDTO.setSceneLinkageId(sceneLinkageId)) | ||
140 | + .peek(triggerDTO -> triggerDTO.setTenantId(tenantId)) | ||
141 | + .map(triggerDTO -> triggerDTO.getEntity(Trigger.class)) | ||
142 | + .collect(Collectors.toList()); | ||
143 | + triggerService.insertBatch(collect, 1000); | ||
144 | + // 4.批量新增执行条件 | ||
145 | + List<DoCondition> collectC = | ||
146 | + sceneLinkageDTO.getDoConditions().stream() | ||
147 | + .peek(doConditionDTO -> doConditionDTO.setSceneLinkageId(sceneLinkageId)) | ||
148 | + .peek(doConditionDTO -> doConditionDTO.setTenantId(tenantId)) | ||
149 | + .map(doConditionDTO -> doConditionDTO.getEntity(DoCondition.class)) | ||
150 | + .collect(Collectors.toList()); | ||
151 | + doConditionService.insertBatch(collectC, 1000); | ||
152 | + // 5.批量新增执行动作 | ||
153 | + List<DoAction> collectA = | ||
154 | + sceneLinkageDTO.getDoActions().stream() | ||
155 | + .peek(doActionDTO -> doActionDTO.setSceneLinkageId(sceneLinkageId)) | ||
156 | + .peek(doActionDTO -> doActionDTO.setTenantId(tenantId)) | ||
157 | + .map(doActionDTO -> doActionDTO.getEntity(DoAction.class)) | ||
158 | + .collect(Collectors.toList()); | ||
159 | + doActionService.insertBatch(collectA, 1000); | ||
160 | + return sceneLinkageDTO; | ||
161 | + } | ||
162 | + | ||
163 | + /** | ||
164 | + * byId删除场景联动 | ||
165 | + * | ||
166 | + * @param ids 删除的ids | ||
167 | + */ | ||
168 | + @Override | ||
169 | + public void deleteSceneLinkage(Set<String> ids, String tenantId) { | ||
170 | + // 删除场景,一并删除数据库触发器,执行条件,执行动作的数据 | ||
171 | + triggerMapper.delete( | ||
172 | + new LambdaQueryWrapper<Trigger>() | ||
173 | + .eq(Trigger::getTenantId, tenantId) | ||
174 | + .in(Trigger::getSceneLinkageId, ids)); | ||
175 | + doConditionMapper.delete( | ||
176 | + new LambdaQueryWrapper<DoCondition>() | ||
177 | + .eq(DoCondition::getTenantId, tenantId) | ||
178 | + .in(DoCondition::getSceneLinkageId, ids)); | ||
179 | + doActionMapper.delete( | ||
180 | + new LambdaQueryWrapper<DoAction>() | ||
181 | + .eq(DoAction::getTenantId, tenantId) | ||
182 | + .in(DoAction::getSceneLinkageId, ids)); | ||
183 | + LambdaQueryWrapper<SceneLinkage> Wrapper = | ||
184 | + new QueryWrapper<SceneLinkage>() | ||
185 | + .lambda() | ||
186 | + .eq(SceneLinkage::getTenantId, tenantId) | ||
187 | + .in(SceneLinkage::getId, ids); | ||
188 | + sceneLinkageMapper.delete(Wrapper); | ||
189 | + } | ||
190 | + /** | ||
191 | + * 修改场景联动和包含的触发器,执行条件,执行动作 | ||
192 | + * | ||
193 | + * @param sceneLinkageDTO 场景 | ||
194 | + * @return SceneLinkageDTO 场景 | ||
195 | + */ | ||
196 | + @Override | ||
197 | + @Transactional | ||
198 | + public SceneLinkageDTO updateSceneLinkage(SceneLinkageDTO sceneLinkageDTO) { | ||
199 | + // 获取场景 | ||
200 | + SceneLinkage sceneLinkage = baseMapper.selectById(sceneLinkageDTO.getId()); | ||
201 | + if (sceneLinkage == null) { | ||
202 | + throw new YtDataValidationException("此场景已不存在"); | ||
203 | + } | ||
204 | + sceneLinkageDTO.copyToEntity(sceneLinkage); | ||
205 | + | ||
206 | + updateTrigger(sceneLinkageDTO); | ||
207 | + updateDoAction(sceneLinkageDTO); | ||
208 | + updateDoCondition(sceneLinkageDTO); | ||
209 | + sceneLinkageMapper.updateById(sceneLinkage); | ||
210 | + return sceneLinkage.getDTO(SceneLinkageDTO.class); | ||
211 | + } | ||
212 | + /** | ||
213 | + * 修改触发器 | ||
214 | + * | ||
215 | + * @param sceneLinkageDTO 修改场景 | ||
216 | + */ | ||
217 | + private void updateTrigger(SceneLinkageDTO sceneLinkageDTO) { | ||
218 | + // 先删除触发器 | ||
219 | + triggerMapper.delete( | ||
220 | + new QueryWrapper<Trigger>() | ||
221 | + .lambda() | ||
222 | + .eq( | ||
223 | + StringUtils.isNoneBlank(sceneLinkageDTO.getId()), | ||
224 | + Trigger::getSceneLinkageId, | ||
225 | + sceneLinkageDTO.getId())); | ||
226 | + // 如果获取的触发器不为空,进行添加操作 | ||
227 | + if (null != sceneLinkageDTO.getTriggers() && !sceneLinkageDTO.getTriggers().isEmpty()) { | ||
228 | + sceneLinkageDTO | ||
229 | + .getTriggers() | ||
230 | + .forEach( | ||
231 | + triggerDTO -> { | ||
232 | + Trigger trigger = new Trigger(); | ||
233 | + triggerDTO.copyToEntity(trigger); | ||
234 | + triggerMapper.insert(trigger); | ||
235 | + }); | ||
236 | + } | ||
237 | + } | ||
238 | + /** | ||
239 | + * 修改执行动作 | ||
240 | + * | ||
241 | + * @param sceneLinkageDTO 场景 | ||
242 | + */ | ||
243 | + private void updateDoAction(SceneLinkageDTO sceneLinkageDTO) { | ||
244 | + doActionMapper.delete( | ||
245 | + new QueryWrapper<DoAction>() | ||
246 | + .lambda() | ||
247 | + .eq( | ||
248 | + StringUtils.isNoneBlank(sceneLinkageDTO.getId()), | ||
249 | + DoAction::getSceneLinkageId, | ||
250 | + sceneLinkageDTO.getId())); | ||
251 | + if (null != sceneLinkageDTO.getDoActions() && !sceneLinkageDTO.getDoActions().isEmpty()) { | ||
252 | + sceneLinkageDTO | ||
253 | + .getDoActions() | ||
254 | + .forEach( | ||
255 | + doActionDTO -> { | ||
256 | + DoAction doAction = new DoAction(); | ||
257 | + doActionDTO.copyToEntity(doAction); | ||
258 | + doActionMapper.insert(doAction); | ||
259 | + }); | ||
260 | + } | ||
261 | + } | ||
262 | + /** | ||
263 | + * 修改执行动作 | ||
264 | + * | ||
265 | + * @param sceneLinkageDTO 场景 | ||
266 | + */ | ||
267 | + private void updateDoCondition(SceneLinkageDTO sceneLinkageDTO) { | ||
268 | + doConditionMapper.delete( | ||
269 | + new QueryWrapper<DoCondition>() | ||
270 | + .lambda() | ||
271 | + .eq( | ||
272 | + StringUtils.isNoneBlank(sceneLinkageDTO.getId()), | ||
273 | + DoCondition::getSceneLinkageId, | ||
274 | + sceneLinkageDTO.getId())); | ||
275 | + if (null != sceneLinkageDTO.getDoConditions() && !sceneLinkageDTO.getDoActions().isEmpty()) { | ||
276 | + sceneLinkageDTO | ||
277 | + .getDoConditions() | ||
278 | + .forEach( | ||
279 | + doConditionDTO -> { | ||
280 | + DoCondition doCondition = new DoCondition(); | ||
281 | + doConditionDTO.copyToEntity(doCondition); | ||
282 | + doConditionMapper.insert(doCondition); | ||
283 | + }); | ||
284 | + } | ||
285 | + } | ||
286 | + /** | ||
287 | + * 通过分页查询 | ||
288 | + * | ||
289 | + * @param queryMap 封装参数 | ||
290 | + * @return SceneLinkageDTO 场景对象 | ||
291 | + */ | ||
292 | + @Override | ||
293 | + @Transactional | ||
294 | + public PageData<SceneLinkageDTO> page(Map<String, Object> queryMap, String tenantId) { | ||
295 | + queryMap.put("tenantCode", tenantId); | ||
296 | + // 拿到传入的组织id | ||
297 | + String organizationId = (String) queryMap.get("organizationId"); | ||
298 | + // 不为空 | ||
299 | + if (!StringUtils.isEmpty(organizationId)) { | ||
300 | + // 新建组织集合 | ||
301 | + List<String> organizationIds = new ArrayList<>(); | ||
302 | + // 添加拿到的组织 | ||
303 | + organizationIds.add(organizationId); | ||
304 | + // 查询该组织的所有子类 | ||
305 | + List<OrganizationDTO> organizationDTOS = | ||
306 | + organizationMapper.findOrganizationTreeList(tenantId, organizationIds); | ||
307 | + // 遍历组织id | ||
308 | + List<String> queryOrganizationIds = new ArrayList<>(); | ||
309 | + organizationDTOS.forEach( | ||
310 | + item -> { | ||
311 | + queryOrganizationIds.add(item.getId()); | ||
312 | + }); | ||
313 | + queryMap.put("organizationIds", queryOrganizationIds); | ||
314 | + } | ||
315 | + IPage<SceneLinkage> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false); | ||
316 | + IPage<SceneLinkageDTO> scenePage = baseMapper.getScenePage(page, queryMap); | ||
317 | + scenePage | ||
318 | + .getRecords() | ||
319 | + .forEach( | ||
320 | + sceneLinkageDTO -> { | ||
321 | + List<TriggerDTO> collect = | ||
322 | + triggerMapper | ||
323 | + .selectList( | ||
324 | + new LambdaQueryWrapper<Trigger>() | ||
325 | + .in(Trigger::getSceneLinkageId, sceneLinkageDTO.getId())) | ||
326 | + .stream() | ||
327 | + .map(trigger -> trigger.getDTO(TriggerDTO.class)) | ||
328 | + .collect(Collectors.toList()); | ||
329 | + sceneLinkageDTO.setTriggers(collect); | ||
330 | + }); | ||
331 | + return getPageData(scenePage, SceneLinkageDTO.class); | ||
332 | + } | ||
333 | + /** 获取当前租户的场景联动 */ | ||
334 | + @Override | ||
335 | + public List<SceneLinkageDTO> findSceneLinkage(SceneLinkageDTO sceneLinkageDTO, String tenantId) { | ||
336 | + List<SceneLinkage> scenelinkageList = | ||
337 | + baseMapper.selectList( | ||
338 | + new QueryWrapper<SceneLinkage>() | ||
339 | + .lambda() | ||
340 | + .eq(SceneLinkage::getTenantId, tenantId) | ||
341 | + .like(SceneLinkage::getName, sceneLinkageDTO.getName()) | ||
342 | + .like(SceneLinkage::getOrganizationId, sceneLinkageDTO.getOrganizationId()) | ||
343 | + .like(SceneLinkage::getStatus, sceneLinkageDTO.getStatus())); | ||
344 | + return ReflectUtils.sourceToTarget(scenelinkageList, SceneLinkageDTO.class); | ||
345 | + } | ||
346 | + /** | ||
347 | + * 修改当前场景联动的状态,启用或者停用 | ||
348 | + * | ||
349 | + * @param sceneLinkageId 场景id | ||
350 | + * @param status 状态 | ||
351 | + */ | ||
352 | + @Override | ||
353 | + @Transactional(rollbackFor = Exception.class) | ||
354 | + public void updateSceneStatus(String sceneLinkageId, int status, String tenantId) { | ||
355 | + Optional.ofNullable( | ||
356 | + baseMapper.selectOne( | ||
357 | + new QueryWrapper<SceneLinkage>() | ||
358 | + .lambda() | ||
359 | + .eq(SceneLinkage::getId, sceneLinkageId) | ||
360 | + .eq(SceneLinkage::getTenantId, tenantId))) | ||
361 | + .ifPresent( | ||
362 | + sceneLinkage -> { | ||
363 | + sceneLinkage.setStatus(status); | ||
364 | + baseMapper.updateById(sceneLinkage); | ||
365 | + }); | ||
366 | + } | ||
367 | + /** | ||
368 | + * 通过组织id查询全部的设备集合 | ||
369 | + * | ||
370 | + * @param organizationId | ||
371 | + * @return 设备集合 | ||
372 | + */ | ||
373 | + @Override | ||
374 | + public List<DeviceDTO> findDeviceList(String organizationId) { | ||
375 | + // 拿到当前组织id所包含的设备集合 | ||
376 | + List<YtDevice> deviceList = | ||
377 | + deviceMapper.selectList( | ||
378 | + new QueryWrapper<YtDevice>() | ||
379 | + .lambda() | ||
380 | + .eq( | ||
381 | + StringUtils.isNoneBlank(organizationId), | ||
382 | + YtDevice::getOrganizationId, | ||
383 | + organizationId)); | ||
384 | + List<DeviceDTO> deviceDTOList = | ||
385 | + deviceList.stream() | ||
386 | + .map(device -> device.getDTO(DeviceDTO.class)) | ||
387 | + .collect(Collectors.toList()); | ||
388 | + return ReflectUtils.sourceToTarget(deviceDTOList, DeviceDTO.class); | ||
389 | + } | ||
390 | +} |
@@ -30,8 +30,7 @@ public class SysEnterpriseServiceImpl | @@ -30,8 +30,7 @@ public class SysEnterpriseServiceImpl | ||
30 | 30 | ||
31 | @Override | 31 | @Override |
32 | public SysEnterpriseDTO get(String tenantId) { | 32 | public SysEnterpriseDTO get(String tenantId) { |
33 | - SysEnterprise sysEnterprise = baseMapper.get(tenantId).getEntity(SysEnterprise.class); | ||
34 | - return sysEnterprise == null ? null : sysEnterprise.getDTO(SysEnterpriseDTO.class); | 33 | + return baseMapper.get(tenantId); |
35 | } | 34 | } |
36 | 35 | ||
37 | @Override | 36 | @Override |
@@ -47,15 +47,14 @@ public class SysNoticeServiceImpl extends AbstractBaseService<SysNoticeMapper, S | @@ -47,15 +47,14 @@ public class SysNoticeServiceImpl extends AbstractBaseService<SysNoticeMapper, S | ||
47 | public PageData<SysNoticeDTO> page(Map<String, Object> queryMap) { | 47 | public PageData<SysNoticeDTO> page(Map<String, Object> queryMap) { |
48 | IPage<SysNotice> sysNoticeIPage = | 48 | IPage<SysNotice> sysNoticeIPage = |
49 | getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, true); | 49 | getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, true); |
50 | - sysNoticeIPage = baseMapper.page(sysNoticeIPage, queryMap); | 50 | + baseMapper.page(sysNoticeIPage, queryMap); |
51 | return getPageData(sysNoticeIPage, SysNoticeDTO.class); | 51 | return getPageData(sysNoticeIPage, SysNoticeDTO.class); |
52 | } | 52 | } |
53 | 53 | ||
54 | @Override | 54 | @Override |
55 | public SysNoticeDTO get(String id,String tenantId) { | 55 | public SysNoticeDTO get(String id,String tenantId) { |
56 | return baseMapper | 56 | return baseMapper |
57 | - .get(id, tenantId) | ||
58 | - .getDTO(SysNoticeDTO.class); | 57 | + .get(id, tenantId); |
59 | } | 58 | } |
60 | 59 | ||
61 | @Override | 60 | @Override |
1 | +package org.thingsboard.server.dao.yunteng.impl; | ||
2 | +import lombok.RequiredArgsConstructor; | ||
3 | +import org.springframework.stereotype.Service; | ||
4 | +import org.thingsboard.server.dao.yunteng.entities.Trigger; | ||
5 | +import org.thingsboard.server.dao.yunteng.mapper.TriggerMapper; | ||
6 | +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; | ||
7 | +import org.thingsboard.server.dao.yunteng.service.TriggerService; | ||
8 | + | ||
9 | +/** | ||
10 | + * @Description | ||
11 | + * @Author cxy | ||
12 | + * @Date 2021/12/6 19:53 | ||
13 | + */ | ||
14 | +@Service | ||
15 | +@RequiredArgsConstructor | ||
16 | +public class TriggerServiceImpl extends AbstractBaseService<TriggerMapper, Trigger> | ||
17 | + implements TriggerService { | ||
18 | +} |
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.DoAction; | ||
6 | + | ||
7 | +/** | ||
8 | + * @Description 执行动作mapper | ||
9 | + * @Author cxy | ||
10 | + * @Date 2021/11/26 9:38 | ||
11 | + */ | ||
12 | +@Mapper | ||
13 | +public interface DoActionMapper extends BaseMapper<DoAction> { | ||
14 | +} |
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.DoCondition; | ||
6 | + | ||
7 | +/** | ||
8 | + * @Description 执行条件mapper | ||
9 | + * @Author cxy | ||
10 | + * @Date 2021/11/26 9:39 | ||
11 | + */ | ||
12 | +@Mapper | ||
13 | +public interface DoConditionMapper extends BaseMapper<DoCondition> { | ||
14 | +} |
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.yunteng.dto.SceneLinkageDTO; | ||
8 | +import org.thingsboard.server.dao.yunteng.entities.SceneLinkage; | ||
9 | + | ||
10 | +import java.util.Map; | ||
11 | + | ||
12 | +/** | ||
13 | + * @Description 场景联动持久层 | ||
14 | + * @Author cxy | ||
15 | + * @Date 2021/11/25 10:48 | ||
16 | + */ | ||
17 | +@Mapper | ||
18 | +public interface SceneLinkageMapper extends BaseMapper<SceneLinkage> { | ||
19 | + /** | ||
20 | + * 分页条件查询 | ||
21 | + * @param page | ||
22 | + * @param queryMap | ||
23 | + * @return | ||
24 | + */ | ||
25 | + IPage<SceneLinkageDTO> getScenePage( | ||
26 | + IPage<?> page, @Param("queryMap") Map<String, Object> queryMap); | ||
27 | + | ||
28 | + | ||
29 | +} |
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
4 | import com.baomidou.mybatisplus.core.metadata.IPage; | 4 | import com.baomidou.mybatisplus.core.metadata.IPage; |
5 | import org.apache.ibatis.annotations.Mapper; | 5 | import org.apache.ibatis.annotations.Mapper; |
6 | import org.apache.ibatis.annotations.Param; | 6 | import org.apache.ibatis.annotations.Param; |
7 | +import org.thingsboard.server.common.data.yunteng.dto.SysNoticeDTO; | ||
7 | import org.thingsboard.server.dao.yunteng.entities.SysNotice; | 8 | import org.thingsboard.server.dao.yunteng.entities.SysNotice; |
8 | 9 | ||
9 | import java.util.Map; | 10 | import java.util.Map; |
@@ -20,11 +21,11 @@ public interface SysNoticeMapper extends BaseMapper<SysNotice> { | @@ -20,11 +21,11 @@ public interface SysNoticeMapper extends BaseMapper<SysNotice> { | ||
20 | * @param queryMap | 21 | * @param queryMap |
21 | * @return 系统通知分页 | 22 | * @return 系统通知分页 |
22 | */ | 23 | */ |
23 | - IPage<SysNotice> page(IPage<SysNotice> page, @Param("queryMap") Map<String, Object> queryMap); | 24 | + IPage<SysNoticeDTO> page(IPage<SysNotice> page, @Param("queryMap") Map<String, Object> queryMap); |
24 | 25 | ||
25 | /** | 26 | /** |
26 | * @param id | 27 | * @param id |
27 | * @return 消息详情 | 28 | * @return 消息详情 |
28 | */ | 29 | */ |
29 | - SysNotice get(@Param("id") String id, @Param("tenantId") String tenantId); | 30 | + SysNoticeDTO get(@Param("id") String id, @Param("tenantId") String tenantId); |
30 | } | 31 | } |
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.Trigger; | ||
6 | + | ||
7 | +/** | ||
8 | + * @Description 触发器mapper层 | ||
9 | + * @Author cxy | ||
10 | + * @Date 2021/11/26 9:30 | ||
11 | + */ | ||
12 | +@Mapper | ||
13 | +public interface TriggerMapper extends BaseMapper<Trigger> { | ||
14 | +} |
1 | +package org.thingsboard.server.dao.yunteng.service; | ||
2 | +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; | ||
3 | +import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; | ||
4 | +import org.thingsboard.server.common.data.yunteng.utils.tools.PageData; | ||
5 | + | ||
6 | +import java.util.List; | ||
7 | +import java.util.Map; | ||
8 | +import java.util.Set; | ||
9 | + | ||
10 | +/** | ||
11 | + * @Description 场景联动的业务 | ||
12 | + * @Author cxy | ||
13 | + * @Date 2021/11/25 11:19 | ||
14 | + */ | ||
15 | +public interface SceneLinkageService { | ||
16 | + /** | ||
17 | + * 新增场景联动 | ||
18 | + * @param sceneLinkageDTO | ||
19 | + * @return | ||
20 | + */ | ||
21 | + SceneLinkageDTO saveScenelinkage(SceneLinkageDTO sceneLinkageDTO,String tenantId); | ||
22 | + | ||
23 | + /** | ||
24 | + * 删除场景联动 | ||
25 | + * @param ids | ||
26 | + * @return | ||
27 | + */ | ||
28 | + void deleteSceneLinkage(Set<String> ids,String tenantId); | ||
29 | + | ||
30 | + /** | ||
31 | + * 修改场景联动 | ||
32 | + * @param sceneLinkageDTO | ||
33 | + * @return | ||
34 | + */ | ||
35 | + SceneLinkageDTO updateSceneLinkage(SceneLinkageDTO sceneLinkageDTO); | ||
36 | + | ||
37 | + /** | ||
38 | + * 分页查询 | ||
39 | + * @param queryMap | ||
40 | + * @return | ||
41 | + */ | ||
42 | + PageData<SceneLinkageDTO> page(Map<String, Object> queryMap,String tenantId); | ||
43 | + | ||
44 | + /** | ||
45 | + * 查找场景联动所有数据 | ||
46 | + * @param sceneLinkageDTO | ||
47 | + * @return | ||
48 | + */ | ||
49 | + List<SceneLinkageDTO> findSceneLinkage(SceneLinkageDTO sceneLinkageDTO,String tenantId); | ||
50 | + | ||
51 | + /** | ||
52 | + * 修改场景的状态 | ||
53 | + * @param sceneLinkageId | ||
54 | + * @param status | ||
55 | + */ | ||
56 | + void updateSceneStatus(String sceneLinkageId, int status,String tenantId); | ||
57 | + | ||
58 | + /** | ||
59 | + * 通过组织id查询设备集合 | ||
60 | + * @param organizationId | ||
61 | + * @return | ||
62 | + */ | ||
63 | + List<DeviceDTO> findDeviceList(String organizationId); | ||
64 | + | ||
65 | +} |
@@ -12,6 +12,7 @@ | @@ -12,6 +12,7 @@ | ||
12 | <result property="updater" column="updater"/> | 12 | <result property="updater" column="updater"/> |
13 | <result property="updateTime" column="update_time"/> | 13 | <result property="updateTime" column="update_time"/> |
14 | <result property="remark" column="remark"/> | 14 | <result property="remark" column="remark"/> |
15 | + <result property="tenantId" column="tenant_id"/> | ||
15 | </resultMap> | 16 | </resultMap> |
16 | 17 | ||
17 | <select id="findOrganizationTreeList" resultMap="organizationDTOMap"> | 18 | <select id="findOrganizationTreeList" resultMap="organizationDTOMap"> |
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.SceneLinkageMapper"> | ||
5 | + <resultMap id="sceneLinkageMap" type="org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO"> | ||
6 | + <result property="id" column="id"/> | ||
7 | + <result property="name" column="name"/> | ||
8 | + <result property="organizationId" column="organization_id"/> | ||
9 | + <result property="status" column="status"/> | ||
10 | + <result property="description" column="description"/> | ||
11 | + <result property="tenantId" column="tenant_id"/> | ||
12 | + <result property="updater" column="updater"/> | ||
13 | + <result property="updateTime" column="update_time"/> | ||
14 | + <result property="createTime" column="create_time"/> | ||
15 | + <result property="creator" column="creator"/> | ||
16 | + </resultMap> | ||
17 | + <sql id="columns"> | ||
18 | + s.id,s.name,s.organization_id,s.status,s.description,s.tenant_id,s.updater,s.update_time,s.create_time,s.creator | ||
19 | + </sql> | ||
20 | + <select id="getScenePage" resultMap="sceneLinkageMap"> | ||
21 | + SELECT | ||
22 | + <include refid="columns"/> | ||
23 | + FROM iotfs_scene_linkage s | ||
24 | + LEFT JOIN iotfs_organization io ON io.id = s.organization_id | ||
25 | + <where> | ||
26 | + <if test="queryMap.tenantId !=null and queryMap.tenantId !=''"> | ||
27 | + AND s.tenant_id = #{queryMap.tenantId} | ||
28 | + </if> | ||
29 | + <if test="queryMap.name !=null and queryMap.name !=''"> | ||
30 | + AND s.name LIKE concat('%',#{queryMap.name}::TEXT,'%') | ||
31 | + </if> | ||
32 | + <if test="queryMap.status !=null and queryMap.status!=''"> | ||
33 | + AND s.status = #{queryMap.status} | ||
34 | + </if> | ||
35 | + <if test="queryMap.organizationId !=null"> | ||
36 | + AND s.organization_id IN | ||
37 | + <foreach collection="queryMap.organizationIds" item="organizationId" open="(" separator="," close=")"> | ||
38 | + #{organizationId} | ||
39 | + </foreach> | ||
40 | + </if> | ||
41 | + </where> | ||
42 | + </select> | ||
43 | + | ||
44 | +</mapper> |
@@ -13,13 +13,17 @@ | @@ -13,13 +13,17 @@ | ||
13 | <result property="area" column="area"/> | 13 | <result property="area" column="area"/> |
14 | <result property="tel" column="tel"/> | 14 | <result property="tel" column="tel"/> |
15 | <result property="codeTown" column="code_town"/> | 15 | <result property="codeTown" column="code_town"/> |
16 | - <result property="nameProv" column="name_prov"/> | ||
17 | - <result property="codeProv" column="code_prov"/> | ||
18 | - <result property="nameCity" column="name_city"/> | ||
19 | - <result property="codeCity" column="code_city"/> | ||
20 | - <result property="nameCoun" column="name_coun"/> | ||
21 | - <result property="codeCoun" column="code_coun"/> | ||
22 | - <result property="nameTown" column="name_town"/> | 16 | + <result property="qrCode" column="qr_code"/> |
17 | + <association property="sysTown" javaType="org.thingsboard.server.common.data.yunteng.dto.SysTownDTO"> | ||
18 | + <result property="nameProv" column="name_prov"/> | ||
19 | + <result property="codeProv" column="code_prov"/> | ||
20 | + <result property="nameCity" column="name_city"/> | ||
21 | + <result property="codeCity" column="code_city"/> | ||
22 | + <result property="nameCoun" column="name_coun"/> | ||
23 | + <result property="codeCoun" column="code_coun"/> | ||
24 | + <result property="nameTown" column="name_town"/> | ||
25 | + <result property="codeTown" column="code_town"/> | ||
26 | + </association> | ||
23 | </resultMap> | 27 | </resultMap> |
24 | 28 | ||
25 | <select id="get" resultMap="entity"> | 29 | <select id="get" resultMap="entity"> |
@@ -33,6 +37,7 @@ | @@ -33,6 +37,7 @@ | ||
33 | se.area area, | 37 | se.area area, |
34 | se.tel tel, | 38 | se.tel tel, |
35 | se.code_town code_town, | 39 | se.code_town code_town, |
40 | + se.qr_code qr_code, | ||
36 | st.name_prov name_prov, | 41 | st.name_prov name_prov, |
37 | st.code_prov code_prov, | 42 | st.code_prov code_prov, |
38 | st.name_city name_city, | 43 | st.name_city name_city, |
@@ -55,7 +55,7 @@ | @@ -55,7 +55,7 @@ | ||
55 | WHERE | 55 | WHERE |
56 | sn.tenant_id = #{queryMap.tenantId} | 56 | sn.tenant_id = #{queryMap.tenantId} |
57 | <if test="queryMap.type != null"> | 57 | <if test="queryMap.type != null"> |
58 | - sn.type = #{queryMap.type} | 58 | + AND sn.type = #{queryMap.type} |
59 | </if> | 59 | </if> |
60 | </select> | 60 | </select> |
61 | <select id="get" resultMap="sysNotice"> | 61 | <select id="get" resultMap="sysNotice"> |