OrangeHeapService.java 10.5 KB
Newer Older
Cheng C Yang's avatar
Cheng C Yang committed
1
package pwc.taxtech.atms.web.service;
Cheng's avatar
Cheng committed
2

sam.x.wang's avatar
sam.x.wang committed
3
import com.alibaba.fastjson.JSONObject;
Cheng's avatar
Cheng committed
4 5 6 7 8 9 10 11
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
sam.x.wang's avatar
sam.x.wang committed
12 13
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
Cheng's avatar
Cheng committed
14
import org.springframework.stereotype.Service;
sam.x.wang's avatar
sam.x.wang committed
15 16 17
import org.springframework.util.Assert;
import pwc.taxtech.atms.common.DDUserInfoRes;
import pwc.taxtech.atms.common.HttpUtil;
Cheng's avatar
Cheng committed
18 19
import pwc.taxtech.atms.web.OrangeHeapConfig;
import javax.annotation.Resource;
sam.x.wang's avatar
sam.x.wang committed
20 21 22
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
Cheng's avatar
Cheng committed
23
import java.io.IOException;
sam.x.wang's avatar
sam.x.wang committed
24 25
import java.util.HashMap;
import java.util.Map;
Cheng's avatar
Cheng committed
26 27 28
import java.util.Optional;

@Service
Cheng's avatar
Cheng committed
29
public class OrangeHeapService {
Cheng's avatar
Cheng committed
30 31 32 33

    @Resource
    private OrangeHeapConfig systemConfig;

sam.x.wang's avatar
sam.x.wang committed
34 35 36
    private static Logger logger = LoggerFactory.getLogger(OrangeHeapService.class);

    @Autowired
sam.x.wang's avatar
sam.x.wang committed
37
    private HttpServletRequest request;
sam.x.wang's avatar
sam.x.wang committed
38 39

    @Autowired
sam.x.wang's avatar
sam.x.wang committed
40
    private HttpServletResponse response;
sam.x.wang's avatar
sam.x.wang committed
41 42 43 44 45 46 47 48 49 50

    @Value("${get_user_info_url}")
    private String getUserInfoUrl;

    @Value("${app_id}")
    private String appId;

    @Value("${app_key}")
    private String appKey;

Cheng's avatar
Cheng committed
51 52 53 54 55

    public Optional<String> getTicket(String username) {
        CloseableHttpClient httpClient = null;
        try {
            String ticketUrl = String.format(systemConfig.getTableauGetTicket(), username);
sam.x.wang's avatar
sam.x.wang committed
56
            logger.info("进去获取tableau的url"+ticketUrl);
Cheng's avatar
Cheng committed
57 58 59 60
            httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(ticketUrl);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            String response = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8");
sam.x.wang's avatar
sam.x.wang committed
61
            logger.info("获取tableau的结果"+response);
Cheng's avatar
Cheng committed
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
            return StringUtils.equals(response, "-1") ? Optional.empty() : Optional.of(response);
        } catch (Exception e) {
            logger.error("getTicket error.", e);
        } finally {
            if (null != httpClient) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    logger.error("close httpClient error.", e);
                }
            }
        }
        return Optional.empty();
    }

Cheng C Yang's avatar
Cheng C Yang committed
77 78 79 80 81 82 83 84 85
    //税种未返还税金
//    public Optional<String> getTableauTaxCategoryUnreturnedTax() {
//        Optional<String> optional = Optional.of("admin");
//        return optional.map(s -> String.format(systemConfig.getTableauTaxCategoryUnreturnedTax(),
//                getTicket(s).orElse(StringUtils.EMPTY)));
//    }


    public Optional<String> getTableauTaxCategoryUnreturnedTax() {
sam.x.wang's avatar
sam.x.wang committed
86
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
87 88
        return optional.map(s -> String.format(systemConfig.getTableauTaxCategoryUnreturnedTax(), getTicket(s).orElse(StringUtils.EMPTY)));
    }
Cheng's avatar
Cheng committed
89

