Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
25822 amit.gupta 1
package com.spice.profitmandi.service;
2
 
32401 tejbeer 3
import java.time.LocalDateTime;
4
import java.util.ArrayList;
5
import java.util.Arrays;
6
import java.util.HashMap;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Map;
10
import java.util.Set;
11
import java.util.stream.Collectors;
12
 
13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
15
import org.json.JSONObject;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.beans.factory.annotation.Value;
18
import org.springframework.stereotype.Component;
19
 
25822 amit.gupta 20
import com.google.gson.Gson;
30025 amit.gupta 21
import com.spice.profitmandi.common.enumuration.MessageType;
29198 manish 22
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29927 amit.gupta 23
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25822 amit.gupta 24
import com.spice.profitmandi.common.model.SendNotificationModel;
30989 tejbeer 25
import com.spice.profitmandi.common.web.client.RestClient;
29927 amit.gupta 26
import com.spice.profitmandi.dao.entity.auth.AuthUser;
32401 tejbeer 27
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaign;
28
import com.spice.profitmandi.dao.entity.dtr.Optin;
29
import com.spice.profitmandi.dao.entity.dtr.PushNotifications;
30
import com.spice.profitmandi.dao.entity.dtr.User;
31
import com.spice.profitmandi.dao.entity.dtr.UserCampaign;
25822 amit.gupta 32
import com.spice.profitmandi.dao.entity.user.Device;
33
import com.spice.profitmandi.dao.model.SimpleCampaign;
34
import com.spice.profitmandi.dao.model.SimpleCampaignParams;
35
import com.spice.profitmandi.dao.repository.catalog.DeviceRepository;
29927 amit.gupta 36
import com.spice.profitmandi.dao.repository.cs.CsService;
32401 tejbeer 37
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
38
import com.spice.profitmandi.dao.repository.dtr.NotificationCampaignRepository;
39
import com.spice.profitmandi.dao.repository.dtr.OptinRepository;
40
import com.spice.profitmandi.dao.repository.dtr.PushNotificationRepository;
41
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
42
import com.spice.profitmandi.dao.repository.dtr.UserCampaignRepository;
43
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
29198 manish 44
import com.spice.profitmandi.service.user.RetailerService;
25822 amit.gupta 45
 
25835 amit.gupta 46
@Component
25822 amit.gupta 47
public class NotificationServiceImpl implements NotificationService {
48
 
32253 amit.gupta 49
    private static final Logger LOGGER = LogManager.getLogger(NotificationService.class);
50
    @Autowired
51
    UserCampaignRepository userCampaignRepository;
52
    @Autowired
53
    UserRepository dtrUserRepository;
54
    @Autowired
55
    UserAccountRepository userAccountRepository;
56
    @Autowired
57
    NotificationCampaignRepository notificationCampaignRepository;
58
    @Autowired
59
    DeviceRepository deviceRepository;
60
    @Autowired
61
    FofoStoreRepository fofoStoreRepository;
62
    @Autowired
63
    CsService csService;
64
    @Autowired
65
    OptinRepository optinRepository;
66
    @Autowired
67
    RetailerService retailerService;
68
    @Autowired
69
    PushNotificationRepository pushNotificationRepository;
70
    @Autowired
71
    private Gson gson;
72
    @Autowired
73
    private RestClient restClient;
74
    @Value("${prod}")
75
    private boolean isProd;
25822 amit.gupta 76
 
32253 amit.gupta 77
    @Override
78
    public void sendNotification(SendNotificationModel sendNotificationModel) throws ProfitMandiBusinessException {
29927 amit.gupta 79
 
32253 amit.gupta 80
        SimpleCampaignParams scp = new SimpleCampaignParams();
81
        scp.setMessage(sendNotificationModel.getMessage());
82
        scp.setTitle(sendNotificationModel.getTitle());
83
        scp.setImageUrl(sendNotificationModel.getImageUrl());
84
        scp.setType(sendNotificationModel.getType());
85
        scp.setUrl(sendNotificationModel.getUrl());
86
        scp.setShowImage(sendNotificationModel.getShowImage());
87
        scp.setExpireTimestamp(sendNotificationModel.getExpiresat());
88
        SimpleCampaign sc = new SimpleCampaign(scp);
89
        sc.setSimpleCampaignParams(scp);
30025 amit.gupta 90
 
32253 amit.gupta 91
        NotificationCampaign nc = new NotificationCampaign();
92
        nc.setName(sendNotificationModel.getCampaignName());
93
        nc.setImplementationType("SimpleCampaign");
94
        nc.setImplementationParams(gson.toJson(scp));
95
        nc.setMessageType(sendNotificationModel.getMessageType());
96
        nc.setDocumentId(sendNotificationModel.getDocumentId());
97
        nc.setCreatedTimestamp(LocalDateTime.now());
98
        notificationCampaignRepository.persist(nc);
25822 amit.gupta 99
 
32253 amit.gupta 100
        UserCampaign uc = null;
25822 amit.gupta 101
 
32253 amit.gupta 102
        Set<Integer> userIds = new HashSet<>();
103
        if (sendNotificationModel.getUserIds() != null && sendNotificationModel.getUserIds().size() > 0) {
104
            userIds.addAll(sendNotificationModel.getUserIds());
105
        }
29198 manish 106
 
32253 amit.gupta 107
        if (sendNotificationModel.getStateIds() != null && sendNotificationModel.getStateIds().size() > 0) {
108
            userIds.addAll(fofoStoreRepository.selectByWarehouseIds(sendNotificationModel.getStateIds()).stream()
109
                    .map(x -> x.getId()).collect(Collectors.toList()));
110
        }
29927 amit.gupta 111
 
32253 amit.gupta 112
        LOGGER.info("userIds" + userIds);
29198 manish 113
 
32253 amit.gupta 114
        for (Integer userId : userIds) {
115
            uc = new UserCampaign();
116
            uc.setCampaignId(nc.getId());
117
            uc.setUserId(userId);
118
            uc.setPushTimestamp(LocalDateTime.now());
119
            userCampaignRepository.persist(uc);
120
        }
25822 amit.gupta 121
 
32253 amit.gupta 122
        List<Device> devices = deviceRepository.selectByUserIdAndModifiedTimestamp(new ArrayList<>(userIds),
123
                LocalDateTime.now().minusMonths(3), LocalDateTime.now());
25822 amit.gupta 124
 
32253 amit.gupta 125
        LOGGER.info("devices" + devices);
126
        pushNotification(nc.getId(), devices);
30989 tejbeer 127
 
32253 amit.gupta 128
    }
25822 amit.gupta 129
 
32253 amit.gupta 130
    @Override
131
    public void sendNotificationToAll(SendNotificationModel sendNotificationModel) throws ProfitMandiBusinessException {
132
        sendNotificationModel.setUserIds(fofoStoreRepository.selectAllDtrUserIds());
133
        Set<AuthUser> authUsers = new HashSet<>(
134
                csService.getAuthUserByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM));
135
        authUsers.addAll(csService.getAuthUserByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_CATEGORY));
