Subversion Repositories SmartDukaan

Rev

Rev 34578 | Details | Compare with Previous | Last modification | View Log | RSS feed

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