| | |
| | | import com.tcm.training.admin.live.mapper.ClinicMapper; |
| | | import com.tcm.training.admin.live.service.LiveRoomSettingService; |
| | | import com.tcm.training.admin.live.vo.LiveRoomSettingVO; |
| | | import com.tcm.training.admin.member.entity.AppUser; |
| | | import com.tcm.training.admin.member.mapper.UserMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.util.UriComponentsBuilder; |
| | |
| | | @Service |
| | | public class AppVzanLiveEntryService { |
| | | private static final String VZAN_AUTH_SECRET = "2b4fefe91d8cba50"; |
| | | private static final int USER_STATUS_ENABLED = 1; |
| | | |
| | | private final LiveRoomSettingService liveRoomSettingService; |
| | | private final AppUserCenterService appUserCenterService; |
| | | private final UserMapper userMapper; |
| | | private final ClinicMapper clinicMapper; |
| | | private final ProvincialAgentMapper provincialAgentMapper; |
| | | |
| | | public AppVzanLiveEntryService(LiveRoomSettingService liveRoomSettingService, |
| | | AppUserCenterService appUserCenterService, |
| | | UserMapper userMapper, |
| | | ClinicMapper clinicMapper, |
| | | ProvincialAgentMapper provincialAgentMapper) { |
| | | this.liveRoomSettingService = liveRoomSettingService; |
| | | this.appUserCenterService = appUserCenterService; |
| | | this.userMapper = userMapper; |
| | | this.clinicMapper = clinicMapper; |
| | | this.provincialAgentMapper = provincialAgentMapper; |
| | | } |
| | | |
| | | public AppVzanLiveEntryVO createEntry() { |
| | | public AppVzanLiveEntryVO createEntry(Long userId) { |
| | | LiveRoomSettingVO setting = liveRoomSettingService.current(); |
| | | String liveRoomUrl = setting == null ? null : StrUtil.trim(setting.getLiveRoomUrl()); |
| | | validateLiveRoomUrl(liveRoomUrl); |
| | | |
| | | AppUserCenterVO user = appUserCenterService.getCurrentUserCenter(); |
| | | AppUser user = requireEnabledUser(userId); |
| | | String followPhone = resolveFollowPhone(user.getClinicId()); |
| | | String avatar = resolveAvatar(user); |
| | | |
| | | JSONObject payload = new JSONObject(); |
| | | payload.set("tuid", user.getId()); |
| | | payload.set("followPhone", followPhone); |
| | | payload.set("third_ts", System.currentTimeMillis()); |
| | | payload.set("avatar", StrUtil.trim(user.getAvatar())); |
| | | payload.set("avatar", StrUtil.trim(avatar)); |
| | | log.info("微赞入口参数已生成,tuid={}, third_ts={}", user.getId(), payload.get("third_ts")); |
| | | |
| | | SymmetricCrypto sm4 = SmUtil.sm4(VZAN_AUTH_SECRET.getBytes(StandardCharsets.UTF_8)); |
| | |
| | | throw new IllegalArgumentException("当前用户未绑定诊所"); |
| | | } |
| | | Clinic clinic = clinicMapper.selectById(clinicId); |
| | | if (clinic == null || clinic.getAgentId() == null) { |
| | | if (clinic == null) { |
| | | throw new IllegalArgumentException("当前诊所未绑定代理"); |
| | | } |
| | | ProvincialAgent agent = provincialAgentMapper.selectById(clinic.getAgentId()); |
| | | String contactInfo = agent == null ? null : StrUtil.trim(agent.getContactInfo()); |
| | | |
| | | String contactInfo = StrUtil.trim(clinic.getContactPhone()); |
| | | if (StrUtil.isBlank(contactInfo)) { |
| | | throw new IllegalArgumentException("所属代理未配置联系电话"); |
| | | } |
| | |
| | | throw new IllegalArgumentException("直播间地址必须为有效的HTTPS地址", ex); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 校验用户存在且可用。 |
| | | */ |
| | | private AppUser requireEnabledUser(Long userId) { |
| | | AppUser user = userMapper.selectById(userId); |
| | | if (user == null || user.getDeleted() == null || user.getDeleted().intValue() != 0) { |
| | | throw new IllegalArgumentException("用户不存在"); |
| | | } |
| | | if (user.getStatus() == null || user.getStatus().intValue() != USER_STATUS_ENABLED) { |
| | | throw new IllegalArgumentException("用户已禁用"); |
| | | } |
| | | return user; |
| | | } |
| | | |
| | | /** |
| | | * 优先使用本地头像,没有时回退微信头像。 |
| | | */ |
| | | private String resolveAvatar(AppUser user) { |
| | | String avatar = user == null ? null : StrUtil.trim(user.getAvatar()); |
| | | if (StrUtil.isNotBlank(avatar)) { |
| | | return avatar; |
| | | } |
| | | String wechatAvatar = user == null ? null : StrUtil.trim(user.getWechatAvatar()); |
| | | return StrUtil.isNotBlank(wechatAvatar) ? wechatAvatar : ""; |
| | | } |
| | | } |