Просмотр исходного кода

微信公众号,小程序获取模板列表功能

master
zouhantao 1 неделю назад
Родитель
Сommit
5a07692623
31 измененных файлов: 637 добавлений и 395 удалений
  1. 2
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WeiXinServiceCmd.java
  2. 42
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniMessageTemplateListDto.java
  3. 54
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniMessageTemplateListRequest.java
  4. 15
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniMessageTemplateListResponse.java
  5. 2
    100
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniSendMessageRequest.java
  6. 34
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpMessageTemplateListDto.java
  7. 54
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpMessageTemplateListRequest.java
  8. 22
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpMessageTemplateListResponse.java
  9. 6
    100
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpSendMessageRequest.java
  10. 3
    2
      gly-base-core/src/main/java/cn/com/taiji/core/repo/jpa/msgw/MsgwSendDetailsRepo.java
  11. 8
    2
      gly-base-core/src/main/java/cn/com/taiji/core/repo/request/msgw/MsgwSendDetailsPageRequest.java
  12. 1
    0
      zhywpt-app-msgw/build.gradle
  13. 59
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/api/MessageSharedController.java
  14. 42
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/api/WxMiniPushController.java
  15. 43
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/api/WxMpPushController.java
  16. 1
    1
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/config/AppConfig.java
  17. 17
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageSendDetailsRequestDto.java
  18. 12
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageSendDetailsResponseDto.java
  19. 21
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/manager/weixin/WxManager.java
  20. 38
    0
      zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/manager/weixin/WxManagerImpl.java
  21. 2
    2
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/clientConfig/WxManager.java
  22. 49
    76
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/clientConfig/WxManagerImpl.java
  23. 4
    0
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/WinXinServiceHandler.java
  24. 2
    0
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/wx/WxMessageManager.java
  25. 87
    11
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/wx/WxMessageManagerImpl.java
  26. 0
    38
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMiniMessageTemplateListRequest.java
  27. 0
    12
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMiniMessageTemplateListResponse.java
  28. 0
    36
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMpMessageTemplateListRequest.java
  29. 0
    12
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMpMessageTemplateListResponse.java
  30. 7
    2
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/tools/WxRequestAccessTokenUtil.java
  31. 10
    1
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/QtkPushController.java

+ 2
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WeiXinServiceCmd.java Просмотреть файл

