Subversion Repositories SmartDukaan

Rev

Rev 5909 | Rev 5936 | Go to most recent revision | 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
 
5851 amar.kumar 6
import in.shop2020.alert.AlertService;
7
import in.shop2020.alert.EntityType;
8
import in.shop2020.alert.MonitoredEntity;
3024 mandeep.dh 9
import in.shop2020.crm.Activity;
3390 mandeep.dh 10
import in.shop2020.crm.ActivityType;
3024 mandeep.dh 11
import in.shop2020.crm.Agent;
12
import in.shop2020.crm.CRMService.Iface;
3390 mandeep.dh 13
import in.shop2020.crm.SearchFilter;
3024 mandeep.dh 14
import in.shop2020.crm.Ticket;
5916 amar.kumar 15
import in.shop2020.crm.TicketCategory;
3024 mandeep.dh 16
import in.shop2020.crm.handler.ActivityHandler;
17
import in.shop2020.crm.handler.AgentHandler;
18
import in.shop2020.crm.handler.TicketHandler;
5851 amar.kumar 19
import in.shop2020.thrift.clients.AlertClient;
3024 mandeep.dh 20
 
21
import java.text.ParseException;
22
import java.util.ArrayList;
5851 amar.kumar 23
import java.util.Calendar;
3339 mandeep.dh 24
import java.util.Date;
3024 mandeep.dh 25
import java.util.List;
5909 amar.kumar 26
import java.util.Map;
3024 mandeep.dh 27
 
3499 mandeep.dh 28
import org.apache.commons.logging.Log;
29
import org.apache.commons.logging.LogFactory;
3024 mandeep.dh 30
import org.apache.thrift.TException;
31
import org.springframework.context.ApplicationContext;
32
import org.springframework.context.support.ClassPathXmlApplicationContext;
33
import org.springframework.stereotype.Service;
3206 mandeep.dh 34
import org.springframework.transaction.annotation.Transactional;
3024 mandeep.dh 35
 
36
/**
37
 * Implementation of the interface/services exposed by thrift to clients!
38
 * 
39
 * @author mandeep
40
 */
41
@Service
42
public class CRMServiceHandler implements Iface {
3499 mandeep.dh 43
    private static final Log log = LogFactory.getLog(CRMServiceHandler.class);
44
 
4008 mandeep.dh 45
    private TicketHandler      ticketHandler;
46
    private ActivityHandler    activityHandler;
47
    private AgentHandler       agentHandler;
48
 
49
    public CRMServiceHandler() {
50
        log.info("Creating context");
51
        ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
52
        ticketHandler              = context.getBean(TicketHandler.class);
53
        activityHandler            = context.getBean(ActivityHandler.class);
54
        agentHandler               = context.getBean(AgentHandler.class);
55
    }
56
 
3390 mandeep.dh 57
    public List<Ticket> getTickets(SearchFilter searchFilter) throws TException {
3024 mandeep.dh 58
        List<Ticket> ttickets = new ArrayList<Ticket>();
3390 mandeep.dh 59
        for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
60
                .getTickets(in.shop2020.crm.domain.SearchFilter
61
                        .create(searchFilter))) {
3024 mandeep.dh 62
            ttickets.add(ticket.getThriftTicket());
63
        }
64
 
65
        return ttickets;
66
    }
67
 
3390 mandeep.dh 68
    public List<Ticket> getUnassignedTickets() throws TException {
69
        List<Ticket> tickets = new ArrayList<Ticket>();
70
 
71
        for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
72
                .getUnassignedTickets()) {
73
            tickets.add(ticket.getThriftTicket());
74
        }
75
 
76
        return tickets;
77
    }
78
 
3206 mandeep.dh 79
    @Transactional
3390 mandeep.dh 80
    public void updateTicket(Ticket ticket, Activity activity)
81
            throws TException {
3024 mandeep.dh 82
        try {
83
            ticketHandler.updateTicket(in.shop2020.crm.domain.Ticket
84
                    .create(ticket));
3206 mandeep.dh 85
            activity.setTicketId(ticket.getId());
3390 mandeep.dh 86
            activityHandler.insertActivity(in.shop2020.crm.domain.Activity
87
                    .create(activity));
5851 amar.kumar 88
            try{
89
	            /*For now monitoring is only done for New tickets and hence once any 
90
	        	 * activity is done on a ticket after its creation, we stop monitoring that ticket*/
5916 amar.kumar 91
            	if(activity.getType()== ActivityType.SEND_EMAIL_TO_CUSTOMER || 
92
            			activity.getType()== ActivityType.ESCALATE_TICKET ||
93
            			activity.getType()== ActivityType.CALLED_CUSTOMER) {
94
		        	AlertService.Client alertClient = new AlertClient().getClient();
95
		            alertClient.endMonitoringEntity(EntityType.TICKET, "ticketId = " + ticket.getId());
96
            	}
5851 amar.kumar 97
            } catch(Exception ex) {
98
            	log.error("Exception while ending monitoring for ticketId " + ticket.getId());
99
            	log.error(ex);
100
            }
3024 mandeep.dh 101
        } catch (ParseException e) {
102
            throw new TException("Could not update " + ticket, e);
103
        }
104
    }
