Subversion Repositories SmartDukaan

Rev

Rev 29349 | Rev 29419 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
29349 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
29418 tejbeer 3
import java.time.LocalDate;
4
import java.time.LocalDateTime;
5
import java.time.temporal.ChronoUnit;
29349 tejbeer 6
import java.util.ArrayList;
7
import java.util.List;
8
 
9
import javax.servlet.http.HttpServletRequest;
10
import javax.servlet.http.HttpServletResponse;
11
 
12
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.Logger;
29418 tejbeer 14
import org.apache.thrift.TException;
29349 tejbeer 15
import org.json.JSONArray;
16
import org.json.JSONObject;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.beans.factory.annotation.Value;
19
import org.springframework.http.MediaType;
20
import org.springframework.http.ResponseEntity;
21
import org.springframework.stereotype.Controller;
22
import org.springframework.transaction.annotation.Transactional;
23
import org.springframework.web.bind.annotation.RequestMapping;
24
import org.springframework.web.bind.annotation.RequestMethod;
25
import org.springframework.web.bind.annotation.RequestParam;
26
 
29418 tejbeer 27
import com.spice.profitmandi.common.model.CustomOrder;
29349 tejbeer 28
import com.spice.profitmandi.common.web.util.ResponseSender;
29418 tejbeer 29
import com.spice.profitmandi.dao.entity.logistics.Provider;
30
import com.spice.profitmandi.dao.entity.logistics.ProviderTat;
29349 tejbeer 31
import com.spice.profitmandi.dao.entity.transaction.Order;
29418 tejbeer 32
import com.spice.profitmandi.dao.model.ProductPojo;
33
import com.spice.profitmandi.dao.repository.logistics.ProviderRepository;
34
import com.spice.profitmandi.dao.repository.logistics.ProviderTatRepository;
35
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
36
import com.spice.profitmandi.dao.util.ContentPojoPopulator;
29349 tejbeer 37
import com.spice.profitmandi.model.tracking.ScannedDetailModel;
38
import com.spice.profitmandi.model.tracking.TrackingDetailModel;
29418 tejbeer 39
import com.spice.profitmandi.service.LogisticsService;
29349 tejbeer 40
 
29418 tejbeer 41
import in.shop2020.model.v1.order.OrderStatusGroups;
29349 tejbeer 42
import io.swagger.annotations.ApiImplicitParam;
43
import io.swagger.annotations.ApiImplicitParams;
44
import okhttp3.OkHttpClient;
45
import okhttp3.Request;
46
import okhttp3.Response;
47
 
