Subversion Repositories SmartDukaan

Rev

Rev 30376 | Rev 30937 | 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
 
29
	@Autowired
30
	InventoryService inventoryService;
31
 
32
	@Autowired
33
	CaptchaService captchaService;
29466 amit.gupta 34
 
29451 manish 35
	@Autowired
36
	ActivatedImeiRepository activatedImeiRepository;
37
 
30335 amit.gupta 38
	private static final Logger LOGGER = LogManager.getLogger(VivoImeiActivationService.class);
29451 manish 39
 
40
	private final Map<String, List<Cookie>> cookieStore = new HashMap<>();
41
 
42
	public void checkImeiActivation() throws ProfitMandiBusinessException, IOException, Exception {
29466 amit.gupta 43
 
29451 manish 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
			}
50
 
51
			@Override
52
			public List<Cookie> loadForRequest(HttpUrl httpUrl) {
53
				List<Cookie> cookies = cookieStore.get(httpUrl.host());
54
				LOGGER.info("load from - {}", httpUrl.host());
30335 amit.gupta 55
				return cookies != null ? cookies : new ArrayList<>();
29451 manish 56
			}
57
		}).build();
29466 amit.gupta 58
 
29451 manish 59
 
30335 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
 
30337 amit.gupta 64
		List<ImeiActivationTimestampModel> imeisActivationList = activatedImeiRepository
30430 tejbeer 65
				.selectImeiActivationPendingByBrand("Vivo");
30369 amit.gupta 66
		imeisActivationList = imeisActivationList.subList(0, 10);
30343 amit.gupta 67
		LOGGER.info("imeisActivationList = {}", imeisActivationList);
68
 
30337 amit.gupta 69
/*		List<ImeiActivationTimestampModel> imeisActivationList = new ArrayList<>();
30335 amit.gupta 70
		imeisActivationList.add(new ImeiActivationTimestampModel("862495052177812", null));
71
		imeisActivationList.add(new ImeiActivationTimestampModel("862495052181434", null));
30337 amit.gupta 72
		imeisActivationList.add(new ImeiActivationTimestampModel("860009056563950", null));*/
30335 amit.gupta 73
 
29477 amit.gupta 74
		LOGGER.info("Complete list size is - {}", imeisActivationList.size());
30335 amit.gupta 75
		for (ImeiActivationTimestampModel imeiActivationTimestampModel : imeisActivationList) {
76
			String captchaBreak = this.getNewCaptcha(okHttpClient);
77
			this.getImeiActivation(captchaBreak, okHttpClient, imeiActivationTimestampModel);
78
		}
29451 manish 79
 
29466 amit.gupta 80
	}
29451 manish 81
 
29466 amit.gupta 82
	public String getNewCaptcha(OkHttpClient okHttpClient) throws Exception {
29451 manish 83
 
84
		LOGGER.info("okHttpClient" + okHttpClient);
85
 
86
		HttpUrl vivoSupportUrl = HttpUrl.parse("https://www.vivo.com/in/support/generatingCodes");
87
		Request request = new Request.Builder().url(vivoSupportUrl).build();
88
 
89
		Response response = okHttpClient.newCall(request).execute();
90
		LOGGER.info("cookie {}", this.cookieStore.values());
29466 amit.gupta 91
 
29451 manish 92
		LOGGER.info("vivoSupportUrl" + vivoSupportUrl);
93
 
30335 amit.gupta 94
		String filePath = "/tmp/captcha.jpg";
29451 manish 95
		Files.write(Paths.get(filePath), response.body().bytes());
96
 
97
		// Get all relevent imes from activatedImei and inventoryItem for vivo
98
 
29466 amit.gupta 99
		String captchaBreak = captchaService.getCaptchaCode(filePath);
30329 amit.gupta 100
		System.out.println("Captcha is " + captchaBreak);
29451 manish 101
		return captchaBreak;
102
	}
103
 
29469 amit.gupta 104
	public void getImeiActivation(String captchaBreak, OkHttpClient okHttpClient,
30335 amit.gupta 105
								  ImeiActivationTimestampModel vivoImeiAndActivationTimeStampModel) throws Exception {
29466 amit.gupta 106
 
30335 amit.gupta 107
		String imei = vivoImeiAndActivationTimeStampModel.getSerialNumber();
108
		RequestBody formBody = new FormBody.Builder().add("imei", imei).add("code", captchaBreak).build();
29466 amit.gupta 109
 
30335 amit.gupta 110
		Request request1 = new Request.Builder().url("https://www.vivo.com/in/support/checkCode").post(formBody)
111
				.build();
29451 manish 112
 
30335 amit.gupta 113
		Response response2 = okHttpClient.newCall(request1).execute();
114
		JSONObject imeiActivationJson = new JSONObject(response2.body().string());
115
		JSONObject data = imeiActivationJson.getJSONObject("data");
116
		int status = data.getInt("status");
117
		if (status == 0) {
118
			LOGGER.info("Found invalid captcha");
119
			return;
120
		} else if (status == 2) {
121
			LOGGER.info("Received status 2 for {}, data {}", imei, data);
122
			return;
123
		}
29466 amit.gupta 124
 
30335 amit.gupta 125
		JSONObject imeiQueryDto = data.getJSONObject("imeiQueryDto");
126
		LOGGER.info("imeiQueryDto - {}", imeiQueryDto);
127
		String dueTimeString = imeiQueryDto.getString("dueTime");
29469 amit.gupta 128
 
30371 amit.gupta 129
		ActivatedImei activatedImei = activatedImeiRepository.selectBySerialNumber(imei);
130
		if (activatedImei == null) {
131
			LOGGER.info("Adding activation for - {}", imei);
132
			activatedImei = new ActivatedImei();
133
			activatedImei.setSerialNumber(imei);
30376 amit.gupta 134
			activatedImei.setCreateTimestamp(LocalDateTime.now());
30371 amit.gupta 135
			activatedImeiRepository.persist(activatedImei);
136
		}
137
		activatedImei.setCreateTimestamp(LocalDateTime.now());
138
		if (dueTimeString.equals("")) return;
30343 amit.gupta 139
 
30371 amit.gupta 140
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
141
		dueTimeString = dueTimeString.split(" ")[0];
142
		LocalDate dueDate = LocalDate.parse(dueTimeString, formatter);
143
		activatedImei.setActivationTimestamp(dueDate.atStartOfDay().minusYears(1));
30343 amit.gupta 144
 
30371 amit.gupta 145
		LOGGER.info("activatedImei" + activatedImei);
146
		LOGGER.info("vivoImeiStatusModel" + dueDate.atStartOfDay());
29466 amit.gupta 147
 
148
 
29451 manish 149
	}
150
}