Browse Source

feat: 新增贡献者接口

jay 1 year ago
parent
commit
54d4b91ea5

+ 195 - 0
iot-module/iot-contribution/pom.xml

@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>iot-module</artifactId>
+        <groupId>cc.iotkit</groupId>
+        <version>${revision}</version>
+
+    </parent>
+
+    <artifactId>iot-contribution</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>it.ozimov</groupId>
+            <artifactId>embedded-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>slf4j-simple</artifactId>
+                    <groupId>org.slf4j</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-model</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-rule-engine</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-screen</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-component-oss</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-component-server</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-component-converter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-virtual-device</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-message-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-temporal-service</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-data-serviceImpl-rdb</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-data-serviceImpl-cache</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-doc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-satoken</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-excel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-log</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.github.linpeilie</groupId>
+            <artifactId>mapstruct-plus-spring-boot-starter</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>${java.version}</source> <!-- depending on your project -->
+                    <target>${java.version}</target> <!-- depending on your project -->
+                    <encoding>utf8</encoding>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                        <path>
+                            <groupId>io.github.linpeilie</groupId>
+                            <artifactId>mapstruct-plus-processor</artifactId>
+                            <version>${mapstruct-plus.version}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok-mapstruct-binding</artifactId>
+                            <version>0.2.0</version>
+                        </path>
+                        <!-- other annotation processors -->
+                    </annotationProcessorPaths>
+
+                </configuration>
+            </plugin>
+            <plugin>
+                <!--因为QueryDsl是类型安全的,所以还需要加上Maven APT plugin,使用 APT 自动生成Q类:-->
+                <groupId>com.mysema.maven</groupId>
+                <artifactId>apt-maven-plugin</artifactId>
+                <version>1.1.3</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>process</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>target/generated-sources/java</outputDirectory>
+                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+</project>

+ 107 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/controller/IotContributorController.java