105
 
3206 mandeep.dh 106
    @Transactional
3390 mandeep.dh 107
    public long insertTicket(Ticket ticket, Activity activity)
108
            throws TException {
3024 mandeep.dh 109
        try {
3390 mandeep.dh 110
            long ticketId = ticketHandler
111
                    .insertTicket(in.shop2020.crm.domain.Ticket.create(ticket));
3206 mandeep.dh 112
            activity.setTicketId(ticketId);
3390 mandeep.dh 113
            activityHandler.insertActivity(in.shop2020.crm.domain.Activity
114
                    .create(activity));
5851 amar.kumar 115
            try {
5916 amar.kumar 116
            	if(ticket.getCategory()!= TicketCategory.COD_VERIFICATION &&
117
            			ticket.getCategory()!= TicketCategory.UNDELIVERED &&
118
            			ticket.getCategory()!= TicketCategory.STORE_PICKUP) {
119
		            MonitoredEntity entity = new MonitoredEntity();
120
		            entity.setEntityType(EntityType.TICKET);
121
		            entity.setEventType(0);
122
		            entity.setEntityIdentifier("ticketId = " + new Long(ticketId).toString());
123
		            entity.setDescription(ticket.getDescription());
124
		            Calendar thresholdTime = Calendar.getInstance();
125
		            thresholdTime.add(Calendar.HOUR, 4);
126
		            entity.setWarnExpiryTime(thresholdTime.getTimeInMillis());
127
		            thresholdTime.add(Calendar.HOUR, 2);
128
		            entity.setCriticalExpiryTime(thresholdTime.getTimeInMillis());
129
		            AlertService.Client alertClient = new AlertClient().getClient();
130
		            alertClient.scheduleAlert(entity);
131
            	}
5851 amar.kumar 132
            } catch (Exception ex) {
133
            	log.error("Exception while scheduling alert for Ticket Id "+ticketId);
134
            	log.error(ex);
135
            }
3206 mandeep.dh 136
            return ticketId;
3024 mandeep.dh 137
        } catch (ParseException e) {
138
            throw new TException("Could not insert " + ticket, e);
139
        }
140
    }
141
 
3390 mandeep.dh 142
    public List<Activity> getActivities(SearchFilter searchFilter)
143
            throws TException {
3024 mandeep.dh 144
        List<Activity> tactivities = new ArrayList<Activity>();
3168 mandeep.dh 145
        List<in.shop2020.crm.domain.Activity> activities = activityHandler
3390 mandeep.dh 146
                .getActivities(in.shop2020.crm.domain.SearchFilter
147
                        .create(searchFilter));
148
 
3168 mandeep.dh 149
        if (activities != null) {
150
            for (in.shop2020.crm.domain.Activity ticket : activities) {
151
                tactivities.add(ticket.getThriftActivity());
152
            }
3024 mandeep.dh 153
        }
3390 mandeep.dh 154
 
3024 mandeep.dh 155
        return tactivities;
156
    }
157
 
3405 mandeep.dh 158
    public long insertActivity(Activity activity) throws TException {
3024 mandeep.dh 159
        try {
3405 mandeep.dh 160
            return activityHandler.insertActivity(in.shop2020.crm.domain.Activity
3024 mandeep.dh 161
                    .create(activity));
162
        } catch (ParseException e) {
163
            throw new TException("Could not insert " + activity, e);
164
        }
165
    }
166
 
3390 mandeep.dh 167
    @Transactional
168
    public void markAsRead(long activityId, long agentId) throws TException {
169
        in.shop2020.crm.domain.SearchFilter searchFilter = new in.shop2020.crm.domain.SearchFilter();
170
        searchFilter.setActivityId(activityId);
171
        activityHandler.markAsRead(activityId);
3168 mandeep.dh 172
        in.shop2020.crm.domain.Activity activity = activityHandler
3390 mandeep.dh 173
                .getActivities(searchFilter).get(0);
4089 mandeep.dh 174
 
175
        // Setting activity fields from latest ticket fields
176
        if (activity.getTicketId() != null) {
177
            searchFilter.setTicketId(activity.getTicketId());
178
            in.shop2020.crm.domain.Ticket ticket = ticketHandler.getTickets(searchFilter).get(0);
179
            activity.setTicketAssigneeId(ticket.getAssigneeId());
180
            activity.setTicketCategory(ticket.getCategory());
181
            activity.setTicketDescription(ticket.getDescription());
182
            activity.setTicketPriority(ticket.getPriority());
183
            activity.setTicketStatus(ticket.getStatus());
184
        }
185
 
3390 mandeep.dh 186
        activity.setCreatorId(agentId);
187
        activity.setDescription("Marked as read ticketId: "
188
                + activity.getTicketId() + ", activityId: " + activityId);
189
        activity.setType(ActivityType.OTHER);
190
        activityHandler.insertActivity(activity);
3024 mandeep.dh 191
    }
