Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
25640 tejbeer 1
 
2
package com.spice.profitmandi.web.controller;
3
 
29329 amit.gupta 4
import java.time.LocalDate;
25640 tejbeer 5
import java.time.LocalDateTime;
31186 tejbeer 6
import java.util.ArrayList;
26751 amit.gupta 7
import java.util.Collection;
25640 tejbeer 8
import java.util.HashMap;
9
import java.util.List;
10
import java.util.Map;
26751 amit.gupta 11
import java.util.Set;
25640 tejbeer 12
import java.util.stream.Collectors;
13
 
14
import javax.servlet.http.HttpServletRequest;
15
 
16
import org.apache.logging.log4j.LogManager;
17
import org.apache.logging.log4j.Logger;
18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.stereotype.Controller;
20
import org.springframework.transaction.annotation.Transactional;
21
import org.springframework.ui.Model;
22
import org.springframework.web.bind.annotation.RequestBody;
23
import org.springframework.web.bind.annotation.RequestMapping;
24
import org.springframework.web.bind.annotation.RequestMethod;
25650 tejbeer 25
import org.springframework.web.bind.annotation.RequestParam;
25640 tejbeer 26
 
27
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
28
import com.spice.profitmandi.common.model.CustomRetailer;
31172 tejbeer 29
import com.spice.profitmandi.dao.entity.catalog.Item;
25640 tejbeer 30
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
31
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
32
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
33
import com.spice.profitmandi.dao.entity.fofo.HygieneData;
29329 amit.gupta 34
import com.spice.profitmandi.dao.model.DateRangeModel;
25640 tejbeer 35
import com.spice.profitmandi.dao.repository.catalog.HygieneDataModel;
25650 tejbeer 36
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
27489 tejbeer 37
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
25640 tejbeer 38
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
39
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
40
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
41
import com.spice.profitmandi.dao.repository.fofo.HygieneDataRepository;
42
import com.spice.profitmandi.service.user.RetailerService;
43
import com.spice.profitmandi.web.util.MVCResponseSender;
44
 
