Subversion Repositories SmartDukaan

Rev

Rev 36253 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
29451 manish 1
package com.smartdukaan.cron.scheduled;
2
 
30209 amit.gupta 3
import com.spice.profitmandi.dao.model.ImeiActivationTimestampModel;
4
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
5
import com.spice.profitmandi.service.inventory.InventoryService;
6
import okhttp3.*;
29451 manish 7
import org.apache.logging.log4j.LogManager;
8
import org.apache.logging.log4j.Logger;
9
import org.json.JSONObject;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
36260 amit 12
import org.springframework.transaction.annotation.Propagation;
13
import org.springframework.transaction.annotation.Transactional;
29451 manish 14
 
30209 amit.gupta 15
import java.nio.file.Files;
16
import java.nio.file.Paths;
17
import java.time.LocalDate;
18
import java.time.format.DateTimeFormatter;
30335 amit.gupta 19
import java.util.ArrayList;
20
import java.util.HashMap;
21
import java.util.List;
22
import java.util.Map;
29451 manish 23
 
24
@Component
25
class VivoImeiActivationService {
26
 
33453 amit.gupta 27
    @Autowired
28
    InventoryService inventoryService;
29451 manish 29
 
33453 amit.gupta 30
    @Autowired
31
    CaptchaService captchaService;
29466 amit.gupta 32
 
33453 amit.gupta 33
    @Autowired
34
    ActivatedImeiRepository activatedImeiRepository;
29451 manish 35
 
33453 amit.gupta 36
    private static final Logger LOGGER = LogManager.getLogger(VivoImeiActivationService.class);
29451 manish 37
 
33453 amit.gupta 38
    private final Map<String, List<Cookie>> cookieStore = new HashMap<>();
29451 manish 39
 
36260 amit 40
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
33453 amit.gupta 41
    public void checkImeiActivation() throws Exception {
42
        if (LocalDate.now().getDayOfMonth() == 1) return;
36253 amit 43
 
44
        List<ImeiActivationTimestampModel> imeisActivationList = activatedImeiRepository
45
                .selectImeiActivationPendingByBrand("Vivo", 2);
46
        LOGGER.info("Secondary imeisActivationList = {}, size = {}", imeisActivationList, imeisActivationList.size());
47
 
48
        processImeis(imeisActivationList);
49
    }
50
 
36260 amit 51
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
36253 amit 52
    public void checkImeiActivationTertiary() throws Exception {
53
        if (LocalDate.now().getDayOfMonth() == 1) return;
54
 
55
        List<ImeiActivationTimestampModel> imeisActivationList = activatedImeiRepository
56
                .selectImeiActivationPendingByBrandTertiary("Vivo", 2);
57
        LOGGER.info("Tertiary imeisActivationList = {}, size = {}", imeisActivationList, imeisActivationList.size());
58
 
59
        processImeis(imeisActivationList);
60
    }
61
 
62
    private void processImeis(List<ImeiActivationTimestampModel> imeisActivationList) throws Exception {
63
        if (imeisActivationList.isEmpty()) return;
64
 
65
        cookieStore.clear();
66
 
33453 amit.gupta 67
        OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {
68
            @Override
69
            public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
70
                LOGGER.info("SAVE fROM - {}", httpUrl.host());
71
                cookieStore.put(httpUrl.host(), list);
72
            }
29466 amit.gupta 73
 
33453 amit.gupta 74
            @Override
75
            public List<Cookie> loadForRequest(HttpUrl httpUrl) {
76
                List<Cookie> cookies = cookieStore.get(httpUrl.host());
77
                LOGGER.info("load from - {}", httpUrl.host());
78
                return cookies != null ? cookies : new ArrayList<>();
79
            }
80
        }).build();
29451 manish 81
 
33453 amit.gupta 82
        Request request = new Request.Builder().url("https://www.vivo.com/in/support/IMEI").build();
36253 amit 83
        try (Response seedResponse = okHttpClient.newCall(request).execute()) {
84
            // Consume response to establish cookies
85
        }
