Subversion Repositories SmartDukaan

Rev

Rev 32390 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31568 tejbeer 1
package com.spice.profitmandi.dao.service.dtdc;
2
 
3
import java.util.ArrayList;
4
import java.util.Arrays;
5
import java.util.Base64;
6
import java.util.HashMap;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Map.Entry;
10
import java.util.stream.Collectors;
11
 
12
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.Logger;
14
import org.json.JSONArray;
15
import org.json.JSONObject;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.beans.factory.annotation.Value;
18
import org.springframework.core.io.ByteArrayResource;
19
import org.springframework.mail.javamail.JavaMailSender;
20
import org.springframework.stereotype.Component;
21
 
22
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23
import com.spice.profitmandi.common.model.CustomRetailer;
24
import com.spice.profitmandi.common.util.FileUtil;
25
import com.spice.profitmandi.common.util.Utils;
26
import com.spice.profitmandi.common.util.Utils.Attachment;
27
import com.spice.profitmandi.common.web.client.RestClient;
28
import com.spice.profitmandi.dao.entity.transaction.Order;
29
import com.spice.profitmandi.dao.entity.transaction.WarehouseAddressMapping;
30
import com.spice.profitmandi.dao.entity.transaction.WarehouseAddressMaster;
31
import com.spice.profitmandi.dao.model.BilledOrderListModel;
32
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
33
import com.spice.profitmandi.dao.repository.transaction.WareHouseAddressMappingRepository;
34
import com.spice.profitmandi.dao.repository.transaction.WareHouseAddressMasterRepository;
35
import com.spice.profitmandi.service.user.RetailerService;
36
 
37
import in.shop2020.model.v1.order.OrderStatus;
38
 
