Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
6104 rajveer 1
/**
2
 * 
3
 */
4
package in.shop2020.crm.util;
5
 
6
import in.shop2020.crm.domain.Activity;
7
import in.shop2020.crm.domain.SearchFilter;
8
import in.shop2020.crm.domain.Ticket;
9
import in.shop2020.crm.ActivityType;
10
import in.shop2020.crm.TicketCategory;
11
import in.shop2020.crm.TicketPriority;
12
import in.shop2020.crm.TicketStatus;
13
import in.shop2020.crm.handler.ActivityHandler;
14
import in.shop2020.crm.handler.TicketHandler;
15
import in.shop2020.model.v1.order.ExtraTransactionProcessingType;
16
import in.shop2020.model.v1.order.RechargeOrder;
17
import in.shop2020.model.v1.order.TransactionService.Client;
18
import in.shop2020.model.v1.order.TransactionServiceException;
19
import in.shop2020.model.v1.user.UserContextException;
20
import in.shop2020.thrift.clients.TransactionClient;
21
 
22
import java.util.ArrayList;
23
import java.util.List;
24
 
25
import org.apache.commons.logging.Log;
26
import org.apache.commons.logging.LogFactory;
27
import org.apache.thrift.TException;
28
import org.apache.thrift.transport.TTransportException;
29
import org.springframework.context.ApplicationContext;
30
import org.springframework.context.support.ClassPathXmlApplicationContext;
31
import org.springframework.transaction.annotation.Transactional;
32
 
33
/**
34
 * @author rajveer
35
 * Processor all the recharge orders whose recharge status is unkown. 
36
 */
37
public class UncertainRechargeProcessorTask {
38
    private static Log log = LogFactory.getLog(UncertainRechargeProcessorTask.class);
39
    private static final long   ADMIN_AGENT_ID   = 1;
6961 anupam.sin 40
    private static final long   OUTBOUND_DEFAULT_ASSIGNEE_ID   = 29;
6104 rajveer 41
 
42
    private TicketHandler      ticketHandler;
43
    private ActivityHandler    activityHandler;
44
 
45
    public UncertainRechargeProcessorTask()
46
    {
47
        ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
48
        ticketHandler              = context.getBean(TicketHandler.class);
49
        activityHandler            = context.getBean(ActivityHandler.class);
50
    }
51
 
52
 
53
    public static void main(String[] args) {
54
        try {
55
            UncertainRechargeProcessorTask newTask = new UncertainRechargeProcessorTask();
56
            Client client = new TransactionClient().getClient();
57
            List<Long> transactionIds = client.getTransactionsRequiringExtraProcessing(ExtraTransactionProcessingType.RECHARGE_UNKNOWN);
58
            if (transactionIds != null && !transactionIds.isEmpty()) {
59
                log.info("Fetched " + transactionIds.size() + " transactions");
60
                for (Long transactionId : transactionIds) {
61
                    newTask.processRechargeTxn(transactionId);
6191 rajveer 62
                    client = new TransactionClient().getClient();
63
                    client.markTransactionAsProcessed(transactionId, ExtraTransactionProcessingType.RECHARGE_UNKNOWN);
6104 rajveer 64
                }
65
            }
66
            else {
67
                log.info("No transactions to process");
68
            }
69
        } catch (TTransportException e) {
70
            log.error("Error creating client", e);
71
        } catch (TException e) {
72
            log.error("Could not fetch transactions for processing", e);
73
        } catch (TransactionServiceException e) {
74
            log.error("Could not find transaction", e);
75
        } catch (UserContextException e) {
76
            log.error("Could not find user", e);
77
        }
78
    }
79
 
80
    /**
81
     * Method that creates a ticket if necessary for COD verification
82
     * @throws TException 
83
     * @throws TransactionServiceException 
84
     * @throws UserContextException 
85
     */
86
    private void processRechargeTxn(long transactionId)
87
            throws TransactionServiceException, TException,
88
            UserContextException {
89
        log.info("Processing txn id: " + transactionId);
90
        Client client = new TransactionClient().getClient();
91
        RechargeOrder rechargeOrder = client.getRechargeOrdersForTransaction(transactionId);
92
        log.info("Processing order: " + rechargeOrder.getId());
93
 
94
        in.shop2020.crm.domain.SearchFilter searchFilter = new SearchFilter();
95
        searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
96
        searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
97
        searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
6176 amit.gupta 98
        searchFilter.setTicketCategory(TicketCategory.RECHARGE_RELATED);
6104 rajveer 99
        searchFilter.setCustomerId(rechargeOrder.getUserId());
100
 
101
        // No need to create a ticket if there exists one for the
102
        // customer!
103
        if (ticketHandler.getTickets(searchFilter).isEmpty()) {
104
            log.info("Logging ticket");
105
            Ticket ticket = new Ticket();
6176 amit.gupta 106
            ticket.setCategory(TicketCategory.RECHARGE_RELATED);
6104 rajveer 107
            ticket.setCreatorId(ADMIN_AGENT_ID);
108
            ticket.setCustomerId(rechargeOrder.getUserId());
109
            ticket.setDescription("Unknown Recharge Status");
110
            ticket.setPriority(TicketPriority.HIGH);
111
            ticket.setStatus(TicketStatus.OPEN);
112
            ticket.setAssigneeId(OUTBOUND_DEFAULT_ASSIGNEE_ID);
113
 
114
            Activity activity = new Activity();
115
            activity.setCreatorId(ticket.getCreatorId());
116
            activity.setCustomerId(ticket.getCustomerId());
117
            activity.setDescription("Creating ticket");
118
            activity.setTicketCategory(ticket.getCategory());
119
            activity.setTicketDescription(ticket.getDescription());
120
            activity.setTicketPriority(ticket.getPriority());
121
            activity.setTicketStatus(ticket.getStatus());
122
            activity.setTicketAssigneeId(ticket.getAssigneeId());
123
            activity.setType(ActivityType.OTHER);
124
            createTicket(ticket, activity);
125
        }
126
    }
127
 
128
    @Transactional
129
    private void createTicket(Ticket ticket, Activity activity) {
130
        ticketHandler.insertTicket(ticket);
131
        activity.setTicketId(ticket.getId());
132
        activityHandler.insertActivity(activity);
133
    }
134
}