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.
		
		
		
		
			
				
					
					
						
							89 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							89 lines
						
					
					
						
							2.8 KiB
						
					
					
				| 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));
 | |
|     }
 | |
| }
 | |
| 
 |