From e1ef599e4f2ad6f4e1933f67cb6a27d5a854587f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 19 Jan 2026 03:36:33 +0000 Subject: [PATCH 1/2] Initial plan From d56456ca4850fa2769772feb58c315d2115d7830 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 19 Jan 2026 03:42:46 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=AE=A1=E6=89=B9=E8=AF=A6=E6=83=85=E6=80=BB?= =?UTF-8?q?=E8=B4=B9=E7=94=A8=E9=87=91=E9=A2=9D=E5=AD=97=E6=AE=B5=20sum=5F?= =?UTF-8?q?money?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../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 7d55ff878f..fe77fcaeac 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 static class WxCpApprovalDetail 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 f722a248d3..c7cc048db5 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 void testGetApprovalDetail() throws WxErrorException { 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. *