diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceCategoryTerm.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceCategoryTerm.java
new file mode 100755
index 00000000..b9f5e551
--- /dev/null
+++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/term/DeviceCategoryTerm.java
@@ -0,0 +1,65 @@
+package org.jetlinks.community.device.service.term;
+
+import org.hswebframework.ezorm.core.param.Term;
+import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.AbstractTermFragmentBuilder;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 根据产品分类查询与产品关联的数据,如: 查询某个分类下的产品列表.
+ *
+ *
+ * 注意: 查询时指定列名是和产品ID关联的列或者实体类属性名.
+ * 如: 查询设备列表时则使用productId.
+ * 此条件仅支持关系型数据库中的查询.
+ *
+ *
+ * 在通用查询接口中可以使用动态查询参数中的term.termType来使用此功能.
+ * 查看动态查询参数说明
+ *
+ * 在内部通用条件中,可以使用DSL方式创建条件,例如:
+ *
+ * createQuery()
+ * .where()
+ * .and("productId","dev-prod-cat",cateId)
+ * .fetch()
+ *
+ *
+ * @author zhouhao
+ * @since 1.3
+ */
+@Component
+public class DeviceCategoryTerm extends AbstractTermFragmentBuilder {
+
+ public DeviceCategoryTerm() {
+ super("dev-prod-cat", "按产品品类查询");
+ }
+
+ @Override
+ public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) {
+
+ PrepareSqlFragments sqlFragments = PrepareSqlFragments.of();
+
+ List