From 3031b93c4f4aca61e12d97e30bb9909e62b79357 Mon Sep 17 00:00:00 2001
From: arthur0201 <704538660@qq.com>
Date: Thu, 3 Jun 2021 18:37:52 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?=
=?UTF-8?q?=E8=A2=AB=E5=8A=A8=E5=9B=9E=E5=A4=8D=E6=B6=88=E6=81=AF=E6=A0=BC?=
=?UTF-8?q?=E5=BC=8F=E6=96=B0=E5=A2=9E=E4=BB=BB=E5=8A=A1=E5=8D=A1=E7=89=87?=
=?UTF-8?q?=E6=A0=BC=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: arthur0201 <704538660@qq.com>
---
.../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 1e953d080b..cfc7fc0f37 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 static class XmlMsgType {
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 cf0fbb5ae9..6997eb490d 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 HierarchicalStreamWriter createWriter(Writer out) {
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 @@ protected void writeText(QuickWriter writer, String text) {
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 0000000000..a136934383
--- /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 96991a5403..ff036b4c0e 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.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 static NewsBuilder NEWS() {
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 0000000000..63816f7e4c
--- /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 0000000000..e71c5bd71d
--- /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 ea90231112..aa907b7288 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 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 @@ private static Map configXStreamInstance() {
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 @@ private static XStream configWxCpXmlOutVoiceMessage() {
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 0000000000..bc867b72d1
--- /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(".*?", "")
+ );
+ }
+
+}
From d3857599bd5f80b461ca3ebc86bf54b088b354b8 Mon Sep 17 00:00:00 2001
From: arthur0201 <704538660@qq.com>
Date: Mon, 7 Jun 2021 09:42:47 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90=E4=BC=81=E4=B8=9A=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E3=80=91=E6=9B=B4=E6=96=B0=E4=BB=BB=E5=8A=A1=E5=8D=A1?=
=?UTF-8?q?=E7=89=87=E6=B6=88=E6=81=AF=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E8=B7=9F=E6=96=87=E6=A1=A3=E4=BF=9D=E6=8C=81?=
=?UTF-8?q?=E4=B8=80=E8=87=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: arthur0201 <704538660@qq.com>
---
.../java/me/chanjar/weixin/cp/api/WxCpTaskCardService.java | 4 ++--
.../chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpTaskCardService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpTaskCardService.java
index 5bf50d36dc..3d97cb9283 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpTaskCardService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpTaskCardService.java
@@ -25,7 +25,7 @@ public interface WxCpTaskCardService {
*
* @param userIds 企业的成员ID列表
* @param taskId 任务卡片ID
- * @param clickedKey 已点击按钮的Key
+ * @param replaceName 替换文案
*/
- void update(List userIds, String taskId, String clickedKey) throws WxErrorException;
+ void update(List userIds, String taskId, String replaceName) throws WxErrorException;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java
index 3993960642..384a3d30cd 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpTaskCardServiceImpl.java
@@ -26,14 +26,14 @@ public class WxCpTaskCardServiceImpl implements WxCpTaskCardService {
private final WxCpService mainService;
@Override
- public void update(List userIds, String taskId, String clickedKey) throws WxErrorException {
+ public void update(List userIds, String taskId, String replaceName) throws WxErrorException {
Integer agentId = this.mainService.getWxCpConfigStorage().getAgentId();
Map data = new HashMap<>(4);
data.put("userids", userIds);
data.put("agentid", agentId);
data.put("task_id", taskId);
- data.put("clicked_key", clickedKey);
+ data.put("replace_name", replaceName);
String url = this.mainService.getWxCpConfigStorage().getApiUrl(UPDATE_TASK_CARD);
this.mainService.post(url, WxGsonBuilder.create().toJson(data));