乡治通——议题审核、议程和日志管理

一、核心模块与接口概览

1. 议题审核模块

路径前缀:/deliberation/review

核心功能:议题审核流程管理

接口列表:

java 复制代码
查询待审核列表
GET /deliberation/review/list
获取提议详情
GET /deliberation/review/{proposalId}
审核议题
POST /deliberation/review/audit

2. 议程管理模块

路径:/deliberation/agenda

核心功能:议程全生命周期管理

接口列表:

java 复制代码
创建议程
POST /deliberation/agenda/add
更新议程
PUT /deliberation/agenda/{agendaId}
删除议程
DELETE /deliberation/agenda/{agendaId}

3. 日志管理模块

java 复制代码
操作日志
/monitor/operlog
登录日志
/monitor/logininfor
调度日志
/monitor/jobLog

二、RESTful API设计知识点

1. 资源命名规范

使用名词作为资源名称,如proposal(议题)、agenda(议程)、review(审核)

示例:/deliberation/review(审核资源)、/deliberation/agenda(议程资源)

2. HTTP方法与CRUD对应

GET:查询操作,如GET /deliberation/review/list查询待审核列表

POST:新增操作,如POST /deliberation/agenda/add创建议程

PUT:更新操作,如PUT /deliberation/agenda/{id}更新议程

DELETE:删除操作,如DELETE /deliberation/agenda/{id}删除议程

3. 路径参数与查询参数

路径参数:用于标识唯一资源,如/deliberation/review/{proposalId}中的proposalId

查询参数:用于筛选和分页,如/deliberation/review/list?page=1&size=10

三、接口详细说明

1. 议题审核接口

GET /deliberation/review/list:查询待审核列表,支持分页和条件筛选

参数 :page(页码)、size(每页条数)、proposalTitle(标题筛选)
返回:分页后的待审核提议列表

GET /deliberation/review/{proposalId}:获取提议详情

参数 :proposalId(路径参数,议题ID)
返回:议题详细信息,包括标题、内容、提议人、提交时间等

POST /deliberation/review/audit:执行审核操作

请求体 :{ "proposalId": 1, "status": "01", "opinion": "审核通过" }
返回:审核结果

2. 议程管理接口

POST /deliberation/agenda/add:创建议程

请求体 :{ "agendaTitle": "村民大会", "meetingTime": "2026-06-01 14:00:00", "endTime": "2026-06-01 16:00:00", "meetingLocation": "村委会" }
返回:创建的议程信息

PUT /deliberation/agenda/{agendaId}:更新议程

参数 :agendaId(路径参数)
请求体 :包含需要更新的议程字段
返回:更新后的议程信息

DELETE /deliberation/agenda/{agendaId}:删除议程

参数 :agendaId(路径参数)
返回:删除结果

四、Spring Security权限控制知识点

1. @PreAuthorize注解使用

作用:在方法执行前进行权限校验

示例:

java 复制代码
@PreAuthorize("@ss.hasPermi('deliberation:review:list')")
public AjaxResult list() {
    // 查询待审核列表
}

2. 权限校验流程

  • 用户请求到达Controller方法
  • Spring Security拦截请求
  • 执行@PreAuthorize表达式
  • 权限通过则执行方法,否则返回403错误

3. 权限配置示例

在SecurityConfig中配置权限规则

使用Ant风格路径匹配,如"/deliberation/review/**"需要审核权限

五、MyBatis数据库操作知识点

1. Mapper接口定义

示例:

java 复制代码
public interface BizMeetingAgendaMapper {
    BizMeetingAgenda selectByPrimaryKey(Long agendaId);
    int insert(BizMeetingAgenda record);
    int updateByPrimaryKeySelective(BizMeetingAgenda record);
    int deleteByPrimaryKey(Long agendaId);
}

2. 动态SQL示例

使用if标签进行条件判断:

XML 复制代码
<select id="selectList" resultType="BizMeetingAgenda">
    SELECT * FROM biz_meeting_agenda
    <where>
        <if test="agendaTitle != null">AND agenda_title LIKE CONCAT('%', #{agendaTitle}, '%')</if>
        <if test="agendaStatus != null">AND agenda_status = #{agendaStatus}</if>
    </where>
</select>

3. 分页查询实现

使用PageHelper插件:

java 复制代码
PageHelper.startPage(pageNum, pageSize);
List<BizMeetingAgenda> list = agendaMapper.selectList(condition);
PageInfo<BizMeetingAgenda> pageInfo = new PageInfo<>(list);

六、状态机模式应用知识点

1. 状态流转设计

议题状态:待审核(00) → 审核通过(01) / 审核驳回(02)

议程状态:草稿(00) → 已发布(01) → 进行中(02) → 已结束(03)

2. 状态校验示例

在审核方法中校验状态:

java 复制代码
public void audit(Long proposalId, String status) {
    BizMeetingProposal proposal = proposalMapper.selectByPrimaryKey(proposalId);
    if (!"00".equals(proposal.getProposalStatus())) {
        throw new BusinessException("该议题当前状态不允许审核");
    }
    // 执行审核逻辑
}

3. 状态转换工具方法

前端状态转数据库状态码:

java 复制代码
public String statusToDb(String frontStatus) {
    Map<String, String> mapping = new HashMap<>();
    mapping.put("draft", "00");
    mapping.put("published", "01");
    return mapping.getOrDefault(frontStatus, "00");
}

七、AOP日志切面知识点

1. @Log注解定义

自定义注解用于标记需要记录日志的方法:

java 复制代码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String title() default "";
    String businessType() default "";
}

