Subversion Repositories SmartDukaan

Rev

Rev 21891 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3024 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.crm.service.handler;
5
 
8371 manish.sha 6
import in.shop2020.config.ConfigException;
3024 mandeep.dh 7
import in.shop2020.crm.Activity;
3390 mandeep.dh 8
import in.shop2020.crm.ActivityType;
3024 mandeep.dh 9
import in.shop2020.crm.Agent;
5936 amar.kumar 10
import in.shop2020.crm.TicketStatus;
3024 mandeep.dh 11
import in.shop2020.crm.CRMService.Iface;
3390 mandeep.dh 12
import in.shop2020.crm.SearchFilter;
3024 mandeep.dh 13
import in.shop2020.crm.Ticket;
5916 amar.kumar 14
import in.shop2020.crm.TicketCategory;
3024 mandeep.dh 15
import in.shop2020.crm.handler.ActivityHandler;
16
import in.shop2020.crm.handler.AgentHandler;
17
import in.shop2020.crm.handler.TicketHandler;
8371 manish.sha 18
import in.shop2020.serving.model.ShipmentUpdate;
19
import in.shop2020.serving.services.FedExTrackingService;
9338 manish.sha 20
import in.shop2020.thrift.clients.InventoryClient;
8371 manish.sha 21
import in.shop2020.thrift.clients.TransactionClient;
22
import in.shop2020.thrift.clients.config.ConfigClient;
9338 manish.sha 23
import in.shop2020.model.v1.inventory.WarehouseLocation;
24
import in.shop2020.model.v1.inventory.Warehouse;
8371 manish.sha 25
import in.shop2020.model.v1.order.Order;
26
import in.shop2020.model.v1.order.TransactionServiceException;
3024 mandeep.dh 27
 
28
import java.text.ParseException;
29
import java.util.ArrayList;
35735 amit 30
 
3339 mandeep.dh 31
import java.util.Date;
9338 manish.sha 32
import java.util.HashMap;
3024 mandeep.dh 33
import java.util.List;
5909 amar.kumar 34
import java.util.Map;
3024 mandeep.dh 35
 
3499 mandeep.dh 36
import org.apache.commons.logging.Log;
37
import org.apache.commons.logging.LogFactory;
3024 mandeep.dh 38
import org.apache.thrift.TException;
8371 manish.sha 39
import org.apache.thrift.transport.TTransportException;
3024 mandeep.dh 40
import org.springframework.context.ApplicationContext;
41
import org.springframework.context.support.ClassPathXmlApplicationContext;
42
import org.springframework.stereotype.Service;
3206 mandeep.dh 43
import org.springframework.transaction.annotation.Transactional;
3024 mandeep.dh 44
 
45
/**
46
 * Implementation of the interface/services exposed by thrift to clients!
47
 * 
48
 * @author mandeep
49
 */
50
@Service
51
public class CRMServiceHandler implements Iface {
9338 manish.sha 52
	private static final Log log = LogFactory.getLog(CRMServiceHandler.class);
3499 mandeep.dh 53
 
9338 manish.sha 54
	private TicketHandler      ticketHandler;
55
	private ActivityHandler    activityHandler;
56
	private AgentHandler       agentHandler;
57
	private FedExTrackingService fedexTrackClientMumbai;
58
	private FedExTrackingService fedexTrackClientDelhi;
4008 mandeep.dh 59
 
9338 manish.sha 60
	public CRMServiceHandler() {
61
		log.info("Creating context");
62
		ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
63
		ticketHandler              = context.getBean(TicketHandler.class);
64
		activityHandler            = context.getBean(ActivityHandler.class);
65
		agentHandler               = context.getBean(AgentHandler.class);
66
	}
4008 mandeep.dh 67
 
9338 manish.sha 68
	public List<Ticket> getTickets(SearchFilter searchFilter) throws TException {
69
		List<Ticket> ttickets = new ArrayList<Ticket>();
70
		for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
71
				.getTickets(in.shop2020.crm.domain.SearchFilter
72
						.create(searchFilter))) {
73
			ttickets.add(ticket.getThriftTicket());
74
		}
3024 mandeep.dh 75
 
9338 manish.sha 76
		return ttickets;
77
	}
