package com.zhao.wechat.service;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSON; import com.zhao.wechat.config.WechatConfig;
import com.zhao.wechat.config.WechatTemplate; import com.zhao.wechat.config.WechatTemplateList; import com.zhao.wechat.domain.*; import com.zhao.wechat.remote.BaiduWeatherRemoteClient; import com.zhao.wechat.remote.TianDataRemoteClient; import com.zhao.wechat.remote.param.BaiduWeatherParam; import com.zhao.wechat.remote.param.TianXinParam; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils;
import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Objects;
@Slf4j @Service public class PushDailyWechatImpl implements PushDailyWechat{ @Autowired private UserInfoService userInfoService; @Autowired private BaiduWeatherRemoteClient baiduWeatherRemoteClient; @Autowired private TianDataRemoteClient tianDataRemoteClient; @Autowired private WechatConfig wechatConfig; @Autowired private WechatTemplateList wechatTemplateList;
@Value("${baidu.ak}") private String ak;
@Value("${tianxin.key}") private String key;
@Override public void pushWechat() throws WxErrorException { List<UserInfo> userInfoList = userInfoService.listUserInfo(); if (!CollectionUtils.isEmpty(userInfoList)){ for (UserInfo userInfo : userInfoList) { for (WechatTemplate template : wechatTemplateList.getTemplatelist()) { if (userInfo.getType().equals(template.getType())){ this.wechatData(userInfo.getWechatId(), template.getTemplateId(),userInfo); } } } } }
private void wechatData(String wechatId,String templateId,UserInfo userInfo) throws WxErrorException { WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage(); wxStorage.setAppId(wechatConfig.getAppId()); wxStorage.setSecret(wechatConfig.getAppSecret()); WxMpService wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(wxStorage);
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() .toUser(wechatId) .templateId(templateId) .build(); BaiduWeatherParam baiduWeatherParam = BaiduWeatherParam.builder() .district_id(userInfo.getDistrictId()) .data_type("all") .ak(this.ak) .build(); String queryWeather = baiduWeatherRemoteClient.queryWeather(baiduWeatherParam); log.info("查询的百度天气信息为:{}",queryWeather); BaiduNowWeather baiduNowWeather = ApiResponse.parseBaiduNowData(queryWeather, BaiduNowWeather.class); List<BaiduForecastsWeather> baiduForecastsWeatherList = ApiResponse.parseBaiduForecastsData(queryWeather, BaiduForecastsWeather.class); log.info("baiduNowWeather:{},baiduForecastsWeather:{}",baiduNowWeather,baiduForecastsWeatherList); TianXinParam tianXinParam = TianXinParam.builder().key(this.key).build(); String queryRainbow = tianDataRemoteClient.queryRainbow(tianXinParam); List<TianRainbow> rainbowList = ApiResponse.parseTianData(queryRainbow, TianRainbow.class);
String queryEnsentence = tianDataRemoteClient.queryEnsentence(tianXinParam); List<TianEnsentence> tianEnsentenceList = ApiResponse.parseTianData(queryEnsentence, TianEnsentence.class);
templateMessage.addData(new WxMpTemplateData("now", this.pareDateNow(baiduForecastsWeatherList.get(0)),"#FFB6C1")); templateMessage.addData(new WxMpTemplateData("city",userInfo.getCity(),"#B95EA6")); templateMessage.addData(new WxMpTemplateData("text",baiduNowWeather.getText(),"#173177")); templateMessage.addData(new WxMpTemplateData("high",baiduForecastsWeatherList.get(0).getHigh(),"#87cefa")); templateMessage.addData(new WxMpTemplateData("low",baiduForecastsWeatherList.get(0).getLow(),"#FF6347")); templateMessage.addData(new WxMpTemplateData("scq_day",this.calScqDate(userInfo),"#FF1493")); templateMessage.addData(new WxMpTemplateData("bir_day",this.calBirData(userInfo),"#FF00FF" )); templateMessage.addData(new WxMpTemplateData("daily_english_cn",rainbowList.get(0).getContent(),"#800080")); templateMessage.addData(new WxMpTemplateData("daily_english_en",tianEnsentenceList.get(0).getEn(),"#FFA500"));
log.info("发送的消息为:{}", JSON.toJSONString(templateMessage)); wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); }
private String calScqDate(UserInfo userInfo){ if (Objects.nonNull(userInfo)){ Date scqTime = userInfo.getScqTime(); long between = DateUtil.between(scqTime, DateUtil.date(), DateUnit.DAY); return String.valueOf(between); } return ""; }
private String calBirData(UserInfo userInfo){ if (Objects.nonNull(userInfo)){ Date birTime = userInfo.getBirTime(); Calendar today = Calendar.getInstance(); Calendar birthDay = Calendar.getInstance(); birthDay.setTime(birTime); int bir; birthDay.set(Calendar.YEAR,today.get(Calendar.YEAR)); if (birthDay.get(Calendar.DAY_OF_YEAR) < today.get(Calendar.DAY_OF_YEAR)){ bir = today.getActualMaximum(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR); bir += birthDay.get(Calendar.DAY_OF_YEAR); } else { bir = birthDay.get(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR); } return String.valueOf(bir); } return ""; }
private String pareDateNow(BaiduForecastsWeather baiduForecastsWeather){ String now = DateUtil.format(DateUtil.date(), DatePattern.CHINESE_DATE_PATTERN); String week = baiduForecastsWeather.getWeek(); return now+" "+week; } }
|