|
|
@@ -6,17 +6,28 @@ import cn.com.taiji.core.entity.basic.QtkCustomerInfo; |
|
|
|
import cn.com.taiji.core.entity.basic.QtkServiceHall; |
|
|
|
import cn.com.taiji.core.entity.basic.QtkServicehallLocation; |
|
|
|
import cn.com.taiji.core.entity.basic.QtkVehicleInfo; |
|
|
|
import cn.com.taiji.core.entity.comm.CommonPayConfig; |
|
|
|
import cn.com.taiji.core.entity.dict.issue.OrderPayStatus; |
|
|
|
import cn.com.taiji.core.entity.dict.issue.TransactionBizType; |
|
|
|
import cn.com.taiji.core.entity.dict.pay.PayChannelType; |
|
|
|
import cn.com.taiji.core.entity.issue.IssueOrderPay; |
|
|
|
import cn.com.taiji.core.entity.issue.IssueOrderinfo; |
|
|
|
import cn.com.taiji.core.entity.issue.IssueOrderinfoExt; |
|
|
|
import cn.com.taiji.core.entity.issue.TransactionStatus; |
|
|
|
import cn.com.taiji.core.entity.user.AccountInfo; |
|
|
|
import cn.com.taiji.core.manager.tools.MyTimeTools; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV2Request; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV2Response; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Request; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Response; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ods.ois.issue.OisOrderSaveRequest; |
|
|
|
import cn.com.taiji.core.repo.jpa.basic.QtkCustomerInfoRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.basic.QtkServicehallLocationRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.basic.QtkServicehallRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.basic.QtkVehicleInfoRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.comm.CommonPayConfigRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.issue.IssueOrderPayRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.issue.IssueOrderinfoExtRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.issue.IssueOrderinfoRepo; |
|
|
|
import cn.com.taiji.core.repo.jpa.issue.IssueProductRepo; |
|
|
@@ -26,9 +37,13 @@ import cn.com.taiji.ias.dict.DataType; |
|
|
|
import cn.com.taiji.ias.manager.AbstractHandleManager; |
|
|
|
import cn.com.taiji.ias.manager.GlobalTransactionManager; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.awt.geom.Point2D; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.time.format.DateTimeFormatter; |
|
|
|
import java.util.List; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>> |
|
|
|
extends AbstractHandleManager<T> { |
|
|
@@ -64,6 +79,11 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>> |
|
|
|
protected AccountInfoRepo accountInfoRepo; |
|
|
|
@Autowired |
|
|
|
protected IssueProductRepo issueProductRepo; |
|
|
|
@Autowired |
|
|
|
protected IssueOrderPayRepo orderPayRepo; |
|
|
|
@Autowired |
|
|
|
protected CommonPayConfigRepo payConfigRepo; |
|
|
|
|
|
|
|
|
|
|
|
public AbstractOrderManager(DataType dataType) { |
|
|
|
super(dataType); |
|
|
@@ -222,4 +242,88 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>> |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Transactional(rollbackFor = {Exception.class}) |
|
|
|
protected List<IssueOrderPay> paymentDetections(String orderNo) throws ServiceHandleException { |
|
|
|
List<IssueOrderPay> pays = orderPayRepo.listByOrderNo(orderNo); |
|
|
|
if (!isEmpty(pays)) { |
|
|
|
throw newBusinessException("订单支付信息不存在"); |
|
|
|
} |
|
|
|
for (IssueOrderPay pay : pays) { |
|
|
|
if (OrderPayStatus.UNPAY.equals(pay.getPayStatus()) || OrderPayStatus.PAYING.equals(pay.getPayStatus())) { |
|
|
|
paymentDetection(pay); |
|
|
|
} |
|
|
|
} |
|
|
|
return pays; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 完成支付查询,并更新支付状态 |
|
|
|
*/ |
|
|
|
private void paymentDetection(IssueOrderPay pay) throws ServiceHandleException { |
|
|
|
if (!hasText(pay.getExternalOrderNo())) { |
|
|
|
return; |
|
|
|
} |
|
|
|
CommonPayConfig payConfig = payConfigRepo.findById(pay.getPayConfigId()).orElse(null); |
|
|
|
if (PayChannelType.WEIXINPAY.equals(payConfig.getPayChannelType())) { |
|
|
|
if (payConfig == null) |
|
|
|
throw newBusinessException("支付配置信息不存在"+pay.getPayConfigId()); |
|
|
|
switch (payConfig.getWxPayVersion()) { |
|
|
|
case 2: |
|
|
|
queryV2(pay, payConfig); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
queryV3(pay, payConfig); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw newBusinessException("支付版本不存在"+payConfig.getWxPayVersion()); |
|
|
|
} |
|
|
|
try { |
|
|
|
TimeUnit.MILLISECONDS.sleep(200); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
logger.error("", e); |
|
|
|
} |
|
|
|
} else { |
|
|
|
throw newBusinessException("当前不支持除微信外的其他支付方式"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void queryV3(IssueOrderPay pay, CommonPayConfig payConfig) throws ServiceHandleException { |
|
|
|
AtsQueryPayResultV3Request v3Request = new AtsQueryPayResultV3Request(); |
|
|
|
v3Request.setCreateType(payConfig.getWxServiceType()); |
|
|
|
v3Request.setExternalOrderNo(pay.getExternalOrderNo()); |
|
|
|
// v3Request.setTradeType(TradeType.valueOf(payConfig.getPayProductType())); |
|
|
|
v3Request.setMchid(payConfig.getWxMchId()); |
|
|
|
v3Request.setApiV3Key(payConfig.getWxApiv3key()); |
|
|
|
v3Request.setPrivateKey(payConfig.getWxPrivatekey()); |
|
|
|
v3Request.setSerialNo(payConfig.getWxSerialNo()); |
|
|
|
// v2Request.setSubMchId(payConfig.get); |
|
|
|
AtsQueryPayResultV3Response res = jsonPostRepeat(v3Request); |
|
|
|
if (OrderPayStatus.SUCCESS.equals(res.getTradeState())) { |
|
|
|
pay.setPayStatus(OrderPayStatus.SUCCESS); |
|
|
|
pay.setPayTime(MyTimeTools.strToTime(res.getSuccessTime(), DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss"))); |
|
|
|
pay.setUpdateTime(LocalDateTime.now()); |
|
|
|
pay.setExternalOrderNo(res.getTransactionId()); |
|
|
|
pay.setPayResult(res.toJson()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void queryV2(IssueOrderPay pay, CommonPayConfig payConfig) throws ServiceHandleException { |
|
|
|
AtsQueryPayResultV2Request v2Request = new AtsQueryPayResultV2Request(); |
|
|
|
v2Request.setCreateType(payConfig.getWxServiceType()); |
|
|
|
v2Request.setOutTradeNo(pay.getExternalOrderNo()); |
|
|
|
v2Request.setAppId(payConfig.getWxAppId()); |
|
|
|
v2Request.setMchId(payConfig.getWxMchId()); |
|
|
|
// v2Request.setSubAppId(payConfig.gets); |
|
|
|
// v2Request.setSubMchId(payConfig.get); |
|
|
|
AtsQueryPayResultV2Response res = jsonPostRepeat(v2Request); |
|
|
|
if (OrderPayStatus.SUCCESS.equals(res.getTradeState())) { |
|
|
|
pay.setPayStatus(OrderPayStatus.SUCCESS); |
|
|
|
pay.setPayTime(MyTimeTools.strToTime(res.getTimeEnd(), DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); |
|
|
|
pay.setUpdateTime(LocalDateTime.now()); |
|
|
|
pay.setExternalOrderNo(res.getTransactionId()); |
|
|
|
pay.setPayResult(res.toJson()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |