| 
					
				 | 
			
			
				@@ -10,6 +10,8 @@ import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.entity.StudentPaymentOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.thirdparty.adapay2.Payment; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -19,7 +21,6 @@ import org.springframework.transaction.annotation.Propagation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.huifu.adapay.model.payment.Payment; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dao.SysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dao.TeacherDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dao.TenantEntryActivitiesDao; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -42,7 +43,6 @@ import com.ym.mec.common.entity.HttpResponseResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.service.IdGeneratorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.service.impl.BaseServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.thirdparty.adapay.Pay; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.thirdparty.yqpay.Msg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.thirdparty.yqpay.RsqMsg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.thirdparty.yqpay.YqPayFeignService; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,324 +53,342 @@ import com.ym.mec.util.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantPaymentOrder> implements TenantPaymentOrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private static final Logger logger = LoggerFactory.getLogger(TenantPaymentOrderServiceImpl.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private TenantPaymentOrderDao tenantPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private TenantEntryActivitiesDao tenantEntryActivitiesDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private IdGeneratorService idGeneratorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private PayService payService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private SysConfigDao sysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private TeacherDao teacherDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private SysTenantAccountService sysTenantAccountService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private YqPayFeignService yqPayFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public BaseDAO<Long, TenantPaymentOrder> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return tenantPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public HttpResponseResult createOrder(Integer userId, Integer activitiesId, boolean isContinuePay) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Teacher teacher = teacherDao.get(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (teacher == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("用户信息不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Integer organId = teacher.getTeacherOrganId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (tenantEntryActivities == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("活动不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 判断活动是否有效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (tenantEntryActivities.getDelFlag() == true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("活动已下架"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (date.before(tenantEntryActivities.getStartDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("活动未开始"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (date.after(tenantEntryActivities.getEndDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("活动已结束"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 查询用户订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<TenantPaymentOrder> orderList = tenantPaymentOrderDao.queryByUserIdAndActivitiesId(userId, activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (orderList != null && orderList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (TenantPaymentOrder po : orderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 是否满足条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (tenantEntryActivities.getSuitableUser() == SuitableUser.NEW) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (po.getStatus() == DealStatusEnum.SUCCESS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						throw new BizException("首充优惠活动每个用户限参与一次。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (po.getStatus() == DealStatusEnum.ING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						int i = 35 - DateUtil.minutesBetween(po.getCreateTime(), date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (i <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							throw new BizException("您有支付中的订单出现异常,请联系客服"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						// throw new BizException("您参加的首充活动正在处理中,预计于{}分钟后处理完毕,请稍后。", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (isContinuePay == false) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							HttpResponseResult result = new HttpResponseResult(true, HttpStatus.CONTINUE, "您存在支付中的订单,是否重新付款?", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							// 关闭原订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							po.setStatus(DealStatusEnum.CLOSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							po.setMemo("用户主动关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							po.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							tenantPaymentOrderDao.update(po); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		TenantPaymentOrder tenantPaymentOrder = new TenantPaymentOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setTransMinutes(tenantEntryActivities.getPurchaseMinutes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setGiveMinutes(tenantEntryActivities.getGiveMinutes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setOrderNo(idGeneratorService.generatorId("tenant_payment") + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setType(TenantPaymentType.RECHARGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setExpectAmount(tenantEntryActivities.getDiscountPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setStatus(DealStatusEnum.ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setVersion(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setOrganId(organId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setActivitiesId(activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrderDao.insert(tenantPaymentOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String baseApiUrl = sysConfigDao.findConfigValue("teacher_base_url"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// 分类费用 course,instrument,accessories,other 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, BigDecimal> classFee = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classFee.put("course", BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classFee.put("instrument", BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classFee.put("accessories", BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		classFee.put("other", tenantPaymentOrder.getExpectAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<String, Object> payMap = payService.getPayMap(tenantPaymentOrder.getExpectAmount(), tenantPaymentOrder.getOrderNo(), baseApiUrl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					+ "/api-teacher/teacherOrder/notify", baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					"商户入驻", "商户充值", userId, classFee, organId, "sdaya"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tenantPaymentOrder.setComAmount(routingFee.get("COM")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tenantPaymentOrder.setPerAmount(routingFee.get("PER")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tenantPaymentOrder.setMerNos((String) payMap.get("routingMerNos")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tenantPaymentOrder.setPaymentChannel(PaymentChannelEnum.valueOf(payMap.get("type").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tenantPaymentOrder.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tenantPaymentOrderDao.update(tenantPaymentOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			HttpResponseResult result = new HttpResponseResult(true, HttpStatus.OK, payMap, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("调用支付接口出错", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public boolean paymentForCallback(TenantPaymentOrder tenantPaymentOrder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Integer activitiesId = tenantPaymentOrder.getActivitiesId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrder.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tenantPaymentOrderDao.update(tenantPaymentOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Integer userId = tenantPaymentOrder.getUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (tenantPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (tenantEntryActivities == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				throw new BizException("活动找不到"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 更新账户表信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysTenantAccountService.update(userId, tenantEntryActivities.getPurchaseMinutes() + tenantEntryActivities.getGiveMinutes(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					tenantPaymentOrder.getOrderNo(), TransType.RECHARGE, "", tenantEntryActivities.getDiscountPrice(), ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void queryOrderStatusFromRemote() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			yqPayQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("查询订单状态出现异常"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			adaPayQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("查询订单状态出现异常"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private void yqPayQuery() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "YQPAY"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (payingOrders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<String> orderNoList = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String merOrderNos = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.joining(",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String notifyUrl = ""; // 回调地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> resultMap = new LinkedHashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		resultMap.put("merOrderNoList", merOrderNos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> requestMap = YqPayUtil.getRequestMap(notifyUrl, resultMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		RsqMsg rsqMsg = new RsqMsg(requestMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Msg queryRs = yqPayFeignService.orderQuery(rsqMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		logger.info("支付状态查询结果:{}", queryRs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (queryRs.getCode().equals("88")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 更新订单状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			String[] statusArr = { "0", "1", "7" }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			String responseParameters = queryRs.getResponseParameters(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Map<String, Object>> responseList = JSON.parseObject(responseParameters, List.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (Map<String, Object> response : responseList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<String, Object> rpMap = response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				rpMap.put("channelType", channelType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (orderNoList.contains(rpMap.get("merOrderNo"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					orderNoList.remove(rpMap.get("merOrderNo")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (Arrays.asList(statusArr).contains(rpMap.get("tradeState"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						TenantPaymentOrder order = tenantPaymentOrderDao.findOrderByOrderNo(rpMap.get("merOrderNo").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (order == null || !order.getStatus().equals(DealStatusEnum.ING)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (status.equals(DealStatusEnum.SUCCESS)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							order.setPayTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							Object remarks = rpMap.get("remarks"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if (remarks != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								order.setMemo(remarks.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						order.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						order.setTransNo(rpMap.get("orderNo").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						order.setPaymentBusinessChannel(channelType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						order.setActualAmount(new BigDecimal(rpMap.get("moneyPayed").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						paymentForCallback(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (TenantPaymentOrder po : payingOrders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (orderNoList.contains(po.getOrderNo())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// 超过30分钟的关闭订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						po.setStatus(DealStatusEnum.FAILED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						po.setMemo("超时未支付关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						paymentForCallback(po); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private void adaPayQuery() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (payingOrders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<String> orderNoList = new ArrayList<String>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (TenantPaymentOrder payingOrder : payingOrders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (payingOrder.getTransNo() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				orderNoList.add(payingOrder.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Payment payment = new Pay().queryPayment(payingOrder.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<String, String> rpMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			rpMap.put("merOrderNo", payingOrder.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			rpMap.put("remarks", payment.getReason()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			rpMap.put("orderNo", payment.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			rpMap.put("channelType", payment.getPayChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (payment.getStatus().equals("succeeded")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				rpMap.put("tradeState", "1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (payment.getStatus().equals("failed")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				rpMap.put("tradeState", "0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (payment.getStatus().equals("pending")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				orderNoList.add(payingOrder.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (TenantPaymentOrder po : payingOrders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (orderNoList.contains(po.getOrderNo())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 超过30分钟的关闭订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					po.setStatus(DealStatusEnum.FAILED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					po.setMemo("超时未支付关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					paymentForCallback(po); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public TenantPaymentOrder queryByOrderNo(String orderNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return tenantPaymentOrderDao.findOrderByOrderNo(orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public Object queryTenanPaymentPage(TenantPaymentOrderQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PageInfoOrder<TenantPaymentOrder> pageInfo = new PageInfoOrder<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> params = new HashMap<String, Object>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<TenantPaymentOrder> dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		int count = this.findCount(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			TenantPaymentOrder orderMoneyAmount = tenantPaymentOrderDao.getOrderMoneyAmount(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (orderMoneyAmount != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				pageInfo.setTotalExpectAmount(orderMoneyAmount.getExpectAmount() != null ? orderMoneyAmount.getExpectAmount() : BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				pageInfo.setTotalActualAmount(orderMoneyAmount.getActualAmount() != null ? orderMoneyAmount.getActualAmount() : BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList = tenantPaymentOrderDao.queryPage(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final Logger logger = LoggerFactory.getLogger(TenantPaymentOrderServiceImpl.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private TenantPaymentOrderDao tenantPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private TenantEntryActivitiesDao tenantEntryActivitiesDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IdGeneratorService idGeneratorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private PayService payService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysConfigDao sysConfigDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private TeacherDao teacherDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysTenantAccountService sysTenantAccountService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private YqPayFeignService yqPayFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseDAO<Long, TenantPaymentOrder> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return tenantPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public HttpResponseResult createOrder(Integer userId, Integer activitiesId, boolean isContinuePay) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Teacher teacher = teacherDao.get(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (teacher == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("用户信息不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer organId = teacher.getTeacherOrganId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (tenantEntryActivities == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("活动不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 判断活动是否有效 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (tenantEntryActivities.getDelFlag() == true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("活动已下架"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (date.before(tenantEntryActivities.getStartDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("活动未开始"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (date.after(tenantEntryActivities.getEndDate())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("活动已结束"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 查询用户订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TenantPaymentOrder> orderList = tenantPaymentOrderDao.queryByUserIdAndActivitiesId(userId, activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (orderList != null && orderList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (TenantPaymentOrder po : orderList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 是否满足条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (tenantEntryActivities.getSuitableUser() == SuitableUser.NEW) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (po.getStatus() == DealStatusEnum.SUCCESS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        throw new BizException("首充优惠活动每个用户限参与一次。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (po.getStatus() == DealStatusEnum.ING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        int i = 35 - DateUtil.minutesBetween(po.getCreateTime(), date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (i <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            throw new BizException("您有支付中的订单出现异常,请联系客服"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // throw new BizException("您参加的首充活动正在处理中,预计于{}分钟后处理完毕,请稍后。", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (isContinuePay == false) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            HttpResponseResult result = new HttpResponseResult(true, HttpStatus.CONTINUE, "您存在支付中的订单,是否重新付款?", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            // 关闭原订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            po.setStatus(DealStatusEnum.CLOSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            po.setMemo("用户主动关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            po.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            tenantPaymentOrderDao.update(po); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TenantPaymentOrder tenantPaymentOrder = new TenantPaymentOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setTransMinutes(tenantEntryActivities.getPurchaseMinutes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setGiveMinutes(tenantEntryActivities.getGiveMinutes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setOrderNo(idGeneratorService.generatorId("tenant_payment") + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setType(TenantPaymentType.RECHARGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setExpectAmount(tenantEntryActivities.getDiscountPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setStatus(DealStatusEnum.ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setVersion(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setOrganId(organId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setActivitiesId(activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrderDao.insert(tenantPaymentOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String baseApiUrl = sysConfigDao.findConfigValue("teacher_base_url"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 分类费用 course,instrument,accessories,other 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, BigDecimal> classFee = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classFee.put("course", BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classFee.put("instrument", BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classFee.put("accessories", BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        classFee.put("other", tenantPaymentOrder.getExpectAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, Object> payMap = payService.getPayMap(tenantPaymentOrder.getExpectAmount(), tenantPaymentOrder.getOrderNo(), baseApiUrl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            + "/api-teacher/teacherOrder/notify", baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "商户入驻", "商户充值", userId, classFee, organId, "sdaya"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenantPaymentOrder.setComAmount(routingFee.get("COM")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenantPaymentOrder.setPerAmount(routingFee.get("PER")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenantPaymentOrder.setMerNos((String) payMap.get("routingMerNos")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenantPaymentOrder.setPaymentChannel(PaymentChannelEnum.valueOf(payMap.get("type").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenantPaymentOrder.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenantPaymentOrderDao.update(tenantPaymentOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            HttpResponseResult result = new HttpResponseResult(true, HttpStatus.OK, payMap, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("调用支付接口出错", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean paymentForCallback(TenantPaymentOrder tenantPaymentOrder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer activitiesId = tenantPaymentOrder.getActivitiesId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrder.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantPaymentOrderDao.update(tenantPaymentOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer userId = tenantPaymentOrder.getUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (tenantPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (tenantEntryActivities == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("活动找不到"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 更新账户表信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sysTenantAccountService.update(userId, tenantEntryActivities.getPurchaseMinutes() + tenantEntryActivities.getGiveMinutes(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tenantPaymentOrder.getOrderNo(), TransType.RECHARGE, "", tenantEntryActivities.getDiscountPrice(), ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void queryOrderStatusFromRemote() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            yqPayQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("查询订单状态出现异常"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            adaPayQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("查询订单状态出现异常"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void yqPayQuery() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "YQPAY"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (payingOrders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> orderNoList = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String merOrderNos = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.joining(",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String notifyUrl = ""; // 回调地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> resultMap = new LinkedHashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resultMap.put("merOrderNoList", merOrderNos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> requestMap = YqPayUtil.getRequestMap(notifyUrl, resultMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RsqMsg rsqMsg = new RsqMsg(requestMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Msg queryRs = yqPayFeignService.orderQuery(rsqMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("支付状态查询结果:{}", queryRs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (queryRs.getCode().equals("88")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 更新订单状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] statusArr = {"0", "1", "7"}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String responseParameters = queryRs.getResponseParameters(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map<String, Object>> responseList = JSON.parseObject(responseParameters, List.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Map<String, Object> response : responseList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<String, Object> rpMap = response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rpMap.put("channelType", channelType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (orderNoList.contains(rpMap.get("merOrderNo"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orderNoList.remove(rpMap.get("merOrderNo")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Arrays.asList(statusArr).contains(rpMap.get("tradeState"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        TenantPaymentOrder order = tenantPaymentOrderDao.findOrderByOrderNo(rpMap.get("merOrderNo").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (order == null || !order.getStatus().equals(DealStatusEnum.ING)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (status.equals(DealStatusEnum.SUCCESS)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            order.setPayTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            order.setActualAmount(new BigDecimal((String) rpMap.get("payAmount"))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Object remarks = rpMap.get("remarks"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (remarks != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                order.setMemo(remarks.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        order.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        order.setTransNo(rpMap.get("orderNo").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        order.setPaymentBusinessChannel(channelType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        paymentForCallback(order); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (TenantPaymentOrder po : payingOrders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (orderNoList.contains(po.getOrderNo())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 超过30分钟的关闭订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        po.setStatus(DealStatusEnum.FAILED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        po.setMemo("超时未支付关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        paymentForCallback(po); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void adaPayQuery() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (payingOrders.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> orderNoList = new ArrayList<String>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (TenantPaymentOrder payingOrder : payingOrders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (payingOrder.getTransNo() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderNoList.add(payingOrder.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String channelType = (String) payment.get("pay_channel"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String payStatus = (String) payment.get("status"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String transNo = (String) payment.get("id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String memo = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (payment.containsKey("error_msg")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                memo = (String) payment.get("error_msg"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DealStatusEnum status = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (payStatus.equals("succeeded")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                status = DealStatusEnum.SUCCESS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                payingOrder.setActualAmount(new BigDecimal((String) payment.get("pay_amt"))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (payStatus.equals("failed")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                status = DealStatusEnum.FAILED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (status != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                payingOrder.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                payingOrder.setTransNo(transNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                payingOrder.setPaymentBusinessChannel(channelType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                payingOrder.setMemo(memo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paymentForCallback(payingOrder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (status.equals("pending")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orderNoList.add(payingOrder.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (TenantPaymentOrder po : payingOrders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (orderNoList.contains(po.getOrderNo())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 超过30分钟的关闭订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    po.setStatus(DealStatusEnum.FAILED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    po.setMemo("超时未支付关闭"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    paymentForCallback(po); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public TenantPaymentOrder queryByOrderNo(String orderNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return tenantPaymentOrderDao.findOrderByOrderNo(orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Object queryTenanPaymentPage(TenantPaymentOrderQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PageInfoOrder<TenantPaymentOrder> pageInfo = new PageInfoOrder<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> params = new HashMap<String, Object>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TenantPaymentOrder> dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int count = this.findCount(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TenantPaymentOrder orderMoneyAmount = tenantPaymentOrderDao.getOrderMoneyAmount(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (orderMoneyAmount != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pageInfo.setTotalExpectAmount(orderMoneyAmount.getExpectAmount() != null ? orderMoneyAmount.getExpectAmount() : BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pageInfo.setTotalActualAmount(orderMoneyAmount.getActualAmount() != null ? orderMoneyAmount.getActualAmount() : BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList = tenantPaymentOrderDao.queryPage(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |