|
|
@@ -1,14 +1,21 @@
|
|
|
package com.dataeasy.server.service.manager.impl;
|
|
|
|
|
|
+import com.dataeasy.server.atomic.entity.SubscriptionPlan;
|
|
|
import com.dataeasy.server.atomic.entity.SubscriptionSource;
|
|
|
import com.dataeasy.server.atomic.entity.SubscriptionUserConfig;
|
|
|
+import com.dataeasy.server.atomic.service.ISubscriptionPlanService;
|
|
|
import com.dataeasy.server.atomic.service.ISubscriptionSourceService;
|
|
|
import com.dataeasy.server.atomic.service.ISubscriptionUserConfigService;
|
|
|
import com.dataeasy.server.common.exception.BusinessException;
|
|
|
+import com.dataeasy.server.common.utils.Assert;
|
|
|
import com.dataeasy.server.pojo.subscription.PushOptionRequest;
|
|
|
-import com.dataeasy.server.pojo.subscription.SubscriptionSourceQuery;
|
|
|
+import com.dataeasy.server.pojo.subscription.SubscriptionSourcePlanVO;
|
|
|
import com.dataeasy.server.pojo.subscription.SubscriptionSourceVO;
|
|
|
+import com.dataeasy.server.pojo.subscription.SubscriptionPlanQuery;
|
|
|
+import com.dataeasy.server.pojo.subscription.SubscriptionSourceQuery;
|
|
|
+import com.dataeasy.server.pojo.subscription.SubscriptionSourceDetailVO;
|
|
|
import com.dataeasy.server.pojo.subscription.SubscriptionUserConfigQuery;
|
|
|
+import com.dataeasy.server.pojo.subscription.SubscriptionUserConfigVO;
|
|
|
import com.dataeasy.server.service.manager.ISubscriptionManager;
|
|
|
import com.dataeasy.server.utiis.UserUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -20,9 +27,10 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
-import java.util.Optional;
|
|
|
import java.util.Set;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -38,38 +46,120 @@ public class SubscriptionManagerImpl implements ISubscriptionManager {
|
|
|
@Autowired
|
|
|
private ISubscriptionSourceService subscriptionSourceService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ISubscriptionPlanService subscriptionPlanService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private ISubscriptionUserConfigService subscriptionUserConfigService;
|
|
|
|
|
|
@Override
|
|
|
public List<SubscriptionSourceVO> querySource() {
|
|
|
- SubscriptionSourceQuery query = new SubscriptionSourceQuery();
|
|
|
- return querySubscriptionSourceVO(query);
|
|
|
+ SubscriptionSourceQuery subscriptionSourceQuery = new SubscriptionSourceQuery();
|
|
|
+ List<SubscriptionSource> sourceList = subscriptionSourceService.getByCondition(subscriptionSourceQuery);
|
|
|
+ if (CollectionUtils.isEmpty(sourceList)) {
|
|
|
+ return List.of();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取订阅源与价格的对应关系
|
|
|
+ List<Long> sourceIds = sourceList.stream().map(SubscriptionSource::getId).collect(Collectors.toList());
|
|
|
+ SubscriptionPlanQuery subscriptionPlanQuery = new SubscriptionPlanQuery();
|
|
|
+ subscriptionPlanQuery.setSubscriptionSourceIds(sourceIds);
|
|
|
+ List<SubscriptionPlan> planList = subscriptionPlanService.getByCondition(subscriptionPlanQuery);
|
|
|
+ Map<Long, List<SubscriptionPlan>> sourcePlanMap = planList.stream().collect(Collectors.groupingBy(SubscriptionPlan::getSubscriptionSourceId));
|
|
|
+ // 对价格进行排序
|
|
|
+ sourcePlanMap.forEach((sourceId, pList) -> {
|
|
|
+ pList.sort((o1, o2) -> {
|
|
|
+ if (Objects.isNull(o1.getSubscriptionDuration()) || Objects.isNull(o2.getSubscriptionDuration())) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return o1.getSubscriptionDuration().compareTo(o2.getSubscriptionDuration());
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ return sourceList.stream().map(source -> {
|
|
|
+ SubscriptionSourceVO subscriptionSourceVO = new SubscriptionSourceVO();
|
|
|
+ BeanUtils.copyProperties(source, subscriptionSourceVO);
|
|
|
+ List<SubscriptionPlan> subscriptionPlans = sourcePlanMap.get(source.getId());
|
|
|
+ if (!CollectionUtils.isEmpty(subscriptionPlans)) {
|
|
|
+ subscriptionSourceVO.setSubscriptionPrice(subscriptionPlans.get(0).getSubscriptionPrice());
|
|
|
+ }
|
|
|
+ return subscriptionSourceVO;
|
|
|
+ }).toList();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<SubscriptionSourceVO> queryUserSubSource() {
|
|
|
- Long userId = Optional.ofNullable(UserUtils.getCurrentUserId()).orElseThrow(() -> BusinessException.fail("无法获取当前用户ID"));
|
|
|
+ public SubscriptionSourceDetailVO querySourceDetail(Long id) {
|
|
|
+ SubscriptionSource subscriptionSource = subscriptionSourceService.getById(id);
|
|
|
+ Assert.isNullInBusiness(subscriptionSource, "找不到对应的订阅源");
|
|
|
+
|
|
|
+ // 处理图片
|
|
|
+ SubscriptionSourceDetailVO subscriptionSourceDetailVO = new SubscriptionSourceDetailVO();
|
|
|
+ BeanUtils.copyProperties(subscriptionSource, subscriptionSourceDetailVO);
|
|
|
+ if (StringUtils.hasText(subscriptionSource.getPics())) {
|
|
|
+ subscriptionSourceDetailVO.setPics(Arrays.asList(subscriptionSource.getPics().split(",")));
|
|
|
+ }
|
|
|
+
|
|
|
+ SubscriptionPlanQuery subscriptionPlanQuery = new SubscriptionPlanQuery();
|
|
|
+ subscriptionPlanQuery.setSubscriptionSourceIds(Arrays.asList(subscriptionSource.getId()));
|
|
|
+ List<SubscriptionPlan> planList = subscriptionPlanService.getByCondition(subscriptionPlanQuery);
|
|
|
+ if (CollectionUtils.isEmpty(planList)) {
|
|
|
+ return subscriptionSourceDetailVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按价格进行排序
|
|
|
+ planList.sort((o1, o2) -> {
|
|
|
+ if (Objects.isNull(o1.getSubscriptionDuration()) || Objects.isNull(o2.getSubscriptionDuration())) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return o1.getSubscriptionDuration().compareTo(o2.getSubscriptionDuration());
|
|
|
+ });
|
|
|
+ List<SubscriptionSourcePlanVO> subscriptionSourcePlanVOS = planList.stream().map(plan -> {
|
|
|
+ SubscriptionSourcePlanVO subscriptionSourcePlanVO = new SubscriptionSourcePlanVO();
|
|
|
+ BeanUtils.copyProperties(plan, subscriptionSourcePlanVO);
|
|
|
+ return subscriptionSourcePlanVO;
|
|
|
+ }).toList();
|
|
|
+ subscriptionSourceDetailVO.setSubscriptionPlans(subscriptionSourcePlanVOS);
|
|
|
+
|
|
|
+ return subscriptionSourceDetailVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SubscriptionUserConfigVO> querySourceUserConfig() {
|
|
|
// 查询当前用户拥有的订阅源
|
|
|
- SubscriptionUserConfigQuery configQuery = new SubscriptionUserConfigQuery();
|
|
|
- configQuery.setUserId(userId);
|
|
|
- List<SubscriptionUserConfig> userConfigList = subscriptionUserConfigService.getByCondition(configQuery);
|
|
|
+ SubscriptionUserConfigQuery subscriptionUserConfigQuery = new SubscriptionUserConfigQuery();
|
|
|
+ subscriptionUserConfigQuery.setUserId(UserUtils.getCurrentUserId());
|
|
|
+ List<SubscriptionUserConfig> userConfigList = subscriptionUserConfigService.getByCondition(subscriptionUserConfigQuery);
|
|
|
if (CollectionUtils.isEmpty(userConfigList)) {
|
|
|
return List.of();
|
|
|
}
|
|
|
|
|
|
//查询订阅源信息
|
|
|
- Set<Long> sourceIds = userConfigList.stream().map(SubscriptionUserConfig::getSubscriptionSourceId).collect(Collectors.toSet());
|
|
|
- SubscriptionSourceQuery sourceQuery = new SubscriptionSourceQuery();
|
|
|
- sourceQuery.setIds(sourceIds);
|
|
|
- return querySubscriptionSourceVO(sourceQuery);
|
|
|
+ Set<Long> subscriptionSourceIds = userConfigList.stream().map(SubscriptionUserConfig::getSubscriptionSourceId).collect(Collectors.toSet());
|
|
|
+ SubscriptionSourceQuery subscriptionSourceQuery = new SubscriptionSourceQuery();
|
|
|
+ subscriptionSourceQuery.setIds(subscriptionSourceIds);
|
|
|
+ List<SubscriptionSource> subscriptionSourceList = subscriptionSourceService.getByCondition(subscriptionSourceQuery);
|
|
|
+ if (CollectionUtils.isEmpty(subscriptionSourceList)) {
|
|
|
+ throw BusinessException.fail("根据配置找不到对应的订阅源信息");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, SubscriptionSource> subscriptionSourceMap = subscriptionSourceList.stream().collect(Collectors.toMap(SubscriptionSource::getId, Function.identity()));
|
|
|
+ return userConfigList.stream().map(userConfig -> {
|
|
|
+ SubscriptionUserConfigVO subscriptionUserConfigVO = new SubscriptionUserConfigVO();
|
|
|
+ BeanUtils.copyProperties(userConfig, subscriptionUserConfigVO);
|
|
|
+ SubscriptionSource subscriptionSource = subscriptionSourceMap.get(userConfig.getSubscriptionSourceId());
|
|
|
+ if (Objects.nonNull(subscriptionSource)) {
|
|
|
+ subscriptionUserConfigVO.setTitle(subscriptionSource.getTitle());
|
|
|
+ subscriptionUserConfigVO.setSubTitle(subscriptionSource.getSubTitle());
|
|
|
+ }
|
|
|
+ return subscriptionUserConfigVO;
|
|
|
+ }).toList();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据条件查询订阅源
|
|
|
* @return
|
|
|
*/
|
|
|
- private List<SubscriptionSourceVO> querySubscriptionSourceVO(SubscriptionSourceQuery query) {
|
|
|
+ private List<SubscriptionSourceDetailVO> querySubscriptionSourceVO(SubscriptionSourceQuery query) {
|
|
|
if (Objects.isNull(query)) {
|
|
|
return List.of();
|
|
|
}
|
|
|
@@ -78,7 +168,7 @@ public class SubscriptionManagerImpl implements ISubscriptionManager {
|
|
|
return List.of();
|
|
|
}
|
|
|
return sourceList.stream().map(source -> {
|
|
|
- SubscriptionSourceVO sourceVO = new SubscriptionSourceVO();
|
|
|
+ SubscriptionSourceDetailVO sourceVO = new SubscriptionSourceDetailVO();
|
|
|
BeanUtils.copyProperties(source, sourceVO);
|
|
|
if (StringUtils.hasText(source.getPics())) {
|
|
|
List<String> picList = Arrays.stream(source.getPics().split(",")).toList();
|