Subversion Repositories SmartDukaan

Rev

Rev 29470 | Rev 29477 | 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
 
3
import java.io.IOException;
4
import java.nio.file.Files;
5
import java.nio.file.Paths;
6
import java.time.LocalDate;
7
import java.time.LocalDateTime;
8
import java.time.format.DateTimeFormatter;
9
import java.util.ArrayList;
10
import java.util.HashMap;
29471 amit.gupta 11
import java.util.HashSet;
29451 manish 12
import java.util.List;
13
import java.util.Map;
29466 amit.gupta 14
import java.util.stream.Collectors;
29451 manish 15
 
16
import org.apache.logging.log4j.LogManager;
17
import org.apache.logging.log4j.Logger;
18
import org.json.JSONObject;
19
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.stereotype.Component;
21
import org.springframework.util.StringUtils;
22
 
23
import com.smartdukaan.cron.migrations.RunOnceTasks;
24
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25
import com.spice.profitmandi.dao.entity.fofo.ActivatedImei;
26
import com.spice.profitmandi.dao.model.VivoImeiAndActivationTimeStampModel;
27
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
28
import com.spice.profitmandi.service.inventory.InventoryService;
29
 
30
import okhttp3.Cookie;
31
import okhttp3.CookieJar;
32
import okhttp3.FormBody;
33
import okhttp3.HttpUrl;
34
import okhttp3.OkHttpClient;
35
import okhttp3.Request;
36
import okhttp3.RequestBody;
37
import okhttp3.Response;
38
 
39
@Component
40
class VivoImeiActivationService {
41
 
42
	@Autowired
43
	InventoryService inventoryService;
44
 
45
	@Autowired
46
	CaptchaService captchaService;
29466 amit.gupta 47
 
29451 manish 48
	@Autowired
49
	ActivatedImeiRepository activatedImeiRepository;
50
 
51
	private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);
52
 
53
	private final Map<String, List<Cookie>> cookieStore = new HashMap<>();
54
 
55
	public void checkImeiActivation() throws ProfitMandiBusinessException, IOException, Exception {
29466 amit.gupta 56
 
29451 manish 57
		OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {
58
			@Override
59
			public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
60
				LOGGER.info("SAVE fROM - {}", httpUrl.host());
61
				cookieStore.put(httpUrl.host(), list);
62
			}
63
 
64
			@Override
65
			public List<Cookie> loadForRequest(HttpUrl httpUrl) {
66
				List<Cookie> cookies = cookieStore.get(httpUrl.host());
67
				LOGGER.info("load from - {}", httpUrl.host());
68
				return cookies != null ? cookies : new ArrayList<Cookie>();
69
			}
70
		}).build();
29466 amit.gupta 71
 
29451 manish 72
		String captchaBreak = this.getNewCaptcha(okHttpClient);
73
 
74
		LOGGER.info("Captcha code {}", captchaBreak);
75
 
29466 amit.gupta 76
		List<VivoImeiAndActivationTimeStampModel> imeisActivationList = activatedImeiRepository
77
				.selectVivoImeiAndActivationTimeStamp();
29451 manish 78
 
29468 amit.gupta 79
		this.getImeiActivation(captchaBreak, okHttpClient, imeisActivationList);
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
		LOGGER.info("request" + request);
95
		LOGGER.info("request" + request);
96
 
97
		String filePath = "/tmp/captcha.avif";
98
		Files.write(Paths.get(filePath), response.body().bytes());
99
 
100
		// Get all relevent imes from activatedImei and inventoryItem for vivo
101
 
29466 amit.gupta 102
		String captchaBreak = captchaService.getCaptchaCode(filePath);
29451 manish 103
 
104
		return captchaBreak;
105
	}
106
 
29469 amit.gupta 107
	public void getImeiActivation(String captchaBreak, OkHttpClient okHttpClient,
29468 amit.gupta 108
			List<VivoImeiAndActivationTimeStampModel> imeisActivationList) throws Exception {
29466 amit.gupta 109
 
29471 amit.gupta 110
		for (VivoImeiAndActivationTimeStampModel vivoImeiAndActivationTimeStampModel: new HashSet<>(imeisActivationList)) {
29468 amit.gupta 111
			String imei = vivoImeiAndActivationTimeStampModel.getSerialNumber();
112
			RequestBody formBody = new FormBody.Builder().add("imei", imei).add("code", captchaBreak).build();
29466 amit.gupta 113
 
29451 manish 114
			Request request1 = new Request.Builder().url("https://www.vivo.com/in/support/checkCode").post(formBody)
115
					.build();
116
 
117
			Response response2 = okHttpClient.newCall(request1).execute();
118
			JSONObject imeiActivationJson = new JSONObject(response2.body().string());
119
			JSONObject data = imeiActivationJson.getJSONObject("data");
29466 amit.gupta 120
 
29469 amit.gupta 121
			int status = data.getInt("status");
122
			if (status == 0) {
123
				captchaBreak = this.getNewCaptcha(okHttpClient);
124
				continue;
125
			} else if (status == 2) {
29470 amit.gupta 126
				LOGGER.info("Received status 2 for {}", imei);
29469 amit.gupta 127
				continue;
128
			}
129
 
29466 amit.gupta 130
			JSONObject imeiQueryDto = data.getJSONObject("imeiQueryDto");
131
 
29451 manish 132
			Object dueTimeObject = imeiQueryDto.get("dueTime");
29466 amit.gupta 133
			String dueTimeString = dueTimeObject.toString();
134
 
29451 manish 135
			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
29466 amit.gupta 136
			String dueTimeSplit = dueTimeString.split(" ")[0];
137
 
29469 amit.gupta 138
 
29466 amit.gupta 139
 
140
			if (!StringUtils.isEmpty(dueTimeSplit)) {
141
				LocalDate dateTime = LocalDate.parse(dueTimeSplit, formatter);
29468 amit.gupta 142
				ActivatedImei activatedImei = activatedImeiRepository.selectBySerialNumber(imei);
29469 amit.gupta 143
				if (activatedImei == null) {
29466 amit.gupta 144
					activatedImei = new ActivatedImei();
145
					activatedImei.setActivationTimestamp(dateTime.atStartOfDay().minusYears(1));
29468 amit.gupta 146
					activatedImei.setSerialNumber(imei);
29466 amit.gupta 147
					activatedImei.setCreateTimestamp(LocalDateTime.now());
148
					activatedImeiRepository.persist(activatedImei);
149
 
150
				} else {
151
					activatedImei.setActivationTimestamp(dateTime.atStartOfDay().minusYears(1));
152
 
153
				}
154
 
155
				LOGGER.info("activatedImei" + activatedImei);
156
 
157
				LOGGER.info("vivoImeiStatusModel" + dateTime.atStartOfDay());
158
 
29451 manish 159
			}
29466 amit.gupta 160
 
29469 amit.gupta 161
 
29451 manish 162
		}
163
	}
164
}