From 183bdb2cbee2d1b246472aee8003f60e4eaae381 Mon Sep 17 00:00:00 2001 From: arthur0201 <704538660@qq.com> Date: Fri, 4 Jun 2021 09:33:42 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#2142=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E8=A2=AB=E5=8A=A8=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=86=85=E5=AE=B9=E6=96=B0=E5=A2=9E=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=8D=A1=E7=89=87=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chanjar/weixin/common/api/WxConsts.java | 1 + .../common/util/xml/XStreamInitializer.java | 4 ++ .../util/xml/XStreamReplaceNameConverter.java | 8 +++ .../cp/bean/message/WxCpXmlOutMessage.java | 12 +++-- .../message/WxCpXmlOutTaskCardMessage.java | 24 +++++++++ .../bean/outxmlbuilder/TaskCardBuilder.java | 27 ++++++++++ .../cp/util/xml/XStreamTransformer.java | 18 ++++--- .../WxCpXmlOutTaskCardMessageTest.java | 49 +++++++++++++++++++ 8 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamReplaceNameConverter.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessage.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/TaskCardBuilder.java create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessageTest.java diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java index 1e953d080..cfc7fc0f3 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java @@ -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"; } /** diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamInitializer.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamInitializer.java index cf0fbb5ae..6997eb490 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamInitializer.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamInitializer.java @@ -28,6 +28,8 @@ public class XStreamInitializer { private static final String SUFFIX_CDATA = "]]>"; private static final String PREFIX_MEDIA_ID = ""; private static final String SUFFIX_MEDIA_ID = ""; + private static final String PREFIX_REPLACE_NAME = ""; + private static final String SUFFIX_REPLACE_NAME = ""; @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); } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamReplaceNameConverter.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamReplaceNameConverter.java new file mode 100644 index 000000000..a13693438 --- /dev/null +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamReplaceNameConverter.java @@ -0,0 +1,8 @@ +package me.chanjar.weixin.common.util.xml; + +public class XStreamReplaceNameConverter extends XStreamCDataConverter { + @Override + public String toString(Object obj) { + return "" + super.toString(obj) + ""; + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java index 96991a540..ff036b4c0 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutMessage.java @@ -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); } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessage.java new file mode 100644 index 000000000..63816f7e4 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessage.java @@ -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; + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/TaskCardBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/TaskCardBuilder.java new file mode 100644 index 000000000..e71c5bd71 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/outxmlbuilder/TaskCardBuilder.java @@ -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 { + + 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; + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java index ea9023111..aa907b728 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java @@ -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); diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessageTest.java new file mode 100644 index 000000000..bc867b72d --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlOutTaskCardMessageTest.java @@ -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 = "" + + "" + + "" + + "1122" + + "" + + "" + + ""; + 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 = "" + + "" + + "" + + "1122" + + "" + + "" + + ""; + System.out.println(m.toXml()); + Assert.assertEquals( + m + .toXml() + .replaceAll("\\s", "") + .replaceAll(".*?", ""), + expected + .replaceAll("\\s", "") + .replaceAll(".*?", "") + ); + } + +}