3024 mandeep.dh 78
 
9338 manish.sha 79
	public List<Ticket> getUnassignedTickets() throws TException {
80
		List<Ticket> tickets = new ArrayList<Ticket>();
3390 mandeep.dh 81
 
9338 manish.sha 82
		for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
83
				.getUnassignedTickets()) {
84
			tickets.add(ticket.getThriftTicket());
85
		}
3390 mandeep.dh 86
 
9338 manish.sha 87
		return tickets;
88
	}
3390 mandeep.dh 89
 
9338 manish.sha 90
	@Transactional
91
	public void updateTicket(Ticket ticket, Activity activity)
92
	throws TException {
93
		try {
94
			ticketHandler.updateTicket(in.shop2020.crm.domain.Ticket
95
					.create(ticket));
96
			activity.setTicketId(ticket.getId());
97
			activityHandler.insertActivity(in.shop2020.crm.domain.Activity
98
					.create(activity));
99
		} catch (ParseException e) {
100
			throw new TException("Could not update " + ticket, e);
101
		}
102
	}
3024 mandeep.dh 103
 
9338 manish.sha 104
	@Transactional
105
	public long insertTicket(Ticket ticket, Activity activity)
106
	throws TException {
107
		try {
108
			long ticketId = ticketHandler
109
			.insertTicket(in.shop2020.crm.domain.Ticket.create(ticket));
110
			activity.setTicketId(ticketId);
111
			activityHandler.insertActivity(in.shop2020.crm.domain.Activity
112
					.create(activity));
113
			return ticketId;
114
		} catch (ParseException e) {
115
			throw new TException("Could not insert " + ticket, e);
116
		}
117
	}
3024 mandeep.dh 118
 
21888 amit.gupta 119
	public List<Activity> getActivities(SearchFilter searchFilter) throws TException {
9338 manish.sha 120
		List<Activity> tactivities = new ArrayList<Activity>();
14902 manish.sha 121
		log.info("Search Filter..."+searchFilter.isNotShowPmTickets());
9338 manish.sha 122
		in.shop2020.crm.domain.SearchFilter filter_to_check  =in.shop2020.crm.domain.SearchFilter.create(searchFilter);
14902 manish.sha 123
		log.info("Search Filter after conversion..."+filter_to_check.getNotShowPmTickets());
9338 manish.sha 124
		List<in.shop2020.crm.domain.Activity> activities = activityHandler
125
		.getActivities(filter_to_check);
126
		in.shop2020.crm.domain.SearchFilter new_searchFilter = new in.shop2020.crm.domain.SearchFilter();
3390 mandeep.dh 127
 
9338 manish.sha 128
		if (activities != null) {
129
			for (in.shop2020.crm.domain.Activity ticket : activities) {
130
				in.shop2020.crm.Activity activity = ticket.getThriftActivity();
131
				if(filter_to_check.getIsActivityRead()!=null && !filter_to_check.getIsActivityRead()){
132
					if(activity.getTicketId() > 0){
133
						new_searchFilter.setTicketId(activity.getTicketId());
134
						List<in.shop2020.crm.domain.Ticket> tickets_as_per_activity= ticketHandler.getTickets(new_searchFilter);
135
						activity.setTicketStatus(tickets_as_per_activity.get(0).getStatus());
136
					}
137
				}
138
				tactivities.add(activity);
139
			}
140
		}
141
		return tactivities;
142
	}
3024 mandeep.dh 143
 
9338 manish.sha 144
	public long insertActivity(Activity activity) throws TException {
145
		try {
146
			return activityHandler.insertActivity(in.shop2020.crm.domain.Activity
147
					.create(activity));
148
		} catch (ParseException e) {
149
			throw new TException("Could not insert " + activity, e);
150
		}
151
	}
