Subversion Repositories SmartDukaan

Rev

Rev 3090 | Rev 3106 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2674 vikas 1
package in.shop2020.serving.controllers;
2
 
3090 mandeep.dh 3
import in.shop2020.crm.Activity;
4
import in.shop2020.crm.CRMService.Client;
5
import in.shop2020.crm.Ticket;
6
import in.shop2020.crm.TicketStatus;
2724 vikas 7
import in.shop2020.model.v1.order.Order;
8
import in.shop2020.model.v1.order.OrderStatus;
3090 mandeep.dh 9
import in.shop2020.model.v1.order.TransactionServiceException;
2724 vikas 10
import in.shop2020.model.v1.user.Cart;
11
import in.shop2020.model.v1.user.Line;
12
import in.shop2020.model.v1.user.User;
3090 mandeep.dh 13
import in.shop2020.model.v1.user.UserCommunication;
14
import in.shop2020.model.v1.user.UserCommunicationException;
15
import in.shop2020.model.v1.user.UserContextException;
16
import in.shop2020.model.v1.user.UserState;
2674 vikas 17
 
2724 vikas 18
import java.text.SimpleDateFormat;
19
import java.util.Arrays;
20
import java.util.Date;
3090 mandeep.dh 21
import java.util.HashSet;
2724 vikas 22
import java.util.List;
3090 mandeep.dh 23
import java.util.Set;
2724 vikas 24
 
2674 vikas 25
import org.apache.log4j.Logger;
3090 mandeep.dh 26
import org.apache.shiro.SecurityUtils;
27
import org.apache.shiro.crypto.hash.Sha256Hash;
2674 vikas 28
import org.apache.struts2.convention.annotation.Action;
3090 mandeep.dh 29
import org.apache.thrift.TException;
2674 vikas 30
 
31
/**
32
 * @author vikas
33
 *
34
 */
