Subversion Repositories SmartDukaan

Rev

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