4089 mandeep.dh 152
 
9338 manish.sha 153
	@Transactional
154
	public void markAsRead(long activityId, long agentId) throws TException {
155
		in.shop2020.crm.domain.SearchFilter searchFilter = new in.shop2020.crm.domain.SearchFilter();
156
		searchFilter.setActivityId(activityId);
157
		activityHandler.markAsRead(activityId);
158
		in.shop2020.crm.domain.Activity activity = activityHandler
159
		.getActivities(searchFilter).get(0);
4089 mandeep.dh 160
 
9338 manish.sha 161
		// Setting activity fields from latest ticket fields
162
		if (activity.getTicketId() != null) {
163
			searchFilter.setTicketId(activity.getTicketId());
164
			in.shop2020.crm.domain.Ticket ticket = ticketHandler.getTickets(searchFilter).get(0);
165
			activity.setTicketAssigneeId(ticket.getAssigneeId());
166
			activity.setTicketCategory(ticket.getCategory());
167
			activity.setTicketDescription(ticket.getDescription());
168
			activity.setTicketPriority(ticket.getPriority());
169
			activity.setTicketStatus(ticket.getStatus());
170
		}
3024 mandeep.dh 171
 
9338 manish.sha 172
		activity.setCreatorId(agentId);
173
		activity.setDescription("Marked as read ticketId: "
174
				+ activity.getTicketId() + ", activityId: " + activityId);
175
		activity.setType(ActivityType.OTHER);
176
		activityHandler.insertActivity(activity);
177
	}
3024 mandeep.dh 178
 
9338 manish.sha 179
	public List<Agent> getAgents(SearchFilter searchFilter) throws TException {
180
		List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 181
 
21888 amit.gupta 182
		for (in.shop2020.crm.domain.Agent agent : agentHandler.getAgents(in.shop2020.crm.domain.SearchFilter.create(searchFilter))) {
9338 manish.sha 183
			agents.add(agent.getThriftAgent());
184
		}
3024 mandeep.dh 185
 
9338 manish.sha 186
		return agents;
187
	}
5286 amar.kumar 188
 
9338 manish.sha 189
	public List<Agent> getInactiveAgents(SearchFilter searchFilter) throws TException {
190
		List<Agent> agents = new ArrayList<Agent>();
5286 amar.kumar 191
 
9338 manish.sha 192
		for (in.shop2020.crm.domain.Agent agent : agentHandler
193
				.getInactiveAgents(in.shop2020.crm.domain.SearchFilter
194
						.create(searchFilter))) {
195
			agents.add(agent.getThriftAgent());
196
		}
3339 mandeep.dh 197
 
9338 manish.sha 198
		return agents;
199
	}
3339 mandeep.dh 200
 
9338 manish.sha 201
	public void updatePasswordForAgent(String agentEmailId, String password)
202
	throws TException {
203
		agentHandler.updatePasswordForAgent(agentEmailId, password);
204
	}
3024 mandeep.dh 205
 
9338 manish.sha 206
	public long getLastEmailProcessedTimestamp() throws TException {
207
		return agentHandler.getLastEmailProcessedTimestamp().getTime();
208
	}
3088 mandeep.dh 209
 
9338 manish.sha 210
	public void updateLastEmailProcessedTimestamp(long timestamp)
211
	throws TException {
212
		agentHandler.updateLastEmailProcessedTimestamp(new Date(timestamp));
213
	}
3088 mandeep.dh 214
 
9338 manish.sha 215
	public List<String> getRoleNamesForAgent(String agentEmailId)
216
	throws TException {
217
		return agentHandler.getRoleNamesForAgent(agentEmailId);
218
	}
219
 
220
	public List<String> getPermissionsForRoleName(String roleName)
221
	throws TException {
222
		return agentHandler.getPermissionsForRoleName(roleName);
223
	}
