mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-04-05 17:38:05 +08:00
🆕 #2142 【企业微信】被动回复消息内容新增任务卡片格式
This commit is contained in:
parent
c7c834b450
commit
183bdb2cbe
@ -44,6 +44,7 @@ public class WxConsts {
|
||||
public static final String DEVICE_STATUS = "device_status";
|
||||
public static final String HARDWARE = "hardware";
|
||||
public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
|
||||
public static final String UPDATE_TASKCARD = "update_taskcard";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -28,6 +28,8 @@ public class XStreamInitializer {
|
||||
private static final String SUFFIX_CDATA = "]]>";
|
||||
private static final String PREFIX_MEDIA_ID = "<MediaId>";
|
||||
private static final String SUFFIX_MEDIA_ID = "</MediaId>";
|
||||
private static final String PREFIX_REPLACE_NAME = "<ReplaceName>";
|
||||
private static final String SUFFIX_REPLACE_NAME = "</ReplaceName>";
|
||||
|
||||
@Override
|
||||
protected void writeText(QuickWriter writer, String text) {
|
||||
@ -35,6 +37,8 @@ public class XStreamInitializer {
|
||||
writer.write(text);
|
||||
} else if (text.startsWith(PREFIX_MEDIA_ID) && text.endsWith(SUFFIX_MEDIA_ID)) {
|
||||
writer.write(text);
|
||||
} else if (text.startsWith(PREFIX_REPLACE_NAME) && text.endsWith(SUFFIX_REPLACE_NAME)){
|
||||
writer.write(text);
|
||||
} else {
|
||||
super.writeText(writer, text);
|
||||
}
|
||||
|
@ -0,0 +1,8 @@
|
||||
package me.chanjar.weixin.common.util.xml;
|
||||
|
||||
public class XStreamReplaceNameConverter extends XStreamCDataConverter {
|
||||
@Override
|
||||
public String toString(Object obj) {
|
||||
return "<ReplaceName>" + super.toString(obj) + "</ReplaceName>";
|
||||
}
|
||||
}
|
@ -6,11 +6,7 @@ import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamConverter;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
|
||||
import me.chanjar.weixin.cp.bean.outxmlbuilder.ImageBuilder;
|
||||
import me.chanjar.weixin.cp.bean.outxmlbuilder.NewsBuilder;
|
||||
import me.chanjar.weixin.cp.bean.outxmlbuilder.TextBuilder;
|
||||
import me.chanjar.weixin.cp.bean.outxmlbuilder.VideoBuilder;
|
||||
import me.chanjar.weixin.cp.bean.outxmlbuilder.VoiceBuilder;
|
||||
import me.chanjar.weixin.cp.bean.outxmlbuilder.*;
|
||||
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
|
||||
import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil;
|
||||
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
|
||||
@ -76,6 +72,12 @@ public abstract class WxCpXmlOutMessage implements Serializable {
|
||||
return new NewsBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得任务卡片消息builder.
|
||||
*/
|
||||
public static TaskCardBuilder TASK_CARD() {
|
||||
return new TaskCardBuilder();
|
||||
}
|
||||
protected String toXml() {
|
||||
return XStreamTransformer.toXml((Class) this.getClass(), this);
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
package me.chanjar.weixin.cp.bean.message;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamConverter;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
import me.chanjar.weixin.common.util.xml.XStreamReplaceNameConverter;
|
||||
|
||||
@XStreamAlias("xml")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class WxCpXmlOutTaskCardMessage extends WxCpXmlOutMessage {
|
||||
private static final long serialVersionUID = 7028014900972827324L;
|
||||
|
||||
@XStreamAlias("TaskCard")
|
||||
@XStreamConverter(value = XStreamReplaceNameConverter.class)
|
||||
private String replaceName;
|
||||
|
||||
public WxCpXmlOutTaskCardMessage() {
|
||||
this.msgType = WxConsts.XmlMsgType.UPDATE_TASKCARD;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package me.chanjar.weixin.cp.bean.outxmlbuilder;
|
||||
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTaskCardMessage;
|
||||
|
||||
/**
|
||||
* 任务卡片消息builder
|
||||
*
|
||||
* @author tao zhang
|
||||
*/
|
||||
public final class TaskCardBuilder extends BaseBuilder<TaskCardBuilder, WxCpXmlOutTaskCardMessage> {
|
||||
|
||||
private String replaceName;
|
||||
|
||||
public TaskCardBuilder replaceName(String replaceName) {
|
||||
this.replaceName = replaceName;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxCpXmlOutTaskCardMessage build() {
|
||||
WxCpXmlOutTaskCardMessage m = new WxCpXmlOutTaskCardMessage();
|
||||
setCommon(m);
|
||||
m.setReplaceName(this.replaceName);
|
||||
return m;
|
||||
}
|
||||
|
||||
}
|
@ -6,15 +6,8 @@ import java.util.Map;
|
||||
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpTpXmlMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.*;
|
||||
import me.chanjar.weixin.cp.bean.WxCpTpXmlPackage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutImageMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutNewsMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTextMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutVideoMessage;
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutVoiceMessage;
|
||||
|
||||
public class XStreamTransformer {
|
||||
|
||||
@ -60,6 +53,7 @@ public class XStreamTransformer {
|
||||
map.put(WxCpXmlOutImageMessage.class, configWxCpXmlOutImageMessage());
|
||||
map.put(WxCpXmlOutVideoMessage.class, configWxCpXmlOutVideoMessage());
|
||||
map.put(WxCpXmlOutVoiceMessage.class, configWxCpXmlOutVoiceMessage());
|
||||
map.put(WxCpXmlOutTaskCardMessage.class, configWxCpXmlOutTaskCardMessage());
|
||||
map.put(WxCpTpXmlPackage.class, configWxCpTpXmlPackage());
|
||||
map.put(WxCpTpXmlMessage.class, configWxCpTpXmlMessage());
|
||||
return map;
|
||||
@ -118,6 +112,14 @@ public class XStreamTransformer {
|
||||
return xstream;
|
||||
}
|
||||
|
||||
private static XStream configWxCpXmlOutTaskCardMessage() {
|
||||
XStream xstream = XStreamInitializer.getInstance();
|
||||
|
||||
xstream.processAnnotations(WxCpXmlOutMessage.class);
|
||||
xstream.processAnnotations(WxCpXmlOutTaskCardMessage.class);
|
||||
return xstream;
|
||||
}
|
||||
|
||||
private static XStream configWxCpTpXmlPackage() {
|
||||
XStream xstream = XStreamInitializer.getInstance();
|
||||
xstream.processAnnotations(WxCpTpXmlPackage.class);
|
||||
|
@ -0,0 +1,49 @@
|
||||
package me.chanjar.weixin.cp.bean.message;
|
||||
|
||||
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTaskCardMessage;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
@Test
|
||||
public class WxCpXmlOutTaskCardMessageTest {
|
||||
|
||||
public void test() {
|
||||
WxCpXmlOutTaskCardMessage m = new WxCpXmlOutTaskCardMessage();
|
||||
m.setReplaceName("已驳回");
|
||||
m.setCreateTime(1122L);
|
||||
m.setFromUserName("from");
|
||||
m.setToUserName("to");
|
||||
|
||||
String expected = "<xml>"
|
||||
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
||||
+ "<FromUserName><![CDATA[from]]></FromUserName>"
|
||||
+ "<CreateTime>1122</CreateTime>"
|
||||
+ "<MsgType><![CDATA[update_taskcard]]></MsgType>"
|
||||
+ "<TaskCard><ReplaceName><![CDATA[已驳回]]></ReplaceName></TaskCard>"
|
||||
+ "</xml>";
|
||||
System.out.println(m.toXml());
|
||||
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
|
||||
}
|
||||
|
||||
public void testBuild() {
|
||||
WxCpXmlOutTaskCardMessage m = WxCpXmlOutMessage.TASK_CARD().replaceName("已驳回").fromUser("from").toUser("to").build();
|
||||
String expected = "<xml>"
|
||||
+ "<ToUserName><![CDATA[to]]></ToUserName>"
|
||||
+ "<FromUserName><![CDATA[from]]></FromUserName>"
|
||||
+ "<CreateTime>1122</CreateTime>"
|
||||
+ "<MsgType><![CDATA[update_taskcard]]></MsgType>"
|
||||
+ "<TaskCard><ReplaceName><![CDATA[已驳回]]></ReplaceName></TaskCard>"
|
||||
+ "</xml>";
|
||||
System.out.println(m.toXml());
|
||||
Assert.assertEquals(
|
||||
m
|
||||
.toXml()
|
||||
.replaceAll("\\s", "")
|
||||
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
|
||||
expected
|
||||
.replaceAll("\\s", "")
|
||||
.replaceAll("<CreateTime>.*?</CreateTime>", "")
|
||||
);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user