Subversion Repositories SmartDukaan

Rev

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