2. 日志切面实现

使用AOP环绕通知记录操作日志:

java 复制代码
@Aspect
@Component
public class LogAspect {
    @Around("@annotation(com.example.common.annotation.Log)")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        long beginTime = System.currentTimeMillis();
        Object result = point.proceed();
        long endTime = System.currentTimeMillis();
        saveLog(point, endTime - beginTime);
        return result;
    }
}

3. 使用示例

java 复制代码
@Log(title = "审核议题", businessType = "审核")
@PostMapping("/audit")
public AjaxResult audit(@RequestBody AuditDTO dto) {
    // 审核逻辑
}

八、事务管理知识点

1. @Transactional注解使用

java 复制代码
@Transactional(rollbackFor = Exception.class)
public void auditProposal(Long proposalId, String status) {
    proposalMapper.updateStatus(proposalId, status);
    auditLogMapper.insertLog(proposalId, status);
}

2. 事务回滚示例

java 复制代码
@Transactional
public void updateAgenda(BizMeetingAgenda agenda) {
    agendaMapper.updateByPrimaryKey(agenda);
    if (agenda.getEndTime().before(agenda.getMeetingTime())) {
        throw new BusinessException("结束时间不能早于开始时间");
    }
}

九、统一响应格式知识点

1. AjaxResult封装

java 复制代码
public class AjaxResult {
    private int code;
    private String msg;
    private Object data;
    
    public static AjaxResult success(Object data) {
        return new AjaxResult(200, "操作成功", data);
    }
    
    public static AjaxResult error(String msg) {
        return new AjaxResult(500, msg, null);
    }
}

2. 响应示例

java 复制代码
{
    "code": 200,
    "msg": "操作成功",
    "data": {
        "agendaId": 1,
        "agendaTitle": "村民代表大会",
        "meetingTime": "2026-06-01 14:00:00"
    }
}

十、异常处理知识点

1. 全局异常处理器

java 复制代码
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(BusinessException.class)
    public AjaxResult handleBusinessException(BusinessException e) {
        return AjaxResult.error(e.getMessage());
    }
    
    @ExceptionHandler(Exception.class)
    public AjaxResult handleException(Exception e) {
        log.error("系统异常", e);
        return AjaxResult.error("系统内部错误");
    }
}

2. 自定义业务异常

java 复制代码
public class BusinessException extends RuntimeException {
    public BusinessException(String message) {
        super(message);
    }
}

十一、状态码映射

1. 议题状态

00 - 待审核:议题提交后等待管理员审核

01 - 审核通过:可进入会议讨论环节

02 - 审核驳回:未通过审核

2. 议程状态

00 - 草稿:创建后未发布

01 - 已发布:对外公开可见

02 - 进行中:会议正在召开

03 - 已结束:会议正常结束

04 - 已取消:会议被取消

十二、技术要点总结

1. 分层架构

Controller层:处理HTTP请求,参数校验

Service层:业务逻辑处理,事务管理

Mapper层:数据访问,SQL执行

2. 权限控制

RBAC(基于角色的访问控制)

@PreAuthorize方法级权限校验

3. 状态管理

状态机模式管理状态转换

操作前校验当前状态

4. 日志与监控

AOP统一记录操作日志

定时任务日志监控

5. 异常处理

统一异常响应格式

区分业务异常和系统异常

相关推荐
果壳science7 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
大叔学Linux9 小时前
FreeRTOS任务切换笔记
arm开发·笔记
爱吃火鸡面呀9 小时前
Spark RDD 行动算子(Action)详解
windows·ajax·spark
dlhto10 小时前
Windows 使用 Rufus 制作 AlmaLinux 10.2 启动 U 盘:从 ISO 下载到服务器安装
运维·服务器·windows
小矮强10 小时前
输入凭证也没用?Windows 共享文件夹“来宾访问被安全策略阻止”
windows·经验分享
skywalk816311 小时前
Virtualbox 从7.2.20降级到7.2.18 @FreeBSD系统
windows·virtualbox·freebsd
DogDaoDao11 小时前
Windows 双 Shell 全面对比:CMD 与 PowerShell 的技术剖析
windows·shell·测试·powershell·cmd·程序员开发
职豚求职小程序刷题11 小时前
易方达基金2027秋招笔试|考什么+场次提醒
笔记
长不大的杨瑞杰12 小时前
Windows 安装 OpenCode v2:原生、WSL、Desktop 怎么选?完整配置与避坑指南
人工智能·windows·ai agent·opencode
无锡银洲自动化12 小时前
煤粉测点频繁堵管?FD 防堵风压取样器现场调试小结
笔记·产品运营