Subversion Repositories SmartDukaan

Rev

Rev 31573 | Rev 32019 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 31573 Rev 32018
Line 82... Line 82...
82
 
82
 
83
@Controller
83
@Controller
84
@Transactional(rollbackFor = Throwable.class)
84
@Transactional(rollbackFor = Throwable.class)
85
public class StoreController {
85
public class StoreController {
86
 
86
 
87
	private static final Logger logger = LogManager.getLogger(StoreController.class);
87
    private static final Logger logger = LogManager.getLogger(StoreController.class);
88
 
88
 
89
	private static final LocalTime CUTOFF_TIME = LocalTime.of(15, 0);
89
    private static final LocalTime CUTOFF_TIME = LocalTime.of(15, 0);
90
 
90
 
91
	private static final List<Integer> TAG_IDS = Arrays.asList(4);
91
    private static final List<Integer> TAG_IDS = Arrays.asList(4);
92
 
92
 
93
	@Autowired
93
    @Autowired
94
	CustomerAddressRepository customerAddressRepository;
94
    CustomerAddressRepository customerAddressRepository;
95
 
95
 
96
	@Autowired
96
    @Autowired
97
	WebOfferRepository webOfferRepository;
97
    WebOfferRepository webOfferRepository;
98
 
98
 
99
	@Value("${new.solr.url}")
99
    @Value("${new.solr.url}")
100
	private String solrUrl;
100
    private String solrUrl;
101
 
101
 
102
	@Autowired
102
    @Autowired
103
	private PartnerIndexService partnerIndexService;
103
    private PartnerIndexService partnerIndexService;
104
 
104
 
105
	@Autowired
105
    @Autowired
106
	InventoryService inventoryService;
106
    InventoryService inventoryService;
107
 
107
 
108
	@Autowired
108
    @Autowired
109
	UserAccountRepository userAccountRepository;
109
    UserAccountRepository userAccountRepository;
110
 
110
 
111
	@Value("${python.api.host}")
111
    @Value("${python.api.host}")
112
	private String host;
112
    private String host;
113
 
113
 
114
	@Autowired
114
    @Autowired
115
	CustomerService customerService;
115
    CustomerService customerService;
116
 
116
 
117
	@Value("${python.api.port}")
117
    @Value("${python.api.port}")
118
	private int port;
118
    private int port;
119
 
119
 
120
	@Autowired
120
    @Autowired
121
	private SaholicInventoryService saholicInventoryService;
121
    private SaholicInventoryService saholicInventoryService;
122
 
122
 
123
	@Autowired
123
    @Autowired
124
	private PincodePartnerRepository pincodePartnerRepository;
124
    private PincodePartnerRepository pincodePartnerRepository;
125
 
125
 
126
	@Autowired
126
    @Autowired
127
	private FofoStoreRepository fofoStoreRepository;
127
    private FofoStoreRepository fofoStoreRepository;
128
 
128
 
129
	@Autowired
129
    @Autowired
130
	private RetailerService retailerService;
130
    private RetailerService retailerService;
131
 
131
 
132
	@Autowired
132
    @Autowired
133
	private PendingOrderRepository pendingOrderRepository;
133
    private PendingOrderRepository pendingOrderRepository;
134
 
134
 
135
	@Autowired
135
    @Autowired
136
	private PendingOrderItemRepository pendingOrderItemRepository;
136
    private PendingOrderItemRepository pendingOrderItemRepository;
137
 
137
 
138
	@Autowired
138
    @Autowired
139
	private PendingOrderService pendingOrderService;
139
    private PendingOrderService pendingOrderService;
140
 
140
 
141
	@Autowired
141
    @Autowired
142
	private CustomerRepository customerRepository;
142
    private CustomerRepository customerRepository;
143
 
143
 
144
	@Autowired
144
    @Autowired
145
	private SolrService commonSolrService;
145
    private SolrService commonSolrService;
146
 
146
 
147
	@Autowired
147
    @Autowired
148
	private OtpProcessor otpProcessor;
148
    private OtpProcessor otpProcessor;
149
 
149
 
150
	@Autowired
150
    @Autowired
151
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
151
    private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
152
 
152
 
153
	@Autowired
153
    @Autowired
154
	private ResponseSender<?> responseSender;
154
    private ResponseSender<?> responseSender;
155
 
155
 
156
	@Autowired
156
    @Autowired
157
	private TagListingRepository tagListingRepository;
157
    private TagListingRepository tagListingRepository;
158
 
158
 
159
	@Autowired
159
    @Autowired
160
	private ItemRepository itemRepository;
160
    private ItemRepository itemRepository;
161
 
161
 
162
	@Autowired
162
    @Autowired
163
	private SchemeService schemeService;
163
    private SchemeService schemeService;
164
 
164
 
165
	@Autowired
165
    @Autowired
166
	private UserRepository userRepository;
166
    private UserRepository userRepository;
167
 
167
 
168
	@Autowired
168
    @Autowired
169
	private ItemAvailabilityCacheRepository itemAvailabilityCacheRepository;
169
    private ItemAvailabilityCacheRepository itemAvailabilityCacheRepository;
170
 
170
 
171
	@Autowired
171
    @Autowired
172
	private WebListingRepository webListingRepository;
172
    private WebListingRepository webListingRepository;
173
 
173
 
174
	@Autowired
174
    @Autowired
175
	private WebProductListingRepository webProductListingRepository;
175
    private WebProductListingRepository webProductListingRepository;
176
 
176
 
177
	@Autowired
177
    @Autowired
178
	private RoleManager roleManagerService;
178
    private RoleManager roleManagerService;
179
 
179
 
180
	@Autowired
180
    @Autowired
181
	EmailService emailService;
181
    EmailService emailService;
182
 
182
 
183
	@Autowired
183
    @Autowired
184
	CsService csService;
184
    CsService csService;
185
 
185
 
186
	@Autowired
186
    @Autowired
187
	private NotificationService notificationService;
187
    private NotificationService notificationService;
188
 
188
 
189
	@Autowired
189
    @Autowired
190
	private com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
190
    private com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
191
 
191
 
192
	@Autowired
192
    @Autowired
193
	private FofoOrderRepository fofoOrderRepository;
193
    private FofoOrderRepository fofoOrderRepository;
194
 
194
 
195
	@Autowired
195
    @Autowired
196
	private FofoOrderItemRepository fofoOrderItemRepository;
196
    private FofoOrderItemRepository fofoOrderItemRepository;
197
 
197
 
198
	@Autowired
198
    @Autowired
199
	private OrderService orderService;
199
    private OrderService orderService;
200
 
200
 
201
	@Autowired
201
    @Autowired
202
	private ScratchOfferRepository scratchOfferRepository;
202
    private ScratchOfferRepository scratchOfferRepository;
203
	private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
203
    private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
204
 
204
 
205
	List<String> filterableParams = Arrays.asList("brand");
205
    List<String> filterableParams = Arrays.asList("brand");
206
 
206
 
207
	@RequestMapping(value = "/store/entity/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
207
    @RequestMapping(value = "/store/entity/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
208
	@ApiImplicitParams({
208
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
209
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
209
    @ApiOperation(value = "Get unit deal object")
210
	@ApiOperation(value = "Get unit deal object")
210
    public ResponseEntity<?> getUnitFocoDeal(HttpServletRequest request, @PathVariable(value = "id") long id) throws ProfitMandiBusinessException {
211
	public ResponseEntity<?> getUnitFocoDeal(HttpServletRequest request, @PathVariable(value = "id") long id)
211
        List<FofoCatalogResponse> dealResponses = new ArrayList<>();
212
			throws ProfitMandiBusinessException {
212
        List<Integer> tagIds = Arrays.asList(4);
213
		List<FofoCatalogResponse> dealResponses = new ArrayList<>();
213
        FofoCatalogResponse fofoCatalogResponse = null;
214
		List<Integer> tagIds = Arrays.asList(4);
214
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
215
		FofoCatalogResponse fofoCatalogResponse = null;
215
        if (roleManagerService.isPartner(userInfo.getRoleIds())) {
216
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
216
            String categoryId = "(3 OR 6)";
217
		if (roleManagerService.isPartner(userInfo.getRoleIds())) {
217
 
218
			String categoryId = "(3 OR 6)";
218
            RestClient rc = new RestClient();
219
 
219
            Map<String, String> params = new HashMap<>();
220
			RestClient rc = new RestClient();
220
            List<String> mandatoryQ = new ArrayList<>();
221
			Map<String, String> params = new HashMap<>();
221
            String catalogString = "catalog" + id;
222
			List<String> mandatoryQ = new ArrayList<>();
222
 
223
			String catalogString = "catalog" + id;
223
            mandatoryQ.add(String.format("+(categoryId_i:%s) +(id:%s) +{!parent which=\"id:%s\"} tagId_i:(%s)", categoryId, catalogString, catalogString, StringUtils.join(tagIds, " ")));
224
 
224
 
225
			mandatoryQ.add(String.format("+(categoryId_i:%s) +(id:%s) +{!parent which=\"id:%s\"} tagId_i:(%s)",
225
            params.put("q", StringUtils.join(mandatoryQ, " "));
226
					categoryId, catalogString, catalogString, StringUtils.join(tagIds, " ")));
226
            params.put("fl", "*, [child parentFilter=id:catalog*]");
227
 
227
            params.put("sort", "rank_i asc, create_s desc");
228
			params.put("q", StringUtils.join(mandatoryQ, " "));
228
            params.put("wt", "json");
229
			params.put("fl", "*, [child parentFilter=id:catalog*]");
229
            String response = null;
230
			params.put("sort", "rank_i asc, create_s desc");
230
            try {
231
			params.put("wt", "json");
231
                response = rc.get(SchemeType.HTTP, solrUrl, 8984, "solr/demo/select", params);
232
			String response = null;
232
            } catch (HttpHostConnectException e) {
233
			try {
233
                throw new ProfitMandiBusinessException("", "", "Could not connect to host");
234
				response = rc.get(SchemeType.HTTP, solrUrl, 8984, "solr/demo/select", params);
234
            }
235
			} catch (HttpHostConnectException e) {
235
            JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
236
				throw new ProfitMandiBusinessException("", "", "Could not connect to host");
236
            JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
237
			}
237
            dealResponses = getCatalogResponse(docs, false, userInfo.getRetailerId());
238
			JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
238
            fofoCatalogResponse = dealResponses.get(0);
239
			JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
239
            fofoCatalogResponse.setWebOffers(webOfferRepository.selectAllActiveOffers().get(fofoCatalogResponse.getCatalogId()));
240
			dealResponses = getCatalogResponse(docs, false, userInfo.getRetailerId());
240
 
241
			fofoCatalogResponse = dealResponses.get(0);
241
        } else {
242
			fofoCatalogResponse
242
            return responseSender.badRequest(
243
					.setWebOffers(webOfferRepository.selectAllActiveOffers().get(fofoCatalogResponse.getCatalogId()));
243
                    new ProfitMandiBusinessException("Retailer id", userInfo.getUserId(), "NOT_FOFO_RETAILER"));
244
 
244
        }
245
		} else {
245
        return responseSender.ok(dealResponses.get(0));
246
			return responseSender.badRequest(
246
    }
247
					new ProfitMandiBusinessException("Retailer id", userInfo.getUserId(), "NOT_FOFO_RETAILER"));
247
 
248
		}
248
    private Object toDealObject(JsonObject jsonObject) {
249
		return responseSender.ok(dealResponses.get(0));
249
        if (jsonObject.get("dealObject") != null && jsonObject.get("dealObject").asInt() == 1) {
250
	}
250
            return new Gson().fromJson(jsonObject.toString(), DealObjectResponse.class);
251
 
251
        }
252
	private Object toDealObject(JsonObject jsonObject) {
252
        return new Gson().fromJson(jsonObject.toString(), DealsResponse.class);
253
		if (jsonObject.get("dealObject") != null && jsonObject.get("dealObject").asInt() == 1) {
253
    }
254
			return new Gson().fromJson(jsonObject.toString(), DealObjectResponse.class);
254
 
255
		}
255
    @RequestMapping(value = "/store/brands", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
256
		return new Gson().fromJson(jsonObject.toString(), DealsResponse.class);
256
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
257
	}
257
    @ApiOperation(value = "Get brand list and count for category")
258
 
258
    public ResponseEntity<?> getBrands(HttpServletRequest request, @RequestParam(value = "category_id") String category_id) throws ProfitMandiBusinessException {
259
	@RequestMapping(value = "/store/brands", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
259
        logger.info("Request " + request.getParameterMap());
260
	@ApiImplicitParams({
260
        String response = null;
261
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
261
        // TODO: move to properties
262
	@ApiOperation(value = "Get brand list and count for category")
262
        String uri = ProfitMandiConstants.URL_BRANDS;
263
	public ResponseEntity<?> getBrands(HttpServletRequest request,
263
        RestClient rc = new RestClient();
264
			@RequestParam(value = "category_id") String category_id) throws ProfitMandiBusinessException {
264
        Map<String, String> params = new HashMap<>();
265
		logger.info("Request " + request.getParameterMap());
265
        params.put("category_id", category_id);
266
		String response = null;
266
        List<DealBrands> dealBrandsResponse = null;
267
		// TODO: move to properties
267
        try {
268
		String uri = ProfitMandiConstants.URL_BRANDS;
268
            response = rc.get(SchemeType.HTTP, host, port, uri, params);
269
		RestClient rc = new RestClient();
269
        } catch (HttpHostConnectException e) {
270
		Map<String, String> params = new HashMap<>();
270
            throw new ProfitMandiBusinessException("", "", "Could not connect to host");
271
		params.put("category_id", category_id);
271
        }
272
		List<DealBrands> dealBrandsResponse = null;
272
 
273
		try {
273
        dealBrandsResponse = new Gson().fromJson(response, new TypeToken<List<DealBrands>>() {
274
			response = rc.get(SchemeType.HTTP, host, port, uri, params);
274
        }.getType());
275
		} catch (HttpHostConnectException e) {
275
 
276
			throw new ProfitMandiBusinessException("", "", "Could not connect to host");
276
        return responseSender.ok(dealBrandsResponse);
277
		}
277
    }
278
 
278
 
279
		dealBrandsResponse = new Gson().fromJson(response, new TypeToken<List<DealBrands>>() {
279
    @RequestMapping(value = "/store/listing/{listingUrl}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
280
		}.getType());
280
    public ResponseEntity<?> bestSellers(HttpServletRequest request, @PathVariable String listingUrl) throws Exception {
281
 
281
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
282
		return responseSender.ok(dealBrandsResponse);
282
        WebListing webListing = webListingRepository.selectByUrl(listingUrl);
283
	}
283
        webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
284
 
284
        return responseSender.ok(webListing);
285
	@RequestMapping(value = "/store/listing/{listingUrl}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
285
    }
286
	public ResponseEntity<?> bestSellers(HttpServletRequest request, @PathVariable String listingUrl) throws Exception {
286
 
287
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
287
    @RequestMapping(value = "/store/otp/generateOTP", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
288
		WebListing webListing = webListingRepository.selectByUrl(listingUrl);
288
    public ResponseEntity<?> generateOtp(HttpServletRequest request, @RequestParam String mobile) throws Exception {
289
		webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
289
 
290
		return responseSender.ok(webListing);
290
        return responseSender.ok(otpProcessor.generateOtp(mobile, OtpType.REGISTRATION));
291
	}
291
 
292
 
292
    }
293
	@RequestMapping(value = "/store/otp/generateOTP", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
293
 
294
	public ResponseEntity<?> generateOtp(HttpServletRequest request, @RequestParam String mobile) throws Exception {
294
    @RequestMapping(value = "/store/checkmobile/{mobile}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
295
 
295
    public ResponseEntity<?> checkRegistrationUsingMobile(HttpServletRequest request, @PathVariable String mobile) throws Exception {
296
		return responseSender.ok(otpProcessor.generateOtp(mobile, OtpType.REGISTRATION));
296
        try {
297
 
297
            Customer customer = customerRepository.selectByMobileNumber(mobile);
298
	}
298
            customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
299
 
299
            return responseSender.ok(new CustomerModel(true, customer));
300
	@RequestMapping(value = "/store/checkmobile/{mobile}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
300
        } catch (Exception e) {
301
	public ResponseEntity<?> checkRegistrationUsingMobile(HttpServletRequest request, @PathVariable String mobile)
301
            return responseSender.ok(new CustomerModel(false, null));
302
			throws Exception {
302
        }
303
		try {
303
    }
304
			Customer customer = customerRepository.selectByMobileNumber(mobile);
304
 
305
			customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
305
 
306
			return responseSender.ok(new CustomerModel(true, customer));
306
    @RequestMapping(value = "/store/getCustomerById", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
307
		} catch (Exception e) {
307
    public ResponseEntity<?> getCustomerById(HttpServletRequest request, @PathVariable int id) throws Exception {
308
			return responseSender.ok(new CustomerModel(false, null));
308
 
309
		}
309
        Customer customer = customerRepository.selectById(id);
310
	}
310
        customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
311
 
311
        return responseSender.ok(customer);
312
	@RequestMapping(value = "/store/signin", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
312
 
313
	public ResponseEntity<?> signIn(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
313
    }
314
		if (customerService.authenticate(userModel.getMobile(), userModel.getPassword())) {
314
 
315
			return responseSender.ok(true);
315
    @RequestMapping(value = "/store/signin", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
316
		} else {
316
    public ResponseEntity<?> signIn(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
317
			return responseSender.ok(false);
317
        if (customerService.authenticate(userModel.getMobile(), userModel.getPassword())) {
318
		}
318
            return responseSender.ok(true);
319
	}
319
        } else {
320
 
320
            return responseSender.ok(false);
321
	@RequestMapping(value = "/store/resetPassword", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
321
        }
322
	public ResponseEntity<?> resetPassword(HttpServletRequest request, @RequestBody UserModel userModel)
322
    }
323
			throws Exception {
323
 
324
		customerService.changePassword(userModel.getMobile(), userModel.getPassword());
324
    @RequestMapping(value = "/store/resetPassword", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
325
		return responseSender.ok(true);
325
    public ResponseEntity<?> resetPassword(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
326
	}
326
        customerService.changePassword(userModel.getMobile(), userModel.getPassword());
327
 
327
        return responseSender.ok(true);
328
	@RequestMapping(value = "/store/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
328
    }
329
	public ResponseEntity<?> register(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
329
 
330
		Customer customer = new Customer();
330
    @RequestMapping(value = "/store/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
331
		customer.setPassword(userModel.getPassword());
331
    public ResponseEntity<?> register(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
332
		customer.setEmailId(userModel.getEmail());
332
        Customer customer = new Customer();
333
		customer.setFirstName(userModel.getFirstName());
333
        customer.setPassword(userModel.getPassword());
334
		customer.setLastName(userModel.getLastName());
334
        customer.setEmailId(userModel.getEmail());
335
		customer.setMobileNumber(userModel.getMobile());
335
        customer.setFirstName(userModel.getFirstName());
336
		return responseSender.ok(customerService.addCustomer(customer));
336
        customer.setLastName(userModel.getLastName());
337
	}
337
        customer.setMobileNumber(userModel.getMobile());
338
 
338
        return responseSender.ok(customerService.addCustomer(customer));
339
	@RequestMapping(value = "/store/confirmOrder", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
339
    }
340
	public ResponseEntity<?> confirmOrder(HttpServletRequest request,
340
 
341
			@RequestBody CreatePendingOrderRequest createPendingOrderRequest) throws Exception {
341
    @RequestMapping(value = "/store/confirmOrder", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
342
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
342
    public ResponseEntity<?> confirmOrder(HttpServletRequest request, @RequestBody CreatePendingOrderRequest createPendingOrderRequest) throws Exception {
343
		Integer storeId = userInfo.getRetailerId();
343
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
344
		createPendingOrderRequest.setFofoId(storeId);
344
        Integer storeId = userInfo.getRetailerId();
345
		List<CreatePendingOrderItem> pendingOrderItems = createPendingOrderRequest.getCreatePendingOrderItem();
345
        createPendingOrderRequest.setFofoId(storeId);
346
		List<CartItem> cartItems = new ArrayList<>();
346
        List<CreatePendingOrderItem> pendingOrderItems = createPendingOrderRequest.getCreatePendingOrderItem();
347
		pendingOrderItems.stream().forEach(x -> {
347
        List<CartItem> cartItems = new ArrayList<>();
348
			CartItem ci = new CartItem();
348
        pendingOrderItems.stream().forEach(x -> {
349
			ci.setItemId(x.getItemId());
349
            CartItem ci = new CartItem();
350
			ci.setQuantity(x.getQuantity());
350
            ci.setItemId(x.getItemId());
351
			ci.setSellingPrice(x.getSellingPrice());
351
            ci.setQuantity(x.getQuantity());
352
			cartItems.add(ci);
352
            ci.setSellingPrice(x.getSellingPrice());
353
		});
353
            cartItems.add(ci);
354
		CartResponse cr = this.validateCart(storeId, cartItems);
354
        });
355
		if (cr.getCartMessageChanged() > 0 || cr.getTotalAmount() != createPendingOrderRequest.getTotalAmount()) {
355
        CartResponse cr = this.validateCart(storeId, cartItems);
356
			return responseSender.badRequest("Invalid request");
356
        if (cr.getCartMessageChanged() > 0 || cr.getTotalAmount() != createPendingOrderRequest.getTotalAmount()) {
357
		}
357
            return responseSender.badRequest("Invalid request");
358
 
358
        }
359
		Map<String, String> returnMap = this.pendingOrderService.createPendingOrder(createPendingOrderRequest, cr);
359
 
360
 
360
        Map<String, String> returnMap = this.pendingOrderService.createPendingOrder(createPendingOrderRequest, cr);
361
		PendingOrder pendingOrder = pendingOrderRepository.selectById(Integer.parseInt(returnMap.get("poId")));
361
 
362
		if (offlineOrders.contains(pendingOrder.getPayMethod())) {
362
        PendingOrder pendingOrder = pendingOrderRepository.selectById(Integer.parseInt(returnMap.get("poId")));
363
 
363
        if (offlineOrders.contains(pendingOrder.getPayMethod())) {
364
			Map<String, Object> emailModel = pendingOrderService.sendCreateOrderMail(pendingOrder);
364
 
365
 
365
            Map<String, Object> emailModel = pendingOrderService.sendCreateOrderMail(pendingOrder);
366
			CustomRetailer customRetailer = retailerService.getFofoRetailer(pendingOrder.getFofoId());
366
 
367
			Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
367
            CustomRetailer customRetailer = retailerService.getFofoRetailer(pendingOrder.getFofoId());
368
			String[] customerEmail = null;
368
            Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
369
			if (Utils.validateEmail(customer.getEmailId())) {
369
            String[] customerEmail = null;
370
				customerEmail = new String[] { customer.getEmailId() };
370
            if (Utils.validateEmail(customer.getEmailId())) {
371
			}
371
                customerEmail = new String[]{customer.getEmailId()};
372
 
372
            }
373
			List<String> bccTo = Arrays.asList("kamini.sharma@smartdukaan.com", "tarun.verma@smartdukaan.com",
373
 
374
					"niranjan.kala@smartdukaan.com", "sm@smartdukaan.com", "tejbeer.kaur@shop2020.in",
374
            List<String> bccTo = Arrays.asList("kamini.sharma@smartdukaan.com", "tarun.verma@smartdukaan.com", "niranjan.kala@smartdukaan.com", "sm@smartdukaan.com", "tejbeer.kaur@shop2020.in", "devkinandan.lal@smartdukaan.com", customRetailer.getEmail());
375
					"devkinandan.lal@smartdukaan.com", customRetailer.getEmail());
375
 
376
 
376
            List<String> authUserEmails = csService.getAuthUserByPartnerId(customRetailer.getPartnerId());
377
			List<String> authUserEmails = csService.getAuthUserByPartnerId(customRetailer.getPartnerId());
377
            if (authUserEmails != null) {
378
			if (authUserEmails != null) {
378
                authUserEmails = new ArrayList<>();
379
				authUserEmails = new ArrayList<>();
379
            }
380
			}
380
            logger.info("authUserEmails {}", authUserEmails);
381
			logger.info("authUserEmails {}", authUserEmails);
381
            authUserEmails.addAll(bccTo);
382
			authUserEmails.addAll(bccTo);
382
            StringBuffer itemBuffer = new StringBuffer();
383
			StringBuffer itemBuffer = new StringBuffer();
383
            List<PendingOrderItem> orderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
384
			List<PendingOrderItem> orderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
384
            int totalItems = 0;
385
			int totalItems = 0;
385
            String itemNoColor = null;
386
			String itemNoColor = null;
386
            float maxValue = 0;
387
			float maxValue = 0;
387
            for (PendingOrderItem orderItem : orderItems) {
388
			for (PendingOrderItem orderItem : orderItems) {
388
                if (maxValue < orderItem.getSellingPrice()) {
389
				if (maxValue < orderItem.getSellingPrice()) {
389
                    maxValue = orderItem.getSellingPrice();
390
					maxValue = orderItem.getSellingPrice();
390
                    itemNoColor = itemRepository.selectById(orderItem.getItemId()).getItemDescriptionNoColor();
391
					itemNoColor = itemRepository.selectById(orderItem.getItemId()).getItemDescriptionNoColor();
391
                }
392
				}
392
                totalItems += orderItem.getQuantity();
393
				totalItems += orderItem.getQuantity();
393
            }
394
			}
394
            if (totalItems > 1) {
395
			if (totalItems > 1) {
395
                itemBuffer.append(StringUtils.abbreviate(itemNoColor, 22));
396
				itemBuffer.append(StringUtils.abbreviate(itemNoColor, 22));
396
                itemBuffer.append(" +").append(totalItems - 1).append(" items");
397
				itemBuffer.append(" +").append(totalItems - 1).append(" items");
397
            } else {
398
			} else {
398
                itemBuffer.append(StringUtils.abbreviate(itemNoColor, 30));
399
				itemBuffer.append(StringUtils.abbreviate(itemNoColor, 30));
399
            }
400
			}
400
            String message = String.format(OtpProcessor.TEMPLATE_ORDER_CREATED, pendingOrder.getId(), itemBuffer.toString(), pendingOrder.getTotalAmount());
401
			String message = String.format(OtpProcessor.TEMPLATE_ORDER_CREATED, pendingOrder.getId(),
401
            otpProcessor.sendSms(OtpProcessor.TEMPLATE_ORDER_CREATED_ID, message, customer.getMobileNumber());
402
					itemBuffer.toString(), pendingOrder.getTotalAmount());
402
 
403
			otpProcessor.sendSms(OtpProcessor.TEMPLATE_ORDER_CREATED_ID, message, customer.getMobileNumber());
403
            emailService.sendMailWithAttachments("Order Created with SmartDukaan", "order-confirm.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
404
 
404
 
405
			emailService.sendMailWithAttachments("Order Created with SmartDukaan", "order-confirm.vm", emailModel,
405
            List<String> emailIds = csService.getAuthUserIdByPartnerId(customRetailer.getPartnerId()).stream().map(x -> x.getEmailId()).collect(Collectors.toList());
406
					customerEmail, null, bccTo.toArray(new String[0]));
406
 
407
 
407
            emailIds.addAll(
408
			List<String> emailIds = csService.getAuthUserIdByPartnerId(customRetailer.getPartnerId()).stream()
408
                    csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_MARKETING, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3, EscalationType.L4)).stream().map(x -> x.getEmailId()).collect(Collectors.toList()));
409
					.map(x -> x.getEmailId()).collect(Collectors.toList());
409
            emailIds.add("tarun.verma@smartdukaan.com");
410
 
410
            emailIds.add("devkinandan.lal@smartdukaan.com");
411
			emailIds.addAll(
411
            emailIds.add("tejbeer.kaur@shop2020.in");
412
					csService
412
            List<User> user = dtrUserRepository.selectAllByEmailIds(emailIds);
413
							.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_MARKETING,
413
            List<Integer> userIds = user.stream().map(x -> x.getId()).collect(Collectors.toList());
414
									Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3,
414
 
415
											EscalationType.L4))
415
            logger.info("userIds" + userIds);
416
							.stream().map(x -> x.getEmailId()).collect(Collectors.toList()));
416
            SendNotificationModel sendNotificationModel = new SendNotificationModel();
417
			emailIds.add("tarun.verma@smartdukaan.com");
417
            sendNotificationModel.setCampaignName("Online Order Alert");
418
			emailIds.add("devkinandan.lal@smartdukaan.com");
418
            sendNotificationModel.setTitle("Online Order Update");
419
			emailIds.add("tejbeer.kaur@shop2020.in");
419
            sendNotificationModel.setMessage(String.format(
420
			List<User> user = dtrUserRepository.selectAllByEmailIds(emailIds);
420
                    "You have new Online Order. Please check your Dashboard. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
421
			List<Integer> userIds = user.stream().map(x -> x.getId()).collect(Collectors.toList());
421
            sendNotificationModel.setType("url");
422
 
422
            sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
423
			logger.info("userIds" + userIds);
423
            sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
424
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
424
            sendNotificationModel.setMessageType(MessageType.notification);
425
			sendNotificationModel.setCampaignName("Online Order Alert");
425
            int userId = userAccountRepository.selectUserIdByRetailerId(pendingOrder.getFofoId());
426
			sendNotificationModel.setTitle("Online Order Update");
426
            sendNotificationModel.setUserIds(Arrays.asList(userId));
427
			sendNotificationModel.setMessage(String.format(
427
            notificationService.sendNotification(sendNotificationModel);
428
					"You have new Online Order. Please check your Dashboard. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
428
 
429
			sendNotificationModel.setType("url");
429
            SendNotificationModel snm = new SendNotificationModel();
430
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
430
            snm.setCampaignName("Online Order Alert");
431
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
431
            snm.setTitle("Online Order Update");
432
			sendNotificationModel.setMessageType(MessageType.notification);
432
            snm.setMessage(String.format("Your Partner " + customRetailer.getBusinessName() + " have new Online Order. Please inform your partner. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
433
			int userId = userAccountRepository.selectUserIdByRetailerId(pendingOrder.getFofoId());
433
            snm.setType("url");
434
			sendNotificationModel.setUserIds(Arrays.asList(userId));
434
            snm.setUrl("https://app.smartdukaan.com/pages/home/notifications");
435
			notificationService.sendNotification(sendNotificationModel);
435
            snm.setExpiresat(LocalDateTime.now().plusDays(1));
436
 
436
            snm.setMessageType(MessageType.notification);
437
			SendNotificationModel snm = new SendNotificationModel();
437
            snm.setUserIds(userIds);
438
			snm.setCampaignName("Online Order Alert");
438
            notificationService.sendNotification(snm);
439
			snm.setTitle("Online Order Update");
439
 
440
			snm.setMessage(String.format("Your Partner " + customRetailer.getBusinessName()
440
        }
441
					+ " have new Online Order. Please inform your partner. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
441
        return responseSender.ok(returnMap);
442
			snm.setType("url");
442
 
443
			snm.setUrl("https://app.smartdukaan.com/pages/home/notifications");
443
    }
444
			snm.setExpiresat(LocalDateTime.now().plusDays(1));
444
 
445
			snm.setMessageType(MessageType.notification);
445
    @RequestMapping(value = "/store/address", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
446
			snm.setUserIds(userIds);
446
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
447
			notificationService.sendNotification(snm);
447
    @ApiOperation(value = "Get brand list and count for category")
448
 
448
    public ResponseEntity<?> getAddress(HttpServletRequest request) throws Exception {
449
		}
449
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
450
		return responseSender.ok(returnMap);
450
        Integer storeId = userInfo.getRetailerId();
451
 
451
        CustomRetailer customRetailer = retailerService.getFofoRetailer(storeId);
452
	}
452
 
453
 
453
        return responseSender.ok(customRetailer.getAddress());
454
	@RequestMapping(value = "/store/address", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
454
 
455
	@ApiImplicitParams({
455
    }
456
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
456
 
457
	@ApiOperation(value = "Get brand list and count for category")
457
    @RequestMapping(value = "/store/address/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
458
	public ResponseEntity<?> getAddress(HttpServletRequest request) throws Exception {
458
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
459
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
459
    @ApiOperation(value = "Get brand list and count for category")
460
		Integer storeId = userInfo.getRetailerId();
460
    public ResponseEntity<?> getStoresByPincode(HttpServletRequest request, @PathVariable String pincode) throws Exception {
461
		CustomRetailer customRetailer = retailerService.getFofoRetailer(storeId);
461
        List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
462
 
462
        int fofoId = ProfitMandiConstants.DEFAULT_STORE;
463
		return responseSender.ok(customRetailer.getAddress());
463
        if (pincodePartners.size() > 0) {
464
 
464
            List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
465
	}
465
            List<FofoStore> fofoStores = fofoStoreRepository.selectActivePartnersByRetailerIds(fofoIds);
466
 
466
            if (fofoStores.size() > 0) {
467
	@RequestMapping(value = "/store/address/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
467
                fofoId = fofoStores.get(0).getId();
468
	@ApiImplicitParams({
468
            }
469
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
469
 
470
	@ApiOperation(value = "Get brand list and count for category")
470
        }
471
	public ResponseEntity<?> getStoresByPincode(HttpServletRequest request, @PathVariable String pincode)
471
        return responseSender.ok(fofoStoreRepository.selectByRetailerId(fofoId).getCode());
472
			throws Exception {
472
    }
473
		List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
473
 
474
		int fofoId = ProfitMandiConstants.DEFAULT_STORE;
474
    @RequestMapping(value = "/store/addresses", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
475
		if (pincodePartners.size() > 0) {
475
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
476
			List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
476
    @ApiOperation(value = "Get brand list and count for category")
477
			List<FofoStore> fofoStores = fofoStoreRepository.selectActivePartnersByRetailerIds(fofoIds);
477
    public ResponseEntity<?> getStoresByPincod(HttpServletRequest request, @RequestParam String pincode, @RequestParam(name = "fofoCode", defaultValue = "", required = false) String fofoCode) throws Exception {
478
			if (fofoStores.size() > 0) {
478
 
479
				fofoId = fofoStores.get(0).getId();
479
        List<CustomRetailer> customerRetailers = new ArrayList<>();
480
			}
480
 
481
 
481
        logger.info("fofoCode" + fofoCode);
482
		}
482
 
483
		return responseSender.ok(fofoStoreRepository.selectByRetailerId(fofoId).getCode());
483
        if (fofoCode != null) {
484
	}
484
            FofoStore fs = fofoStoreRepository.selectByStoreCode(fofoCode.toUpperCase());
485
 
485
            PincodePartner pp = pincodePartnerRepository.selectPartnerByPincode(pincode, fs.getId());
486
	@RequestMapping(value = "/store/addresses", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
486
            if (pp != null) {
487
	@ApiImplicitParams({
487
                return responseSender.ok(customerRetailers.add(retailerService.getFofoRetailer(pp.getFofoId())));
488
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
488
            } else {
489
	@ApiOperation(value = "Get brand list and count for category")
489
 
490
	public ResponseEntity<?> getStoresByPincod(HttpServletRequest request, @RequestParam String pincode,
490
                List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
491
			@RequestParam(name = "fofoCode", defaultValue = "", required = false) String fofoCode) throws Exception {
491
                if (pincodePartners.size() > 0) {
492
 
492
 
493
		List<CustomRetailer> customerRetailers = new ArrayList<>();
493
                    List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
494
 
494
                    List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
495
		logger.info("fofoCode" + fofoCode);
495
 
496
 
496
                    Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
497
		if (fofoCode != null) {
497
 
498
			FofoStore fs = fofoStoreRepository.selectByStoreCode(fofoCode.toUpperCase());
498
                    Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
499
			PincodePartner pp = pincodePartnerRepository.selectPartnerByPincode(pincode, fs.getId());
499
 
500
			if (pp != null) {
500
                    customerRetailers.addAll(customerRetailerMap.values());
501
				return responseSender.ok(customerRetailers.add(retailerService.getFofoRetailer(pp.getFofoId())));
501
 
502
			} else {
502
                }
503
 
503
                return responseSender.ok(customerRetailers);
504
				List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
504
 
505
				if (pincodePartners.size() > 0) {
505
            }
506
 
506
        } else {
507
					List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId())
507
 
508
							.collect(Collectors.toList());
508
            List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
509
					List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
509
            if (pincodePartners.size() > 0) {
510
							.filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
510
                List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
511
 
511
                List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
512
					Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
512
 
513
 
513
                Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
514
					Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream()
514
 
515
							.map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList())
515
                Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
516
							.stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
516
 
517
 
517
                customerRetailers.addAll(customerRetailerMap.values());
518
					customerRetailers.addAll(customerRetailerMap.values());
518
            }
519
 
519
 
520
				}
520
            return responseSender.ok(customerRetailers);
521
				return responseSender.ok(customerRetailers);
521
 
522
 
522
        }
523
			}
523
 
524
		} else {
524
    }
525
 
525
 
526
			List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
526
    @RequestMapping(value = "/store/address/detail/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
527
			if (pincodePartners.size() > 0) {
527
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
528
				List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
528
    @ApiOperation(value = "Get brand list and count for category")
529
				List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
529
    public ResponseEntity<?> getStoresDetailsByPincode(HttpServletRequest request, @PathVariable String pincode) throws Exception {
530
						.filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
530
        List<CustomRetailer> customerRetailers = new ArrayList<>();
531
 
531
        List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
532
				Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
532
 
533
 
533
        if (!pincodePartners.isEmpty()) {
534
				Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream()
534
            List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
535
						.map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream()
535
            List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
536
						.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
536
 
537
 
537
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
538
				customerRetailers.addAll(customerRetailerMap.values());
538
 
539
			}
539
            Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
540
 
540
 
541
			return responseSender.ok(customerRetailers);
541
            customerRetailers.addAll(customerRetailerMap.values());
542
 
542
        }
543
		}
543
 
544
 
544
        logger.info("customerRetailers" + customerRetailers);
545
	}
545
        return responseSender.ok(customerRetailers);
546
 
546
    }
547
	@RequestMapping(value = "/store/address/detail/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
547
 
548
	@ApiImplicitParams({
548
    @RequestMapping(value = "/store/order", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
549
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
549
    public ResponseEntity<?> getOrderDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
550
	@ApiOperation(value = "Get brand list and count for category")
550
        List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
551
	public ResponseEntity<?> getStoresDetailsByPincode(HttpServletRequest request, @PathVariable String pincode)
551
        List<Integer> catalogIds = new ArrayList<>();
552
			throws Exception {
552
        List<PendingOrder> pendingOrders = pendingOrderRepository.selectByCustomerId(id, offset, limit);
553
		List<CustomRetailer> customerRetailers = new ArrayList<>();
553
 
554
		List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
554
        if (!pendingOrders.isEmpty()) {
555
 
555
            for (PendingOrder po : pendingOrders) {
556
		if (!pincodePartners.isEmpty()) {
556
                List<PendingOrderItem> pois = pendingOrderItemRepository.selectByOrderId(po.getId());
557
			List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
557
                for (PendingOrderItem pendingOrderItem : pois) {
558
			List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
558
                    Item item = itemRepository.selectById(pendingOrderItem.getItemId());
559
					.filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
559
                    pendingOrderItem.setItemName(item.getItemDescription());
560
 
560
                    catalogIds.add(item.getCatalogItemId());
561
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
561
                }
562
 
562
 
563
			Map<Integer, CustomRetailer> customerRetailerMap = activefofoIds.stream().map(x -> customRetailerMap.get(x))
563
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
564
					.filter(x -> x != null).collect(Collectors.toList()).stream()
564
 
565
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
565
                for (PendingOrderItem poi : pois) {
566
 
566
 
567
			customerRetailers.addAll(customerRetailerMap.values());
567
                    CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
568
		}
568
 
569
 
569
                    Item item = itemRepository.selectById(poi.getItemId());
570
		logger.info("customerRetailers" + customerRetailers);
570
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
571
		return responseSender.ok(customerRetailers);
571
                    customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
572
	}
572
                    customerOrderDetail.setBrand(item.getBrand());
573
 
573
                    customerOrderDetail.setColor(item.getColor());
574
	@RequestMapping(value = "/store/order", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
574
                    customerOrderDetail.setPendingOrderItemId(poi.getId());
575
	public ResponseEntity<?> getOrderDetail(HttpServletRequest request, @RequestParam(value = "id") int id,
575
                    customerOrderDetail.setId(poi.getOrderId());
576
			@RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
576
                    customerOrderDetail.setItemId(poi.getItemId());
577
		List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
577
                    customerOrderDetail.setModelName(item.getModelName());
578
		List<Integer> catalogIds = new ArrayList<>();
578
                    customerOrderDetail.setModelNumber(item.getModelNumber());
579
		List<PendingOrder> pendingOrders = pendingOrderRepository.selectByCustomerId(id, offset, limit);
579
                    customerOrderDetail.setQuantity(poi.getQuantity());
580
 
580
                    customerOrderDetail.setBilledTimestamp(poi.getBilledTimestamp());
581
		if (!pendingOrders.isEmpty()) {
581
                    customerOrderDetail.setStatus(poi.getStatus());
582
			for (PendingOrder po : pendingOrders) {
582
                    customerOrderDetail.setTotalPrice(poi.getSellingPrice());
583
				List<PendingOrderItem> pois = pendingOrderItemRepository.selectByOrderId(po.getId());
583
                    customerOrderDetail.setPayMethod(po.getPayMethod());
584
				for (PendingOrderItem pendingOrderItem : pois) {
584
                    customerOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
585
					Item item = itemRepository.selectById(pendingOrderItem.getItemId());
585
                    customerOrderDetails.add(customerOrderDetail);
586
					pendingOrderItem.setItemName(item.getItemDescription());
586
                }
587
					catalogIds.add(item.getCatalogItemId());
587
            }
588
				}
588
        }
589
 
589
 
590
				Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
590
        return responseSender.ok(customerOrderDetails);
591
 
591
    }
592
				for (PendingOrderItem poi : pois) {
592
 
593
 
593
    @RequestMapping(value = "/store/invoiceOrder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
594
					CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
594
    public ResponseEntity<?> getOrderInvoiceDetail(HttpServletRequest request, @RequestParam(value = "id") int id, @RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
595
 
595
        List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
596
					Item item = itemRepository.selectById(poi.getItemId());
596
        List<Integer> catalogIds = new ArrayList<>();
597
					JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
597
        List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByCustomerId(id, offset, limit);
598
					customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
598
 
599
					customerOrderDetail.setBrand(item.getBrand());
599
        if (!fofoOrders.isEmpty()) {
600
					customerOrderDetail.setColor(item.getColor());
600
            for (FofoOrder fo : fofoOrders) {
601
					customerOrderDetail.setPendingOrderItemId(poi.getId());
601
                List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
602
					customerOrderDetail.setId(poi.getOrderId());
602
                for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
603
					customerOrderDetail.setItemId(poi.getItemId());
603
                    Item item = itemRepository.selectById(fofoOrderItem.getItemId());
604
					customerOrderDetail.setModelName(item.getModelName());
604
                    fofoOrderItem.setItemName(item.getItemDescription());
605
					customerOrderDetail.setModelNumber(item.getModelNumber());
605
                    catalogIds.add(item.getCatalogItemId());
606
					customerOrderDetail.setQuantity(poi.getQuantity());
606
                }
607
					customerOrderDetail.setBilledTimestamp(poi.getBilledTimestamp());
607
 
608
					customerOrderDetail.setStatus(poi.getStatus());
608
                Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
609
					customerOrderDetail.setTotalPrice(poi.getSellingPrice());
609
                for (FofoOrderItem foi : fofoOrderItems) {
610
					customerOrderDetail.setPayMethod(po.getPayMethod());
610
 
611
					customerOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
611
                    CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
612
					customerOrderDetails.add(customerOrderDetail);
612
 
613
				}
613
                    Item item = itemRepository.selectById(foi.getItemId());
614
			}
614
                    JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
615
		}
615
                    customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
616
 
616
                    customerOrderDetail.setBrand(item.getBrand());
617
		return responseSender.ok(customerOrderDetails);
617
                    customerOrderDetail.setColor(item.getColor());
618
	}
618
                    customerOrderDetail.setFofoOrderItemId(foi.getId());
619
 
619
                    customerOrderDetail.setFofoOrderId(foi.getOrderId());
620
	@RequestMapping(value = "/store/invoiceOrder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
620
                    customerOrderDetail.setItemId(foi.getItemId());
621
	public ResponseEntity<?> getOrderInvoiceDetail(HttpServletRequest request, @RequestParam(value = "id") int id,
621
                    customerOrderDetail.setModelName(item.getModelName());
622
			@RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
622
                    customerOrderDetail.setModelNumber(item.getModelNumber());
623
		List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
623
                    customerOrderDetail.setQuantity(foi.getQuantity());
624
		List<Integer> catalogIds = new ArrayList<>();
624
                    customerOrderDetail.setTotalPrice(foi.getSellingPrice());
625
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByCustomerId(id, offset, limit);
625
                    customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
626
 
626
                    customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
627
		if (!fofoOrders.isEmpty()) {
627
                    customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
628
			for (FofoOrder fo : fofoOrders) {
628
                    customerOrderDetails.add(customerOrderDetail);
629
				List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
629
                }
630
				for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
630
            }
631
					Item item = itemRepository.selectById(fofoOrderItem.getItemId());
631
 
632
					fofoOrderItem.setItemName(item.getItemDescription());
632
        }
633
					catalogIds.add(item.getCatalogItemId());
633
        return responseSender.ok(customerOrderDetails);
634
				}
634
    }
635
 
635
 
636
				Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
636
    @RequestMapping(value = "/store/generateInvoice", method = RequestMethod.GET)
637
				for (FofoOrderItem foi : fofoOrderItems) {
637
    public ResponseEntity<?> generateInvoice(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
638
 
638
        InvoicePdfModel pdfModel = null;
639
					CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
639
        FofoOrder fo = fofoOrderRepository.selectByOrderId(orderId);
640
 
640
        pdfModel = orderService.getInvoicePdfModel(fo.getFofoId(), orderId);
641
					Item item = itemRepository.selectById(foi.getItemId());
641
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
642
					JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
642
        PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
643
					customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
643
        try {
644
					customerOrderDetail.setBrand(item.getBrand());
644
            byteArrayOutputStream.close();
645
					customerOrderDetail.setColor(item.getColor());
645
        } catch (IOException e) {
646
					customerOrderDetail.setFofoOrderItemId(foi.getId());
646
            // TODO Auto-generated catch block
647
					customerOrderDetail.setFofoOrderId(foi.getOrderId());
647
            e.printStackTrace();
648
					customerOrderDetail.setItemId(foi.getItemId());
648
        }
649
					customerOrderDetail.setModelName(item.getModelName());
649
        final HttpHeaders headers = new HttpHeaders();
650
					customerOrderDetail.setModelNumber(item.getModelNumber());
650
        headers.setContentType(MediaType.APPLICATION_PDF);
651
					customerOrderDetail.setQuantity(foi.getQuantity());
651
        // headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
652
					customerOrderDetail.setTotalPrice(foi.getSellingPrice());
652
 
653
					customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
653
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
654
					customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
654
        headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
655
					customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
655
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
656
					customerOrderDetails.add(customerOrderDetail);
656
        headers.add("Pragma", "no-cache");
657
				}
657
        headers.add("Expires", "0");
658
			}
658
 
659
 
659
        headers.setContentLength(byteArrayOutputStream.toByteArray().length);
660
		}
660
        final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
661
		return responseSender.ok(customerOrderDetails);
661
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
662
	}
662
        return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
663
 
663
        // return responseSender.ok(new
664
	@RequestMapping(value = "/store/generateInvoice", method = RequestMethod.GET)
664
        // ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(),
665
	public ResponseEntity<?> generateInvoice(HttpServletRequest request,
665
        // headers,HttpStatus.OK));
666
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
666
        /*
667
		InvoicePdfModel pdfModel = null;
667
         * ResponseEntity<byte[]> response = new
668
		FofoOrder fo = fofoOrderRepository.selectByOrderId(orderId);
668
         * ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
669
		pdfModel = orderService.getInvoicePdfModel(fo.getFofoId(), orderId);
669
         * HttpStatus.OK); return response;
670
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
670
         */
671
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
671
 
672
		try {
672
    }
673
			byteArrayOutputStream.close();
673
 
674
		} catch (IOException e) {
674
    @RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
675
			// TODO Auto-generated catch block
675
    public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
676
			e.printStackTrace();
676
        List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true), WebListingSource.store);
677
		}
677
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
678
		final HttpHeaders headers = new HttpHeaders();
678
        for (WebListing webListing : webListings) {
679
		headers.setContentType(MediaType.APPLICATION_PDF);
679
            webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
680
		// headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
680
        }
681
 
681
        return responseSender.ok(webListings);
682
		headers.setContentType(MediaType.parseMediaType("application/pdf"));
682
    }
683
		headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
683
 
684
		headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
684
    private List<FofoCatalogResponse> getDealResponses(UserInfo userInfo, WebListing webListing) throws ProfitMandiBusinessException {
685
		headers.add("Pragma", "no-cache");
685
        List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream().filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
686
		headers.add("Expires", "0");
686
        if (webProducts.size() == 0) {
687
 
687
            return new ArrayList<>();
688
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
688
        }
689
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
689
        RestClient rc = new RestClient();
690
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
690
        Map<String, String> params = new HashMap<>();
691
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
691
        List<String> mandatoryQ = new ArrayList<>();
692
		// return responseSender.ok(new
692
        mandatoryQ.add(String.format(
693
		// ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(),
693
                "+{!parent which=\"catalogId_i:" + StringUtils.join(webProducts, " ") + "\"} tagId_i:(%s)", StringUtils.join(TAG_IDS, " ")));
694
		// headers,HttpStatus.OK));
694
        params.put("q", StringUtils.join(mandatoryQ, " "));
695
		/*
695
        params.put("fl", "*, [child parentFilter=id:catalog*]");
696
		 * ResponseEntity<byte[]> response = new
696
        // params.put("sort", "create_s desc");
697
		 * ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
697
        params.put("start", String.valueOf(0));
698
		 * HttpStatus.OK); return response;
698
        params.put("rows", String.valueOf(100));
699
		 */
699
        params.put("wt", "json");
700
 
700
        String response = null;
701
	}
701
        try {
702
 
702
            response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
703
	@RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
703
        } catch (HttpHostConnectException e) {
704
	public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
704
            throw new ProfitMandiBusinessException("", "", "Could not connect to host");
705
		List<WebListing> webListings = webListingRepository.selectAllWebListingByType(Optional.of(true),
705
        }
706
				WebListingSource.store);
706
        JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
707
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
707
        JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
708
		for (WebListing webListing : webListings) {
708
        List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
709
			webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
709
        return dealResponse;
710
		}
710
    }
711
		return responseSender.ok(webListings);
711
 
712
	}
712
    @RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
713
 
713
    @ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
714
	private List<FofoCatalogResponse> getDealResponses(UserInfo userInfo, WebListing webListing)
714
    @ApiOperation(value = "Get brand list and count for category")
715
			throws ProfitMandiBusinessException {
715
    public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest) throws Exception {
716
		List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream()
716
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
717
				.filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
717
        Integer storeId = userInfo.getRetailerId();
718
		if (webProducts.size() == 0) {
718
        ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()), "Success", "Items added to cart successfully");
719
			return new ArrayList<>();
719
        return responseSender.ok(vc);
720
		}
720
    }
721
		RestClient rc = new RestClient();
721
 
722
		Map<String, String> params = new HashMap<>();
722
    // Validate Cart for B2C Customers
723
		List<String> mandatoryQ = new ArrayList<>();
723
    private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
724
		mandatoryQ.add(String.format(
724
        cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
725
				"+{!parent which=\"catalogId_i:" + StringUtils.join(webProducts, " ") + "\"} tagId_i:(%s)",
725
        List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
726
				StringUtils.join(TAG_IDS, " ")));
726
        Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId, itemIds);
727
		params.put("q", StringUtils.join(mandatoryQ, " "));
727
        CartResponse cartResponse = new CartResponse();
728
		params.put("fl", "*, [child parentFilter=id:catalog*]");
728
        List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
729
		// params.put("sort", "create_s desc");
729
        cartResponse.setCartItems(cartItemResponseModels);
730
		params.put("start", String.valueOf(0));
730
        Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
731
		params.put("rows", String.valueOf(100));
731
        logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
732
		params.put("wt", "json");
732
 
733
		String response = null;
733
        Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
734
		try {
734
 
735
			response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
735
        Map<Integer, TagListing> tagListingMap = tagListingRepository.selectByItemIdsAndTagIds(new HashSet<>(itemIds), new HashSet<>(Arrays.asList(4))).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x));
736
		} catch (HttpHostConnectException e) {
736
 
737
			throw new ProfitMandiBusinessException("", "", "Could not connect to host");
737
        List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId()).collect(Collectors.toList());
738
		}
738
 
739
		JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
739
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
740
		JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
740
 
741
		List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
741
        // cartResponse.getCartItems()
742
		return dealResponse;
742
        int cartMessageChanged = 0;
743
	}
743
        int cartMessageOOS = 0;
744
 
744
        int totalAmount = 0;
745
	@RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
745
        int totalQty = 0;
746
	@ApiImplicitParams({
746
        for (CartItem cartItem : cartItems) {
747
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
747
            Item item = itemsMap.get(cartItem.getItemId());
748
	@ApiOperation(value = "Get brand list and count for category")
748
            TagListing tagListing = tagListingMap.get(cartItem.getItemId());
749
	public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest)
749
            Float cashback = schemeService.getCatalogSchemeCashBack().get(itemsMap.get(cartItem.getItemId()).getCatalogItemId());
750
			throws Exception {
750
            cashback = cashback == null ? 0 : cashback;
751
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
751
            float itemSellingPrice = tagListing.getMop() - cashback;
752
		Integer storeId = userInfo.getRetailerId();
752
            CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
753
		ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()),
753
            cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
754
				"Success", "Items added to cart successfully");
754
            if (itemSellingPrice != cartItem.getSellingPrice()) {
755
		return responseSender.ok(vc);
755
                cartItemResponseModel.setSellingPrice(itemSellingPrice);
756
	}
756
                cartMessageChanged++;
757
 
757
            }
758
	// Validate Cart for B2C Customers
758
            int estimate = -2;
759
	private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
759
            LocalDateTime promiseDeliveryTime = LocalDateTime.now();
760
		cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
760
            int qtyRequired = (int) cartItem.getQuantity();
761
		List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
761
            AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
762
		Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId,
762
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
763
				itemIds);
763
            if (availabilityModel.getStoreAvailability() >= qtyRequired) {
764
		CartResponse cartResponse = new CartResponse();
764
                estimate = 0;
765
		List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
765
            } else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
766
		cartResponse.setCartItems(cartItemResponseModels);
766
                estimate = 2;
767
		Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
767
            } else if (availabilityModel.getStoreAvailability() > 0) {
768
		logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
768
                estimate = 0;
769
 
769
                qtyRequired = availabilityModel.getStoreAvailability();
770
		Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream()
770
                cartMessageChanged++;
771
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
771
            } else if (availabilityModel.getWarehouseAvailability() > 0) {
772
 
772
                qtyRequired = availabilityModel.getWarehouseAvailability();
773
		Map<Integer, TagListing> tagListingMap = tagListingRepository
773
                estimate = 2;
774
				.selectByItemIdsAndTagIds(new HashSet<>(itemIds), new HashSet<>(Arrays.asList(4))).stream()
774
                cartMessageChanged++;
775
				.collect(Collectors.toMap(x -> x.getItemId(), x -> x));
775
            } else {
776
 
776
                qtyRequired = 0;
777
		List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId())
777
                cartMessageChanged++;
778
				.collect(Collectors.toList());
778
            }
779
 
779
            cartItemResponseModel.setQuantity(qtyRequired);
780
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
780
            if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
781
 
781
                estimate = estimate + 1;
782
		// cartResponse.getCartItems()
782
                promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
783
		int cartMessageChanged = 0;
783
            }
784
		int cartMessageOOS = 0;
784
            totalQty += qtyRequired;
785
		int totalAmount = 0;
785
            totalAmount += qtyRequired * itemSellingPrice;
786
		int totalQty = 0;
786
            cartItemResponseModel.setEstimate(estimate);
787
		for (CartItem cartItem : cartItems) {
787
            cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
788
			Item item = itemsMap.get(cartItem.getItemId());
788
            cartItemResponseModel.setItemId(cartItem.getItemId());
789
			TagListing tagListing = tagListingMap.get(cartItem.getItemId());
789
            cartItemResponseModel.setMinBuyQuantity(1);
790
			Float cashback = schemeService.getCatalogSchemeCashBack()
790
            cartItemResponseModel.setQuantity(qtyRequired);
791
					.get(itemsMap.get(cartItem.getItemId()).getCatalogItemId());
791
            cartItemResponseModel.setQuantityStep(1);
792
			cashback = cashback == null ? 0 : cashback;
792
            cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
793
			float itemSellingPrice = tagListing.getMop() - cashback;
793
            cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
794
			CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
794
            cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
795
			cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
795
            cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
796
			if (itemSellingPrice != cartItem.getSellingPrice()) {
796
            cartItemResponseModel.setColor(item.getColor());
797
				cartItemResponseModel.setSellingPrice(itemSellingPrice);
797
            cartItemResponseModels.add(cartItemResponseModel);
798
				cartMessageChanged++;
798
        }
799
			}
799
        cartResponse.setCartItems(cartItemResponseModels);
800
			int estimate = -2;
800
        cartResponse.setCartMessageChanged(cartMessageChanged);
801
			LocalDateTime promiseDeliveryTime = LocalDateTime.now();
801
        cartResponse.setCartMessageOOS(cartMessageOOS);
802
			int qtyRequired = (int) cartItem.getQuantity();
802
        int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
803
			AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
803
        cartResponse.setMaxEstimate(maxEstimate);
804
			cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
804
        cartResponse.setTotalAmount(totalAmount);
805
			if (availabilityModel.getStoreAvailability() >= qtyRequired) {
805
        cartResponse.setTotalQty(totalQty);
806
				estimate = 0;
806
 
807
			} else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
807
        return cartResponse;
808
				estimate = 2;
808
 
809
			} else if (availabilityModel.getStoreAvailability() > 0) {
809
    }
810
				estimate = 0;
810
 
811
				qtyRequired = availabilityModel.getStoreAvailability();
811
    @RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
812
				cartMessageChanged++;
812
    public ResponseEntity<?> partnerStock(HttpServletRequest request, @RequestParam(value = "categoryId", required = false, defaultValue = "3") String categoryId, @RequestParam(value = "offset") String offset, @RequestParam(value = "limit") String limit, @RequestParam(value = "sort", required = false) String sort, @RequestParam(value = "brand", required = false) String brand, @RequestParam(value = "subCategoryId", required = false) int subCategoryId, @RequestParam(value = "q", required = false) String queryTerm, @RequestParam(required = false) String listing, @RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
813
			} else if (availabilityModel.getWarehouseAvailability() > 0) {
813
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
814
				qtyRequired = availabilityModel.getWarehouseAvailability();
814
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
815
				estimate = 2;
815
        FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
816
				cartMessageChanged++;
816
        sort = "w" + fs.getWarehouseId() + "_i desc";
817
			} else {
817
        dealResponse = this.getCatalogResponse(
818
				qtyRequired = 0;
818
                commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false), false, userInfo.getRetailerId());
819
				cartMessageChanged++;
819
        return responseSender.ok(dealResponse);
820
			}
820
    }
821
			cartItemResponseModel.setQuantity(qtyRequired);
821
 
822
			if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
822
    private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId) throws ProfitMandiBusinessException {
823
				estimate = estimate + 1;
823
        Map<Integer, Integer> ourItemAvailabilityMap = null;
824
				promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
824
        Map<Integer, Integer> partnerStockAvailabilityMap = null;
825
			}
825
        List<FofoCatalogResponse> dealResponse = new ArrayList<>();
826
			totalQty += qtyRequired;
826
        List<Integer> tagIds = Arrays.asList(4);
827
			totalAmount += qtyRequired * itemSellingPrice;
827
        if (docs.length() > 0) {
828
			cartItemResponseModel.setEstimate(estimate);
828
            HashSet<Integer> itemsSet = new HashSet<>();
829
			cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
829
            for (int i = 0; i < docs.length(); i++) {
830
			cartItemResponseModel.setItemId(cartItem.getItemId());
830
                JSONObject doc = docs.getJSONObject(i);
831
			cartItemResponseModel.setMinBuyQuantity(1);
831
                if (doc.has("_childDocuments_")) {
832
			cartItemResponseModel.setQuantity(qtyRequired);
832
                    for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
833
			cartItemResponseModel.setQuantityStep(1);
833
                        JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
834
			cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
834
                        int itemId = childItem.getInt("itemId_i");
835
			cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
835
                        itemsSet.add(itemId);
836
			cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
836
                    }
837
			cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
837
                }
838
			cartItemResponseModel.setColor(item.getColor());
838
            }
839
			cartItemResponseModels.add(cartItemResponseModel);
839
            if (itemsSet.size() == 0) {
840
		}
840
                return dealResponse;
841
		cartResponse.setCartItems(cartItemResponseModels);
841
            }
842
		cartResponse.setCartMessageChanged(cartMessageChanged);
842
            if (fofoId > 0) {
843
		cartResponse.setCartMessageOOS(cartMessageOOS);
843
                partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
844
		int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
844
            }
845
		cartResponse.setMaxEstimate(maxEstimate);
845
            ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
846
		cartResponse.setTotalAmount(totalAmount);
846
        }
847
		cartResponse.setTotalQty(totalQty);
847
 
848
 
848
        for (int i = 0; i < docs.length(); i++) {
849
		return cartResponse;
849
            Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
850
 
850
            JSONObject doc = docs.getJSONObject(i);
851
	}
851
            FofoCatalogResponse ffdr = new FofoCatalogResponse();
852
 
852
            ffdr.setCatalogId(doc.getInt("catalogId_i"));
853
	@RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
853
            ffdr.setImageUrl(doc.getString("imageUrl_s"));
854
	public ResponseEntity<?> partnerStock(HttpServletRequest request,
854
            ffdr.setTitle(doc.getString("title_s"));
855
			@RequestParam(value = "categoryId", required = false, defaultValue = "3") String categoryId,
855
            List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
856
			@RequestParam(value = "offset") String offset, @RequestParam(value = "limit") String limit,
856
            if (webOffers != null && webOffers.size() > 0) {
857
			@RequestParam(value = "sort", required = false) String sort,
857
                ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
858
			@RequestParam(value = "brand", required = false) String brand,
858
            }
859
			@RequestParam(value = "subCategoryId", required = false) int subCategoryId,
859
            try {
860
			@RequestParam(value = "q", required = false) String queryTerm,
860
                ffdr.setFeature(doc.getString("feature_s"));
861
			@RequestParam(required = false) String listing,
861
            } catch (Exception e) {
862
			@RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
862
                ffdr.setFeature(null);
863
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
863
            }
864
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
864
            ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
865
		FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
865
            if (doc.has("_childDocuments_")) {
866
		sort = "w" + fs.getWarehouseId() + "_i desc";
866
                for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
867
		dealResponse = this.getCatalogResponse(
867
                    JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
868
				commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false),
868
                    int itemId = childItem.getInt("itemId_i");
869
				false, userInfo.getRetailerId());
869
                    float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
870
		return responseSender.ok(dealResponse);
870
                    if (fofoAvailabilityInfoMap.containsKey(itemId)) {
871
	}
871
                        if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
872
 
872
                            fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
873
	private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId)
873
                            fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
874
			throws ProfitMandiBusinessException {
874
                        }
875
		Map<Integer, Integer> ourItemAvailabilityMap = null;
875
                    } else {
876
		Map<Integer, Integer> partnerStockAvailabilityMap = null;
876
                        FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
877
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
877
                        fdi.setSellingPrice(sellingPrice);
878
		List<Integer> tagIds = Arrays.asList(4);
878
                        fdi.setMrp(childItem.getDouble("mrp_f"));
879
		if (docs.length() > 0) {
879
                        fdi.setMop((float) childItem.getDouble("mop_f"));
880
			HashSet<Integer> itemsSet = new HashSet<>();
880
                        fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
881
			for (int i = 0; i < docs.length(); i++) {
881
                        fdi.setTagId(childItem.getInt("tagId_i"));
882
				JSONObject doc = docs.getJSONObject(i);
882
                        fdi.setItem_id(itemId);
883
				if (doc.has("_childDocuments_")) {
883
                        Float cashBack = schemeService.getCatalogSchemeCashBack().get(ffdr.getCatalogId());
884
					for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
884
                        cashBack = cashBack == null ? 0 : cashBack;
885
						JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
885
                        // TODO:Dont commit
886
						int itemId = childItem.getInt("itemId_i");
886
                        // fdi.setCashback(Math.min(100, fdi.getMop()));
887
						itemsSet.add(itemId);
887
                        fdi.setCashback(cashBack);
888
					}
888
                        fdi.setMinBuyQuantity(1);
889
				}
889
                        int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0 : partnerStockAvailabilityMap.get(itemId);
890
			}
890
                        int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0 : Math.max(0, ourItemAvailabilityMap.get(itemId));
891
			if (itemsSet.size() == 0) {
891
                        fdi.setActive(partnerAvailability > 0);
892
				return dealResponse;
892
                        // fdi.setActive(true);
893
			}
893
                        fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
894
			if (fofoId > 0) {
894
                        fdi.setQuantityStep(1);
895
				partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream()
895
                        fdi.setMaxQuantity(fdi.getAvailability());
896
						.collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
896
                        fofoAvailabilityInfoMap.put(itemId, fdi);
897
			}
897
                    }
898
			ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
898
                }
899
		}
899
            }
900
 
900
            if (fofoAvailabilityInfoMap.values().size() > 0) {
901
		for (int i = 0; i < docs.length(); i++) {
901
                ffdr.setItems(fofoAvailabilityInfoMap.values().stream().sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder()).thenComparingInt(y -> -y.getAvailability())).collect(Collectors.toList()));
902
			Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
902
                dealResponse.add(ffdr);
903
			JSONObject doc = docs.getJSONObject(i);
903
            }
904
			FofoCatalogResponse ffdr = new FofoCatalogResponse();
904
        }
905
			ffdr.setCatalogId(doc.getInt("catalogId_i"));
905
        return dealResponse.stream().sorted(Comparator.comparing(FofoCatalogResponse::getItems, (s1, s2) -> (s2.get(0).isActive() ? 1 : 0) - (s1.get(0).isActive() ? 1 : 0)).thenComparing(FofoCatalogResponse::getItems, (x, y) -> y.get(0).getAvailability() - x.get(0).getAvailability())).collect(Collectors.toList());
906
			ffdr.setImageUrl(doc.getString("imageUrl_s"));
906
    }
907
			ffdr.setTitle(doc.getString("title_s"));
907
 
908
			List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
908
    @GetMapping(value = "store/order-status/{pendingOrderId}")
909
			if (webOffers != null && webOffers.size() > 0) {
909
    public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId) throws Exception {
910
				ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
910
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
911
			}
911
        List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
912
			try {
912
        List<Integer> catalogIds = new ArrayList<>();
913
				ffdr.setFeature(doc.getString("feature_s"));
913
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
914
			} catch (Exception e) {
914
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
915
				ffdr.setFeature(null);
915
            pendingOrderItem.setItemName(item.getItemDescription());
916
			}
916
            catalogIds.add(item.getCatalogItemId());
917
			ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
917
        }
918
			if (doc.has("_childDocuments_")) {
918
        Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
919
				for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
919
        for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
920
					JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
920
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
921
					int itemId = childItem.getInt("itemId_i");
921
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
922
					float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
922
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
923
					if (fofoAvailabilityInfoMap.containsKey(itemId)) {
923
        }
924
						if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
924
        pendingOrder.setPendingOrderItems(pendingOrderItems);
925
							fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
925
 
926
							fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
926
        return responseSender.ok(pendingOrder);
927
						}
927
    }
928
					} else {
928
 
929
						FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
929
    @RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
930
						fdi.setSellingPrice(sellingPrice);
930
    public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
931
						fdi.setMrp(childItem.getDouble("mrp_f"));
931
        return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
932
						fdi.setMop((float) childItem.getDouble("mop_f"));
932
    }
933
						fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
933
 
934
						fdi.setTagId(childItem.getInt("tagId_i"));
934
    @RequestMapping(value = "/store/address", method = RequestMethod.POST)
935
						fdi.setItem_id(itemId);
935
    public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress) throws Throwable {
936
						Float cashBack = schemeService.getCatalogSchemeCashBack().get(ffdr.getCatalogId());
936
        customerAddressRepository.persist(customerAddress);
937
						cashBack = cashBack == null ? 0 : cashBack;
937
        return responseSender.ok(customerAddress);
938
						// TODO:Dont commit
938
    }
939
						// fdi.setCashback(Math.min(100, fdi.getMop()));
939
 
940
						fdi.setCashback(cashBack);
940
    @RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
941
						fdi.setMinBuyQuantity(1);
941
    public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
942
						int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0
942
        CustomerAddress cust = customerAddressRepository.selectById(id);
943
								: partnerStockAvailabilityMap.get(itemId);
943
        cust.setActive(false);
944
						int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0
944
        return responseSender.ok(cust);
945
								: Math.max(0, ourItemAvailabilityMap.get(itemId));
945
    }
946
						fdi.setActive(partnerAvailability > 0);
946
 
947
						// fdi.setActive(true);
947
    @RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
948
						fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
948
    public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer) throws Throwable {
949
						fdi.setQuantityStep(1);
949
        Customer cust = customerRepository.selectById(customer.getId());
950
						fdi.setMaxQuantity(fdi.getAvailability());
950
        cust.setGender(customer.getGender());
951
						fofoAvailabilityInfoMap.put(itemId, fdi);
951
        cust.setProfileImageId(customer.getProfileImageId());
952
					}
952
        cust.setDob(customer.getDob());
953
				}
953
        return responseSender.ok(cust);
954
			}
954
    }
955
			if (fofoAvailabilityInfoMap.values().size() > 0) {
955
 
956
				ffdr.setItems(fofoAvailabilityInfoMap.values().stream()
956
    @RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
957
						.sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder())
957
    public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state, @PathVariable String city, @PathVariable String storeCode) throws Throwable {
958
								.thenComparingInt(y -> -y.getAvailability()))
958
        logger.info("Store code {}", storeCode);
959
						.collect(Collectors.toList()));
959
        Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
960
				dealResponse.add(ffdr);
960
        logger.info("retailer id {}", map.get(storeCode));
961
			}
961
        String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
962
		}
962
        String html = partnerIndexService.getPartnerIndexHtml();
963
		return dealResponse.stream()
963
        logger.info("html {}", html);
964
				.sorted(Comparator
964
        html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan", String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
965
						.comparing(FofoCatalogResponse::getItems,
965
        response.getWriter().write(html);
966
								(s1, s2) -> (s2.get(0).isActive() ? 1 : 0) - (s1.get(0).isActive() ? 1 : 0))
966
    }
967
						.thenComparing(FofoCatalogResponse::getItems,
967
 
968
								(x, y) -> y.get(0).getAvailability() - x.get(0).getAvailability()))
968
    @RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
969
				.collect(Collectors.toList());
969
    public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
970
	}
970
 
971
 
971
                                                    @RequestParam String statusDescription, @RequestParam String reason) throws Exception {
972
	@GetMapping(value = "store/order-status/{pendingOrderId}")
972
 
973
	public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId)
973
        PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
974
			throws Exception {
974
        PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
975
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
975
        Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
976
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
976
        if (pendingOrderItem.getBilledTimestamp() == null) {
977
		List<Integer> catalogIds = new ArrayList<>();
977
            pendingOrderItem.setStatus(OrderStatus.CANCELLED);
978
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
978
            pendingOrderItem.setRemark(reason);
979
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
979
            pendingOrderItem.setStatusDescription("cancel by self");
980
			pendingOrderItem.setItemName(item.getItemDescription());
980
            pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
981
			catalogIds.add(item.getCatalogItemId());
981
            List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId()).stream().map(x -> x.getStatus()).collect(Collectors.toList());
982
		}
982
 
983
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
983
            if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING) && !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED) && !status.contains(OrderStatus.CLAIMED)) {
984
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
984
                pendingOrder.setStatus(OrderStatus.CLOSED);
985
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
985
            }
