2026-06-24 f4bd1f3c89d906131495a0aca5aaf82966378510
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package cn.iocoder.yudao.module.iot.service.product;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.iot.controller.admin.product.vo.product.IotProductPageReqVO;
import cn.iocoder.yudao.module.iot.controller.admin.product.vo.product.IotProductSaveReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
import jakarta.validation.Valid;
 
import javax.annotation.Nullable;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
import java.util.Map;
 
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
 
/**
 * IoT 产品 Service 接口
 *
 * @author ahh
 */
public interface IotProductService {
 
    /**
     * 创建产品
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProduct(@Valid IotProductSaveReqVO createReqVO);
 
    /**
     * 更新产品
     *
     * @param updateReqVO 更新信息
     */
    void updateProduct(@Valid IotProductSaveReqVO updateReqVO);
 
    /**
     * 删除产品
     *
     * @param id 编号
     */
    void deleteProduct(Long id);
 
    /**
     * 获得产品
     *
     * @param id 编号
     * @return 产品
     */
    IotProductDO getProduct(Long id);
 
    /**
     * 【缓存】获得产品
     * <p>
     * 注意:该方法会忽略租户信息,所以调用时,需要确认会不会有跨租户访问的风险!!!
     *
     * @param id 编号
     * @return 产品
     */
    IotProductDO getProductFromCache(Long id);
 
    /**
     * 根据产品 key 获得产品
     *
     * @param productKey 产品 key
     * @return 产品
     */
    IotProductDO getProductByProductKey(String productKey);
 
    /**
     * 校验产品存在
     *
     * @param id 编号
     * @return 产品
     */
    IotProductDO validateProductExists(Long id);
 
    /**
     * 校验产品存在
     *
     * @param productKey 产品 key
     * @return 产品
     */
    IotProductDO validateProductExists(String productKey);
 
    /**
     * 获得产品分页
     *
     * @param pageReqVO 分页查询
     * @return 产品分页
     */
    PageResult<IotProductDO> getProductPage(IotProductPageReqVO pageReqVO);
 
    /**
     * 更新产品状态
     *
     * @param id 编号
     * @param status 状态
     */
    void updateProductStatus(Long id, Integer status);
 
    /**
     * 获得所有产品
     *
     * @return 产品列表
     */
    List<IotProductDO> getProductList();
 
    /**
     * 根据设备类型获得产品列表
     *
     * @param deviceType 设备类型(可选)
     * @return 产品列表
     */
    List<IotProductDO> getProductList(@Nullable Integer deviceType);
 
    /**
     * 获得产品数量
     *
     * @param createTime 创建时间,如果为空,则统计所有产品数量
     * @return 产品数量
     */
    Long getProductCount(@Nullable LocalDateTime createTime);
 
    /**
     * 批量获得产品列表
     *
     * @param ids 产品编号集合
     * @return 产品列表
     */
    List<IotProductDO> getProductList(Collection<Long> ids);
 
    /**
     * 批量获得产品 Map
     *
     * @param ids 产品编号集合
     * @return 产品 Map(key: 产品编号, value: 产品)
     */
    default Map<Long, IotProductDO> getProductMap(Collection<Long> ids) {
        return convertMap(getProductList(ids), IotProductDO::getId);
    }
 
    /**
     * 批量校验产品存在
     *
     * @param ids 产品编号集合
     */
    void validateProductsExist(Collection<Long> ids);
 
    /**
     * 同步产品的 TDengine 表结构
     *
     * 目的:当 MySQL 和 TDengine 不同步时,强制将已发布产品的表结构同步到 TDengine 中
     */
    void syncProductPropertyTable();
 
}