Atoms生成代码二次修改状态字段业务逻辑完整示例
需手动调整Atoms生成的状态字段业务逻辑:先定位@StateField字段及配套状态机/枚举类,补全OrderStatusEnum并绑定code;再重写updateStatus方法校验流转规则;最后在Mapper层增加WHERE条件拦截非法状态写入。
在使用Atoms生成代码后,需手动调整状态字段的业务逻辑以匹配真实场景——比如订单状态不能从“已发货”直接跳转到“待支付”,也不能让“已取消”状态再触发退款操作。
定位Atoms生成的状态字段定义位置
打开Atoms生成的实体类文件(如 Order.java),找到被 @StateField 注解标记的字段,通常形如 private String status;。
确认该字段是否配套生成了状态机配置类(如 OrderStatusMachine.java)或枚举类(如 OrderStatusEnum.java)。【若未生成枚举类,后续所有状态流转校验将失去编译期约束,极易引入非法字符串】
补全状态枚举并绑定业务语义
创建 OrderStatusEnum.java,定义明确、不可变的状态值:
public enum OrderStatusEnum {
PENDING_PAYMENT("待支付", "payment_pending"),
PAID("已支付", "payment_success"),
SHIPPED("已发货", "logistics_shipped"),
DELIVERED("已签收", "logistics_delivered"),
CANCELED("已取消", "order_canceled");
private final String desc;
private final String code;
OrderStatusEnum(String desc, String code) { this.desc = desc; this.code = code; }
// 补全 getCode() 和 ofCode() 方法
}
这一步必须完成,否则数据库存入的将是枚举名而非 code 字段值,导致前端展示错乱或条件查询失效。
重写状态变更方法并注入流转规则
在 OrderService 中找到 updateStatus() 或类似方法,替换为带校验的实现:
方法一:硬编码状态流转白名单
private static final Map
PENDING_PAYMENT, Set.of(PAID, CANCELED),
PAID, Set.of(SHIPPED, CANCELED),
SHIPPED, Set.of(DELIVERED),
DELIVERED, Set.of(),
CANCELED, Set.of()
);
public void updateStatus(Long orderId, OrderStatusEnum newStatus) {
Order order = orderMapper.selectById(orderId);
OrderStatusEnum current = OrderStatusEnum.ofCode(order.getStatus());
if (!ALLOWED_TRANSITIONS.getOrDefault(current, Set.of()).contains(newStatus)) {
throw new IllegalStateException("状态非法变更:从 " + current + " 到 " + newStatus);
}
order.setStatus(newStatus.getCode());
orderMapper.updateById(order);
}
方法二:抽取为独立状态机服务(推荐用于3个以上状态的复杂流程)
新建 OrderStatusTransitionService 类,内部用 switch 匹配当前状态,返回允许的目标状态列表;调用方只传 current 和 target,由该服务统一判定。这样后续增删状态时,只需改一个类,不散落各处。
在Mapper层拦截非法状态写入
修改 OrderMapper.xml,在 <update> 标签内添加 WHERE 条件:
<update id="updateStatus">
UPDATE `order` SET status = #{status}
WHERE id = #{id} AND status IN
<foreach item="allowed" collection="allowedStatuses" open="(" separator="," close=")">
#{allowed}
</foreach>
</update>
对应 Java 接口增加 allowedStatuses 参数,确保只有合法前序状态下才执行更新。这道防线能防止缓存穿透或并发场景下绕过 Service 层校验。
-
08.24
如何撰写竣工验收会议纪要?一份详细的范文与提示词供你参考!
-
08.24
如何将AI文件轻松转换为CDR格式,掌握这些做法即可!
-
08.24
ChatGPT两周年历程回顾及大模型Text2SQL方案索引
-
08.24
Data+AI━━数据分析师即将失业?Agent智能分析助手3分钟完成2天工作量
-
08.24
使用react+redux实现方式计数器功能及遇到问题实用指南
-
08.24
8000字竞品分析干货!超详细的AI对话类产品分析与思考
-
-
- 立刻MV如何使用AI完成图片音乐创作?
- 08.24
-
- UP简历对话生成简历生成慢处理方案
- 08.24
-
-
- 机器人100米预赛小组垫底!宇树科技回应
- 08.24
-
- Laper_AI辅助改稿流程详细说明
- 08.24
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