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.
		
		
		
		
			
				
					
					
						
							143 lines
						
					
					
						
							5.7 KiB
						
					
					
				
			
		
		
	
	
							143 lines
						
					
					
						
							5.7 KiB
						
					
					
				| package com.ynxbd.common.service;
 | |
| 
 | |
| import com.ynxbd.common.bean.enums.MerchantEnum;
 | |
| import com.ynxbd.common.bean.pay.Order;
 | |
| import com.ynxbd.common.bean.pay.PayOutCollect;
 | |
| import com.ynxbd.common.config.OCHelper;
 | |
| import com.ynxbd.common.dao.OutCollectPayDao;
 | |
| import com.ynxbd.common.helper.common.CopyHelper;
 | |
| import com.ynxbd.common.helper.common.JsonHelper;
 | |
| import com.ynxbd.common.helper.http.OkHttpHelper;
 | |
| import com.ynxbd.common.result.Result;
 | |
| import com.ynxbd.common.result.ResultEnum;
 | |
| import com.ynxbd.common.result.ServiceException;
 | |
| import lombok.extern.slf4j.Slf4j;
 | |
| import org.apache.commons.lang3.ObjectUtils;
 | |
| 
 | |
| import java.math.BigDecimal;
 | |
| 
 | |
| @Slf4j
 | |
| public class OutCollectService {
 | |
|     /**
 | |
|      * [外采]扫收款码支付
 | |
|      */
 | |
|     public Order ocPayMicro(Order order, String brCode, String cardNo) {
 | |
|         Order oResult = new Order();
 | |
|         PayOutCollect addInfo = CopyHelper.fatherToChild(order, PayOutCollect.class);
 | |
|         addInfo.setBarCode(brCode);
 | |
|         addInfo.setIdCardNo(cardNo);
 | |
|         addInfo.setPayState(0);
 | |
|         addInfo.setNoticeState(0);
 | |
|         addInfo.setPayWay("2");
 | |
|         boolean isResult = new OutCollectPayDao().insert(addInfo);
 | |
|         oResult.setSuccess(isResult);
 | |
|         return oResult;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * [外采]支付
 | |
|      *
 | |
|      * @param totalFee
 | |
|      */
 | |
|     public void ocPay(String outTradeNo, BigDecimal totalFee, String collectId, String openid, String mid, String name, String cardNo, String patientId, String remark) throws ServiceException {
 | |
|         log.info("collectId={}, mid={}, name={}, cardNo={}, patientId={}, remark={}", collectId, mid, name, cardNo, patientId, remark);
 | |
|         if (ObjectUtils.isEmpty(collectId) || ObjectUtils.isEmpty(mid) || ObjectUtils.isEmpty(name) || ObjectUtils.isEmpty(cardNo)) {
 | |
|             throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
 | |
|         }
 | |
| 
 | |
|         PayOutCollect addInfo = new PayOutCollect();
 | |
|         addInfo.setOutTradeNo(outTradeNo);
 | |
|         addInfo.setTotalFee(totalFee);
 | |
|         addInfo.setMid(mid);
 | |
|         addInfo.setOpenid(openid);
 | |
|         addInfo.setCollectId(collectId);
 | |
|         // --------------------------
 | |
|         addInfo.setName(name);
 | |
|         addInfo.setIdCardNo(cardNo);
 | |
|         addInfo.setPatientId(patientId);
 | |
|         addInfo.setRemark(remark);
 | |
| 
 | |
|         addInfo.setPayWay("3");
 | |
|         addInfo.setPayState(-1);
 | |
|         addInfo.setNoticeState(-1);
 | |
| 
 | |
|         if (!new OutCollectPayDao().insert(addInfo)) {
 | |
|             log.error("[外采]信息预存失败 collectId={}", collectId);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * [外采]回调通知
 | |
|      */
 | |
|     private boolean callback(String bankTransNo, BigDecimal totalFee, String collectId) throws ServiceException {
 | |
|         String resp = OkHttpHelper.get(OCHelper.URL + "/api/Pay/CallBack", map -> {
 | |
|             map.put("collectId", collectId);
 | |
|             map.put("payAmount", totalFee);
 | |
|             map.put("bankTransNo", bankTransNo);
 | |
|         });
 | |
|         log. info("[外采]回调 resp={}", resp);
 | |
|         if (resp == null) {
 | |
|             throw new ServiceException("[外采]回调请求失败");
 | |
|         }
 | |
|         Result result = JsonHelper.parseObject(resp, Result.class);
 | |
|         if (result == null) {
 | |
|             throw new ServiceException("[外采]回调,数据转换失败");
 | |
|         }
 | |
|         Integer code = result.getCode();
 | |
|         if (code == null || code != 200) {
 | |
|             String tip = String.format("[外采]回调异常 code=%s, message=%s, code", code, result.getMessage());
 | |
|             throw new ServiceException(tip);
 | |
|         }
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * [外采]回调通知
 | |
|      */
 | |
|     public void ocPayNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payInfo) throws ServiceException {
 | |
|         OutCollectPayDao ocPayDao = new OutCollectPayDao();
 | |
| 
 | |
|         PayOutCollect ocPay = ocPayDao.selectByOutTradeNo(outTradeNo);
 | |
|         if (ocPay == null) {
 | |
|             throw new ServiceException(ResultEnum.DATA_NOT_FOUND,
 | |
|                     String.format("【%s】[外采]数据库中未找到订单 outTradeNo={%s}, bankTransNo={%s}", merchantEnum.NAME, outTradeNo, bankTransNo));
 | |
|         }
 | |
| 
 | |
|         if (totalFee == null || totalFee.compareTo(BigDecimal.ZERO) == 0) {
 | |
|             throw new ServiceException(ResultEnum.PAY_MONEY_IS_ZERO);
 | |
|         }
 | |
| 
 | |
|         String collectId = ocPay.getCollectId();
 | |
|         if (collectId == null) {
 | |
|             throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
 | |
|         }
 | |
| 
 | |
|         Integer payState = ocPay.getPayState();
 | |
|         Integer noticeState = ocPay.getNoticeState();
 | |
| 
 | |
|         if (payState == null || noticeState == null || payState != -1 || noticeState != -1) { // 状态不明确
 | |
|             throw new ServiceException(ResultEnum.PAY_REPEAT,
 | |
|                     String.format("{%s}[外采]订单已支付 outTradeNo={%s}, bankTransNo={%s}", merchantEnum.NAME, outTradeNo, bankTransNo));
 | |
|         }
 | |
| 
 | |
|         // 更新商户支付状态
 | |
|         if (!ocPayDao.updateMerPaidByOutTradeNo(outTradeNo, bankTransNo)) {
 | |
|             log.info("{} [外采]更新订单失败 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo);
 | |
|         }
 | |
| 
 | |
|         try {
 | |
|             if (!callback(bankTransNo, ocPay.getTotalFee(), collectId)) { // 失败
 | |
|                 return;
 | |
|             }
 | |
|         } catch (ServiceException e) {
 | |
|             ocPayDao.updateNoticeErr(outTradeNo, 500, e.getMessage());
 | |
|             throw e;
 | |
|         }
 | |
| 
 | |
|         if (!ocPayDao.updateNoticeOk(outTradeNo)) {
 | |
|             log.info("{} [外采]更新信息失败 outTradeNo={}, collectId={}", merchantEnum.NAME, outTradeNo, collectId);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |