Commit fb36840a authored by Ramakanth Dhane's avatar Ramakanth Dhane

OMD-04 - Generate random orders-Bug Fixes

parent 0b7036cb
...@@ -2,33 +2,38 @@ package com.nisum.omd; ...@@ -2,33 +2,38 @@ package com.nisum.omd;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadLocalRandom;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.nisum.omd.domain.Order; import com.nisum.omd.domain.Order;
import com.nisum.omd.service.OmdProducerService; import com.nisum.omd.service.OmdProducerService;
import com.nisum.omd.service.RandomDataGeneratorImpl; import com.nisum.omd.service.RandomDataGenerator;
@Component @Component
@RestController @RestController
public class OrderGenerator implements CommandLineRunner{ public class OrderGenerator {
@Autowired @Autowired
private RandomDataGeneratorImpl rdg; private RandomDataGenerator randomDataGenerator;
@Autowired @Autowired
private Order order; private Order order;
@Autowired @Autowired
private OmdProducerService omdProducerService; private OmdProducerService omdProducerService;
private Boolean orderGenerateFlag = false; private Boolean orderGenerateFlag = false;
private List<Double> intervalList;
public Boolean getOrderGenerateFlag() { public Boolean getOrderGenerateFlag() {
return orderGenerateFlag; return orderGenerateFlag;
...@@ -38,48 +43,51 @@ public class OrderGenerator implements CommandLineRunner{ ...@@ -38,48 +43,51 @@ public class OrderGenerator implements CommandLineRunner{
this.orderGenerateFlag = orderGenerateFlag; this.orderGenerateFlag = orderGenerateFlag;
} }
public void run(String... args) throws Exception { public void execute() throws Exception {
intervalList = randomDataGenerator.generateIntervals();
while(true) { while(true) {
if (orderGenerateFlag) { if (orderGenerateFlag) {
order = getObjectData(order); order = getObjectData(order);
omdProducerService.sendMessage(order);
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule()); objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String jsonOrderStr = objectMapper.writeValueAsString(order); String jsonOrderStr = objectMapper.writeValueAsString(order);
System.out.println(jsonOrderStr); System.out.println(jsonOrderStr);
Thread.sleep(2000); Thread.sleep((long)(getRandomInterval(intervalList) * 1000));
} }
} }
} }
@GetMapping(path="/orderStartStop") @GetMapping(path="/orderStartStop/{gneratorFlag}")
public String orderStartStop() throws Exception{ public String orderStartStop(@PathVariable("gneratorFlag")boolean gneratorFlag) throws Exception{
orderGenerateFlag = gneratorFlag;
if (orderGenerateFlag) { if (orderGenerateFlag) {
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
try { try {
run(); execute();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}); });
orderGenerateFlag = false;
}
else {
orderGenerateFlag = true;
} }
return "Order Generate : " + orderGenerateFlag.toString(); return "Order Generate : " + orderGenerateFlag.toString();
} }
private Order getObjectData(Order orders) { private Order getObjectData(Order orders) {
LocalDateTime currentTime = LocalDateTime.now(); LocalDateTime currentTime = LocalDateTime.now();
order.setOrderNum(rdg.generateOrderNumber()); order.setOrderNum(randomDataGenerator.generateOrderNumber());
order.setCustomerId(rdg.generateCustomerId()); order.setCustomerId(randomDataGenerator.generateCustomerId());
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
String formattedDateTime = currentTime.format(formatter); String formattedDateTime = currentTime.format(formatter);
order.setOrderDate(formattedDateTime); order.setOrderDate(formattedDateTime);
order.setLineItem(rdg.genetateLineItem(order.getLineItem())); order.setLineItem(randomDataGenerator.genetateLineItem(order.getLineItem()));
return order; return order;
} }
private static Double getRandomInterval(List<Double> list) {
int index = ThreadLocalRandom.current().nextInt(list.size());
return list.get(index);
}
} }
package com.nisum.omd.service; package com.nisum.omd.service;
import java.util.List;
import com.nisum.omd.domain.LineItem; import com.nisum.omd.domain.LineItem;
public interface RandomDataGenerator { public interface RandomDataGenerator {
...@@ -7,5 +9,6 @@ public interface RandomDataGenerator { ...@@ -7,5 +9,6 @@ public interface RandomDataGenerator {
public String generateOrderNumber(); public String generateOrderNumber();
public String generateCustomerId(); public String generateCustomerId();
public LineItem genetateLineItem(LineItem li); public LineItem genetateLineItem(LineItem li);
public List<Double> generateIntervals();
} }
...@@ -6,7 +6,6 @@ import java.util.Random; ...@@ -6,7 +6,6 @@ import java.util.Random;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import com.github.javafaker.Faker; import com.github.javafaker.Faker;
import com.nisum.omd.domain.LineItem; import com.nisum.omd.domain.LineItem;
...@@ -14,7 +13,6 @@ import com.nisum.omd.domain.Order; ...@@ -14,7 +13,6 @@ import com.nisum.omd.domain.Order;
@Component @Component
@RequestMapping("app")
public class RandomDataGeneratorImpl implements RandomDataGenerator { public class RandomDataGeneratorImpl implements RandomDataGenerator {
@Autowired @Autowired
...@@ -46,5 +44,15 @@ public class RandomDataGeneratorImpl implements RandomDataGenerator { ...@@ -46,5 +44,15 @@ public class RandomDataGeneratorImpl implements RandomDataGenerator {
lineItem.setEstimatedShipDate(order.getOrderDate()+5); lineItem.setEstimatedShipDate(order.getOrderDate()+5);
return lineItem; return lineItem;
} }
@Override
public List<Double> generateIntervals() {
List<Double> timeIntervals = new ArrayList<Double>();
timeIntervals.add(0.10);
timeIntervals.add(0.20);
timeIntervals.add(0.30);
timeIntervals.add(0.40);
return timeIntervals;
}
} }
...@@ -71,4 +71,7 @@ app.paymentMethod.paymentDetail.RequestAmount=1000.00 ...@@ -71,4 +71,7 @@ app.paymentMethod.paymentDetail.RequestAmount=1000.00
#Kafka Properties #Kafka Properties
bootstrap-server = localhost:9092 bootstrap-server = localhost:9092
topic-name = TOPIC_OMD_ORDER_DATA topic-name = TOPIC_OMD_ORDER_DATA
\ No newline at end of file
# Time intervals
app.listOfintervals=0.05,0.10
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment