diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecPushVoucherOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecPushVoucherOperation.java index dec4c84..075c275 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecPushVoucherOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecPushVoucherOperation.java @@ -26,6 +26,7 @@ import shjh.jhzj7.fi.fi.utils.ApiUtils; import shjh.jhzj7.fi.fi.utils.EsbUtils; import shjh.jhzj7.fi.fi.utils.JhzjUtils; import shjh.jhzj7.fi.fi.utils.SysUtils; +import shjh.jhzj7.fi.fi.utils.domin.ResponseData; import java.io.IOException; import java.math.BigDecimal; @@ -165,6 +166,11 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl if (null != response) { String code = (String) response.get("code"); if ("0".equals(code)) { + ResponseData responseData = ApiUtils.getResponseData(response); + if (responseData!=null){ + recBill.set("shjh_vouchernum",responseData.getNumber()); + recBill.set("shjh_sapfiscalyear",responseData.getYear()); + } recBill.set("shjh_ispushsap", true); SaveServiceHelper.update(recBill); }else { @@ -291,20 +297,40 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl for (DynamicObject entry : entries) { JSONObject IT_ITEMS = new JSONObject(); - // 设置客户/供应商编号 - switch (payerType) { - case "bd_customer": - IT_ITEMS.put("KUNNR", cusOrSupNumber); - break; - case "bd_supplier": - IT_ITEMS.put("LIFNR", cusOrSupNumber); - break; - } +// // 设置客户/供应商编号 +// switch (payerType) { +// case "bd_customer": +// IT_ITEMS.put("KUNNR", cusOrSupNumber); +// break; +// case "bd_supplier": +// IT_ITEMS.put("LIFNR", cusOrSupNumber); +// break; +// } // 设置科目 DynamicObject account = entry.getDynamicObject("account"); if (account != null) { IT_ITEMS.put("HKONT", account.getString("number")); + //查找核算维度 + DynamicObjectCollection checkItems = account.getDynamicObjectCollection("checkitementry"); + if (checkItems!=null&&checkItems.size()!=0){ + for (DynamicObject checkItem : checkItems) { + //是否已经反写 + boolean isMark=false; + //核算维度 + String assTactItemNum = checkItem.getString("asstactitem.number"); + if (assTactItemNum!=null){ + switch (assTactItemNum){ + case "0001"://客户 + IT_ITEMS.put("KUNNR", cusOrSupNumber); + break; + case "0005"://供应商 + IT_ITEMS.put("LIFNR", cusOrSupNumber); + break; + } + } + } + } } // 处理金额 diff --git a/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java index 3963ffe..207227f 100644 --- a/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java +++ b/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java @@ -12,6 +12,7 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import shjh.jhzj7.fi.fi.utils.domin.ResponseData; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -220,4 +221,46 @@ public class ApiUtils { } return isSuccess; } + + /** + * 解析凭证响应参数 + * @param response + * @return + */ + public static ResponseData getResponseData(JSONObject response) { + if (response == null) { + return null; + } + + JSONObject data = response.getJSONObject("data"); + if (data == null) { + return null; + } + + String key = data.getString("OBJ_KEY"); + if (key == null || key.isEmpty()) { + return null; + } + + ResponseData responseData = new ResponseData(); + + // 1. 提取number(前10位) + String number = key.length() >= 10 ? key.substring(0, 10) : key; + responseData.setNumber(number); + + // 2. 提取year(后4位) + String year = key.length() >= 4 ? key.substring(key.length() - 4) : key; + responseData.setYear(year); + + // 3. 提取orgNumber(中间部分,11-14位) + String orgNumber = ""; + if (key.length() > 14) { // 如果长度超过14,说明有中间部分 + orgNumber = key.substring(10, key.length() - 4); + } else if (key.length() > 10) { // 如果长度在11-14之间,只取10位之后的部分 + orgNumber = key.substring(10); + } + responseData.setOrgNumber(orgNumber); + + return responseData; + } } diff --git a/main/java/shjh/jhzj7/fi/fi/utils/domin/ResponseData.java b/main/java/shjh/jhzj7/fi/fi/utils/domin/ResponseData.java new file mode 100644 index 0000000..b3f10da --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/utils/domin/ResponseData.java @@ -0,0 +1,53 @@ +package shjh.jhzj7.fi.fi.utils.domin; + +public class ResponseData { + + /** + * SAP凭证号 + */ + private String number; + + /** + * 公司编码 + */ + private String orgNumber; + + /** + * 会计年度 + */ + private String year; + + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getOrgNumber() { + return orgNumber; + } + + public void setOrgNumber(String orgNumber) { + this.orgNumber = orgNumber; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + @Override + public String toString() { + return "ResponseData{" + + "number='" + number + '\'' + + ", orgNumber='" + orgNumber + '\'' + + ", year='" + year + '\'' + + '}'; + } +}