Commit 4c051620b14a7f9fe4649059516abea91330aafc

Authored by puhui999
1 parent 2e5aa3d6

refactor:【IoT 物联网】重命名 RuleScene => SceneRule

Showing 21 changed files with 284 additions and 285 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotRuleSceneController.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotSceneRuleController.java
@@ -4,12 +4,12 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -4,12 +4,12 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleScenePageReqVO;  
8 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleSceneRespVO;  
9 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleSceneSaveReqVO;  
10 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleSceneUpdateStatusReqVO; 7 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRulePageReqVO;
  8 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleRespVO;
  9 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleSaveReqVO;
  10 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleUpdateStatusReqVO;
11 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 11 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
12 -import cn.iocoder.yudao.module.iot.service.rule.scene.IotRuleSceneService; 12 +import cn.iocoder.yudao.module.iot.service.rule.scene.IotSceneRuleService;
13 import io.swagger.v3.oas.annotations.Operation; 13 import io.swagger.v3.oas.annotations.Operation;
14 import io.swagger.v3.oas.annotations.Parameter; 14 import io.swagger.v3.oas.annotations.Parameter;
15 import io.swagger.v3.oas.annotations.tags.Tag; 15 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -24,71 +24,70 @@ import java.util.List; @@ -24,71 +24,70 @@ import java.util.List;
24 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 24 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
25 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; 25 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
26 26
27 -// TODO @puhui999:SceneRule 方法名,类名等;  
28 @Tag(name = "管理后台 - IoT 场景联动") 27 @Tag(name = "管理后台 - IoT 场景联动")
29 @RestController 28 @RestController
30 -@RequestMapping("/iot/rule-scene") 29 +@RequestMapping("/iot/scene-rule")
31 @Validated 30 @Validated
32 -public class IotRuleSceneController { 31 +public class IotSceneRuleController {
33 32
34 @Resource 33 @Resource
35 - private IotRuleSceneService ruleSceneService; 34 + private IotSceneRuleService sceneRuleService;
36 35
37 @PostMapping("/create") 36 @PostMapping("/create")
38 @Operation(summary = "创建场景联动") 37 @Operation(summary = "创建场景联动")
39 - @PreAuthorize("@ss.hasPermission('iot:rule-scene:create')")  
40 - public CommonResult<Long> createRuleScene(@Valid @RequestBody IotRuleSceneSaveReqVO createReqVO) {  
41 - return success(ruleSceneService.createRuleScene(createReqVO)); 38 + @PreAuthorize("@ss.hasPermission('iot:scene-rule:create')")
  39 + public CommonResult<Long> createSceneRule(@Valid @RequestBody IotSceneRuleSaveReqVO createReqVO) {
  40 + return success(sceneRuleService.createSceneRule(createReqVO));
42 } 41 }
43 42
44 @PutMapping("/update") 43 @PutMapping("/update")
45 @Operation(summary = "更新场景联动") 44 @Operation(summary = "更新场景联动")
46 - @PreAuthorize("@ss.hasPermission('iot:rule-scene:update')")  
47 - public CommonResult<Boolean> updateRuleScene(@Valid @RequestBody IotRuleSceneSaveReqVO updateReqVO) {  
48 - ruleSceneService.updateRuleScene(updateReqVO); 45 + @PreAuthorize("@ss.hasPermission('iot:scene-rule:update')")
  46 + public CommonResult<Boolean> updateSceneRule(@Valid @RequestBody IotSceneRuleSaveReqVO updateReqVO) {
  47 + sceneRuleService.updateSceneRule(updateReqVO);
49 return success(true); 48 return success(true);
50 } 49 }
51 50
52 @PutMapping("/update-status") 51 @PutMapping("/update-status")
53 @Operation(summary = "更新场景联动状态") 52 @Operation(summary = "更新场景联动状态")
54 - @PreAuthorize("@ss.hasPermission('iot:rule-scene:update')")  
55 - public CommonResult<Boolean> updateRuleSceneStatus(@Valid @RequestBody IotRuleSceneUpdateStatusReqVO updateReqVO) {  
56 - ruleSceneService.updateRuleSceneStatus(updateReqVO.getId(), updateReqVO.getStatus()); 53 + @PreAuthorize("@ss.hasPermission('iot:scene-rule:update')")
  54 + public CommonResult<Boolean> updateSceneRuleStatus(@Valid @RequestBody IotSceneRuleUpdateStatusReqVO updateReqVO) {
  55 + sceneRuleService.updateSceneRuleStatus(updateReqVO.getId(), updateReqVO.getStatus());
57 return success(true); 56 return success(true);
58 } 57 }
59 58
60 @DeleteMapping("/delete") 59 @DeleteMapping("/delete")
61 @Operation(summary = "删除场景联动") 60 @Operation(summary = "删除场景联动")
62 @Parameter(name = "id", description = "编号", required = true) 61 @Parameter(name = "id", description = "编号", required = true)
63 - @PreAuthorize("@ss.hasPermission('iot:rule-scene:delete')")  
64 - public CommonResult<Boolean> deleteRuleScene(@RequestParam("id") Long id) {  
65 - ruleSceneService.deleteRuleScene(id); 62 + @PreAuthorize("@ss.hasPermission('iot:scene-rule:delete')")
  63 + public CommonResult<Boolean> deleteSceneRule(@RequestParam("id") Long id) {
  64 + sceneRuleService.deleteSceneRule(id);
66 return success(true); 65 return success(true);
67 } 66 }
68 67
69 @GetMapping("/get") 68 @GetMapping("/get")
70 @Operation(summary = "获得场景联动") 69 @Operation(summary = "获得场景联动")
71 @Parameter(name = "id", description = "编号", required = true, example = "1024") 70 @Parameter(name = "id", description = "编号", required = true, example = "1024")
72 - @PreAuthorize("@ss.hasPermission('iot:rule-scene:query')")  
73 - public CommonResult<IotRuleSceneRespVO> getRuleScene(@RequestParam("id") Long id) {  
74 - IotSceneRuleDO ruleScene = ruleSceneService.getRuleScene(id);  
75 - return success(BeanUtils.toBean(ruleScene, IotRuleSceneRespVO.class)); 71 + @PreAuthorize("@ss.hasPermission('iot:scene-rule:query')")
  72 + public CommonResult<IotSceneRuleRespVO> getSceneRule(@RequestParam("id") Long id) {
  73 + IotSceneRuleDO sceneRule = sceneRuleService.getSceneRule(id);
  74 + return success(BeanUtils.toBean(sceneRule, IotSceneRuleRespVO.class));
76 } 75 }
77 76
78 @GetMapping("/page") 77 @GetMapping("/page")
79 @Operation(summary = "获得场景联动分页") 78 @Operation(summary = "获得场景联动分页")
80 - @PreAuthorize("@ss.hasPermission('iot:rule-scene:query')")  
81 - public CommonResult<PageResult<IotRuleSceneRespVO>> getRuleScenePage(@Valid IotRuleScenePageReqVO pageReqVO) {  
82 - PageResult<IotSceneRuleDO> pageResult = ruleSceneService.getRuleScenePage(pageReqVO);  
83 - return success(BeanUtils.toBean(pageResult, IotRuleSceneRespVO.class)); 79 + @PreAuthorize("@ss.hasPermission('iot:scene-rule:query')")
  80 + public CommonResult<PageResult<IotSceneRuleRespVO>> getSceneRulePage(@Valid IotSceneRulePageReqVO pageReqVO) {
  81 + PageResult<IotSceneRuleDO> pageResult = sceneRuleService.getSceneRulePage(pageReqVO);
  82 + return success(BeanUtils.toBean(pageResult, IotSceneRuleRespVO.class));
84 } 83 }
85 84
86 @GetMapping("/simple-list") 85 @GetMapping("/simple-list")
87 @Operation(summary = "获取场景联动的精简信息列表", description = "主要用于前端的下拉选项") 86 @Operation(summary = "获取场景联动的精简信息列表", description = "主要用于前端的下拉选项")
88 - public CommonResult<List<IotRuleSceneRespVO>> getRuleSceneSimpleList() {  
89 - List<IotSceneRuleDO> list = ruleSceneService.getRuleSceneListByStatus(CommonStatusEnum.ENABLE.getStatus()); 87 + public CommonResult<List<IotSceneRuleRespVO>> getSceneRuleSimpleList() {
  88 + List<IotSceneRuleDO> list = sceneRuleService.getSceneRuleListByStatus(CommonStatusEnum.ENABLE.getStatus());
90 return success(convertList(list, scene -> // 只返回 id、name 字段 89 return success(convertList(list, scene -> // 只返回 id、name 字段
91 - new IotRuleSceneRespVO().setId(scene.getId()).setName(scene.getName()))); 90 + new IotSceneRuleRespVO().setId(scene.getId()).setName(scene.getName())));
92 } 91 }
93 92
94 } 93 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotRuleScenePageReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRulePageReqVO.java
@@ -17,7 +17,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @@ -17,7 +17,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
17 @Data 17 @Data
18 @EqualsAndHashCode(callSuper = true) 18 @EqualsAndHashCode(callSuper = true)
19 @ToString(callSuper = true) 19 @ToString(callSuper = true)
20 -public class IotRuleScenePageReqVO extends PageParam { 20 +public class IotSceneRulePageReqVO extends PageParam {
21 21
22 @Schema(description = "场景名称", example = "赵六") 22 @Schema(description = "场景名称", example = "赵六")
23 private String name; 23 private String name;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotRuleSceneRespVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleRespVO.java
@@ -9,7 +9,7 @@ import java.util.List; @@ -9,7 +9,7 @@ import java.util.List;
9 9
10 @Schema(description = "管理后台 - IoT 场景联动 Response VO") 10 @Schema(description = "管理后台 - IoT 场景联动 Response VO")
11 @Data 11 @Data
12 -public class IotRuleSceneRespVO { 12 +public class IotSceneRuleRespVO {
13 13
14 @Schema(description = "场景编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15865") 14 @Schema(description = "场景编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15865")
15 private Long id; 15 private Long id;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotRuleSceneSaveReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleSaveReqVO.java
@@ -12,7 +12,7 @@ import java.util.List; @@ -12,7 +12,7 @@ import java.util.List;
12 12
13 @Schema(description = "管理后台 - IoT 场景联动新增/修改 Request VO") 13 @Schema(description = "管理后台 - IoT 场景联动新增/修改 Request VO")
14 @Data 14 @Data
15 -public class IotRuleSceneSaveReqVO { 15 +public class IotSceneRuleSaveReqVO {
16 16
17 @Schema(description = "场景编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15865") 17 @Schema(description = "场景编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15865")
18 private Long id; 18 private Long id;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotRuleSceneUpdateStatusReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleUpdateStatusReqVO.java
@@ -8,7 +8,7 @@ import lombok.Data; @@ -8,7 +8,7 @@ import lombok.Data;
8 8
9 @Schema(description = "管理后台 - IoT 场景联动更新状态 Request VO") 9 @Schema(description = "管理后台 - IoT 场景联动更新状态 Request VO")
10 @Data 10 @Data
11 -public class IotRuleSceneUpdateStatusReqVO { 11 +public class IotSceneRuleUpdateStatusReqVO {
12 12
13 @Schema(description = "场景联动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") 13 @Schema(description = "场景联动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
14 @NotNull(message = "场景联动编号不能为空") 14 @NotNull(message = "场景联动编号不能为空")
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotSceneRuleDO.java
@@ -7,10 +7,10 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO; @@ -7,10 +7,10 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
8 import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO; 8 import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
9 import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO; 9 import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO;
10 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneActionTypeEnum;  
11 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneConditionOperatorEnum;  
12 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneConditionTypeEnum;  
13 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneTriggerTypeEnum; 10 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleActionTypeEnum;
  11 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionOperatorEnum;
  12 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
  13 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
14 import com.baomidou.mybatisplus.annotation.KeySequence; 14 import com.baomidou.mybatisplus.annotation.KeySequence;
15 import com.baomidou.mybatisplus.annotation.TableField; 15 import com.baomidou.mybatisplus.annotation.TableField;
16 import com.baomidou.mybatisplus.annotation.TableId; 16 import com.baomidou.mybatisplus.annotation.TableId;
@@ -79,13 +79,13 @@ public class IotSceneRuleDO extends TenantBaseDO { @@ -79,13 +79,13 @@ public class IotSceneRuleDO extends TenantBaseDO {
79 /** 79 /**
80 * 场景事件类型 80 * 场景事件类型
81 * 81 *
82 - * 枚举 {@link IotRuleSceneTriggerTypeEnum}  
83 - * 1. {@link IotRuleSceneTriggerTypeEnum#DEVICE_STATE_UPDATE} 时,operator 非空,并且 value 为在线状态  
84 - * 2. {@link IotRuleSceneTriggerTypeEnum#DEVICE_PROPERTY_POST}  
85 - * {@link IotRuleSceneTriggerTypeEnum#DEVICE_EVENT_POST} 时,identifier、operator 非空,并且 value 为属性值  
86 - * 3. {@link IotRuleSceneTriggerTypeEnum#DEVICE_EVENT_POST}  
87 - * {@link IotRuleSceneTriggerTypeEnum#DEVICE_SERVICE_INVOKE} 时,identifier 非空,但是 operator、value 为空  
88 - * 4. {@link IotRuleSceneTriggerTypeEnum#TIMER} 时,conditions 非空,并且设备无关(无需 productId、deviceId 字段) 82 + * 枚举 {@link IotSceneRuleTriggerTypeEnum}
  83 + * 1. {@link IotSceneRuleTriggerTypeEnum#DEVICE_STATE_UPDATE} 时,operator 非空,并且 value 为在线状态
  84 + * 2. {@link IotSceneRuleTriggerTypeEnum#DEVICE_PROPERTY_POST}
  85 + * {@link IotSceneRuleTriggerTypeEnum#DEVICE_EVENT_POST} 时,identifier、operator 非空,并且 value 为属性值
  86 + * 3. {@link IotSceneRuleTriggerTypeEnum#DEVICE_EVENT_POST}
  87 + * {@link IotSceneRuleTriggerTypeEnum#DEVICE_SERVICE_INVOKE} 时,identifier 非空,但是 operator、value 为空
  88 + * 4. {@link IotSceneRuleTriggerTypeEnum#TIMER} 时,conditions 非空,并且设备无关(无需 productId、deviceId 字段)
89 */ 89 */
90 private Integer type; 90 private Integer type;
91 91
@@ -111,14 +111,14 @@ public class IotSceneRuleDO extends TenantBaseDO { @@ -111,14 +111,14 @@ public class IotSceneRuleDO extends TenantBaseDO {
111 /** 111 /**
112 * 操作符 112 * 操作符
113 * 113 *
114 - * 枚举 {@link IotRuleSceneConditionOperatorEnum} 114 + * 枚举 {@link IotSceneRuleConditionOperatorEnum}
115 */ 115 */
116 private String operator; 116 private String operator;
117 /** 117 /**
118 * 参数(属性值、在线状态) 118 * 参数(属性值、在线状态)
119 * <p> 119 * <p>
120 * 如果有多个值,则使用 "," 分隔,类似 "1,2,3"。 120 * 如果有多个值,则使用 "," 分隔,类似 "1,2,3"。
121 - * 例如说,{@link IotRuleSceneConditionOperatorEnum#IN}、{@link IotRuleSceneConditionOperatorEnum#BETWEEN} 121 + * 例如说,{@link IotSceneRuleConditionOperatorEnum#IN}、{@link IotSceneRuleConditionOperatorEnum#BETWEEN}
122 */ 122 */
123 private String value; 123 private String value;
124 124
@@ -148,10 +148,10 @@ public class IotSceneRuleDO extends TenantBaseDO { @@ -148,10 +148,10 @@ public class IotSceneRuleDO extends TenantBaseDO {
148 /** 148 /**
149 * 触发条件类型 149 * 触发条件类型
150 * 150 *
151 - * 枚举 {@link IotRuleSceneConditionTypeEnum}  
152 - * 1. {@link IotRuleSceneConditionTypeEnum#DEVICE_STATE} 时,operator 非空,并且 value 为在线状态  
153 - * 2. {@link IotRuleSceneConditionTypeEnum#DEVICE_PROPERTY} 时,identifier、operator 非空,并且 value 为属性值  
154 - * 3. {@link IotRuleSceneConditionTypeEnum#CURRENT_TIME} 时,operator 非空(使用 DATE_TIME_ 和 TIME_ 部分),并且 value 非空 151 + * 枚举 {@link IotSceneRuleConditionTypeEnum}
  152 + * 1. {@link IotSceneRuleConditionTypeEnum#DEVICE_STATE} 时,operator 非空,并且 value 为在线状态
  153 + * 2. {@link IotSceneRuleConditionTypeEnum#DEVICE_PROPERTY} 时,identifier、operator 非空,并且 value 为属性值
  154 + * 3. {@link IotSceneRuleConditionTypeEnum#CURRENT_TIME} 时,operator 非空(使用 DATE_TIME_ 和 TIME_ 部分),并且 value 非空
155 */ 155 */
156 private Integer type; 156 private Integer type;
157 157
@@ -176,14 +176,14 @@ public class IotSceneRuleDO extends TenantBaseDO { @@ -176,14 +176,14 @@ public class IotSceneRuleDO extends TenantBaseDO {
176 /** 176 /**
177 * 操作符 177 * 操作符
178 * 178 *
179 - * 枚举 {@link IotRuleSceneConditionOperatorEnum} 179 + * 枚举 {@link IotSceneRuleConditionOperatorEnum}
180 */ 180 */
181 private String operator; 181 private String operator;
182 /** 182 /**
183 * 参数 183 * 参数
184 * 184 *
185 * 如果有多个值,则使用 "," 分隔,类似 "1,2,3"。 185 * 如果有多个值,则使用 "," 分隔,类似 "1,2,3"。
186 - * 例如说,{@link IotRuleSceneConditionOperatorEnum#IN}、{@link IotRuleSceneConditionOperatorEnum#BETWEEN} 186 + * 例如说,{@link IotSceneRuleConditionOperatorEnum#IN}、{@link IotSceneRuleConditionOperatorEnum#BETWEEN}
187 */ 187 */
188 private String param; 188 private String param;
189 189
@@ -198,11 +198,11 @@ public class IotSceneRuleDO extends TenantBaseDO { @@ -198,11 +198,11 @@ public class IotSceneRuleDO extends TenantBaseDO {
198 /** 198 /**
199 * 执行类型 199 * 执行类型
200 * 200 *
201 - * 枚举 {@link IotRuleSceneActionTypeEnum}  
202 - * 1. {@link IotRuleSceneActionTypeEnum#DEVICE_PROPERTY_SET} 时,params 非空  
203 - * {@link IotRuleSceneActionTypeEnum#DEVICE_SERVICE_INVOKE} 时,params 非空  
204 - * 2. {@link IotRuleSceneActionTypeEnum#ALERT_TRIGGER} 时,alertConfigId 为空,因为是 {@link IotAlertConfigDO} 里面关联它  
205 - * 3. {@link IotRuleSceneActionTypeEnum#ALERT_RECOVER} 时,alertConfigId 非空 201 + * 枚举 {@link IotSceneRuleActionTypeEnum}
  202 + * 1. {@link IotSceneRuleActionTypeEnum#DEVICE_PROPERTY_SET} 时,params 非空
  203 + * {@link IotSceneRuleActionTypeEnum#DEVICE_SERVICE_INVOKE} 时,params 非空
  204 + * 2. {@link IotSceneRuleActionTypeEnum#ALERT_TRIGGER} 时,alertConfigId 为空,因为是 {@link IotAlertConfigDO} 里面关联它
  205 + * 3. {@link IotSceneRuleActionTypeEnum#ALERT_RECOVER} 时,alertConfigId 非空
206 */ 206 */
207 private Integer type; 207 private Integer type;
208 208
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/rule/IotRuleSceneMapper.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/rule/IotSceneRuleMapper.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.mysql.rule; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.mysql.rule;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleScenePageReqVO; 6 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRulePageReqVO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
8 import org.apache.ibatis.annotations.Mapper; 8 import org.apache.ibatis.annotations.Mapper;
9 9
@@ -15,9 +15,9 @@ import java.util.List; @@ -15,9 +15,9 @@ import java.util.List;
15 * @author HUIHUI 15 * @author HUIHUI
16 */ 16 */
17 @Mapper 17 @Mapper
18 -public interface IotRuleSceneMapper extends BaseMapperX<IotSceneRuleDO> { 18 +public interface IotSceneRuleMapper extends BaseMapperX<IotSceneRuleDO> {
19 19
20 - default PageResult<IotSceneRuleDO> selectPage(IotRuleScenePageReqVO reqVO) { 20 + default PageResult<IotSceneRuleDO> selectPage(IotSceneRulePageReqVO reqVO) {
21 return selectPage(reqVO, new LambdaQueryWrapperX<IotSceneRuleDO>() 21 return selectPage(reqVO, new LambdaQueryWrapperX<IotSceneRuleDO>()
22 .likeIfPresent(IotSceneRuleDO::getName, reqVO.getName()) 22 .likeIfPresent(IotSceneRuleDO::getName, reqVO.getName())
23 .likeIfPresent(IotSceneRuleDO::getDescription, reqVO.getDescription()) 23 .likeIfPresent(IotSceneRuleDO::getDescription, reqVO.getDescription())
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneActionTypeEnum.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotSceneRuleActionTypeEnum.java
@@ -14,7 +14,7 @@ import java.util.Arrays; @@ -14,7 +14,7 @@ import java.util.Arrays;
14 */ 14 */
15 @RequiredArgsConstructor 15 @RequiredArgsConstructor
16 @Getter 16 @Getter
17 -public enum IotRuleSceneActionTypeEnum implements ArrayValuable<Integer> { 17 +public enum IotSceneRuleActionTypeEnum implements ArrayValuable<Integer> {
18 18
19 /** 19 /**
20 * 设备属性设置 20 * 设备属性设置
@@ -42,7 +42,7 @@ public enum IotRuleSceneActionTypeEnum implements ArrayValuable&lt;Integer&gt; { @@ -42,7 +42,7 @@ public enum IotRuleSceneActionTypeEnum implements ArrayValuable&lt;Integer&gt; {
42 42
43 private final Integer type; 43 private final Integer type;
44 44
45 - public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotRuleSceneActionTypeEnum::getType).toArray(Integer[]::new); 45 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotSceneRuleActionTypeEnum::getType).toArray(Integer[]::new);
46 46
47 @Override 47 @Override
48 public Integer[] array() { 48 public Integer[] array() {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionOperatorEnum.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotSceneRuleConditionOperatorEnum.java
@@ -14,7 +14,7 @@ import java.util.Arrays; @@ -14,7 +14,7 @@ import java.util.Arrays;
14 */ 14 */
15 @RequiredArgsConstructor 15 @RequiredArgsConstructor
16 @Getter 16 @Getter
17 -public enum IotRuleSceneConditionOperatorEnum implements ArrayValuable<String> { 17 +public enum IotSceneRuleConditionOperatorEnum implements ArrayValuable<String> {
18 18
19 EQUALS("=", "#source == #value"), 19 EQUALS("=", "#source == #value"),
20 NOT_EQUALS("!=", "!(#source == #value)"), 20 NOT_EQUALS("!=", "!(#source == #value)"),
@@ -53,7 +53,7 @@ public enum IotRuleSceneConditionOperatorEnum implements ArrayValuable&lt;String&gt; { @@ -53,7 +53,7 @@ public enum IotRuleSceneConditionOperatorEnum implements ArrayValuable&lt;String&gt; {
53 private final String operator; 53 private final String operator;
54 private final String springExpression; 54 private final String springExpression;
55 55
56 - public static final String[] ARRAYS = Arrays.stream(values()).map(IotRuleSceneConditionOperatorEnum::getOperator).toArray(String[]::new); 56 + public static final String[] ARRAYS = Arrays.stream(values()).map(IotSceneRuleConditionOperatorEnum::getOperator).toArray(String[]::new);
57 57
58 /** 58 /**
59 * Spring 表达式 - 原始值 59 * Spring 表达式 - 原始值
@@ -68,7 +68,7 @@ public enum IotRuleSceneConditionOperatorEnum implements ArrayValuable&lt;String&gt; { @@ -68,7 +68,7 @@ public enum IotRuleSceneConditionOperatorEnum implements ArrayValuable&lt;String&gt; {
68 */ 68 */
69 public static final String SPRING_EXPRESSION_VALUE_LIST = "values"; 69 public static final String SPRING_EXPRESSION_VALUE_LIST = "values";
70 70
71 - public static IotRuleSceneConditionOperatorEnum operatorOf(String operator) { 71 + public static IotSceneRuleConditionOperatorEnum operatorOf(String operator) {
72 return ArrayUtil.firstMatch(item -> item.getOperator().equals(operator), values()); 72 return ArrayUtil.firstMatch(item -> item.getOperator().equals(operator), values());
73 } 73 }
74 74
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionTypeEnum.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotSceneRuleConditionTypeEnum.java
@@ -13,7 +13,7 @@ import java.util.Arrays; @@ -13,7 +13,7 @@ import java.util.Arrays;
13 */ 13 */
14 @RequiredArgsConstructor 14 @RequiredArgsConstructor
15 @Getter 15 @Getter
16 -public enum IotRuleSceneConditionTypeEnum implements ArrayValuable<Integer> { 16 +public enum IotSceneRuleConditionTypeEnum implements ArrayValuable<Integer> {
17 17
18 DEVICE_STATE(1, "设备状态"), 18 DEVICE_STATE(1, "设备状态"),
19 DEVICE_PROPERTY(2, "设备属性"), 19 DEVICE_PROPERTY(2, "设备属性"),
@@ -25,7 +25,7 @@ public enum IotRuleSceneConditionTypeEnum implements ArrayValuable&lt;Integer&gt; { @@ -25,7 +25,7 @@ public enum IotRuleSceneConditionTypeEnum implements ArrayValuable&lt;Integer&gt; {
25 private final Integer type; 25 private final Integer type;
26 private final String name; 26 private final String name;
27 27
28 - public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotRuleSceneConditionTypeEnum::getType).toArray(Integer[]::new); 28 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotSceneRuleConditionTypeEnum::getType).toArray(Integer[]::new);
29 29
30 @Override 30 @Override
31 public Integer[] array() { 31 public Integer[] array() {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneTriggerTypeEnum.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotSceneRuleTriggerTypeEnum.java
@@ -16,7 +16,7 @@ import java.util.Arrays; @@ -16,7 +16,7 @@ import java.util.Arrays;
16 */ 16 */
17 @RequiredArgsConstructor 17 @RequiredArgsConstructor
18 @Getter 18 @Getter
19 -public enum IotRuleSceneTriggerTypeEnum implements ArrayValuable<Integer> { 19 +public enum IotSceneRuleTriggerTypeEnum implements ArrayValuable<Integer> {
20 20
21 @Deprecated 21 @Deprecated
22 DEVICE(1), // 设备触发 // TODO @puhui999:@芋艿:这个可以作废 22 DEVICE(1), // 设备触发 // TODO @puhui999:@芋艿:这个可以作废
@@ -56,7 +56,7 @@ public enum IotRuleSceneTriggerTypeEnum implements ArrayValuable&lt;Integer&gt; { @@ -56,7 +56,7 @@ public enum IotRuleSceneTriggerTypeEnum implements ArrayValuable&lt;Integer&gt; {
56 56
57 private final Integer type; 57 private final Integer type;
58 58
59 - public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotRuleSceneTriggerTypeEnum::getType).toArray(Integer[]::new); 59 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotSceneRuleTriggerTypeEnum::getType).toArray(Integer[]::new);
60 60
61 @Override 61 @Override
62 public Integer[] array() { 62 public Integer[] array() {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/job/rule/IotRuleSceneJob.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/job/rule/IotSceneRuleJob.java
1 package cn.iocoder.yudao.module.iot.job.rule; 1 package cn.iocoder.yudao.module.iot.job.rule;
2 2
3 import cn.hutool.core.map.MapUtil; 3 import cn.hutool.core.map.MapUtil;
4 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneTriggerTypeEnum;  
5 -import cn.iocoder.yudao.module.iot.service.rule.scene.IotRuleSceneService; 4 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
  5 +import cn.iocoder.yudao.module.iot.service.rule.scene.IotSceneRuleService;
6 import jakarta.annotation.Resource; 6 import jakarta.annotation.Resource;
7 import lombok.extern.slf4j.Slf4j; 7 import lombok.extern.slf4j.Slf4j;
8 import org.quartz.JobExecutionContext; 8 import org.quartz.JobExecutionContext;
@@ -11,48 +11,48 @@ import org.springframework.scheduling.quartz.QuartzJobBean; @@ -11,48 +11,48 @@ import org.springframework.scheduling.quartz.QuartzJobBean;
11 import java.util.Map; 11 import java.util.Map;
12 12
13 /** 13 /**
14 - * IoT 规则场景 Job,用于执行 {@link IotRuleSceneTriggerTypeEnum#TIMER} 类型的规则场景 14 + * IoT 规则场景 Job,用于执行 {@link IotSceneRuleTriggerTypeEnum#TIMER} 类型的规则场景
15 * 15 *
16 * @author 芋道源码 16 * @author 芋道源码
17 */ 17 */
18 @Slf4j 18 @Slf4j
19 -public class IotRuleSceneJob extends QuartzJobBean { 19 +public class IotSceneRuleJob extends QuartzJobBean {
20 20
21 /** 21 /**
22 * JobData Key - 规则场景编号 22 * JobData Key - 规则场景编号
23 */ 23 */
24 - public static final String JOB_DATA_KEY_RULE_SCENE_ID = "ruleSceneId"; 24 + public static final String JOB_DATA_KEY_RULE_SCENE_ID = "sceneRuleId";
25 25
26 @Resource 26 @Resource
27 - private IotRuleSceneService ruleSceneService; 27 + private IotSceneRuleService sceneRuleService;
28 28
29 @Override 29 @Override
30 protected void executeInternal(JobExecutionContext context) { 30 protected void executeInternal(JobExecutionContext context) {
31 // 获得规则场景编号 31 // 获得规则场景编号
32 - Long ruleSceneId = context.getMergedJobDataMap().getLong(JOB_DATA_KEY_RULE_SCENE_ID); 32 + Long sceneRuleId = context.getMergedJobDataMap().getLong(JOB_DATA_KEY_RULE_SCENE_ID);
33 33
34 // 执行规则场景 34 // 执行规则场景
35 - ruleSceneService.executeRuleSceneByTimer(ruleSceneId); 35 + sceneRuleService.executeSceneRuleByTimer(sceneRuleId);
36 } 36 }
37 37
38 /** 38 /**
39 * 创建 JobData Map 39 * 创建 JobData Map
40 * 40 *
41 - * @param ruleSceneId 规则场景编号 41 + * @param sceneRuleId 规则场景编号
42 * @return JobData Map 42 * @return JobData Map
43 */ 43 */
44 - public static Map<String, Object> buildJobDataMap(Long ruleSceneId) {  
45 - return MapUtil.of(JOB_DATA_KEY_RULE_SCENE_ID, ruleSceneId); 44 + public static Map<String, Object> buildJobDataMap(Long sceneRuleId) {
  45 + return MapUtil.of(JOB_DATA_KEY_RULE_SCENE_ID, sceneRuleId);
46 } 46 }
47 47
48 /** 48 /**
49 * 创建 Job 名字 49 * 创建 Job 名字
50 * 50 *
51 - * @param ruleSceneId 规则场景编号 51 + * @param sceneRuleId 规则场景编号
52 * @return Job 名字 52 * @return Job 名字
53 */ 53 */
54 - public static String buildJobName(Long ruleSceneId) {  
55 - return String.format("%s_%d", IotRuleSceneJob.class.getSimpleName(), ruleSceneId); 54 + public static String buildJobName(Long sceneRuleId) {
  55 + return String.format("%s_%d", IotSceneRuleJob.class.getSimpleName(), sceneRuleId);
56 } 56 }
57 57
58 } 58 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/consumer/rule/IotRuleSceneMessageHandler.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/consumer/rule/IotSceneRuleMessageHandler.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.mq.consumer.rule; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.mq.consumer.rule;
3 import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus; 3 import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
4 import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageSubscriber; 4 import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageSubscriber;
5 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 5 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
6 -import cn.iocoder.yudao.module.iot.service.rule.scene.IotRuleSceneService; 6 +import cn.iocoder.yudao.module.iot.service.rule.scene.IotSceneRuleService;
7 import jakarta.annotation.PostConstruct; 7 import jakarta.annotation.PostConstruct;
8 import jakarta.annotation.Resource; 8 import jakarta.annotation.Resource;
9 import lombok.extern.slf4j.Slf4j; 9 import lombok.extern.slf4j.Slf4j;
@@ -17,10 +17,10 @@ import org.springframework.stereotype.Component; @@ -17,10 +17,10 @@ import org.springframework.stereotype.Component;
17 */ 17 */
18 @Component 18 @Component
19 @Slf4j 19 @Slf4j
20 -public class IotRuleSceneMessageHandler implements IotMessageSubscriber<IotDeviceMessage> { 20 +public class IotSceneRuleMessageHandler implements IotMessageSubscriber<IotDeviceMessage> {
21 21
22 @Resource 22 @Resource
23 - private IotRuleSceneService ruleSceneService; 23 + private IotSceneRuleService sceneRuleService;
24 24
25 @Resource 25 @Resource
26 private IotMessageBus messageBus; 26 private IotMessageBus messageBus;
@@ -46,7 +46,7 @@ public class IotRuleSceneMessageHandler implements IotMessageSubscriber&lt;IotDevic @@ -46,7 +46,7 @@ public class IotRuleSceneMessageHandler implements IotMessageSubscriber&lt;IotDevic
46 return; 46 return;
47 } 47 }
48 log.info("[onMessage][消息内容({})]", message); 48 log.info("[onMessage][消息内容({})]", message);
49 - ruleSceneService.executeRuleSceneByDevice(message); 49 + sceneRuleService.executeSceneRuleByDevice(message);
50 } 50 }
51 51
52 } 52 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/alert/IotAlertConfigServiceImpl.java
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.config.IotAlertConf @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.config.IotAlertConf
6 import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.config.IotAlertConfigSaveReqVO; 6 import cn.iocoder.yudao.module.iot.controller.admin.alert.vo.config.IotAlertConfigSaveReqVO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
8 import cn.iocoder.yudao.module.iot.dal.mysql.alert.IotAlertConfigMapper; 8 import cn.iocoder.yudao.module.iot.dal.mysql.alert.IotAlertConfigMapper;
9 -import cn.iocoder.yudao.module.iot.service.rule.scene.IotRuleSceneService; 9 +import cn.iocoder.yudao.module.iot.service.rule.scene.IotSceneRuleService;
10 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 10 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
11 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
12 import org.springframework.context.annotation.Lazy; 12 import org.springframework.context.annotation.Lazy;
@@ -32,7 +32,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService { @@ -32,7 +32,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService {
32 32
33 @Resource 33 @Resource
34 @Lazy // 延迟,避免循环依赖报错 34 @Lazy // 延迟,避免循环依赖报错
35 - private IotRuleSceneService ruleSceneService; 35 + private IotSceneRuleService sceneRuleService;
36 36
37 @Resource 37 @Resource
38 private AdminUserApi adminUserApi; 38 private AdminUserApi adminUserApi;
@@ -40,7 +40,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService { @@ -40,7 +40,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService {
40 @Override 40 @Override
41 public Long createAlertConfig(IotAlertConfigSaveReqVO createReqVO) { 41 public Long createAlertConfig(IotAlertConfigSaveReqVO createReqVO) {
42 // 校验关联数据是否存在 42 // 校验关联数据是否存在
43 - ruleSceneService.validateRuleSceneList(createReqVO.getSceneRuleIds()); 43 + sceneRuleService.validateSceneRuleList(createReqVO.getSceneRuleIds());
44 adminUserApi.validateUserList(createReqVO.getReceiveUserIds()); 44 adminUserApi.validateUserList(createReqVO.getReceiveUserIds());
45 45
46 // 插入 46 // 插入
@@ -54,7 +54,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService { @@ -54,7 +54,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService {
54 // 校验存在 54 // 校验存在
55 validateAlertConfigExists(updateReqVO.getId()); 55 validateAlertConfigExists(updateReqVO.getId());
56 // 校验关联数据是否存在 56 // 校验关联数据是否存在
57 - ruleSceneService.validateRuleSceneList(updateReqVO.getSceneRuleIds()); 57 + sceneRuleService.validateSceneRuleList(updateReqVO.getSceneRuleIds());
58 adminUserApi.validateUserList(updateReqVO.getReceiveUserIds()); 58 adminUserApi.validateUserList(updateReqVO.getReceiveUserIds());
59 59
60 // 更新 60 // 更新
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotRuleSceneService.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleService.java
1 package cn.iocoder.yudao.module.iot.service.rule.scene; 1 package cn.iocoder.yudao.module.iot.service.rule.scene;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleScenePageReqVO;  
5 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleSceneSaveReqVO; 4 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRulePageReqVO;
  5 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleSaveReqVO;
6 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 6 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
8 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneTriggerTypeEnum; 8 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
9 import jakarta.validation.Valid; 9 import jakarta.validation.Valid;
10 10
11 import java.util.Collection; 11 import java.util.Collection;
@@ -16,7 +16,7 @@ import java.util.List; @@ -16,7 +16,7 @@ import java.util.List;
16 * 16 *
17 * @author 芋道源码 17 * @author 芋道源码
18 */ 18 */
19 -public interface IotRuleSceneService { 19 +public interface IotSceneRuleService {
20 20
21 /** 21 /**
22 * 创建场景联动 22 * 创建场景联动
@@ -24,14 +24,14 @@ public interface IotRuleSceneService { @@ -24,14 +24,14 @@ public interface IotRuleSceneService {
24 * @param createReqVO 创建信息 24 * @param createReqVO 创建信息
25 * @return 编号 25 * @return 编号
26 */ 26 */
27 - Long createRuleScene(@Valid IotRuleSceneSaveReqVO createReqVO); 27 + Long createSceneRule(@Valid IotSceneRuleSaveReqVO createReqVO);
28 28
29 /** 29 /**
30 * 更新场景联动 30 * 更新场景联动
31 * 31 *
32 * @param updateReqVO 更新信息 32 * @param updateReqVO 更新信息
33 */ 33 */
34 - void updateRuleScene(@Valid IotRuleSceneSaveReqVO updateReqVO); 34 + void updateSceneRule(@Valid IotSceneRuleSaveReqVO updateReqVO);
35 35
36 /** 36 /**
37 * 更新场景联动状态 37 * 更新场景联动状态
@@ -39,14 +39,14 @@ public interface IotRuleSceneService { @@ -39,14 +39,14 @@ public interface IotRuleSceneService {
39 * @param id 场景联动编号 39 * @param id 场景联动编号
40 * @param status 状态 40 * @param status 状态
41 */ 41 */
42 - void updateRuleSceneStatus(Long id, Integer status); 42 + void updateSceneRuleStatus(Long id, Integer status);
43 43
44 /** 44 /**
45 * 删除场景联动 45 * 删除场景联动
46 * 46 *
47 * @param id 编号 47 * @param id 编号
48 */ 48 */
49 - void deleteRuleScene(Long id); 49 + void deleteSceneRule(Long id);
50 50
51 /** 51 /**
52 * 获得场景联动 52 * 获得场景联动
@@ -54,7 +54,7 @@ public interface IotRuleSceneService { @@ -54,7 +54,7 @@ public interface IotRuleSceneService {
54 * @param id 编号 54 * @param id 编号
55 * @return 场景联动 55 * @return 场景联动
56 */ 56 */
57 - IotSceneRuleDO getRuleScene(Long id); 57 + IotSceneRuleDO getSceneRule(Long id);
58 58
59 /** 59 /**
60 * 获得场景联动分页 60 * 获得场景联动分页
@@ -62,7 +62,7 @@ public interface IotRuleSceneService { @@ -62,7 +62,7 @@ public interface IotRuleSceneService {
62 * @param pageReqVO 分页查询 62 * @param pageReqVO 分页查询
63 * @return 场景联动分页 63 * @return 场景联动分页
64 */ 64 */
65 - PageResult<IotSceneRuleDO> getRuleScenePage(IotRuleScenePageReqVO pageReqVO); 65 + PageResult<IotSceneRuleDO> getSceneRulePage(IotSceneRulePageReqVO pageReqVO);
66 66
67 /** 67 /**
68 * 校验规则场景联动规则编号们是否存在。如下情况,视为无效: 68 * 校验规则场景联动规则编号们是否存在。如下情况,视为无效:
@@ -70,7 +70,7 @@ public interface IotRuleSceneService { @@ -70,7 +70,7 @@ public interface IotRuleSceneService {
70 * 70 *
71 * @param ids 场景联动规则编号数组 71 * @param ids 场景联动规则编号数组
72 */ 72 */
73 - void validateRuleSceneList(Collection<Long> ids); 73 + void validateSceneRuleList(Collection<Long> ids);
74 74
75 /** 75 /**
76 * 获得指定状态的场景联动列表 76 * 获得指定状态的场景联动列表
@@ -78,7 +78,7 @@ public interface IotRuleSceneService { @@ -78,7 +78,7 @@ public interface IotRuleSceneService {
78 * @param status 状态 78 * @param status 状态
79 * @return 场景联动列表 79 * @return 场景联动列表
80 */ 80 */
81 - List<IotSceneRuleDO> getRuleSceneListByStatus(Integer status); 81 + List<IotSceneRuleDO> getSceneRuleListByStatus(Integer status);
82 82
83 /** 83 /**
84 * 【缓存】获得指定设备的场景列表 84 * 【缓存】获得指定设备的场景列表
@@ -87,20 +87,20 @@ public interface IotRuleSceneService { @@ -87,20 +87,20 @@ public interface IotRuleSceneService {
87 * @param deviceName 设备名称 87 * @param deviceName 设备名称
88 * @return 场景列表 88 * @return 场景列表
89 */ 89 */
90 - List<IotSceneRuleDO> getRuleSceneListByProductKeyAndDeviceNameFromCache(String productKey, String deviceName); 90 + List<IotSceneRuleDO> getSceneRuleListByProductKeyAndDeviceNameFromCache(String productKey, String deviceName);
91 91
92 /** 92 /**
93 - * 基于 {@link IotRuleSceneTriggerTypeEnum#DEVICE} 场景,执行规则场景 93 + * 基于 {@link IotSceneRuleTriggerTypeEnum#DEVICE} 场景,执行规则场景
94 * 94 *
95 * @param message 消息 95 * @param message 消息
96 */ 96 */
97 - void executeRuleSceneByDevice(IotDeviceMessage message); 97 + void executeSceneRuleByDevice(IotDeviceMessage message);
98 98
99 /** 99 /**
100 - * 基于 {@link IotRuleSceneTriggerTypeEnum#TIMER} 场景,执行规则场景 100 + * 基于 {@link IotSceneRuleTriggerTypeEnum#TIMER} 场景,执行规则场景
101 * 101 *
102 * @param id 场景联动规则编号 102 * @param id 场景联动规则编号
103 */ 103 */
104 - void executeRuleSceneByTimer(Long id); 104 + void executeSceneRuleByTimer(Long id);
105 105
106 } 106 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotRuleSceneServiceImpl.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleServiceImpl.java
@@ -15,17 +15,17 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; @@ -15,17 +15,17 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
15 import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; 15 import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils;
16 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; 16 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
17 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; 17 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
18 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleScenePageReqVO;  
19 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleSceneSaveReqVO; 18 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRulePageReqVO;
  19 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleSaveReqVO;
20 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 20 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
21 import cn.iocoder.yudao.module.iot.core.util.IotDeviceMessageUtils; 21 import cn.iocoder.yudao.module.iot.core.util.IotDeviceMessageUtils;
22 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 22 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
23 import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO; 23 import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
24 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 24 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
25 -import cn.iocoder.yudao.module.iot.dal.mysql.rule.IotRuleSceneMapper;  
26 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneConditionOperatorEnum;  
27 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneConditionTypeEnum;  
28 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneTriggerTypeEnum; 25 +import cn.iocoder.yudao.module.iot.dal.mysql.rule.IotSceneRuleMapper;
  26 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionOperatorEnum;
  27 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
  28 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
29 import cn.iocoder.yudao.module.iot.framework.job.core.IotSchedulerManager; 29 import cn.iocoder.yudao.module.iot.framework.job.core.IotSchedulerManager;
30 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; 30 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
31 import cn.iocoder.yudao.module.iot.service.product.IotProductService; 31 import cn.iocoder.yudao.module.iot.service.product.IotProductService;
@@ -53,13 +53,13 @@ import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.RULE_SCENE_NO @@ -53,13 +53,13 @@ import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.RULE_SCENE_NO
53 @Service 53 @Service
54 @Validated 54 @Validated
55 @Slf4j 55 @Slf4j
56 -public class IotRuleSceneServiceImpl implements IotRuleSceneService { 56 +public class IotSceneRuleServiceImpl implements IotSceneRuleService {
57 57
58 @Resource 58 @Resource
59 - private IotRuleSceneMapper ruleSceneMapper; 59 + private IotSceneRuleMapper sceneRuleMapper;
60 60
61 @Resource 61 @Resource
62 - private List<IotSceneRuleAction> ruleSceneActions; 62 + private List<IotSceneRuleAction> sceneRuleActions;
63 63
64 @Resource(name = "iotSchedulerManager") 64 @Resource(name = "iotSchedulerManager")
65 private IotSchedulerManager schedulerManager; 65 private IotSchedulerManager schedulerManager;
@@ -71,90 +71,90 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -71,90 +71,90 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
71 private IotDeviceService deviceService; 71 private IotDeviceService deviceService;
72 72
73 @Override 73 @Override
74 - public Long createRuleScene(IotRuleSceneSaveReqVO createReqVO) {  
75 - IotSceneRuleDO ruleScene = BeanUtils.toBean(createReqVO, IotSceneRuleDO.class);  
76 - ruleSceneMapper.insert(ruleScene);  
77 - return ruleScene.getId(); 74 + public Long createSceneRule(IotSceneRuleSaveReqVO createReqVO) {
  75 + IotSceneRuleDO sceneRule = BeanUtils.toBean(createReqVO, IotSceneRuleDO.class);
  76 + sceneRuleMapper.insert(sceneRule);
  77 + return sceneRule.getId();
78 } 78 }
79 79
80 @Override 80 @Override
81 - public void updateRuleScene(IotRuleSceneSaveReqVO updateReqVO) { 81 + public void updateSceneRule(IotSceneRuleSaveReqVO updateReqVO) {
82 // 校验存在 82 // 校验存在
83 - validateRuleSceneExists(updateReqVO.getId()); 83 + validateSceneRuleExists(updateReqVO.getId());
84 // 更新 84 // 更新
85 IotSceneRuleDO updateObj = BeanUtils.toBean(updateReqVO, IotSceneRuleDO.class); 85 IotSceneRuleDO updateObj = BeanUtils.toBean(updateReqVO, IotSceneRuleDO.class);
86 - ruleSceneMapper.updateById(updateObj); 86 + sceneRuleMapper.updateById(updateObj);
87 } 87 }
88 88
89 @Override 89 @Override
90 - public void updateRuleSceneStatus(Long id, Integer status) { 90 + public void updateSceneRuleStatus(Long id, Integer status) {
91 // 校验存在 91 // 校验存在
92 - validateRuleSceneExists(id); 92 + validateSceneRuleExists(id);
93 // 更新状态 93 // 更新状态
94 IotSceneRuleDO updateObj = new IotSceneRuleDO().setId(id).setStatus(status); 94 IotSceneRuleDO updateObj = new IotSceneRuleDO().setId(id).setStatus(status);
95 - ruleSceneMapper.updateById(updateObj); 95 + sceneRuleMapper.updateById(updateObj);
96 } 96 }
97 97
98 @Override 98 @Override
99 - public void deleteRuleScene(Long id) { 99 + public void deleteSceneRule(Long id) {
100 // 校验存在 100 // 校验存在
101 - validateRuleSceneExists(id); 101 + validateSceneRuleExists(id);
102 // 删除 102 // 删除
103 - ruleSceneMapper.deleteById(id); 103 + sceneRuleMapper.deleteById(id);
104 } 104 }
105 105
106 - private void validateRuleSceneExists(Long id) {  
107 - if (ruleSceneMapper.selectById(id) == null) { 106 + private void validateSceneRuleExists(Long id) {
  107 + if (sceneRuleMapper.selectById(id) == null) {
108 throw exception(RULE_SCENE_NOT_EXISTS); 108 throw exception(RULE_SCENE_NOT_EXISTS);
109 } 109 }
110 } 110 }
111 111
112 @Override 112 @Override
113 - public IotSceneRuleDO getRuleScene(Long id) {  
114 - return ruleSceneMapper.selectById(id); 113 + public IotSceneRuleDO getSceneRule(Long id) {
  114 + return sceneRuleMapper.selectById(id);
115 } 115 }
116 116
117 @Override 117 @Override
118 - public PageResult<IotSceneRuleDO> getRuleScenePage(IotRuleScenePageReqVO pageReqVO) {  
119 - return ruleSceneMapper.selectPage(pageReqVO); 118 + public PageResult<IotSceneRuleDO> getSceneRulePage(IotSceneRulePageReqVO pageReqVO) {
  119 + return sceneRuleMapper.selectPage(pageReqVO);
120 } 120 }
121 121
122 @Override 122 @Override
123 - public void validateRuleSceneList(Collection<Long> ids) { 123 + public void validateSceneRuleList(Collection<Long> ids) {
124 if (CollUtil.isEmpty(ids)) { 124 if (CollUtil.isEmpty(ids)) {
125 return; 125 return;
126 } 126 }
127 // 批量查询存在的规则场景 127 // 批量查询存在的规则场景
128 - List<IotSceneRuleDO> existingScenes = ruleSceneMapper.selectByIds(ids); 128 + List<IotSceneRuleDO> existingScenes = sceneRuleMapper.selectByIds(ids);
129 if (existingScenes.size() != ids.size()) { 129 if (existingScenes.size() != ids.size()) {
130 throw exception(RULE_SCENE_NOT_EXISTS); 130 throw exception(RULE_SCENE_NOT_EXISTS);
131 } 131 }
132 } 132 }
133 133
134 @Override 134 @Override
135 - public List<IotSceneRuleDO> getRuleSceneListByStatus(Integer status) {  
136 - return ruleSceneMapper.selectListByStatus(status); 135 + public List<IotSceneRuleDO> getSceneRuleListByStatus(Integer status) {
  136 + return sceneRuleMapper.selectListByStatus(status);
137 } 137 }
138 138
139 // TODO 芋艿,缓存待实现 139 // TODO 芋艿,缓存待实现
140 @Override 140 @Override
141 - @TenantIgnore // 忽略租户隔离:因为 IotRuleSceneMessageHandler 调用时,一般未传递租户,所以需要忽略  
142 - public List<IotSceneRuleDO> getRuleSceneListByProductKeyAndDeviceNameFromCache(String productKey, String deviceName) { 141 + @TenantIgnore // 忽略租户隔离:因为 IotSceneRuleMessageHandler 调用时,一般未传递租户,所以需要忽略
  142 + public List<IotSceneRuleDO> getSceneRuleListByProductKeyAndDeviceNameFromCache(String productKey, String deviceName) {
143 // TODO @puhui999:一些注释,看看要不要优化下; 143 // TODO @puhui999:一些注释,看看要不要优化下;
144 // 注意:旧的测试代码已删除,因为使用了废弃的数据结构 144 // 注意:旧的测试代码已删除,因为使用了废弃的数据结构
145 // 如需测试,请使用上面的新结构测试代码示例 145 // 如需测试,请使用上面的新结构测试代码示例
146 - List<IotSceneRuleDO> list = ruleSceneMapper.selectList(); 146 + List<IotSceneRuleDO> list = sceneRuleMapper.selectList();
147 // 只返回启用状态的规则场景 147 // 只返回启用状态的规则场景
148 List<IotSceneRuleDO> enabledList = filterList(list, 148 List<IotSceneRuleDO> enabledList = filterList(list,
149 - ruleScene -> CommonStatusEnum.ENABLE.getStatus().equals(ruleScene.getStatus())); 149 + sceneRule -> CommonStatusEnum.ENABLE.getStatus().equals(sceneRule.getStatus()));
150 150
151 // 根据 productKey 和 deviceName 进行匹配 151 // 根据 productKey 和 deviceName 进行匹配
152 - return filterList(enabledList, ruleScene -> {  
153 - if (CollUtil.isEmpty(ruleScene.getTriggers())) { 152 + return filterList(enabledList, sceneRule -> {
  153 + if (CollUtil.isEmpty(sceneRule.getTriggers())) {
154 return false; 154 return false;
155 } 155 }
156 156
157 - for (IotSceneRuleDO.Trigger trigger : ruleScene.getTriggers()) { 157 + for (IotSceneRuleDO.Trigger trigger : sceneRule.getTriggers()) {
158 // 检查触发器是否匹配指定的产品和设备 158 // 检查触发器是否匹配指定的产品和设备
159 if (isMatchProductAndDevice(trigger, productKey, deviceName)) { 159 if (isMatchProductAndDevice(trigger, productKey, deviceName)) {
160 return true; 160 return true;
@@ -210,43 +210,43 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -210,43 +210,43 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
210 } 210 }
211 211
212 @Override 212 @Override
213 - public void executeRuleSceneByDevice(IotDeviceMessage message) { 213 + public void executeSceneRuleByDevice(IotDeviceMessage message) {
214 // TODO @芋艿:这里的 tenantId,通过设备获取; 214 // TODO @芋艿:这里的 tenantId,通过设备获取;
215 TenantUtils.execute(message.getTenantId(), () -> { 215 TenantUtils.execute(message.getTenantId(), () -> {
216 // 1. 获得设备匹配的规则场景 216 // 1. 获得设备匹配的规则场景
217 - List<IotSceneRuleDO> ruleScenes = getMatchedRuleSceneListByMessage(message);  
218 - if (CollUtil.isEmpty(ruleScenes)) { 217 + List<IotSceneRuleDO> sceneRules = getMatchedSceneRuleListByMessage(message);
  218 + if (CollUtil.isEmpty(sceneRules)) {
219 return; 219 return;
220 } 220 }
221 221
222 // 2. 执行规则场景 222 // 2. 执行规则场景
223 - executeRuleSceneAction(message, ruleScenes); 223 + executeSceneRuleAction(message, sceneRules);
224 }); 224 });
225 } 225 }
226 226
227 @Override 227 @Override
228 - public void executeRuleSceneByTimer(Long id) { 228 + public void executeSceneRuleByTimer(Long id) {
229 // 1.1 获得规则场景 229 // 1.1 获得规则场景
230 - IotSceneRuleDO scene = TenantUtils.executeIgnore(() -> ruleSceneMapper.selectById(id)); 230 + IotSceneRuleDO scene = TenantUtils.executeIgnore(() -> sceneRuleMapper.selectById(id));
231 if (scene == null) { 231 if (scene == null) {
232 - log.error("[executeRuleSceneByTimer][规则场景({}) 不存在]", id); 232 + log.error("[executeSceneRuleByTimer][规则场景({}) 不存在]", id);
233 return; 233 return;
234 } 234 }
235 if (CommonStatusEnum.isDisable(scene.getStatus())) { 235 if (CommonStatusEnum.isDisable(scene.getStatus())) {
236 - log.info("[executeRuleSceneByTimer][规则场景({}) 已被禁用]", id); 236 + log.info("[executeSceneRuleByTimer][规则场景({}) 已被禁用]", id);
237 return; 237 return;
238 } 238 }
239 // 1.2 判断是否有定时触发器,避免脏数据 239 // 1.2 判断是否有定时触发器,避免脏数据
240 IotSceneRuleDO.Trigger config = CollUtil.findOne(scene.getTriggers(), 240 IotSceneRuleDO.Trigger config = CollUtil.findOne(scene.getTriggers(),
241 - trigger -> ObjUtil.equals(trigger.getType(), IotRuleSceneTriggerTypeEnum.TIMER.getType())); 241 + trigger -> ObjUtil.equals(trigger.getType(), IotSceneRuleTriggerTypeEnum.TIMER.getType()));
242 if (config == null) { 242 if (config == null) {
243 - log.error("[executeRuleSceneByTimer][规则场景({}) 不存在定时触发器]", scene); 243 + log.error("[executeSceneRuleByTimer][规则场景({}) 不存在定时触发器]", scene);
244 return; 244 return;
245 } 245 }
246 246
247 // 2. 执行规则场景 247 // 2. 执行规则场景
248 TenantUtils.execute(scene.getTenantId(), 248 TenantUtils.execute(scene.getTenantId(),
249 - () -> executeRuleSceneAction(null, ListUtil.toList(scene))); 249 + () -> executeSceneRuleAction(null, ListUtil.toList(scene)));
250 } 250 }
251 251
252 /** 252 /**
@@ -255,36 +255,36 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -255,36 +255,36 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
255 * @param message 设备消息 255 * @param message 设备消息
256 * @return 规则场景列表 256 * @return 规则场景列表
257 */ 257 */
258 - private List<IotSceneRuleDO> getMatchedRuleSceneListByMessage(IotDeviceMessage message) { 258 + private List<IotSceneRuleDO> getMatchedSceneRuleListByMessage(IotDeviceMessage message) {
259 // 1. 匹配设备 259 // 1. 匹配设备
260 // TODO @芋艿:可能需要 getSelf(); 缓存 260 // TODO @芋艿:可能需要 getSelf(); 缓存
261 // 1.1 通过 deviceId 获取设备信息 261 // 1.1 通过 deviceId 获取设备信息
262 IotDeviceDO device = deviceService.getDeviceFromCache(message.getDeviceId()); 262 IotDeviceDO device = deviceService.getDeviceFromCache(message.getDeviceId());
263 if (device == null) { 263 if (device == null) {
264 - log.warn("[getMatchedRuleSceneListByMessage][设备({}) 不存在]", message.getDeviceId()); 264 + log.warn("[getMatchedSceneRuleListByMessage][设备({}) 不存在]", message.getDeviceId());
265 return List.of(); 265 return List.of();
266 } 266 }
267 267
268 // 1.2 通过 productId 获取产品信息 268 // 1.2 通过 productId 获取产品信息
269 IotProductDO product = productService.getProductFromCache(device.getProductId()); 269 IotProductDO product = productService.getProductFromCache(device.getProductId());
270 if (product == null) { 270 if (product == null) {
271 - log.warn("[getMatchedRuleSceneListByMessage][产品({}) 不存在]", device.getProductId()); 271 + log.warn("[getMatchedSceneRuleListByMessage][产品({}) 不存在]", device.getProductId());
272 return List.of(); 272 return List.of();
273 } 273 }
274 274
275 // 1.3 获取匹配的规则场景 275 // 1.3 获取匹配的规则场景
276 - List<IotSceneRuleDO> ruleScenes = getRuleSceneListByProductKeyAndDeviceNameFromCache( 276 + List<IotSceneRuleDO> sceneRules = getSceneRuleListByProductKeyAndDeviceNameFromCache(
277 product.getProductKey(), device.getDeviceName()); 277 product.getProductKey(), device.getDeviceName());
278 - if (CollUtil.isEmpty(ruleScenes)) {  
279 - return ruleScenes; 278 + if (CollUtil.isEmpty(sceneRules)) {
  279 + return sceneRules;
280 } 280 }
281 281
282 // 2. 匹配 trigger 触发器的条件 282 // 2. 匹配 trigger 触发器的条件
283 - return filterList(ruleScenes, ruleScene -> {  
284 - for (IotSceneRuleDO.Trigger trigger : ruleScene.getTriggers()) { 283 + return filterList(sceneRules, sceneRule -> {
  284 + for (IotSceneRuleDO.Trigger trigger : sceneRule.getTriggers()) {
285 // 2.1 检查触发器类型,根据新的枚举值进行匹配 285 // 2.1 检查触发器类型,根据新的枚举值进行匹配
286 // TODO @芋艿:需要根据新的触发器类型枚举进行适配 286 // TODO @芋艿:需要根据新的触发器类型枚举进行适配
287 - // 原来使用 IotRuleSceneTriggerTypeEnum.DEVICE,新结构可能有不同的类型 287 + // 原来使用 IotSceneRuleTriggerTypeEnum.DEVICE,新结构可能有不同的类型
288 288
289 // 2.2 条件分组为空,说明没有匹配的条件,因此不匹配 289 // 2.2 条件分组为空,说明没有匹配的条件,因此不匹配
290 if (CollUtil.isEmpty(trigger.getConditionGroups())) { 290 if (CollUtil.isEmpty(trigger.getConditionGroups())) {
@@ -303,7 +303,7 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -303,7 +303,7 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
303 for (IotSceneRuleDO.TriggerCondition condition : conditionGroup) { 303 for (IotSceneRuleDO.TriggerCondition condition : conditionGroup) {
304 // TODO @芋艿:这里需要实现具体的条件匹配逻辑 304 // TODO @芋艿:这里需要实现具体的条件匹配逻辑
305 // 根据新的 TriggerCondition 结构进行匹配 305 // 根据新的 TriggerCondition 结构进行匹配
306 - if (!isTriggerConditionMatched(message, condition, ruleScene, trigger)) { 306 + if (!isTriggerConditionMatched(message, condition, sceneRule, trigger)) {
307 allConditionsMatched = false; 307 allConditionsMatched = false;
308 break; 308 break;
309 } 309 }
@@ -316,7 +316,7 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -316,7 +316,7 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
316 } 316 }
317 317
318 if (anyGroupMatched) { 318 if (anyGroupMatched) {
319 - log.info("[getMatchedRuleSceneList][消息({}) 匹配到规则场景编号({}) 的触发器({})]", message, ruleScene.getId(), trigger); 319 + log.info("[getMatchedSceneRuleList][消息({}) 匹配到规则场景编号({}) 的触发器({})]", message, sceneRule.getId(), trigger);
320 return true; 320 return true;
321 } 321 }
322 } 322 }
@@ -329,31 +329,31 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -329,31 +329,31 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
329 * 329 *
330 * @param message 设备消息 330 * @param message 设备消息
331 * @param condition 触发条件 331 * @param condition 触发条件
332 - * @param ruleScene 规则场景(用于日志,无其它作用) 332 + * @param sceneRule 规则场景(用于日志,无其它作用)
333 * @param trigger 触发器(用于日志,无其它作用) 333 * @param trigger 触发器(用于日志,无其它作用)
334 * @return 是否匹配 334 * @return 是否匹配
335 */ 335 */
336 private boolean isTriggerConditionMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition, 336 private boolean isTriggerConditionMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition,
337 - IotSceneRuleDO ruleScene, IotSceneRuleDO.Trigger trigger) { 337 + IotSceneRuleDO sceneRule, IotSceneRuleDO.Trigger trigger) {
338 try { 338 try {
339 // 1. 根据条件类型进行匹配 339 // 1. 根据条件类型进行匹配
340 - if (IotRuleSceneConditionTypeEnum.DEVICE_STATE.getType().equals(condition.getType())) { 340 + if (IotSceneRuleConditionTypeEnum.DEVICE_STATE.getType().equals(condition.getType())) {
341 // 设备状态条件匹配 341 // 设备状态条件匹配
342 return matchDeviceStateCondition(message, condition); 342 return matchDeviceStateCondition(message, condition);
343 - } else if (IotRuleSceneConditionTypeEnum.DEVICE_PROPERTY.getType().equals(condition.getType())) { 343 + } else if (IotSceneRuleConditionTypeEnum.DEVICE_PROPERTY.getType().equals(condition.getType())) {
344 // 设备属性条件匹配 344 // 设备属性条件匹配
345 return matchDevicePropertyCondition(message, condition); 345 return matchDevicePropertyCondition(message, condition);
346 - } else if (IotRuleSceneConditionTypeEnum.CURRENT_TIME.getType().equals(condition.getType())) { 346 + } else if (IotSceneRuleConditionTypeEnum.CURRENT_TIME.getType().equals(condition.getType())) {
347 // 当前时间条件匹配 347 // 当前时间条件匹配
348 return matchCurrentTimeCondition(condition); 348 return matchCurrentTimeCondition(condition);
349 } else { 349 } else {
350 log.warn("[isTriggerConditionMatched][规则场景编号({}) 的触发器({}) 存在未知的条件类型({})]", 350 log.warn("[isTriggerConditionMatched][规则场景编号({}) 的触发器({}) 存在未知的条件类型({})]",
351 - ruleScene.getId(), trigger, condition.getType()); 351 + sceneRule.getId(), trigger, condition.getType());
352 return false; 352 return false;
353 } 353 }
354 } catch (Exception e) { 354 } catch (Exception e) {
355 log.error("[isTriggerConditionMatched][规则场景编号({}) 的触发器({}) 条件匹配异常]", 355 log.error("[isTriggerConditionMatched][规则场景编号({}) 的触发器({}) 条件匹配异常]",
356 - ruleScene.getId(), trigger, e); 356 + sceneRule.getId(), trigger, e);
357 return false; 357 return false;
358 } 358 }
359 } 359 }
@@ -420,7 +420,7 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -420,7 +420,7 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
420 private boolean evaluateCondition(Object sourceValue, String operator, String paramValue) { 420 private boolean evaluateCondition(Object sourceValue, String operator, String paramValue) {
421 try { 421 try {
422 // 1. 校验操作符是否合法 422 // 1. 校验操作符是否合法
423 - IotRuleSceneConditionOperatorEnum operatorEnum = IotRuleSceneConditionOperatorEnum.operatorOf(operator); 423 + IotSceneRuleConditionOperatorEnum operatorEnum = IotSceneRuleConditionOperatorEnum.operatorOf(operator);
424 if (operatorEnum == null) { 424 if (operatorEnum == null) {
425 log.warn("[evaluateCondition][存在错误的操作符({})]", operator); 425 log.warn("[evaluateCondition][存在错误的操作符({})]", operator);
426 return false; 426 return false;
@@ -428,22 +428,22 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -428,22 +428,22 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
428 428
429 // 2.1 构建 Spring 表达式的变量 429 // 2.1 构建 Spring 表达式的变量
430 Map<String, Object> springExpressionVariables = MapUtil.<String, Object>builder() 430 Map<String, Object> springExpressionVariables = MapUtil.<String, Object>builder()
431 - .put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_SOURCE, sourceValue) 431 + .put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_SOURCE, sourceValue)
432 .build(); 432 .build();
433 // 2.2 根据操作符类型处理参数值 433 // 2.2 根据操作符类型处理参数值
434 if (StrUtil.isNotBlank(paramValue)) { 434 if (StrUtil.isNotBlank(paramValue)) {
435 - // TODO @puhui999:这里是不是在 IotRuleSceneConditionOperatorEnum 加个属性;  
436 - if (operatorEnum == IotRuleSceneConditionOperatorEnum.IN  
437 - || operatorEnum == IotRuleSceneConditionOperatorEnum.NOT_IN  
438 - || operatorEnum == IotRuleSceneConditionOperatorEnum.BETWEEN  
439 - || operatorEnum == IotRuleSceneConditionOperatorEnum.NOT_BETWEEN) { 435 + // TODO @puhui999:这里是不是在 IotSceneRuleConditionOperatorEnum 加个属性;
  436 + if (operatorEnum == IotSceneRuleConditionOperatorEnum.IN
  437 + || operatorEnum == IotSceneRuleConditionOperatorEnum.NOT_IN
  438 + || operatorEnum == IotSceneRuleConditionOperatorEnum.BETWEEN
  439 + || operatorEnum == IotSceneRuleConditionOperatorEnum.NOT_BETWEEN) {
440 // 处理多值情况 440 // 处理多值情况
441 List<String> paramValues = StrUtil.split(paramValue, CharPool.COMMA); 441 List<String> paramValues = StrUtil.split(paramValue, CharPool.COMMA);
442 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_VALUE_LIST, 442 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_VALUE_LIST,
443 convertList(paramValues, NumberUtil::parseDouble)); 443 convertList(paramValues, NumberUtil::parseDouble));
444 } else { 444 } else {
445 // 处理单值情况 445 // 处理单值情况
446 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_VALUE, 446 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_VALUE,
447 NumberUtil.parseDouble(paramValue)); 447 NumberUtil.parseDouble(paramValue));
448 } 448 }
449 } 449 }
@@ -464,19 +464,19 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -464,19 +464,19 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
464 * 464 *
465 * @param message 设备消息 465 * @param message 设备消息
466 * @param condition 触发条件 466 * @param condition 触发条件
467 - * @param ruleScene 规则场景(用于日志,无其它作用) 467 + * @param sceneRule 规则场景(用于日志,无其它作用)
468 * @param trigger 触发器(用于日志,无其它作用) 468 * @param trigger 触发器(用于日志,无其它作用)
469 * @return 是否匹配 469 * @return 是否匹配
470 */ 470 */
471 @SuppressWarnings({"unchecked", "DataFlowIssue"}) 471 @SuppressWarnings({"unchecked", "DataFlowIssue"})
472 private boolean isTriggerConditionParameterMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition, 472 private boolean isTriggerConditionParameterMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition,
473 - IotSceneRuleDO ruleScene, IotSceneRuleDO.Trigger trigger) { 473 + IotSceneRuleDO sceneRule, IotSceneRuleDO.Trigger trigger) {
474 // 1.1 校验操作符是否合法 474 // 1.1 校验操作符是否合法
475 - IotRuleSceneConditionOperatorEnum operator =  
476 - IotRuleSceneConditionOperatorEnum.operatorOf(condition.getOperator()); 475 + IotSceneRuleConditionOperatorEnum operator =
  476 + IotSceneRuleConditionOperatorEnum.operatorOf(condition.getOperator());
477 if (operator == null) { 477 if (operator == null) {
478 log.error("[isTriggerConditionParameterMatched][规则场景编号({}) 的触发器({}) 存在错误的操作符({})]", 478 log.error("[isTriggerConditionParameterMatched][规则场景编号({}) 的触发器({}) 存在错误的操作符({})]",
479 - ruleScene.getId(), trigger, condition.getOperator()); 479 + sceneRule.getId(), trigger, condition.getOperator());
480 return false; 480 return false;
481 } 481 }
482 // 1.2 校验消息是否包含对应的值 482 // 1.2 校验消息是否包含对应的值
@@ -488,31 +488,31 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -488,31 +488,31 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
488 // 2.1 构建 Spring 表达式的变量 488 // 2.1 构建 Spring 表达式的变量
489 Map<String, Object> springExpressionVariables = new HashMap<>(); 489 Map<String, Object> springExpressionVariables = new HashMap<>();
490 try { 490 try {
491 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_SOURCE, messageValue);  
492 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_VALUE, condition.getParam()); 491 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_SOURCE, messageValue);
  492 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_VALUE, condition.getParam());
493 List<String> parameterValues = StrUtil.splitTrim(condition.getParam(), CharPool.COMMA); 493 List<String> parameterValues = StrUtil.splitTrim(condition.getParam(), CharPool.COMMA);
494 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_VALUE_LIST, parameterValues); 494 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_VALUE_LIST, parameterValues);
495 // 特殊:解决数字的比较。因为 Spring 是基于它的 compareTo 方法,对数字的比较存在问题! 495 // 特殊:解决数字的比较。因为 Spring 是基于它的 compareTo 方法,对数字的比较存在问题!
496 - if (ObjectUtils.equalsAny(operator, IotRuleSceneConditionOperatorEnum.BETWEEN,  
497 - IotRuleSceneConditionOperatorEnum.NOT_BETWEEN,  
498 - IotRuleSceneConditionOperatorEnum.GREATER_THAN,  
499 - IotRuleSceneConditionOperatorEnum.GREATER_THAN_OR_EQUALS,  
500 - IotRuleSceneConditionOperatorEnum.LESS_THAN,  
501 - IotRuleSceneConditionOperatorEnum.LESS_THAN_OR_EQUALS) 496 + if (ObjectUtils.equalsAny(operator, IotSceneRuleConditionOperatorEnum.BETWEEN,
  497 + IotSceneRuleConditionOperatorEnum.NOT_BETWEEN,
  498 + IotSceneRuleConditionOperatorEnum.GREATER_THAN,
  499 + IotSceneRuleConditionOperatorEnum.GREATER_THAN_OR_EQUALS,
  500 + IotSceneRuleConditionOperatorEnum.LESS_THAN,
  501 + IotSceneRuleConditionOperatorEnum.LESS_THAN_OR_EQUALS)
502 && NumberUtil.isNumber(messageValue) 502 && NumberUtil.isNumber(messageValue)
503 && NumberUtils.isAllNumber(parameterValues)) { 503 && NumberUtils.isAllNumber(parameterValues)) {
504 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_SOURCE, 504 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_SOURCE,
505 NumberUtil.parseDouble(messageValue)); 505 NumberUtil.parseDouble(messageValue));
506 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_VALUE, 506 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_VALUE,
507 NumberUtil.parseDouble(condition.getParam())); 507 NumberUtil.parseDouble(condition.getParam()));
508 - springExpressionVariables.put(IotRuleSceneConditionOperatorEnum.SPRING_EXPRESSION_VALUE_LIST, 508 + springExpressionVariables.put(IotSceneRuleConditionOperatorEnum.SPRING_EXPRESSION_VALUE_LIST,
509 convertList(parameterValues, NumberUtil::parseDouble)); 509 convertList(parameterValues, NumberUtil::parseDouble));
510 } 510 }
511 // 2.2 计算 Spring 表达式 511 // 2.2 计算 Spring 表达式
512 return (Boolean) SpringExpressionUtils.parseExpression(operator.getSpringExpression(), springExpressionVariables); 512 return (Boolean) SpringExpressionUtils.parseExpression(operator.getSpringExpression(), springExpressionVariables);
513 } catch (Exception e) { 513 } catch (Exception e) {
514 log.error("[isTriggerConditionParameterMatched][消息({}) 规则场景编号({}) 的触发器({}) 的匹配表达式({}/{}) 计算异常]", 514 log.error("[isTriggerConditionParameterMatched][消息({}) 规则场景编号({}) 的触发器({}) 的匹配表达式({}/{}) 计算异常]",
515 - message, ruleScene.getId(), trigger, operator, springExpressionVariables, e); 515 + message, sceneRule.getId(), trigger, operator, springExpressionVariables, e);
516 return false; 516 return false;
517 } 517 }
518 } 518 }
@@ -521,15 +521,15 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -521,15 +521,15 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
521 * 执行规则场景的动作 521 * 执行规则场景的动作
522 * 522 *
523 * @param message 设备消息 523 * @param message 设备消息
524 - * @param ruleScenes 规则场景列表 524 + * @param sceneRules 规则场景列表
525 */ 525 */
526 - private void executeRuleSceneAction(IotDeviceMessage message, List<IotSceneRuleDO> ruleScenes) { 526 + private void executeSceneRuleAction(IotDeviceMessage message, List<IotSceneRuleDO> sceneRules) {
527 // 1. 遍历规则场景 527 // 1. 遍历规则场景
528 - ruleScenes.forEach(ruleScene -> { 528 + sceneRules.forEach(sceneRule -> {
529 // 2. 遍历规则场景的动作 529 // 2. 遍历规则场景的动作
530 - ruleScene.getActions().forEach(actionConfig -> { 530 + sceneRule.getActions().forEach(actionConfig -> {
531 // 3.1 获取对应的动作 Action 数组 531 // 3.1 获取对应的动作 Action 数组
532 - List<IotSceneRuleAction> actions = filterList(ruleSceneActions, 532 + List<IotSceneRuleAction> actions = filterList(sceneRuleActions,
533 action -> action.getType().getType().equals(actionConfig.getType())); 533 action -> action.getType().getType().equals(actionConfig.getType()));
534 if (CollUtil.isEmpty(actions)) { 534 if (CollUtil.isEmpty(actions)) {
535 return; 535 return;
@@ -537,12 +537,12 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService { @@ -537,12 +537,12 @@ public class IotRuleSceneServiceImpl implements IotRuleSceneService {
537 // 3.2 执行动作 537 // 3.2 执行动作
538 actions.forEach(action -> { 538 actions.forEach(action -> {
539 try { 539 try {
540 - action.execute(message, ruleScene, actionConfig);  
541 - log.info("[executeRuleSceneAction][消息({}) 规则场景编号({}) 的执行动作({}) 成功]",  
542 - message, ruleScene.getId(), actionConfig); 540 + action.execute(message, sceneRule, actionConfig);
  541 + log.info("[executeSceneRuleAction][消息({}) 规则场景编号({}) 的执行动作({}) 成功]",
  542 + message, sceneRule.getId(), actionConfig);
543 } catch (Exception e) { 543 } catch (Exception e) {
544 - log.error("[executeRuleSceneAction][消息({}) 规则场景编号({}) 的执行动作({}) 执行异常]",  
545 - message, ruleScene.getId(), actionConfig, e); 544 + log.error("[executeSceneRuleAction][消息({}) 规则场景编号({}) 的执行动作({}) 执行异常]",
  545 + message, sceneRule.getId(), actionConfig, e);
546 } 546 }
547 }); 547 });
548 }); 548 });
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotAlertRecoverSceneRuleAction.java
@@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 5 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
6 import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertRecordDO; 6 import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertRecordDO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
8 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneActionTypeEnum; 8 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleActionTypeEnum;
9 import cn.iocoder.yudao.module.iot.service.alert.IotAlertRecordService; 9 import cn.iocoder.yudao.module.iot.service.alert.IotAlertRecordService;
10 import jakarta.annotation.Resource; 10 import jakarta.annotation.Resource;
11 import org.springframework.stereotype.Component; 11 import org.springframework.stereotype.Component;
@@ -42,8 +42,8 @@ public class IotAlertRecoverSceneRuleAction implements IotSceneRuleAction { @@ -42,8 +42,8 @@ public class IotAlertRecoverSceneRuleAction implements IotSceneRuleAction {
42 } 42 }
43 43
44 @Override 44 @Override
45 - public IotRuleSceneActionTypeEnum getType() {  
46 - return IotRuleSceneActionTypeEnum.ALERT_RECOVER; 45 + public IotSceneRuleActionTypeEnum getType() {
  46 + return IotSceneRuleActionTypeEnum.ALERT_RECOVER;
47 } 47 }
48 48
49 } 49 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotAlertTriggerSceneRuleAction.java
@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 5 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
6 import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO; 6 import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
8 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneActionTypeEnum; 8 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleActionTypeEnum;
9 import cn.iocoder.yudao.module.iot.service.alert.IotAlertConfigService; 9 import cn.iocoder.yudao.module.iot.service.alert.IotAlertConfigService;
10 import cn.iocoder.yudao.module.iot.service.alert.IotAlertRecordService; 10 import cn.iocoder.yudao.module.iot.service.alert.IotAlertRecordService;
11 import cn.iocoder.yudao.module.system.api.mail.MailSendApi; 11 import cn.iocoder.yudao.module.system.api.mail.MailSendApi;
@@ -62,8 +62,8 @@ public class IotAlertTriggerSceneRuleAction implements IotSceneRuleAction { @@ -62,8 +62,8 @@ public class IotAlertTriggerSceneRuleAction implements IotSceneRuleAction {
62 } 62 }
63 63
64 @Override 64 @Override
65 - public IotRuleSceneActionTypeEnum getType() {  
66 - return IotRuleSceneActionTypeEnum.ALERT_TRIGGER; 65 + public IotSceneRuleActionTypeEnum getType() {
  66 + return IotSceneRuleActionTypeEnum.ALERT_TRIGGER;
67 } 67 }
68 68
69 } 69 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlRuleSceneAction.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlSceneRuleAction.java
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.action; @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.action;
2 2
3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
5 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneActionTypeEnum; 5 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleActionTypeEnum;
6 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; 6 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
7 import cn.iocoder.yudao.module.iot.service.device.message.IotDeviceMessageService; 7 import cn.iocoder.yudao.module.iot.service.device.message.IotDeviceMessageService;
8 import jakarta.annotation.Resource; 8 import jakarta.annotation.Resource;
@@ -16,7 +16,7 @@ import org.springframework.stereotype.Component; @@ -16,7 +16,7 @@ import org.springframework.stereotype.Component;
16 */ 16 */
17 @Component 17 @Component
18 @Slf4j 18 @Slf4j
19 -public class IotDeviceControlRuleSceneAction implements IotSceneRuleAction { 19 +public class IotDeviceControlSceneRuleAction implements IotSceneRuleAction {
20 20
21 @Resource 21 @Resource
22 private IotDeviceService deviceService; 22 private IotDeviceService deviceService;
@@ -48,8 +48,8 @@ public class IotDeviceControlRuleSceneAction implements IotSceneRuleAction { @@ -48,8 +48,8 @@ public class IotDeviceControlRuleSceneAction implements IotSceneRuleAction {
48 } 48 }
49 49
50 @Override 50 @Override
51 - public IotRuleSceneActionTypeEnum getType() {  
52 - return IotRuleSceneActionTypeEnum.DEVICE_PROPERTY_SET; 51 + public IotSceneRuleActionTypeEnum getType() {
  52 + return IotSceneRuleActionTypeEnum.DEVICE_PROPERTY_SET;
53 } 53 }
54 54
55 } 55 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotSceneRuleAction.java
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.action; @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.action;
2 2
3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; 3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
5 -import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneActionTypeEnum; 5 +import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleActionTypeEnum;
6 6
7 import javax.annotation.Nullable; 7 import javax.annotation.Nullable;
8 8
@@ -31,6 +31,6 @@ public interface IotSceneRuleAction { @@ -31,6 +31,6 @@ public interface IotSceneRuleAction {
31 * 31 *
32 * @return 类型 32 * @return 类型
33 */ 33 */
34 - IotRuleSceneActionTypeEnum getType(); 34 + IotSceneRuleActionTypeEnum getType();
35 35
36 } 36 }
yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotRuleSceneServiceSimpleTest.java renamed to yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleServiceSimpleTest.java
@@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.iot.service.rule.scene; @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.iot.service.rule.scene;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; 4 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
5 -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotRuleSceneSaveReqVO; 5 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleSaveReqVO;
6 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO; 6 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
7 -import cn.iocoder.yudao.module.iot.dal.mysql.rule.IotRuleSceneMapper; 7 +import cn.iocoder.yudao.module.iot.dal.mysql.rule.IotSceneRuleMapper;
8 import cn.iocoder.yudao.module.iot.framework.job.core.IotSchedulerManager; 8 import cn.iocoder.yudao.module.iot.framework.job.core.IotSchedulerManager;
9 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; 9 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
10 import cn.iocoder.yudao.module.iot.service.product.IotProductService; 10 import cn.iocoder.yudao.module.iot.service.product.IotProductService;
@@ -24,21 +24,21 @@ import static org.mockito.ArgumentMatchers.any; @@ -24,21 +24,21 @@ import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.Mockito.*; 24 import static org.mockito.Mockito.*;
25 25
26 /** 26 /**
27 - * {@link IotRuleSceneServiceImpl} 的简化单元测试类 27 + * {@link IotSceneRuleServiceImpl} 的简化单元测试类
28 * 使用 Mockito 进行纯单元测试,不依赖 Spring 容器 28 * 使用 Mockito 进行纯单元测试,不依赖 Spring 容器
29 * 29 *
30 * @author 芋道源码 30 * @author 芋道源码
31 */ 31 */
32 -public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest { 32 +public class IotSceneRuleServiceSimpleTest extends BaseMockitoUnitTest {
33 33
34 @InjectMocks 34 @InjectMocks
35 - private IotRuleSceneServiceImpl ruleSceneService; 35 + private IotSceneRuleServiceImpl sceneRuleService;
36 36
37 @Mock 37 @Mock
38 - private IotRuleSceneMapper ruleSceneMapper; 38 + private IotSceneRuleMapper sceneRuleMapper;
39 39
40 @Mock 40 @Mock
41 - private List<IotSceneRuleAction> ruleSceneActions; 41 + private List<IotSceneRuleAction> sceneRuleActions;
42 42
43 @Mock 43 @Mock
44 private IotSchedulerManager schedulerManager; 44 private IotSchedulerManager schedulerManager;
@@ -50,9 +50,9 @@ public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest { @@ -50,9 +50,9 @@ public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest {
50 private IotDeviceService deviceService; 50 private IotDeviceService deviceService;
51 51
52 @Test 52 @Test
53 - public void testCreateRuleScene_success() { 53 + public void testCreateScene_Rule_success() {
54 // 准备参数 54 // 准备参数
55 - IotRuleSceneSaveReqVO createReqVO = randomPojo(IotRuleSceneSaveReqVO.class, o -> { 55 + IotSceneRuleSaveReqVO createReqVO = randomPojo(IotSceneRuleSaveReqVO.class, o -> {
56 o.setId(null); 56 o.setId(null);
57 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 57 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
58 o.setTriggers(Collections.singletonList(randomPojo(IotSceneRuleDO.Trigger.class))); 58 o.setTriggers(Collections.singletonList(randomPojo(IotSceneRuleDO.Trigger.class)));
@@ -61,25 +61,25 @@ public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest { @@ -61,25 +61,25 @@ public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest {
61 61
62 // Mock 行为 62 // Mock 行为
63 Long expectedId = randomLongId(); 63 Long expectedId = randomLongId();
64 - when(ruleSceneMapper.insert(any(IotSceneRuleDO.class))).thenAnswer(invocation -> {  
65 - IotSceneRuleDO ruleScene = invocation.getArgument(0);  
66 - ruleScene.setId(expectedId); 64 + when(sceneRuleMapper.insert(any(IotSceneRuleDO.class))).thenAnswer(invocation -> {
  65 + IotSceneRuleDO sceneRule = invocation.getArgument(0);
  66 + sceneRule.setId(expectedId);
67 return 1; 67 return 1;
68 }); 68 });
69 69
70 // 调用 70 // 调用
71 - Long ruleSceneId = ruleSceneService.createRuleScene(createReqVO); 71 + Long sceneRuleId = sceneRuleService.createSceneRule(createReqVO);
72 72
73 // 断言 73 // 断言
74 - assertEquals(expectedId, ruleSceneId);  
75 - verify(ruleSceneMapper, times(1)).insert(any(IotSceneRuleDO.class)); 74 + assertEquals(expectedId, sceneRuleId);
  75 + verify(sceneRuleMapper, times(1)).insert(any(IotSceneRuleDO.class));
76 } 76 }
77 77
78 @Test 78 @Test
79 - public void testUpdateRuleScene_success() { 79 + public void testUpdateScene_Rule_success() {
80 // 准备参数 80 // 准备参数
81 Long id = randomLongId(); 81 Long id = randomLongId();
82 - IotRuleSceneSaveReqVO updateReqVO = randomPojo(IotRuleSceneSaveReqVO.class, o -> { 82 + IotSceneRuleSaveReqVO updateReqVO = randomPojo(IotSceneRuleSaveReqVO.class, o -> {
83 o.setId(id); 83 o.setId(id);
84 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 84 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
85 o.setTriggers(Collections.singletonList(randomPojo(IotSceneRuleDO.Trigger.class))); 85 o.setTriggers(Collections.singletonList(randomPojo(IotSceneRuleDO.Trigger.class)));
@@ -87,125 +87,125 @@ public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest { @@ -87,125 +87,125 @@ public class IotRuleSceneServiceSimpleTest extends BaseMockitoUnitTest {
87 }); 87 });
88 88
89 // Mock 行为 89 // Mock 行为
90 - IotSceneRuleDO existingRuleScene = randomPojo(IotSceneRuleDO.class, o -> o.setId(id));  
91 - when(ruleSceneMapper.selectById(id)).thenReturn(existingRuleScene);  
92 - when(ruleSceneMapper.updateById(any(IotSceneRuleDO.class))).thenReturn(1); 90 + IotSceneRuleDO existingSceneRule = randomPojo(IotSceneRuleDO.class, o -> o.setId(id));
  91 + when(sceneRuleMapper.selectById(id)).thenReturn(existingSceneRule);
  92 + when(sceneRuleMapper.updateById(any(IotSceneRuleDO.class))).thenReturn(1);
93 93
94 // 调用 94 // 调用
95 - assertDoesNotThrow(() -> ruleSceneService.updateRuleScene(updateReqVO)); 95 + assertDoesNotThrow(() -> sceneRuleService.updateSceneRule(updateReqVO));
96 96
97 // 验证 97 // 验证
98 - verify(ruleSceneMapper, times(1)).selectById(id);  
99 - verify(ruleSceneMapper, times(1)).updateById(any(IotSceneRuleDO.class)); 98 + verify(sceneRuleMapper, times(1)).selectById(id);
  99 + verify(sceneRuleMapper, times(1)).updateById(any(IotSceneRuleDO.class));
100 } 100 }
101 101
102 @Test 102 @Test
103 - public void testDeleteRuleScene_success() { 103 + public void testDeleteSceneRule_success() {
104 // 准备参数 104 // 准备参数
105 Long id = randomLongId(); 105 Long id = randomLongId();
106 106
107 // Mock 行为 107 // Mock 行为
108 - IotSceneRuleDO existingRuleScene = randomPojo(IotSceneRuleDO.class, o -> o.setId(id));  
109 - when(ruleSceneMapper.selectById(id)).thenReturn(existingRuleScene);  
110 - when(ruleSceneMapper.deleteById(id)).thenReturn(1); 108 + IotSceneRuleDO existingSceneRule = randomPojo(IotSceneRuleDO.class, o -> o.setId(id));
  109 + when(sceneRuleMapper.selectById(id)).thenReturn(existingSceneRule);
  110 + when(sceneRuleMapper.deleteById(id)).thenReturn(1);
111 111
112 // 调用 112 // 调用
113 - assertDoesNotThrow(() -> ruleSceneService.deleteRuleScene(id)); 113 + assertDoesNotThrow(() -> sceneRuleService.deleteSceneRule(id));
114 114
115 // 验证 115 // 验证
116 - verify(ruleSceneMapper, times(1)).selectById(id);  
117 - verify(ruleSceneMapper, times(1)).deleteById(id); 116 + verify(sceneRuleMapper, times(1)).selectById(id);
  117 + verify(sceneRuleMapper, times(1)).deleteById(id);
118 } 118 }
119 119
120 @Test 120 @Test
121 - public void testGetRuleScene() { 121 + public void testGetSceneRule() {
122 // 准备参数 122 // 准备参数
123 Long id = randomLongId(); 123 Long id = randomLongId();
124 - IotSceneRuleDO expectedRuleScene = randomPojo(IotSceneRuleDO.class, o -> o.setId(id)); 124 + IotSceneRuleDO expectedSceneRule = randomPojo(IotSceneRuleDO.class, o -> o.setId(id));
125 125
126 // Mock 行为 126 // Mock 行为
127 - when(ruleSceneMapper.selectById(id)).thenReturn(expectedRuleScene); 127 + when(sceneRuleMapper.selectById(id)).thenReturn(expectedSceneRule);
128 128
129 // 调用 129 // 调用
130 - IotSceneRuleDO result = ruleSceneService.getRuleScene(id); 130 + IotSceneRuleDO result = sceneRuleService.getSceneRule(id);
131 131
132 // 断言 132 // 断言
133 - assertEquals(expectedRuleScene, result);  
134 - verify(ruleSceneMapper, times(1)).selectById(id); 133 + assertEquals(expectedSceneRule, result);
  134 + verify(sceneRuleMapper, times(1)).selectById(id);
135 } 135 }
136 136
137 @Test 137 @Test
138 - public void testUpdateRuleSceneStatus_success() { 138 + public void testUpdateSceneRuleStatus_success() {
139 // 准备参数 139 // 准备参数
140 Long id = randomLongId(); 140 Long id = randomLongId();
141 Integer status = CommonStatusEnum.DISABLE.getStatus(); 141 Integer status = CommonStatusEnum.DISABLE.getStatus();
142 142
143 // Mock 行为 143 // Mock 行为
144 - IotSceneRuleDO existingRuleScene = randomPojo(IotSceneRuleDO.class, o -> { 144 + IotSceneRuleDO existingSceneRule = randomPojo(IotSceneRuleDO.class, o -> {
145 o.setId(id); 145 o.setId(id);
146 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 146 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
147 }); 147 });
148 - when(ruleSceneMapper.selectById(id)).thenReturn(existingRuleScene);  
149 - when(ruleSceneMapper.updateById(any(IotSceneRuleDO.class))).thenReturn(1); 148 + when(sceneRuleMapper.selectById(id)).thenReturn(existingSceneRule);
  149 + when(sceneRuleMapper.updateById(any(IotSceneRuleDO.class))).thenReturn(1);
150 150
151 // 调用 151 // 调用
152 - assertDoesNotThrow(() -> ruleSceneService.updateRuleSceneStatus(id, status)); 152 + assertDoesNotThrow(() -> sceneRuleService.updateSceneRuleStatus(id, status));
153 153
154 // 验证 154 // 验证
155 - verify(ruleSceneMapper, times(1)).selectById(id);  
156 - verify(ruleSceneMapper, times(1)).updateById(any(IotSceneRuleDO.class)); 155 + verify(sceneRuleMapper, times(1)).selectById(id);
  156 + verify(sceneRuleMapper, times(1)).updateById(any(IotSceneRuleDO.class));
157 } 157 }
158 158
159 @Test 159 @Test
160 - public void testExecuteRuleSceneByTimer_success() { 160 + public void testExecuteSceneRuleByTimer_success() {
161 // 准备参数 161 // 准备参数
162 Long id = randomLongId(); 162 Long id = randomLongId();
163 163
164 // Mock 行为 164 // Mock 行为
165 - IotSceneRuleDO ruleScene = randomPojo(IotSceneRuleDO.class, o -> { 165 + IotSceneRuleDO sceneRule = randomPojo(IotSceneRuleDO.class, o -> {
166 o.setId(id); 166 o.setId(id);
167 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 167 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
168 }); 168 });
169 - when(ruleSceneMapper.selectById(id)).thenReturn(ruleScene); 169 + when(sceneRuleMapper.selectById(id)).thenReturn(sceneRule);
170 170
171 // 调用 171 // 调用
172 - assertDoesNotThrow(() -> ruleSceneService.executeRuleSceneByTimer(id)); 172 + assertDoesNotThrow(() -> sceneRuleService.executeSceneRuleByTimer(id));
173 173
174 // 验证 174 // 验证
175 - verify(ruleSceneMapper, times(1)).selectById(id); 175 + verify(sceneRuleMapper, times(1)).selectById(id);
176 } 176 }
177 177
178 @Test 178 @Test
179 - public void testExecuteRuleSceneByTimer_notExists() { 179 + public void testExecuteSceneRuleByTimer_notExists() {
180 // 准备参数 180 // 准备参数
181 Long id = randomLongId(); 181 Long id = randomLongId();
182 182
183 // Mock 行为 183 // Mock 行为
184 - when(ruleSceneMapper.selectById(id)).thenReturn(null); 184 + when(sceneRuleMapper.selectById(id)).thenReturn(null);
185 185
186 // 调用 - 不存在的场景规则应该不会抛异常,只是记录日志 186 // 调用 - 不存在的场景规则应该不会抛异常,只是记录日志
187 - assertDoesNotThrow(() -> ruleSceneService.executeRuleSceneByTimer(id)); 187 + assertDoesNotThrow(() -> sceneRuleService.executeSceneRuleByTimer(id));
188 188
189 // 验证 189 // 验证
190 - verify(ruleSceneMapper, times(1)).selectById(id); 190 + verify(sceneRuleMapper, times(1)).selectById(id);
191 } 191 }
192 192
193 @Test 193 @Test
194 - public void testExecuteRuleSceneByTimer_disabled() { 194 + public void testExecuteSceneRuleByTimer_disabled() {
195 // 准备参数 195 // 准备参数
196 Long id = randomLongId(); 196 Long id = randomLongId();
197 197
198 // Mock 行为 198 // Mock 行为
199 - IotSceneRuleDO ruleScene = randomPojo(IotSceneRuleDO.class, o -> { 199 + IotSceneRuleDO sceneRule = randomPojo(IotSceneRuleDO.class, o -> {
200 o.setId(id); 200 o.setId(id);
201 o.setStatus(CommonStatusEnum.DISABLE.getStatus()); 201 o.setStatus(CommonStatusEnum.DISABLE.getStatus());
202 }); 202 });
203 - when(ruleSceneMapper.selectById(id)).thenReturn(ruleScene); 203 + when(sceneRuleMapper.selectById(id)).thenReturn(sceneRule);
204 204
205 // 调用 - 禁用的场景规则应该不会执行,只是记录日志 205 // 调用 - 禁用的场景规则应该不会执行,只是记录日志
206 - assertDoesNotThrow(() -> ruleSceneService.executeRuleSceneByTimer(id)); 206 + assertDoesNotThrow(() -> sceneRuleService.executeSceneRuleByTimer(id));
207 207
208 // 验证 208 // 验证
209 - verify(ruleSceneMapper, times(1)).selectById(id); 209 + verify(sceneRuleMapper, times(1)).selectById(id);
210 } 210 }
211 } 211 }