986
			JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
986
 
987
			pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
987
            pendingOrderItemRepository.persist(pendingOrderItem);
988
		}
988
            String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
989
		pendingOrder.setPendingOrderItems(pendingOrderItems);
989
            otpProcessor.sendSms(OtpProcessor.SELF_CANCELLED_TEMPLATE_ID, String.format(OtpProcessor.SELF_CANCELLED_TEMPLATE, pendingOrder.getId(), StringUtils.abbreviate(itemDescription, 30), FormattingUtils.format(pendingOrderItem.getCancelledTimestamp())), customer.getMobileNumber());
990
 
990
 
991
		return responseSender.ok(pendingOrder);
991
            List<Integer> catalogIds = new ArrayList<>();
992
	}
992
 
993
 
993
            Item item = itemRepository.selectById(pendingOrderItem.getItemId());
994
	@RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
994
            pendingOrderItem.setItemName(item.getItemDescription());
995
	public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
995
            catalogIds.add(item.getCatalogItemId());
996
		return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
996
 
997
	}
997
            Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
998
 
998
            JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
999
	@RequestMapping(value = "/store/address", method = RequestMethod.POST)
999
            pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1000
	public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress)
1000
            pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1001
			throws Throwable {
1001
            CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1002
		customerAddressRepository.persist(customerAddress);
1002
 
1003
		return responseSender.ok(customerAddress);
1003
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1004
	}
