12 changed files with 483 additions and 189 deletions
@ -1,168 +1,168 @@ |
|||
package com.ccsens.signin.util; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.ccsens.util.WechatUtil; |
|||
import com.ccsens.util.wx.WxGzhUtil; |
|||
import com.ccsens.util.wx.WxTemplateMessage; |
|||
|
|||
|
|||
/** |
|||
* @description: 微信模板 |
|||
* @author: whj |
|||
* @time: 2020/6/9 11:07 |
|||
*/ |
|||
public class WxTemplateUtil { |
|||
|
|||
/** |
|||
* 设置小程序跳转 |
|||
* @param projectId |
|||
* @return |
|||
*/ |
|||
private static WxTemplateMessage getWxTemplateMessage(Long projectId) { |
|||
String url = String.format(WechatUtil.PROJECT_URL, projectId); |
|||
WxTemplateMessage.MiniProgram miniProgram = new WxTemplateMessage.MiniProgram(WechatUtil.appid,url); |
|||
|
|||
WxTemplateMessage message = new WxTemplateMessage(); |
|||
message.setMiniprogram(miniProgram); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 完成任务提醒(备注是在切面处统一加的) |
|||
* @param projectId |
|||
* @param userName |
|||
* @param operation |
|||
* @param taskName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getFinishTask(Long projectId, String userName, String operation, String taskName){ |
|||
|
|||
WxTemplateMessage message = getWxTemplateMessage(projectId); |
|||
message.setTemplate_id(WxGzhUtil.Template.TASK_FINISH.templateId); |
|||
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); |
|||
data.setFirst(new WxTemplateMessage.TemplateSettings(userName + operation + taskName)); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 添加任务(备注是在切面处统一加的) |
|||
* @param projectId |
|||
* @param userName |
|||
* @param taskName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getAddTask(Long projectId, String userName, String taskName) { |
|||
WxTemplateMessage message = getWxTemplateMessage(projectId); |
|||
message.setTemplate_id(WxGzhUtil.Template.TASK_ADD.templateId); |
|||
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); |
|||
data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}添加了{}任务", userName, taskName))); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 删除任务 |
|||
* @param projectId |
|||
* @param userName |
|||
* @param taskName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getDeleteTask(Long projectId, String userName, String taskName) { |
|||
WxTemplateMessage message = getWxTemplateMessage(projectId); |
|||
message.setTemplate_id(WxGzhUtil.Template.TASK_DELETE.templateId); |
|||
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); |
|||
data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}删除了{}任务", userName, taskName))); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); |
|||
data.setKeyword3(new WxTemplateMessage.TemplateSettings("")); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 修改任务 |
|||
* @param projectId |
|||
* @param userName |
|||
* @param taskName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getChangeTask(Long projectId, String userName, String taskName) { |
|||
WxTemplateMessage message = getAddTask(projectId, userName, taskName); |
|||
message.getData().setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}修改了{}任务", userName, taskName))); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 上传交付物 |
|||
* @param projectId |
|||
* @param userName |
|||
* @param deliverName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getAddDeliver(Long projectId, String userName, String deliverName) { |
|||
WxTemplateMessage message = getWxTemplateMessage(projectId); |
|||
message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); |
|||
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); |
|||
data.setFirst(new WxTemplateMessage.TemplateSettings("")); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "上传了" + deliverName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings("上传交付物")); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 删除交付物 |
|||
* @param projectId |
|||
* @param userName |
|||
* @param deliverName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getDeleteDeliver(Long projectId, String userName, String deliverName) { |
|||
WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName); |
|||
WxTemplateMessage.TemplateData data = message.getData(); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "删除了" + deliverName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings("删除交付物")); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 检查交付物 |
|||
* @param projectId |
|||
* @param userName |
|||
* @param deliverName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getCheckDeliver(Long projectId, String userName, String deliverName) { |
|||
WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName); |
|||
WxTemplateMessage.TemplateData data = message.getData(); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "检查了" + deliverName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings("检查交付物")); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
|
|||
/** |
|||
* 发表评论 |
|||
* @param projectId |
|||
* @param userName |
|||
* @return |
|||
*/ |
|||
public static WxTemplateMessage getAddComment(Long projectId, String userName) { |
|||
WxTemplateMessage message = getWxTemplateMessage(projectId); |
|||
message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); |
|||
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); |
|||
data.setFirst(new WxTemplateMessage.TemplateSettings(userName + "进行了点评")); |
|||
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName)); |
|||
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); |
|||
message.setData(data); |
|||
return message; |
|||
} |
|||
} |
|||
//package com.ccsens.signin.util;
|
|||
//
|
|||
//import cn.hutool.core.date.DateUtil;
|
|||
//import cn.hutool.core.util.StrUtil;
|
|||
//import com.ccsens.util.WechatUtil;
|
|||
//import com.ccsens.util.wx.WxGzhUtil;
|
|||
//import com.ccsens.util.wx.WxTemplateMessage;
|
|||
//
|
|||
//
|
|||
///**
|
|||
// * @description: 微信模板
|
|||
// * @author: whj
|
|||
// * @time: 2020/6/9 11:07
|
|||
// */
|
|||
//public class WxTemplateUtil {
|
|||
//
|
|||
// /**
|
|||
// * 设置小程序跳转
|
|||
// * @param projectId
|
|||
// * @return
|
|||
// */
|
|||
// private static WxTemplateMessage getWxTemplateMessage(Long projectId) {
|
|||
// String url = String.format(WechatUtil.PROJECT_URL, projectId);
|
|||
// WxTemplateMessage.MiniProgram miniProgram = new WxTemplateMessage.MiniProgram(WechatUtil.appid,url);
|
|||
//
|
|||
// WxTemplateMessage message = new WxTemplateMessage();
|
|||
// message.setMiniprogram(miniProgram);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 完成任务提醒(备注是在切面处统一加的)
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param operation
|
|||
// * @param taskName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getFinishTask(Long projectId, String userName, String operation, String taskName){
|
|||
//
|
|||
// WxTemplateMessage message = getWxTemplateMessage(projectId);
|
|||
// message.setTemplate_id(WxGzhUtil.Template.TASK_FINISH.templateId);
|
|||
// WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
|
|||
// data.setFirst(new WxTemplateMessage.TemplateSettings(userName + operation + taskName));
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
//
|
|||
// /**
|
|||
// * 添加任务(备注是在切面处统一加的)
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param taskName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getAddTask(Long projectId, String userName, String taskName) {
|
|||
// WxTemplateMessage message = getWxTemplateMessage(projectId);
|
|||
// message.setTemplate_id(WxGzhUtil.Template.TASK_ADD.templateId);
|
|||
// WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
|
|||
// data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}添加了{}任务", userName, taskName)));
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 删除任务
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param taskName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getDeleteTask(Long projectId, String userName, String taskName) {
|
|||
// WxTemplateMessage message = getWxTemplateMessage(projectId);
|
|||
// message.setTemplate_id(WxGzhUtil.Template.TASK_DELETE.templateId);
|
|||
// WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
|
|||
// data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}删除了{}任务", userName, taskName)));
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
|
|||
// data.setKeyword3(new WxTemplateMessage.TemplateSettings(""));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 修改任务
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param taskName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getChangeTask(Long projectId, String userName, String taskName) {
|
|||
// WxTemplateMessage message = getAddTask(projectId, userName, taskName);
|
|||
// message.getData().setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}修改了{}任务", userName, taskName)));
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 上传交付物
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param deliverName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getAddDeliver(Long projectId, String userName, String deliverName) {
|
|||
// WxTemplateMessage message = getWxTemplateMessage(projectId);
|
|||
// message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId);
|
|||
// WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
|
|||
// data.setFirst(new WxTemplateMessage.TemplateSettings(""));
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "上传了" + deliverName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings("上传交付物"));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 删除交付物
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param deliverName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getDeleteDeliver(Long projectId, String userName, String deliverName) {
|
|||
// WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName);
|
|||
// WxTemplateMessage.TemplateData data = message.getData();
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "删除了" + deliverName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings("删除交付物"));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 检查交付物
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @param deliverName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getCheckDeliver(Long projectId, String userName, String deliverName) {
|
|||
// WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName);
|
|||
// WxTemplateMessage.TemplateData data = message.getData();
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "检查了" + deliverName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings("检查交付物"));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//
|
|||
// /**
|
|||
// * 发表评论
|
|||
// * @param projectId
|
|||
// * @param userName
|
|||
// * @return
|
|||
// */
|
|||
// public static WxTemplateMessage getAddComment(Long projectId, String userName) {
|
|||
// WxTemplateMessage message = getWxTemplateMessage(projectId);
|
|||
// message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId);
|
|||
// WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
|
|||
// data.setFirst(new WxTemplateMessage.TemplateSettings(userName + "进行了点评"));
|
|||
// data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName));
|
|||
// data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
|
|||
// message.setData(data);
|
|||
// return message;
|
|||
// }
|
|||
//}
|
|||
|
@ -0,0 +1,46 @@ |
|||
package com.ccsens.wechatutil.bean.dto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author 逗 |
|||
*/ |
|||
@Data |
|||
public class WxMessageDto { |
|||
/** |
|||
* 微信机器人发送消息 |
|||
*/ |
|||
@Data |
|||
public static class RobotMessage{ |
|||
//机器人地址
|
|||
public String webHook; |
|||
//消息的内容
|
|||
public String content; |
|||
//消息格式
|
|||
public String msgType; |
|||
//通过id@群内人员
|
|||
public List<String> mentionedList; |
|||
//通过手机号@群内人员
|
|||
public List<String> mentionedMobileList; |
|||
} |
|||
|
|||
@Data |
|||
public static class WxRobotVo{ |
|||
private String msgtype; |
|||
private WxRobotText text; |
|||
private WxRobotMarkdown markdown; |
|||
} |
|||
@Data |
|||
public static class WxRobotText{ |
|||
private String content; |
|||
private List<String> mentioned_list; |
|||
private List<String> mentioned_mobile_list; |
|||
} |
|||
@Data |
|||
public static class WxRobotMarkdown{ |
|||
private String content; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,70 @@ |
|||
package com.ccsens.wechatutil.bean.dto; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
|
|||
import javax.validation.constraints.NotNull; |
|||
|
|||
/** |
|||
* @description: |
|||
* @author: whj |
|||
* @time: 2020/6/9 9:59 |
|||
*/ |
|||
@ApiModel("微信模板消息") |
|||
@Data |
|||
public class WxTemplateMessage { |
|||
@NotNull |
|||
@ApiModelProperty("接收者openid") |
|||
private String touser; |
|||
@NotNull |
|||
@ApiModelProperty("模板ID") |
|||
private String template_id; |
|||
@ApiModelProperty("模板跳转链接(海外帐号没有跳转能力)") |
|||
private String url; |
|||
@ApiModelProperty("小程序") |
|||
private MiniProgram miniprogram; |
|||
@ApiModelProperty("模板数据") |
|||
private TemplateData data ; |
|||
|
|||
@ApiModel("跳转小程序") |
|||
@Data |
|||
public static class MiniProgram{ |
|||
@ApiModelProperty("所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)") |
|||
private String appid; |
|||
@ApiModelProperty("所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏") |
|||
private String pagepath; |
|||
|
|||
public MiniProgram(String appid, String pagepath) { |
|||
this.appid = appid; |
|||
this.pagepath = pagepath; |
|||
} |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("模板数据") |
|||
public static class TemplateData{ |
|||
private TemplateSettings first; |
|||
private TemplateSettings keyword1; |
|||
private TemplateSettings keyword2; |
|||
private TemplateSettings keyword3; |
|||
private TemplateSettings remark; |
|||
} |
|||
|
|||
@Getter @Setter |
|||
@ApiModel("模板参数配置") |
|||
public static class TemplateSettings { |
|||
@ApiModelProperty("模板值") |
|||
private String value; |
|||
@ApiModelProperty("模板内容字体颜色,不填默认为黑色") |
|||
private String color; |
|||
public TemplateSettings(){} |
|||
public TemplateSettings(String value) { |
|||
this.value = value; |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,4 @@ |
|||
package com.ccsens.wechatutil.service; |
|||
|
|||
public interface IWxMessageService { |
|||
} |
@ -0,0 +1,92 @@ |
|||
package com.ccsens.wechatutil.service; |
|||
|
|||
import cn.hutool.core.collection.CollectionUtil; |
|||
import com.ccsens.util.JacksonUtil; |
|||
import com.ccsens.wechatutil.bean.dto.WxMessageDto; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.json.JSONObject; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Propagation; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import java.io.*; |
|||
import java.net.URL; |
|||
import java.net.URLConnection; |
|||
|
|||
@Slf4j |
|||
@Service |
|||
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
|||
public class WxMessageService implements IWxMessageService { |
|||
|
|||
/** |
|||
* 微信机器人 |
|||
* @param robotMessage 机器人消息 |
|||
* @throws Exception 异常 |
|||
*/ |
|||
public void sendRobotInfo(WxMessageDto.RobotMessage robotMessage)throws Exception { |
|||
WxMessageDto.WxRobotVo wxRobotVo = new WxMessageDto.WxRobotVo(); |
|||
wxRobotVo.setMsgtype(robotMessage.getMsgType()); |
|||
if("text".equalsIgnoreCase(robotMessage.getMsgType())){ |
|||
WxMessageDto.WxRobotText wxRobotText = new WxMessageDto.WxRobotText(); |
|||
wxRobotText.setContent(robotMessage.getContent()); |
|||
if(CollectionUtil.isNotEmpty(robotMessage.getMentionedList())){ |
|||
wxRobotText.setMentioned_list(robotMessage.getMentionedList()); |
|||
} |
|||
if(CollectionUtil.isNotEmpty(robotMessage.getMentionedMobileList())){ |
|||
wxRobotText.setMentioned_mobile_list(robotMessage.getMentionedMobileList()); |
|||
} |
|||
wxRobotVo.setText(wxRobotText); |
|||
}else if("markdown".equalsIgnoreCase(robotMessage.getMsgType())){ |
|||
WxMessageDto.WxRobotMarkdown wxRobotMarkdown = new WxMessageDto.WxRobotMarkdown(); |
|||
wxRobotMarkdown.setContent(robotMessage.getContent()); |
|||
wxRobotVo.setMarkdown(wxRobotMarkdown); |
|||
} |
|||
|
|||
String body = JacksonUtil.beanToJson(wxRobotVo); |
|||
log.info(body); |
|||
sendPost(robotMessage.getWebHook(),body); |
|||
} |
|||
|
|||
|
|||
public static void sendPost(String url, String param){ |
|||
PrintWriter out = null; |
|||
BufferedReader in = null; |
|||
JSONObject jsonObject = null; |
|||
String result = ""; |
|||
try { |
|||
URL realUrl = new URL(url); |
|||
// 打开和URL之间的连接
|
|||
URLConnection conn = realUrl.openConnection(); |
|||
// 发送POST请求必须设置如下两行
|
|||
conn.setDoOutput(true); |
|||
conn.setDoInput(true); |
|||
// 获取URLConnection对象对应的输出流(设置请求编码为UTF-8)
|
|||
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8")); |
|||
// 发送请求参数
|
|||
out.print(param); |
|||
// flush输出流的缓冲
|
|||
out.flush(); |
|||
// 获取请求返回数据(设置返回数据编码为UTF-8)
|
|||
in = new BufferedReader( |
|||
new InputStreamReader(conn.getInputStream(), "UTF-8")); |
|||
String line; |
|||
while ((line = in.readLine()) != null) { |
|||
result += line; |
|||
} |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} finally { |
|||
try { |
|||
if (out != null) { |
|||
out.close(); |
|||
} |
|||
if (in != null) { |
|||
in.close(); |
|||
} |
|||
} catch (IOException ex) { |
|||
ex.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue