Subversion Repositories SmartDukaan

Rev

Rev 29341 | Rev 31172 | 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;
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;
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;
29329 amit.gupta 41
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
25640 tejbeer 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
27489 tejbeer 68
	private RetailerService reatilerService;
69
 
70
	@Autowired
71
	private FofoStoreRepository fofotSoreRepository;
72
	@Autowired
25640 tejbeer 73
	private MVCResponseSender mvcResponseSender;
74
	private static final Logger LOGGER = LogManager.getLogger(HygieneController.class);
75
 
76
	@RequestMapping(value = "/getHygieneData", method = RequestMethod.GET)
27489 tejbeer 77
	public String getHygieneData(HttpServletRequest request,
78
			@RequestParam(name = "fofoId", required = false, defaultValue = "0") int fofoId, Model model)
79
			throws ProfitMandiBusinessException {
80
		List<HygieneData> hygieneData = null;
81
		if (fofoId != 0) {
82
			hygieneData = hygieneDataRepository.selectAllByFofoIdDisposedTimestamp(fofoId);
83
		} else {
84
			hygieneData = hygieneDataRepository.selectByDisposedTimestamp();
85
		}
86
 
26751 amit.gupta 87
		List<Integer> orderIds = hygieneData.stream().map(x -> x.getOrderId()).collect(Collectors.toList());
88
		Map<Integer, FofoOrder> fofoOrdersMap = this.getfofoOrderByOrderId(orderIds);
27489 tejbeer 89
		Set<Integer> fofoIds = fofoOrdersMap.values().stream().map(x -> x.getFofoId()).collect(Collectors.toSet());
26751 amit.gupta 90
		Map<Integer, CustomerAddress> customerAddress = this.getCustomerAddressByFofoOrder(fofoOrdersMap.values());
30426 tejbeer 91
		Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25640 tejbeer 92
 
30426 tejbeer 93
		Map<Integer, CustomRetailer> partnerAddressMap = fofoIds.stream().map(x -> customRetailerMap.get(x))
94
				.filter(x -> x != null).collect(Collectors.toList()).stream()
95
				.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
25640 tejbeer 96
 
27489 tejbeer 97
		model.addAttribute("hygieneData", hygieneData).addAttribute("fofoOrder", fofoOrdersMap)
98
				.addAttribute("partnerAddress", partnerAddressMap).addAttribute("customerAddress", customerAddress);
99
 
25640 tejbeer 100
		return "hygiene";
101
	}
102
 
26751 amit.gupta 103
	private Map<Integer, FofoOrder> getfofoOrderByOrderId(List<Integer> fofoOrderIds)
25650 tejbeer 104
			throws ProfitMandiBusinessException {
26751 amit.gupta 105
		Map<Integer, FofoOrder> fofoOrders = fofoOrderRepository.selectAllByOrderIds(fofoOrderIds).stream()
106
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
25640 tejbeer 107
 
108
		return fofoOrders;
109
	}
110
 
26751 amit.gupta 111
	private Map<Integer, CustomerAddress> getCustomerAddressByFofoOrder(Collection<FofoOrder> fofoOrders)
25640 tejbeer 112
			throws ProfitMandiBusinessException {
113
		Map<Integer, CustomerAddress> customerAddressMap = new HashMap<>();
26751 amit.gupta 114
		for (FofoOrder fofoOrder : fofoOrders) {
25640 tejbeer 115
			CustomerAddress ca = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
25678 tejbeer 116
			customerAddressMap.put(fofoOrder.getCustomerAddressId(), ca);
25640 tejbeer 117
		}
118
		return customerAddressMap;
119
	}
120
 
121
	@RequestMapping(value = "/getFetchHygieneData", method = RequestMethod.GET)
122
	public String getFetchHygieneData(HttpServletRequest request, Model model) throws Exception {
123
 
124
		FofoOrder fofoOrder = null;
125
		CustomRetailer customRetailer = null;
126
		CustomerAddress customerAddress = null;
127
		List<FofoOrderItem> fofoOrderItems = null;
128
 
129
		List<HygieneData> hygiene = hygieneDataRepository.selectAllByDisposedTimestamp();
130
 
131
		hygiene = hygiene.stream().filter(x -> x.getNextTimestamp().isBefore(LocalDateTime.now()))
132
				.collect(Collectors.toList());
133
 
134
		if (!hygiene.isEmpty()) {
135
			fofoOrder = fofoOrderRepository.selectByOrderId(hygiene.get(0).getOrderId());
136
			customRetailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
137
			customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
138
			fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
139
 
140
		} else {
141
 
142
			HygieneData hygieneData = hygieneDataRepository.selectFirstByDisposedTimestamp();
143
			if (hygieneData != null) {
144
				fofoOrder = fofoOrderRepository.selectByOrderId(hygieneData.getOrderId());
145
				customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
146
 
147
				customRetailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
148
 
149
				fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
150
 
151
				LOGGER.info("hygieneData" + hygieneData);
152
				LOGGER.info("fofoOrder" + fofoOrder);
153
				LOGGER.info("customRetailer" + customRetailer);
154
				LOGGER.info("customerAddress" + customerAddress);
155
 
156
			}
157
 
158
		}
159
 
160
		model.addAttribute("fofoOrder", fofoOrder);
161
		model.addAttribute("customRetailer", customRetailer);
162
		model.addAttribute("customerAddress", customerAddress);
163
		model.addAttribute("fofoOrderItems", fofoOrderItems);
164
 
165
		return "hygiene-modal";
166
	}
