浏览代码

更新!

TRX 1 年之前
父节点
当前提交
79f827f645
共有 14 个文件被更改,包括 622 次插入0 次删除
  1. 23 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictAboutListModel.java
  2. 24 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictListParam.java
  3. 50 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictModel.java
  4. 40 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictParam.java
  5. 31 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictSearch.java
  6. 19 0
      FullCardClient/src/main/java/com/zhongshu/card/client/type/project/ProjectDictType.java
  7. 82 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/ProjectDictController.java
  8. 23 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/ProjectDictDao.java
  9. 22 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/ProjectDictListDao.java
  10. 17 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/extend/ProjectDictDaoExtend.java
  11. 76 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/impl/ProjectDictDaoImpl.java
  12. 34 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/ProjectDict.java
  13. 28 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/ProjectDictList.java
  14. 153 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/ProjectDictService.java

+ 23 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictAboutListModel.java

@@ -0,0 +1,23 @@
+package com.zhongshu.card.client.model.org.projectDict;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDictAboutListModel extends ProjectDictModel {
+
+    @Schema(description = "选择项")
+    private List<ProjectDictListParam> list = new ArrayList<ProjectDictListParam>();
+
+}

+ 24 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictListParam.java

@@ -0,0 +1,24 @@
+package com.zhongshu.card.client.model.org.projectDict;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDictListParam {
+
+    private String id;
+
+    private String name;
+
+    @Schema(description = "排序")
+    private Long sort = 1l;
+
+}

+ 50 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictModel.java

@@ -0,0 +1,50 @@
+package com.zhongshu.card.client.model.org.projectDict;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.client.type.project.ProjectDictType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDictModel extends SuperModel {
+
+    @Schema(description = "字典类型")
+    private ProjectDictType dictType;
+
+    private String dictTypeStr;
+
+    public String getDictTypeStr() {
+        if (dictType != null) {
+            return dictType.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "编码")
+    private String code;
+
+    @Schema(description = "状态")
+    private DataState state;
+
+    private String stateStr;
+
+    public String getStateStr() {
+        if (state != null) {
+            return state.getRemark();
+        }
+        return "";
+    }
+
+}

+ 40 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictParam.java

@@ -0,0 +1,40 @@
+package com.zhongshu.card.client.model.org.projectDict;
+
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.client.type.project.ProjectDictType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDictParam extends SuperParam {
+
+    @Schema(description = "字典类型")
+    private ProjectDictType dictType;
+
+    @NotEmpty
+    @Schema(description = "名称")
+    private String name;
+
+    @NotEmpty
+    @Schema(description = "编码")
+    private String code;
+
+    @Schema(description = "状态")
+    private DataState state;
+
+    @Schema(description = "选择项")
+    private List<ProjectDictListParam> list = new ArrayList<ProjectDictListParam>();
+}

+ 31 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/projectDict/ProjectDictSearch.java

@@ -0,0 +1,31 @@
+package com.zhongshu.card.client.model.org.projectDict;
+
+import com.zhongshu.card.client.model.base.SuperSearch;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.client.type.project.ProjectDictType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDictSearch extends SuperSearch {
+
+    @Schema(description = "字典类型")
+    private ProjectDictType dictType;
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "编码")
+    private String code;
+
+    @Schema(description = "状态")
+    private DataState state;
+}

+ 19 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/type/project/ProjectDictType.java

@@ -0,0 +1,19 @@
+package com.zhongshu.card.client.type.project;
+
+import lombok.Getter;
+
+/**
+ * 字典类型
+ */
+public enum ProjectDictType {
+    UserInfo("用户信息"),
+    AreaInfo("区域信息"),
+    ;
+
+    @Getter
+    private String remark;
+
+    ProjectDictType(String remark) {
+        this.remark = remark;
+    }
+}

+ 82 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/ProjectDictController.java

