Subversion Repositories SmartDukaan

Rev

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