1004
 
1005
 
1005
            Map<String, Object> emailModel = new HashMap<>();
1006
	@RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
1006
            emailModel.put("customer", customerAddress);
1007
	public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
1007
            emailModel.put("pendingOrder", pendingOrder);
1008
		CustomerAddress cust = customerAddressRepository.selectById(id);
1008
            emailModel.put("date", dateTimeFormatter);
1009
		cust.setActive(false);
1009
 
1010
		return responseSender.ok(cust);
1010
            String[] customerEmail = null;
1011
	}
1011
            if (customer.getEmailId() != null) {
1012
 
1012
                customerEmail = new String[]{customer.getEmailId()};
1013
	@RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
1013
 
1014
	public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer)
1014
                List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1015
			throws Throwable {
1015
 
1016
		Customer cust = customerRepository.selectById(customer.getId());
1016
                emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel, customerEmail, null, bccTo.toArray(new String[0]));
1017
		cust.setGender(customer.getGender());
1017
 
1018
		cust.setProfileImageId(customer.getProfileImageId());
1018
            }
1019
		cust.setDob(customer.getDob());
1019
        }
1020
		return responseSender.ok(cust);
1020
 
1021
	}
1021
        return responseSender.ok(true);
1022
 
1022
 
1023
	@RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
1023
    }