45
@Controller
46
@Transactional(rollbackFor = Throwable.class)
47
public class HygieneController {
48
 
49
	@Autowired
50
	private FofoOrderRepository fofoOrderRepository;
51
 
52
	@Autowired
53
	private CustomerAddressRepository customerAddressRepository;
54
 
55
	@Autowired
56
	private RetailerService retailerService;
57
 
58
	@Autowired
59
	private FofoOrderItemRepository fofoOrderItemRepository;
60
 
61
	@Autowired
62
	private HygieneDataRepository hygieneDataRepository;
63
 
64
	@Autowired
25650 tejbeer 65
	private ItemRepository itemRepository;
27489 tejbeer 66
 
25650 tejbeer 67
	@Autowired
31172 tejbeer 68
	private MVCResponseSender mvcResponseSender;
27489 tejbeer 69
 
25640 tejbeer 70
	private static final Logger LOGGER = LogManager.getLogger(HygieneController.class);
71
 
72
	@RequestMapping(value = "/getHygieneData", method = RequestMethod.GET)
27489 tejbeer 73
	public String getHygieneData(HttpServletRequest request,
31172 tejbeer 74
			@RequestParam(name = "fofoId", required = false, defaultValue = "0") int fofoId,
75
			@RequestParam(name = "date", required = false, defaultValue = "") LocalDateTime date, Model model)
27489 tejbeer 76
			throws ProfitMandiBusinessException {
77
		List<HygieneData> hygieneData = null;
31172 tejbeer 78
		if (fofoId != 0 && date != null) {
79
			hygieneData = hygieneDataRepository.selectAllByFofoIdDate(fofoId, date.toLocalDate());
80
 
81
		} else if (fofoId != 0) {
27489 tejbeer 82
			hygieneData = hygieneDataRepository.selectAllByFofoIdDisposedTimestamp(fofoId);
31172 tejbeer 83
 
84
		} else if (date != null) {
85
			hygieneData = hygieneDataRepository.selectAllByDate(date.toLocalDate());
86
 
87
		}
88
 
89
		else {
27489 tejbeer 90
			hygieneData = hygieneDataRepository.selectByDisposedTimestamp();
91
		}
92
 
31212 tejbeer 93
		LOGGER.info("hygineeDate {}", hygieneData);
31213 tejbeer 94
		if (!hygieneData.isEmpty()) {
95
			List<Integer> orderIds = hygieneData.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
96
			Map<Integer, FofoOrder> fofoOrdersMap = this.getfofoOrderByOrderId(orderIds);
97
			Set<Integer> fofoIds = fofoOrdersMap.values().stream().map(x -> x.getFofoId()).collect(Collectors.toSet());
98
			Map<Integer, CustomerAddress> customerAddress = this.getCustomerAddressByFofoOrder(fofoOrdersMap.values());
99
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25640 tejbeer 100
 
31213 tejbeer 101
			Map<Integer, CustomRetailer> partnerAddressMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
102
					.filter(x -> x != null).collect(Collectors.toList()).stream()
103
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
31187 tejbeer 104
 
31213 tejbeer 105
			List<HygieneData> filteredHygieneData = new ArrayList<>();
106
			if (!hygieneData.isEmpty()) {
107
				List<Integer> filteredOrderIds = fofoOrdersMap.values().stream().map(x -> x.getId())
108
						.collect(Collectors.toList());
31187 tejbeer 109
 
31213 tejbeer 110
				filteredHygieneData.addAll(hygieneData.stream().filter(x -> filteredOrderIds.contains(x.getOrderId()))
111
						.collect(Collectors.toList()));
25640 tejbeer 112
 
31213 tejbeer 113
			}
114
			model.addAttribute("hygieneData", filteredHygieneData).addAttribute("fofoOrder", fofoOrdersMap)
115
					.addAttribute("partnerAddress", partnerAddressMap).addAttribute("customerAddress", customerAddress);
116
 
117
		} else {
118
			model.addAttribute("hygieneData", hygieneData);
31186 tejbeer 119
		}
120
 
25640 tejbeer 121
		return "hygiene";
122
	}
123
 
26751 amit.gupta 124
	private Map<Integer, FofoOrder> getfofoOrderByOrderId(List<Integer> fofoOrderIds)
25650 tejbeer 125
			throws ProfitMandiBusinessException {
31172 tejbeer 126
		Map<Integer, FofoOrder> fofoOrderMap = new HashMap<>();
127
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectAllByOrderIds(fofoOrderIds);
25640 tejbeer 128
 
31172 tejbeer 129
		for (FofoOrder fofoOrder : fofoOrders) {
130
			List<FofoOrderItem> fofoItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
131
 
132
			boolean smartPhone = false;
133
			for (FofoOrderItem fofoItem : fofoItems) {
134
				Item orderItem = itemRepository.selectById(fofoItem.getItemId());
135
				if (orderItem.isSmartPhone()) {
136
					smartPhone = true;
137
				}
138
 
139
			}
140
 
141
			if (smartPhone) {
142
				fofoOrderMap.put(fofoOrder.getId(), fofoOrder);
143
			}
144
 
145
		}
146
		return fofoOrderMap;
25640 tejbeer 147
	}
148
 
26751 amit.gupta 149
	private Map<Integer, CustomerAddress> getCustomerAddressByFofoOrder(Collection<FofoOrder> fofoOrders)
25640 tejbeer 150
			throws ProfitMandiBusinessException {
151
		Map<Integer, CustomerAddress> customerAddressMap = new HashMap<>();
26751 amit.gupta 152
		for (FofoOrder fofoOrder : fofoOrders) {
25640 tejbeer 153
			CustomerAddress ca = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
25678 tejbeer 154
			customerAddressMap.put(fofoOrder.getCustomerAddressId(), ca);
25640 tejbeer 155
		}
156
		return customerAddressMap;
157
	}
158
 
159
	@RequestMapping(value = "/getFetchHygieneData", method = RequestMethod.GET)
160
	public String getFetchHygieneData(HttpServletRequest request, Model model) throws Exception {
161
 
162
		FofoOrder fofoOrder = null;
163
		CustomRetailer customRetailer = null;
164
		CustomerAddress customerAddress = null;
165
		List<FofoOrderItem> fofoOrderItems = null;
166
 
167
		List<HygieneData> hygiene = hygieneDataRepository.selectAllByDisposedTimestamp();
168
 
169
		hygiene = hygiene.stream().filter(x -> x.getNextTimestamp().isBefore(LocalDateTime.now()))
170
				.collect(Collectors.toList());
171
 
172
		if (!hygiene.isEmpty()) {
173
			fofoOrder = fofoOrderRepository.selectByOrderId(hygiene.get(0).getOrderId());
174
			customRetailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
175
			customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
176
			fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
177
 
178
		} else {
179
 
180
			HygieneData hygieneData = hygieneDataRepository.selectFirstByDisposedTimestamp();
181
			if (hygieneData != null) {
182
				fofoOrder = fofoOrderRepository.selectByOrderId(hygieneData.getOrderId());
183
				customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
184
 
185
				customRetailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
186
 
187
				fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
188
 
189
				LOGGER.info("hygieneData" + hygieneData);
190
				LOGGER.info("fofoOrder" + fofoOrder);
191
				LOGGER.info("customRetailer" + customRetailer);
192
				LOGGER.info("customerAddress" + customerAddress);
193
 
194
			}
195
 
196
		}
197
 
198
		model.addAttribute("fofoOrder", fofoOrder);
199
		model.addAttribute("customRetailer", customRetailer);
200
		model.addAttribute("customerAddress", customerAddress);
201
		model.addAttribute("fofoOrderItems", fofoOrderItems);
202
 
203
		return "hygiene-modal";
204
	}
205
 
25650 tejbeer 206
	@RequestMapping(value = "/getFetchHygieneDataByOrderId", method = RequestMethod.GET)
207
	public String getFetchHygieneDataByOrderId(HttpServletRequest request, @RequestParam int orderId, Model model)
208
			throws Exception {
209
 
210
		FofoOrder fofoOrder = null;
211
		CustomRetailer customRetailer = null;
212
		CustomerAddress customerAddress = null;
213
		List<FofoOrderItem> fofoOrderItems = null;
214
 
215
		HygieneData hygiene = hygieneDataRepository.selectById(orderId);
216
 
217
		fofoOrder = fofoOrderRepository.selectByOrderId(hygiene.getOrderId());
218
		customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
219
 
220
		customRetailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
221
 
222
		fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
223
 
224
		LOGGER.info("hygieneData" + hygiene);
225
		LOGGER.info("fofoOrder" + fofoOrder);
226
		LOGGER.info("customRetailer" + customRetailer);
227
		LOGGER.info("customerAddress" + customerAddress);
228
 
229
		model.addAttribute("fofoOrder", fofoOrder);
230
		model.addAttribute("customRetailer", customRetailer);
231
		model.addAttribute("customerAddress", customerAddress);
232
		model.addAttribute("fofoOrderItems", fofoOrderItems);
233
 
234
		return "hygiene-modal";
235
	}
236
 
25640 tejbeer 237
	@RequestMapping(value = "/hygieneData", method = RequestMethod.POST)
238
	public String HygieneData(HttpServletRequest request, @RequestBody HygieneDataModel hygieneDataModel, Model model)
239
			throws Exception {
240
		HygieneData hygieneData = hygieneDataRepository.selectById(hygieneDataModel.getOrderId());
29329 amit.gupta 241
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(hygieneDataModel.getOrderId());
242
		LocalDateTime hygieneDateTime = hygieneData.getCreatedTimestamp().toLocalDate().atStartOfDay();
243
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
30426 tejbeer 244
		List<CustomerAddress> customerAddresses = customerAddressRepository
245
				.selectByMobileNumber(customerAddress.getPhoneNumber());
246
		LOGGER.info("Fofo id {}, Date Range = {}, Customer Address Ids  {}", fofoOrder.getFofoId(),
247
				DateRangeModel.of(hygieneDateTime, hygieneDateTime.plusDays(1)),
248
				customerAddresses.stream().map(x -> x.getId()).collect(Collectors.toList()));
249
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectByCustomerAddressIds(fofoOrder.getFofoId(),
250
				DateRangeModel.of(hygieneDateTime, hygieneDateTime.plusDays(1)),
251
				customerAddresses.stream().map(x -> x.getId()).collect(Collectors.toList()));
29329 amit.gupta 252
		LOGGER.info("Order Size - {}", fofoOrders.size());
30426 tejbeer 253
		for (FofoOrder fo : fofoOrders) {
29340 amit.gupta 254
			LOGGER.info("Order Id - {}", fo.getId());
29329 amit.gupta 255
			hygieneData = hygieneDataRepository.selectById(fo.getId());
30426 tejbeer 256
			if (hygieneData == null)
257
				continue;
29329 amit.gupta 258
			if (hygieneDataModel.getScheduleTime() != null) {
259
				hygieneData.setStatus(hygieneDataModel.getStatus());
260
				hygieneData.setRemark(hygieneDataModel.getRemark());
261
				hygieneData.setHygieneRating(hygieneDataModel.getHygieneRating());
262
				hygieneData.setNextTimestamp(hygieneDataModel.getScheduleTime());
263
				hygieneDataRepository.persist(hygieneData);
264
			} else {
265
				hygieneData.setStatus(hygieneDataModel.getStatus());
266
				hygieneData.setRemark(hygieneDataModel.getRemark());
267
				hygieneData.setRating(hygieneDataModel.getRating());
268
				hygieneData.setHygieneRating(hygieneDataModel.getHygieneRating());
269
				hygieneData.setDOP(hygieneDataModel.getDOP());
270
				hygieneData.setFeedback(hygieneDataModel.getFeedback());
271
				hygieneData.setQuesPhone(hygieneDataModel.getQuesPhone());
272
				hygieneData.setQuesInformation(hygieneDataModel.getQuesInformation());
273
				hygieneData.setQuesInvoice(hygieneDataModel.getQuesInvoice());
274
				hygieneData.setDisposedTimestamp(LocalDateTime.now());
275
				hygieneData.setNextTimestamp(null);
276
				hygieneDataRepository.persist(hygieneData);
277
			}
25640 tejbeer 278
		}
279
 
280
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
281
 
282
		return "response";
283
	}
284
 
285
}