224
 
225
	public void changeAgentStatus(boolean status, String emailId)
226
	throws TException {
227
		agentHandler.changeAgentStatus(status, emailId);
228
	}
229
 
3375 rajveer 230
	public boolean isAlive() throws TException {
9338 manish.sha 231
		try {
232
			return !agentHandler.getAgents(null).isEmpty();
233
		} catch (Exception e) {
234
			log.error("Could not fetch agents", e);
235
		}
3375 rajveer 236
 
9338 manish.sha 237
		return false;
238
	}
4624 mandeep.dh 239
 
3375 rajveer 240
	public void closeSession() throws TException {
241
	}
9338 manish.sha 242
 
4793 amar.kumar 243
	public void insertAgent(Agent agent, List<String> role) throws TException {
244
		agentHandler.insertAgent(in.shop2020.crm.domain.Agent.create(agent), role);
245
	}
9338 manish.sha 246
 
4793 amar.kumar 247
	public void unassignAgentTickets(int assigneeId) {
248
		ticketHandler.unassignAgentTickets(assigneeId);
249
	}
9338 manish.sha 250
 
5168 amar.kumar 251
	public void changeAgentRole(long id, List<String> role) {
252
		agentHandler.changeAgentRole(id,role);
253
	}
9338 manish.sha 254
 
5168 amar.kumar 255
	public int getOpenTicketCountForAgent(long agentId) {
256
		return ticketHandler.getOpenTicketCountForAgent(agentId);
257
	}
9338 manish.sha 258
 
5909 amar.kumar 259
	public Map<String,Long> getOpenTicketsMap() {
260
		return ticketHandler.getOpenTicketsMap();
261
	}
8371 manish.sha 262
 
9338 manish.sha 263
 