1024
	public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state,
1024
 
1025
			@PathVariable String city, @PathVariable String storeCode) throws Throwable {
1025
    @RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1026
		logger.info("Store code {}", storeCode);
1026
    public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1027
		Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
1027
 
1028
		logger.info("retailer id {}", map.get(storeCode));
1028
        boolean eligibility = false;
1029
		String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
1029
 
1030
		String html = partnerIndexService.getPartnerIndexHtml();
1030
        LocalDateTime startDate = LocalDateTime.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 14, 0, 0);
1031
		logger.info("html {}", html);
1031
 
1032
		html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan",
1032
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id, startDate.toLocalDate());
1033
				String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
1033
 
1034
		response.getWriter().write(html);
1034
        if (!scratchOffers.isEmpty()) {
1035
	}
1035
            eligibility = true;
1036
 
1036
 
1037
	@RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1037
        } else {
1038
	public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
1038
            eligibility = false;
1039
 
1039
        }
1040
			@RequestParam String statusDescription, @RequestParam String reason) throws Exception {
1040
 
1041
 
1041
        return responseSender.ok(eligibility);
1042
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
1042
    }
1043
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
1043
 
1044
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
1044
    @RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1045
		if (pendingOrderItem.getBilledTimestamp() == null) {
1045
    public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1046
			pendingOrderItem.setStatus(OrderStatus.CANCELLED);
1046
 
1047
			pendingOrderItem.setRemark(reason);
1047
        LocalDateTime startDate = LocalDateTime.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 14, 0, 0);
