From 6c40d956044932126dc66c9fd586ce88aa161ad2 Mon Sep 17 00:00:00 2001 From: spllzh <28668817@qq.com> Date: Tue, 28 Oct 2025 08:39:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/rj/common/PasswordUtil.java | 2 + .../java/com/rj/common/ServiceManager.java | 2 + .../CustomerManagementController.java | 7 +- .../controller/KnowledgeBaseController.java | 203 ++++++++++ .../com/rj/controller/sys/MenuController.java | 2 + .../com/rj/controller/sys/RoleController.java | 2 + .../rj/controller/sys/UserRoleController.java | 2 + .../com/rj/dto/DifyWorkflowResponseDto.java | 2 + .../java/com/rj/entity/KnowledgeBase.java | 92 +++++ .../mapper/CustomerProfileAnalysisMapper.java | 2 + .../com/rj/mapper/KnowledgeBaseMapper.java | 16 + .../com/rj/service/IKnowledgeBaseService.java | 99 +++++ .../biz/ICustomerProfileAnalysisService.java | 2 + .../CustomerProfileAnalysisServiceImpl.java | 2 + .../impl/KnowledgeBaseServiceImpl.java | 350 ++++++++++++++++++ .../rj/service/sys/impl/MenuServiceImpl.java | 2 + .../rj/service/sys/impl/RoleServiceImpl.java | 2 + .../service/sys/impl/UserRoleServiceImpl.java | 2 + src/main/resources/application-audio.yml | 2 + .../AudioManagementStatisticsMapper.xml | 2 + .../resources/mapper/KnowledgeBaseMapper.xml | 30 ++ src/main/resources/static/tts-demo.html | 2 + .../rj/service/FaceDetectImageCountTest.java | 2 + .../rj/service/TtsRequestLogShortUrlTest.java | 2 + .../rj/service/VideoSynthesisTempUrlTest.java | 2 + .../service/VideoSynthesisVideoNameTest.java | 2 + 26 files changed, 832 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/rj/controller/KnowledgeBaseController.java create mode 100644 src/main/java/com/rj/entity/KnowledgeBase.java create mode 100644 src/main/java/com/rj/mapper/KnowledgeBaseMapper.java create mode 100644 src/main/java/com/rj/service/IKnowledgeBaseService.java create mode 100644 src/main/java/com/rj/service/impl/KnowledgeBaseServiceImpl.java create mode 100644 src/main/resources/mapper/KnowledgeBaseMapper.xml diff --git a/src/main/java/com/rj/common/PasswordUtil.java b/src/main/java/com/rj/common/PasswordUtil.java index 19ded42..919c737 100644 --- a/src/main/java/com/rj/common/PasswordUtil.java +++ b/src/main/java/com/rj/common/PasswordUtil.java @@ -195,6 +195,8 @@ public class PasswordUtil { + + diff --git a/src/main/java/com/rj/common/ServiceManager.java b/src/main/java/com/rj/common/ServiceManager.java index 6e56883..9263edf 100644 --- a/src/main/java/com/rj/common/ServiceManager.java +++ b/src/main/java/com/rj/common/ServiceManager.java @@ -179,6 +179,8 @@ public class ServiceManager { + + diff --git a/src/main/java/com/rj/controller/CustomerManagementController.java b/src/main/java/com/rj/controller/CustomerManagementController.java index efa9e4b..880e037 100644 --- a/src/main/java/com/rj/controller/CustomerManagementController.java +++ b/src/main/java/com/rj/controller/CustomerManagementController.java @@ -131,7 +131,8 @@ public class CustomerManagementController { @Parameter(description = "每页大小", example = "10") @RequestParam(defaultValue = "10") Integer size, @Parameter(description = "客户姓名(模糊查询)")@RequestParam(required = false) String customerName, - @Parameter(description = "所属人(模糊查询)")@RequestParam(required = false) String salesName, + @Parameter(description = "所属人姓名(模糊查询)")@RequestParam(required = false) String salesName, + @Parameter(description = "所属人电话")@RequestParam(required = false) String salesPhone, @Parameter(description = "联系方式(模糊查询)") @RequestParam(required = false) String contact, @Parameter(description = "所属门店ID") @@ -153,8 +154,8 @@ public class CustomerManagementController { if (customerName != null && !customerName.trim().isEmpty()) { queryWrapper.like(CustomerManagement::getCustomerName, customerName); } - if (salesName != null && !salesName.trim().isEmpty()) { - queryWrapper.like(CustomerManagement::getSalesName, salesName); + if (salesPhone != null && !salesPhone.trim().isEmpty()) { + queryWrapper.like(CustomerManagement::getSalesPhone, salesPhone); } if (contact != null && !contact.trim().isEmpty()) { queryWrapper.like(CustomerManagement::getContact, contact); diff --git a/src/main/java/com/rj/controller/KnowledgeBaseController.java b/src/main/java/com/rj/controller/KnowledgeBaseController.java new file mode 100644 index 0000000..990fb08 --- /dev/null +++ b/src/main/java/com/rj/controller/KnowledgeBaseController.java @@ -0,0 +1,203 @@ +package com.rj.controller; + +import com.rj.entity.KnowledgeBase; +import com.rj.service.IKnowledgeBaseService; +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.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 知识库管理表 前端控制器 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-01-27 + */ +@RestController +@RequestMapping("/api/knowledgeBase") +@Tag(name = "知识库管理", description = "知识库管理相关接口") +public class KnowledgeBaseController { + + @Autowired + private IKnowledgeBaseService knowledgeBaseService; + + /** + * 新增知识 + */ + @PostMapping("/add") + @Operation(summary = "新增知识", description = "添加新的知识信息") + public ResponseEntity> addKnowledge( + @Parameter(description = "知识信息", required = true) + @RequestBody KnowledgeBase knowledgeBase) { + Map result = knowledgeBaseService.addKnowledge(knowledgeBase); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.badRequest().body(result); + } + } + + /** + * 根据ID查询知识 + */ + @GetMapping("/get/{id}") + @Operation(summary = "根据ID查询知识", description = "根据知识ID获取知识详细信息") + public ResponseEntity> getKnowledgeById( + @Parameter(description = "知识ID", required = true) + @PathVariable String id) { + Map result = knowledgeBaseService.getKnowledgeById(id); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.notFound().build(); + } + } + + /** + * 分页查询知识列表 + */ + @GetMapping("/list") + @Operation(summary = "分页查询知识列表", description = "分页查询知识信息列表") + public ResponseEntity> getKnowledgeList( + @Parameter(description = "页码", example = "1") + @RequestParam(defaultValue = "1") Integer current, + @Parameter(description = "每页大小", example = "10") + @RequestParam(defaultValue = "10") Integer size, + @Parameter(description = "知识标题(模糊查询)") + @RequestParam(required = false) String title, + @Parameter(description = "知识分类") + @RequestParam(required = false) String category, + @Parameter(description = "应用行业") + @RequestParam(required = false) String industry, + @Parameter(description = "创建人") + @RequestParam(required = false) String creator, + @Parameter(description = "状态") + @RequestParam(required = false) String status) { + Map result = knowledgeBaseService.getKnowledgeList(current, size, title, category, industry, creator, status); + return ResponseEntity.ok(result); + } + + /** + * 更新知识信息 + */ + @PutMapping("/update") + @Operation(summary = "更新知识信息", description = "更新知识详细信息") + public ResponseEntity> updateKnowledge( + @Parameter(description = "知识信息", required = true) + @RequestBody KnowledgeBase knowledgeBase) { + Map result = knowledgeBaseService.updateKnowledge(knowledgeBase); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.badRequest().body(result); + } + } + + /** + * 根据ID删除知识 + */ + @DeleteMapping("/delete/{id}") + @Operation(summary = "删除知识", description = "根据知识ID删除知识信息") + public ResponseEntity> deleteKnowledge( + @Parameter(description = "知识ID", required = true) + @PathVariable String id) { + Map result = knowledgeBaseService.deleteKnowledge(id); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.badRequest().body(result); + } + } + + /** + * 批量删除知识 + */ + @DeleteMapping("/batchDelete") + @Operation(summary = "批量删除知识", description = "根据知识ID列表批量删除知识信息") + public ResponseEntity> batchDeleteKnowledge( + @Parameter(description = "知识ID列表", required = true) + @RequestBody List ids) { + Map result = knowledgeBaseService.batchDeleteKnowledge(ids); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.badRequest().body(result); + } + } + + /** + * 点赞知识 + */ + @PostMapping("/like/{id}") + @Operation(summary = "点赞知识", description = "为指定知识点赞") + public ResponseEntity> likeKnowledge( + @Parameter(description = "知识ID", required = true) + @PathVariable String id) { + Map result = knowledgeBaseService.likeKnowledge(id); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.badRequest().body(result); + } + } + + /** + * 置顶/取消置顶知识 + */ + @PostMapping("/toggleTop/{id}") + @Operation(summary = "置顶/取消置顶知识", description = "切换知识的置顶状态") + public ResponseEntity> toggleTopKnowledge( + @Parameter(description = "知识ID", required = true) + @PathVariable String id) { + Map result = knowledgeBaseService.toggleTopKnowledge(id); + Boolean success = (Boolean) result.get("success"); + if (success != null && success) { + return ResponseEntity.ok(result); + } else { + return ResponseEntity.badRequest().body(result); + } + } + + /** + * 获取知识统计信息 + */ + @GetMapping("/statistics") + @Operation(summary = "获取知识统计信息", description = "获取知识总数等统计信息") + public ResponseEntity> getKnowledgeStatistics() { + Map result = knowledgeBaseService.getKnowledgeStatistics(); + return ResponseEntity.ok(result); + } + + /** + * 获取分类列表 + */ + @GetMapping("/categories") + @Operation(summary = "获取分类列表", description = "获取所有知识分类") + public ResponseEntity> getCategories() { + Map result = knowledgeBaseService.getCategories(); + return ResponseEntity.ok(result); + } + + /** + * 获取行业列表 + */ + @GetMapping("/industries") + @Operation(summary = "获取行业列表", description = "获取所有应用行业") + public ResponseEntity> getIndustries() { + Map result = knowledgeBaseService.getIndustries(); + return ResponseEntity.ok(result); + } +} diff --git a/src/main/java/com/rj/controller/sys/MenuController.java b/src/main/java/com/rj/controller/sys/MenuController.java index 45ee614..bdec3ed 100644 --- a/src/main/java/com/rj/controller/sys/MenuController.java +++ b/src/main/java/com/rj/controller/sys/MenuController.java @@ -417,6 +417,8 @@ public class MenuController { + + diff --git a/src/main/java/com/rj/controller/sys/RoleController.java b/src/main/java/com/rj/controller/sys/RoleController.java index d506326..646827a 100644 --- a/src/main/java/com/rj/controller/sys/RoleController.java +++ b/src/main/java/com/rj/controller/sys/RoleController.java @@ -387,6 +387,8 @@ public class RoleController { + + diff --git a/src/main/java/com/rj/controller/sys/UserRoleController.java b/src/main/java/com/rj/controller/sys/UserRoleController.java index 2816846..09e5127 100644 --- a/src/main/java/com/rj/controller/sys/UserRoleController.java +++ b/src/main/java/com/rj/controller/sys/UserRoleController.java @@ -393,6 +393,8 @@ public class UserRoleController { + + diff --git a/src/main/java/com/rj/dto/DifyWorkflowResponseDto.java b/src/main/java/com/rj/dto/DifyWorkflowResponseDto.java index 46efc49..d522a09 100644 --- a/src/main/java/com/rj/dto/DifyWorkflowResponseDto.java +++ b/src/main/java/com/rj/dto/DifyWorkflowResponseDto.java @@ -159,6 +159,8 @@ public class DifyWorkflowResponseDto { + + diff --git a/src/main/java/com/rj/entity/KnowledgeBase.java b/src/main/java/com/rj/entity/KnowledgeBase.java new file mode 100644 index 0000000..b1cced1 --- /dev/null +++ b/src/main/java/com/rj/entity/KnowledgeBase.java @@ -0,0 +1,92 @@ +package com.rj.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 知识库管理表 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-01-27 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("knowledge_base") +@Schema(description="知识库管理表") +public class KnowledgeBase implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键ID,UUID") + @TableId("id") + private String id; + + @Schema(description = "知识标题") + @TableField("title") + private String title; + + @Schema(description = "知识分类") + @TableField("category") + private String category; + + @Schema(description = "应用行业") + @TableField("industry") + private String industry; + + @Schema(description = "知识内容") + @TableField("content") + private String content; + + @Schema(description = "创建人") + @TableField("creator") + private String creator; + + @Schema(description = "创建时间") + @TableField("create_time") + private LocalDateTime createTime; + + @Schema(description = "更新时间") + @TableField("update_time") + private LocalDateTime updateTime; + + @Schema(description = "状态:已发布、草稿、已下架") + @TableField("status") + private String status; + + @Schema(description = "浏览次数") + @TableField("view_count") + private Integer viewCount; + + @Schema(description = "点赞次数") + @TableField("like_count") + private Integer likeCount; + + @Schema(description = "标签,多个用逗号分隔") + @TableField("tags") + private String tags; + + @Schema(description = "附件URL") + @TableField("attachment_url") + private String attachmentUrl; + + @Schema(description = "排序权重") + @TableField("sort_order") + private Integer sortOrder; + + @Schema(description = "是否置顶:0否,1是") + @TableField("is_top") + private Boolean isTop; + + @Schema(description = "备注") + @TableField("remark") + private String remark; +} diff --git a/src/main/java/com/rj/mapper/CustomerProfileAnalysisMapper.java b/src/main/java/com/rj/mapper/CustomerProfileAnalysisMapper.java index ebe627b..10eb44d 100644 --- a/src/main/java/com/rj/mapper/CustomerProfileAnalysisMapper.java +++ b/src/main/java/com/rj/mapper/CustomerProfileAnalysisMapper.java @@ -102,6 +102,8 @@ public interface CustomerProfileAnalysisMapper extends BaseMapper + * 知识库管理表 Mapper 接口 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-01-27 + */ +public interface KnowledgeBaseMapper extends BaseMapper { + +} diff --git a/src/main/java/com/rj/service/IKnowledgeBaseService.java b/src/main/java/com/rj/service/IKnowledgeBaseService.java new file mode 100644 index 0000000..96f0366 --- /dev/null +++ b/src/main/java/com/rj/service/IKnowledgeBaseService.java @@ -0,0 +1,99 @@ +package com.rj.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.rj.entity.KnowledgeBase; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 知识库管理表 服务类 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-01-27 + */ +public interface IKnowledgeBaseService extends IService { + + /** + * 新增知识 + * @param knowledgeBase 知识信息 + * @return 操作结果 + */ + Map addKnowledge(KnowledgeBase knowledgeBase); + + /** + * 根据ID查询知识(增加浏览次数) + * @param id 知识ID + * @return 知识信息 + */ + Map getKnowledgeById(String id); + + /** + * 分页查询知识列表 + * @param current 页码 + * @param size 每页大小 + * @param title 知识标题 + * @param category 知识分类 + * @param industry 应用行业 + * @param creator 创建人 + * @param status 状态 + * @return 分页结果 + */ + Map getKnowledgeList(Integer current, Integer size, String title, + String category, String industry, String creator, String status); + + /** + * 更新知识信息 + * @param knowledgeBase 知识信息 + * @return 操作结果 + */ + Map updateKnowledge(KnowledgeBase knowledgeBase); + + /** + * 根据ID删除知识 + * @param id 知识ID + * @return 操作结果 + */ + Map deleteKnowledge(String id); + + /** + * 批量删除知识 + * @param ids 知识ID列表 + * @return 操作结果 + */ + Map batchDeleteKnowledge(List ids); + + /** + * 点赞知识 + * @param id 知识ID + * @return 操作结果 + */ + Map likeKnowledge(String id); + + /** + * 置顶/取消置顶知识 + * @param id 知识ID + * @return 操作结果 + */ + Map toggleTopKnowledge(String id); + + /** + * 获取知识统计信息 + * @return 统计信息 + */ + Map getKnowledgeStatistics(); + + /** + * 获取分类列表 + * @return 分类列表 + */ + Map getCategories(); + + /** + * 获取行业列表 + * @return 行业列表 + */ + Map getIndustries(); +} diff --git a/src/main/java/com/rj/service/biz/ICustomerProfileAnalysisService.java b/src/main/java/com/rj/service/biz/ICustomerProfileAnalysisService.java index c0d5099..9c96324 100644 --- a/src/main/java/com/rj/service/biz/ICustomerProfileAnalysisService.java +++ b/src/main/java/com/rj/service/biz/ICustomerProfileAnalysisService.java @@ -123,6 +123,8 @@ public interface ICustomerProfileAnalysisService extends IService + * 知识库管理表 服务实现类 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-01-27 + */ +@Service +public class KnowledgeBaseServiceImpl extends ServiceImpl implements IKnowledgeBaseService { + + @Override + public Map addKnowledge(KnowledgeBase knowledgeBase) { + Map result = new HashMap<>(); + try { + // 生成UUID作为主键 + knowledgeBase.setId(UUID.randomUUID().toString().replace("-", "")); + knowledgeBase.setCreateTime(LocalDateTime.now()); + knowledgeBase.setUpdateTime(LocalDateTime.now()); + + // 设置默认值 + if (knowledgeBase.getViewCount() == null) { + knowledgeBase.setViewCount(0); + } + if (knowledgeBase.getLikeCount() == null) { + knowledgeBase.setLikeCount(0); + } + if (knowledgeBase.getSortOrder() == null) { + knowledgeBase.setSortOrder(0); + } + if (knowledgeBase.getIsTop() == null) { + knowledgeBase.setIsTop(false); + } + if (knowledgeBase.getStatus() == null || knowledgeBase.getStatus().trim().isEmpty()) { + knowledgeBase.setStatus("已发布"); + } + + boolean success = this.save(knowledgeBase); + if (success) { + result.put("success", true); + result.put("message", "知识添加成功"); + result.put("data", knowledgeBase); + } else { + result.put("success", false); + result.put("message", "知识添加失败"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "知识添加异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map getKnowledgeById(String id) { + Map result = new HashMap<>(); + try { + KnowledgeBase knowledge = this.getById(id); + if (knowledge != null) { + // 增加浏览次数 + knowledge.setViewCount(knowledge.getViewCount() + 1); + this.updateById(knowledge); + + result.put("success", true); + result.put("message", "查询成功"); + result.put("data", knowledge); + } else { + result.put("success", false); + result.put("message", "知识不存在"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "查询异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map getKnowledgeList(Integer current, Integer size, String title, + String category, String industry, String creator, String status) { + Map result = new HashMap<>(); + try { + Page page = new Page<>(current, size); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + // 添加查询条件 + if (title != null && !title.trim().isEmpty()) { + queryWrapper.like(KnowledgeBase::getTitle, title); + } + if (category != null && !category.trim().isEmpty()) { + queryWrapper.eq(KnowledgeBase::getCategory, category); + } + if (industry != null && !industry.trim().isEmpty()) { + queryWrapper.eq(KnowledgeBase::getIndustry, industry); + } + if (creator != null && !creator.trim().isEmpty()) { + queryWrapper.like(KnowledgeBase::getCreator, creator); + } + if (status != null && !status.trim().isEmpty()) { + queryWrapper.eq(KnowledgeBase::getStatus, status); + } + + // 排序:置顶优先,然后按排序权重,最后按创建时间倒序 + queryWrapper.orderByDesc(KnowledgeBase::getUpdateTime); + + Page knowledgePage = this.page(page, queryWrapper); + + result.put("success", true); + result.put("message", "查询成功"); + result.put("data", knowledgePage.getRecords()); + result.put("total", knowledgePage.getTotal()); + result.put("current", knowledgePage.getCurrent()); + result.put("size", knowledgePage.getSize()); + result.put("pages", knowledgePage.getPages()); + } catch (Exception e) { + result.put("success", false); + result.put("message", "查询异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map updateKnowledge(KnowledgeBase knowledgeBase) { + Map result = new HashMap<>(); + try { + if (knowledgeBase.getId() == null || knowledgeBase.getId().trim().isEmpty()) { + result.put("success", false); + result.put("message", "知识ID不能为空"); + return result; + } + + knowledgeBase.setUpdateTime(LocalDateTime.now()); + boolean success = this.updateById(knowledgeBase); + + if (success) { + result.put("success", true); + result.put("message", "知识信息更新成功"); + result.put("data", knowledgeBase); + } else { + result.put("success", false); + result.put("message", "知识信息更新失败"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "更新异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map deleteKnowledge(String id) { + Map result = new HashMap<>(); + try { + boolean success = this.removeById(id); + if (success) { + result.put("success", true); + result.put("message", "知识删除成功"); + } else { + result.put("success", false); + result.put("message", "知识删除失败"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "删除异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map batchDeleteKnowledge(List ids) { + Map result = new HashMap<>(); + try { + if (ids == null || ids.isEmpty()) { + result.put("success", false); + result.put("message", "知识ID列表不能为空"); + return result; + } + + boolean success = this.removeByIds(ids); + if (success) { + result.put("success", true); + result.put("message", "批量删除成功,共删除 " + ids.size() + " 条记录"); + } else { + result.put("success", false); + result.put("message", "批量删除失败"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "批量删除异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map likeKnowledge(String id) { + Map result = new HashMap<>(); + try { + KnowledgeBase knowledge = this.getById(id); + if (knowledge != null) { + knowledge.setLikeCount(knowledge.getLikeCount() + 1); + knowledge.setUpdateTime(LocalDateTime.now()); + boolean success = this.updateById(knowledge); + + if (success) { + result.put("success", true); + result.put("message", "点赞成功"); + result.put("data", knowledge); + } else { + result.put("success", false); + result.put("message", "点赞失败"); + } + } else { + result.put("success", false); + result.put("message", "知识不存在"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "点赞异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map toggleTopKnowledge(String id) { + Map result = new HashMap<>(); + try { + KnowledgeBase knowledge = this.getById(id); + if (knowledge != null) { + knowledge.setIsTop(!knowledge.getIsTop()); + knowledge.setUpdateTime(LocalDateTime.now()); + boolean success = this.updateById(knowledge); + + if (success) { + result.put("success", true); + result.put("message", knowledge.getIsTop() ? "置顶成功" : "取消置顶成功"); + result.put("data", knowledge); + } else { + result.put("success", false); + result.put("message", "操作失败"); + } + } else { + result.put("success", false); + result.put("message", "知识不存在"); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "操作异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map getKnowledgeStatistics() { + Map result = new HashMap<>(); + try { + long totalCount = this.count(); + + // 按状态统计 + LambdaQueryWrapper publishedWrapper = new LambdaQueryWrapper<>(); + publishedWrapper.eq(KnowledgeBase::getStatus, "已发布"); + long publishedCount = this.count(publishedWrapper); + + LambdaQueryWrapper draftWrapper = new LambdaQueryWrapper<>(); + draftWrapper.eq(KnowledgeBase::getStatus, "草稿"); + long draftCount = this.count(draftWrapper); + + LambdaQueryWrapper topWrapper = new LambdaQueryWrapper<>(); + topWrapper.eq(KnowledgeBase::getIsTop, true); + long topCount = this.count(topWrapper); + + Map statistics = new HashMap<>(); + statistics.put("totalKnowledge", totalCount); + statistics.put("publishedCount", publishedCount); + statistics.put("draftCount", draftCount); + statistics.put("topCount", topCount); + + result.put("success", true); + result.put("message", "统计信息获取成功"); + result.put("data", statistics); + } catch (Exception e) { + result.put("success", false); + result.put("message", "统计信息获取异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map getCategories() { + Map result = new HashMap<>(); + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(KnowledgeBase::getCategory) + .groupBy(KnowledgeBase::getCategory); + List categories = this.list(queryWrapper); + + List categoryList = categories.stream() + .map(KnowledgeBase::getCategory) + .distinct() + .toList(); + + result.put("success", true); + result.put("message", "分类列表获取成功"); + result.put("data", categoryList); + } catch (Exception e) { + result.put("success", false); + result.put("message", "分类列表获取异常:" + e.getMessage()); + } + return result; + } + + @Override + public Map getIndustries() { + Map result = new HashMap<>(); + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(KnowledgeBase::getIndustry) + .groupBy(KnowledgeBase::getIndustry); + List industries = this.list(queryWrapper); + + List industryList = industries.stream() + .map(KnowledgeBase::getIndustry) + .distinct() + .toList(); + + result.put("success", true); + result.put("message", "行业列表获取成功"); + result.put("data", industryList); + } catch (Exception e) { + result.put("success", false); + result.put("message", "行业列表获取异常:" + e.getMessage()); + } + return result; + } +} diff --git a/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java b/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java index 9f93cb4..ca6cbc0 100644 --- a/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java +++ b/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java @@ -130,6 +130,8 @@ public class MenuServiceImpl extends ServiceImpl implements IM + + diff --git a/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java b/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java index f46aeb6..82c14dd 100644 --- a/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java +++ b/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java @@ -130,6 +130,8 @@ public class RoleServiceImpl extends ServiceImpl implements IR + + diff --git a/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java b/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java index 7573ec8..4bf5444 100644 --- a/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java +++ b/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java @@ -130,6 +130,8 @@ public class UserRoleServiceImpl extends ServiceImpl i + + diff --git a/src/main/resources/application-audio.yml b/src/main/resources/application-audio.yml index 6692223..0f53378 100644 --- a/src/main/resources/application-audio.yml +++ b/src/main/resources/application-audio.yml @@ -139,6 +139,8 @@ spring: + + diff --git a/src/main/resources/mapper/AudioManagementStatisticsMapper.xml b/src/main/resources/mapper/AudioManagementStatisticsMapper.xml index 6c435ce..76c6a0a 100644 --- a/src/main/resources/mapper/AudioManagementStatisticsMapper.xml +++ b/src/main/resources/mapper/AudioManagementStatisticsMapper.xml @@ -116,6 +116,8 @@ + + diff --git a/src/main/resources/mapper/KnowledgeBaseMapper.xml b/src/main/resources/mapper/KnowledgeBaseMapper.xml new file mode 100644 index 0000000..c372f9b --- /dev/null +++ b/src/main/resources/mapper/KnowledgeBaseMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + id, title, category, industry, content, creator, create_time, update_time, status, view_count, like_count, tags, attachment_url, sort_order, is_top, remark + + + diff --git a/src/main/resources/static/tts-demo.html b/src/main/resources/static/tts-demo.html index 8df037e..2fe5271 100644 --- a/src/main/resources/static/tts-demo.html +++ b/src/main/resources/static/tts-demo.html @@ -315,6 +315,8 @@ + + diff --git a/src/test/java/com/rj/service/FaceDetectImageCountTest.java b/src/test/java/com/rj/service/FaceDetectImageCountTest.java index 80b9d61..36f381d 100644 --- a/src/test/java/com/rj/service/FaceDetectImageCountTest.java +++ b/src/test/java/com/rj/service/FaceDetectImageCountTest.java @@ -253,6 +253,8 @@ public class FaceDetectImageCountTest { + + diff --git a/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java b/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java index ff44b5c..4f1d501 100644 --- a/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java +++ b/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java @@ -194,6 +194,8 @@ public class TtsRequestLogShortUrlTest { + + diff --git a/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java b/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java index efd7795..b61b2b8 100644 --- a/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java +++ b/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java @@ -172,6 +172,8 @@ public class VideoSynthesisTempUrlTest { + + diff --git a/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java b/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java index 5f643e2..ef2756b 100644 --- a/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java +++ b/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java @@ -147,6 +147,8 @@ public class VideoSynthesisVideoNameTest { + +