Skip to content

Commit

Permalink
add: 新增赞赏展示页2
Browse files Browse the repository at this point in the history
  • Loading branch information
carolcoral committed May 30, 2024
1 parent cde558b commit d0e9fe3
Show file tree
Hide file tree
Showing 10 changed files with 1,471 additions and 27 deletions.
5 changes: 3 additions & 2 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version=1.3.0
version=1.4.0
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ public class BaseSettingConfig {
*/
private Double sponsorNumber = 66.00;


}
30 changes: 30 additions & 0 deletions src/main/java/site/xindu/afdian/config/ThemeSettingConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package site.xindu.afdian.config;

import lombok.Data;
import lombok.ToString;

/**
* 赞赏展示页2设置
*/
@Data
@ToString
public class ThemeSettingConfig {

public static final String CONFIG_MAP_NAME = "plugin-afdian-config";
public static final String GROUP = "themeSetting";

/**
* 赞助展示页面
*/
private String themeStyle = "afdian";

/**
* 顶部图片URL
*/
private String rewardTopImgUrl = "";

/**
* 顶部图片文字
*/
private String rewardTopTitle = "";
}
6 changes: 6 additions & 0 deletions src/main/java/site/xindu/afdian/finder/AfdianFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,10 @@ public interface AfdianFinder {
*/
String parseTime(Long timestamp);

/**
* 获取设置的标记金额
* @return 标记金额
*/
Mono<Double> getRewardNumber();

}
30 changes: 23 additions & 7 deletions src/main/java/site/xindu/afdian/finder/impl/AfdianFinderImpl.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
package site.xindu.afdian.finder.impl;

import com.fasterxml.jackson.databind.JsonNode;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.BeanUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import reactor.core.publisher.Mono;
import run.halo.app.infra.utils.JsonUtils;
import run.halo.app.plugin.ReactiveSettingFetcher;
import run.halo.app.theme.finders.Finder;
import site.xindu.afdian.entity.SponsorEntity;
import site.xindu.afdian.finder.AfdianFinder;
import site.xindu.afdian.service.SponsorService;
import site.xindu.afdian.utils.DataUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@RequiredArgsConstructor
@Finder("afdianFinder")
public class AfdianFinderImpl implements AfdianFinder {

@Autowired
private SponsorService sponsorService;

private final ReactiveSettingFetcher settingFetcher;

private static final String BASIC = "basic";

/**
* 获取全部赞助者信息
*
Expand Down Expand Up @@ -52,10 +55,23 @@ public Mono<JsonNode> listAllSponsor() {
@Override
public String parseTime(Long timestamp) {
var length = timestamp.toString().length();
if (length == 10){
if (length == 10) {
timestamp = timestamp * 1000;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.format(new Date(timestamp));
}

/**
* 获取设置的标记金额
*
* @return 标记金额
*/
@Override
public Mono<Double> getRewardNumber() {
return this.settingFetcher.get(BASIC).map(setting ->
setting.get("sponsorNumber").asDouble(66.0)
)
.defaultIfEmpty(66.0);
}
}
63 changes: 47 additions & 16 deletions src/main/java/site/xindu/afdian/service/AfdianRouter.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,16 @@
import java.util.HashMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;
import run.halo.app.infra.utils.JsonUtils;
import run.halo.app.plugin.ReactiveSettingFetcher;
import run.halo.app.theme.TemplateNameResolver;
import site.xindu.afdian.entity.SponsorEntity;
import site.xindu.afdian.finder.AfdianFinder;

