|
|
@@ -12,10 +12,13 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.LinkedHashMap;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
-import java.util.stream.Collectors;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -71,6 +74,16 @@ public class FmsSolarServiceImpl implements IFmsSolarService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 新增节气时令
|
|
|
+ *
|
|
|
+ * @param fmsSolarList@return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int insertFmsSolarBatch(List<FmsSolar> fmsSolarList) {
|
|
|
+ return fmsSolarMapper.insertFmsSolarBatch(fmsSolarList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 修改节气时令
|
|
|
*
|
|
|
* @param fmsSolar 节气时令
|
|
|
@@ -103,27 +116,86 @@ public class FmsSolarServiceImpl implements IFmsSolarService
|
|
|
return fmsSolarMapper.deleteFmsSolarBySolarId(solarId,tid);
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public int updateFmsSolarAll() {
|
|
|
+ Map<String, String> solarDigestMap = new HashMap<>();
|
|
|
+ solarDigestMap.put("小寒", "气温持续低迷,寒冷干燥。");
|
|
|
+ solarDigestMap.put("大寒", "一年中最冷的时期。");
|
|
|
+ solarDigestMap.put("立春", "温暖回升,开始春耕。");
|
|
|
+ solarDigestMap.put("雨水", "雨水增多,气温回升。");
|
|
|
+ solarDigestMap.put("惊蛰", "气温升高,雷雨增多,万物复苏。");
|
|
|
+ solarDigestMap.put("春分", "昼夜等长,温度适中。");
|
|
|
+ solarDigestMap.put("清明", "气温进一步回升,雨量增多。");
|
|
|
+ solarDigestMap.put("谷雨", "雨水充足,利于农作物生长。");
|
|
|
+ solarDigestMap.put("立夏", "气温升高,降水增多。");
|
|
|
+ solarDigestMap.put("小满", "小麦等夏收作物灌浆饱满。");
|
|
|
+ solarDigestMap.put("芒种", "小麦、油菜成熟,进入收获期。");
|
|
|
+ solarDigestMap.put("夏至", "白昼最长,气温升高。");
|
|
|
+ solarDigestMap.put("小暑", "是二十四节气之第十一个节气,干支历午月的结束以及未月的起始。斗指辛,太阳到达黄经105度,于每年公历7月6-8日交节。暑,是炎热的意思,小暑为小热,还不十分热。小暑虽不是一年中最炎热的时节,但紧接着就是一年中最热的节气大暑,民间有“小暑大暑,上蒸下煮”之说。中国多地自小暑起进入雷暴最多的时节。");
|
|
|
+ solarDigestMap.put("大暑", "一年中最热的时期,高温多雨。");
|
|
|
+ solarDigestMap.put("立秋", "气温开始逐渐降低,昼夜温差增大。");
|
|
|
+ solarDigestMap.put("处暑", "炎热逐渐退去,降水减少。");
|
|
|
+ solarDigestMap.put("白露", "昼夜温差增大,早晨有露水。");
|
|
|
+ solarDigestMap.put("秋分", "气候特点: 昼夜等长,气温适中。");
|
|
|
+ solarDigestMap.put("寒露", "气温逐渐降低,开始有霜冻。");
|
|
|
+ solarDigestMap.put("霜降", "气温骤降,有霜出现。");
|
|
|
+ solarDigestMap.put("立冬", "气温显著降低,进入冬季。");
|
|
|
+ solarDigestMap.put("小雪", "气温进一步降低,开始降雪。");
|
|
|
+ solarDigestMap.put("大雪", "气温持续降低,大面积降雪。");
|
|
|
+ solarDigestMap.put("冬至", "昼最短,夜最长,气温最低。");
|
|
|
+
|
|
|
try {
|
|
|
- List<FmsSolar> fmsSolarList = fmsSolarMapper.selectFmsSolarList(null);
|
|
|
- CalendarWrapper calendarWrapper = CalendarUtil.generateCalendarWithLunar(2025);
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
+ int year = currentDate.getYear();
|
|
|
+
|
|
|
+ FmsSolar selectFmsSolar = new FmsSolar();
|
|
|
+ selectFmsSolar.setTid(null);
|
|
|
+ selectFmsSolar.setYear(String.valueOf(year));
|
|
|
+
|
|
|
+ List<FmsSolar> fmsSolarList = selectFmsSolarList(selectFmsSolar);
|
|
|
+
|
|
|
+ Map<String, FmsSolar> solarMap = new HashMap<>();
|
|
|
+ for(FmsSolar fmsSolar : fmsSolarList){
|
|
|
+ String solarName = fmsSolar.getSolarName();
|
|
|
+ String startDate = fmsSolar.getSolarStartdate();
|
|
|
+ String key = solarName + startDate;
|
|
|
+ solarMap.put(key, fmsSolar);
|
|
|
+ }
|
|
|
+
|
|
|
+ CalendarWrapper calendarWrapper = CalendarUtil.generateCalendarWithLunar(year);
|
|
|
List<DayWrapper> list = calendarWrapper.getDayList();
|
|
|
- LinkedHashMap<String,FmsSolar> lunarMap = fmsSolarList.stream().collect(Collectors.toMap(FmsSolar::getSolarName,item->item,(a,b)->a,LinkedHashMap::new));
|
|
|
+ List<FmsSolar> insertList = new ArrayList<>();
|
|
|
for(DayWrapper dayWrapper : list){
|
|
|
LunarDate lunarDate = dayWrapper.getLunarDate();
|
|
|
- if(StringUtil.isNotEmpty(lunarDate.getSolarTerm())){
|
|
|
- FmsSolar fmsSolar = lunarMap.get(lunarDate.getSolarTerm());
|
|
|
- if(null != fmsSolar){
|
|
|
- fmsSolar.setSolarStartdate(dayWrapper.getDateStr());
|
|
|
- }
|
|
|
+ String solarName = lunarDate.getSolarTerm();
|
|
|
+ if(StringUtil.isEmpty(solarName)){
|
|
|
+ continue;
|
|
|
}
|
|
|
+ String startDate = lunarDate.getLocalDate().toString();
|
|
|
+ String key = solarName + startDate;
|
|
|
+ if(!solarMap.containsKey(key)){
|
|
|
+ FmsSolar fmsSolar = new FmsSolar();
|
|
|
+ fmsSolar.setSolarId(fmsSolar.getId());
|
|
|
+ fmsSolar.setTid(null);
|
|
|
+ fmsSolar.setYear(String.valueOf(year));
|
|
|
+ fmsSolar.setSolarName(solarName);
|
|
|
+ fmsSolar.setSolarStartdate(startDate);
|
|
|
+ fmsSolar.setSolarDigest(solarDigestMap.get(solarName));
|
|
|
+
|
|
|
+ insertList.add(fmsSolar);
|
|
|
+ log.info("更新节气时令:{} {}", lunarDate.getSolarTerm(), lunarDate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!insertList.isEmpty()){
|
|
|
+ return insertFmsSolarBatch(insertList);
|
|
|
}
|
|
|
- return fmsSolarMapper.updateFmsSolarByBatch(fmsSolarList);
|
|
|
}catch (Exception e){
|
|
|
log.error("更新失败",e);
|
|
|
return 0;
|
|
|
}
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
@Override
|