8371 manish.sha 264
	public Map<String, String> getFedexReconciliationDataMap(
265
			List<Long> order_ids, String method_key) {
8384 manish.sha 266
		log.info("Into Method of CRM Service to get Fedex Reconciliation Data");
9338 manish.sha 267
		Map<String, String> fedexReconciliationDataMap = new HashMap<String,String>();
268
		Map<String, String> fedexReconciliationDataMap1 = null;
269
		Map<String, String> fedexReconciliationDataMap2 = null;
8371 manish.sha 270
		try{
271
			TransactionClient transactionServiceClient = new TransactionClient();
272
			List<Order> orderList= transactionServiceClient.getClient().getOrderList(order_ids);
9338 manish.sha 273
			List<Order> orderListDelhi = new ArrayList<Order>();
274
			List<Order> orderListMumbai = new ArrayList<Order>();
275
			for(Order ord1: orderList){
276
				Warehouse warehouse = null;
277
				try{
278
					InventoryClient isc = new InventoryClient();
279
					warehouse = isc.getClient().getWarehouse(ord1.getWarehouse_id());
280
				} catch(Exception e) {
281
					log.error("Unable to get warehouse for id : " + ord1.getWarehouse_id(),e);
282
				}
283
				if(warehouse!=null){
284
					if(WarehouseLocation.Mumbai==warehouse.getLogisticsLocation()){
285
						orderListMumbai.add(ord1);
286
					}
287
					else{
288
						orderListDelhi.add(ord1);
289
					}
290
				}
291
			}
292
 
293
			fedexTrackClientMumbai = new FedExTrackingService(WarehouseLocation.Mumbai);
294
			fedexTrackClientDelhi = new FedExTrackingService(WarehouseLocation.Delhi);
295
 
8371 manish.sha 296
			if("delivered_orders".equalsIgnoreCase(method_key)){
9338 manish.sha 297
				fedexReconciliationDataMap1 = fedexTrackClientMumbai.readFedExDeliveredOrdersMap(orderListMumbai);
8371 manish.sha 298
			}
9338 manish.sha 299
			if("delivered_orders".equalsIgnoreCase(method_key)){
300
				fedexReconciliationDataMap2 = fedexTrackClientDelhi.readFedExDeliveredOrdersMap(orderListDelhi);
301
			}
8371 manish.sha 302
			if("returned_orders".equalsIgnoreCase(method_key)){
9338 manish.sha 303
				fedexReconciliationDataMap1 = fedexTrackClientMumbai.readFedExReturnedOrdersMap(orderListMumbai);
8371 manish.sha 304
			}
9338 manish.sha 305
			if("returned_orders".equalsIgnoreCase(method_key)){
306
				fedexReconciliationDataMap2 = fedexTrackClientDelhi.readFedExReturnedOrdersMap(orderListDelhi);
307
			}
8371 manish.sha 308
			if("undelivered_orders".equalsIgnoreCase(method_key)){
9338 manish.sha 309
				fedexReconciliationDataMap1 = fedexTrackClientMumbai.readFedExUnDeliveredOrdersMap(orderListMumbai);
8371 manish.sha 310
			}
9338 manish.sha 311
			if("undelivered_orders".equalsIgnoreCase(method_key)){
312
				fedexReconciliationDataMap2 = fedexTrackClientDelhi.readFedExUnDeliveredOrdersMap(orderListDelhi);
313
			}
8371 manish.sha 314
			if("first_delivery_attempted_orders".equalsIgnoreCase(method_key)){
9338 manish.sha 315
				fedexReconciliationDataMap1 = fedexTrackClientMumbai.readFedExFirstDeliveryAttemptedOrdersMap(orderListMumbai);
8371 manish.sha 316
			}
9338 manish.sha 317
			if("first_delivery_attempted_orders".equalsIgnoreCase(method_key)){
318
				fedexReconciliationDataMap2 = fedexTrackClientDelhi.readFedExFirstDeliveryAttemptedOrdersMap(orderListDelhi);
319
			}
8371 manish.sha 320
			if("destination_city_reached_orders".equalsIgnoreCase(method_key)){
9338 manish.sha 321
				fedexReconciliationDataMap1 = fedexTrackClientMumbai.readFedExReachedDestinationOrdersMap(orderListMumbai);
8371 manish.sha 322
			}
9338 manish.sha 323
			if("destination_city_reached_orders".equalsIgnoreCase(method_key)){
324
				fedexReconciliationDataMap2 = fedexTrackClientDelhi.readFedExReachedDestinationOrdersMap(orderListDelhi);
325
			}
8371 manish.sha 326
			if("picked_up_orders".equalsIgnoreCase(method_key) || "local_connection_orders".equalsIgnoreCase(method_key)){
9338 manish.sha 327
				fedexReconciliationDataMap1 = fedexTrackClientMumbai.readFedExPickupOrdersMap(orderListMumbai);
8371 manish.sha 328
			}
9338 manish.sha 329
			if("picked_up_orders".equalsIgnoreCase(method_key) || "local_connection_orders".equalsIgnoreCase(method_key)){
330
				fedexReconciliationDataMap2 = fedexTrackClientDelhi.readFedExPickupOrdersMap(orderListDelhi);
331
			}
332
			fedexReconciliationDataMap.putAll(fedexReconciliationDataMap1);
333
			fedexReconciliationDataMap.putAll(fedexReconciliationDataMap2);
334
			// TODO Auto-generated method stub
8371 manish.sha 335
		}
336
		catch (TTransportException e) {
8384 manish.sha 337
			log.error("Unable to create thrift Client from fedex reconciliation method.... ", e);
8371 manish.sha 338
		} catch (TException e) {
8384 manish.sha 339
			log.error("Unable to get thrift Client from fedex reconciliation method.... ", e);
8371 manish.sha 340
		}
8384 manish.sha 341
		log.info("Into Method of CRM Service to get Fedex Reconciliation Data....and got it successfully");
8371 manish.sha 342
		return fedexReconciliationDataMap;
343
	}
9338 manish.sha 344
}