admin
2020-07-14 eec7e789a87863c25d92c10ad5dfc22ad80c448d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.yeshi.fanli.service.manger.alipay;
 
import javax.annotation.Resource;
 
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.service.inter.user.UserInfoService;
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;
 
    @Resource
    private UserInfoService userInfoService;
    
    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, "创建订单信息失败");
 
        SystemEnum system=userInfoService.getUserSystem(uid);
        
        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.getValue(ConfigKeyEnum.cloudAlipayReturnLink.getKey(),system) +"?id=" +cloudOrder.getId());
        payDTO.setNotifyUrl(configService.getValue(ConfigKeyEnum.cloudAlipayNotifyLink.getKey(),system) +"?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);
        }
    }
     
}