Subversion Repositories SmartDukaan

Rev

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