yonge 2 years ago
parent
commit
b4900172f2

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -120,7 +120,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @param status
      * @return
      */
-    List<StudentPaymentOrder> findOrdersByStatus(@Param("status") DealStatusEnum status, @Param("paymentChannel") String paymentChannel);
+    List<StudentPaymentOrder> findOrdersByStatus(@Param("status") DealStatusEnum status);
 
     /**
      * 查询支付中超时的订单

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -83,7 +83,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @param status
      * @return
      */
-    List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel);
+    List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status);
 
     /**
      * 查询支付中超时的订单
@@ -102,12 +102,11 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      *  检查并修改订单状态
      *
      * @param date
-     * @param payConfigMap
      * @param payingOrder
      * @param checkTime
      * @return
      */
-    OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception;
+    OrderCancelModel updateOrderStatus(Date date, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception;
 
     //退优惠券和余额
     void quitCouponAndBalance(StudentPaymentOrder order);

+ 6 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -139,6 +139,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         signParams.put("orderSubject", param.getOrderSubject());
         signParams.put("orderBody", param.getOrderBody());
         signParams.put("wxAppId", hfMerchantConfig.getWxAppId());
+        signParams.put("alipayAppId", hfMerchantConfig.getAlipayAppId());
         String originalStr = JSONObject.toJSONString(signParams);
         String newSign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
         if (!newSign.equals(param.getSign())) {
@@ -234,6 +235,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         }
         
         Map<String, Object> payment = new HashMap<String, Object>();
+        String transNo = null;
         
         PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(payParam.getPayerName());
         
@@ -248,6 +250,8 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 	        //向第三方发起支付,获取第三方的支付的信息
 	        payment = Payment.executePayment(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentParams);
 	        
+	        transNo = (String) payment.get("id");
+	        
 			break;
 		case YEEPAY:
 			
@@ -279,13 +283,14 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 			
 			payment = yeepayPaymentService.prePay(request);
 			
+			transNo = (String) payment.get("uniqueOrderNo");
+			
 			break;
 
 		default:
 			break;
 		}
         log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
-        String transNo = (String) payment.get("id");
         //修改流水
         setTransNoByApply(transNo, clazz, setOption, action);
 

+ 4 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -134,12 +134,8 @@ public class PayServiceImpl implements PayService {
             
             Map<String, Object> unionPay = new HashMap<>();
             Map<String, Object> payMap = null;
-            
-            if(paymentChannel == PaymentChannelEnum.ADAPAY) {
-            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
-            }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
-            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
-            }
+
+        	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
             
             unionPay.put("orderNo", orderNo);
             unionPay.put("type", paymentChannel.getCode());
@@ -186,12 +182,8 @@ public class PayServiceImpl implements PayService {
 	            
 	            Map<String, Object> unionPay = new HashMap<>();
 	            Map<String, Object> payMap = null;
-	            
-	            if(paymentChannel == PaymentChannelEnum.ADAPAY) {
-	            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
-	            }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
-	            	
-	            }
+
+            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
 
 	            unionPay.put("orderNo", orderNo);
 	            unionPay.put("type", paymentChannel.getCode());

+ 79 - 46
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -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;

+ 0 - 1
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -598,7 +598,6 @@
         SELECT *
         FROM student_payment_order
         WHERE status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-          AND payment_channel_ = #{paymentChannel}
     <!--  商城订单由商城控制订单超时      -->
         and group_type_ != 'MALL_SELL' and type_ != 'MALL_BUY'
     </select>

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -548,7 +548,7 @@ public class StudentOrderController extends BaseController {
         if (!profiles.equals("dev") && !profiles.equals("test")) {
             return failed("非法操作");
         }
-        List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+        List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING);
 
         String[] statusArr = {"0", "1", "7"};
         for (StudentPaymentOrder payingOrder : payingOrders) {

+ 1 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -135,6 +135,7 @@ public class Payment {
         paymentParams.put("orderSubject", orderSubject);
         paymentParams.put("orderBody", orderBody);
         paymentParams.put("wxAppId", hfMerchantConfig.getWxAppId());
+        paymentParams.put("alipayAppId", hfMerchantConfig.getAlipayAppId());
 
         String originalStr = JSONObject.toJSONString(paymentParams);
         String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java

@@ -45,10 +45,10 @@ public class YeepayPaymentService {
 		return JSON.parseObject(resp, Map.class);
 	}
 
-	public OrderQueryYopQueryOrderResDTOResult queryOrder(String appKey, String merchantNo, String orderNo) {
+	public OrderQueryYopQueryOrderResDTOResult queryOrder(String appKey, String parentMerchantNo, String merchantNo, String orderNo) {
 		OrderQueryRequest request = new OrderQueryRequest();
 		request.getRequestConfig().setAppKey(appKey);
-		request.setParentMerchantNo(merchantNo);
+		request.setParentMerchantNo(parentMerchantNo);
 		request.setMerchantNo(merchantNo);
 		request.setOrderId(orderNo);