From cb8403b20ce428b279cad706dc34d3452282a170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98=E2=80=98?= Date: Fri, 24 Feb 2023 21:54:30 +0800 Subject: [PATCH] =?UTF-8?q?feature-1.0-img:=20=E6=96=B0=E5=A2=9E=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E7=AB=AF=E5=B9=BF=E5=91=8A=E6=95=B0=E6=8D=AE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/TiktokConstant.java | 7 +- .../com/bnyer/system/config/WxConfig.java | 32 +++++++ .../system/controller/CommonController.java | 4 + .../system/domain/vo/WechatAdIncomeVo.java | 26 +++++ .../bnyer/system/domain/vo/WechatTokenVo.java | 26 +++++ .../bnyer/system/service/IWechatService.java | 21 ++++ .../service/impl/WechatServiceImpl.java | 95 +++++++++++++++++++ 7 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 bnyer-services/bnyer-system/src/main/java/com/bnyer/system/config/WxConfig.java create mode 100644 bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatAdIncomeVo.java create mode 100644 bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatTokenVo.java create mode 100644 bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/IWechatService.java create mode 100644 bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/impl/WechatServiceImpl.java diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TiktokConstant.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TiktokConstant.java index b088e3d..9ee384c 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TiktokConstant.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/constant/TiktokConstant.java @@ -52,7 +52,7 @@ public class TiktokConstant { public static final Integer CREATOR_AMT_NOT_ENOUGH = 105007; /** - * 微信获取session调用失败 + * 微信获取授权调用失败 */ public static final Integer WECHAT_AUTH_ERROR = 105008; @@ -80,4 +80,9 @@ public class TiktokConstant { * 调用抖音获取广告收入信息失败 */ public static final Integer TIKTOK_INCOME_ERROR = 105013; + + /** + * 调用微信获取广告收入信息失败 + */ + public static final Integer WECHAT_INCOME_ERROR = 105014; } diff --git a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/config/WxConfig.java b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/config/WxConfig.java new file mode 100644 index 0000000..ee91fde --- /dev/null +++ b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/config/WxConfig.java @@ -0,0 +1,32 @@ +package com.bnyer.system.config; + +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 微信配置类 + * @author chengkun + * @date 2022/4/21 17:43 + */ +@Configuration +@ConfigurationProperties(prefix = "bnyer.system.wechat") +@Getter +@RefreshScope +public class WxConfig { + + @Value("${bnyer.system.wechat.appId}") + private String appId; + + @Value("${bnyer.system.wechat.secret}") + private String secret; + + @Value("${bnyer.system.wechat.adIncomeUrl}") + private String adIncomeUrl; + + @Value("${bnyer.system.wechat.tokenUrl}") + private String tokenUrl; + +} diff --git a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/controller/CommonController.java b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/controller/CommonController.java index 4d78ed5..7686d49 100644 --- a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/controller/CommonController.java +++ b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/controller/CommonController.java @@ -10,6 +10,7 @@ import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.common.core.web.page.TableDataInfo; import com.bnyer.system.service.IBannerService; import com.bnyer.system.service.ITiktokService; +import com.bnyer.system.service.IWechatService; import com.github.pagehelper.PageHelper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,6 +31,9 @@ public class CommonController extends BaseController { @Autowired private ITiktokService tiktokService; + @Autowired + private IWechatService iWechatService; + //@RequiresPermissions("system:config:list") @ApiOperation(value="获取抖音广告首付详情") @GetMapping(value = "/tiktokAdIncome") diff --git a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatAdIncomeVo.java b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatAdIncomeVo.java new file mode 100644 index 0000000..cda1e1c --- /dev/null +++ b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatAdIncomeVo.java @@ -0,0 +1,26 @@ +package com.bnyer.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + + +@Getter +@Setter +@ApiModel("微信获取广告收益响应类") +public class WechatAdIncomeVo implements Serializable { + + @ApiModelProperty(value="收入金额(单位分)") + private Integer income; + + + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value="收入日期") + private String date; + + private static final long serialVersionUID = 1L; +} diff --git a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatTokenVo.java b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatTokenVo.java new file mode 100644 index 0000000..98a06d6 --- /dev/null +++ b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/domain/vo/WechatTokenVo.java @@ -0,0 +1,26 @@ +package com.bnyer.system.domain.vo; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + + +@Getter +@Setter +@ApiModel("微信Token响应类") +public class WechatTokenVo implements Serializable { + + @ApiModelProperty(value="token") + @JSONField(name = "access_token") + private String accessToken; + + @JSONField(name = "expires_in") + @ApiModelProperty(value="token有效时间") + private Integer expiresIn; + + private static final long serialVersionUID = 1L; +} diff --git a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/IWechatService.java b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/IWechatService.java new file mode 100644 index 0000000..cc4a96e --- /dev/null +++ b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/IWechatService.java @@ -0,0 +1,21 @@ +package com.bnyer.system.service; + +import com.bnyer.system.domain.vo.TiktokAdIncomeVo; +import com.bnyer.system.domain.vo.TiktokTokenVo; +import com.bnyer.system.domain.vo.WechatAdIncomeVo; +import com.bnyer.system.domain.vo.WechatTokenVo; + +public interface IWechatService { + + /** + * 获取微信token + * @return - + */ + WechatTokenVo getWechatToken(); + + /** + * 查询微信广告收入 + * @return - + */ + WechatAdIncomeVo getWechatAdIncome(); +} diff --git a/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/impl/WechatServiceImpl.java b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/impl/WechatServiceImpl.java new file mode 100644 index 0000000..c56eee0 --- /dev/null +++ b/bnyer-services/bnyer-system/src/main/java/com/bnyer/system/service/impl/WechatServiceImpl.java @@ -0,0 +1,95 @@ +package com.bnyer.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.bnyer.common.core.constant.TiktokConstant; +import com.bnyer.common.core.exception.ServiceException; +import com.bnyer.system.config.TiktokConfig; +import com.bnyer.system.config.WxConfig; +import com.bnyer.system.domain.vo.TiktokAdIncomeVo; +import com.bnyer.system.domain.vo.TiktokTokenVo; +import com.bnyer.system.domain.vo.WechatAdIncomeVo; +import com.bnyer.system.domain.vo.WechatTokenVo; +import com.bnyer.system.service.ITiktokService; +import com.bnyer.system.service.IWechatService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +@Slf4j +public class WechatServiceImpl implements IWechatService { + + @Resource + private WxConfig wxConfig; + + @Autowired + private RestTemplate restTemplate; + + + @Override + public WechatTokenVo getWechatToken() { + String url = wxConfig.getTokenUrl()+"?grant_type=client_credential&appid="+wxConfig.getAppId()+"&secret="+wxConfig.getSecret(); + JSONObject tokenInfo = restTemplate.getForEntity(url, JSONObject.class).getBody(); + if (tokenInfo != null) { + if(!tokenInfo.getString("err_no").equals(TiktokConstant.SUCCESS)){ + log.error("微信获取token接口调用失败,错误状态码为:【{}】,错误信息为:【{}】",tokenInfo.getString("err_no"),tokenInfo.getString("err_tips")); + throw new ServiceException("微信获取token接口调用失败!",TiktokConstant.WECHAT_AUTH_ERROR); + } + }else{ + log.error("微信获取token接口调用失败,错误信息为:【查无数据】"); + throw new ServiceException("微信获取token接口调用失败!",TiktokConstant.WECHAT_AUTH_ERROR); + } + //调用成功,组装返回数据 + JSONObject data = tokenInfo.getJSONObject("data"); + if(data != null){ + WechatTokenVo result = new WechatTokenVo(); + result.setAccessToken(data.getString("access_token")); + result.setExpiresIn(Integer.parseInt(data.getString("expires_in"))); + return result; + }else{ + return null; + } + } + + @Override + public WechatAdIncomeVo getWechatAdIncome() { + Date yesterday = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String date = df.format(yesterday); + String url = wxConfig.getAdIncomeUrl() + "?action=publisher_adpos_general&"+getWechatToken().getAccessToken()+"&page=1&page_size=1&start_date="+date+"&end_date="+date; + JSONObject resultInfo = restTemplate.getForObject(url,JSONObject.class); + if(resultInfo != null){ + if(!resultInfo.getString("err_no").equals(TiktokConstant.SUCCESS)){ + log.error("抖音获取广告收入接口调用失败,错误状态码为:【{}】,错误信息为:【{}】",resultInfo.getString("err_no"),resultInfo.getString("err_msg")); + throw new ServiceException("抖音获取广告收入接口调用失败!",TiktokConstant.TIKTOK_INCOME_ERROR); + } + }else{ + log.error("抖音获取广告收入接口调用失败,错误信息为:【查无数据】"); + throw new ServiceException("抖音获取广告收入接口调用失败!",TiktokConstant.TIKTOK_INCOME_ERROR); + } + //调用成功,组装返回数据 + JSONObject data = resultInfo.getJSONObject("data"); + if(data != null){ + JSONArray incomeList = data.getJSONArray("income_list"); + if(incomeList.size() > 0){ + WechatAdIncomeVo result = new WechatAdIncomeVo(); + result.setIncome(Integer.parseInt(incomeList.getJSONObject(0).getString("income"))); + result.setDate(incomeList.getJSONObject(0).getString("date")); + return result; + } + } + return null; + } +}