@@ -0,0 +1,107 @@
+package cc.iotkit.contribution.controller;
+
+import java.util.List;
+
+
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import cc.iotkit.common.log.annotation.Log;
+import cc.iotkit.common.web.core.BaseController;
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.api.Request;
+import cc.iotkit.common.validate.AddGroup;
+import cc.iotkit.common.validate.EditGroup;
+import cc.iotkit.common.log.enums.BusinessType;
+import cc.iotkit.common.excel.utils.ExcelUtil;
+import cc.iotkit.contribution.dto.vo.IotContributorVo;
+import cc.iotkit.contribution.dto.bo.IotContributorBo;
+import cc.iotkit.contribution.service.IIotContributorService;
+
+
+/**
+ * 贡献者
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/contribution/contributor")
+public class IotContributorController extends BaseController {
+
+    private final IIotContributorService iotContributorService;
+
+    /**
+     * 查询贡献者列表
+     */
+    @SaCheckPermission("contribution:contributor:list")
+    @PostMapping("/list")
+    @ApiOperation("查询贡献者列表")
+    public Paging<IotContributorVo> list( PageRequest<IotContributorBo> pageQuery) {
+        return iotContributorService.queryPageList(pageQuery);
+    }
+
+    /**
+     * 导出贡献者列表
+     */
+    @ApiOperation("导出贡献者列表")
+    @SaCheckPermission("contribution:contributor:export")
+    @Log(title = "贡献者", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(IotContributorBo bo, HttpServletResponse response) {
+        List<IotContributorVo> list = iotContributorService.queryList(bo);
+        ExcelUtil.exportExcel(list, "贡献者", IotContributorVo.class, response);
+    }
+
+    /**
+     * 获取贡献者详细信息
+     *
+     */
+    @SaCheckPermission("contribution:contributor:query")
+    @PostMapping("/getDetail")
+    @ApiOperation("获取贡献者详细信息")
+    public IotContributorVo getDetail(@Validated @RequestBody Request<Long> request) {
+        return iotContributorService.queryById(request.getData());
+    }
+
+    /**
+     * 新增贡献者
+     */
+    @SaCheckPermission("contribution:contributor:add")
+    @Log(title = "贡献者", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/add")
+    @ApiOperation("新增贡献者")
+    public Long add(@Validated(AddGroup.class) @RequestBody Request<IotContributorBo> request) {
+        return iotContributorService.insertByBo(request.getData());
+    }
+
+    /**
+     * 修改贡献者
+     */
+    @SaCheckPermission("contribution:contributor:edit")
+    @Log(title = "贡献者", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    @ApiOperation("修改贡献者")
+    public boolean edit(@Validated(EditGroup.class) @RequestBody  Request<IotContributorBo> request) {
+        return iotContributorService.updateByBo(request.getData());
+    }
+
+    /**
+     * 删除贡献者
+     *
+     */
+    @SaCheckPermission("contribution:contributor:remove")
+    @Log(title = "贡献者", businessType = BusinessType.DELETE)
+    @PostMapping("/delete")
+    @ApiOperation("删除贡献者")
+    public boolean remove(@Validated @RequestBody Request<List<Long>> query) {
+        return iotContributorService.deleteWithValidByIds(query.getData(), true);
+    }
+}

+ 16 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/data/IIotContributorData.java

@@ -0,0 +1,16 @@
+package cc.iotkit.contribution.data;
+
+import cc.iotkit.data.ICommonData;
+import cc.iotkit.contribution.model.IotContributor;
+import java.util.List;
+
+/**
+ * 数据接口
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+public interface IIotContributorData extends ICommonData<IotContributor, Long> {
+
+
+}

+ 119 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/data/impl/IotContributorDataImpl.java

@@ -0,0 +1,119 @@
+package cc.iotkit.contribution.data.impl;
+
+import cc.iotkit.contribution.repository.IotContributorRepository;
+import cc.iotkit.data.ICommonData;
+import cc.iotkit.contribution.data.IIotContributorData;
+import cc.iotkit.contribution.data.model.TbIotContributor;
+import cc.iotkit.contribution.model.IotContributor;
+import java.util.List;
+
+import cc.iotkit.data.util.PageBuilder;
+import com.google.common.collect.Lists;
+import com.querydsl.core.QueryResults;
+import com.querydsl.core.types.Predicate;
+import com.querydsl.core.types.Projections;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Service;
+import cc.iotkit.data.util.PredicateBuilder;
+
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.utils.StringUtils;
+import java.util.Collection;
+import java.util.Optional;
+
+import cc.iotkit.common.utils.MapstructUtils;
+
+
+import static cc.iotkit.contribution.data.model.QTbIotContributor.tbIotContributor;
+/**
+ * 数据实现接口
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Primary
+@Service
+@RequiredArgsConstructor
+public class IotContributorDataImpl implements IIotContributorData {
+
+    private final IotContributorRepository baseRepository;
+
+    private final JPAQueryFactory jpaQueryFactory;
+
+    @Override
+    public Paging<IotContributor> findAll(PageRequest<IotContributor> pageRequest) {
+        return PageBuilder.toPaging(baseRepository.findAll(buildQueryCondition(pageRequest.getData()), PageBuilder.toPageable(pageRequest))).to(IotContributor.class);
+    }
+
+    @Override
+    public List<IotContributor> findAllByCondition(IotContributor data) {
+        Iterable<TbIotContributor> all = baseRepository.findAll(buildQueryCondition(data));
+        return MapstructUtils.convert(Lists.newArrayList(all), IotContributor.class);
+    }
+
+    @Override
+    public IotContributor findOneByCondition(IotContributor data) {
+        Optional<TbIotContributor> one = baseRepository.findOne(buildQueryCondition(data));
+        if(one.isPresent()){
+            return MapstructUtils.convert(one.get(), IotContributor.class);
+        }
+        return null;
+    }
+
+    private Predicate buildQueryCondition(IotContributor bo) {
+        PredicateBuilder builder = PredicateBuilder.instance();
+
+                    builder.and(StringUtils.isNotBlank(bo.getContributor()), ()->tbIotContributor.contributor.eq(bo.getContributor()));
+                    builder.and(bo.getPost() != null, ()->tbIotContributor.post.eq(bo.getPost()));
+                    builder.and(StringUtils.isNotBlank(bo.getStatus()), ()->tbIotContributor.status.eq(bo.getStatus()));
+        return builder.build();
+    }
+
+    @Override
+    public List<IotContributor> findByIds(Collection<Long> id) {
+        List allById = baseRepository.findAllById(id);
+        return MapstructUtils.convert(allById, IotContributor.class);
+    }
+
+    @Override
+    public IotContributor save(IotContributor data) {
+        Object o = baseRepository.save(MapstructUtils.convert(data, TbIotContributor.class));
+        return MapstructUtils.convert(o, IotContributor.class);
+    }
+
+    @Override
+    public void batchSave(List<IotContributor> data) {
+        baseRepository.saveAll(MapstructUtils.convert(data, TbIotContributor.class));
+    }
+
+    @Override
+    public void deleteById(Long id) {
+        baseRepository.deleteById(id);
+    }
+
+    @Override
+    public void deleteByIds(Collection<Long> ids) {
+        baseRepository.deleteAllById(ids);
+    }
+
+    @Override
+    public long count() {
+        return baseRepository.count();
+    }
+
+    @Override
+    public List<IotContributor> findAll() {
+        return MapstructUtils.convert(baseRepository.findAll(), IotContributor.class);
+    }
+
+    @Override
+    public IotContributor findById(Long id) {
+        TbIotContributor ret = jpaQueryFactory.select(tbIotContributor).from(tbIotContributor).where(tbIotContributor.id.eq(id)).fetchOne();
+        IotContributor convert = MapstructUtils.convert(ret, IotContributor.class);
+        return convert;
+    }
+}

+ 101 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/data/model/TbIotContributor.java

@@ -0,0 +1,101 @@
+package cc.iotkit.contribution.data.model;
+
+import cc.iotkit.contribution.model.IotContributor;
+import io.github.linpeilie.annotations.AutoMapper;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import cc.iotkit.data.model.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * 贡献者对象 iot_contributor
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Entity
+@Table(name = "iot_contributor")
+@AutoMapper(target = IotContributor.class)
+public class TbIotContributor extends BaseEntity {
+
+
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(generator = "SnowflakeIdGenerator")
+    @GenericGenerator(name = "SnowflakeIdGenerator", strategy = "cc.iotkit.data.config.id.SnowflakeIdGenerator")
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    /**
+     * 贡献者名称
+     */
+    @ApiModelProperty(value = "贡献者名称")
+    private String contributor;
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
+    /**
+     * 岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)
+     */
+    @ApiModelProperty(value = "岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)")
+    private Integer post;
+
+    /**
+     * 简介
+     */
+    @ApiModelProperty(value = "简介")
+    private String intro;
+
+    /**
+     * tag列表(为了简单,逗号隔开)
+     */
+    @ApiModelProperty(value = "tag列表(为了简单,逗号隔开)")
+    private String tags;
+
+    /**
+     * 详情标题
+     */
+    @ApiModelProperty(value = "详情标题")
+    private String title;
+
+    /**
+     * 详情
+     */
+    @ApiModelProperty(value = "详情")
+    private String context;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    @ApiModelProperty(value = "帐号状态(0正常 1停用)")
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+
+
+}

+ 84 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/dto/bo/IotContributorBo.java

@@ -0,0 +1,84 @@
+package cc.iotkit.contribution.dto.bo;
+
+import cc.iotkit.contribution.model.IotContributor;
+import cc.iotkit.common.api.BaseDto;
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.api.Request;
+import cc.iotkit.common.validate.AddGroup;
+import cc.iotkit.common.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 贡献者业务对象 iot_contributor
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = IotContributor.class, reverseConvertGenerate = false)
+public class IotContributorBo extends BaseDto {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(value = "主键", required = false)
+    private Long id;
+
+    /**
+     * 贡献者名称
+     */
+    @NotBlank(message = "贡献者名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    @ApiModelProperty(value = "贡献者名称", required = true)
+    private String contributor;
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty(value = "头像", required = false)
+    private String avatar;
+
+    /**
+     * 岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)
+     */
+    @ApiModelProperty(value = "岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)", required = false)
+    private Integer post;
+
+    /**
+     * 简介
+     */
+    @ApiModelProperty(value = "简介", required = false)
+    private String intro;
+
+    /**
+     * tag列表(为了简单,逗号隔开)
+     */
+    @ApiModelProperty(value = "tag列表(为了简单,逗号隔开)", required = false)
+    private String tags;
+
+    /**
+     * 详情标题
+     */
+    @ApiModelProperty(value = "详情标题", required = false)
+    private String title;
+
+    /**
+     * 详情
+     */
+    @ApiModelProperty(value = "详情", required = false)
+    private String context;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    @NotBlank(message = "帐号状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    @ApiModelProperty(value = "帐号状态(0正常 1停用)", required = true)
+    private String status;
+
+
+}

+ 86 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/dto/vo/IotContributorVo.java

@@ -0,0 +1,86 @@
+package cc.iotkit.contribution.dto.vo;
+
+import cc.iotkit.contribution.model.IotContributor;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import cc.iotkit.common.excel.annotation.ExcelDictFormat;
+import cc.iotkit.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 贡献者视图对象 iot_contributor
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = IotContributor.class)
+public class IotContributorVo implements Serializable {
+
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @ExcelProperty(value = "主键")
+    private Long id;
+
+    /**
+     * 贡献者名称
+     */
+    @ExcelProperty(value = "贡献者名称")
+    private String contributor;
+
+    /**
+     * 头像
+     */
+    @ExcelProperty(value = "头像")
+    private String avatar;
+
+    /**
+     * 岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)
+     */
+    @ExcelProperty(value = "岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)")
+    private Integer post;
+
+    /**
+     * 简介
+     */
+    @ExcelProperty(value = "简介")
+    private String intro;
+
+    /**
+     * tag列表(为了简单,逗号隔开)
+     */
+    @ExcelProperty(value = "tag列表(为了简单,逗号隔开)")
+    private String tags;
+
+    /**
+     * 详情标题
+     */
+    @ExcelProperty(value = "详情标题")
+    private String title;
+
+    /**
+     * 详情
+     */
+    @ExcelProperty(value = "详情")
+    private String context;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+
+}

+ 74 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/model/IotContributor.java

@@ -0,0 +1,74 @@
+package cc.iotkit.contribution.model;
+
+import cc.iotkit.model.Id;
+import cc.iotkit.model.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+
+/**
+ * 贡献者对象 iot_contributor
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class IotContributor extends BaseModel implements Id<Long>, Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 贡献者名称
+     */
+    private String contributor;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 岗位(1前端开发,2后端开发,3全栈开发,4测试,5ui设计师,6产品经理,7架构师)
+     */
+    private Integer post;
+
+    /**
+     * 简介
+     */
+    private String intro;
+
+    /**
+     * tag列表(为了简单,逗号隔开)
+     */
+    private String tags;
+
+    /**
+     * 详情标题
+     */
+    private String title;
+
+    /**
+     * 详情
+     */
+    private String context;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    private String delFlag;
+
+
+}

