Subversion Repositories SmartDukaan

Rev

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