1048
			pendingOrderItem.setStatusDescription("cancel by self");
1048
 
1049
			pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
1049
        List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id, startDate.toLocalDate());
1050
			List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId())
1050
 
1051
					.stream().map(x -> x.getStatus()).collect(Collectors.toList());
1051
        // List<ScratchOffer> scratchOffers =
1052
 
1052
        // scratchOfferRepository.selectBycCustomerId(id);
1053
			if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1053
        for (ScratchOffer so : scratchOffers) {
1054
					&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1054
            LocalDateTime endDate = LocalDateTime.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 27, 21, 00);
1055
					&& !status.contains(OrderStatus.CLAIMED)) {
1055
 
1056
				pendingOrder.setStatus(OrderStatus.CLOSED);
1056
            if (so.getOfferName() != null) {
1057
			}
1057
                so.setExpiredTimestamp(endDate);
1058
 
1058
            }
1059
			pendingOrderItemRepository.persist(pendingOrderItem);
1059
            if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1060
			String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
1060
                so.setUnlocked(true);
1061
			otpProcessor.sendSms(OtpProcessor.SELF_CANCELLED_TEMPLATE_ID,
1061
            } else {
1062
					String.format(OtpProcessor.SELF_CANCELLED_TEMPLATE, pendingOrder.getId(),
1062
                so.setUnlocked(false);
1063
							StringUtils.abbreviate(itemDescription, 30),
1063
            }
1064
							FormattingUtils.format(pendingOrderItem.getCancelledTimestamp())),
