Subversion Repositories SmartDukaan

Rev

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