Cheng C Yang's avatar
Cheng C Yang committed
90
    public Optional<String> getTableauDistrictUnreturnedTax() {
sam.x.wang's avatar
sam.x.wang committed
91 92
        //TODO
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
93
        return optional.map(s -> String.format(systemConfig.getTableauDistrictUnreturnedTax(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
94 95
    }

Cheng C Yang's avatar
Cheng C Yang committed
96
    public Optional<String> getTableauUnreturnedAndReturnedTax() {
sam.x.wang's avatar
sam.x.wang committed
97
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
98 99
        return optional.map(s -> String.format(systemConfig.getTableauUnreturnedAndReturnedTax(), getTicket(s).orElse(StringUtils.EMPTY)));
    }
Cheng's avatar
Cheng committed
100

Cheng C Yang's avatar
Cheng C Yang committed
101
    public Optional<String> getTableauCostAnalysis() {
sam.x.wang's avatar
sam.x.wang committed
102
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
103
        return optional.map(s -> String.format(systemConfig.getTableauCostAnalysis(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
104 105
    }

Cheng C Yang's avatar
Cheng C Yang committed
106
    public Optional<String> getTableauDistrictProfitAndLoss() {
sam.x.wang's avatar
sam.x.wang committed
107
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
108
        return optional.map(s -> String.format(systemConfig.getTableauDistrictProfitAndLoss(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
109 110
    }

Cheng C Yang's avatar
Cheng C Yang committed
111
    public Optional<String> getTableauCompanyProfitAndLoss() {
sam.x.wang's avatar
sam.x.wang committed
112
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
113
        return optional.map(s -> String.format(systemConfig.getTableauCompanyProfitAndLoss(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
114 115
    }

Cheng C Yang's avatar
Cheng C Yang committed
116
    public Optional<String> getTableauDriverAndEmployee() {
sam.x.wang's avatar
sam.x.wang committed
117
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
118
        return optional.map(s -> String.format(systemConfig.getTableauDriverAndEmployee(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
119 120
    }

Cheng C Yang's avatar
Cheng C Yang committed
121
    public Optional<String> getTableauGmvAndSubsidy() {
sam.x.wang's avatar
sam.x.wang committed
122
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
123
        return optional.map(s -> String.format(systemConfig.getTableauGmvAndSubsidy(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
124 125
    }

Cheng C Yang's avatar
Cheng C Yang committed
126
    public Optional<String> getTableauFileArrangement() {
sam.x.wang's avatar
sam.x.wang committed
127
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
128
        return optional.map(s -> String.format(systemConfig.getTableauFileArrangement(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
129 130
    }

Cheng C Yang's avatar
Cheng C Yang committed
131
    public Optional<String> getTableauGlobalOverview() {
sam.x.wang's avatar
sam.x.wang committed
132
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
133
        return optional.map(s -> String.format(systemConfig.getTableauGlobalOverview(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
134 135
    }

Cheng C Yang's avatar
Cheng C Yang committed
136
    public Optional<String> getTableauGlobalBusiness() {
sam.x.wang's avatar
sam.x.wang committed
137
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
138
        return optional.map(s -> String.format(systemConfig.getTableauGlobalBusiness(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
139 140
    }

Cheng C Yang's avatar
Cheng C Yang committed
141
    public Optional<String> getTableauMexicanTax() {
sam.x.wang's avatar
sam.x.wang committed
142
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
143
        return optional.map(s -> String.format(systemConfig.getTableauMexicanTax(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
144 145
    }

Cheng C Yang's avatar
Cheng C Yang committed
146
    public Optional<String> getTableauAustralianTax() {
sam.x.wang's avatar
sam.x.wang committed
147
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
148
        return optional.map(s -> String.format(systemConfig.getTableauAustralianTax(), getTicket(s).orElse(StringUtils.EMPTY)));
Cheng's avatar
Cheng committed
149
    }
Cheng C Yang's avatar
Cheng C Yang committed
150 151

    public Optional<String> getTableauBrazilianTax() {
sam.x.wang's avatar
sam.x.wang committed
152
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
153 154 155 156
        return optional.map(s -> String.format(systemConfig.getTableauBrazilianTax(), getTicket(s).orElse(StringUtils.EMPTY)));
    }

    public Optional<String> getTableauOtherTaxAnalysis() {
sam.x.wang's avatar
sam.x.wang committed
157
        Optional<String> optional = Optional.of(getDDUserName());
Cheng C Yang's avatar
Cheng C Yang committed
158 159 160
        return optional.map(s -> String.format(systemConfig.getTableauOtherTaxAnalysis(), getTicket(s).orElse(StringUtils.EMPTY)));
    }

sam.x.wang's avatar
sam.x.wang committed
161
     //sso通过cookie获取登录的DD用户
sam.x.wang's avatar
sam.x.wang committed
162 163 164 165 166 167 168 169 170
    public String getDDUserName() {
        logger.info("进入 获取DD user的方法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        String ticket = getDDTicketByCookie();
        logger.info("ticket=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"+ticket);
        return findUsernameByDDTicket(ticket);
    }

    //通過cookie 取出ddTicket
    public String getDDTicketByCookie() {
sam.x.wang's avatar
sam.x.wang committed
171
        logger.info("进去获取cookie方法");
sam.x.wang's avatar
sam.x.wang committed
172 173 174
        Map<String,Cookie> cookieMap = ReadCookieMap();
        //TODO  修改token的名字到配置文件,判断ddTicket是否过期
        if(cookieMap.containsKey("ddTicket")){
sam.x.wang's avatar
sam.x.wang committed
175 176
            logger.info("ddTicket=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"+Optional.ofNullable(cookieMap.get("ddTicket")).map(s->s.getValue()).orElse(""));

sam.x.wang's avatar
sam.x.wang committed
177 178 179 180 181
            return Optional.ofNullable(cookieMap.get("ddTicket")).map(s->s.getValue()).orElse("");
        }else{
            logger.info("code=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"+Optional.ofNullable(cookieMap.get("code")).map(z->z.getValue()).orElse(""));
            return getDDTicket(Optional.ofNullable(cookieMap.get("code")).map(z->z.getValue()).orElse(""));
        }
sam.x.wang's avatar
sam.x.wang committed
182
    }
sam.x.wang's avatar
sam.x.wang committed
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

    private String findUsernameByDDTicket(String ticket) {
        Assert.hasText(ticket, "empty ticket");

        DDUserInfoRes ddUserInfoRes = new DDUserInfoRes();
        try {
            String response = HttpUtil.post(getUserInfoUrl + "get_user_by_ticket", "ticket=" + ticket + "&app_id=" + appId, "application/x-www-form-urlencoded", "UTF-8", 10000, 10000);

            logger.debug(String.format("DD-get_user_by_ticket返回:[%s]", response));
            logger.info(String.format("DD-get_user_by_ticket返回:[%s]", response));
            ddUserInfoRes = JSONObject.parseObject(response, DDUserInfoRes.class);
        } catch (Exception e) {
            logger.info(String.format("调用DDSSO获取用户信息失败:[%s]", e.getMessage()), e);
            logger.error(String.format("调用DDSSO获取用户信息失败:[%s]", e.getMessage()), e);
        }

        String username = Optional.ofNullable(ddUserInfoRes)
                .map(s -> s.getDdUserInfo())
                .map(n -> n.getUsername())
                .orElse("");
        return username;
    }

    /**
     * 将cookie封装到Map里面
     * @return
     */
    private  Map<String,Cookie> ReadCookieMap(){
        Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
        Cookie[] cookies = request.getCookies();
        if(null!=cookies){
            for(Cookie cookie : cookies){
                cookieMap.put(cookie.getName(), cookie);
            }
        }
        return cookieMap;
    }
    //copy過來的 沒對象
    public String getDDTicket(String code) {
        logger.info("code=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"+code);
        try{
            JSONObject object;
            String ddResponse = HttpUtil.post(getUserInfoUrl + "check_code", "code=" + code + "&app_key=" + appKey+ "&app_id=" + appId, "application/x-www-form-urlencoded", "UTF-8", 10000, 10000);
            object = JSONObject.parseObject(ddResponse);
            Map<String, Object> res = object.getInnerMap();
            int errno = (int) res.get("errno");
            if (errno != 0) {
                logger.warn(String.format("DDTicket get Failed:[%s]", object.toJSONString()));
                return null;
            }else{
                Map<String, String> dataMap = (Map)res.get("data");
                Cookie cookie=new Cookie("ddTicket",dataMap.get("ticket"));
                response.addCookie(cookie);
                return dataMap.get("ticket");
            }
        }catch (Exception e){
            logger.error(String.format("通过code:[%s]获取Ticket失败",code));
        }
        return null;
    }
Cheng's avatar
Cheng committed
243
}