1064
        }
1065
					customer.getMobileNumber());
1065
 
1066
 
1066
        return responseSender.ok(scratchOffers);
1067
			List<Integer> catalogIds = new ArrayList<>();
1067
    }
1068
 
1068
 
1069
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1069
    @RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1070
			pendingOrderItem.setItemName(item.getItemDescription());
1070
    public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id) throws Exception {
1071
			catalogIds.add(item.getCatalogItemId());
1071
 
1072
 
1072
        ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1073
			Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1073
        scratchOffer.setScratched(true);
1074
			JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1074
        scratchOffer.setScracthedAt(LocalDateTime.now());
1075
			pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
-
 
1076
			pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
-
 
1077
			CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
-
 
1078
 
-
 
1079
			DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
-
 
1080
 
-
 
1081
			Map<String, Object> emailModel = new HashMap<>();
-
 
1082
			emailModel.put("customer", customerAddress);
-
 
1083
			emailModel.put("pendingOrder", pendingOrder);
-
 
1084
			emailModel.put("date", dateTimeFormatter);
-
 
1085
 
-
 
1086
			String[] customerEmail = null;
-
 
1087
			if (customer.getEmailId() != null) {
-
 
1088
				customerEmail = new String[] { customer.getEmailId() };
-
 
1089
 
-
 
1090
				List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
-
 
1091
 
-
 
1092
				emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
-
 
1093
						customerEmail, null, bccTo.toArray(new String[0]));
-
 
1094
 
-
 
1095
			}