35
@SuppressWarnings("serial")
36
public class HomeController extends BaseController {
3090 mandeep.dh 37
    private static final Logger log = Logger.getLogger(HomeController.class);
38
    private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
39
 
40
    private static final Set<OrderStatus> failedStatusList = new HashSet<OrderStatus>(Arrays.asList(new OrderStatus[] {
41
            OrderStatus.SALES_RET_RESHIPPED,
42
            OrderStatus.SALES_RET_REFUNDED,
43
            OrderStatus.DOA_INVALID_REFUNDED,
44
            OrderStatus.DOA_INVALID_RESHIPPED,
45
            OrderStatus.DOA_VALID_REFUNDED,
46
            OrderStatus.DOA_RESHIPPED,
47
            OrderStatus.REFUNDED,
48
            OrderStatus.REJECTED,
49
            OrderStatus.FAILED}));
50
 
2724 vikas 51
    private String email;
52
    private long orderId;
3090 mandeep.dh 53
    private String mobileNumber;
2724 vikas 54
    private User user;
55
    private long orderCount;
56
    private long completedOrderCount;
57
    private long openOrderCount;
58
    private long failedOrderCount;
2830 vikas 59
    private long userCommunicationCount;
3090 mandeep.dh 60
    private long ticketCount;
61
    private long openTicketCount;
62
    private long closedTicketCount;
3096 mandeep.dh 63
    private String ticketId;
2724 vikas 64
    private String lastLogin;
65
    private double cartItems;
66
    private String couponCode = "";
2674 vikas 67
 
68
    @Action("/")
2724 vikas 69
    public String index() throws Exception {
3090 mandeep.dh 70
        try {
71
            createServiceClients();
72
 
3096 mandeep.dh 73
            if (email != null && !email.isEmpty()) {
74
                user = userContextServiceClient.getUserByEmail(email);
3090 mandeep.dh 75
            }
3096 mandeep.dh 76
            else if (mobileNumber != null && !mobileNumber.isEmpty()) {
77
                user = userContextServiceClient.getUserByMobileNumber(Long.parseLong(mobileNumber));
2724 vikas 78
            }
3096 mandeep.dh 79
            else if (orderId != 0) {
80
                Order order = transactionServiceClient.getOrder(orderId);
81
                user = userContextServiceClient.getUserById(order.getCustomer_id());
2724 vikas 82
            }
3096 mandeep.dh 83
            else if (ticketId != null && !ticketId.isEmpty()) {
84
                Ticket ticket = crmServiceClient.getTicket(Long.parseLong(ticketId));
85
                user = userContextServiceClient.getUserById(ticket.getCustomerId());
86
            }
3090 mandeep.dh 87
 
88
            if (user == null || user.getUserId() <= 0) {
89
                addActionError("Invalid Input");
90
                return INPUT;
91
            }
92
 
93
            loadUserCommunicationDetails(userContextServiceClient);
94
 
95
            loadOrderDetails(transactionServiceClient);
96
 
97
            loadCartDetails(userContextServiceClient);
98
 
99
            loadTicketDetails(crmServiceClient);
100
 
101
            return INDEX;            
2724 vikas 102
        }
3090 mandeep.dh 103
        catch (Exception e) {
2724 vikas 104
            addActionError("Invalid Input");
3090 mandeep.dh 105
            log.error("Error occurred", e);
106
            return INPUT;
2724 vikas 107
        }
3090 mandeep.dh 108
    }
109
 
110
    private void loadUserCommunicationDetails(
111
            in.shop2020.model.v1.user.UserContextService.Client userContextServiceClient)
112
            throws UserCommunicationException, TException {
113
        List<UserCommunication> userCommunication = userContextServiceClient.getUserCommunicationByUser(user.getUserId());
114
        userCommunicationCount = userCommunication.size();
115
    }
116
 
117
    private void loadOrderDetails(
118
            in.shop2020.model.v1.order.TransactionService.Client transactionServiceClient)
119
            throws TransactionServiceException, TException {
120
        List<Order> allOrders = transactionServiceClient.getOrdersForCustomer(user.getUserId(), 0, (new Date()).getTime(), null);
2724 vikas 121
        orderCount = allOrders.size();
3090 mandeep.dh 122
 
2724 vikas 123
        for (Order o : allOrders) {
124
            if (o.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
125
                completedOrderCount++;
126
            }
127
            else if (failedStatusList.contains(o.getStatus())) {
128
                failedOrderCount++;
129
            }
130
            else {
131
                openOrderCount++;
132
            }
133
        }
3090 mandeep.dh 134
    }
135
 
136
    private void loadCartDetails(
137
            in.shop2020.model.v1.user.UserContextService.Client userContextServiceClient)
138
            throws UserContextException, TException {
139
        UserState userState = userContextServiceClient.getUserState(user.getUserId());
140
        lastLogin = sdf.format(new Date(userState.getLastLogin()));
141
        Cart cart = null;
142
 
2724 vikas 143
        try {
3090 mandeep.dh 144
            cart = userContextServiceClient.getCurrentCart(user.getUserId());
2724 vikas 145
            if (cart.getCouponCode() != null) {
146
                couponCode = cart.getCouponCode();
147
            }
148
            for (Line line : cart.getLines()) {
149
                cartItems += line.getQuantity();
150
            }
151
        } catch (Exception e) {
152
            log.warn("No cart assigned for this user", e);
153
        }
2674 vikas 154
    }
2724 vikas 155
 
3090 mandeep.dh 156
    private void loadTicketDetails(Client crmServiceClient) throws TException {
157
        // Fetching tickets' info
158
        ticketCount = 0;
159
        openTicketCount = 0;
160
        closedTicketCount = 0;
161
 
162
        List<Ticket> tickets = crmServiceClient.getTickets(user.getUserId());
163
        if (tickets != null) 
164
        {
165
            for (Ticket ticket : tickets) {
166
                ticketCount++;
167
                Activity activity = crmServiceClient.getLastActivity(ticket.getId());
168
 
169
                if (activity != null && !activity.getTicketStatus().equals(TicketStatus.CLOSED)) {
170
                    openTicketCount++;
171
                }
172
                else {
173
                    closedTicketCount++;
174
                }
175
            }
176
        }
177
    }
178
 
2724 vikas 179
    public void setEmail(String email) {
180
        this.email = email;
181
    }
182
 
183
    public String getEmail() {
184
        return email;
185
    }
186
 
187
    public void setOrderId(String orderId) {
3090 mandeep.dh 188
        if (orderId != null && !orderId.isEmpty()) {
2724 vikas 189
            this.orderId = Long.parseLong(orderId);
190
        }
191
    }
192
 
193
    public Long getOrderId() {
194
        return orderId;
195
    }
196
 
197
    public User getUser() {
198
        return user;
199
    }
200
 
201
    public long getOrderCount() {
202
        return orderCount;
203
    }
204
 
205
    public long getCompletedOrderCount() {
206
        return completedOrderCount;
207
    }
208
 
209
    public long getOpenOrderCount() {
210
        return openOrderCount;
211
    }
212
 
213
    public long getFailedOrderCount() {
214
        return failedOrderCount;
215
    }
216
 
217
    public double getCartItems() {
218
        return cartItems;
219
    }
220
 
221
    public String getLastLogin() {
222
        return lastLogin;
223
    }
224
 
225
    public String getCouponCode() {
226
        return couponCode;
227
    }
2830 vikas 228
 
229
    public long getUserCommunicationCount() {
230
        return userCommunicationCount;
231
    }
3090 mandeep.dh 232
 
233
    public long getTicketCount() {
234
        return ticketCount;
235
    }
236
 
237
    public long getOpenTicketCount() {
238
        return openTicketCount;
239
    }
240
 
241
    public long getClosedTicketCount() {
242
        return closedTicketCount;
243
    }
244
 
245
    public void setMobileNumber(String mobileNumber) {
246
        this.mobileNumber = mobileNumber;
247
    }
3096 mandeep.dh 248
 
249
    public String getTicketId() {
250
        return ticketId;
251
    }
252
 
253
    public void setTicketId(String ticketId) {
254
        this.ticketId = ticketId;
255
    }
2724 vikas 256
}