167
 
25650 tejbeer 168
	@RequestMapping(value = "/getFetchHygieneDataByOrderId", method = RequestMethod.GET)
169
	public String getFetchHygieneDataByOrderId(HttpServletRequest request, @RequestParam int orderId, Model model)
170
			throws Exception {
171
 
172
		FofoOrder fofoOrder = null;
173
		CustomRetailer customRetailer = null;
174
		CustomerAddress customerAddress = null;
175
		List<FofoOrderItem> fofoOrderItems = null;
176
 
177
		HygieneData hygiene = hygieneDataRepository.selectById(orderId);
178
 
179
		fofoOrder = fofoOrderRepository.selectByOrderId(hygiene.getOrderId());
180
		customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
181
 
182
		customRetailer = retailerService.getFofoRetailer(fofoOrder.getFofoId());
183
 
184
		fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
185
 
186
		LOGGER.info("hygieneData" + hygiene);
187
		LOGGER.info("fofoOrder" + fofoOrder);
188
		LOGGER.info("customRetailer" + customRetailer);
189
		LOGGER.info("customerAddress" + customerAddress);
190
 
191
		model.addAttribute("fofoOrder", fofoOrder);
192
		model.addAttribute("customRetailer", customRetailer);
193
		model.addAttribute("customerAddress", customerAddress);
194
		model.addAttribute("fofoOrderItems", fofoOrderItems);
195
 
196
		return "hygiene-modal";
197
	}
198
 
25640 tejbeer 199
	@RequestMapping(value = "/hygieneData", method = RequestMethod.POST)
200
	public String HygieneData(HttpServletRequest request, @RequestBody HygieneDataModel hygieneDataModel, Model model)
201
			throws Exception {
202
		HygieneData hygieneData = hygieneDataRepository.selectById(hygieneDataModel.getOrderId());
29329 amit.gupta 203
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(hygieneDataModel.getOrderId());
204
		LocalDateTime hygieneDateTime = hygieneData.getCreatedTimestamp().toLocalDate().atStartOfDay();
205
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
30426 tejbeer 206
		List<CustomerAddress> customerAddresses = customerAddressRepository
207
				.selectByMobileNumber(customerAddress.getPhoneNumber());
208
		LOGGER.info("Fofo id {}, Date Range = {}, Customer Address Ids  {}", fofoOrder.getFofoId(),
209
				DateRangeModel.of(hygieneDateTime, hygieneDateTime.plusDays(1)),
210
				customerAddresses.stream().map(x -> x.getId()).collect(Collectors.toList()));
211
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectByCustomerAddressIds(fofoOrder.getFofoId(),
212
				DateRangeModel.of(hygieneDateTime, hygieneDateTime.plusDays(1)),
213
				customerAddresses.stream().map(x -> x.getId()).collect(Collectors.toList()));
29329 amit.gupta 214
		LOGGER.info("Order Size - {}", fofoOrders.size());
30426 tejbeer 215
		for (FofoOrder fo : fofoOrders) {
29340 amit.gupta 216
			LOGGER.info("Order Id - {}", fo.getId());
29329 amit.gupta 217
			hygieneData = hygieneDataRepository.selectById(fo.getId());
30426 tejbeer 218
			if (hygieneData == null)
219
				continue;
29329 amit.gupta 220
			if (hygieneDataModel.getScheduleTime() != null) {
221
				hygieneData.setStatus(hygieneDataModel.getStatus());
222
				hygieneData.setRemark(hygieneDataModel.getRemark());
223
				hygieneData.setHygieneRating(hygieneDataModel.getHygieneRating());
224
				hygieneData.setNextTimestamp(hygieneDataModel.getScheduleTime());
225
				hygieneDataRepository.persist(hygieneData);
226
			} else {
227
				hygieneData.setStatus(hygieneDataModel.getStatus());
228
				hygieneData.setRemark(hygieneDataModel.getRemark());
229
				hygieneData.setRating(hygieneDataModel.getRating());
230
				hygieneData.setHygieneRating(hygieneDataModel.getHygieneRating());
231
				hygieneData.setDOP(hygieneDataModel.getDOP());
232
				hygieneData.setFeedback(hygieneDataModel.getFeedback());
233
				hygieneData.setQuesPhone(hygieneDataModel.getQuesPhone());
234
				hygieneData.setQuesInformation(hygieneDataModel.getQuesInformation());
235
				hygieneData.setQuesInvoice(hygieneDataModel.getQuesInvoice());
236
				hygieneData.setDisposedTimestamp(LocalDateTime.now());
237
				hygieneData.setNextTimestamp(null);
238
				hygieneDataRepository.persist(hygieneData);
239
			}
25640 tejbeer 240
		}
241
 
242
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
243
 
244
		return "response";
245
	}
246
 
247
}