From a23429c144e38e50966a84857555bd95e7e5e17b Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Jan 2026 13:39:41 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#3859=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=AE=A1=E6=89=B9=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E6=80=BB=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/bean/oa/WxCpApprovalDetailResult.java | 6 ++ .../cp/api/impl/WxCpOaServiceImplTest.java | 74 +++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java index 7d55ff878..fe77fcaea 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpApprovalDetailResult.java @@ -91,6 +91,12 @@ public class WxCpApprovalDetailResult implements Serializable { @SerializedName("comments") private List comments; + /** + * 审批单据的总金额(单位:分),当审批单包含费用相关控件时返回 + */ + @SerializedName("sum_money") + private Long sumMoney; + } } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java index f722a248d..c7cc048db 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java @@ -443,6 +443,80 @@ public class WxCpOaServiceImplTest { System.out.println(gson.toJson(result)); } + /** + * Test sum_money field deserialization in approval detail. + * 测试审批详情中总费用金额字段的反序列化 + */ + @Test + public void testApprovalDetailSumMoney() { + // 测试包含总费用金额的审批详情JSON + String jsonWithSumMoney = "{\n" + + " \"errcode\": 0,\n" + + " \"errmsg\": \"ok\",\n" + + " \"info\": {\n" + + " \"sp_no\": \"202601140001\",\n" + + " \"sp_name\": \"报销申请\",\n" + + " \"sp_status\": 2,\n" + + " \"template_id\": \"test_template_id\",\n" + + " \"apply_time\": 1610000000,\n" + + " \"applyer\": {\n" + + " \"userid\": \"test_user\",\n" + + " \"partyid\": \"1\"\n" + + " },\n" + + " \"sp_record\": [],\n" + + " \"notifyer\": [],\n" + + " \"apply_data\": {\n" + + " \"contents\": []\n" + + " },\n" + + " \"comments\": [],\n" + + " \"sum_money\": 100000\n" + + " }\n" + + "}"; + + WxCpApprovalDetailResult result = WxCpGsonBuilder.create().fromJson(jsonWithSumMoney, WxCpApprovalDetailResult.class); + assertThat(result).isNotNull(); + assertThat(result.getErrCode()).isEqualTo(0); + assertThat(result.getInfo()).isNotNull(); + assertThat(result.getInfo().getSpNo()).isEqualTo("202601140001"); + assertThat(result.getInfo().getSpName()).isEqualTo("报销申请"); + assertThat(result.getInfo().getSumMoney()).isNotNull(); + assertThat(result.getInfo().getSumMoney()).isEqualTo(100000L); + + System.out.println("成功解析总费用金额字段 sum_money: " + result.getInfo().getSumMoney()); + + // 测试不包含 sum_money 字段的情况(向后兼容) + String jsonWithoutSumMoney = "{\n" + + " \"errcode\": 0,\n" + + " \"errmsg\": \"ok\",\n" + + " \"info\": {\n" + + " \"sp_no\": \"202601140002\",\n" + + " \"sp_name\": \"请假申请\",\n" + + " \"sp_status\": 1,\n" + + " \"template_id\": \"test_template_id\",\n" + + " \"apply_time\": 1610000000,\n" + + " \"applyer\": {\n" + + " \"userid\": \"test_user\",\n" + + " \"partyid\": \"1\"\n" + + " },\n" + + " \"sp_record\": [],\n" + + " \"notifyer\": [],\n" + + " \"apply_data\": {\n" + + " \"contents\": []\n" + + " },\n" + + " \"comments\": []\n" + + " }\n" + + "}"; + + WxCpApprovalDetailResult resultWithoutMoney = WxCpGsonBuilder.create().fromJson(jsonWithoutSumMoney, WxCpApprovalDetailResult.class); + assertThat(resultWithoutMoney).isNotNull(); + assertThat(resultWithoutMoney.getInfo()).isNotNull(); + assertThat(resultWithoutMoney.getInfo().getSpNo()).isEqualTo("202601140002"); + assertThat(resultWithoutMoney.getInfo().getSumMoney()).isNull(); + + System.out.println("成功处理不包含 sum_money 字段的情况(向后兼容)"); + System.out.println("完整测试通过!"); + } + /** * Test get template detail. *