@@ -16,8 +16,10 @@ public enum WeiXinServiceCmd implements SignServiceCommand {
REFUNDQUERYV2("微信V2退款查询","refundV2Query", AtsQueryRefundV2Request.class),
VEHICLEUSERSTATE("微信车主状态查询及获取签约参数","vehicleUserState", AtsVehicleUserStateRequest.class),
MPSENDMESSAGE("微信公众号发送订阅信息","mpSendMessage", WxMpSendMessageRequest.class),
MPMESSAGElIST("微信公众号获取模板列表","mpMessageList", WxMpMessageTemplateListRequest.class),
MPISSUBSCRIBED("微信公众号是否订阅","isSubscribed", WxMpIsSubscribedRequest.class),
MINISENDMESSAGE("微信小程序发送信息","miniSendMessage", WxMiniSendMessageRequest.class),
MINIMESSAGElIST("微信小程序获取模板列表","miniMessageList", WxMiniMessageTemplateListRequest.class),
;



+ 42
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniMessageTemplateListDto.java Просмотреть файл

@@ -0,0 +1,42 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Getter;
import lombok.Setter;

/**
* 微信小程序-消息模板dto
*
*/
@Getter
@Setter
public class WxMiniMessageTemplateListDto {
// 模板ID
@JsonProperty("priTmplId")
private String priTmplId;

// 模板标题
@JsonProperty("title")
private String title;

// 模板内容(含占位符)
@JsonProperty("content")
private String content;

// 示例内容
@JsonProperty("example")
private String example;

// 模板类型
@JsonProperty("type")
private Integer type;

// 枚举值列表(根据实际情况调整类型)
@JsonProperty("keywordEnumValueList")
private List<Object> keywordEnumValueList;

}


+ 54
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniMessageTemplateListRequest.java Просмотреть файл

@@ -0,0 +1,54 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;

import java.util.ArrayList;

import com.google.common.collect.Lists;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest;
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import cn.hutool.core.collection.CollectionUtil;
import lombok.Getter;
import lombok.Setter;

/**
* 微信小程序-获取消息模板列表
*
* @Author weicailin
* @Date 2023/5/18 18:15
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class WxMiniMessageTemplateListRequest extends AbstractAtsRequest<WxMiniMessageTemplateListResponse> {

public WxMiniMessageTemplateListRequest() {
super(WeiXinServiceCmd.MINIMESSAGElIST);
}
private String clientId;

public WxMiniMessageTemplateListRequest valid() throws ServiceHandleException {

final ArrayList<String> failParamInfo = Lists.newArrayList();

if (clientId == null || clientId.trim().isEmpty())
failParamInfo.add("消息客户端id");

//检验输错的数据参数
if (!CollectionUtil.isEmpty(failParamInfo)) {
throw GlyServiceError.RESPONSE_ERROR.toHandleException(String.join("、", failParamInfo) + ",不能为空");
}

return this;
}

public String getClientId() {
return clientId;
}

@Override
protected void validate(ErrorMsgBuilder builder) {

}
}

+ 15
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniMessageTemplateListResponse.java Просмотреть файл

@@ -0,0 +1,15 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;


import java.util.List;

import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class WxMiniMessageTemplateListResponse extends AbstractAtsResponse {

private List<WxMiniMessageTemplateListDto> list;

}

+ 2
- 100
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMiniSendMessageRequest.java Просмотреть файл

@@ -36,7 +36,7 @@ public class WxMiniSendMessageRequest extends AbstractAtsRequest<WxMiniSendMessa
//接收者(用户)的 openid
// private String openid;

private List<String> wxOpenidList;
private String wxOpenId;
//模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object
// private String dataJson;
//模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object
@@ -70,7 +70,7 @@ public class WxMiniSendMessageRequest extends AbstractAtsRequest<WxMiniSendMessa
// if (openid == null || openid.trim().isEmpty())
// failParamInfo.add("用户openid");

if (CollectionUtils.isEmpty(wxOpenidList))
if (StringUtils.hasText(wxOpenId))
failParamInfo.add("微信用户openid列表");


@@ -106,104 +106,6 @@ public class WxMiniSendMessageRequest extends AbstractAtsRequest<WxMiniSendMessa

return this;
}

public String getClientId() {
return clientId;
}

public String getTemplateId() {
return templateId;
}

public String getPage() {
return page;
}

// public String getOpenid() {
// return openid;
// }

public List<String> getWxOpenidList() {
return wxOpenidList;
}


// public String getDataJson() {
// return dataJson;
// }

public Object getDataObject() {
return dataObject;
}

public String getMiniProgramState() {
return miniProgramState;
}

public String getLang() {
return lang;
}

public LocalDateTime getSendTime() {
return sendTime;
}

public String getTitle() {
return title;
}

public void setClientId(String clientId) {
this.clientId = clientId;
}

public void setTemplateId(String templateId) {
this.templateId = templateId;
}

public void setPage(String page) {
this.page = page;
}

public void setWxOpenidList(List<String> wxOpenidList) {
this.wxOpenidList = wxOpenidList;
}

public void setDataObject(Object dataObject) {
this.dataObject = dataObject;
}

public void setMiniProgramState(String miniProgramState) {
this.miniProgramState = miniProgramState;
}

public void setLang(String lang) {
this.lang = lang;
}

public void setSendTime(LocalDateTime sendTime) {
this.sendTime = sendTime;
}

public void setTitle(String title) {
this.title = title;
}

public String getTemplateName() {
return templateName;
}

public void setTemplateName(String templateName) {
this.templateName = templateName;
}

public String getTemplateExample() {
return templateExample;
}

public void setTemplateExample(String templateExample) {
this.templateExample = templateExample;
}

@Override
protected void validate(ErrorMsgBuilder builder) {


+ 34
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpMessageTemplateListDto.java Просмотреть файл

@@ -0,0 +1,34 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Getter;
import lombok.Setter;

/**
* 微信小程序-消息模板dto
*
*/
@Getter
@Setter
public class WxMpMessageTemplateListDto {
@JsonProperty("template_id")
private String templateId;

@JsonProperty("title")
private String title;

@JsonProperty("primary_industry")
private String primaryIndustry;

@JsonProperty("deputy_industry")
private String deputyIndustry;

@JsonProperty("content")
private String content;

@JsonProperty("example")
private String example;

}


+ 54
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpMessageTemplateListRequest.java Просмотреть файл

@@ -0,0 +1,54 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;

import java.util.ArrayList;

import com.google.common.collect.Lists;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest;
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import cn.hutool.core.collection.CollectionUtil;
import lombok.Getter;
import lombok.Setter;

/**
* 微信公众号-获取消息模板列表
*
* @Author weicailin
* @Date 2023/5/18 18:15
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class WxMpMessageTemplateListRequest extends AbstractAtsRequest<WxMpMessageTemplateListResponse> {

public WxMpMessageTemplateListRequest() {
super(WeiXinServiceCmd.MPMESSAGElIST);
}
private String clientId;

public WxMpMessageTemplateListRequest valid() throws ServiceHandleException {

final ArrayList<String> failParamInfo = Lists.newArrayList();

if (clientId == null || clientId.trim().isEmpty())
failParamInfo.add("消息客户端id");

//检验输错的数据参数
if (!CollectionUtil.isEmpty(failParamInfo)) {
throw GlyServiceError.RESPONSE_ERROR.toHandleException(String.join("、", failParamInfo) + ",不能为空");
}

return this;
}

public String getClientId() {
return clientId;
}

@Override
protected void validate(ErrorMsgBuilder builder) {

}
}

+ 22
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpMessageTemplateListResponse.java Просмотреть файл

@@ -0,0 +1,22 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;


import java.util.List;

import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse;
import lombok.Getter;
import lombok.Setter;

/**
* 微信公众号-订阅消息发送
* @Author weicailin
* @Date 2023/5/18 18:15
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class WxMpMessageTemplateListResponse extends AbstractAtsResponse {

private List<WxMpMessageTemplateListDto> list;

}

+ 6
- 100
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WxMpSendMessageRequest.java Просмотреть файл

@@ -8,7 +8,8 @@ import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest;
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import org.springframework.util.CollectionUtils;
import lombok.Getter;
import lombok.Setter;
import org.springframework.util.StringUtils;

import com.google.common.collect.Lists;
@@ -20,7 +21,8 @@ import cn.hutool.core.collection.CollectionUtil;
/**
* 微信公众号-订阅消息发送
*/

@Getter
@Setter
public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageResponse> {

public WxMpSendMessageRequest() {
@@ -41,7 +43,7 @@ public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageRe
/***
* 接收者openid
*/
private List<String> mpOpenidList;
private String mpOpenId;

/***
* 模板ID
@@ -90,7 +92,7 @@ public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageRe
if (data == null)
failParamInfo.add("消息内容");

if (CollectionUtils.isEmpty(mpOpenidList))
if (!StringUtils.hasText(mpOpenId))
failParamInfo.add("公众号用户openid列表");

if (!StringUtils.hasText(templateName))
@@ -111,102 +113,6 @@ public class WxMpSendMessageRequest extends AbstractAtsRequest<WxMpSendMessageRe
return this;
}

public String getClientId() {
return clientId;
}

public LocalDateTime getSendTime() {
return sendTime;
}

public String getTitle() {
return title;
}

public String getTemplateName() {
return templateName;
}

public String getTemplateExample() {
return templateExample;
}

public List<String> getMpOpenidList() {
return mpOpenidList;
}

public String getTemplateId() {
return templateId;
}

public Object getData() {
return data;
}

public String getUrl() {
return url;
}

public Object getMiniprogram() {
return miniprogram;
}

public String getPagePath() {
return pagePath;
}

public String getClientMsgId() {
return clientMsgId;
}

public void setClientId(String clientId) {
this.clientId = clientId;
}

public void setSendTime(LocalDateTime sendTime) {
this.sendTime = sendTime;
}

public void setTitle(String title) {
this.title = title;
}

public void setTemplateName(String templateName) {
this.templateName = templateName;
}

public void setTemplateExample(String templateExample) {
this.templateExample = templateExample;
}

public void setMpOpenidList(List<String> mpOpenidList) {
this.mpOpenidList = mpOpenidList;
}

public void setTemplateId(String templateId) {
this.templateId = templateId;
}

public void setData(Object data) {
this.data = data;
}

public void setUrl(String url) {
this.url = url;
}

public void setMiniprogram(Object miniprogram) {
this.miniprogram = miniprogram;
}

public void setPagePath(String pagePath) {
this.pagePath = pagePath;
}

public void setClientMsgId(String clientMsgId) {
this.clientMsgId = clientMsgId;
}

@Override
protected void validate(ErrorMsgBuilder builder) {


+ 3
- 2
gly-base-core/src/main/java/cn/com/taiji/core/repo/jpa/msgw/MsgwSendDetailsRepo.java Просмотреть файл

@@ -1,5 +1,6 @@
package cn.com.taiji.core.repo.jpa.msgw;

import java.time.LocalDateTime;
import java.util.List;

import cn.com.taiji.core.entity.dict.msgw.MessageType;
@@ -23,6 +24,6 @@ public interface MsgwSendDetailsRepo extends AbstractJpaRepo<MsgwSendDetails, St
"AND (:endDateTime IS NULL OR m.insertTime <= :endDateTime)")
long countStatistics(@Param("messageType") MessageType messageType,
@Param("sendResult") MessageResult sendResult,
@Param("startDateTime") String startDateTime,
@Param("endDateTime") String endDateTime);
@Param("startDateTime") LocalDateTime startDateTime,
@Param("endDateTime") LocalDateTime endDateTime);
}

+ 8
- 2
gly-base-core/src/main/java/cn/com/taiji/core/repo/request/msgw/MsgwSendDetailsPageRequest.java Просмотреть файл

@@ -2,6 +2,8 @@ package cn.com.taiji.core.repo.request.msgw;

import cn.com.taiji.common.pub.dao.HqlBuilder;
import cn.com.taiji.common.repo.request.jpa.JpaDateTimePageableDataRequest;
import cn.com.taiji.core.entity.dict.msgw.MessageResult;
import cn.com.taiji.core.entity.dict.msgw.MessageType;
import cn.com.taiji.core.entity.msgw.MsgwSendDetails;
import lombok.Getter;
import lombok.Setter;
@@ -10,7 +12,8 @@ import lombok.Setter;
@Setter
public class MsgwSendDetailsPageRequest extends JpaDateTimePageableDataRequest<MsgwSendDetails>{


private MessageType messageType;
private MessageResult sendResult;


public MsgwSendDetailsPageRequest() {
@@ -21,7 +24,10 @@ public class MsgwSendDetailsPageRequest extends JpaDateTimePageableDataRequest<M
@Override
public HqlBuilder toSelectHql(){
HqlBuilder hql = new HqlBuilder("from MsgwSendDetails where 1=1 ");

hql.append(" and messageType=:messageType", messageType);
hql.append(" and sendResult=:sendResult", sendResult);
hql.append(" and insertTime>=:startTime", startTime);
hql.append(" and insertTime<=:endTime", endTime);
return hql;
}


+ 1
- 0
zhywpt-app-msgw/build.gradle Просмотреть файл

@@ -10,6 +10,7 @@ dependencies {
implementation "${groupname}:comm-core:1.0.0-SNAPSHOT"
implementation "${groupname}:sample-protocol:1.0.0-SNAPSHOT"
implementation "${groupname}:ias-protocol:1.0.0-SNAPSHOT"
implementation "${groupname}:ats-protocol:1.0.0-SNAPSHOT"
implementation('cn.com.taiji.common:sso-client:2.3.10.7')
implementation "org.springframework.boot:spring-boot-starter-security"
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery"

+ 59
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/api/MessageSharedController.java Просмотреть файл

@@ -0,0 +1,59 @@
package cn.com.taiji.msgw.api;

import javax.validation.Valid;

import cn.com.taiji.common.model.dao.Pagination;
import cn.com.taiji.core.repo.request.msgw.MsgwSendDetailsPageRequest;
import cn.com.taiji.msgw.dto.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.web.ApiResponse;
import cn.com.taiji.msgw.manager.messageWaitSend.MessageWaitSendManager;
import cn.com.taiji.msgw.model.FormatException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;


@Api(tags = {"005.推送管理-公用"})
@RestController
@RequestMapping("/message")
public class MessageSharedController {
@Autowired
private MessageWaitSendManager messageWaitSendManager;

@ApiOperation(value = "分页查询")
@PostMapping(value = "/page")
public ApiResponse<Pagination> page(@Validated @RequestBody MsgwSendDetailsPageRequest request) throws ManagerException {
Pagination page = messageWaitSendManager.page(request);
return ApiResponse.of(page);
}

@ApiOperation(value = "明细")
@PostMapping(value = "/view")
public ApiResponse<MessageSendDetailsResponseDto> view(@RequestBody @Valid MessageSendDetailsRequestDto request) throws ManagerException {
MessageSendDetailsResponseDto response = messageWaitSendManager.view(request);
return ApiResponse.of(response);
}

@ApiOperation(value = "消息重发")
@PostMapping(value = "/retry")
public ApiResponse<MessageRetryResponseDto> retry(@RequestBody @Valid MessageRetryRequestDto request) throws ManagerException, FormatException {
MessageRetryResponseDto response = messageWaitSendManager.messageRetry(request);
return ApiResponse.of(response);
}

@ApiOperation(value = "消息统计")
@PostMapping(value = "/statistics")
public ApiResponse<MessageStatisticsResponseDto> statistics(@RequestBody @Valid MessageStatisticsRequestDto request) throws ManagerException {
MessageStatisticsResponseDto response = messageWaitSendManager.messageStatistics(request);
return ApiResponse.of(response);
}


}

+ 42
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/api/WxMiniPushController.java Просмотреть файл

@@ -0,0 +1,42 @@
package cn.com.taiji.msgw.api;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.web.ApiResponse;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListResponse;
import cn.com.taiji.msgw.manager.weixin.WxManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
* @Author ChenChao
* @Date 2024/10/7 0:15
* @Description
*/

@Api(tags = {"007.推送管理-微信小程序"})
@RestController
@RequestMapping("/wxMini/push")
public class WxMiniPushController {

@Autowired
private WxManager wxManager;

@ApiOperation(value = "微信小程序-消息模板列表")
@PostMapping(value = "/wxMiniMessageList")
public ApiResponse<WxMiniMessageTemplateListResponse> wxMiniMessageList(@RequestBody @Valid WxMiniMessageTemplateListRequest request) throws ManagerException {
WxMiniMessageTemplateListResponse response = wxManager.MiniMessageTemplateList(request);
return ApiResponse.of(response);
}



}

+ 43
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/api/WxMpPushController.java Просмотреть файл

@@ -0,0 +1,43 @@
package cn.com.taiji.msgw.api;

import javax.validation.Valid;

import cn.com.taiji.core.manager.tools.minio.MinioUtile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.web.ApiResponse;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListResponse;
import cn.com.taiji.msgw.manager.weixin.WxManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
* @Author ChenChao
* @Date 2024/10/7 0:15
* @Description
*/

@Api(tags = {"006.推送管理-微信公众号"})
@RestController
@RequestMapping("/wxMp/push")
public class WxMpPushController {

@Autowired
private WxManager wxManager;
@Autowired
private MinioUtile minioUtile;

@ApiOperation(value = "微信公众号-消息模板列表")
@PostMapping(value = "/wxMpMessageList")
public ApiResponse<WxMpMessageTemplateListResponse> wxMpMessageList(@RequestBody @Valid WxMpMessageTemplateListRequest request) throws ManagerException {
WxMpMessageTemplateListResponse response = wxManager.MpMessageTemplateList(request);
return ApiResponse.of(response);
}

}

+ 1
- 1
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/config/AppConfig.java Просмотреть файл

@@ -31,7 +31,7 @@ import cn.com.taiji.msgw.model.MyFinals;
basePackages = {"cn.com.taiji." + AppConfig.APP_NAME + ".repo.jpa", "cn.com.taiji.core.repo.jpa"},
repositoryFactoryBeanClass = MyJpaRespositoryFactoryBean.class)
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, proxyTargetClass = true)
@ComponentScan(value = "cn.com.taiji.core.manager.comm.client.feign")
@ComponentScan(value = {"cn.com.taiji.core.manager.comm.client.feign","cn.com.taiji.core.manager.tools.minio"})
public class AppConfig extends AbstractManager {
public static final String APP_NAME = "msgw";
@Autowired

+ 17
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageSendDetailsRequestDto.java Просмотреть файл

@@ -0,0 +1,17 @@
package cn.com.taiji.msgw.dto;

import javax.validation.constraints.NotBlank;

import cn.com.taiji.core.dto.AbstractStaffBizRequestDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class MessageSendDetailsRequestDto extends AbstractStaffBizRequestDTO {

@ApiModelProperty(value = "子表id",required = true)
@NotBlank(message = "id不能为空")
private String sendDetailsId;
}

+ 12
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageSendDetailsResponseDto.java Просмотреть файл

@@ -0,0 +1,12 @@
package cn.com.taiji.msgw.dto;


import cn.com.taiji.common.entity.BaseEntity;
import cn.com.taiji.core.entity.msgw.MsgwSendDetails;
import lombok.Setter;

@Setter
public class MessageSendDetailsResponseDto extends BaseEntity {

private MsgwSendDetails sendDetails;
}

+ 21
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/manager/weixin/WxManager.java Просмотреть файл

@@ -0,0 +1,21 @@
package cn.com.taiji.msgw.manager.weixin;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListResponse;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListResponse;

/**
* 微信开发工具(小程序、公众号)
* @Author weicailin
* @Date 2023/5/18 16:14
* @Email 13079168756@163.com
*/
public interface WxManager {

WxMpMessageTemplateListResponse MpMessageTemplateList(WxMpMessageTemplateListRequest request) throws ManagerException;

WxMiniMessageTemplateListResponse MiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ManagerException;

}

+ 38
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/manager/weixin/WxManagerImpl.java Просмотреть файл

@@ -0,0 +1,38 @@
package cn.com.taiji.msgw.manager.weixin;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniMessageTemplateListResponse;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpMessageTemplateListResponse;
import cn.com.taiji.core.repo.jpa.msgw.MsgwSendDetailsRepo;
import cn.com.taiji.msgw.manager.AbstractCommManager;

/**
* 微信开发工具(小程序、公众号)
*
* @Author weicailin
* @Date 2023/5/18 16:14
* @Email 13079168756@163.com
*/
@Service
public class WxManagerImpl extends AbstractCommManager implements WxManager {
@Autowired
private MsgwSendDetailsRepo sendDetailsRepo;

@Override
public WxMpMessageTemplateListResponse MpMessageTemplateList(WxMpMessageTemplateListRequest request) throws ManagerException {
WxMpMessageTemplateListResponse response = jsonPostRepeat(request);
return response;
}

@Override
public WxMiniMessageTemplateListResponse MiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ManagerException {
WxMiniMessageTemplateListResponse response = jsonPostRepeat(request);
return response;
}

}

+ 2
- 2
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/clientConfig/WxManager.java Просмотреть файл

@@ -11,9 +11,9 @@ import java.io.IOException;
*/
public interface WxManager {

WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException;
WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request) throws IOException, ServiceHandleException;

WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException;
WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request) throws IOException, ServiceHandleException;

WxMpIsSubscribedResponse serviceHandle(WxMpIsSubscribedRequest request) throws ServiceHandleException;


+ 49
- 76
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/clientConfig/WxManagerImpl.java Просмотреть файл

@@ -2,16 +2,8 @@ package cn.com.taiji.ats.manager.clientConfig;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.com.taiji.ats.model.wx.WxUserInfoModel;
import cn.com.taiji.ats.tools.HttpClientUtil;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import cn.hutool.json.JSONUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,13 +11,18 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;

import cn.com.taiji.ats.tools.WxRequestAccessTokenUtil;
import cn.com.taiji.ats.manager.tools.wx.WxRequestUrls;
import cn.com.taiji.ats.manager.tools.wx.WxSendRequestUtil;
import cn.com.taiji.ats.model.WxUserInfoVO;
import cn.com.taiji.ats.model.protocol.channel.wx.dto.WxMiniSendMessageDto;
import cn.com.taiji.ats.model.protocol.channel.wx.dto.WxMpSendMessageDto;
import cn.com.taiji.ats.model.wx.WxUserInfoModel;
import cn.com.taiji.ats.tools.HttpClientUtil;
import cn.com.taiji.ats.tools.WxRequestAccessTokenUtil;
import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import cn.hutool.json.JSONUtil;

/**
* 微信开发工具(小程序、公众号)
@@ -56,7 +53,7 @@ public class WxManagerImpl implements WxManager {

// @PushRecord(description = WX_MINI_SUB_MSG_DESC)
@Override
public WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException {
public WxMiniSendMessageResponse miniSendMessageV2(WxMiniSendMessageRequest request) throws IOException, ServiceHandleException {
//1、获取调用微信接口的accessToken凭证
String accessToken = wxRequestAccessTokenUtil.getStableAccessToken(miniAppid, miniSecret, false, MINI_ACCESS_STABLE_TOKEN_PREFIX);
//2、发送消息
@@ -69,46 +66,28 @@ public class WxManagerImpl implements WxManager {


logger.info("********** 微信小程序订阅消息发送 START **********");
int successCount = 0;
String errorReason = "部分微信小程序订阅消息发送失败!";
List<String> failTouserList = new ArrayList<>();

//1、设置url参数
String url = String.format(WxRequestUrls.MINI_SEND_MESSAGE_URL, accessToken);
String wxOpenId = request.getWxOpenId();
//2、dto设置值
for (String wxOpenid : request.getWxOpenidList()) {
WxMiniSendMessageDto wxMiniSendMessageDto = new WxMiniSendMessageDto(
request.getTemplateId(),
request.getPage(),
wxOpenid,
request.getDataObject(),
request.getMiniProgramState(),
request.getLang()
);

//3、发送微信小程序消息
try {
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMiniSendMessageDto);
successCount++;
} catch (Exception e) {
errorReason = e.getMessage();
logger.error(e.toString());
failTouserList.add(wxOpenid);

//消息发送失败告警
if (successCount != request.getWxOpenidList().size()) {
// MessageAlarmRequest alarmRequest = new MessageAlarmRequest(
// message.getId(),
// failTouserList,
// request.getWxOpenidList().size(),
// successCount,
// errorReason);
// pushMessageAlarmManager.messageAlarm(alarmRequest);
}
// throw new ManagerException("微信小程序订阅消息推送失败!");
throw GlyServiceError.RESPONSE_ERROR.toHandleException("微信小程序订阅消息推送失败!");
}
WxMiniSendMessageDto wxMiniSendMessageDto = new WxMiniSendMessageDto(
request.getTemplateId(),
request.getPage(),
wxOpenId,
request.getDataObject(),
request.getMiniProgramState(),
request.getLang()
);

//3、发送微信小程序消息
try {
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMiniSendMessageDto);
} catch (Exception e) {
logger.error(e.toString());
failTouserList.add(wxOpenId);
throw GlyServiceError.RESPONSE_ERROR.toHandleException("微信小程序订阅消息推送失败!");
}
logger.info("********** 微信小程序订阅消息发送 END **********");

@@ -119,7 +98,7 @@ public class WxManagerImpl implements WxManager {

// @PushRecord(description = WX_MP_TMP_MSG_DESC)
@Override
public WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request, String apiKey) throws IOException, ServiceHandleException {
public WxMpSendMessageResponse mpSendMessage(WxMpSendMessageRequest request) throws IOException, ServiceHandleException {
//1、获取调用微信接口的accessToken凭证
String accessToken = wxRequestAccessTokenUtil.getStableAccessToken(mpAppid, mpSecret, false, MP_ACCESS_STABLE_TOKEN_PREFIX);
//2、发送消息
@@ -130,39 +109,34 @@ public class WxManagerImpl implements WxManager {

private void sendWxMpMessage(WxMpSendMessageRequest request, String accessToken) {
logger.info("********** 微信公众号模板消息发送 START **********");
int successCount = 0;
String errorReason = "部分微信公众号模板消息发送失败!";
List<String> failTouserList = new ArrayList<>();

//1、设置url参数
String url = String.format(WxRequestUrls.MP_SEND_MESSAGE_URL, accessToken);

//2、dto设置值
for (String mpOpenid : request.getMpOpenidList()) {
String appid = null;
if (request.getMiniprogram() != null) {
appid = miniAppid;
}
WxMpSendMessageDto wxMpSendMessageDto = new WxMpSendMessageDto(
mpOpenid,
request.getTemplateId(),
request.getData(),
request.getUrl(),
request.getMiniprogram(),
appid,
request.getPagePath(),
request.getClientMsgId()
);

//3、发送微信公众号消息
try {
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMpSendMessageDto);
successCount++;
} catch (Exception e) {
errorReason = e.getMessage();
logger.error(e.toString());
failTouserList.add(mpOpenid);
}
String appid = null;
String mpOpenid = request.getMpOpenId();
if (request.getMiniprogram() != null) {
appid = miniAppid;
}
WxMpSendMessageDto wxMpSendMessageDto = new WxMpSendMessageDto(
mpOpenid,
request.getTemplateId(),
request.getData(),
request.getUrl(),
request.getMiniprogram(),
appid,
request.getPagePath(),
request.getClientMsgId()
);

//3、发送微信公众号消息
try {
wxSendRequestUtil.sendRequest(HttpMethod.POST, url, wxMpSendMessageDto);
} catch (Exception e) {
logger.error(e.toString());
failTouserList.add(mpOpenid);
}
logger.info("********** 微信公众号模板消息发送 END **********");
}
@@ -176,7 +150,7 @@ public class WxManagerImpl implements WxManager {
accessToken = wxRequestAccessTokenUtil.getStableAccessToken(mpAppid, mpSecret,
false, MP_ACCESS_STABLE_TOKEN_PREFIX);

} catch (ManagerException | IOException e) {
} catch (ManagerException e) {
throw GlyServiceError.RESPONSE_ERROR.toHandleException(e.getMessage());
}
//2、获取微信用户信息(包含订阅状态)
@@ -197,7 +171,6 @@ public class WxManagerImpl implements WxManager {
String url = String.format(WxRequestUrls.MP_GET_USERINFO_URL, accessToken, request.getOpenId());
//3、微信公众号-获取微信用户信息
String resJson = HttpClientUtil.sendGet(url);

return JSONUtil.parseObj(resJson).toBean(WxUserInfoModel.class);
}


+ 4
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/WinXinServiceHandler.java Просмотреть файл

@@ -75,8 +75,12 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<WeiXinServic
return wxMessageManager.isSubscribed((WxMpIsSubscribedRequest) request);
case MPSENDMESSAGE:
return wxMessageManager.wxMpSendMessageHandler((WxMpSendMessageRequest) request);
case MPMESSAGElIST:
return wxMessageManager.wxMpMessageTemplateList((WxMpMessageTemplateListRequest) request);
case MINISENDMESSAGE:
return wxMessageManager.wxMiniSendMessageHandler((WxMiniSendMessageRequest) request);
case MINIMESSAGElIST:
return wxMessageManager.wxMiniMessageTemplateList((WxMiniMessageTemplateListRequest) request);
case VEHICLEUSERSTATE:
return vehicleUserStateManager.serviceHandle((AtsVehicleUserStateRequest) request);
default:

+ 2
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/wx/WxMessageManager.java Просмотреть файл

@@ -12,7 +12,9 @@ import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*;

public interface WxMessageManager {

WxMiniMessageTemplateListResponse wxMiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ServiceHandleException;
WxMiniSendMessageResponse wxMiniSendMessageHandler(WxMiniSendMessageRequest request) throws ServiceHandleException;
WxMpMessageTemplateListResponse wxMpMessageTemplateList(WxMpMessageTemplateListRequest request) throws ServiceHandleException;
WxMpSendMessageResponse wxMpSendMessageHandler(WxMpSendMessageRequest request) throws ServiceHandleException;
WxMpIsSubscribedResponse isSubscribed(WxMpIsSubscribedRequest request) throws ServiceHandleException;
}

+ 87
- 11
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/wx/WxMessageManagerImpl.java Просмотреть файл

@@ -1,12 +1,22 @@
package cn.com.taiji.ats.manager.handler.wx;

import java.io.IOException;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import cn.com.taiji.ats.api.TokenHelper;
import cn.com.taiji.ats.manager.clientConfig.WxManager;
import cn.com.taiji.ats.manager.tools.wx.WxRequestUrls;
import cn.com.taiji.ats.tools.HttpClientUtil;
import cn.com.taiji.ats.tools.WxRequestAccessTokenUtil;
import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
@@ -22,16 +32,53 @@ import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
@Service
public class WxMessageManagerImpl implements WxMessageManager {

@Value("${wx.mini.appid}")
private String miniAppid;
@Value("${wx.mini.secret}")
private String miniSecret;
@Value("${wx.mp.appid}")
private String mpAppid;
@Value("${wx.mp.secret}")
private String mpSecret;
private final static String MINI_ACCESS_STABLE_TOKEN_PREFIX = "MINI_STABLE_ACCESS_TOKEN-";

private final static String MP_ACCESS_STABLE_TOKEN_PREFIX = "MP_STABLE_ACCESS_TOKEN-";

@Autowired
WxRequestAccessTokenUtil wxRequestAccessTokenUtil;

@Autowired
private WxManager wxManager;

private String apikeyPrefix = "PUSH_CHANNEL_";

public static Logger logger = LoggerFactory.getLogger(TokenHelper.class);

@Override
public WxMiniMessageTemplateListResponse wxMiniMessageTemplateList(WxMiniMessageTemplateListRequest request) throws ServiceHandleException {
// 1、获取调用微信接口的accessToken凭证
String accessToken = wxRequestAccessTokenUtil.getStableAccessToken(miniAppid, miniSecret, false,
MINI_ACCESS_STABLE_TOKEN_PREFIX);
// 2、设置url参数
String url = String.format(WxRequestUrls.MINI_MESSAGE_TEMPLATE_LIST_URL, accessToken);
String resJson = null;
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = null;
List<WxMiniMessageTemplateListDto> dataList = null;
try {
resJson = HttpClientUtil.sendPost(url, JSON.toJSONString(request), accessToken);
rootNode = mapper.readTree(resJson);
JsonNode dataArray = rootNode.get("data");
dataList = mapper.readValue(
dataArray.toString(),
mapper.getTypeFactory().constructCollectionType(List.class, WxMiniMessageTemplateListDto.class)
);
} catch (IOException e) {
throw new RuntimeException(e);
}
WxMiniMessageTemplateListResponse response = new WxMiniMessageTemplateListResponse();
response.setList(dataList);
return response;
}

/**
* 微信小程序-订阅消息发送
*
@@ -39,8 +86,8 @@ public class WxMessageManagerImpl implements WxMessageManager {
* @return
*/
@Override
public WxMiniSendMessageResponse wxMiniSendMessageHandler(WxMiniSendMessageRequest request) throws ServiceHandleException {
String suffix = "WXMINISENDMESSAGE";
public WxMiniSendMessageResponse wxMiniSendMessageHandler(WxMiniSendMessageRequest request)
throws ServiceHandleException {
WxMiniSendMessageResponse response = null;
logger.info("------- 微信小程序-订阅消息推送 START -------");
logger.info("接收的request:{}", request.toJson());
@@ -48,19 +95,48 @@ public class WxMessageManagerImpl implements WxMessageManager {
request.valid();
// 3、创建消息记录
try {
// 4、判断立刻发送,还是延迟发送
response = wxManager.miniSendMessageV2(request, apikeyPrefix + suffix);
// 4、立刻发送
response = wxManager.miniSendMessageV2(request);
logger.info("返回的response:{}", response.toJson());
} catch (Exception e) {
logger.error("", e);
throw GlyServiceError.RESPONSE_ERROR.toHandleException("微信小程序订阅消息推送失败!");
// throw new ManagerException("微信小程序订阅消息推送失败!");
// throw new ManagerException("微信小程序订阅消息推送失败!");
} finally {
logger.info("------- 微信小程序-订阅消息推送 END -------");
}
return response;
}

@Override
public WxMpMessageTemplateListResponse wxMpMessageTemplateList(WxMpMessageTemplateListRequest request)
throws ServiceHandleException {
// 1、获取调用微信接口的accessToken凭证
String accessToken =
wxRequestAccessTokenUtil.getStableAccessToken(mpAppid, mpSecret, false, MP_ACCESS_STABLE_TOKEN_PREFIX);
// 2、设置url参数
String url = String.format(WxRequestUrls.MP_MESSAGE_TEMPLATE_LIST_URL, accessToken);
// 3、获取模板列表
String resJson = null;
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = null;
List<WxMpMessageTemplateListDto> dataList = null;
try {
resJson = HttpClientUtil.sendPost(url, JSON.toJSONString(request), accessToken);
rootNode = mapper.readTree(resJson);
JsonNode dataArray = rootNode.get("template_list");
dataList = mapper.readValue(
dataArray.toString(),
mapper.getTypeFactory().constructCollectionType(List.class, WxMpMessageTemplateListDto.class)
);
} catch (IOException e) {
throw new RuntimeException(e);
}
WxMpMessageTemplateListResponse response = new WxMpMessageTemplateListResponse();
response.setList(dataList);
return response;
}

/**
* 微信公众号-推送订阅消息
*
@@ -69,16 +145,16 @@ public class WxMessageManagerImpl implements WxMessageManager {
* @throws ManagerException
*/
@Override
public WxMpSendMessageResponse wxMpSendMessageHandler(WxMpSendMessageRequest request) throws ServiceHandleException {
String suffix = "WXMPSENDMESSAGE";
public WxMpSendMessageResponse wxMpSendMessageHandler(WxMpSendMessageRequest request)
throws ServiceHandleException {
WxMpSendMessageResponse response = null;
logger.info("------- 微信公众号-推送订阅消息 START -------");
logger.info("接收的request:{}", request.toJson());
// 1、入参校验
request.valid();
try {
// 4、判断立刻发送,还是延迟发送
response = wxManager.mpSendMessage(request, apikeyPrefix + suffix);
// 4、发送
response = wxManager.mpSendMessage(request);
logger.info("返回的response:{}", response.toJson());
} catch (Exception e) {
logger.error("", e);

+ 0
- 38
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMiniMessageTemplateListRequest.java Просмотреть файл

@@ -1,38 +0,0 @@
package cn.com.taiji.ats.model.protocol.channel.wx;

import java.util.ArrayList;

import cn.com.taiji.ats.model.FormatException;
import cn.com.taiji.common.entity.BaseEntity;
import com.google.common.collect.Lists;

import cn.hutool.core.collection.CollectionUtil;

/**
* 微信小程序-获取消息模板列表
*
*/
public class WxMiniMessageTemplateListRequest extends BaseEntity {

private String clientId;

public WxMiniMessageTemplateListRequest valid() throws FormatException {

final ArrayList<String> failParamInfo = Lists.newArrayList();

if (clientId == null || clientId.trim().isEmpty())
failParamInfo.add("消息客户端id");

//检验输错的数据参数
if (!CollectionUtil.isEmpty(failParamInfo)) {
throw new FormatException(String.join("、", failParamInfo) + ",不能为空");
}

return this;
}

public String getClientId() {
return clientId;
}

}

+ 0
- 12
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMiniMessageTemplateListResponse.java Просмотреть файл

@@ -1,12 +0,0 @@
package cn.com.taiji.ats.model.protocol.channel.wx;


import cn.com.taiji.common.entity.BaseEntity;

/**
* 微信小程序-订阅消息发送
*
*/
public class WxMiniMessageTemplateListResponse extends BaseEntity {

}

+ 0
- 36
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMpMessageTemplateListRequest.java Просмотреть файл

@@ -1,36 +0,0 @@
package cn.com.taiji.ats.model.protocol.channel.wx;

import java.util.ArrayList;

import cn.com.taiji.ats.model.FormatException;
import cn.com.taiji.common.entity.BaseEntity;
import com.google.common.collect.Lists;

import cn.hutool.core.collection.CollectionUtil;

/**
* 微信公众号-获取消息模板列表
*
*/
public class WxMpMessageTemplateListRequest extends BaseEntity {
private String clientId;

public WxMpMessageTemplateListRequest valid() throws FormatException {

final ArrayList<String> failParamInfo = Lists.newArrayList();

if (clientId == null || clientId.trim().isEmpty())
failParamInfo.add("消息客户端id");

//检验输错的数据参数
if (!CollectionUtil.isEmpty(failParamInfo)) {
throw new FormatException(String.join("、", failParamInfo) + ",不能为空");
}

return this;
}

public String getClientId() {
return clientId;
}
}

+ 0
- 12
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/model/protocol/channel/wx/WxMpMessageTemplateListResponse.java Просмотреть файл

@@ -1,12 +0,0 @@
package cn.com.taiji.ats.model.protocol.channel.wx;


import cn.com.taiji.common.entity.BaseEntity;

/**
* 微信公众号-订阅消息发送
*
*/
public class WxMpMessageTemplateListResponse extends BaseEntity {

}

+ 7
- 2
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/tools/WxRequestAccessTokenUtil.java Просмотреть файл

@@ -42,7 +42,7 @@ public class WxRequestAccessTokenUtil {
* (1)false 时为普通调用模式,access_token 有效期内重复调用该接口不会更新 access_token
* (2)true 时为强制刷新模式,会导致上次获取的 access_token 失效,并返回新的 access_token
*/
public String getStableAccessToken(String appid, String secret, boolean forceRefresh, String tokenType) throws IOException, ServiceHandleException {
public String getStableAccessToken(String appid, String secret, boolean forceRefresh, String tokenType) throws ServiceHandleException {
//根据类型设置key
String redisKey = null;
redisKey = tokenType + appid;
@@ -61,7 +61,12 @@ public class WxRequestAccessTokenUtil {
paramMap.put("appid", appid);
paramMap.put("secret", secret);
paramMap.put("force_refresh", forceRefresh);
String resJson = HttpClientUtil.sendPost(url, JSONUtil.toJsonStr(paramMap), null);
String resJson = null;
try {
resJson = HttpClientUtil.sendPost(url, JSONUtil.toJsonStr(paramMap), null);
} catch (IOException e) {
throw new RuntimeException(e);
}
WxAccessTokenModel tokenModel = JSONUtil.parseObj(resJson).toBean(WxAccessTokenModel.class);

//3、responseBody非空校验

+ 10
- 1
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/QtkPushController.java Просмотреть файл

@@ -84,9 +84,18 @@ public class QtkPushController
request.setTemplateId("_1PdLnnYSkRXQ91YzUxz9RIyp83k4ba9b5Y98OKgbV0");//模板id,暂时写死
request.setTitle("ETC产品办理成功通知");
request.setClientId("bfc4040bda90473d8ceab246555361a3");
request.setMpOpenidList(new ArrayList<>(List.of("ogb3at8mxCLrkNot6F84_jdP0_E0")));//公众号openid
request.setMpOpenId("ogb3at8mxCLrkNot6F84_jdP0_E0");//公众号openid
WxMpSendMessageResponse response = wxMessageManager.wxMpSendMessageHandler(request);
return response;
}

@ApiOperation(value = "微信公众号-列表测试")
@PostMapping(value = "/testWx")
public WxMpMessageTemplateListResponse test1() throws ManagerException, FormatException {
WxMpMessageTemplateListRequest request = new WxMpMessageTemplateListRequest();
request.setClientId("bfc4040bda90473d8ceab246555361a3");
WxMpMessageTemplateListResponse response = wxMessageManager.wxMpMessageTemplateList(request);
return response;
}

}

Загрузка…
Отмена
Сохранить