136
        authUsers.addAll(csService.getAuthUserByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES));
137
        List<String> emailIds = authUsers.stream().map(x -> x.getEmailId()).collect(Collectors.toList());
138
        emailIds.add("devkinandan.lal@smartdukaan.com");
139
        List<User> systemUsers = dtrUserRepository.selectAllByEmailIds(emailIds);
140
        sendNotificationModel.getUserIds()
141
                .addAll(systemUsers.stream().map(x -> x.getId()).collect(Collectors.toList()));
142
        this.sendNotification(sendNotificationModel);
143
    }
25822 amit.gupta 144
 
32253 amit.gupta 145
    @Override
146
    public void sendNotification(int fofoId, String campaignName, MessageType messageType, String title, String message)
147
            throws ProfitMandiBusinessException {
148
        SendNotificationModel sendNotificationModel = this.getDefaultNotificationModel();
149
        sendNotificationModel.setCampaignName(campaignName);
150
        sendNotificationModel.setMessageType(messageType);
151
        sendNotificationModel.setTitle(title);
152
        sendNotificationModel.setMessage(message);
153
        int userId = userAccountRepository.selectUserIdByRetailerId(fofoId);
154
        sendNotificationModel.setUserIds(Arrays.asList(userId));
155
        sendNotificationModel.setMessageType(MessageType.wallet);
156
        this.sendNotification(sendNotificationModel);
157
    }
25822 amit.gupta 158
 
32253 amit.gupta 159
    public SendNotificationModel getDefaultNotificationModel() {
160
        SendNotificationModel sendNotificationModel = new SendNotificationModel();
161
        sendNotificationModel.setType("url");
162
        sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
163
        sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
164
        sendNotificationModel.setMessageType(MessageType.notification);
165
        return sendNotificationModel;
166
    }
25822 amit.gupta 167
 
32253 amit.gupta 168
    public void pushNotification(int cid, List<Device> devices) {
29198 manish 169
 
32253 amit.gupta 170
        for (Device device : devices) {
171
            PushNotifications pn = new PushNotifications();
172
            pn.setNotificationCampaignid(cid);
173
            pn.setDeviceId(device.getId());
174
            pn.setUserId(device.getUser_id());
175
            pushNotificationRepository.persist(pn);
176
        }
29198 manish 177
 
32253 amit.gupta 178
    }
29198 manish 179
 
32253 amit.gupta 180
    @Override
