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));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |