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.
		
		
		
		
			
				
					144 lines
				
				5.7 KiB
			
		
		
			
		
	
	
					144 lines
				
				5.7 KiB
			| 
											3 years ago
										 | 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);
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | }
 |