48
@Controller
49
@Transactional(rollbackFor = Throwable.class)
50
public class TrackingController {
51
 
52
	@Value("${delhivery.tracking.token}")
53
	private String token;
54
 
55
	@Autowired
56
	private ResponseSender<?> responseSender;
57
 
29418 tejbeer 58
	@Autowired
59
	private OrderRepository orderRepository;
60
 
61
	@Autowired
62
	private ProviderRepository providerRepository;
63
 
64
	@Autowired
65
	private ContentPojoPopulator contentPojoPopulator;
66
 
67
	@Autowired
68
	private ProviderTatRepository providerTatRepository;
69
 
70
	@Autowired
71
	private LogisticsService logisticsService;
29349 tejbeer 72
	private static final Logger LOGGER = LogManager.getLogger(TrackingController.class);
73
 
74
	@RequestMapping(value = "/order/tracking", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
75
	@ApiImplicitParams({
76
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
29418 tejbeer 77
	public ResponseEntity<?> getDeliveryOrder(HttpServletRequest request, HttpServletResponse response,
29349 tejbeer 78
			@RequestParam String airwayBillNo) throws Throwable {
79
 
80
		String url = "https://track.delhivery.com/api/v1/packages/json/";
81
 
82
		OkHttpClient client = new OkHttpClient();
83
 
84
		Request request1 = new Request.Builder()
85
				.url(url + "?waybill=" + String.join(",", airwayBillNo) + "&token=" + token).get().build();
86
 
87
		LOGGER.info("request1" + request1);
88
 
89
		Response response1 = client.newCall(request1).execute();
90
 
91
		LOGGER.info("jsonbj" + response1.body());
92
 
93
		JSONObject jsonObj = new JSONObject(response1.body().string());
94
 
95
		LOGGER.info("jsonObj" + jsonObj);
96
 
97
		JSONArray shipmentData = jsonObj.getJSONArray("ShipmentData");
98
 
99
		TrackingDetailModel tdm = new TrackingDetailModel();
100
 
101
		List<ScannedDetailModel> sdms = new ArrayList<>();
102
 
103
		for (int i = 0; i < shipmentData.length(); i++) {
104
			JSONObject jsonObject = shipmentData.getJSONObject(i);
105
			JSONObject shipment = jsonObject.getJSONObject("Shipment");
106
 
107
			JSONArray scans = shipment.getJSONArray("Scans");
108
 
109
			for (int j = 0; j < scans.length(); j++) {
110
				JSONObject scanObject = scans.getJSONObject(j);
111
 
112
				JSONObject scandetails = scanObject.getJSONObject("ScanDetail");
113
 
114
				ScannedDetailModel sdm = new ScannedDetailModel();
115
				sdm.setStatusDateTime(scandetails.getString("ScanDateTime"));
116
				sdm.setStatusLocation(scandetails.getString("ScannedLocation"));
117
				sdm.setInstruction(scandetails.getString("Instructions"));
118
				sdms.add(sdm);
119
 
120
			}
121
 
122
			tdm.setExpectedDelivery(shipment.getString("ExpectedDeliveryDate"));
123
			tdm.setAwb(shipment.getString("AWB"));
124
 
125
		}
126
 
127
		tdm.setSdm(sdms);
128
		LOGGER.info("tdm" + tdm);
129
 
130
		return responseSender.ok(tdm);
131
	}
132
 
29418 tejbeer 133
	@RequestMapping(value = "/order/detail", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
134
	@ApiImplicitParams({
135
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
136
	public ResponseEntity<?> getOrderDetails(HttpServletRequest request, HttpServletResponse response,
137
			@RequestParam String airwayBillNo) throws Throwable {
138
		List<Order> orders = orderRepository.selectByAirwayBillNumber(airwayBillNo);
139
		List<CustomOrder> customOrders = new ArrayList<CustomOrder>();
140
 
141
		for (Order order : orders) {
142
			CustomOrder co = null;
143
 
144
			try {
145
				co = toCustomOrder(order);
146
			} catch (Exception e) {
147
				continue;
148
			}
149
			customOrders.add(co);
150
		}
151
 
152
		return responseSender.ok(customOrders);
153
 
154
	}
155
 
156
	private CustomOrder toCustomOrder(Order order) throws Exception {
157
		CustomOrder co = new CustomOrder();
158
		co.setId(order.getId());
159
		co.setRetailerName(order.getRetailerName());
160
		co.setExpectedDeliveryTime(order.getExpectedDeliveryTime());
161
		co.setPromisedDeliveryTime(order.getPromisedDeliveryTime());
162
		co.setRetailerPinCode(order.getRetailerPinCode());
163
		co.setRetailerAddress1(order.getRetailerAddress1());
164
		co.setRetailerCity(order.getRetailerCity());
165
		co.setStatusDescription(order.getStatusDescription());
166
		co.setStatus(order.getStatus());
167
		co.setBrand(order.getLineItem().getBrand());
168
		co.setTransactionId(order.getTransactionId());
169
		co.setExtraInfo(order.getLineItem().getExtraInfo());
170
		co.setItemId(order.getLineItem().getItemId());
171
		co.setQuantity(order.getLineItem().getQuantity());
172
		co.setTotalAmount(order.getTotalAmount());
173
		co.setColor(order.getLineItem().getColor());
174
		co.setShippingCost(order.getShippingCost());
175
		co.setCreateTimestamp(order.getCreateTimestamp());
176
		co.setModelName(order.getLineItem().getModelName());
177
		co.setModelNumber(order.getLineItem().getModelNumber());
178
		co.setDeliveryTimestamp(order.getDeliveryTimestamp());
179
		co.setImageUrl(getImageUrl(order));
180
		co.setCancellable(getCancellableRequest(order));
181
		co.setProviderId(order.getLogisticsProviderId());
182
		co.setDelayReason(order.getDelayReasonText());
183
		Provider provider = providerRepository.selectById(order.getLogisticsProviderId());
184
		co.setProviderName(provider.getName());
185
		co.setAirwayBillNo(order.getAirwayBillNumber());
186
		co.setCancellationTimestamp(order.getRefundTimestamp());
187
		co.setBillingTimestamp(order.getBillingTimestamp());
188
		co.setShippingTimestamp(order.getShippingTimestamp());
189
		co.setInvoiceNumber(order.getInvoiceNumber());
190
		if (order.getShippingTimestamp() != null) {
191
			ProviderTat pt = providerTatRepository.selectByProviderId(order.getLogisticsProviderId(),
192
					order.getWarehouseId(), order.getRetailerPinCode());
193
			LocalDateTime shipping = order.getShippingTimestamp();
194
 
195
			LocalDate deliveryTime = logisticsService.calculateDeliveryTimeline(shipping.toLocalDate(), pt, 0);
196
			LOGGER.info("deliveryTime" + deliveryTime);
197
			LocalDateTime expected = order.getExpectedDeliveryTime();
198
			LOGGER.info("expected" + expected);
199
 
200
			long noOfDaysBetween = ChronoUnit.DAYS.between(expected, deliveryTime.atStartOfDay());
201
 
202
			co.setDelayAfterShipping((int) noOfDaysBetween);
203
 
204
		}
205
 
206
		return co;
207
	}
208
 
209
	private String getImageUrl(Order order) throws TException {
210
 
211
		ProductPojo pp = contentPojoPopulator.getShortContent(order.getLineItem().getItem().getCatalogItemId());
212
		String imageUrl = "";
213
		LOGGER.info("pp {}", pp);
214
		if (pp != null) {
215
			imageUrl = pp.getImageUrl();
216
		}
217
 
218
		return imageUrl;
219
	}
220
 
221
	private Boolean getCancellableRequest(Order order) throws Exception {
222
		OrderStatusGroups orderStatusGroups = new OrderStatusGroups();
223
		if (order.isCod() == null) {
224
			throw new Exception("Invalid order");
225
		}
226
		if (order.isCod()) {
227
			if (orderStatusGroups.getCodCancellable().contains(order.getStatus())) {
228
				return true;
229
			} else {
230
				return false;
231
			}
232
		} else {
233
			if (orderStatusGroups.getPrepaidCancellableBeforeBilled().contains(order.getStatus())) {
234
				return true;
235
			} else if (orderStatusGroups.getPrepaidCancellableAfterBilled().contains(order.getStatus())) {
236
				return true;
237
			} else {
238
				return false;
239
			}
240
		}
241
	}
242
 
29349 tejbeer 243
}