192
 
3390 mandeep.dh 193
    public List<Agent> getAgents(SearchFilter searchFilter) throws TException {
194
        List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 195
 
3390 mandeep.dh 196
        for (in.shop2020.crm.domain.Agent agent : agentHandler
197
                .getAgents(in.shop2020.crm.domain.SearchFilter
198
                        .create(searchFilter))) {
199
            agents.add(agent.getThriftAgent());
3024 mandeep.dh 200
        }
201
 
3390 mandeep.dh 202
        return agents;
3024 mandeep.dh 203
    }
5286 amar.kumar 204
 
205
    public List<Agent> getInactiveAgents(SearchFilter searchFilter) throws TException {
206
        List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 207
 
5286 amar.kumar 208
        for (in.shop2020.crm.domain.Agent agent : agentHandler
209
                .getInactiveAgents(in.shop2020.crm.domain.SearchFilter
210
                        .create(searchFilter))) {
211
            agents.add(agent.getThriftAgent());
212
        }
213
 
214
        return agents;
215
    }
216
 
3390 mandeep.dh 217
    public void updatePasswordForAgent(String agentEmailId, String password)
3339 mandeep.dh 218
            throws TException {
3390 mandeep.dh 219
        agentHandler.updatePasswordForAgent(agentEmailId, password);
220
    }
3339 mandeep.dh 221
 
3390 mandeep.dh 222
    public long getLastEmailProcessedTimestamp() throws TException {
223
        return agentHandler.getLastEmailProcessedTimestamp().getTime();
3339 mandeep.dh 224
    }
225
 
3390 mandeep.dh 226
    public void updateLastEmailProcessedTimestamp(long timestamp)
3024 mandeep.dh 227
            throws TException {
3390 mandeep.dh 228
        agentHandler.updateLastEmailProcessedTimestamp(new Date(timestamp));
3024 mandeep.dh 229
    }
230
 
3088 mandeep.dh 231
    public List<String> getRoleNamesForAgent(String agentEmailId)
3168 mandeep.dh 232
            throws TException {
3088 mandeep.dh 233
        return agentHandler.getRoleNamesForAgent(agentEmailId);
234
    }
235
 
236
    public List<String> getPermissionsForRoleName(String roleName)
3168 mandeep.dh 237
            throws TException {
3088 mandeep.dh 238
        return agentHandler.getPermissionsForRoleName(roleName);
239
    }
4793 amar.kumar 240
 
241
    public void changeAgentStatus(boolean status, String emailId)
242
    		throws TException {
243
    	agentHandler.changeAgentStatus(status, emailId);
244
    }
3088 mandeep.dh 245
 
3375 rajveer 246
	public boolean isAlive() throws TException {
4624 mandeep.dh 247
        try {
248
            return !agentHandler.getAgents(null).isEmpty();
249
        } catch (Exception e) {
250
            log.error("Could not fetch agents", e);
251
        }
3375 rajveer 252
 
4624 mandeep.dh 253
        return false;
254
    }
255
 
3375 rajveer 256
	public void closeSession() throws TException {
257
	}
4793 amar.kumar 258
 
259
	public void insertAgent(Agent agent, List<String> role) throws TException {
260
		agentHandler.insertAgent(in.shop2020.crm.domain.Agent.create(agent), role);
261
	}
262
 
263
	public void unassignAgentTickets(int assigneeId) {
264
		ticketHandler.unassignAgentTickets(assigneeId);
265
	}
5168 amar.kumar 266
 
267
	public void changeAgentRole(long id, List<String> role) {
268
		agentHandler.changeAgentRole(id,role);
269
	}
270
 
271
	public int getOpenTicketCountForAgent(long agentId) {
272
		return ticketHandler.getOpenTicketCountForAgent(agentId);
273
	}
5909 amar.kumar 274
 
275
	public Map<String,Long> getOpenTicketsMap() {
276
		return ticketHandler.getOpenTicketsMap();
277
	}
3024 mandeep.dh 278
}