diff --git a/pom.xml b/pom.xml
index 8d374e8..6dc75f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
com.bamanker
dailyLove
- 0.0.2
+ 0.0.3
dailyLove
dailyLove
@@ -20,8 +20,14 @@
2.0.21
3.1.5
2021.1
+ 5.8.10
+
+ cn.hutool
+ hutool-core
+ ${hutool.version}
+
org.springframework.cloud
spring-cloud-starter-bootstrap
diff --git a/src/main/java/com/bamanker/dailylove/config/PushTask.java b/src/main/java/com/bamanker/dailylove/config/PushTask.java
index 39955dd..d758442 100644
--- a/src/main/java/com/bamanker/dailylove/config/PushTask.java
+++ b/src/main/java/com/bamanker/dailylove/config/PushTask.java
@@ -12,7 +12,7 @@ public class PushTask {
PushDailyController pushDailyController;
//每日 早上8,12,22点 定时推送
- @Scheduled(cron = "0 0 8,12,22 * * ?")
+ @Scheduled(cron = "0 0 8 * * ?")
public void scheduledPush(){
pushDailyController.push();
}
diff --git a/src/main/java/com/bamanker/dailylove/utils/DataUtils.java b/src/main/java/com/bamanker/dailylove/utils/DataUtils.java
index 2336e86..72a946b 100644
--- a/src/main/java/com/bamanker/dailylove/utils/DataUtils.java
+++ b/src/main/java/com/bamanker/dailylove/utils/DataUtils.java
@@ -1,15 +1,97 @@
package com.bamanker.dailylove.utils;
+import cn.hutool.core.date.ChineseDate;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.bamanker.dailylove.config.DailyLoveConfigure;
+import lombok.extern.slf4j.Slf4j;
+import org.bouncycastle.util.Strings;
import org.springframework.util.unit.DataUnit;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
+import java.util.Date;
+@Slf4j
public class DataUtils {
+ /**
+ * 计算农历生日天数
+ *
+ * @param birthday
+ * @return
+ */
+ public static int getChineseBirthdays(String birthday) {
+ //获取输入的生日
+ 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);
+ //农历日期对应的阳历日期
+ int gregorianDay = chineseDate.getGregorianDay();
+ //计算时间差
+ long days = haveThisDay(chineseMonth, chineseDay, dateToday, todayYear, chineseDate, gregorianDay);
+ log.info("days:{}", days);
+ return (int) 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);
+
+ }
+
/**
* 计算生日天数 days
+ *
* @param birthday
* @return
*/
@@ -42,6 +124,7 @@ public class DataUtils {
/**
* 计算恋爱天数 days
+ *
* @param loveday
* @return
*/
diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml
index 2e74f9b..49e210f 100644
--- a/src/main/resources/bootstrap.yml
+++ b/src/main/resources/bootstrap.yml
@@ -23,7 +23,7 @@ DL:
tianxin-key: 72fbbb9e75e338ea6a240e83972f287c
city-id: 101270101
girl-birthday: 1995-06-28
- boy-birthday: 1995-03-30
+ boy-birthday: 1995-3-30
love-day: 2022-07-16
wechat:
diff --git a/src/test/java/com/bamanker/dailylove/DailyLoveApplicationTests.java b/src/test/java/com/bamanker/dailylove/DailyLoveApplicationTests.java
index fd7414c..8d17542 100644
--- a/src/test/java/com/bamanker/dailylove/DailyLoveApplicationTests.java
+++ b/src/test/java/com/bamanker/dailylove/DailyLoveApplicationTests.java
@@ -1,5 +1,9 @@
package com.bamanker.dailylove;
+import cn.hutool.core.date.ChineseDate;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.bamanker.dailylove.config.DailyLoveConfigure;
@@ -10,13 +14,18 @@ import com.bamanker.dailylove.domain.Weather;
import com.bamanker.dailylove.service.DataRemoteClient;
import com.bamanker.dailylove.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
+import org.bouncycastle.util.Strings;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.util.unit.DataUnit;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
@SpringBootTest
@Slf4j
@@ -27,12 +36,100 @@ class DailyLoveApplicationTests {
String remark = "❤";
+ @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);
+ //农历日期对应的阳历日期
+ 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(1);
+ log.info("----result----:{}", result);
+ Weather weather = result.toJavaObject(Weather.class);
+ log.info("weather:{}", weather);
+
+
+ }
+
@Test
void test1() {
int loveDays = getLoveDays("2021-07-16");
- log.info("-------------------------------{}",loveDays);
+ log.info("-------------------------------{}", loveDays);
}
+
public static int getLoveDays(String loveday) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
int days = 0;
@@ -45,6 +142,7 @@ class DailyLoveApplicationTests {
}
return days;
}
+
@Test
void contextLoads() {
TianXinReqParam param1 = new TianXinReqParam();
@@ -66,12 +164,12 @@ class DailyLoveApplicationTests {
ResultVo resultVo = ResultVo.initializeResultVo(DailyLoveConfigure.Open_ID,
DailyLoveConfigure.Template_ID,
DailyLoveConfigure.Color_Top);
- resultVo.setAttribute("now",new DataItem(weather.getDate() + " "+weather.getWeek(),"#00BFFF"));
- resultVo.setAttribute("city",new DataItem(weather.getArea(),null));
- resultVo.setAttribute("weather",new DataItem(weather.getWeather(),"#1f95c5"));
- resultVo.setAttribute("min_temperature",new DataItem(weather.getLowest(),"#0ace3c"));
- resultVo.setAttribute("max_temperature",new DataItem(weather.getHighest(),"#dc1010"));
- resultVo.setAttribute("tips",new DataItem(weather.getTips(),null));
+ resultVo.setAttribute("now", new DataItem(weather.getDate() + " " + weather.getWeek(), "#00BFFF"));
+ resultVo.setAttribute("city", new DataItem(weather.getArea(), null));
+ resultVo.setAttribute("weather", new DataItem(weather.getWeather(), "#1f95c5"));
+ resultVo.setAttribute("min_temperature", new DataItem(weather.getLowest(), "#0ace3c"));
+ resultVo.setAttribute("max_temperature", new DataItem(weather.getHighest(), "#dc1010"));
+ resultVo.setAttribute("tips", new DataItem(weather.getTips(), null));
TianXinReqParam param2 = new TianXinReqParam();
@@ -81,8 +179,8 @@ class DailyLoveApplicationTests {
JSONObject responseRainbow = JSONObject.parseObject(rainbowJson);
String rainbow = responseRainbow.getJSONArray("result").getJSONObject(0).getString("content");
log.info("rainbow:{}", rainbow);
- resultVo.setAttribute("daily_english_cn",new DataItem(rainbow,"#FF69B4"));
- resultVo.setAttribute("remark",new DataItem(remark,"#FF1493"));
+ resultVo.setAttribute("daily_english_cn", new DataItem(rainbow, "#FF69B4"));
+ resultVo.setAttribute("remark", new DataItem(remark, "#FF1493"));
String englishJson = dataRemoteClient.getDailyEnglish(param2);
@@ -90,15 +188,15 @@ class DailyLoveApplicationTests {
JSONObject responseEnglist = JSONObject.parseObject(englishJson);
String englist = responseEnglist.getJSONArray("result").getJSONObject(0).getString("en");
log.info("english:{}", englist);
- resultVo.setAttribute("daily_english_en",new DataItem(rainbow,"#800080"));
+ resultVo.setAttribute("daily_english_en", new DataItem(rainbow, "#800080"));
int birthdays = DataUtils.getBirthdays(DailyLoveConfigure.Girl_Birthday);
log.info("bir_day:{}", birthdays);
- resultVo.setAttribute("bir_day",new DataItem(birthdays+"","#FFA500"));
+ resultVo.setAttribute("bir_day", new DataItem(birthdays + "", "#FFA500"));
int loveDays = DataUtils.getLoveDays(DailyLoveConfigure.Love_Day);
log.info("love_day:{}", loveDays);
- resultVo.setAttribute("love_day",new DataItem(loveDays+"","#FFA500"));
+ resultVo.setAttribute("love_day", new DataItem(loveDays + "", "#FFA500"));
log.info("resultVo:{}", resultVo);