You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.8 KiB
90 lines
2.8 KiB
2 years ago
|
package com.ynxbd.common.action.pay;
|
||
|
|
||
|
import com.ynxbd.common.result.ResultEnum;
|
||
|
import com.ynxbd.common.result.ServiceException;
|
||
|
import com.ynxbd.common.service.PayService;
|
||
|
import lombok.ToString;
|
||
|
import org.apache.commons.lang3.ObjectUtils;
|
||
|
|
||
|
@ToString
|
||
|
public enum PEnum {
|
||
|
NO("匹配失败", "zero", ""),
|
||
|
|
||
|
// ------------------------------------
|
||
|
REG("挂号", "register", "G"),
|
||
|
RECIPE("处方", "recipe", "C"),
|
||
|
IN_HOSP("住院", "in_hosp", "Z"),
|
||
|
|
||
|
CASEBOOK("病例", "in_casebook", "CB"),
|
||
|
|
||
|
OUT_COLLECT("外采", "out_collect", "OC"),
|
||
|
|
||
|
OL_REG("问诊挂号", "ol_register", "OG"),
|
||
|
|
||
|
;
|
||
|
|
||
|
public final String NAME;
|
||
|
public final String CODE;
|
||
|
public final String ORDER_CODE;// 和订单号有关,至多两位
|
||
|
|
||
|
PEnum(String NAME, String CODE, String ORDER_CODE) {
|
||
|
this.NAME = NAME;
|
||
|
this.CODE = CODE;
|
||
|
this.ORDER_CODE = ORDER_CODE;
|
||
|
}
|
||
|
|
||
|
public static PEnum toEnum(String callNo) {
|
||
|
for (PEnum item : PEnum.values()) {
|
||
|
if (item.CODE.equals(callNo)) {
|
||
|
return item;
|
||
|
}
|
||
|
}
|
||
|
return NO;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 根据订单号获取类型
|
||
|
*
|
||
|
* @param bankTransNo 交易流水号
|
||
|
* @param tradeNo HIS订单号
|
||
|
* @return 类型
|
||
|
*/
|
||
|
public static PEnum getByOrderNo(String bankTransNo, String tradeNo) throws ServiceException {
|
||
|
if (!isNewOrderNo(bankTransNo, tradeNo)) {
|
||
|
throw new ServiceException(ResultEnum.REFUND_IS_OLD_ORDER_NUM);
|
||
|
}
|
||
|
int len = tradeNo.length();
|
||
|
String middleCode1 = tradeNo.substring(len - 4, len - 3);
|
||
|
String middleCode2 = tradeNo.substring(len - 4, len - 2);
|
||
|
for (PEnum item : PEnum.values()) {
|
||
|
if (item.ORDER_CODE.equals(middleCode1) || item.ORDER_CODE.equals(middleCode2)) {
|
||
|
return item;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 判断是否为新版订单号
|
||
|
*
|
||
|
* @param bankTransNo 商户交易流水号
|
||
|
* @param tradeNo HIS订单号
|
||
|
* @return 是否为新版订单号
|
||
|
* @throws ServiceException 业务异常
|
||
|
*/
|
||
|
public static boolean isNewOrderNo(String bankTransNo, String tradeNo) throws ServiceException {
|
||
|
if (ObjectUtils.isEmpty(bankTransNo) || ObjectUtils.isEmpty(tradeNo)) {
|
||
|
throw new ServiceException(ResultEnum.REFUND_ORDER_IS_ERROR);
|
||
|
}
|
||
|
int tradeNoLen = tradeNo.length();
|
||
|
if (tradeNoLen < 24) {
|
||
|
throw new ServiceException(ResultEnum.REFUND_ORDER_IS_ERROR);
|
||
|
}
|
||
|
if ((bankTransNo.length() + 4) != tradeNoLen) {
|
||
|
throw new ServiceException(ResultEnum.REFUND_IS_OLD_ORDER_NUM);
|
||
|
}
|
||
|
return bankTransNo.equals(tradeNo.substring(0, tradeNoLen - 4));
|
||
|
}
|
||
|
}
|