42 Commits

Author SHA1 Message Date
bamanker
b79710a1fc 添加了GraalVM的原生镜像版本-本地编译版本
-修复了@Resource注入失败导致的程序跑不起来的问题
2023-11-13 15:30:11 +08:00
bamanker
af50397afb 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数2
2023-11-11 21:31:37 +08:00
bamanker
888b0e670f 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数2
2023-11-11 21:24:20 +08:00
bamanker
6067550bd2 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数1
2023-11-11 21:04:18 +08:00
bamanker
e0d5d784f8 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数
2023-11-11 20:49:55 +08:00
bamanker
5ae844ea33 添加了GraalVM的原生镜像版本-本地编译版本
-修复了若干bug(容器中应用无法打开的问题)
2023-11-11 20:33:14 +08:00
bamanker
6eaa123087 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile中的ENTRYPOINT参数
2023-11-11 18:58:57 +08:00
bamanker
f8c2ea8206 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile3
2023-11-11 18:34:16 +08:00
bamanker
cf10cec717 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile3
2023-11-11 18:14:56 +08:00
bamanker
7513fac8d8 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile2
2023-11-11 18:10:40 +08:00
bamanker
f46c78b9f1 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile2
2023-11-11 18:07:03 +08:00
bamanker
659c8e6f3b 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile1
2023-11-11 17:57:32 +08:00
bamanker
3d6530f148 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile1
2023-11-11 17:52:40 +08:00
bamanker
0c00085e9f 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile
2023-11-11 17:38:17 +08:00
bamanker
474b16c662 添加了GraalVM的原生镜像版本-本地编译版本
修改了构建器参数,增加了jfr监控等
2023-11-11 17:23:01 +08:00
bamanker
3a18a6b7a6 添加了GraalVM的原生镜像版本-本地编译版本3 2023-11-11 12:18:05 +08:00
bamanker
9cb5e77bb5 添加了GraalVM的原生镜像版本-本地编译版本2 2023-11-11 11:43:06 +08:00
bamanker
392c50ceb9 添加了GraalVM的原生镜像版本-本地编译版本1 2023-11-11 11:34:36 +08:00
bamanker
38152b7786 添加了GraalVM的原生镜像版本-本地编译版本 2023-11-11 11:27:14 +08:00
bamanker
e11418a3fa 添加了GraalVM的原生镜像版本 2023-11-09 23:43:24 +08:00
bamanker
62babb92ac 添加了GraalVM的原生镜像版本 2023-11-09 23:25:46 +08:00
bamanker
27096c2cd2 添加了GraalVM的原生镜像版本 2023-11-09 23:24:47 +08:00
bamanker
fc3ed87fe7 添加了GraalVM的原生镜像版本 2023-11-09 22:56:44 +08:00
bamanker
a58a15c674 优化了构建参数3 2023-06-13 19:54:41 +08:00
bamanker
57785ac9da 优化了构建参数2 2023-06-13 19:45:17 +08:00
bamanker
029d17a66c 优化了构建参数 2023-06-12 13:48:38 +08:00
bamanker
0e6c149597 123 2023-06-10 16:59:54 +08:00
bamanker
9e491112ff 增加了测试接口 ip/test 2023-05-15 16:07:50 +08:00
bamanker
4e7bdc6edd 增加了测试接口 ip/test 2023-05-15 12:54:23 +08:00
bamanker
a458f3c90a 修改了dockerfile文件并且增加了sh脚本 2023-05-15 12:47:43 +08:00
bamanker
5133ad69af 修改了dockerfile文件并且增加了sh脚本 2023-05-15 12:42:45 +08:00
bamanker
8deffb8629 修改了dockerfile文件并且增加了sh脚本 2023-05-15 12:37:26 +08:00
bamanker
d61951cbb4 修改了dockerfile文件并且增加了sh脚本 2023-05-15 12:35:21 +08:00
bamanker
ef76ad7bf8 修改了dockerfile文件并且增加了sh脚本 2023-05-15 12:32:47 +08:00
bamanker
2a2c27264a 修改了dockerfile文件并且增加了sh脚本 2023-05-15 12:19:50 +08:00
bamanker
ee17a6be4a 修改了dockerfile文件 2023-05-15 11:55:35 +08:00
bamanker
c32a7d5b55 修改了dockerfile文件 2023-05-15 11:44:27 +08:00
bamanker
c6f5b14615 修改了dockerfile文件 2023-05-15 11:18:32 +08:00
bamanker
d8acf918e6 修改了dockerfile文件 2023-05-15 11:04:16 +08:00
bamanker
9fd3611a20 增加了dockerfile文件 2023-05-14 15:16:02 +08:00
bamanker
acc021d2f1 修复了恋爱纪念日计算错误 2023-05-13 23:29:38 +08:00
bamanker
ebad21bf78 删除了nacos注册中心 2023-05-12 13:06:57 +08:00
15 changed files with 395 additions and 224 deletions

