diff --git a/docs/sql_align_databases.sql b/docs/sql_align_databases.sql new file mode 100644 index 000000000..6c15a8610 --- /dev/null +++ b/docs/sql_align_databases.sql @@ -0,0 +1,25 @@ +-- ============================================================= +-- 线上线下库对齐修复脚本 +-- 用于 klp-oa(线上)和 klp-oa-test(线下) +-- ============================================================= +SET NAMES utf8mb4; + +-- ==================== 第一部分:补字典(两边都执行) ==================== + +-- 1.1 regrade_quality_type 字典类型 +INSERT IGNORE INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) +VALUES ('改判后质量状态', 'regrade_quality_type', '0', 'admin', NOW(), 'admin', NOW(), ''); + +-- 1.2 regrade_quality_type 字典数据 +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (1, '协议销售', 'protocol_sale', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()), +(2, '转分剪', 'to_slitting', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()), +(3, '降级', 'downgrade', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()), +(4, '返修', 'rework', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()), +(5, '报废', 'scrap', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); + +-- 1.3 quality_review_status 补充缺失数据 +INSERT IGNORE INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (2, '待审批', '2', 'quality_review_status', '', 'warning', 'Y', '0', 'admin', NOW()), +(3, '已通过', '3', 'quality_review_status', '', 'success', 'Y', '0', 'admin', NOW()), +(4, '已驳回', '4', 'quality_review_status', '', 'danger', 'Y', '0', 'admin', NOW()); diff --git a/docs/sql_align_databases_v2.sql b/docs/sql_align_databases_v2.sql new file mode 100644 index 000000000..ec5506593 --- /dev/null +++ b/docs/sql_align_databases_v2.sql @@ -0,0 +1,51 @@ +-- ============================================================= +-- 线上线下库对齐修复(修复版v2) +-- 适配 dict_code / dict_id 非自增的表结构 +-- ============================================================= +SET NAMES utf8mb4; + +-- ==================== 1. 补字典类型 ==================== +SET @max_dict_id = (SELECT COALESCE(MAX(dict_id), 0) FROM sys_dict_type); + +INSERT IGNORE INTO sys_dict_type (dict_id, dict_name, dict_type, status, create_by, create_time) +VALUES (@max_dict_id + 1, '改判后质量状态', 'regrade_quality_type', '0', 'admin', NOW()); + +-- ==================== 2. 补字典数据 ==================== +SET @max_code = (SELECT COALESCE(MAX(dict_code), 0) FROM sys_dict_data); +SET @code = @max_code + 1; + +-- quality_review_status 缺失的3条 +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 2, '待审批', '2', 'quality_review_status', '', 'warning', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 3, '已通过', '3', 'quality_review_status', '', 'success', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 4, '已驳回', '4', 'quality_review_status', '', 'danger', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +-- regrade_quality_type 5条 +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 1, '协议销售', 'protocol_sale', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 2, '转分剪', 'to_slitting', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 3, '降级', 'downgrade', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 4, '返修', 'rework', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); +SET @code = @code + 1; + +INSERT IGNORE INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES (@code, 5, '报废', 'scrap', 'regrade_quality_type', '', '', 'Y', '0', 'admin', NOW()); + +-- ==================== 3. 验证 ==================== +SELECT 'Dict fix OK' AS result; diff --git a/docs/sql_align_dev.sql b/docs/sql_align_dev.sql new file mode 100644 index 000000000..bdb76e58e --- /dev/null +++ b/docs/sql_align_dev.sql @@ -0,0 +1,69 @@ +-- ============================================================= +-- 线下库 klp-oa-test 菜单对齐修复 +-- 将质量评审菜单从"质量管理"下移到"评审流程"目录下 +-- 并补充次品钢卷、O级卷菜单 +-- ============================================================= +SET NAMES utf8mb4; + +-- ==================== 1. 清理旧的质量评审菜单 ==================== +DELETE FROM sys_role_menu WHERE menu_id IN (2100000000000000036,2100000000000000037,2100000000000000038,2100000000000000039,2100000000000000040,2100000000000000041,2100000000000000042,2100000000000000043); +DELETE FROM sys_menu WHERE menu_id IN (2100000000000000036,2100000000000000037,2100000000000000038,2100000000000000039,2100000000000000040,2100000000000000041,2100000000000000042,2100000000000000043); + +-- 计算可用菜单ID +SET @max_id = (SELECT COALESCE(MAX(menu_id), 0) FROM sys_menu); + +-- ==================== 2. 创建"评审流程"目录(挂在质量管理下) ==================== +SET @parent_quality = 2068954238598967297; -- 质量管理 +SET @id_review_dir = @max_id + 1; +INSERT IGNORE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, is_frame, is_cache, menu_type, visible, status, icon, create_by, create_time, update_by, update_time) +VALUES (@id_review_dir, '评审流程', @parent_quality, 5, 'review', 1, 0, 'M', '0', '0', 'guide', 'admin', NOW(), 'admin', NOW()); + +-- ==================== 3. 在评审流程下创建子菜单 ==================== +SET @parent = @id_review_dir; +SET @id = @max_id + 2; + +-- 次品钢卷 (order=4) +INSERT IGNORE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, icon, create_by, create_time) +VALUES (@id, '次品钢卷', @parent, 4, 'rubbish', 'wms/coil/views/scrap', 1, 0, 'C', '0', '0', 'checkbox', 'admin', NOW()); +SET @id = @id + 1; + +-- O级卷 (order=5) +INSERT IGNORE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, icon, create_by, create_time) +VALUES (@id, 'O级卷', @parent, 5, 'jishu', 'wms/coil/views/jishu', 1, 0, 'C', '0', '0', 'checkbox', 'admin', NOW()); +SET @id = @id + 1; + +-- 质量评审 (order=6) +SET @id_review_menu = @id; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) +VALUES (@id_review_menu, '质量评审', @parent, 6, 'qualityReview', 'mes/qc/qualityReview/index', 1, 0, 'C', '0', '0', 'qc:qualityReview:list', 'guide', 'admin', NOW()); +SET @id = @id + 1; + +-- 质量评审待审批 (order=7, 隐藏) +SET @id_review_todo = @id; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) +VALUES (@id_review_todo, '质量评审待审批', @parent, 7, 'qualityReviewTodo', 'mes/qc/qualityReview/todo', 1, 0, 'C', '1', '0', 'qc:qualityReview:approve', 'checkbox', 'admin', NOW()); +SET @id = @id + 1; + +-- ==================== 4. 按钮权限(挂在质量评审菜单下) ==================== +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES (@id, '质量评审新增', @id_review_menu, 1, 'F', '0', '0', 'qc:qualityReview:add', 'admin', NOW()); SET @id = @id + 1; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES (@id, '质量评审修改', @id_review_menu, 2, 'F', '0', '0', 'qc:qualityReview:edit', 'admin', NOW()); SET @id = @id + 1; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES (@id, '质量评审删除', @id_review_menu, 3, 'F', '0', '0', 'qc:qualityReview:delete', 'admin', NOW()); SET @id = @id + 1; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES (@id, '质量评审提交送审', @id_review_menu, 4, 'F', '0', '0', 'qc:qualityReview:submit', 'admin', NOW()); SET @id = @id + 1; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES (@id, '质量评审审批', @id_review_menu, 5, 'F', '0', '0', 'qc:qualityReview:approve', 'admin', NOW()); SET @id = @id + 1; +INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES (@id, '质量评审执行改判', @id_review_menu, 6, 'F', '0', '0', 'qc:qualityReview:execute', 'admin', NOW()); + +-- ==================== 5. 授权admin角色 ==================== +INSERT IGNORE INTO sys_role_menu (role_id, menu_id) VALUES +(1, @parent_quality), (1, @id_review_dir), +(1, @id_review_menu), (1, @id_review_todo); +-- 按钮权限 +INSERT IGNORE INTO sys_role_menu (role_id, menu_id) SELECT 1, menu_id FROM sys_menu WHERE parent_id = @id_review_menu AND menu_type = 'F'; + +-- ==================== 6. 验证 ==================== +SELECT 'Dev align OK' AS result; diff --git a/klp-admin/src/main/java/com/klp/web/controller/system/SysFileCommentController.java b/klp-admin/src/main/java/com/klp/web/controller/system/SysFileCommentController.java new file mode 100644 index 000000000..af5316ac4 --- /dev/null +++ b/klp-admin/src/main/java/com/klp/web/controller/system/SysFileCommentController.java @@ -0,0 +1,50 @@ +package com.klp.web.controller.system; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.enums.BusinessType; +import com.klp.system.domain.vo.SysFileCommentVo; +import com.klp.system.domain.bo.SysFileCommentBo; +import com.klp.system.service.ISysFileCommentService; + +/** + * 文件评论 + * + * @author klp + * @date 2026-07-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/file/comment") +public class SysFileCommentController extends BaseController { + + private final ISysFileCommentService iSysFileCommentService; + + /** + * 查询文件评论列表 + */ + @GetMapping("/list/{fileId}") + public R> list(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) { + return R.ok(iSysFileCommentService.queryListByFileId(fileId)); + } + + /** + * 新增文件评论 + */ + @Log(title = "文件评论", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysFileCommentBo bo) { + return toAjax(iSysFileCommentService.insertByBo(bo)); + } +} diff --git a/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java b/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java index d2c287236..275b0e2b9 100644 --- a/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java +++ b/klp-admin/src/main/java/com/klp/web/controller/system/SysFileController.java @@ -98,6 +98,15 @@ public class SysFileController extends BaseController { return toAjax(iSysFileService.deleteWithValidByIds(Arrays.asList(fileIds), true)); } + /** + * 文件浏览次数 +1 + */ + @PutMapping("/incrementView/{fileId}") + public R incrementView(@NotNull(message = "主键不能为空") @PathVariable Long fileId) { + iSysFileService.incrementViewCount(fileId); + return R.ok(); + } + /** * 查询与我相关的文件(私有文件且当前用户在可见用户列表中) */ diff --git a/klp-pt/src/main/java/com/klp/pt/controller/PtProductToleranceController.java b/klp-pt/src/main/java/com/klp/pt/controller/PtProductToleranceController.java index c45a70796..a19c0a164 100644 --- a/klp-pt/src/main/java/com/klp/pt/controller/PtProductToleranceController.java +++ b/klp-pt/src/main/java/com/klp/pt/controller/PtProductToleranceController.java @@ -1,4 +1,4 @@ -package com.klp.controller; +package com.klp.pt.controller; import java.util.List; import java.util.Arrays; @@ -17,9 +17,9 @@ import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; -import com.klp.domain.vo.PtProductToleranceVo; -import com.klp.domain.bo.PtProductToleranceBo; -import com.klp.service.IPtProductToleranceService; +import com.klp.pt.domain.vo.PtProductToleranceVo; +import com.klp.pt.domain.bo.PtProductToleranceBo; +import com.klp.pt.service.IPtProductToleranceService; import com.klp.common.core.page.TableDataInfo; /** diff --git a/klp-pt/src/main/java/com/klp/pt/domain/PtProductTolerance.java b/klp-pt/src/main/java/com/klp/pt/domain/PtProductTolerance.java index e52493e34..ff4620bfb 100644 --- a/klp-pt/src/main/java/com/klp/pt/domain/PtProductTolerance.java +++ b/klp-pt/src/main/java/com/klp/pt/domain/PtProductTolerance.java @@ -1,4 +1,4 @@ -package com.klp.domain; +package com.klp.pt.domain; import com.baomidou.mybatisplus.annotation.*; import com.klp.common.core.domain.BaseEntity; diff --git a/klp-pt/src/main/java/com/klp/pt/domain/bo/PtProductToleranceBo.java b/klp-pt/src/main/java/com/klp/pt/domain/bo/PtProductToleranceBo.java index 854a5da01..e150c7628 100644 --- a/klp-pt/src/main/java/com/klp/pt/domain/bo/PtProductToleranceBo.java +++ b/klp-pt/src/main/java/com/klp/pt/domain/bo/PtProductToleranceBo.java @@ -1,4 +1,4 @@ -package com.klp.domain.bo; +package com.klp.pt.domain.bo; import com.klp.common.core.domain.BaseEntity; import lombok.Data; diff --git a/klp-pt/src/main/java/com/klp/pt/domain/vo/PtProductToleranceVo.java b/klp-pt/src/main/java/com/klp/pt/domain/vo/PtProductToleranceVo.java index cdb472bbc..5218432a2 100644 --- a/klp-pt/src/main/java/com/klp/pt/domain/vo/PtProductToleranceVo.java +++ b/klp-pt/src/main/java/com/klp/pt/domain/vo/PtProductToleranceVo.java @@ -1,4 +1,4 @@ -package com.klp.domain.vo; +package com.klp.pt.domain.vo; import java.math.BigDecimal; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; diff --git a/klp-pt/src/main/java/com/klp/pt/mapper/PtProductToleranceMapper.java b/klp-pt/src/main/java/com/klp/pt/mapper/PtProductToleranceMapper.java index 7425f1a9a..13dfc0a4b 100644 --- a/klp-pt/src/main/java/com/klp/pt/mapper/PtProductToleranceMapper.java +++ b/klp-pt/src/main/java/com/klp/pt/mapper/PtProductToleranceMapper.java @@ -1,7 +1,7 @@ -package com.klp.mapper; +package com.klp.pt.mapper; -import com.klp.domain.PtProductTolerance; -import com.klp.domain.vo.PtProductToleranceVo; +import com.klp.pt.domain.PtProductTolerance; +import com.klp.pt.domain.vo.PtProductToleranceVo; import com.klp.common.core.mapper.BaseMapperPlus; /** diff --git a/klp-pt/src/main/java/com/klp/pt/service/IPtProductToleranceService.java b/klp-pt/src/main/java/com/klp/pt/service/IPtProductToleranceService.java index e2605d15d..500a19f08 100644 --- a/klp-pt/src/main/java/com/klp/pt/service/IPtProductToleranceService.java +++ b/klp-pt/src/main/java/com/klp/pt/service/IPtProductToleranceService.java @@ -1,8 +1,8 @@ -package com.klp.service; +package com.klp.pt.service; -import com.klp.domain.PtProductTolerance; -import com.klp.domain.vo.PtProductToleranceVo; -import com.klp.domain.bo.PtProductToleranceBo; +import com.klp.pt.domain.PtProductTolerance; +import com.klp.pt.domain.vo.PtProductToleranceVo; +import com.klp.pt.domain.bo.PtProductToleranceBo; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; diff --git a/klp-pt/src/main/java/com/klp/pt/service/impl/PtProductToleranceServiceImpl.java b/klp-pt/src/main/java/com/klp/pt/service/impl/PtProductToleranceServiceImpl.java index dded8985f..e0a25740a 100644 --- a/klp-pt/src/main/java/com/klp/pt/service/impl/PtProductToleranceServiceImpl.java +++ b/klp-pt/src/main/java/com/klp/pt/service/impl/PtProductToleranceServiceImpl.java @@ -9,11 +9,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import com.klp.domain.bo.PtProductToleranceBo; -import com.klp.domain.vo.PtProductToleranceVo; -import com.klp.domain.PtProductTolerance; -import com.klp.mapper.PtProductToleranceMapper; -import com.klp.service.IPtProductToleranceService; +import com.klp.pt.domain.bo.PtProductToleranceBo; +import com.klp.pt.domain.vo.PtProductToleranceVo; +import com.klp.pt.domain.PtProductTolerance; +import com.klp.pt.mapper.PtProductToleranceMapper; +import com.klp.pt.service.IPtProductToleranceService; import java.util.List; import java.util.Map; diff --git a/klp-pt/src/main/resources/mapper/pt/PtProductToleranceMapper.xml b/klp-pt/src/main/resources/mapper/pt/PtProductToleranceMapper.xml index 9ae5d3732..ef63d45b1 100644 --- a/klp-pt/src/main/resources/mapper/pt/PtProductToleranceMapper.xml +++ b/klp-pt/src/main/resources/mapper/pt/PtProductToleranceMapper.xml @@ -2,9 +2,9 @@ - + - + diff --git a/klp-system/src/main/java/com/klp/system/domain/SysFile.java b/klp-system/src/main/java/com/klp/system/domain/SysFile.java index 708877aec..3401000f1 100644 --- a/klp-system/src/main/java/com/klp/system/domain/SysFile.java +++ b/klp-system/src/main/java/com/klp/system/domain/SysFile.java @@ -60,6 +60,10 @@ public class SysFile extends BaseEntity { * 备注 */ private String remark; + /** + * 浏览次数 + */ + private Long viewCount; /** * 删除标识 0正常 2删除 */ diff --git a/klp-system/src/main/java/com/klp/system/domain/SysFileComment.java b/klp-system/src/main/java/com/klp/system/domain/SysFileComment.java new file mode 100644 index 000000000..e24ca2a2a --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/domain/SysFileComment.java @@ -0,0 +1,40 @@ +package com.klp.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 文件评论对象 sys_file_comment + * + * @author klp + * @date 2026-07-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_file_comment") +public class SysFileComment extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "comment_id") + private Long commentId; + /** + * 关联文件ID + */ + private Long fileId; + /** + * 评论内容 + */ + private String content; + /** + * 所属部门 + */ + private String dept; + +} diff --git a/klp-system/src/main/java/com/klp/system/domain/bo/SysFileBo.java b/klp-system/src/main/java/com/klp/system/domain/bo/SysFileBo.java index 4d84f2d1e..05ebcfb45 100644 --- a/klp-system/src/main/java/com/klp/system/domain/bo/SysFileBo.java +++ b/klp-system/src/main/java/com/klp/system/domain/bo/SysFileBo.java @@ -67,5 +67,9 @@ public class SysFileBo extends BaseEntity { */ private String remark; + /** + * 浏览次数 + */ + private Long viewCount; } diff --git a/klp-system/src/main/java/com/klp/system/domain/bo/SysFileCommentBo.java b/klp-system/src/main/java/com/klp/system/domain/bo/SysFileCommentBo.java new file mode 100644 index 000000000..ee26751cb --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/domain/bo/SysFileCommentBo.java @@ -0,0 +1,42 @@ +package com.klp.system.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + + +/** + * 文件评论业务对象 sys_file_comment + * + * @author klp + * @date 2026-07-04 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SysFileCommentBo extends BaseEntity { + + /** + * 主键ID + */ + private Long commentId; + + /** + * 关联文件ID + */ + @NotNull(message = "文件ID不能为空") + private Long fileId; + + /** + * 评论内容 + */ + @NotBlank(message = "评论内容不能为空") + private String content; + + /** + * 所属部门 + */ + private String dept; + +} diff --git a/klp-system/src/main/java/com/klp/system/domain/vo/SysFileCommentVo.java b/klp-system/src/main/java/com/klp/system/domain/vo/SysFileCommentVo.java new file mode 100644 index 000000000..aedf32de0 --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/domain/vo/SysFileCommentVo.java @@ -0,0 +1,40 @@ +package com.klp.system.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; + + +/** + * 文件评论视图对象 sys_file_comment + * + * @author klp + * @date 2026-07-04 + */ +@Data +@ExcelIgnoreUnannotated +public class SysFileCommentVo extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long commentId; + + /** + * 关联文件ID + */ + private Long fileId; + + /** + * 评论内容 + */ + private String content; + + /** + * 所属部门 + */ + private String dept; + +} diff --git a/klp-system/src/main/java/com/klp/system/domain/vo/SysFileVo.java b/klp-system/src/main/java/com/klp/system/domain/vo/SysFileVo.java index a9075d43c..66c91baf2 100644 --- a/klp-system/src/main/java/com/klp/system/domain/vo/SysFileVo.java +++ b/klp-system/src/main/java/com/klp/system/domain/vo/SysFileVo.java @@ -80,5 +80,10 @@ public class SysFileVo extends BaseEntity { @ExcelProperty(value = "备注") private String remark; + /** + * 浏览次数 + */ + @ExcelProperty(value = "浏览次数") + private Long viewCount; } diff --git a/klp-system/src/main/java/com/klp/system/mapper/SysFileCommentMapper.java b/klp-system/src/main/java/com/klp/system/mapper/SysFileCommentMapper.java new file mode 100644 index 000000000..81e1e5552 --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/mapper/SysFileCommentMapper.java @@ -0,0 +1,15 @@ +package com.klp.system.mapper; + +import com.klp.system.domain.SysFileComment; +import com.klp.system.domain.vo.SysFileCommentVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 文件评论Mapper接口 + * + * @author klp + * @date 2026-07-04 + */ +public interface SysFileCommentMapper extends BaseMapperPlus { + +} diff --git a/klp-system/src/main/java/com/klp/system/service/ISysFileCommentService.java b/klp-system/src/main/java/com/klp/system/service/ISysFileCommentService.java new file mode 100644 index 000000000..5a14b997d --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/service/ISysFileCommentService.java @@ -0,0 +1,25 @@ +package com.klp.system.service; + +import com.klp.system.domain.vo.SysFileCommentVo; +import com.klp.system.domain.bo.SysFileCommentBo; + +import java.util.List; + +/** + * 文件评论Service接口 + * + * @author klp + * @date 2026-07-04 + */ +public interface ISysFileCommentService { + + /** + * 查询文件评论列表 + */ + List queryListByFileId(Long fileId); + + /** + * 新增文件评论 + */ + Boolean insertByBo(SysFileCommentBo bo); +} diff --git a/klp-system/src/main/java/com/klp/system/service/ISysFileService.java b/klp-system/src/main/java/com/klp/system/service/ISysFileService.java index 1cd0a32da..134f86493 100644 --- a/klp-system/src/main/java/com/klp/system/service/ISysFileService.java +++ b/klp-system/src/main/java/com/klp/system/service/ISysFileService.java @@ -51,4 +51,9 @@ public interface ISysFileService { * 查询与我相关的文件(私有文件且当前用户在可见用户列表中) */ TableDataInfo queryPageListRelatedToMe(SysFileBo bo, PageQuery pageQuery); + + /** + * 文件浏览次数 +1 + */ + void incrementViewCount(Long fileId); } diff --git a/klp-system/src/main/java/com/klp/system/service/impl/SysFileCommentServiceImpl.java b/klp-system/src/main/java/com/klp/system/service/impl/SysFileCommentServiceImpl.java new file mode 100644 index 000000000..0eece3c44 --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/service/impl/SysFileCommentServiceImpl.java @@ -0,0 +1,50 @@ +package com.klp.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.helper.LoginHelper; +import com.klp.system.domain.bo.SysFileCommentBo; +import com.klp.system.domain.vo.SysFileCommentVo; +import com.klp.system.domain.SysFileComment; +import com.klp.system.mapper.SysFileCommentMapper; +import com.klp.system.service.ISysFileCommentService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 文件评论Service业务层处理 + * + * @author klp + * @date 2026-07-04 + */ +@RequiredArgsConstructor +@Service +public class SysFileCommentServiceImpl implements ISysFileCommentService { + + private final SysFileCommentMapper baseMapper; + + /** + * 查询文件评论列表(按时间升序) + */ + @Override + public List queryListByFileId(Long fileId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SysFileComment::getFileId, fileId); + lqw.orderByAsc(SysFileComment::getCreateTime); + return baseMapper.selectVoList(lqw); + } + + /** + * 新增文件评论 + */ + @Override + public Boolean insertByBo(SysFileCommentBo bo) { + SysFileComment add = BeanUtil.toBean(bo, SysFileComment.class); + // 自动填充部门和评论人 + add.setDept(LoginHelper.getLoginUser().getDeptName()); + return baseMapper.insert(add) > 0; + } +} diff --git a/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java b/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java index b06095d64..09b1c2ccf 100644 --- a/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java +++ b/klp-system/src/main/java/com/klp/system/service/impl/SysFileServiceImpl.java @@ -5,6 +5,7 @@ import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.helper.LoginHelper; import com.klp.common.utils.StringUtils; @@ -124,6 +125,16 @@ public class SysFileServiceImpl implements ISysFileService { return TableDataInfo.build(result); } + /** + * 文件浏览次数 +1 + */ + @Override + public void incrementViewCount(Long fileId) { + baseMapper.update(null, Wrappers.lambdaUpdate() + .setSql("view_count = view_count + 1") + .eq(SysFile::getFileId, fileId)); + } + /** * 保存前的数据校验 */ diff --git a/klp-system/src/main/resources/mapper/system/SysFileCommentMapper.xml b/klp-system/src/main/resources/mapper/system/SysFileCommentMapper.xml new file mode 100644 index 000000000..bdd9284ba --- /dev/null +++ b/klp-system/src/main/resources/mapper/system/SysFileCommentMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/klp-system/src/main/resources/mapper/system/SysFileMapper.xml b/klp-system/src/main/resources/mapper/system/SysFileMapper.xml index 809b1c040..c987af387 100644 --- a/klp-system/src/main/resources/mapper/system/SysFileMapper.xml +++ b/klp-system/src/main/resources/mapper/system/SysFileMapper.xml @@ -15,6 +15,7 @@ + diff --git a/klp-ui/src/api/system/file.js b/klp-ui/src/api/system/file.js index c184ddda3..f46086350 100644 --- a/klp-ui/src/api/system/file.js +++ b/klp-ui/src/api/system/file.js @@ -52,6 +52,14 @@ export function exportFile(query) { }) } +// 文件浏览次数 +1 +export function incrementView(fileId) { + return request({ + url: '/system/file/incrementView/' + fileId, + method: 'put' + }) +} + // 查询与我相关的文件 export function listRelatedToMe(query) { return request({ diff --git a/klp-ui/src/api/system/fileComment.js b/klp-ui/src/api/system/fileComment.js new file mode 100644 index 000000000..bc33663be --- /dev/null +++ b/klp-ui/src/api/system/fileComment.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询文件评论列表 +export function listFileComment(fileId) { + return request({ + url: '/system/file/comment/list/' + fileId, + method: 'get' + }) +} + +// 新增文件评论 +export function addFileComment(data) { + return request({ + url: '/system/file/comment', + method: 'post', + data: data + }) +} diff --git a/klp-ui/src/views/system/file/all.vue b/klp-ui/src/views/system/file/all.vue index 757154ac4..ffa39af76 100644 --- a/klp-ui/src/views/system/file/all.vue +++ b/klp-ui/src/views/system/file/all.vue @@ -28,8 +28,12 @@ - - + +
+ +
+ + - + - - - - - - - - - - - - - + @@ -201,6 +166,76 @@ :limit.sync="queryParams.pageSize" @pagination="getList" /> +
+ +
+ +
+
+
+ +
+ +
+
+
@@ -265,45 +300,53 @@ - - -
- - {{ previewFile.fileName }} - - - - {{ formatFileSize(previewFile.fileSize) }} - {{ previewFile.suffix }} - {{ previewFile.orderNo || '-' }} - {{ previewFile.dept || '-' }} - - - {{ previewFile.scopeType === 1 ? '公开' : '私有' }} - - - {{ previewFile.createBy }} - {{ parseTime(previewFile.createTime) }} - {{ previewFile.remark || '-' }} - -
- 下载文件 -
-
+ + + + {{ infoFile.fileName }} + + + + {{ formatFileSize(infoFile.fileSize) }} + {{ infoFile.suffix || '-' }} + {{ infoFile.viewCount != null ? infoFile.viewCount : 0 }} 次 + {{ infoFile.orderNo || '-' }} + {{ infoFile.dept || '-' }} + + + {{ infoFile.scopeType === 1 ? '公开' : '私有' }} + + + {{ infoFile.createBy }} + {{ parseTime(infoFile.createTime) }} + {{ infoFile.remark || '-' }} + +