-
 
1096
		}
-
 
1097
 
-
 
1098
		return responseSender.ok(true);
-
 
1099
 
-
 
1100
	}
-
 
1101
 
-
 
1102
	@RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
1103
	public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id)
-
 
1104
			throws Exception {
-
 
1105
 
-
 
1106
		boolean eligibility = false;
-
 
1107
 
-
 
1108
		LocalDateTime startDate = LocalDateTime.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 14, 0, 0);
-
 
1109
 
-
 
1110
		List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
-
 
1111
				startDate.toLocalDate());
-
 
1112
 
-
 
1113
		if (!scratchOffers.isEmpty()) {
-
 
1114
			eligibility = true;
-
 
1115
 
-
 
1116
		} else {
-
 
1117
			eligibility = false;
-
 
1118
		}
-
 
1119
 
-
 
1120
		return responseSender.ok(eligibility);
-
 
1121
	}
-
 
1122
 
-
 
1123
	@RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
1124
	public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id)
-
 
1125
			throws Exception {
-
 
1126
 
-
 
1127
		LocalDateTime startDate = LocalDateTime.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 14, 0, 0);
-
 
1128
 
-
 
1129
		List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerIdAndDate(id,
-
 
1130
				startDate.toLocalDate());
-
 
1131
 
-
 