3
.dockerignore Normal file
View File

@@ -0,0 +1,3 @@
*
!target/dailylove*
!Dockerfile

33
.gitignore vendored
View File

@@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

8
Dockerfile Normal file
View File

@@ -0,0 +1,8 @@
FROM ubuntu:jammy-20231004
MAINTAINER bamanker
ARG NATIVE_FILE
ENV NATIVE_FILE=${NATIVE_FILE}
COPY target/${NATIVE_FILE} /home/${NATIVE_FILE}/app
EXPOSE 13145
WORKDIR /home/${NATIVE_FILE}/out
ENTRYPOINT /home/${NATIVE_FILE}/app -XX:StartFlightRecording='filename=recording.jfr,dumponexit=true,duration=10s'

12
LICENSE
View File

@@ -1,12 +0,0 @@
Copyright (c) 2023 bamanker
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

View File

@@ -1,6 +1,7 @@
# dailyLove
#### 介绍
公众号每日问候推送
#### 软件架构
软件架构说明

108
pom.xml
View File

@@ -5,22 +5,24 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<version>3.1.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bamanker</groupId>
<artifactId>dailyLove</artifactId>
<version>0.1.3</version>
<artifactId>dailylove</artifactId>
<version>v2.1-local</version>
<name>dailyLove</name>
<description>dailyLove</description>
<description>dailylove</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<fastjson.version>2.0.21</fastjson.version>
<openfeign.version>3.1.5</openfeign.version>
<nacos.version>2021.1</nacos.version>
<hutool.version>5.8.10</hutool.version>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<fastjson.version>2.0.25</fastjson.version>
<openfeign.version>4.0.4</openfeign.version>
<hutool.version>5.8.18</hutool.version>
<docker.private.repository>172.17.0.1:10888/my_work</docker.private.repository>
</properties>
<dependencies>
<dependency>
@@ -28,25 +30,6 @@
<artifactId>hutool-core</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
@@ -63,27 +46,86 @@
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.27</version>
<!--为本机映像程序添加配置,生成的配置文件位于
META-INF/native-image/groupID/artifactID/native-image.properties
也可以手动配置-->
<configuration>
<buildArgs>
<!--开启dashboard-->
<!-- <arg>-H:DashboardDump=dailylove -H:+DashboardAll</arg>-->
<arg->-H:+ReportExceptionStackTraces</arg->
<!--开启JFR-->
<arg>--enable-monitoring=jfr</arg>
<arg>--gc=G1</arg>
<!-- <arg>&#45;&#45;pgo</arg>-->
<arg>-Ob</arg>
<!-- <arg>-march=native</arg>-->
<arg>-H:+BuildReport</arg>
</buildArgs>
<!--启动详细输出-->
<verbose>true</verbose>
<!--配置jvm参数-->
<!-- <jvmArgs>
</jvmArgs>-->
<!--<agent>
<enabled>true</enabled>
<options>
<option>experimental-class-loader-support</option>
</options>
</agent>-->
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.xenoamess.docker</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<id>default</id>
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<username>bamanker</username>
<password>Fz8803101</password>
<repository>${docker.private.repository}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<NATIVE_FILE>${project.artifactId}</NATIVE_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -1,14 +1,20 @@
package com.bamanker.dailylove;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @author bamanker
*/
@SpringBootApplication
@EnableFeignClients
//开启定时任务
@EnableScheduling
//@ImportAutoConfiguration({FeignAutoConfiguration.class})
public class DailyLoveApplication {
public static void main(String[] args) {

View File

@@ -0,0 +1,138 @@
package com.bamanker.dailylove.config;
import cn.hutool.core.util.ClassUtil;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* 反射将所有项目类扫描加入到服务, 大力出奇迹的操作,感觉不太合适,不过先让服务跑起来
*
* @author bamanker
*/
@Component
public class ClassReflectConfig {
static boolean begin = true;
@Value("${scanclass}")
private Boolean scanclass;
@Autowired
private ThreadPoolTaskExecutor executorService;
@PostConstruct
public void init() {
if (scanclass) {
System.err.println("配置文件下 scanclass 开启了生成反射类");
} else {
System.err.println("配置文件下 scanclass 关闭了生成反射类");
}
synchronized (ClassReflectConfig.class) {
if (begin && scanclass) {
begin = false;
executorService.submit(() -> {
// {
// // 先抓取上一次的文件,生成
// try {
// BufferedReader utf8Reader = ResourceUtil
// .getUtf8Reader("classpath:/META-INF/native-image/reflect-config.json");
// String res = utf8Reader.lines().collect(Collectors.joining());
// List object = ProJsonUtil.toObject(res, List.class);
// for (Object object2 : object) {
// try {
// Map object22 = (Map) object2;
// handlerClass(Class.forName(ProMapUtil.getStr(object22, "name")));
// } catch (Exception e) {
// }
// }
// } catch (Exception e) {
// log.error("生成文件异常", e);
// }
// }
{
// 扫描系统第二级开始的包
String packageName = ClassReflectConfig.class.getPackageName();
String proPackageName = packageName.substring(0,
packageName.indexOf(".", packageName.indexOf(".") + 1));
// 可以在这个地方,添加除了服务以外其他的包,将会加入反射,以供graalvm生成配置
List<String> asList = Arrays.asList(proPackageName);
for (String spn : asList) {
try {
Set<Class<?>> doScan = ClassUtil.scanPackage(spn);
for (Class clazz : doScan) {
handlerClass(clazz);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
// handlerClass(RedisMessageListenerContainer.class);
});
}
}
}
private void handlerClass(Class clazz) {
if (clazz.equals(ClassReflectConfig.class)) {
// 跳过自己,避免形成循环
return;
}
executorService.submit(() -> {
try {
System.err.println("反射注入:" + clazz.getName());
// 生成所有的构造器
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
// 找到无参构造器然后实例化
Constructor declaredConstructor = clazz.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
Object newInstance = declaredConstructor.newInstance();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
try {
// 实例化成功,那么调用一下
method.setAccessible(true);
// graalvm必须需要声明方法
method.invoke(newInstance);
} catch (Throwable e) {
}
}
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
try {
field.setAccessible(true);
field.getType();
String name = field.getName();
field.get(newInstance);
} catch (Throwable e) {
}
}
System.err.println("反射注入完成:" + clazz.getName());
} catch (Throwable e) {
}
});
}
}

View File

@@ -5,7 +5,6 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope
public class DailyLoveConfigure {
// public static String Access_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
// public static String Send_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";

View File

@@ -8,9 +8,13 @@ import org.springframework.stereotype.Component;
@Component
public class PushTask {
@Autowired
final
PushDailyController pushDailyController;
public PushTask(PushDailyController pushDailyController) {
this.pushDailyController = pushDailyController;
}
//每日 早上7.30,晚上22点 定时推送
@Scheduled(cron = "0 30 7 * * ?")
public void scheduledPushMorning(){

View File

@@ -9,10 +9,11 @@ import com.bamanker.dailylove.service.DataRemoteClient;
import com.bamanker.dailylove.service.WechatRequestClient;
import com.bamanker.dailylove.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import jakarta.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -20,12 +21,17 @@ import java.util.Date;
@RestController
public class PushDailyController {
@Resource
final
DataRemoteClient dataRemoteClient;
@Resource
final
WechatRequestClient wechatRequestClient;
public PushDailyController(DataRemoteClient dataRemoteClient, WechatRequestClient wechatRequestClient) {
this.dataRemoteClient = dataRemoteClient;
this.wechatRequestClient = wechatRequestClient;
}
/**
* 推送晚安
*
@@ -98,7 +104,7 @@ public class PushDailyController {
if (DataUtils.getBirthdays(DailyLoveConfigure.Love_Day) == 1) {
words = "明天是恋爱周年纪念日!永远爱你~mua";
} else if ((DataUtils.getLoveDays(DailyLoveConfigure.Love_Day)) % 100 == 1) {
} else if ((DataUtils.getLoveDays(DailyLoveConfigure.Love_Day)) % 100 == 99) {
words = "明天是恋爱百日纪念日!提前庆祝哦~";
} else if (girlBirthdays == 1) {
words = "明天是lili大宝贝的生日啦";

View File

@@ -0,0 +1,18 @@
package com.bamanker.dailylove.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author bamanker
*/
@Slf4j
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "test ok!!!!!!!!";
}
}

View File

@@ -2,24 +2,11 @@ server:
port: 13145
spring:
profiles:
active: prob
application:
name: dailyLove
cloud:
nacos:
config:
server-addr: ${url.nacos} # nacos地址配置中心
file-extension: yaml
group: Group1
discovery:
#持久化实例 ture为临时实例 false为持久化实例 临时实例发生异常直接剔除, 而持久化实例等待恢复
ephemeral: true
#注册中心地址
server-addr: ${url.nacos}
url:
nacos: 127.0.0.1:8848
refresh:
enabled: false
DL:
tianxin-key: 72fbbb9e75e338ea6a240e83972f287c
@@ -65,4 +52,6 @@ tianxin:
logging:
level:
com.bamanker.dailylove.service: debug #指定openfeign日志以什么级别监控哪个接口可多个
com.bamanker.dailylove.service: debug #指定openfeign日志以什么级别监控哪个接口可多个
scanclass: false

View File

@@ -13,138 +13,140 @@ import org.bouncycastle.util.Strings;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import jakarta.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import static com.bamanker.dailylove.utils.DataUtils.getBirthdays;
@SpringBootTest
@Slf4j
class DailyLoveApplicationTests {
@Resource
DataRemoteClient dataRemoteClient;
String remark = "";
@Test
void test4(){
log.info("mark: {}",205%100);
}
@Test
void test3() {
//获取输入的生日
String boyBirthday = DailyLoveConfigure.Boy_Birthday;
//获取农历生日
ChineseDate chineseBir = new ChineseDate(DateUtil.parseDate(DailyLoveConfigure.Boy_Birthday));
log.info("生日的农历日期是:{}", chineseBir);
//截取日、月
String[] strings = Strings.split(boyBirthday, '-');
int chineseMonth = chineseBir.getMonth();
int chineseDay = chineseBir.getDay();
//获取当前日期的年
Calendar dateToday = Calendar.getInstance();
int todayYear = dateToday.get(Calendar.YEAR);
//把生日的年改为今年,方便计算
ChineseDate chineseDate = new ChineseDate(todayYear, chineseMonth, chineseDay,false);
//农历日期对应的阳历日期
int gregorianDay = chineseDate.getGregorianDay();
//计算时间差
long days = haveThisDay(chineseMonth, chineseDay, dateToday, todayYear, chineseDate, gregorianDay);
log.info("days:{}", days);
}
/**
* 需要递归计算日期差
*
* @param chineseMonth 农历月
* @param chineseDay 农历日
* @param dateToday 今天的日期类
* @param todayYear 当前的年
* @param chineseDate 组装的待计算的新日期
* @param gregorianDay 判断是否存在农历日期的参数,-1代表今年不存在这个农历日期
* @return 计算好的天数
*/
private static long haveThisDay(int chineseMonth, int chineseDay, Calendar dateToday, int todayYear, ChineseDate chineseDate, int gregorianDay) {
//判断当前年份是否存在农历日对应的阳历日
while (gregorianDay == -1) {
//不存在,计算明年
todayYear += 1;
chineseDate = new ChineseDate(todayYear, chineseMonth, chineseDay, false);
gregorianDay = chineseDate.getGregorianDay();
}
//存在
//将农历日期改为阳历日期
Calendar gregorianbir = chineseDate.getGregorianCalendar();
//判断这个日期是否和今年是同一年
if (todayYear == dateToday.get(Calendar.YEAR)) {
//是同一年,判断这一天过了没
if (gregorianbir.get(Calendar.DAY_OF_YEAR) < dateToday.get(Calendar.DAY_OF_YEAR)) {
//这一天过了,计算明年
todayYear += 1;
chineseDate = new ChineseDate(todayYear, chineseMonth, chineseDay, false);
gregorianDay = chineseDate.getGregorianDay();
//递归计算下一年是否存在对应的阳历日
return haveThisDay(chineseMonth, chineseDay, dateToday, todayYear, chineseDate, gregorianDay);
}
//没有过,直接计算
}
//不是同一年,直接计算
Date time = dateToday.getTime();
log.info("当前的日期是:{}", time);
Date time1 = gregorianbir.getTime();
log.info("下一个生日的日期:{}", time1);
return DateUtil.between(dateToday.getTime(), gregorianbir.getTime(), DateUnit.DAY);
}
@Test
void test2() {
TianXinReqParam param1 = new TianXinReqParam();
param1.setKey(DailyLoveConfigure.TianXin_Key);
param1.setCity(DailyLoveConfigure.City_ID);
param1.setType("7");
String weatherJson = dataRemoteClient.getWeather(param1);
log.info("weather:{}", weatherJson);
JSONObject resWeather = JSONObject.parseObject(weatherJson);
JSONObject result = resWeather.getJSONArray("result").getJSONObject(0).getJSONArray("list").getJSONObject(2);
log.info("----result----:{}", result);
Weather weather = result.toJavaObject(Weather.class);
log.info("weather:{}", weather);
ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate(weather.getDate()));
System.out.println("--------------55555----------"+weather.getDate());
System.out.println("------------------------"+chineseDate);
}
@Test
void test1() {
int loveDays = getLoveDays("2021-07-16");
log.info("-------------------------------{}", loveDays);
}
public static int getLoveDays(String loveday) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
int days = 0;
try {
long time = System.currentTimeMillis() - dateFormat.parse(loveday).getTime();
days = (int) (time / (24 * 60 * 60 * 1000));
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}
@Test
void contextLoads() {
// @Resource
// DataRemoteClient dataRemoteClient;
//
// String remark = "❤";
//
// @Test
// void test4(){
// log.info("mark: {}",205%100);
//
// }
// @Test
// void test3() {
//
//
// //获取输入的生日
// String boyBirthday = DailyLoveConfigure.Boy_Birthday;
// //获取农历生日
// ChineseDate chineseBir = new ChineseDate(DateUtil.parseDate(DailyLoveConfigure.Boy_Birthday));
// log.info("生日的农历日期是:{}", chineseBir);
// //截取日、月
// String[] strings = Strings.split(boyBirthday, '-');
// int chineseMonth = chineseBir.getMonth();
// int chineseDay = chineseBir.getDay();
// //获取当前日期的年
// Calendar dateToday = Calendar.getInstance();
// int todayYear = dateToday.get(Calendar.YEAR);
// //把生日的年改为今年,方便计算
// ChineseDate chineseDate = new ChineseDate(todayYear, chineseMonth, chineseDay,false);
// //农历日期对应的阳历日期
// int gregorianDay = chineseDate.getGregorianDay();
// //计算时间差
// long days = haveThisDay(chineseMonth, chineseDay, dateToday, todayYear, chineseDate, gregorianDay);
// log.info("days:{}", days);
//
// }
//
// /**
// * 需要递归计算日期差
// *
// * @param chineseMonth 农历月
// * @param chineseDay 农历日
// * @param dateToday 今天的日期类
// * @param todayYear 当前的年
// * @param chineseDate 组装的待计算的新日期
// * @param gregorianDay 判断是否存在农历日期的参数,-1代表今年不存在这个农历日期
// * @return 计算好的天数
// */
// private static long haveThisDay(int chineseMonth, int chineseDay, Calendar dateToday, int todayYear, ChineseDate chineseDate, int gregorianDay) {
// //判断当前年份是否存在农历日对应的阳历日
// while (gregorianDay == -1) {
// //不存在,计算明年
// todayYear += 1;
// chineseDate = new ChineseDate(todayYear, chineseMonth, chineseDay, false);
// gregorianDay = chineseDate.getGregorianDay();
// }
// //存在
// //将农历日期改为阳历日期
// Calendar gregorianbir = chineseDate.getGregorianCalendar();
// //判断这个日期是否和今年是同一年
// if (todayYear == dateToday.get(Calendar.YEAR)) {
// //是同一年,判断这一天过了没
// if (gregorianbir.get(Calendar.DAY_OF_YEAR) < dateToday.get(Calendar.DAY_OF_YEAR)) {
// //这一天过了,计算明年
// todayYear += 1;
// chineseDate = new ChineseDate(todayYear, chineseMonth, chineseDay, false);
// gregorianDay = chineseDate.getGregorianDay();
// //递归计算下一年是否存在对应的阳历日
// return haveThisDay(chineseMonth, chineseDay, dateToday, todayYear, chineseDate, gregorianDay);
// }
// //没有过,直接计算
// }
// //不是同一年,直接计算
// Date time = dateToday.getTime();
// log.info("当前的日期是:{}", time);
// Date time1 = gregorianbir.getTime();
// log.info("下一个生日的日期:{}", time1);
// return DateUtil.between(dateToday.getTime(), gregorianbir.getTime(), DateUnit.DAY);
// }
//
// @Test
// void test2() {
//
// TianXinReqParam param1 = new TianXinReqParam();
// param1.setKey(DailyLoveConfigure.TianXin_Key);
// param1.setCity(DailyLoveConfigure.City_ID);
// param1.setType("7");
// String weatherJson = dataRemoteClient.getWeather(param1);
// log.info("weather:{}", weatherJson);
// JSONObject resWeather = JSONObject.parseObject(weatherJson);
// JSONObject result = resWeather.getJSONArray("result").getJSONObject(0).getJSONArray("list").getJSONObject(2);
// log.info("----result----:{}", result);
// Weather weather = result.toJavaObject(Weather.class);
// log.info("weather:{}", weather);
// ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate(weather.getDate()));
// System.out.println("--------------55555----------"+weather.getDate());
// System.out.println("------------------------"+chineseDate);
//
//
// }
//
//
// @Test
// void test1() {
// int loveDays = getBirthdays("2023-05-14");
// log.info("-------------------------------{}", loveDays);
// }
//
// public static int getLoveDays(String loveday) {
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// int days = 0;
// try {
// long time = System.currentTimeMillis() - dateFormat.parse(loveday).getTime();
// days = (int) (time / (24 * 60 * 60 * 1000));
//
// } catch (ParseException e) {
// e.printStackTrace();
// }
// return days;
// }
//
// @Test
// void contextLoads() {
// TianXinReqParam param1 = new TianXinReqParam();
// param1.setKey(DailyLoveConfigure.TianXin_Key);
// param1.setCity(DailyLoveConfigure.City_ID);
@@ -201,6 +203,6 @@ class DailyLoveApplicationTests {
// log.info("resultVo:{}", resultVo);
}
// }
}

BIN
target/dailylove Executable file

Binary file not shown.