|
@@ -331,8 +331,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel) {
|
|
|
- return studentPaymentOrderDao.findOrdersByStatus(status, paymentChannel);
|
|
|
+ public List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status) {
|
|
|
+ return studentPaymentOrderDao.findOrdersByStatus(status);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -342,14 +342,14 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
|
|
|
@Override
|
|
|
public void queryOrderStatus() throws Exception {
|
|
|
- yqPayQuery(null);
|
|
|
+ //yqPayQuery(null);
|
|
|
adaPayQuery(null);
|
|
|
reConfirmOrder(null, null);
|
|
|
}
|
|
|
|
|
|
private void yqPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
|
|
|
if (payingOrders == null) {
|
|
|
- payingOrders = findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
|
|
|
+ payingOrders = findOrdersByStatus(DealStatusEnum.ING);
|
|
|
}
|
|
|
if (payingOrders.size() == 0) {
|
|
|
return;
|
|
@@ -395,7 +395,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
|
|
|
private void adaPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
|
|
|
if (payingOrders == null) {
|
|
|
- payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
|
|
|
+ payingOrders = findOrdersByStatus(DealStatusEnum.ING);
|
|
|
}
|
|
|
|
|
|
Date date = new Date();
|
|
@@ -404,9 +404,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- Map<Integer,HfMerchantConfig> payConfigMap = new HashMap<Integer, HfMerchantConfig>();
|
|
|
- HfMerchantConfig hfMerchantConfig = null;
|
|
|
-
|
|
|
List<String> orderNoList = new ArrayList<String>();
|
|
|
|
|
|
for (StudentPaymentOrder payingOrder : payingOrders) {
|
|
@@ -423,29 +420,41 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- updateOrderStatus(date, payConfigMap, payingOrder,true);
|
|
|
+ updateOrderStatus(date, payingOrder,true);
|
|
|
}
|
|
|
closeOrders(orderNoList);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception {
|
|
|
- if (payConfigMap == null) {
|
|
|
- throw new BizException("payConfigMap 不能为空");
|
|
|
- }
|
|
|
- HfMerchantConfig hfMerchantConfig;
|
|
|
- hfMerchantConfig = payConfigMap.get(payingOrder.getTenantId());
|
|
|
+ public OrderCancelModel updateOrderStatus(Date date, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception {
|
|
|
+
|
|
|
+ HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId(), payingOrder.getPaymentChannel());
|
|
|
if(hfMerchantConfig == null){
|
|
|
- hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId(), payingOrder.getPaymentChannel());
|
|
|
- if(hfMerchantConfig == null){
|
|
|
- throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
|
|
|
- }
|
|
|
- payConfigMap.put(payingOrder.getTenantId(), hfMerchantConfig);
|
|
|
+ throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
|
|
|
}
|
|
|
+
|
|
|
+ PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(payingOrder.getPaymentChannel());
|
|
|
+
|
|
|
OrderCancelModel model = new OrderCancelModel();
|
|
|
+ Map<String, Object> payment = new HashMap<String, Object>();
|
|
|
|
|
|
- Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
|
|
|
+ if(paymentChannel == PaymentChannelEnum.ADAPAY) {
|
|
|
+ payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
|
|
|
+ }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
|
|
|
+ OrderQueryYopQueryOrderResDTOResult orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), payingOrder.getMerNos(), payingOrder.getOrderNo());
|
|
|
+ payment.put("pay_channel", orderInfo.getChannel());
|
|
|
+
|
|
|
+ if(StringUtils.equals("SUCCESS", orderInfo.getStatus())) {
|
|
|
+ payment.put("status", "succeeded");
|
|
|
+ }else if(StringUtils.equals("FAIL", orderInfo.getStatus()) || StringUtils.equals("TIME_OUT", orderInfo.getStatus()) || StringUtils.equals("CLOSE", orderInfo.getStatus())) {
|
|
|
+ payment.put("status", "failed");
|
|
|
+ }
|
|
|
+ payment.put("error_msg", orderInfo.getFailReason());
|
|
|
+ }else {
|
|
|
+ throw new BizException("[{}]支付渠道不支持", payingOrder.getPaymentChannel());
|
|
|
+ }
|
|
|
+
|
|
|
LOGGER.info("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
|
|
|
|
|
|
Map<String, String> rpMap = new HashMap<>();
|
|
@@ -573,7 +582,12 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
throw new BizException("机构[{}]汇付商户信息找不到", order.getTenantId());
|
|
|
}
|
|
|
|
|
|
+ StudentPaymentRouteOrder studentPaymentRouteOrder = null;
|
|
|
+
|
|
|
if(paymentChannel == PaymentChannelEnum.ADAPAY) {
|
|
|
+
|
|
|
+ List<Map<String, Object>> divMembers = new ArrayList<>();
|
|
|
+
|
|
|
for (StudentPaymentRouteOrder routeOrder : routeOrders) {
|
|
|
Map<String, Object> divMember = new HashMap<>();
|
|
|
divMember.put("member_id", routeOrder.getMerNo());//分佣账户
|
|
@@ -582,24 +596,41 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
|
|
|
divMember.put("member_id", 0);
|
|
|
}
|
|
|
- List<Map<String, Object>> divMembers = new ArrayList<>();
|
|
|
divMembers.add(divMember);
|
|
|
-
|
|
|
- Map<String, Object> confirm = new HashMap<>();
|
|
|
- confirm.put("payment_id", order.getTransNo());
|
|
|
- confirm.put("order_no", idGeneratorService.generatorId("payment"));
|
|
|
- confirm.put("confirm_amt", routeOrder.getRouteAmount());
|
|
|
- confirm.put("div_members", divMembers);
|
|
|
- try {
|
|
|
- Map<String, Object> map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
|
|
|
- LOGGER.info("分账信息返回:{}", map);
|
|
|
- routeOrder.setServiceFee(new BigDecimal(map.get("fee_amt").toString()));
|
|
|
- routeOrder.setUpdateTime(date);
|
|
|
- studentPaymentRouteOrderDao.update(routeOrder);
|
|
|
- } catch (Exception e) {
|
|
|
- continue;
|
|
|
- }
|
|
|
}
|
|
|
+
|
|
|
+ Map<String, Object> confirm = new HashMap<>();
|
|
|
+ confirm.put("payment_id", order.getTransNo());
|
|
|
+ confirm.put("order_no", idGeneratorService.generatorId("payment"));
|
|
|
+ confirm.put("confirm_amt", order.getActualAmount());
|
|
|
+ confirm.put("div_members", divMembers);
|
|
|
+
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ try {
|
|
|
+ map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
|
|
|
+ LOGGER.info("分账信息返回:{}", map);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new BizException("调用汇付分账接口出现异常", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal totalFee = new BigDecimal(map.get("fee_amt").toString());
|
|
|
+ BigDecimal tmpFee = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ for(int i = 0; i < routeOrders.size(); i++) {
|
|
|
+ studentPaymentRouteOrder = routeOrders.get(i);
|
|
|
+
|
|
|
+
|
|
|
+ if(i + 1 == routeOrders.size()) {
|
|
|
+ studentPaymentRouteOrder.setServiceFee(totalFee.subtract(tmpFee));
|
|
|
+ }else {
|
|
|
+ studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().multiply(totalFee).divide(order.getActualAmount(), 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ tmpFee = tmpFee.add(studentPaymentRouteOrder.getServiceFee());
|
|
|
+ }
|
|
|
+ studentPaymentRouteOrder.setUpdateTime(date);
|
|
|
+
|
|
|
+ studentPaymentRouteOrderDao.update(studentPaymentRouteOrder);
|
|
|
+ }
|
|
|
+
|
|
|
}else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
|
|
|
|
|
|
ApplyRequest request = new ApplyRequest();
|
|
@@ -609,7 +640,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
request.setUniqueOrderNo(order.getTransNo());
|
|
|
request.setDivideRequestId(idGeneratorService.generatorId("payment") + "");
|
|
|
|
|
|
- OrderQueryYopQueryOrderResDTOResult orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), order.getOrderNo());
|
|
|
+ OrderQueryYopQueryOrderResDTOResult orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), order.getMerNos() , order.getOrderNo());
|
|
|
if(orderInfo == null) {
|
|
|
throw new BizException("[{}][{}]订单查询失败", paymentChannel, order.getOrderNo());
|
|
|
}
|
|
@@ -617,34 +648,36 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
|
|
|
Map<String,String> divides = new HashMap<String, String>();
|
|
|
|
|
|
- StudentPaymentRouteOrder routeOrder = null;
|
|
|
BigDecimal divideAmount = BigDecimal.ZERO;
|
|
|
BigDecimal dividedAmount = BigDecimal.ZERO;
|
|
|
for (int i = 0; i < routeOrders.size(); i++) {
|
|
|
|
|
|
- routeOrder = routeOrders.get(i);
|
|
|
+ studentPaymentRouteOrder = routeOrders.get(i);
|
|
|
|
|
|
- divides.put("ledgerNo", routeOrder.getMerNo());
|
|
|
+ divides.put("ledgerNo", studentPaymentRouteOrder.getMerNo());
|
|
|
|
|
|
if(i + 1 == routeOrders.size()) {
|
|
|
divideAmount = splitAmount.subtract(dividedAmount);
|
|
|
divides.put("amount", divideAmount.toPlainString());
|
|
|
}else {
|
|
|
- divideAmount = routeOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ divideAmount = studentPaymentRouteOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
divides.put("amount", divideAmount.toPlainString());
|
|
|
}
|
|
|
dividedAmount = dividedAmount.add(divideAmount);
|
|
|
|
|
|
- routeOrder.setServiceFee(routeOrder.getRouteAmount().subtract(divideAmount));
|
|
|
- routeOrder.setUpdateTime(date);
|
|
|
-
|
|
|
- studentPaymentRouteOrderDao.update(routeOrder);
|
|
|
+ studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().subtract(divideAmount));
|
|
|
+ studentPaymentRouteOrder.setUpdateTime(date);
|
|
|
}
|
|
|
request.setDivideDetail(JSON.toJSONString(divides));
|
|
|
request.getRequestConfig().setAppKey(hfMerchantConfig.getAppId());
|
|
|
|
|
|
ApplyYopOrderDivideResDTOResult result = yeepayPaymentService.divide(request);
|
|
|
LOGGER.info("分账信息返回:{}", JSON.toJSONString(result));
|
|
|
+
|
|
|
+ for(StudentPaymentRouteOrder spro : routeOrders) {
|
|
|
+
|
|
|
+ studentPaymentRouteOrderDao.update(spro);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return true;
|