package com.yeshi.fanli.service.manger.alipay;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.alipay.api.response.AlipayTradeQueryResponse;
|
import com.yeshi.fanli.dto.AlipayTradeWapPayDTO;
|
import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum;
|
import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
|
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.exception.user.cloud.UserCloudException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGroupService;
|
import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService;
|
import com.yeshi.fanli.service.inter.user.cloud.UserCloudOrderService;
|
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.alipay.AlipayApi;
|
|
/**
|
* 云发单支付管理
|
* @author Administrator
|
*
|
*/
|
@Component
|
public class UserCloudAlipayManager {
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private UserCloudService userCloudService;
|
|
@Resource
|
private UserCloudOrderService userCloudOrderService;
|
|
@Resource
|
private UserCloudGroupService userCloudGroupService;
|
|
@Resource
|
private UserCloudManageService userCloudManageService;
|
|
public static final String TRADE_INDEX = "yufadan-";
|
|
|
|
/**
|
* 创建支付订单
|
* @param uid
|
* @param type
|
* @return
|
* @throws Exception
|
* @throws UserCloudException
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public String getAlipayForm(Long uid, String type) throws Exception, UserCloudException{
|
CloudOrderMenuEnum menuEnum = CloudOrderMenuEnum.getMenuEnum(type);
|
if (menuEnum == null)
|
throw new UserCloudException(1, "套餐类型不匹配");
|
|
UserCloud userCloud = userCloudService.getLastByUid(uid);
|
if (userCloud != null) {
|
// 续费
|
boolean renew = false;
|
if (userCloud.getEndTime().getTime() > java.lang.System.currentTimeMillis())
|
renew = true;
|
// 验证套餐是否相同
|
if (renew && userCloud.getRobotType() != menuEnum.getRobotType()) {
|
LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "]已有其他云发单套餐还未结束");
|
throw new UserCloudException(1, "已有其他云发单套餐还未结束");
|
}
|
}
|
|
// 订单信息
|
UserCloudOrder cloudOrder = userCloudOrderService.addCloudOrder(uid, type);
|
if (cloudOrder == null || cloudOrder.getId() == null)
|
throw new UserCloudException(1, "创建订单信息失败");
|
|
AlipayTradeWapPayDTO payDTO = new AlipayTradeWapPayDTO();
|
payDTO.setSubject("云发单充值");
|
payDTO.setSellerId(Constant.alipayWapConfig.getSellerId());
|
payDTO.setOutTradeNo(TRADE_INDEX + cloudOrder.getId());
|
payDTO.setProductCode(type);
|
payDTO.setTotalAmount(menuEnum.getMoney() + "");
|
payDTO.setTimeoutExpress("30m");
|
payDTO.setReturnUrl(configService.get(ConfigKeyEnum.cloudAlipayReturnLink.getKey()) +"?id=" +cloudOrder.getId());
|
payDTO.setNotifyUrl(configService.get(ConfigKeyEnum.cloudAlipayNotifyLink.getKey()) +"?id=" +cloudOrder.getId());
|
|
// 获取支付form
|
return AlipayApi.tradeWapPayRequest(payDTO);
|
}
|
|
|
/**
|
* 查询订单交易是否支付成功
|
* @param orderId
|
* @throws Exception
|
*/
|
public void tradeQueryByOrderId(Long orderId) throws Exception {
|
boolean result = false;
|
AlipayTradeQueryResponse response = AlipayApi.tradeQuery(TRADE_INDEX + orderId, null, null, null);
|
if(response != null && response.isSuccess()){
|
// 相应成功
|
if ("TRADE_SUCCESS".equals(response.getTradeStatus())) {
|
result = true;
|
} else if ("TRADE_FINISHED".equals(response.getTradeStatus())) {
|
result = true; // (交易结束,不可退款)
|
}
|
}
|
|
// 支付成功
|
if (result) {
|
userCloudOrderService.cloudPayCloudSuccess(orderId);
|
}
|
}
|
|
}
|