You've already forked FrameTour-BE
refactor(notifications): 重构通知系统使用统一的微信订阅通知触发服务
- 移除 UserNotificationAuthController 中的 getScenicTemplatesWithAuth 方法 - 从 ScenicRepository 中删除微信模板ID相关方法和配置 - 重命名 WechatSubscribeNotifyTriggerService 为 notifyTriggerService - 更新 TaskTaskServiceImpl 中的视频生成通知逻辑 - 重构 DownloadNotificationTasker 中的通知发送方式 - 统一使用 WechatSubscribeNotifyTriggerRequest 和 WechatSubscribeNotifyTriggerResult - 移除 ZT 消息服务相关代码 - 简化变量传递和通知模板逻辑
This commit is contained in:
@@ -8,7 +8,6 @@ import com.ycwl.basic.enums.TemplateRenderStatus;
|
||||
import com.ycwl.basic.integration.common.manager.DeviceConfigManager;
|
||||
import com.ycwl.basic.integration.common.manager.RenderWorkerConfigManager;
|
||||
import com.ycwl.basic.integration.common.manager.ScenicConfigManager;
|
||||
import com.ycwl.basic.integration.message.dto.ZtMessage;
|
||||
import com.ycwl.basic.integration.message.service.ZtMessageProducerService;
|
||||
import com.ycwl.basic.repository.MemberRelationRepository;
|
||||
import com.ycwl.basic.repository.SourceRepository;
|
||||
@@ -16,10 +15,7 @@ import com.ycwl.basic.utils.JacksonUtil;
|
||||
import com.ycwl.basic.biz.OrderBiz;
|
||||
import com.ycwl.basic.biz.TemplateBiz;
|
||||
import com.ycwl.basic.constant.StorageConstant;
|
||||
import com.ycwl.basic.mapper.FaceMapper;
|
||||
import com.ycwl.basic.mapper.FaceSampleMapper;
|
||||
import com.ycwl.basic.mapper.MemberMapper;
|
||||
import com.ycwl.basic.mapper.SourceMapper;
|
||||
import com.ycwl.basic.mapper.TaskMapper;
|
||||
import com.ycwl.basic.mapper.VideoMapper;
|
||||
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
|
||||
@@ -28,7 +24,6 @@ import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
|
||||
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
|
||||
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
|
||||
import com.ycwl.basic.model.pc.renderWorker.entity.RenderWorkerEntity;
|
||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
||||
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
|
||||
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
||||
import com.ycwl.basic.model.pc.task.entity.TaskEntity;
|
||||
@@ -124,7 +119,7 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
@Autowired
|
||||
private NotificationAuthUtils notificationAuthUtils;
|
||||
@Autowired
|
||||
private WechatSubscribeNotifyTriggerService wechatSubscribeNotifyTriggerService;
|
||||
private WechatSubscribeNotifyTriggerService notifyTriggerService;
|
||||
@Autowired
|
||||
private FaceStatusManager faceStatusManager;
|
||||
|
||||
@@ -636,93 +631,26 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
return;
|
||||
}
|
||||
String openId = member.getOpenId();
|
||||
ScenicV2DTO scenic = scenicRepository.getScenicBasic(item.getScenicId());
|
||||
MpConfigEntity scenicMp = scenicRepository.getScenicMpConfig(member.getScenicId());
|
||||
if (StringUtils.isNotBlank(openId) && scenicMp != null) {
|
||||
// 发送模板消息
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put("taskId", taskId);
|
||||
variables.put("scenicId", scenic.getId());
|
||||
variables.put("scenicName", scenic.getName());
|
||||
variables.put("faceId", item.getFaceId());
|
||||
variables.put("videoId", item.getVideoId());
|
||||
variables.put("nowTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
|
||||
try {
|
||||
ScenicV2DTO scenicBasic = scenicRepository.getScenicBasic(item.getScenicId());
|
||||
if (scenicBasic != null && StringUtils.isNotBlank(scenicBasic.getName())) {
|
||||
variables.put("scenicName", scenicBasic.getName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.debug("获取景区名称失败: scenicId={}, error={}", item.getScenicId(), e.getMessage());
|
||||
}
|
||||
variables.put("videoCreateTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
|
||||
|
||||
WechatSubscribeNotifyTriggerResult triggerResult = wechatSubscribeNotifyTriggerService.trigger(
|
||||
"VIDEO_GENERATED",
|
||||
WechatSubscribeNotifyTriggerRequest.builder()
|
||||
.scenicId(item.getScenicId())
|
||||
.memberId(memberId)
|
||||
.openId(openId)
|
||||
.bizId(String.valueOf(taskId))
|
||||
.variables(variables)
|
||||
.build()
|
||||
);
|
||||
if (triggerResult.isConfigFound()) {
|
||||
log.info("memberId:{} VIDEO_GENERATED订阅消息触发完成 sentCount={}, skippedCount={}",
|
||||
memberId, triggerResult.getSentCount(), triggerResult.getSkippedCount());
|
||||
return;
|
||||
}
|
||||
|
||||
String templateId = scenicRepository.getVideoGeneratedTemplateId(item.getScenicId());
|
||||
if (StringUtils.isBlank(templateId)) {
|
||||
log.warn("未配置视频生成通知模板");
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查并消费通知授权
|
||||
if (!notificationAuthUtils.checkAndConsumeAuthorization(memberId, templateId, item.getScenicId())) {
|
||||
log.debug("用户[memberId={}]对模板[templateId={}]授权不足,跳过视频生成通知", memberId, templateId);
|
||||
return;
|
||||
}
|
||||
|
||||
ScenicV2DTO scenic = scenicRepository.getScenicBasic(item.getScenicId());
|
||||
ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(item.getScenicId());
|
||||
String configTitle = configManager.getString("first_notification_title");
|
||||
String configContent = configManager.getString("first_notification_content");
|
||||
|
||||
if (StringUtils.isBlank(configTitle) || StringUtils.isBlank(configContent)) {
|
||||
log.info("景区[{}]未配置第一次通知内容,跳过发送通知", scenic.getName());
|
||||
return;
|
||||
}
|
||||
|
||||
String title = configTitle.replace("【景区】", scenic.getName());
|
||||
String page;
|
||||
if (configManager.getBoolean("grouping_enable", false)) {
|
||||
page = "pages/travelVideoCenter/index?type=1&scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId();
|
||||
} else {
|
||||
page = "pages/videoSynthesis/index?type=1&scenicId=" + item.getScenicId() + "&faceId=" + item.getFaceId();
|
||||
}
|
||||
/**
|
||||
* 视频名称 {{thing1.DATA}}
|
||||
* 生成时间 {{time4.DATA}}
|
||||
* 备注 {{thing3.DATA}}
|
||||
*/
|
||||
Map<String, Object> dataParam = new HashMap<>();
|
||||
dataParam.put("thing1", title);
|
||||
dataParam.put("time4", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
|
||||
dataParam.put("thing3", configContent);
|
||||
|
||||
// 构建extra,只包含data和page
|
||||
Map<String, Object> extra = new HashMap<>();
|
||||
extra.put("data", dataParam);
|
||||
extra.put("page", page);
|
||||
|
||||
// 使用ZT消息服务发送通知(第一次通知)
|
||||
ZtMessage msg = new ZtMessage();
|
||||
msg.setChannelId(templateId);
|
||||
msg.setTitle(title);
|
||||
msg.setContent("【" + item.getFaceId() + "/" + item.getVideoId() + "】"+configContent);
|
||||
msg.setTarget(openId);
|
||||
msg.setExtra(extra);
|
||||
msg.setSendReason("视频生成通知");
|
||||
msg.setSendBiz("视频生成");
|
||||
ztMessageProducerService.send(msg);
|
||||
log.info("memberId:{} 视频生成通知发送成功", memberId);
|
||||
WechatSubscribeNotifyTriggerRequest request = WechatSubscribeNotifyTriggerRequest.builder()
|
||||
.scenicId(item.getScenicId())
|
||||
.memberId(item.getMemberId())
|
||||
.openId(member.getOpenId())
|
||||
.bizId(String.valueOf(item.getId()))
|
||||
.variables(variables)
|
||||
.build();
|
||||
WechatSubscribeNotifyTriggerResult triggerResult = notifyTriggerService.trigger("VIDEO_GENERATED", request);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user