From fe2a9612c11a6daed691ed1609699a8020d0466b Mon Sep 17 00:00:00 2001 From: zayac Date: Sat, 9 Sep 2023 01:57:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9E=E4=BD=93=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E5=88=A9=E7=94=A8=E8=87=AA=E5=AE=9A=E4=B9=89=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E8=B7=9F=E5=8F=8D=E5=B0=84=E5=AE=9E=E7=8E=B0=E6=9C=89?= =?UTF-8?q?=E5=8F=82=E6=9E=84=E9=80=A0=E4=BF=A1=E6=81=AF=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../changeurl/annotation/MsgAnnotation.java | 15 ++++ .../com/zayac/changeurl/common/Constant.java | 9 +++ .../zayac/changeurl/entity/HthMsgEntity.java | 52 +++++++++++++ .../zayac/changeurl/entity/KyMsgEntity.java | 77 +++++++++++++++++++ .../service/ChangeURLServiceImpl.java | 3 +- .../changeurl/service/KyMsgStrategy.java | 12 +++ .../zayac/changeurl/service/MsgStrategy.java | 11 +++ 7 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/zayac/changeurl/annotation/MsgAnnotation.java create mode 100644 src/main/java/com/zayac/changeurl/common/Constant.java create mode 100644 src/main/java/com/zayac/changeurl/entity/HthMsgEntity.java create mode 100644 src/main/java/com/zayac/changeurl/entity/KyMsgEntity.java create mode 100644 src/main/java/com/zayac/changeurl/service/KyMsgStrategy.java create mode 100644 src/main/java/com/zayac/changeurl/service/MsgStrategy.java diff --git a/src/main/java/com/zayac/changeurl/annotation/MsgAnnotation.java b/src/main/java/com/zayac/changeurl/annotation/MsgAnnotation.java new file mode 100644 index 0000000..f100316 --- /dev/null +++ b/src/main/java/com/zayac/changeurl/annotation/MsgAnnotation.java @@ -0,0 +1,15 @@ +package com.zayac.changeurl.annotation; + +import java.lang.annotation.*; + +/** + * @author zayac + * @since 2023-09-08 23:16 + */ + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented // 表示该注解会被文档工具生成文档 +public @interface MsgAnnotation { + String startWith() default ""; +} diff --git a/src/main/java/com/zayac/changeurl/common/Constant.java b/src/main/java/com/zayac/changeurl/common/Constant.java new file mode 100644 index 0000000..14775cd --- /dev/null +++ b/src/main/java/com/zayac/changeurl/common/Constant.java @@ -0,0 +1,9 @@ +package com.zayac.changeurl.common; + +/** + * @author zayac + * @since 2023-09-09 0:06 + */ +public class Constant { + public static final String URL_PATTERN = "(https?://[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})(:[0-9]{1,5})?"; +} diff --git a/src/main/java/com/zayac/changeurl/entity/HthMsgEntity.java b/src/main/java/com/zayac/changeurl/entity/HthMsgEntity.java new file mode 100644 index 0000000..fde3c36 --- /dev/null +++ b/src/main/java/com/zayac/changeurl/entity/HthMsgEntity.java @@ -0,0 +1,52 @@ +package com.zayac.changeurl.entity; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; +import com.zayac.changeurl.annotation.MsgAnnotation; +import com.zayac.changeurl.common.Constant; +import lombok.Data; + +import java.lang.reflect.Field; + +/** + * @author zayac + * @since 2023-09-09 1:05 + */ +@Data +public class HthMsgEntity { + @MsgAnnotation(startWith = "web") + private String pc; + @MsgAnnotation(startWith = "h5") + private String h5; + @MsgAnnotation(startWith = "全站APP") + private String app; + @MsgAnnotation(startWith = "体育APP") + private String tyApp; + + public HthMsgEntity(String[] array) { + for (Field field : this.getClass().getDeclaredFields()) { + MsgAnnotation msgAnnotation = field.getAnnotation(MsgAnnotation.class); + if (msgAnnotation != null) { + // 获取注解的startWith属性值 + String startWith = msgAnnotation.startWith(); + String val = ""; + for (int i = 0; i < array.length; i++) { + //如果以开头字符开头并且字符长度大于startWith,认为在一行 + if (array[i].startsWith(startWith) && StrUtil.cleanBlank(array[i]).length() > startWith.length()) { + val = ReUtil.getGroup1(Constant.URL_PATTERN, array[i]); + } else if (array[i].startsWith(startWith)) { + val = ReUtil.getGroup1(Constant.URL_PATTERN, array[i + 1]); + } + } + Assert.notBlank(val); + field.setAccessible(true); + try { + field.set(this, val); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/src/main/java/com/zayac/changeurl/entity/KyMsgEntity.java b/src/main/java/com/zayac/changeurl/entity/KyMsgEntity.java new file mode 100644 index 0000000..e1d7f6e --- /dev/null +++ b/src/main/java/com/zayac/changeurl/entity/KyMsgEntity.java @@ -0,0 +1,77 @@ +package com.zayac.changeurl.entity; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ReUtil; +import com.zayac.changeurl.annotation.MsgAnnotation; +import com.zayac.changeurl.common.Constant; +import lombok.Data; + +import javax.sound.midi.Soundbank; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.lang.reflect.Field; +import java.util.stream.Collectors; + +/** + * @author zayac + * @since 2023-09-08 22:54 + */ +@Data +public class KyMsgEntity { + private final String PREFER = "新"; + @MsgAnnotation(startWith = "WEB") + private List pc; + @MsgAnnotation(startWith = "H5") + private List h5; + @MsgAnnotation(startWith = "全站") + private List app; + @MsgAnnotation(startWith = "体育") + private List ty; + @MsgAnnotation(startWith = "WEB") + private String fljPc; + @MsgAnnotation(startWith = "H5") + private String fljH5; + + public KyMsgEntity(String[] array) { + for (Field field : this.getClass().getDeclaredFields()) { + // 获取字段上的MsgAnnotation注解 + MsgAnnotation msgAnnotation = field.getAnnotation(MsgAnnotation.class); + // 如果注解不为空,说明该字段使用了MsgAnnotation注解 + if (msgAnnotation != null) { + // 获取注解的startWith属性值 + String startWith = msgAnnotation.startWith(); + // 创建一个列表,用于存储匹配的字符串 + List matched = new ArrayList<>(); + // 遍历字符串数组,查找以startWith开头的字符串 + for (String s : array) { + if (s.startsWith(startWith)) { + // 如果找到匹配的字符串,添加到列表中 + matched.add(ReUtil.getGroup1(Constant.URL_PATTERN, s)); + } + } + //断言 list中不含有null值,防止修改数据为空 + Assert.noNullElements(ArrayUtil.toArray(matched, String.class)); + // 设置字段的访问权限为true,以便赋值操作 + field.setAccessible(true); + try { + // 判断字段的类型是否是List + if (field.getType().isAssignableFrom(List.class)) { + // 如果是List类型,直接将匹配的列表赋值给该字段 + matched = matched.stream().sorted(Comparator.comparing(str -> str.contains(PREFER))).collect(Collectors.toList()); + field.set(this, matched); + } else { + // 如果不是List类型,判断匹配的列表是否为空 + if (!matched.isEmpty()) { + // 如果不为空,取第一个元素赋值给该字段 + field.set(this, ReUtil.getGroup1(Constant.URL_PATTERN, matched.get(0))); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/src/main/java/com/zayac/changeurl/service/ChangeURLServiceImpl.java b/src/main/java/com/zayac/changeurl/service/ChangeURLServiceImpl.java index 2e45199..c2f36c2 100644 --- a/src/main/java/com/zayac/changeurl/service/ChangeURLServiceImpl.java +++ b/src/main/java/com/zayac/changeurl/service/ChangeURLServiceImpl.java @@ -3,6 +3,7 @@ package com.zayac.changeurl.service; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.system.SystemUtil; import com.zayac.changeurl.entity.Msg2JSEntity; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; @@ -90,7 +91,7 @@ public class ChangeURLServiceImpl implements ChangeURLService { } //处理传入参数 - String[] strings = StrUtil.splitToArray(text, "\n"); + String[] strings = StrUtil.splitToArray(text, SystemUtil.LINE_SEPARATOR); List msgKyWebList = getByStartWith(strings, msgKyWeb, URL_PATTERN, PREFER); List msgKyH5List = getByStartWith(strings, msgKyH5, URL_PATTERN, PREFER); diff --git a/src/main/java/com/zayac/changeurl/service/KyMsgStrategy.java b/src/main/java/com/zayac/changeurl/service/KyMsgStrategy.java new file mode 100644 index 0000000..9b03fde --- /dev/null +++ b/src/main/java/com/zayac/changeurl/service/KyMsgStrategy.java @@ -0,0 +1,12 @@ +package com.zayac.changeurl.service; + +/** + * @author zayac + * @since 2023-09-08 23:00 + */ +public class KyMsgStrategy implements MsgStrategy{ + @Override + public Object transform() { + return null; + } +} diff --git a/src/main/java/com/zayac/changeurl/service/MsgStrategy.java b/src/main/java/com/zayac/changeurl/service/MsgStrategy.java new file mode 100644 index 0000000..b31e926 --- /dev/null +++ b/src/main/java/com/zayac/changeurl/service/MsgStrategy.java @@ -0,0 +1,11 @@ +package com.zayac.changeurl.service; + +/** + * 定义一个飞机信息转化的接口 + * + * @author zayac + * @since 2023-09-08 22:57 + */ +public interface MsgStrategy { + public T transform(); +}