diff --git a/src/main/java/com/win/bank/domain/BankDO.java b/src/main/java/com/win/bank/domain/BankDO.java index 9d313ce..83ee214 100644 --- a/src/main/java/com/win/bank/domain/BankDO.java +++ b/src/main/java/com/win/bank/domain/BankDO.java @@ -1,6 +1,7 @@ package com.win.bank.domain; import java.math.BigDecimal; +import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -81,4 +82,9 @@ public class BankDO extends BaseDO { * 流水号 */ private String serialNumber; + + /** + * 最后查询时间 + */ + private Date lastQueryTime; } diff --git a/src/main/java/com/win/bank/enums/BocomPayStatEnum.java b/src/main/java/com/win/bank/enums/BocomPayStatEnum.java new file mode 100644 index 0000000..31c1298 --- /dev/null +++ b/src/main/java/com/win/bank/enums/BocomPayStatEnum.java @@ -0,0 +1,32 @@ +package com.win.bank.enums; + +public enum BocomPayStatEnum { + + INBANKPROCESSING("0", "银行处理中"), SUCCESS("1", "成功"), FAILED("2", "失败"), DOUBTFUL("3", "可疑"), RECORDNOTEXIST("4", "记录不存在"), TOBEAUTHORIZED("5", "待授权"), AUTHORIZATIONDENIAL("6", "授权拒绝"); + + private final String code; + private final String description; + + BocomPayStatEnum(String code, String description) { + this.code = code; + this.description = description; + } + + public String getCode() { + return code; + } + + public String getDescription() { + return description; + } + + public static BocomPayStatEnum getByCode(String code) { + for (BocomPayStatEnum status : BocomPayStatEnum.values()) { + if (status.getCode().equals(code)) { + return status; + } + } + throw new IllegalArgumentException("Invalid BocomPayStatEnum code: " + code); + } + +} diff --git a/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java b/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java index 5b98e43..c9fb29a 100644 --- a/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java +++ b/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java @@ -18,6 +18,7 @@ import org.w3c.dom.Element; import org.xml.sax.InputSource; import com.win.bank.domain.BankDO; +import com.win.bank.enums.BocomPayStatEnum; import com.win.bank.enums.PaymentStatusEnum; import com.win.bank.service.BaseBankService; import com.win.bank.service.bank.BankService; @@ -50,7 +51,7 @@ public class BocomServiceImpl implements BaseBankService { @Override public BankDO payment(BankDO bankDO) { - String trCode = "210201"; + String trCode = "210205"; String bussinessCode = bankService.getBussinessCode(bankDO); bankDO.setBusinessCode(bussinessCode); String head = generateHeadMessage(trCode, bussinessCode); @@ -62,9 +63,6 @@ public class BocomServiceImpl implements BaseBankService { body.append("").append(bankDO.getRcvBankName()).append(""); body.append("").append(bankDO.getRcvAccount().replaceAll("\\s+", "")).append(""); body.append("").append(bankDO.getRcvUserName()).append(""); - if (StringUtils.isNotEmpty(bankDO.getRcvBankNumber())) { - body.append("").append(bankDO.getRcvBankNumber()).append(""); - } body.append("CNY"); body.append("").append(bankDO.getAmount()).append(""); body.append("").append(bussinessCode).append(""); @@ -91,15 +89,15 @@ public class BocomServiceImpl implements BaseBankService { Element headElement = (Element)document.getDocumentElement().getElementsByTagName("head").item(0); String particularCode = headElement.getElementsByTagName("particular_code").item(0).getTextContent(); if (SUCCESS_CODE.equals(particularCode)) { - bankDO.setStatus(PaymentStatusEnum.SUCCESS.getCode()); + bankDO.setStatus(PaymentStatusEnum.PAYING.getCode()); String serialNumber = headElement.getElementsByTagName("serial_no").item(0).getTextContent(); bankDO.setSerialNumber(serialNumber); + message = PaymentStatusEnum.PAYING.getDescription(); } else { bankDO.setStatus(PaymentStatusEnum.FAILED.getCode()); + message = headElement.getElementsByTagName("particular_info").item(0).getTextContent(); } - message = headElement.getElementsByTagName("particular_info").item(0).getTextContent(); bankDO.setMessage(message); - } catch (Exception e) { e.printStackTrace(); } @@ -109,6 +107,9 @@ public class BocomServiceImpl implements BaseBankService { @Override public BankDO queryPaymentResult(BankDO bankDO) { + if (!timeDifference(bankDO)) { + return null; + } String trCode = "310204"; String bussinessCode = bankService.getBussinessCode(bankDO); String head = generateHeadMessage(trCode, bussinessCode); @@ -130,19 +131,41 @@ public class BocomServiceImpl implements BaseBankService { Element headElement = (Element)document.getDocumentElement().getElementsByTagName("head").item(0); Element bodyElement = (Element)document.getDocumentElement().getElementsByTagName("body").item(0); String particularCode = headElement.getElementsByTagName("particular_code").item(0).getTextContent(); + if (SUCCESS_CODE.equals(particularCode)) { - bankDO.setStatus(PaymentStatusEnum.SUCCESS.getCode()); + String description = ""; + String stat = bodyElement.getElementsByTagName("stat").item(0).getTextContent(); + String errMsg = bodyElement.getElementsByTagName("err_msg").item(0).getTextContent(); + BocomPayStatEnum statEnum = BocomPayStatEnum.getByCode(stat); String serialNumber = bodyElement.getElementsByTagName("ogl_serial_no").item(0).getTextContent(); + switch (statEnum) { + case SUCCESS: + bankDO.setStatus(PaymentStatusEnum.SUCCESS.getCode()); + break; + case INBANKPROCESSING: + case TOBEAUTHORIZED: + bankDO.setStatus(PaymentStatusEnum.PAYING.getCode()); + description = statEnum.getDescription(); + break; + default: + bankDO.setStatus(PaymentStatusEnum.FAILED.getCode()); + description = statEnum.getDescription(); + break; + } bankDO.setSerialNumber(serialNumber); + if (StringUtils.isNotEmpty(errMsg)) { + description = description + errMsg; + } + bankDO.setMessage(description); } else { bankDO.setStatus(PaymentStatusEnum.FAILED.getCode()); + message = headElement.getElementsByTagName("particular_info").item(0).getTextContent(); + bankDO.setMessage(message); } - message = headElement.getElementsByTagName("particular_info").item(0).getTextContent(); - bankDO.setMessage(message); + bankDO.setLastQueryTime(new Date()); } catch (Exception e) { e.printStackTrace(); } - return bankDO; } @@ -156,4 +179,15 @@ public class BocomServiceImpl implements BaseBankService { .append("10"); return head.toString(); } + + public boolean timeDifference(BankDO bankDO) { + if (bankDO.getLastQueryTime() == null) { + return true; + } + Date currentTime = new Date(); + long timeDifference = currentTime.getTime() - bankDO.getLastQueryTime().getTime(); + long minutesDifference = timeDifference / (60 * 1000); + + return minutesDifference > 5; + } }