29451 manish 86
 
33453 amit.gupta 87
        for (ImeiActivationTimestampModel imeiActivationTimestampModel : imeisActivationList) {
88
            String captchaBreak = this.getNewCaptcha(okHttpClient);
89
            this.getImeiActivation(captchaBreak, okHttpClient, imeiActivationTimestampModel);
90
        }
91
    }
29451 manish 92
 
33453 amit.gupta 93
    public String getNewCaptcha(OkHttpClient okHttpClient) throws Exception {
94
        LOGGER.info("okHttpClient" + okHttpClient);
29451 manish 95
 
33453 amit.gupta 96
        HttpUrl vivoSupportUrl = HttpUrl.parse("https://www.vivo.com/in/support/generatingCodes");
97
        Request request = new Request.Builder().url(vivoSupportUrl).build();
29451 manish 98
 
33453 amit.gupta 99
        String filePath = "/tmp/captcha.jpg";
36253 amit 100
        try (Response response = okHttpClient.newCall(request).execute()) {
101
            LOGGER.info("cookie {}", this.cookieStore.values());
102
            LOGGER.info("vivoSupportUrl" + vivoSupportUrl);
103
            Files.write(Paths.get(filePath), response.body().bytes());
104
        }
29451 manish 105
 
33453 amit.gupta 106
        String captchaBreak = captchaService.getCaptchaCode(filePath);
107
        System.out.println("Captcha is " + captchaBreak);
108
        return captchaBreak;
109
    }
29451 manish 110
 
33453 amit.gupta 111
    public void getImeiActivation(String captchaBreak, OkHttpClient okHttpClient,
112
                                  ImeiActivationTimestampModel vivoImeiAndActivationTimeStampModel) throws Exception {
29451 manish 113
 
33453 amit.gupta 114
        String imei = vivoImeiAndActivationTimeStampModel.getSerialNumber();
115
        RequestBody formBody = new FormBody.Builder().add("imei", imei).add("code", captchaBreak).build();
29466 amit.gupta 116
 
33453 amit.gupta 117
        Request request1 = new Request.Builder().url("https://www.vivo.com/in/support/checkCode").post(formBody)
118
                .build();
29466 amit.gupta 119
 
36253 amit 120
        JSONObject imeiActivationJson;
121
        try (Response response2 = okHttpClient.newCall(request1).execute()) {
122
            imeiActivationJson = new JSONObject(response2.body().string());
123
        }
124
 
33453 amit.gupta 125
        JSONObject data = imeiActivationJson.getJSONObject("data");
126
        int status = data.getInt("status");
127
        if (status == 0) {
128
            LOGGER.info("Found invalid captcha");
129
            return;
130
        } else if (status == 2) {
131
            LOGGER.info("Received status 2 for {}, data {}", imei, data);
36253 amit 132
            activatedImeiRepository.saveActivation(imei, null);
33453 amit.gupta 133
            return;
134
        }
29451 manish 135
 
33453 amit.gupta 136
        JSONObject imeiQueryDto = data.getJSONObject("imeiQueryDto");
137
        LOGGER.info("imeiQueryDto - {}", imeiQueryDto);
138
        String dueTimeString = imeiQueryDto.getString("dueTime");
29466 amit.gupta 139
 
36253 amit 140
        if (dueTimeString.equals("")) {
141
            activatedImeiRepository.saveActivation(imei, null);
142
            return;
33453 amit.gupta 143
        }
29469 amit.gupta 144
 
33453 amit.gupta 145
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
146
        dueTimeString = dueTimeString.split(" ")[0];
147
        LocalDate dueDate = LocalDate.parse(dueTimeString, formatter);
30343 amit.gupta 148
 
36253 amit 149
        activatedImeiRepository.saveActivation(imei, dueDate.atStartOfDay().minusYears(1));
150
        LOGGER.info("activatedImei saved for {} with dueDate {}", imei, dueDate.atStartOfDay());
33453 amit.gupta 151
    }
36253 amit 152
}