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

一、核心模块与接口概览

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. 异常处理

统一异常响应格式

区分业务异常和系统异常

相关推荐
何妨呀~1 小时前
Windows域控批量创建域用户
windows
Allen_LVyingbo2 小时前
面向医疗群体智能的协同诊疗与群体决策支持系统(下)
开发语言·数据结构·windows·python·动态规划
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.05.09 题目:1914. 循环轮转矩阵
笔记·leetcode·矩阵
透明的玻璃杯2 小时前
Qt Creator + Windows + Protobuf 最优方案(Mqqt通讯采用的方式)
开发语言·windows·qt
chushiyunen2 小时前
influxdb数据库笔记
笔记·时序数据库
小茬粥2 小时前
COLT_CMDB_nvidia_gpu_20260508.sh
linux·服务器·windows
绛橘色的日落(。・∀・)ノ2 小时前
机器学习
人工智能·笔记·深度学习
郝学胜-神的一滴2 小时前
跨平台 C++ 静态库编译实战:Linux/Windows/macOS 三端统一实现
linux·开发语言·c++·windows·软件构建
众生皆苦,我是红豆奶茶味2 小时前
【工具】Codex 配置文件速查笔记(截至 2026 年 05 月 09 日)
人工智能·笔记·python·深度学习·神经网络