---
description: Java编码八大强制红线禁令（最高优先级Java规则，达梦、信创规则除外，无BPM/会议）
globs: ["**/*.java"]
alwaysApply: false
---
# 冲突优先级声明
本文件为Java代码最高强制约束，仅达梦数据库、信创部署规则优先级高于本文件，其余所有Java相关规则冲突时以本文件为准。

# Java编码强制八大禁令（若依微服务+达梦8+信创）
## 禁令1：禁止连环set硬赋值，统一@Builder链式构建
❌ 错误：new DO() 后逐行setXxx
✅ 正确：DO实体添加@Builder、@NoArgsConstructor、@AllArgsConstructor，使用DO.builder().field(val).build()

## 禁令2：禁止手写getter/setter，统一Lombok @Data
❌ 手动编写get/set方法
✅ 所有DO、VO、DTO统一使用@Data，配合@EqualsAndHashCode(callSuper = true)

## 禁令3：依赖注入统一@Resource，完全禁止@Autowired
❌ 混用@Autowired和@Resource
✅ Controller、ServiceImpl中所有Mapper、Service、Feign接口全部使用@Resource注入

## 禁令4：非空判断禁止裸判断，统一Hutool工具类
❌ if(str != null && !str.equals("")) / if(list != null && list.size()>0)
✅ 字符串：StrUtil.isNotBlank()；集合：CollUtil.isNotEmpty()；对象：ObjectUtil.isNotNull()

## 禁令5：禁止魔法数字、魔法字符串，统一枚举/常量类
❌ 直接写if(status == 0)、return "goods_offline"
✅ 业务状态定义枚举，固定文本、阈值写入XXXConstants常量类

## 禁令6：禁止多层if-else嵌套，卫语句优先，复杂状态使用策略模式
❌ 超过2层if嵌套
✅ 所有边界、校验条件前置，提前return/抛异常，消除else分支；状态机多分支采用策略模式

## 禁令7：循环内部禁止调用Mapper单条操作，统一批量方法
❌ for循环中mapper.insert() / mapper.deleteById()
✅ 批量插入insertBatch、批量删除deleteBatchIds、条件批量更新wrapper更新，单次DB交互

## 禁令8：时间类型统一LocalDateTime，完全禁止Date、Timestamp
❌ java.util.Date、java.sql.Timestamp
✅ DO、VO、DTO时间字段全部使用LocalDateTime，达梦8 TIMESTAMP字段对应

# 补充强制编码约束
1. 业务异常统一 ServiceExceptionUtil.exception(ErrorCode)，禁止直接new RuntimeException、IllegalArgumentException；
2. Service查询无数据必须抛不存在异常，禁止return null区分不存在；
3. Controller禁止编写try-catch捕获业务异常，使用若依全局异常处理器；
4. Controller禁止直接注入Mapper，仅允许注入对应Service；
5. 跨模块调用仅允许注入Feign API接口，禁止依赖对方ServiceImpl；
6. 所有类、Service接口方法、DO字段必须添加中文Javadoc注释；
7. 错误提示文案使用业务操作人员易懂中文，禁止技术术语、数据库字段名、英文编码；
8. 新增/修改/删除/导出接口必须添加@ApiAccessLog操作日志注解；
9. 创建、状态变更接口必须添加@Idempotent幂等注解防重复提交；
10. 所有DO主键统一String雪花ID，@TableId(type = IdType.ASSIGN_ID)，适配达梦8；
11. 禁止引入Flowable、BPM流程审批相关类、注解、依赖。