181
    public void sendNotification(int fofoId, String campaignName, MessageType messageType, String title, String message,
182
                                 String url) throws ProfitMandiBusinessException {
183
        SendNotificationModel sendNotificationModel = this.getDefaultNotificationModel();
184
        sendNotificationModel.setCampaignName(campaignName);
185
        sendNotificationModel.setMessageType(messageType);
186
        sendNotificationModel.setTitle(title);
187
        sendNotificationModel.setMessage(message);
188
        int userId = userAccountRepository.selectUserIdByRetailerId(fofoId);
189
        sendNotificationModel.setUserIds(Arrays.asList(userId));
190
        sendNotificationModel.setMessageType(messageType);
191
        sendNotificationModel.setUrl(url);
192
        this.sendNotification(sendNotificationModel);
193
    }
29198 manish 194
 
32253 amit.gupta 195
    @Override
196
    public void sendWhatsappMessage(String message, String title, String mobile)
197
            throws Exception {
198
        this.sendWhatsappMessage(message, title, mobile, null, null);
199
    }
25822 amit.gupta 200
 
32253 amit.gupta 201
    @Override
202
    public void sendWhatsappMediaMessage(String message, String mobile, String mediaUrl, String fileName)
203
            throws Exception {
204
        this.sendWhatsappMessage(message, null, mobile, mediaUrl, fileName);
205
    }
25822 amit.gupta 206
 
32253 amit.gupta 207
    @Override
208
    public void optIn(String phoneNumber) throws Exception {
209
        Map<String, String> requestheaders = new HashMap<>();
210
        requestheaders.put("Content-Type", "application/x-www-form-urlencoded");
211
        Map<String, String> requestParams = new HashMap<>();
212
        requestParams.put("userid", String.valueOf(2000215976));
213
        requestParams.put("password", "MFRd!BBL");
214
        requestParams.put("phone_number", phoneNumber);
215
        requestParams.put("auth_scheme", "plain");
216
        requestParams.put("v", "1.1");
217
        requestParams.put("format", "json");
28400 tejbeer 218
 
32253 amit.gupta 219
        requestParams.put("method", "OPT_IN");
25822 amit.gupta 220
 
32253 amit.gupta 221
        requestParams.put("channel", "WHATSAPP");
222
        String response = restClient.get("https://media.smsgupshup.com/GatewayAPI/rest", requestParams, requestheaders);
223
        LOGGER.info("response" + response);
224
    }
29927 amit.gupta 225
 
32253 amit.gupta 226
    private void sendWhatsappMessage(String message, String title, String mobile, String mediaUrl, String fileName)
227
            throws Exception {
32260 amit.gupta 228
        String sendTo = null;
32259 amit.gupta 229
        if (mobile.length() != 10) {
230
            return;
231
        } else {
32260 amit.gupta 232
            sendTo = 91 + mobile;
32259 amit.gupta 233
        }
32253 amit.gupta 234
        Map<String, String> requestheaders = new HashMap<>();
235
        requestheaders.put("Content-Type", "application/x-www-form-urlencoded");
236
        Map<String, String> requestParams = new HashMap<>();
237
        requestParams.put("userid", String.valueOf(2000215976));
238
        requestParams.put("password", "MFRd!BBL");
32285 amit.gupta 239
        requestParams.put("send_to", sendTo);
32253 amit.gupta 240
        requestParams.put("v", "1.1");
241
        requestParams.put("format", "json");
242
        requestParams.put("auth_scheme", "plain");
243
        if (mediaUrl == null) {
32268 amit.gupta 244
        requestParams.put("method", "SENDMESSAGE");
32253 amit.gupta 245
            /*requestParams.put("msg_type", "HSM");
246
            requestParams.put("msg", message);
247
            requestParams.put("isTemplate", "true");
248
            requestParams.put("header", title);*/
249
            //} else if(isProd && mediaUrl !=null) {
250
        } else if (mediaUrl != null) {
251
            //requestParams.put("isHSM", "true");
32286 amit.gupta 252
 
253
            Optin optin = optinRepository.selectByMobile(mobile);
254
            if (optin == null) {
255
                this.optIn(sendTo);
256
                optin = new Optin();
257
                optin.setCreated(LocalDateTime.now());
258
                optin.setMobile(mobile);
259
                optinRepository.persist(optin);
260
            }
261
 
32268 amit.gupta 262
            requestParams.put("method", "SENDMEDIAMESSAGE");
32253 amit.gupta 263
            requestParams.put("msg_type", "DOCUMENT");
264
            requestParams.put("caption", message);
32268 amit.gupta 265
            //requestParams.put("msg", message);
32253 amit.gupta 266
            requestParams.put("media_url", mediaUrl);
267
            requestParams.put("filename", fileName);
32255 amit.gupta 268
            String response =
269
                    restClient.post("https://media.smsgupshup.com/GatewayAPI/rest",
270
                            requestParams,
271
                            requestheaders);
272
            LOGGER.info("response" + response);
32401 tejbeer 273
 
274
            JSONObject jsonObject = new JSONObject(response);
275
 
276
            LOGGER.info("jsonObject" + jsonObject);
32253 amit.gupta 277
        }
30025 amit.gupta 278
 
32253 amit.gupta 279
    }
30025 amit.gupta 280
 
28397 tejbeer 281
 
25822 amit.gupta 282
}