@@ -0,0 +1,82 @@
+package com.zhongshu.card.server.core.controller.projectAbout;
+
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.IDParam;
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictAboutListModel;
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictModel;
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictParam;
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictSearch;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.server.core.service.projectAbout.ProjectDictService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 字典库管理
+ *
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("/projectDict")
+@Tag(name = "项目配置-字典库管理")
+public class ProjectDictController {
+
+    @Autowired
+    private ProjectDictService projectDictService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "数据详情", description = "数据详情")
+    @RequestMapping(value = "getDetailInfo", method = {RequestMethod.POST})
+    public ResultContent<ProjectDictAboutListModel> getDetailInfo(@RequestBody IDParam param) {
+        return this.projectDictService.getDetailInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "添加-编辑数据", description = "添加-编辑数据")
+    @RequestMapping(value = "saveInfo", method = {RequestMethod.POST})
+    public ResultContent saveInfo(@RequestBody ProjectDictParam param) {
+        return this.projectDictService.saveInfo(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除数据", description = "删除数据")
+    @RequestMapping(value = "deleteInfo", method = {RequestMethod.POST})
+    public ResultContent deleteInfo(@RequestBody IDParam param) {
+        return this.projectDictService.deleteInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "数据列表-分页查询", description = "数据列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<ProjectDictModel>> page(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) ProjectDictSearch param) {
+        Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        return projectDictService.page(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "启用数据", description = "启用数据")
+    @RequestMapping(value = "enableData", method = {RequestMethod.POST})
+    public ResultContent enableData(@RequestBody IDParam param) {
+        return this.projectDictService.changeState(param.getId(), DataState.Enable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "禁用数据", description = "禁用数据")
+    @RequestMapping(value = "disableData", method = {RequestMethod.POST})
+    public ResultContent disableData(@RequestBody IDParam param) {
+        return this.projectDictService.changeState(param.getId(), DataState.Disable);
+    }
+}

+ 23 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/ProjectDictDao.java

@@ -0,0 +1,23 @@
+package com.zhongshu.card.server.core.dao.projectAbout;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.client.type.project.ProjectDictType;
+import com.zhongshu.card.server.core.dao.projectAbout.extend.ProjectDictDaoExtend;
+import com.zhongshu.card.server.core.domain.org.ProjectDict;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface ProjectDictDao extends MongoDao<ProjectDict>, ProjectDictDaoExtend {
+
+    List<ProjectDict> findByIdIn(List<String> ids);
+
+    ProjectDict findTopById(String id);
+
+    ProjectDict findTopByProjectOidAndNameAndDictType(String projectOid, String name, ProjectDictType dictType);
+
+    ProjectDict findTopByProjectOidAndCodeAndDictType(String projectOid, String code, ProjectDictType dictType);
+}

+ 22 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/ProjectDictListDao.java

@@ -0,0 +1,22 @@
+package com.zhongshu.card.server.core.dao.projectAbout;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.server.core.domain.org.ProjectDict;
+import com.zhongshu.card.server.core.domain.org.ProjectDictList;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface ProjectDictListDao extends MongoDao<ProjectDictList> {
+
+    List<ProjectDictList> findByIdIn(List<String> ids);
+
+    ProjectDictList findTopById(String id);
+
+    List<ProjectDictList> findByProjectDictOrderBySortAsc(ProjectDict projectDict);
+
+    void deleteByProjectDict(ProjectDict projectDict);
+}

+ 17 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/extend/ProjectDictDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zhongshu.card.server.core.dao.projectAbout.extend;
+
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictSearch;
+import com.zhongshu.card.server.core.domain.org.ProjectDict;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface ProjectDictDaoExtend {
+
+    Page<ProjectDict> page(Pageable pageable, ProjectDictSearch param);
+
+}

+ 76 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/impl/ProjectDictDaoImpl.java

@@ -0,0 +1,76 @@
+package com.zhongshu.card.server.core.dao.projectAbout.impl;
+
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictSearch;
+import com.zhongshu.card.server.core.dao.BaseImpl;
+import com.zhongshu.card.server.core.dao.projectAbout.extend.ProjectDictDaoExtend;
+import com.zhongshu.card.server.core.domain.org.ProjectDict;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class ProjectDictDaoImpl extends BaseImpl implements ProjectDictDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<ProjectDict> page(Pageable pageable, ProjectDictSearch param) {
+        Criteria criteria = buildFilterCriteria(param);
+
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, ProjectDict.class);
+    }
+
+    private Criteria buildFilterCriteria(ProjectDictSearch param) {
+        Criteria criteria = buildCriteriaNotOid(param);
+
+        if (StringUtils.isNotEmpty(param.getProjectOid())) {
+            criteria.and("projectOid").is(param.getProjectOid());
+        }
+        if (param.getState() != null) {
+            criteria.and("state").is(param.getState());
+        }
+
+        if (param.getDictType() != null) {
+            criteria.and("dictType").is(param.getDictType());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        // 用户名称
+        if (StringUtils.isNotEmpty(param.getName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getName() + ".*$");
+            criterias.add(Criteria.where("name").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getCode())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getCode() + ".*$");
+            criterias.add(Criteria.where("code").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+        return criteria;
+    }
+
+}

+ 34 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/ProjectDict.java

@@ -0,0 +1,34 @@
+package com.zhongshu.card.server.core.domain.org;
+
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.client.type.project.ProjectDictType;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDict extends SuperMain {
+
+    @Schema(description = "字典类型")
+    private ProjectDictType dictType;
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "编码")
+    private String code;
+
+    @Schema(description = "状态")
+    private DataState state;
+
+}

+ 28 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/ProjectDictList.java

@@ -0,0 +1,28 @@
+package com.zhongshu.card.server.core.domain.org;
+
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectDictList extends SuperMain {
+
+    @Schema(description = "所属项目字典")
+    @DBRef(lazy = true)
+    private ProjectDict projectDict;
+
+    @Schema(description = "字典项")
+    private String name;
+
+}

+ 153 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/ProjectDictService.java

@@ -0,0 +1,153 @@
+package com.zhongshu.card.server.core.service.projectAbout;
+
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultMessage;
+import com.zhongshu.card.client.model.org.projectDict.*;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+import com.zhongshu.card.server.core.dao.projectAbout.ProjectDictDao;
+import com.zhongshu.card.server.core.dao.projectAbout.ProjectDictListDao;
+import com.zhongshu.card.server.core.domain.org.Organization;
+import com.zhongshu.card.server.core.domain.org.ProjectDict;
+import com.zhongshu.card.server.core.domain.org.ProjectDictList;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 项目的字典管理
+ *
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Slf4j
+@Service
+public class ProjectDictService extends SuperService {
+
+    @Autowired
+    private OrganizationDao organizationDao;
+
+    @Autowired
+    private ProjectDictDao projectDictDao;
+
+    @Autowired
+    private ProjectDictListDao projectDictListDao;
+
+    public ResultContent saveInfo(ProjectDictParam param) {
+        Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        if (param.getDictType() == null) {
+            return ResultContent.buildFail("dictType不能为空");
+        }
+        ProjectDict entity = null;
+
+        if (StringUtils.isNotEmpty(param.getId())) {
+            entity = projectDictDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(entity)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            initUpdateEntity(entity);
+        } else {
+            entity = new ProjectDict();
+            if (param.getState() == null) {
+                param.setState(DataState.Enable);
+            }
+            initEntityNoCheckOid(entity);
+        }
+        BeanUtils.copyProperties(param, entity);
+        projectDictDao.save(entity);
+
+        // 维护字典选项
+        saveList(entity, param.getList());
+
+        return ResultContent.buildSuccess();
+    }
+
+    public void saveList(ProjectDict projectDict, List<ProjectDictListParam> params) {
+        List<ProjectDictList> list = projectDictListDao.findByProjectDictOrderBySortAsc(projectDict);
+
+    }
+
+    public ResultContent<Page<ProjectDictModel>> page(ProjectDictSearch param, Pageable pageable) {
+        String projectOid = param.getProjectOid();
+        Organization organization = organizationDao.findTopByOid(projectOid);
+        if (ObjectUtils.isEmpty(organization)) {
+            return ResultContent.buildFail("projectOid不存在");
+        }
+        Page<ProjectDict> page = projectDictDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
+    }
+
+    public ResultContent deleteInfo(String id) {
+        ProjectDict entity = projectDictDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        projectDictDao.delete(entity);
+        projectDictListDao.deleteByProjectDict(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent<ProjectDictAboutListModel> getDetailInfo(String id) {
+        ProjectDict entity = projectDictDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        ProjectDictAboutListModel model = toAboutListModel(entity);
+        List<ProjectDictList> list = projectDictListDao.findByProjectDictOrderBySortAsc(entity);
+
+        List<ProjectDictListParam> models = new ArrayList<>();
+        if (ObjectUtils.isNotEmpty(list)) {
+            models = list.stream().map(this::toListModel).toList();
+        }
+        model.setList(models);
+        return ResultContent.buildSuccess(model);
+    }
+
+    public ResultContent changeState(String id, DataState state) {
+        ProjectDict entity = projectDictDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        entity.setState(state);
+        projectDictDao.save(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    private ProjectDictModel toModel(ProjectDict entity) {
+        ProjectDictModel model = new ProjectDictModel();
+        if (ObjectUtils.isNotEmpty(entity)) {
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+    public ProjectDictAboutListModel toAboutListModel(ProjectDict entity) {
+        ProjectDictAboutListModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new ProjectDictAboutListModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+    public ProjectDictListParam toListModel(ProjectDictList entity) {
+        ProjectDictListParam model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new ProjectDictListParam();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+}