@Slf4j
@RequiredArgsConstructor
Expand All @@ -23,10 +21,12 @@ public class AfdianRouter {

private final TemplateNameResolver templateNameResolver;

private final AfdianFinder afdianFinder;

private final ReactiveSettingFetcher settingFetcher;

private static final String BASIC = "basic";

private static final String THEME_SETTING = "themeSetting";

@Bean
RouterFunction<ServerResponse> momentRouterFunction() {
return RouterFunctions.route().GET("/afdian", this::renderPage).build();
Expand All @@ -35,19 +35,50 @@ RouterFunction<ServerResponse> momentRouterFunction() {
Mono<ServerResponse> renderPage(ServerRequest request) {
// 准备需要提供给模板的默认数据
var model = new HashMap<String, Object>();
Mono<String> sponsorUrl = this.settingFetcher.get("basic").map(setting ->
setting.get("sponsorUrl").asText("https://afdian.net/a/carolcoral")
)
.defaultIfEmpty("https://afdian.net/a/carolcoral");
defaultModel(model);
return this.settingFetcher.get(THEME_SETTING).flatMap(setting -> {
String themeStyle = setting.get("themeStyle").asText();
if (StringUtils.isEmpty(themeStyle)) {
themeStyle = "afdian";
}
extracted(model, themeStyle);
return templateNameResolver.resolveTemplateNameOrDefault(request.exchange(), themeStyle)
.flatMap(templateName -> ServerResponse.ok().render(templateName, model));
});

}

private void defaultModel(HashMap<String, Object> model) {
Mono<String> sponsorUrl =
this.settingFetcher.get(BASIC).map(setting ->
setting.get("sponsorUrl").asText()
).defaultIfEmpty("https://afdian.net/a/carolcoral");
model.put("sponsorUrl", sponsorUrl);
Mono<Double> sponsorNumber = this.settingFetcher.get("basic").map(setting ->
setting.get("sponsorNumber").asDouble(66.0)
)
.defaultIfEmpty(66.0);
Mono<Double> sponsorNumber =
this.settingFetcher.get(BASIC).map(setting ->
setting.get("sponsorNumber").asDouble()
).defaultIfEmpty(66.00);
model.put("sponsorNumber", sponsorNumber);
log.info(model.toString());
return templateNameResolver.resolveTemplateNameOrDefault(request.exchange(), "afdian")
.flatMap(templateName -> ServerResponse.ok().render(templateName, model));
}

private void extracted(HashMap<String, Object> model, String theme) {
// 不同样式存在不同的默认值
switch (theme) {
case "afdian2":
Mono<String> rewardTopImgUrl =
this.settingFetcher.get(THEME_SETTING).map(setting ->
setting.get("rewardTopImgUrl").asText()
).defaultIfEmpty(
"https://youimg1.c-ctrip.com/target/100m1b000001bj6if96CC.jpg");
model.put("rewardTopImgUrl", rewardTopImgUrl);
Mono<String> rewardTopTitle = this.settingFetcher.get(THEME_SETTING).map(setting ->
setting.get("rewardTopTitle").asText()
).defaultIfEmpty("感谢我的赞赏者们");
model.put("rewardTopTitle", rewardTopTitle);
break;
default:
break;
}
}

}
28 changes: 27 additions & 1 deletion src/main/resources/extensions/settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,30 @@ spec:
label: 切换赞助金额显示颜色值
value: 66
placeholder: 请输入需要切换颜色的赞助金额限制
help: 非必填,默认切换赞助金额颜色的金额值为 66
help: 非必填,默认切换赞助金额颜色的金额值为 66
- group: themeSetting
label: 赞赏展示页设置
formSchema:
- $formkit: select
name: themeStyle
id: themeStyle
key: themeStyle
label: 赞助展示页面样式
value: afdian
options:
- label: 默认展示页面
value: afdian
- label: 展示页2
value: afdian2
- $formkit: url
name: rewardTopImgUrl
label: 顶部图片URL
if: $get(themeStyle).value == 'afdian2'
placeholder: 请输入顶部图片地址
value: https://youimg1.c-ctrip.com/target/100m1b000001bj6if96CC.jpg
- $formkit: text
name: rewardTopTitle
label: 顶部图片文字
if: $get(themeStyle).value == 'afdian2'
placeholder: 请输入顶部图片文字内容
value: 感谢我的赞赏者们
Loading

0 comments on commit d0e9fe3

Please sign in to comment.