refactor(emergency): 宣教模块代码整理与问题修复

- 修复 GlobalUtils.getLoginUser() NPE 风险(send/approve/reject)
- 批量操作改为前置校验+全量执行(batchPublish/batchTakeDown/batchDeleteResources)
- 新增 deleteResource/batchDeleteResources,已发布资源不可删除
- 标签过滤 SQL 修复边界精确匹配(避免 id=2 误匹配 12/22)
- 收藏/阅读改用 DuplicateKeyException 消除并发竞态
- fillResourceExtras/queryResourceList 批量查询分类名称,避免 N+1
- 新增 validateResource 校验内容类型、分类、标签合法性
- copyResource 补全 effectiveTime/expiryTime、版本记录、校验
- 审核下发/下架/删除增加状态机保护
- send() 使用 REQUIRES_NEW 事务隔离,确保批量推送单条失败互不影响
- 版本历史上限控制 MAX_VERSIONS=20
- 分类/标签树形重构:分类不再嵌套子分类,统一为分类+标签两级
- 清理废弃方法(listCategories/listAllCategoriesAndTags 等)
- 批量删除分类/标签增加 @Transactional 事务保护

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-26 11:23:57 +08:00
co-authored by Claude
parent 3d8b930d1a
commit 5612fe0752
14 changed files with 301 additions and 156 deletions
@@ -6,6 +6,8 @@ import com.renkang.emergency.dto.PushBatchSendDTO;
import com.renkang.emergency.dto.PushFilterDTO;
import com.renkang.emergency.entity.FirstAidResource;
import java.util.Map;
/**
* @Description: 急救宣教推送Service
* @Author: jeecg-boot
@@ -24,7 +26,7 @@ public interface IFirstAidPushService {
void send(String resourceId, String orderId);
/**
* 批量推送
* 批量推送,返回 {total, success, failed} 结构
*/
int batchSend(PushBatchSendDTO dto);
Map<String, Object> batchSend(PushBatchSendDTO dto);
}