Subversion Repositories SmartDukaan

Rev

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