Subversion Repositories SmartDukaan

Rev

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