+ 17 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/repository/IotContributorRepository.java

@@ -0,0 +1,17 @@
+package cc.iotkit.contribution.repository;
+
+import cc.iotkit.contribution.data.model.TbIotContributor;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 贡献者对象 iot_contributor
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@Repository
+public interface IotContributorRepository extends JpaRepository<TbIotContributor, Long>, QuerydslPredicateExecutor<TbIotContributor> {
+
+}

+ 49 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/service/IIotContributorService.java

@@ -0,0 +1,49 @@
+package cc.iotkit.contribution.service;
+
+import cc.iotkit.contribution.dto.vo.IotContributorVo;
+import cc.iotkit.contribution.dto.bo.IotContributorBo;
+
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.api.PageRequest;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 贡献者Service接口
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+public interface IIotContributorService {
+
+    /**
+     * 查询贡献者
+     */
+    IotContributorVo queryById(Long id);
+
+    /**
+     * 查询贡献者列表
+     */
+    Paging<IotContributorVo> queryPageList(PageRequest<IotContributorBo> pageQuery);
+
+    /**
+     * 查询贡献者列表
+     */
+    List<IotContributorVo> queryList(IotContributorBo bo);
+
+    /**
+     * 新增贡献者
+     */
+    Long insertByBo(IotContributorBo bo);
+
+    /**
+     * 修改贡献者
+     */
+    Boolean updateByBo(IotContributorBo bo);
+
+    /**
+     * 校验并批量删除贡献者信息
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 106 - 0
iot-module/iot-contribution/src/main/java/cc/iotkit/contribution/service/impl/IotContributorServiceImpl.java

@@ -0,0 +1,106 @@
+package cc.iotkit.contribution.service.impl;
+
+import cc.iotkit.common.utils.MapstructUtils;
+import cc.iotkit.common.utils.StringUtils;
+import cc.iotkit.common.api.PageRequest;
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.api.Request;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import cc.iotkit.contribution.dto.bo.IotContributorBo;
+import cc.iotkit.contribution.dto.vo.IotContributorVo;
+import cc.iotkit.contribution.model.IotContributor;
+import cc.iotkit.contribution.service.IIotContributorService;
+import cc.iotkit.contribution.data.IIotContributorData;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import cc.iotkit.common.exception.BizException;
+
+
+/**
+ * 贡献者Service业务层处理
+ *
+ * @author Lion Li
+ * @date 2023-07-04
+ */
+@RequiredArgsConstructor
+@Service
+public class IotContributorServiceImpl implements IIotContributorService {
+
+    private final IIotContributorData baseData;
+
+    /**
+     * 查询贡献者
+     */
+    @Override
+    public IotContributorVo queryById(Long id){
+        return MapstructUtils.convert(baseData.findById(id), IotContributorVo.class);
+    }
+
+    /**
+     * 查询贡献者列表
+     */
+    @Override
+    public Paging<IotContributorVo> queryPageList(PageRequest<IotContributorBo> pageQuery) {
+        Paging<IotContributorVo> result = baseData.findAll(pageQuery.to(IotContributor.class)).to(IotContributorVo.class);
+        return result;
+    }
+
+    /**
+     * 查询贡献者列表
+     */
+    @Override
+    public List<IotContributorVo> queryList(IotContributorBo bo) {
+
+        return MapstructUtils.convert(baseData.findAllByCondition(bo.to(IotContributor.class)), IotContributorVo.class);
+    }
+
+    /**
+     * 新增贡献者
+     */
+    @Override
+    public Long insertByBo(IotContributorBo bo) {
+        IotContributor add = MapstructUtils.convert(bo, IotContributor.class);
+        validEntityBeforeSave(add);
+        baseData.save(add);
+        if (add == null) {
+            throw new BizException("新增失败");
+        }
+        return add.getId();
+    }
+
+    /**
+     * 修改贡献者
+     */
+    @Override
+    public Boolean updateByBo(IotContributorBo bo) {
+        IotContributor update = MapstructUtils.convert(bo, IotContributor.class);
+        validEntityBeforeSave(update);
+        IotContributor ret = baseData.save(update);
+        if(ret == null){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(IotContributor entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 批量删除贡献者
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        baseData.deleteByIds(ids);
+        return true;
+    }
+}

+ 1 - 0
iot-module/pom.xml

@@ -19,6 +19,7 @@
         <module>iot-message-notify</module>
         <module>iot-message-notify</module>
         <module>iot-generator</module>
         <module>iot-generator</module>
         <module>iot-screen</module>
         <module>iot-screen</module>
+        <module>iot-contribution</module>
     </modules>
     </modules>
 
 
 
 

+ 4 - 0
iot-starter/pom.xml

@@ -154,6 +154,10 @@
       <groupId>cc.iotkit</groupId>
       <groupId>cc.iotkit</groupId>
       <artifactId>iot-system</artifactId>
       <artifactId>iot-system</artifactId>
     </dependency>
     </dependency>
+    <dependency>
+      <groupId>cc.iotkit</groupId>
+      <artifactId>iot-contribution</artifactId>
+    </dependency>
     <dependency>
     <dependency>
       <groupId>cc.iotkit</groupId>
       <groupId>cc.iotkit</groupId>
       <artifactId>iot-baetyl</artifactId>
       <artifactId>iot-baetyl</artifactId>

+ 6 - 0
pom.xml

@@ -515,6 +515,12 @@
                 <version>${project.version}</version>
                 <version>${project.version}</version>
             </dependency>
             </dependency>
 
 
+            <dependency>
+                <groupId>cc.iotkit</groupId>
+                <artifactId>iot-contribution</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
             <dependency>
             <dependency>
                 <groupId>cc.iotkit</groupId>
                 <groupId>cc.iotkit</groupId>
                 <artifactId>iot-message-notify</artifactId>
                 <artifactId>iot-message-notify</artifactId>