39
@Component
40
public class DTDCServiceImpl implements DTDCService {
41
 
42
	@Autowired
43
	private RetailerService retailerService;
44
 
45
	@Autowired
46
	private WareHouseAddressMappingRepository wareHouseAddressMappingRepository;
47
 
48
	@Autowired
49
	private WareHouseAddressMasterRepository wareHouseAddressMasterRepository;
50
 
51
	@Autowired
52
	private OrderRepository orderRepository;
53
 
54
	@Autowired
55
	private RestClient restClient;
56
 
57
	@Autowired
58
	private JavaMailSender googleMailSender;
59
 
60
	@Value("#{'${prod}'=='true' ? 'NL3832' : 'NL3832'}")
61
	private String customerCode;
62
 
63
	@Value("#{'${prod}'=='true' ? '4b2a38cf831edcf397629f68684da6' : '8c0800cae8401d95570d7551be9bd7'}")
64
	private String apiKey;
65
 
66
	private static final Logger LOGGER = LogManager.getLogger(DTDCServiceImpl.class);
67
 
68
	@Override
69
	public List<BilledOrderListModel> getAirwayBillNo(Map<String, List<BilledOrderListModel>> airbillBilledOrderMap,
70
			String emailId) throws Exception {
71
 
72
		List<BilledOrderListModel> billedOrderListModels = new ArrayList<>();
73
 
74
		Consignments consignments = new Consignments();
75
		List<Consignment> consignmentList = new ArrayList<>();
76
 
77
		List<String> consigneeIds = new ArrayList<>();
78
		for (Entry<String, List<BilledOrderListModel>> billedOrderEntry : airbillBilledOrderMap.entrySet()) {
79
 
80
			List<BilledOrderListModel> billedOrders = billedOrderEntry.getValue();
81
 
82
			double weight = billedOrders.get(0).getWeight();
83
 
84
			List<String> invoiceNumbers = billedOrders.stream().map(x -> x.getInvoiceNumber())
85
					.collect(Collectors.toList());
86
 
87
			List<Order> orders = orderRepository.selectByInvoiceNumbers(invoiceNumbers);
88
 
89
			Double totalAmount = orders.stream().collect(Collectors.summingDouble(x -> x.getTotalAmount()));
90
 
91
			for (Order order : orders) {
92
				if (!order.getStatus().equals(OrderStatus.BILLED)) {
93
 
94
					throw new ProfitMandiBusinessException("Uploaded File", "",
95
							"Order Number " + order.getId() + "  status is not billed");
96
 
97
				}
98
			}
99
 
100
			consigneeIds.add(billedOrderEntry.getKey());
101
			Order order = orders.get(0);
102
 
103
			int warehouseId = order.getWarehouseId();
104
 
105
			CustomRetailer customRetailer = retailerService.getFofoRetailer(order.getRetailerId());
106
 
107
			WarehouseAddressMapping warehouseAddressMapping = wareHouseAddressMappingRepository
108
					.selectByWarehouseId(warehouseId);
109
 
110
			WarehouseAddressMaster warehouseAddressMaster = wareHouseAddressMasterRepository
111
					.selectById(warehouseAddressMapping.getAddressId());
112
 
113
			Consignment consignment = new Consignment();
114
			consignment.setCustomerCode(customerCode);
115
			consignment.setServiceTypeId("PRIORITY");
116
			consignment.setCommodityId("2");
117
			consignment.setDeclaredValue(totalAmount.intValue());
118
			consignment.setConsignmentType("Forward");
119
			consignment.setLoadType("NON-DOCUMENT");
120
			consignment.setWeghtUnit("kg");
121
			consignment.setWeight(weight);
122
 
123
			OriginDetails origionDetail = new OriginDetails();
124
			origionDetail.setPincode("201301");// warehouseAddressMaster.getPin());
125
			origionDetail.setName(warehouseAddressMaster.getContactPerson());
126
			origionDetail.setPhone(warehouseAddressMaster.getContacNumber());
127
			origionDetail.setAddressLine1(warehouseAddressMaster.getAddress());
128
 
129
			consignment.setOriginDetail(origionDetail);
130
 
131
			DestinationDetails destinationDetail = new DestinationDetails();
132
			destinationDetail.setName(customRetailer.getBusinessName());
133
			destinationDetail.setAddressLine1(customRetailer.getAddress().getLine1());
134
			destinationDetail.setAddressLine2(customRetailer.getAddress().getLine2());
135
			destinationDetail.setPhone(customRetailer.getMobileNumber());
136
			destinationDetail.setPincode(customRetailer.getAddress().getPinCode());
137
			destinationDetail.setState(customRetailer.getAddress().getState());
138
			destinationDetail.setCity(customRetailer.getAddress().getCity());
139
 
140
			consignment.setDestinationDetail(destinationDetail);
141
 
142
			List<PiecesDetail> piecesDetails = new ArrayList<>();
143
 
144
			PiecesDetail pieceDetail = new PiecesDetail();
145
			pieceDetail.setDeclaredValue(totalAmount);
146
			pieceDetail.setWidth(1.0);
147
 
148
			pieceDetail.setHeight(1.0);
149
			pieceDetail.setLength(1.0);
150
 
151
			piecesDetails.add(pieceDetail);
152
 
153
			consignment.setPiecesDetails(piecesDetails);
154
 
155
			consignmentList.add(consignment);
156
 
157
		}
158
 
159
		consignments.setConsignments(consignmentList);
160
		LOGGER.info("consignments" + consignments);
161
 
162
		Map<String, String> requestheaders = new HashMap<>();
163
		requestheaders.put("Content-Type", "application/json");
164
		requestheaders.put("api-key", apiKey);
165
 
166
		String response = restClient.postJson(
167
				"https://demodashboardapi.shipsy.in/api/customer/integration/consignment/softdata", consignments,
168
				requestheaders);
169
 
170
		LOGGER.info("response" + response);
171
		List<Attachment> attachments = new ArrayList<>();
172
 
173
		List<List<?>> rows = new ArrayList<>();
174
 
175
		JSONObject resp = new JSONObject(response);
176
		JSONArray referenceData = resp.getJSONArray("data");
177
 
178
		for (int j = 0; j < referenceData.length(); j++) {
179
 
180
			String consigneeId = consigneeIds.get(j);
181
 
182
			List<BilledOrderListModel> billedOrders = airbillBilledOrderMap.get(consigneeId);
183
 
184
			JSONObject referenceDetail = referenceData.getJSONObject(j);
185
 
186
			boolean success = referenceDetail.getBoolean("success");
187
			String airWayBill = "Error";
188
			if (success) {
189
 
190
				airWayBill = referenceDetail.getString("reference_number");
191
			}
192
 
193
			for (BilledOrderListModel billedOrder : billedOrders) {
194
 
195
				billedOrder.setAirwayBillNumber(airWayBill);
196
				if (!airWayBill.equals("Error")) {
197
 
198
					rows.add(Arrays.asList(billedOrder.getInvoiceNumber(), billedOrder.getLogisticsProviderName(),
199
							billedOrder.getAirwayBillNumber(), billedOrder.getWeight()));
200
				} else {
201
 
202
					String message = referenceDetail.getString("message");
203
 
204
					LOGGER.info("message" + message);
205
 
206
					rows.add(Arrays.asList(billedOrder.getInvoiceNumber(), billedOrder.getLogisticsProviderName(),
207
							billedOrder.getAirwayBillNumber(), billedOrder.getWeight(),
208
							referenceDetail.getString("message")));
209
				}
210
 
211
			}
212
 
213
			billedOrderListModels.addAll(billedOrders);
214
 
215
		}
216
 
217
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
218
				.getCSVByteStream(Arrays.asList("Invoice Number", "Provider", "AWB", "Weight", "Reason"), rows);
219
 
220
		Attachment xlsattachment = new Attachment("uploaded bluedart sheet", new ByteArrayResource(baos.toByteArray()));
221
 
222
		attachments.add(xlsattachment);
223
 
224
		Map<String, List<BilledOrderListModel>> awbOrderMap = billedOrderListModels.stream()
225
				.collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.toList()));