1132
		// List<ScratchOffer> scratchOffers =
-
 
1133
		// scratchOfferRepository.selectBycCustomerId(id);
-
 
1134
		for (ScratchOffer so : scratchOffers) {
-
 
1135
			LocalDateTime endDate = LocalDateTime.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 27, 21, 00);
-
 
1136
 
-
 
1137
			if (so.getOfferName() != null) {
-
 
1138
				so.setExpiredTimestamp(endDate);
-
 
1139
			}
-
 
1140
			if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
-
 
1141
				so.setUnlocked(true);
-
 
1142
			} else {
-
 
1143
				so.setUnlocked(false);
-
 
1144
			}
-
 
1145
		}
-
 
1146
 
-
 
1147
		return responseSender.ok(scratchOffers);
-
 
1148
	}
-
 
1149
 
-
 
1150
	@RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
1151
	public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id)
-
 
1152
			throws Exception {
-
 
1153
 
-
 
1154
		ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
-
 
1155
		scratchOffer.setScratched(true);
-
 
1156
		scratchOffer.setScracthedAt(LocalDateTime.now());
-
 
1157
 
1075
 
1158
		return responseSender.ok(true);
1076
        return responseSender.ok(true);
1159
	}
1077
    }
1160
 
1078
 
1161
}
1079
}
1162
1080