226
 
227
		for (Entry<String, List<BilledOrderListModel>> awbOrderEntry : awbOrderMap.entrySet()) {
228
 
229
			if (!awbOrderEntry.getKey().equals("Error")) {
230
				Map<String, String> referenceNumber = new HashMap<>();
231
				referenceNumber.put("reference_number", awbOrderEntry.getKey());
232
 
233
				String responseLabel = restClient.postJson(
234
						"https://demodashboardapi.shipsy.in/api/customer/integration/consignment/label/multipiece",
235
						referenceNumber, requestheaders);
236
 
237
				JSONObject respLabel = new JSONObject(responseLabel);
238
				JSONArray labelData = respLabel.getJSONArray("data");
239
 
240
				for (int j = 0; j < labelData.length(); j++) {
241
					JSONObject referenceDetail = labelData.getJSONObject(j);
242
 
243
					String airWayBill = referenceDetail.getString("reference_number");
244
 
245
					String label = referenceDetail.getString("label");
246
					byte[] decodedString = Base64.getDecoder().decode(label.getBytes("UTF-8"));
247
 
248
					Attachment attachment = new Attachment("DTDC" + airWayBill + ".pdf",
249
							new ByteArrayResource(decodedString));
250
 
251
					attachments.add(attachment);
252
 
253
				}
254
 
255
			}
256
		}
257
 
258
		Utils.sendMailWithAttachments(googleMailSender, new String[] { "tejbeer.kaur@Smartdukaan.com" }, null,
259
				"DTDC AWb", "PFA", attachments.toArray(new Utils.Attachment[attachments.size()]));
260
 
261
		LOGGER.info("billedOrderListModels" + billedOrderListModels);
262
 
263
		return billedOrderListModels;
264
	}
265
 
266
}