Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23755 amit.gupta 1
package com.smartdukaan.cron;
23723 amit.gupta 2
 
32782 raveendra. 3
import com.smartdukaan.cron.migrations.RunOnceTasks;
37613 amit 4
import com.smartdukaan.cron.migrations.InternalGrnTask;
37825 amit 5
import com.smartdukaan.cron.migrations.MovementBillingTask;
32782 raveendra. 6
import com.smartdukaan.cron.scheduled.*;
7
import com.smartdukaan.cron.scheduled.b2b.Listing;
36745 ranu 8
import com.smartdukaan.cron.scheduled.beatmiss.BeatMissDetectorRunner;
32782 raveendra. 9
import com.smartdukaan.cron.scheduled.leadsync.LeadSyncRunner;
32831 amit.gupta 10
import com.smartdukaan.cron.scheduled.ordertracking.OrderTrackingService;
33274 amit.gupta 11
import com.smartdukaan.cron.scheduled.purchaseorder.POScheduler;
34860 ranu 12
import com.smartdukaan.cron.scheduled.razorpay.FetchPartnersDisbursementTask;
36058 ranu 13
import com.smartdukaan.cron.scheduled.knowlarity.KnowlarityCallMonitorScheduler;
14
import com.spice.profitmandi.common.model.InvoicePdfModel;
34443 vikas.jang 15
import com.spice.profitmandi.common.model.ProfitMandiConstants;
32782 raveendra. 16
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
17
import com.spice.profitmandi.dao.repository.cs.CsService;
18
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
36035 amit 19
import com.spice.profitmandi.dao.service.shopify.ShopifyProductSyncService;
32782 raveendra. 20
import com.spice.profitmandi.dao.util.ContentPojoPopulator;
37499 ranu 21
import com.spice.profitmandi.service.NotificationService;
22
import com.spice.profitmandi.service.integrations.icicilombard.IciciLombardService;
23
import com.spice.profitmandi.service.integrations.icicilombard.model.LastTransactionsResponseModel;
32782 raveendra. 24
import com.spice.profitmandi.service.integrations.samsung.upgradeoffer.UpgradeOfferService;
36063 ranu 25
import com.spice.profitmandi.service.mail.MailOutboxService;
23723 amit.gupta 26
import org.apache.logging.log4j.LogManager;
27
import org.apache.logging.log4j.Logger;
28389 amit.gupta 28
import org.apache.velocity.app.VelocityEngine;
29
import org.apache.velocity.exception.VelocityException;
23898 amit.gupta 30
import org.springframework.beans.factory.annotation.Autowired;
31
import org.springframework.boot.ApplicationArguments;
32
import org.springframework.boot.ApplicationRunner;
23723 amit.gupta 33
import org.springframework.boot.WebApplicationType;
34
import org.springframework.boot.autoconfigure.SpringBootApplication;
35
import org.springframework.boot.builder.SpringApplicationBuilder;
36
import org.springframework.context.annotation.Bean;
37
import org.springframework.context.annotation.ComponentScan;
37631 amit 38
import org.springframework.context.annotation.Lazy;
34554 tejus.loha 39
import org.springframework.context.annotation.EnableAspectJAutoProxy;
23935 amit.gupta 40
import org.springframework.context.annotation.Primary;
23723 amit.gupta 41
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
42
import org.springframework.core.io.ClassPathResource;
35393 amit 43
import org.springframework.core.io.Resource;
23906 amit.gupta 44
import org.springframework.mail.javamail.JavaMailSender;
37453 amit 45
import com.spice.profitmandi.common.services.AuthenticatedIdentityMailSender;
37631 amit 46
import com.spice.profitmandi.common.services.MailRecipientFilter;
47
import com.spice.profitmandi.common.services.RecipientFilteringMailSender;
23906 amit.gupta 48
import org.springframework.mail.javamail.JavaMailSenderImpl;
28389 amit.gupta 49
import org.springframework.ui.velocity.VelocityEngineFactoryBean;
23723 amit.gupta 50
 
32782 raveendra. 51
import java.io.FileInputStream;
52
import java.io.IOException;
53
import java.time.LocalDate;
37058 amit 54
import java.time.LocalDateTime;
32782 raveendra. 55
import java.time.YearMonth;
56
import java.util.ArrayList;
57
import java.util.Arrays;
58
import java.util.List;
59
import java.util.Properties;
60
import java.util.stream.Collectors;
23724 amit.gupta 61
 
23723 amit.gupta 62
@SpringBootApplication
34554 tejus.loha 63
@EnableAspectJAutoProxy
23755 amit.gupta 64
@ComponentScan("com.smartdukaan.cron.*, com.spice.profitmandi.common.*")
24122 govind 65
public class Application implements ApplicationRunner {
66
 
31753 tejbeer 67
    private static final Logger LOGGER = LogManager.getLogger(Application.class);
24122 govind 68
 
31753 tejbeer 69
    @Autowired
70
    LeadSyncRunner leadSyncRunner;
30120 amit.gupta 71
 
31753 tejbeer 72
    @Autowired
73
    StandAlone standAlone;
30209 amit.gupta 74
 
31753 tejbeer 75
    @Autowired
76
    UpgradeOfferService upgradeOfferService;
27392 amit.gupta 77
 
31753 tejbeer 78
    @Autowired
79
    private TicketRelatedScheduledTask ticketRelatedScheduledTask;
28368 tejbeer 80
 
31753 tejbeer 81
    @Autowired
82
    private OnBoardingRelatedSchelduleTask onBoardingRelatedSchelduleTask;
28921 tejbeer 83
 
31753 tejbeer 84
    @Autowired
85
    private InvestmentRelatedTasks investmentRelatedTasks;
27392 amit.gupta 86
 
31753 tejbeer 87
    @Autowired
88
    private CsService csService;
29814 tejbeer 89
 
31753 tejbeer 90
    @Autowired
91
    private FofoOrderItemRepository fofoOrderItemRepository;
24603 amit.gupta 92
 
31753 tejbeer 93
    @Autowired
94
    private ContentPojoPopulator contentPojoPopulator;
29361 tejbeer 95
 
31753 tejbeer 96
    @Autowired
97
    private Listing listing;
24122 govind 98
 
32831 amit.gupta 99
    @Autowired
100
    OrderTrackingService orderTrackingService;
101
 
36306 amit 102
    @Autowired
103
    BatchScheduledTasks batchScheduledTasks;
104
 
36745 ranu 105
    @Autowired
106
    private BeatMissDetectorRunner beatMissDetectorRunner;
107
 
37499 ranu 108
    @Autowired
109
    private IciciLombardService iciciLombardService;
110
 
31753 tejbeer 111
    public static void main(String[] args) throws Throwable {
112
        try {
35803 amit 113
            WebApplicationType webType = WebApplicationType.SERVLET;
114
            for (String arg : args) {
115
                if (arg.contains("spring.main.web-application-type=none")) {
116
                    webType = WebApplicationType.NONE;
117
                    break;
118
                }
119
            }
120
            new SpringApplicationBuilder(Application.class)
121
                    .web(webType)
122
                    .run(args);
31753 tejbeer 123
        } catch (Throwable t) {
124
            t.printStackTrace();
125
        }
126
    }
28389 amit.gupta 127
 
31753 tejbeer 128
    @Bean
129
    public static PropertySourcesPlaceholderConfigurer propertyConfigurer1() {
130
        LOGGER.info("Called Configuration");
131
        PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
35393 amit 132
 
35832 amit 133
        String activeProfile;
134
        Properties properties = new Properties();
135
        try {
136
            properties.load(Application.class.getClassLoader().getResourceAsStream("META-INF/env.property"));
137
        } catch (IOException e) {
138
            LOGGER.error("Error reading env.property, defaulting to dev: " + e);
139
            properties.put("profile", "dev");
140
        }
141
        activeProfile = (String) properties.get("profile");
35393 amit 142
 
35832 amit 143
        Resource appResource;
144
        Resource sharedResource;
145
 
146
        if ("prod".equals(activeProfile)) {
147
            appResource = new ClassPathResource("/META-INF/prod.properties");
148
            sharedResource = new ClassPathResource("/shared-prod.properties");
149
        } else if ("staging".equals(activeProfile)) {
150
            appResource = new ClassPathResource("/META-INF/staging.properties");
151
            sharedResource = new ClassPathResource("/shared-staging.properties");
152
        } else {
153
            appResource = new ClassPathResource("/META-INF/dev.properties");
154
            sharedResource = new ClassPathResource("/shared-dev.properties");
155
        }
156
 
157
        LOGGER.info("Cron loading profile: " + activeProfile);
158
        propertySourcesPlaceholderConfigurer.setLocations(sharedResource, appResource);
35393 amit 159
        propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound(true);
160
 
31753 tejbeer 161
        return propertySourcesPlaceholderConfigurer;
162
    }
28389 amit.gupta 163
 
31753 tejbeer 164
    @Bean(name = "veloctyEngine")
165
    public VelocityEngine velocityEngine() throws VelocityException, IOException {
166
        VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
28389 amit.gupta 167
 
31753 tejbeer 168
        Properties velocityProperties = new Properties();
169
        velocityProperties.put("resource.loader", "class");
170
        velocityProperties.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
171
        velocityProperties.put("file.resource.loader.cache", true);
172
        velocityProperties.put("file.resource.loader.unicode", true);
173
        velocityProperties.put("input.encoding", "UTF-8");
174
        velocityProperties.put("output.encoding", "UTF-8");
175
        velocityProperties.put("response.encoding", "UTF-8");
176
        velocityProperties.put("overrideLogging", true);
28389 amit.gupta 177
 
31753 tejbeer 178
        // velocityProperties.put("file.resource.loader.path", ".");
28389 amit.gupta 179
 
31753 tejbeer 180
        factory.setVelocityProperties(velocityProperties);
28389 amit.gupta 181
 
31753 tejbeer 182
        return factory.createVelocityEngine();
23723 amit.gupta 183
 
31753 tejbeer 184
    }
24122 govind 185
 
37474 amit 186
    /**
187
     * The default sender. Authenticates as sdtech@smartdukaan.com and rewrites
188
     * every From to that identity — Workspace binds an authenticated session to
189
     * one address and rejects any other with
190
     * "535 Authorization failed: Authenticated user is not authorized to send mail".
191
     *
192
     * Also answers to "mailSender" so the many unqualified JavaMailSender
193
     * injections resolve here rather than needing to be touched.
194
     */
37479 amit 195
    @Bean(name = "googleMailSender")
37631 amit 196
    public JavaMailSender googleMailSender(@Lazy MailRecipientFilter mailRecipientFilter) {
197
        AuthenticatedIdentityMailSender mailSender = new AuthenticatedIdentityMailSender();
198
        mailSender.setRecipientFilter(mailRecipientFilter);
34612 ranu 199
        mailSender.setHost("smtp.gmail.com");
200
        mailSender.setPort(465);
201
        mailSender.setUsername("sdtech@smartdukaan.com");
37369 amit 202
        mailSender.setPassword("wbdwyqrcgosrkwdn"); // App Password
34612 ranu 203
 
204
        Properties props = mailSender.getJavaMailProperties();
205
        props.put("mail.smtp.auth", "true");
206
        props.put("mail.smtp.ssl.enable", "true");
207
        props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
208
        props.put("mail.smtp.socketFactory.port", "465");
209
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
37368 amit 210
        props.put("mail.smtp.connectiontimeout", "30000");
211
        props.put("mail.smtp.timeout", "120000");
212
        props.put("mail.smtp.writetimeout", "120000");
34612 ranu 213
 
214
        return mailSender;
215
    }
216
 
37479 amit 217
    /**
218
     * The default sender.
219
     *
220
     * Verified working 2026-08-31: MAIL FROM:<noreply@smartdukaan.com> returns 250
221
     * over IPv4. It does not authenticate -- Workspace authorises it by allowlisted
222
     * source IP -- so it may legitimately send as noreply@.
223
     *
37480 amit 224
     * googleMailSender is the alternative and its credentials are valid -- verified
225
     * 2026-08-31, AUTH OK on both 465 and 587. Use it by qualifier where a message
226
     * must come from the authenticated identity rather than noreply@.
37479 amit 227
     *
37480 amit 228
     * SMTP on this host works over IPv4 only, and that is not specific to the relay:
229
     * over IPv6 the relay answers "550 5.7.1 Invalid credentials for relay" and
230
     * smtp.gmail.com rejects a valid app password with "535 5.7.8 Username and
231
     * Password not accepted". The JVM prefers IPv4, which is the only reason mail
232
     * leaves this box at all. Anything that prefers IPv6 will fail on both paths.
37479 amit 233
     */
234
    @Bean(name = {"gmailRelaySender", "mailSender"})
235
    @Primary
37631 amit 236
    public JavaMailSender getGmailRelaySender(@Lazy MailRecipientFilter mailRecipientFilter) {
237
        RecipientFilteringMailSender mailSender = new RecipientFilteringMailSender();
238
        mailSender.setRecipientFilter(mailRecipientFilter);
36248 amit 239
        mailSender.setHost("smtp-relay.gmail.com");
240
        mailSender.setPort(587);
241
 
242
        Properties props = mailSender.getJavaMailProperties();
243
        props.put("mail.smtp.starttls.enable", "true");
244
        props.put("mail.smtp.auth", "false");
245
        props.put("mail.smtp.localhost", "smartdukaan.com");
246
        props.put("mail.smtp.ssl.protocols", "TLSv1.2");
247
        props.put("mail.smtp.ssl.trust", "smtp-relay.gmail.com");
248
        props.put("mail.transport.protocol", "smtp");
37368 amit 249
        props.put("mail.smtp.connectiontimeout", "30000");
250
        props.put("mail.smtp.timeout", "120000");
251
        props.put("mail.smtp.writetimeout", "120000");
36248 amit 252
 
253
        return mailSender;
254
    }
255
 
31753 tejbeer 256
    @Autowired
257
    private RunOnceTasks runOnceTasks;
24122 govind 258
 
31753 tejbeer 259
    @Autowired
37613 amit 260
    private InternalGrnTask internalGrnTask;
261
 
262
    @Autowired
37825 amit 263
    private MovementBillingTask movementBillingTask;
264
 
265
    @Autowired
31753 tejbeer 266
    private ScheduledTasks scheduledTasks;
30335 amit.gupta 267
 
31753 tejbeer 268
    @Autowired
34306 ranu 269
    private ScheduledTasksTest scheduledTasksTest;
270
 
271
    @Autowired
34860 ranu 272
    private FetchPartnersDisbursementTask fetchPartnersDisbursementTask;
273
 
274
    @Autowired
31753 tejbeer 275
    private Reconciliation reconciliation;
30309 amit.gupta 276
 
31753 tejbeer 277
    @Autowired
36511 amit 278
    private WarehouseStockReconciliation warehouseStockReconciliation;
279
 
280
    @Autowired
37159 amit 281
    private PartnerIdentityIntegrityMonitor partnerIdentityIntegrityMonitor;
282
 
283
    @Autowired
35250 amit 284
    private Migrations migrations;
285
 
286
    @Autowired
31753 tejbeer 287
    CaptchaService captchaService;
28921 tejbeer 288
 
33274 amit.gupta 289
    @Autowired
290
    POScheduler poScheduler;
32878 amit.gupta 291
 
35929 vikas 292
    @Autowired
293
    ShopifyProductSyncService shopifyProductSyncService;
33274 amit.gupta 294
 
36058 ranu 295
    @Autowired
296
    KnowlarityCallMonitorScheduler knowlarityCallMonitorScheduler;
35929 vikas 297
 
36063 ranu 298
    @Autowired
299
    MailOutboxService mailOutboxService;
300
 
37499 ranu 301
    @Autowired
302
    NotificationService notificationService;
303
 
31753 tejbeer 304
    @Override
305
    public void run(ApplicationArguments args) throws Exception {
32008 amit.gupta 306
        //scheduledTasks.test();
307
        //System.exit();
31753 tejbeer 308
        LOGGER.info("Called run method");
36058 ranu 309
 
310
        // Knowlarity Call Monitor - Manual trigger (if 10 AM scheduled start was missed)
311
        // This just starts the monitor; scheduled healthCheck and stopMonitoring will still work
312
        if (args.containsOption("startKnowlarityMonitor")) {
313
            LOGGER.info("Starting Knowlarity Call Monitor manually...");
314
            knowlarityCallMonitorScheduler.startMonitoring();
315
            LOGGER.info("Knowlarity Call Monitor started. Scheduled tasks will handle health checks and 10 PM stop.");
316
            // No sleep needed - Spring scheduler keeps app running and handles 10 PM stop
317
        }
36545 ranu 318
        if (args.containsOption("trackingReport")) {
319
            runOnceTasks.dailyTrackingReport();
320
        }
37751 ranu 321
        if (args.containsOption("poStockApprovalDailyDigest")) {
37686 ranu 322
            runOnceTasks.poStockApprovalDailyDigest();
37751 ranu 323
            System.exit(0);
324
        }
37686 ranu 325
        // --rbmRankingForMonth [--month=YYYY-MM]
326
        // Read-only probe: prints the composite RBM ranking for the given month
327
        // (default: previous month) to log. No email, no DB writes.
328
        if (args.containsOption("rbmRankingForMonth")) {
329
            java.time.YearMonth month = java.time.YearMonth.now().minusMonths(1);
330
            if (args.containsOption("month")) {
331
                try {
332
                    month = java.time.YearMonth.parse(args.getOptionValues("month").get(0));
333
                } catch (Exception e) {
334
                    LOGGER.error("Invalid --month value; expected YYYY-MM: {}", e.getMessage());
335
                    System.exit(1);
336
                }
337
            }
338
            runOnceTasks.printRbmRankingForMonth(month);
339
            System.exit(0);
340
        }
36058 ranu 341
        if (args.containsOption("stopKnowlarityMonitor")) {
342
            LOGGER.info("Stopping Knowlarity Call Monitor...");
343
            knowlarityCallMonitorScheduler.stopMonitoring();
344
        }
36115 ranu 345
        // Knowlarity - Request fresh snapshot manually (when status not updating)
346
        if (args.containsOption("refreshKnowlaritySnapshot")) {
347
            LOGGER.info("Requesting Knowlarity snapshot manually...");
348
            knowlarityCallMonitorScheduler.healthCheck();
349
            LOGGER.info("Knowlarity snapshot requested.");
350
            System.exit(0);
351
        }
36058 ranu 352
 
33260 amit.gupta 353
        if (args.containsOption("removePartialBillingForTransaction")) {
354
            if (args.containsOption("trId")) {
33051 amit.gupta 355
                int transactionId = Integer.parseInt(args.getOptionValues("trId").get(0));
33054 amit.gupta 356
                scheduledTasks.removePartialBillingForTransaction(transactionId);
33051 amit.gupta 357
            }
358
            System.exit(0);
359
        }
34523 ranu 360
        if (args.containsOption("createOpeningStockPartyWise")) {
361
            scheduledTasks.createOpeningStockPartyWise();
362
            System.exit(0);
363
        }
29814 tejbeer 364
 
31753 tejbeer 365
        if (args.containsOption("rw")) {
366
            System.out.println("Reverse wallet");
367
            scheduledTasks.reverseWallet();
368
            System.exit(0);
369
        }
370
        if (args.containsOption("sendIndentTertiary")) {
371
            System.out.println("sendIndentTertiary");
372
            scheduledTasks.sendIndentTertiary();
373
            System.exit(0);
374
        }
375
        if (args.containsOption("checkPartnerActiveStore")) {
376
            System.out.println("checkPartnerActiveStore");
377
            scheduledTasks.checkPartnerActiveStore();
378
            System.exit(0);
379
        }
37172 amit 380
        if (args.containsOption("updatePjpAgendaInstances")) {
381
            System.out.println("updatePjpAgendaInstances");
382
            scheduledTasks.updatePjpAgendaInstances();
383
            System.exit(0);
384
        }
37040 ranu 385
        if (args.containsOption("updatePartnerActivationTypeByMonthlySale")) {
386
            System.out.println("updatePartnerActivationTypeByMonthlySale");
387
            scheduledTasks.updatePartnerActivationTypeByMonthlySale();
388
            System.exit(0);
389
        }
29800 manish 390
 
31753 tejbeer 391
        if (args.containsOption("selectFinServiceFollowUpDateByCurrDate")) {
392
            System.out.println("selectfinServiceFollowUpDateByCurrDate");
28368 tejbeer 393
 
31753 tejbeer 394
            scheduledTasks.selectFinServiceFollowUpDateByCurrDate(LocalDate.now());
395
            System.exit(0);
396
        }
25073 amit.gupta 397
 
31753 tejbeer 398
        if (args.containsOption("addHdfcPayment")) {
399
            runOnceTasks.addPayment();
400
            System.exit(0);
401
        }
35250 amit 402
        if (args.containsOption("migrateOriginalInventoryItemId")) {
403
            int batchSize = 10_000;
404
            if (args.containsOption("batchSize")) {
405
                try {
406
                    batchSize = Integer.parseInt(args.getOptionValues("batchSize").get(0));
407
                } catch (Exception e) {
408
                    LOGGER.warn("Invalid batchSize provided, defaulting to {}", batchSize);
409
                }
410
            }
411
            LOGGER.info("Starting migration for warehouse.inventoryItem.originalInventoryItemId with batchSize={}", batchSize);
37602 amit 412
            migrations.migrateWarehouseOriginalInventoryItemId(batchSize);
35250 amit 413
            LOGGER.info("Migration completed.");
414
            System.exit(0);
415
        }
37825 amit 416
        if (args.containsOption("autoBillMovement")) {
417
            if (!args.containsOption("pos") || !args.containsOption("email") || !args.containsOption("provider")) {
418
                LOGGER.error("autoBillMovement needs --pos=PO1,PO2, --email=<operator> and --provider=<logistics"
419
                        + " provider id>; add --live to bill (default is a dry run)");
420
                System.exit(1);
421
            }
422
            List<String> poNumbers = new ArrayList<>();
423
            for (String value : args.getOptionValues("pos")) {
424
                for (String poNumber : value.split(",")) {
425
                    if (!poNumber.trim().isEmpty()) {
426
                        poNumbers.add(poNumber.trim());
427
                    }
428
                }
429
            }
430
            movementBillingTask.billMovements(poNumbers, args.getOptionValues("email").get(0),
431
                    Integer.parseInt(args.getOptionValues("provider").get(0)), args.containsOption("live"));
432
            System.exit(0);
433
        }
37613 amit 434
        if (args.containsOption("autoGrnInternal")) {
435
            if (!args.containsOption("invoices") || !args.containsOption("email")) {
436
                LOGGER.error("autoGrnInternal needs --invoices=A,B and --email=<operator>");
437
                System.exit(1);
438
            }
439
            List<String> invoiceNumbers = new ArrayList<>();
440
            for (String value : args.getOptionValues("invoices")) {
441
                for (String invoiceNumber : value.split(",")) {
442
                    if (!invoiceNumber.trim().isEmpty()) {
443
                        invoiceNumbers.add(invoiceNumber.trim());
444
                    }
445
                }
446
            }
447
            String operatorEmail = args.getOptionValues("email").get(0);
448
            boolean dryRun = args.containsOption("dryRun");
449
            internalGrnTask.grnInternalInvoices(invoiceNumbers, operatorEmail, dryRun);
450
            System.exit(0);
451
        }
37617 amit 452
        if (args.containsOption("reverseGrnInternal")) {
453
            if (!args.containsOption("invoices")) {
454
                LOGGER.error("reverseGrnInternal needs --invoices=A,B");
455
                System.exit(1);
456
            }
457
            List<String> invoiceNumbers = new ArrayList<>();
458
            for (String value : args.getOptionValues("invoices")) {
459
                for (String invoiceNumber : value.split(",")) {
460
                    if (!invoiceNumber.trim().isEmpty()) {
461
                        invoiceNumbers.add(invoiceNumber.trim());
462
                    }
463
                }
464
            }
465
            internalGrnTask.reverseInternalInvoices(invoiceNumbers, args.containsOption("dryRun"));
466
            System.exit(0);
467
        }
31753 tejbeer 468
        if (args.containsOption("processSchemeOut")) {
469
            System.out.println("Process schemeOut");
470
            int orderId = Integer.parseInt(args.getOptionValues("orderid").get(0));
471
            int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
472
            runOnceTasks.processSchemeOut(fofoId, orderId);
473
            System.exit(0);
474
        }
475
        if (args.containsOption("at")) {
476
            ticketRelatedScheduledTask.alertforTicket();
477
            System.exit(0);
478
        }
479
        if (args.containsOption("et")) {
480
            ticketRelatedScheduledTask.escalateTicket();
481
            ;
482
            System.exit(0);
483
        }
37499 ranu 484
        if (args.containsOption("iciciBalance")) {
485
            System.out.println("Fetching ICICI CD balance manually");
486
            try {
487
                LastTransactionsResponseModel response = iciciLombardService.getLastTwentyFiveTransactions(null);
488
                System.out.println("Response: " + response);
489
                if (response != null
490
                        && response.getTransactionsDetails() != null
491
                        && !response.getTransactionsDetails().isEmpty()) {
492
                    LastTransactionsResponseModel.TransactionDetail latest = response.getTransactionsDetails().get(0);
493
                    System.out.println("Current available balance = " + latest.getAvailableBalance()
494
                            + " (as of " + latest.getEffectiveDate() + " — status: " + latest.getStatus() + ")");
495
                    System.out.println("Last 25 transactions:");
496
                    response.getTransactionsDetails().forEach(t -> System.out.println("  " + t));
497
                }
498
            } catch (Exception e) {
499
                e.printStackTrace();
500
            }
501
            System.exit(0);
502
        }
31753 tejbeer 503
        if (args.containsOption("sr")) {
504
            List<String> schemeIds = args.getOptionValues("schemeId");
505
            System.out.println(schemeIds);
506
            scheduledTasks.schemeRollback(schemeIds);
507
            System.exit(0);
508
        }
509
        if (args.containsOption("processActivation")) {
510
            scheduledTasks.processActivation();
511
            System.exit(0);
512
        }
25721 tejbeer 513
 
31753 tejbeer 514
        if (args.containsOption("checkRazorPayPaymentStatus")) {
515
            scheduledTasks.checkRazorPayPaymentStatus();
516
            System.exit(0);
517
        }
518
        if (args.containsOption("grouping")) {
519
            scheduledTasks.grouping();
520
            System.exit(0);
521
        }
522
        if (args.containsOption("fixWallet")) {
523
            runOnceTasks.fixWallet();
524
            System.exit(0);
525
        }
36511 amit 526
        if (args.containsOption("reconcileInventorySnapshot")) {
527
            warehouseStockReconciliation.reconcile();
528
            System.exit(0);
529
        }
37159 amit 530
        if (args.containsOption("partnerIdentityIntegrityMonitor")) {
531
            partnerIdentityIntegrityMonitor.monitor();
532
            System.exit(0);
533
        }
31753 tejbeer 534
        if (args.containsOption("reconcileExpiredFixedSchemes")) {
535
            reconciliation.reconcileExpiredFixedSchemes();
536
            System.exit(0);
537
        }
538
        if (args.containsOption("dailyReconciliation")) {
539
            if (args.containsOption("date")) {
540
                LocalDate date = LocalDate.parse(args.getOptionValues("date").get(0));
541
                reconciliation.dailyReconciliation(date);
542
            } else {
543
                reconciliation.dailyReconciliation(LocalDate.now().minusDays(1));
544
            }
545
            System.exit(0);
546
        }
547
        /*
548
         * if (args.containsOption("test")) { schemeService.processSchemeIn(9243,
549
         * 175138102); throw new Exception(); }
550
         */
28921 tejbeer 551
 
31753 tejbeer 552
        if (args.containsOption("sendNotification")) {
553
            scheduledTasks.sendNotification();
554
            System.exit(0);
555
        }
26291 tejbeer 556
 
36063 ranu 557
        if (args.containsOption("processPendingMails")) {
558
            System.out.println("Processing pending mails...");
559
            mailOutboxService.processPendingMails();
560
            System.exit(0);
561
        }
562
 
37499 ranu 563
        // Dispatch any notification_schedule rows whose scheduled_timestamp <= now.
564
        // Same code path as the hourly cron in NotificationDispatchScheduler, but callable
565
        // on demand from dev / staging where the isProd gate normally blocks the cron.
566
        // Usage: --dispatchScheduledNotifications [--batch=200]
37510 ranu 567
        if (args.containsOption("dispatchScheduledNotifications")) {
37499 ranu 568
            int batch = 200;
569
            if (args.containsOption("batch")) {
570
                try { batch = Integer.parseInt(args.getOptionValues("batch").get(0)); }
571
                catch (Exception ignored) { }
572
            }
573
            System.out.println("Dispatching due scheduled notifications (batch=" + batch + ")...");
574
            int attempted = notificationService.dispatchDueScheduled(batch);
575
            System.out.println("Attempted: " + attempted + " row(s)");
576
            System.exit(0);
37510 ranu 577
        }
37499 ranu 578
 
31753 tejbeer 579
        if (args.containsOption("ticketClosed")) {
35568 amit 580
            // Redirected to TicketRelatedScheduledTask which handles auto-close as part of escalateTicket
581
            ticketRelatedScheduledTask.escalateTicket();
31753 tejbeer 582
            System.exit(0);
583
        }
28207 tejbeer 584
 
31753 tejbeer 585
        if (args.containsOption("getVendorWarehouses")) {
586
            int warehouseId = Integer.parseInt(args.getOptionValues("warehouseId").get(0));
587
            scheduledTasks.getVendorWarehouses(warehouseId);
588
            System.exit(0);
589
        }
29776 tejbeer 590
 
31753 tejbeer 591
        if (args.containsOption("checkfocusedModelInPartnerStock")) {
34344 amit.gupta 592
            try {
593
                scheduledTasks.checkfocusedModelInPartnerStock();
594
            } finally {
595
                System.exit(0);
596
            }
31753 tejbeer 597
        }
29451 manish 598
 
31753 tejbeer 599
        if (args.containsOption("checkImeiActivation")) {
600
            scheduledTasks.checkImeiActivation();
601
            System.exit(0);
602
        }
29776 tejbeer 603
 
31753 tejbeer 604
        if (args.containsOption("partnerProblemAlert")) {
605
            scheduledTasks.partnerProblemAlert();
606
            System.exit(0);
607
        }
608
        if (args.containsOption("notify")) {
609
            if (args.containsOption("fofoId")) {
610
                int fofoId = Integer.parseInt(args.getOptionValues("fofoId").get(0));
611
                scheduledTasks.sendDailySalesNotificationToPartner(fofoId);
612
            }
613
            System.exit(0);
614
        }
615
        if (args.containsOption("findMismatchesInIndent")) {
616
            runOnceTasks.findMismatchesInIndent();
617
            System.exit(0);
618
        }
29035 tejbeer 619
 
31753 tejbeer 620
        if (args.containsOption("onboardingEventDelays")) {
621
            onBoardingRelatedSchelduleTask.onboardingEventDelays();
622
            System.exit(0);
623
        }
28982 tejbeer 624
 
31753 tejbeer 625
        if (args.containsOption("onBoardingCompleteEventEmail")) {
626
            onBoardingRelatedSchelduleTask.onBoardingCompleteEventEmail();
627
            System.exit(0);
628
        }
28921 tejbeer 629
 
31753 tejbeer 630
        if (args.containsOption("onBoardingDocumentsPending")) {
631
            onBoardingRelatedSchelduleTask.onBoardingDocumentsPending();
632
            System.exit(0);
633
        }
634
        if (args.containsOption("onBoardingMigration")) {
635
            onBoardingRelatedSchelduleTask.onBoardingMigration();
636
            System.exit(0);
637
        }
28921 tejbeer 638
 
33859 tejus.loha 639
//        if (args.containsOption("advancePaymentPendingAlert")) {
640
//            onBoardingRelatedSchelduleTask.advancePaymentPendingAlert();
641
//            System.exit(0);
642
//        }
28963 tejbeer 643
 
31753 tejbeer 644
        if (args.containsOption("fullPaymentPendingAlert")) {
645
            onBoardingRelatedSchelduleTask.fullPaymentPendingAlert();
646
            System.exit(0);
647
        }
29308 tejbeer 648
 
33859 tejus.loha 649
//        if (args.containsOption("advancePaymentPendinglegalAlert")) {
650
//            onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
651
//            System.exit(0);
652
//        }
31117 tejbeer 653
 
31753 tejbeer 654
        if (args.containsOption("markDelhiveryOrderDelivered")) {
32831 amit.gupta 655
            orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 656
            System.exit(0);
657
        }
32831 amit.gupta 658
 
31753 tejbeer 659
        if (args.containsOption("markBlueDartOrderDelivered")) {
32794 raveendra. 660
            System.out.println("Marking BlueDart Order Delivered...");
32831 amit.gupta 661
            orderTrackingService.markBlueDartOrderDelivered();
31753 tejbeer 662
            System.exit(0);
663
        }
664
        if (args.containsOption("mergingdata")) {
665
            onBoardingRelatedSchelduleTask.mergingdata();
666
            System.exit(0);
667
        }
668
        if (args.containsOption("brandingAlert")) {
669
            onBoardingRelatedSchelduleTask.brandingAlert();
670
            System.exit(0);
671
        }
31089 amit.gupta 672
 
33859 tejus.loha 673
//        if (args.containsOption("storeTimelinePromoterPending")) {
674
//            onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
675
//            System.exit(0);
676
//        }
31249 tejbeer 677
 
31753 tejbeer 678
        if (args.containsOption("ppl")) {
679
            runOnceTasks.printPendingLeads();
680
            System.exit(0);
681
        }
31249 tejbeer 682
 
31753 tejbeer 683
        if (args.containsOption("notifyAll")) {
684
            scheduledTasks.sendDailySalesNotificationToPartner(null);
685
            System.exit(0);
686
        }
31249 tejbeer 687
 
31753 tejbeer 688
        if (args.containsOption("monthlyTargetForInternalTeam")) {
689
            scheduledTasks.monthlyTargetForInternalTeam();
690
            System.exit(0);
691
        }
31249 tejbeer 692
 
31753 tejbeer 693
        if (args.containsOption("monthlyTargetForPartner")) {
694
            scheduledTasks.monthlyTargetForPartner();
695
            System.exit(0);
696
        }
33444 ranu 697
        if (args.containsOption("findAllLiveDemoBrandItemsByBillingDate")) {
698
            scheduledTasks.findAllLiveDemoBrandItemsByBillingDate();
699
            System.exit(0);
700
        }
33464 ranu 701
        if (args.containsOption("findTodayPocoBillingItems")) {
702
            scheduledTasks.findTodayPocoBillingItems();
703
            System.exit(0);
704
        }
28921 tejbeer 705
 
31753 tejbeer 706
        if (args.containsOption("hygineAlertForPartner")) {
707
            scheduledTasks.hygineAlertForPartner();
708
            System.exit(0);
709
        }
28921 tejbeer 710
 
31753 tejbeer 711
        if (args.containsOption("hygineAlertForInternalTeam")) {
712
            scheduledTasks.hygineAlertForInternalTeam();
713
            System.exit(0);
714
        }
715
 
32214 jai.hind 716
        if (args.containsOption("checkItelImeiActivationNew")) {
717
            scheduledTasks.checkItelImeiActivationNew(LocalDate.now(), 15);
718
            System.exit(0);
719
        }
37479 amit 720
        // One tick's worth (50 imeis), not a full pass -- the backlog is cleared by the
721
        // scheduled 5-minute ticks. Useful for checking the endpoint by hand.
722
        if (args.containsOption("checkCarlcareImeiActivation")) {
723
            scheduledTasks.checkCarlcareImeiActivation();
724
            System.exit(0);
725
        }
31753 tejbeer 726
        if (args.containsOption("once")) {
33274 amit.gupta 727
 
728
            if (args.containsOption("autoClosePurchaseOrders")) {
729
                poScheduler.autoClosePurchaseOrders();
730
            }
31753 tejbeer 731
            if (args.containsOption("cancelOnceAssist")) {
732
                if (args.containsOption("invoiceNumber")) {
733
                    String oneAssistInvoiceNumber = args.getOptionValues("invoiceNumber").get(0);
734
                    runOnceTasks.cancelOnceAssist(oneAssistInvoiceNumber);
735
                }
736
 
35266 ranu 737
 
31753 tejbeer 738
            }
34208 ranu 739
            if (args.containsOption("cancelOnceAssist")) {
740
                if (args.containsOption("MemberShipNumber")) {
741
                    String applicationNo = args.getOptionValues("applicationNo").get(0);
742
                    String membershipId = args.getOptionValues("membershipId").get(0);
743
                    runOnceTasks.cancelOnceAssistByMemberShipNumber(applicationNo, membershipId);
744
                }
745
 
746
            }
33260 amit.gupta 747
            if (args.containsOption("changeFulfillmentWarehouse")) {
748
                if (args.containsOption("orderId") && args.containsOption("whId")) {
35277 amit 749
                    List<Integer> orderIds = Arrays.stream(args.getOptionValues("orderId").get(0).split(","))
750
                            .map(String::trim)
751
                            .map(Integer::parseInt)
752
                            .collect(Collectors.toList());
753
 
35276 amit 754
                    int warehouseId = Integer.parseInt(args.getOptionValues("whId").get(0));
755
                    for (Integer orderId : orderIds) {
756
                        runOnceTasks.changeFulfillmentWarehouse(orderId, warehouseId);
757
                    }
33260 amit.gupta 758
                }
759
                System.exit(0);
760
            }
31753 tejbeer 761
            if (args.containsOption("1")) {
762
                if (args.containsOption("test")) {
31618 amit.gupta 763
                    //scheduledTasks.sendPartnerInvestmentDetails(args.getOptionValues("email"));
31753 tejbeer 764
                    System.out.println("Calling test method");
36003 aman 765
                    try {
766
                        scheduledTasks.test();
767
                    } catch (Throwable e) {
768
                        throw new RuntimeException(e);
769
                    }
35165 amit 770
                    System.exit(0);
32083 tejbeer 771
 
772
                    if (args.containsOption("approveVendorCatalogPricing")) {
773
                        scheduledTasks.approveVendorCatalogPricing();
774
                        System.exit(0);
775
                    }
32080 tejbeer 776
                } else if (args.containsOption("test1")) {
32008 amit.gupta 777
                    scheduledTasks.test1();
34845 ranu 778
                } else if (args.containsOption("scheduleTaskTest1")) {
779
 
780
                    scheduledTasksTest.test();
781
                }else if (args.containsOption("generateBiReport")) {
782
                    scheduledTasksTest.generateBiReport();
34945 ranu 783
                }else if (args.containsOption("abmSendertest")) {
34946 ranu 784
                    runOnceTasks.setAbmReportSender();
35788 vikas 785
                }else if (args.containsOption("syncProductsToShopify")) {
36058 ranu 786
                    shopifyProductSyncService.syncByWarehouse(ProfitMandiConstants.WAREHOUSE_NAME_MAP.get("UP-WEST/NOIDA"));
34321 ranu 787
                }
34860 ranu 788
                else if (args.containsOption("fetchPartnerDisburseMentTask")) {
789
                    if(args.containsOption("fetchDisbursements")){
790
                        fetchPartnersDisbursementTask.fetchDisbursementsTest();
791
                    }
792
                    else if(args.containsOption("creditAmountTest")){
793
                        fetchPartnersDisbursementTask.creditAmountTest();
794
                    }
795
                    else if(args.containsOption("createContactsAndFundsForFranchiseeTest")){
796
                        fetchPartnersDisbursementTask.createContactsAndFundsForFranchiseeTest();
797
                    }
798
                    else if(args.containsOption("rabbitTransactionProducertest")){
799
                        fetchPartnersDisbursementTask.rabbitTransactionProducertest();
800
                    }
34879 ranu 801
                    else if(args.containsOption("sendingDisbursementMail")){
802
                        fetchPartnersDisbursementTask.sendingDisbursementMail();
803
                    }
34860 ranu 804
                    else {
805
                        fetchPartnersDisbursementTask.test();
806
                    }
807
                }
34845 ranu 808
                else if (args.containsOption("testNew1")) {
34307 ranu 809
                    List<String> loanIdArgs = args.getOptionValues("loanIds");  // ["34833,36536,37151"]
810
                    List<Integer> loanIds = new ArrayList<>();
811
 
812
                    if (loanIdArgs != null && !loanIdArgs.isEmpty()) {
813
                        String csv = loanIdArgs.get(0);
814
                        loanIds = Arrays.stream(csv.split(","))
815
                                .map(String::trim)
816
                                .map(Integer::parseInt)
817
                                .collect(Collectors.toList());
818
                    }
34321 ranu 819
                    scheduledTasksTest.findLoanTransactionMapingAccordingLoan(loanIds);
34309 ranu 820
                } else if (args.containsOption("testNew2")) {
34308 ranu 821
                    if (args.containsOption("createLoan")) {
822
                        // Extract each parameter
823
                        int transactionId = 0;
824
                        double invoiceAmount = 0.0;
825
                        String invoiceNumber = "";
826
 
827
                        if (args.containsOption("transactionId")) {
828
                            transactionId = Integer.parseInt(args.getOptionValues("transactionId").get(0));
829
                        }
830
 
831
                        if (args.containsOption("invoiceAmount")) {
832
                            invoiceAmount = Double.parseDouble(args.getOptionValues("invoiceAmount").get(0));
833
                        }
834
 
835
                        if (args.containsOption("invoiceNumber")) {
836
                            invoiceNumber = args.getOptionValues("invoiceNumber").get(0);
837
                        }
838
 
839
                        // Call your method
840
                        scheduledTasksTest.createLoanForBillingByTransactionIdAndInvoiceNumber(transactionId, invoiceAmount, invoiceNumber);
841
                    }
842
 
32482 amit.gupta 843
                } else {
31753 tejbeer 844
                    System.out.println("Called sendPartnerInvestmentDetails");
845
                    scheduledTasks.sendPartnerInvestmentDetails();
846
                }
847
                System.exit(0);
848
            }
849
            if (args.containsOption("2")) {
850
                if (args.containsOption("test")) {
851
                    String[] emails = new String[args.getOptionValues("email").size()];
852
                    scheduledTasks.sendAgeingReport(args.getOptionValues("email").toArray(emails));
853
                } else {
854
                    scheduledTasks.sendAgeingReport();
855
                }
856
                System.exit(0);
857
            }
33457 amit.gupta 858
 
31753 tejbeer 859
            if (args.containsOption("cancelOrder")) {
860
                List<String> invoiceNumbers = args.getOptionValues("invoiceNumber");
861
                runOnceTasks.cancelOrder(invoiceNumbers);
862
            }
36554 amit 863
            if (args.containsOption("postCreditNoteForDuplicateInvoice")) {
864
                String duplicateInvoice = args.getOptionValues("duplicateInvoice").get(0);
865
                String activeInvoice = args.getOptionValues("activeInvoice").get(0);
866
                runOnceTasks.postCreditNoteForDuplicateInvoice(duplicateInvoice, activeInvoice);
867
            }
31753 tejbeer 868
            if (args.containsOption("migratePurchase")) {
869
                runOnceTasks.migratePurchase();
870
            }
871
            if (args.containsOption("migratepd")) {
872
                scheduledTasks.moveImeisToPriceDropImeis();
873
            }
874
            if (args.containsOption("walletmismatch")) {
875
                scheduledTasks.walletmismatch();
876
            }
877
            if (args.containsOption("schemewalletmismatch")) {
878
                scheduledTasks.schemewalletmismatch();
879
            }
880
            if (args.containsOption("gst")) {
881
                scheduledTasks.gst();
882
            }
883
            if (args.containsOption("mailDashboardScreenshots")) {
884
                runOnceTasks.mailDashboardScreenshots();
885
            }
886
            if (args.containsOption("notifyLead")) {
887
                scheduledTasks.notifyLead();
888
                scheduledTasks.notifyVisits();
889
            }
890
            if (args.containsOption("fixgrn")) {
891
                runOnceTasks.fixGrn();
892
            }
893
            if (args.containsOption("pbfix")) {
894
                runOnceTasks.pbfix();
895
            }
896
            if (args.containsOption("mongom")) {
897
                runOnceTasks.mongom();
898
            }
899
            if (args.containsOption("processPd")) {
900
                int priceDropId = Integer.parseInt(args.getOptionValues("processPd").get(0));
901
                runOnceTasks.processPd(priceDropId);
902
            }
903
            if (args.containsOption("fixdupimeigrn")) {
904
                runOnceTasks.fixDupGrns();
905
            }
906
            if (args.containsOption("cancel")) {
36053 amit 907
                boolean recreatePri = args.containsOption("recreatePri");
908
                runOnceTasks.cancelDn(args.getOptionValues("dn").get(0), recreatePri);
31753 tejbeer 909
            }
910
            if (args.containsOption("fixScheme")) {
911
                runOnceTasks.fixScheme();
912
            }
913
            if (args.containsOption("syncLeads")) {
914
                leadSyncRunner.syncLeads();
915
            }
916
            if (args.containsOption("testCs")) {
917
                int category = Integer.parseInt(args.getOptionValues("category").get(0));
918
                EscalationType escalationType = EscalationType.valueOf(args.getOptionValues("escalation").get(0));
919
                int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
920
                csService.getAuthUserId(category, escalationType, fofoId);
921
            }
922
            if (args.containsOption("duporder")) {
923
                runOnceTasks.removeDuplicateOrders();
924
            }
925
            if (args.containsOption("createDummyInvoices")) {
926
                runOnceTasks.createDummyInvoices();
927
            }
28921 tejbeer 928
 
31753 tejbeer 929
            if (args.containsOption("payMonthlyInvestment")) {
930
                investmentRelatedTasks.payMonthlyInvestment();
931
            }
932
            if (args.containsOption("evaluateActualInvestmentPayout")) {
933
                investmentRelatedTasks.evaluateActualInvestmentPayout();
934
            }
935
            if (args.containsOption("createOffers")) {
936
                if (args.containsOption("fileName")) {
937
                    String fileName = args.getOptionValues("fileName").get(0);
938
                    FileInputStream stream = new FileInputStream(fileName);
939
                    runOnceTasks.createOffers(stream);
940
                }
941
            }
942
            if (args.containsOption("schemeout")) {
943
                if (args.containsOption("invoices")) {
944
                    String invoicesString = args.getOptionValues("invoices").get(0);
945
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
946
                    scheduledTasks.processSchemeOut(invoices);
947
                }
948
            }
949
            if (args.containsOption("schemein")) {
950
                if (args.containsOption("invoices")) {
951
                    String invoicesString = args.getOptionValues("invoices").get(0);
952
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
953
                    scheduledTasks.processSchemeIn(invoices);
954
                }
955
            }
28921 tejbeer 956
 
31753 tejbeer 957
            if (args.containsOption("fixScans")) {
958
                runOnceTasks.fixScans();
959
            }
960
            if (args.containsOption("fixPrebookingOrderGrn")) {
961
                runOnceTasks.genericCreateCurrentInventorySnapshot();
962
            }
963
            if (args.containsOption("fixOurSerialized")) {
964
                if (args.containsOption("orderIds")) {
965
                    String orderIdsString = args.getOptionValues("orderIds").get(0);
966
                    List<Integer> orderIds = Arrays.asList(orderIdsString.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
967
                    // runOnceTasks.fixOurSerialized(orderIds);
968
                }
969
            }
29776 tejbeer 970
 
31753 tejbeer 971
            if (args.containsOption("reverseMaa")) {
972
                runOnceTasks.reverseMaa();
973
            }
29776 tejbeer 974
 
31753 tejbeer 975
            if (args.containsOption("fixOffer")) {
976
                runOnceTasks.fixOffer();
977
            }
29794 tejbeer 978
 
31753 tejbeer 979
            if (args.containsOption("opporeno")) {
980
                runOnceTasks.opporeno();
981
            }
30309 amit.gupta 982
 
31753 tejbeer 983
            if (args.containsOption("fixorders")) {
984
                runOnceTasks.fixOrders();
985
            }
986
            if (args.containsOption("fixreservations")) {
987
                runOnceTasks.fixReservations();
988
            }
989
            if (args.containsOption("addinvestment")) {
990
                runOnceTasks.addInvestment();
991
            }
992
            if (args.containsOption("brandregion")) {
993
                runOnceTasks.brandRegion();
994
            }
995
            if (args.containsOption("rollOutUpgardedMargins")) {
35520 amit 996
                scheduledTasks.rollOutUpgardedMargins(Arrays.asList(175140172, 175140189));
31753 tejbeer 997
            }
34029 ranu 998
            if (args.containsOption("pushRbmTargets")) {
999
                scheduledTasks.persistRbmTodayTargets();
1000
            }
37499 ranu 1001
            if (args.containsOption("pushSalesTargets")) {
1002
                // Run this AFTER pushRbmTargets so today's RBM snapshots exist to roll up.
1003
                scheduledTasks.persistSalesTodayTargets();
1004
            }
1005
            if (args.containsOption("pushSalesTargetsForDate")) {
1006
                // Backfill / seed for a specific date, e.g. --pushSalesTargetsForDate=2026-08-25
1007
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesTargetsForDate").get(0));
1008
                scheduledTasks.persistSalesTargetsForDate(d);
1009
            }
1010
            if (args.containsOption("pushSalesAchievements")) {
1011
                // Daily Sales achievement snapshot (audit/history). Independent
1012
                // of pushSalesTargets — can run any time after orders settle.
1013
                scheduledTasks.persistSalesTodayAchievements();
1014
            }
1015
            if (args.containsOption("pushSalesAchievementsForDate")) {
1016
                // Backfill / seed for a specific date, e.g. --pushSalesAchievementsForDate=2026-08-25
1017
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesAchievementsForDate").get(0));
1018
                scheduledTasks.persistSalesAchievementsForDate(d);
1019
            }
31753 tejbeer 1020
            if (args.containsOption("rollOutUpgardedMarginsNextMonth")) {
35524 amit 1021
                System.out.println("In rollOutUpgardedMarginsNextMonth");
35532 amit 1022
                scheduledTasks.rollOutUpgardedMarginsNextMonth(Arrays.asList(175140172, 175140189, 175138897));
31753 tejbeer 1023
            }
1024
            if (args.containsOption("checkCancellationMargin")) {
1025
                scheduledTasks.checkCancellationMargin();
1026
            }
1027
            if (args.containsOption("reviewUncontactablePartner")) {
1028
                scheduledTasks.reviewUncontactablePartner();
1029
            }
37751 ranu 1030
 
31753 tejbeer 1031
            if (args.containsOption("sendWelcomeEmail")) {
1032
                onBoardingRelatedSchelduleTask.sendWelcomeEmail();
1033
            }
29814 tejbeer 1034
 
31753 tejbeer 1035
            if (args.containsOption("partnerOnboardingLegalMigration")) {
1036
                onBoardingRelatedSchelduleTask.partnerOnboardingLegalMigration();
1037
            }
31031 amit.gupta 1038
 
33526 amit.gupta 1039
            if(args.containsOption("moveOrders")) {
1040
                runOnceTasks.moveOrders();
1041
            }
1042
 
31753 tejbeer 1043
            if (args.containsOption("addKycLegalMigration")) {
1044
                onBoardingRelatedSchelduleTask.addKycLegalMigration();
1045
            }
29776 tejbeer 1046
 
1047
 
31753 tejbeer 1048
            if (args.containsOption("pushDataToSolr")) {
1049
                listing.pushDataToSolr();
1050
            }
30120 amit.gupta 1051
 
37567 amit 1052
            // Manual run of the daily 05:30 delist. Honours the same
1053
            // catalog.autoDelist.enabled flag as the scheduled path.
1054
            if (args.containsOption("delistDeadListings")) {
1055
                listing.scheduledDelistDeadListings();
1056
            }
1057
 
31753 tejbeer 1058
            if (args.containsOption("testGstPro")) {
1059
                System.out.println("TestGstProc called");
1060
                try {
1061
                    runOnceTasks.updateIrnsToInvoices();
1062
                } catch (Exception e) {
1063
                    e.printStackTrace();
1064
                }
1065
            }
29308 tejbeer 1066
 
37058 amit 1067
            if (args.containsOption("regenerateBilledInvoices")) {
1068
                if (args.containsOption("fromTime") && args.containsOption("toTime")) {
1069
                    LocalDateTime fromTime = LocalDateTime.parse(args.getOptionValues("fromTime").get(0));
1070
                    LocalDateTime toTime = LocalDateTime.parse(args.getOptionValues("toTime").get(0));
1071
                    runOnceTasks.regenerateBilledInvoices(fromTime, toTime);
1072
                } else {
1073
                    System.out.println("regenerateBilledInvoices requires --fromTime and --toTime (ISO, e.g. 2026-06-01T00:00:00)");
1074
                }
1075
                System.exit(0);
1076
            }
1077
 
31753 tejbeer 1078
            if (args.containsOption("reverseSchemeCancelInvoice")) {
1079
                if (args.containsOption("invoice")) {
1080
                    String invoice = args.getOptionValues("invoice").get(0);
1081
                    runOnceTasks.reverseSchemes(invoice);
1082
                }
1083
            }
29863 tejbeer 1084
 
31753 tejbeer 1085
            if (args.containsOption("reverseInvalidActivation")) {
1086
                if (args.containsOption("inventoryids")) {
1087
                    String inventoryItemIdsString = args.getOptionValues("inventoryids").get(0);
1088
                    List<Integer> inventoryItemIds = new ArrayList<>();
1089
                    for (String inventoryItemIdString : inventoryItemIdsString.split(",")) {
1090
                        int inventoryItemId = Integer.parseInt(inventoryItemIdString.trim());
1091
                        inventoryItemIds.add(inventoryItemId);
1092
                    }
1093
                    runOnceTasks.reverseInvalidActivation(inventoryItemIds);
1094
                }
1095
            }
29863 tejbeer 1096
 
31753 tejbeer 1097
            if (args.containsOption("runme")) {
1098
                runOnceTasks.runMe();
1099
            }
1100
            if (args.containsOption("" + "")) {
1101
                upgradeOfferService.authenticateUser();
1102
            }
37472 amit 1103
            // Oppo and realme are one pass now, so one option drives both. Note this
1104
            // runs the FULL daily pass -- everything due today, not a 25-imei sample.
1105
            if (args.containsOption("checkBrowserImeiActivation")) {
1106
                standAlone.checkBrowserImeiActivation();
31753 tejbeer 1107
            }
30616 amit.gupta 1108
 
31753 tejbeer 1109
            /*
1110
             * if (args.containsOption("checkRealmeImeiStatus")) { try {
1111
             * standAlone.checkRealmeImeiStatus(); } catch (Exception e) {
1112
             * e.printStackTrace(); } }
1113
             */
30616 amit.gupta 1114
 
31753 tejbeer 1115
            if (args.containsOption("getCaptchaCode")) {
1116
                try {
1117
                    captchaService.getCaptchaCode("/home/amit/Desktop/generatingCodes.jpg");
1118
                } catch (Exception e) {
1119
                    e.printStackTrace();
1120
                }
1121
            }
30641 amit.gupta 1122
 
37326 amit 1123
            // --backfillMissingEwb --invoiceNumbers=A,B,C [--dryRun]
1124
            // Recovers EWB details from NIC for invoices whose IRN was recovered via DUPIRN, then
1125
            // re-renders their PDFs so the e-way bill section appears.
1126
            if (args.containsOption("backfillMissingEwb")) {
1127
                try {
1128
                    List<String> invoiceNumbers = Arrays.stream(
1129
                                    args.getOptionValues("invoiceNumbers").get(0).split(","))
1130
                            .map(String::trim).filter(x -> !x.isEmpty()).collect(Collectors.toList());
1131
                    boolean dryRun = args.containsOption("dryRun");
1132
                    System.out.println("backfillMissingEwb: " + invoiceNumbers.size()
1133
                            + " invoice(s), dryRun=" + dryRun);
1134
                    runOnceTasks.backfillMissingEwb(invoiceNumbers, dryRun);
1135
                } catch (Exception e) {
1136
                    e.printStackTrace();
1137
                }
1138
            }
1139
 
31753 tejbeer 1140
            if (args.containsOption("testIrnLive")) {
1141
                try {
1142
                    runOnceTasks.testIrnLive(args.getOptionValues("invoiceNumber").get(0));
1143
                } catch (Exception e) {
1144
                    e.printStackTrace();
1145
                }
1146
            }
30659 amit.gupta 1147
 
31753 tejbeer 1148
            if (args.containsOption("createoffercriteria")) {
1149
                try {
1150
                    runOnceTasks.createOfferCriteria();
1151
                } catch (Exception e) {
1152
                    e.printStackTrace();
1153
                }
1154
            }
30659 amit.gupta 1155
 
31753 tejbeer 1156
            if (args.containsOption("fix-price-drops")) {
1157
                runOnceTasks.fixPriceDrop();
1158
            }
29035 tejbeer 1159
 
31753 tejbeer 1160
            if (args.containsOption("processSchemeByIds")) {
1161
                List<String> schemeIds = Arrays.asList(args.getOptionValues("ids").get(0).split(","));
1162
                List<Integer> schemeIdsInt = schemeIds.stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
1163
                runOnceTasks.processSchemeByIds(schemeIdsInt);
1164
            }
30859 tejbeer 1165
 
31753 tejbeer 1166
            if (args.containsOption("updateSaholicCISTable")) {
1167
                runOnceTasks.updateSaholicCISTable();
1168
            }
30859 tejbeer 1169
 
34579 vikas.jang 1170
            if (args.containsOption("todayBidPO")) {
34443 vikas.jang 1171
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.TODAY);
1172
            }
1173
 
34579 vikas.jang 1174
            if (args.containsOption("yesterdayBidPO")) {
1175
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY);
1176
            }
1177
 
34547 vikas.jang 1178
            if (args.containsOption("biddingConsolidatedMessage")) {
1179
                runOnceTasks.consolidatedBiddingMessage();
1180
            }
1181
 
1182
            if (args.containsOption("sendMailWhatsAppAfterLoanDueDate")) {
1183
                scheduledTasks.sendMailWhatsAppAfterLoanDueDate();
1184
            }
1185
 
34836 vikas 1186
            if (args.containsOption("yesterdayTrackingReport")) {
1187
                runOnceTasks.yesterdayTrackingReport();
34770 vikas.jang 1188
            }
1189
 
31753 tejbeer 1190
            System.exit(0);
1191
        }
30859 tejbeer 1192
 
31753 tejbeer 1193
        if (args.containsOption("calculateInterestAccured")) {
30929 tejbeer 1194
 
31753 tejbeer 1195
            scheduledTasks.calculateInterestAccured();
1196
            System.exit(0);
1197
        }
30929 tejbeer 1198
 
31753 tejbeer 1199
        if (args.containsOption("loanSettlement")) {
30890 amit.gupta 1200
 
31753 tejbeer 1201
            scheduledTasks.loanSettlement();
1202
            System.exit(0);
1203
        }
30896 amit.gupta 1204
 
31753 tejbeer 1205
        if (args.containsOption("dailyLoanAlert")) {
30936 tejbeer 1206
 
31753 tejbeer 1207
            scheduledTasks.dailyLoanAlert();
1208
            System.exit(0);
1209
        }
30982 tejbeer 1210
 
36564 amit 1211
        if (args.containsOption("testFlagshipBilling")) {
1212
            int trId = Integer.parseInt(args.getOptionValues("testFlagshipBilling").get(0));
1213
            double amt = Double.parseDouble(args.getOptionValues("testFlagshipBillingAmount").get(0));
1214
            String inv = args.getOptionValues("testFlagshipBillingInvoice").get(0);
1215
            scheduledTasks.testFlagshipBilling(trId, amt, inv);
1216
            System.exit(0);
1217
        }
1218
 
36554 amit 1219
        if (args.containsOption("convertExpiredFlagshipCredits")) {
1220
            scheduledTasks.convertExpiredFlagshipCredits();
1221
            System.exit(0);
1222
        }
1223
 
36745 ranu 1224
        // Manual back-fill for missed-beat detection. Default: today.
1225
        // Usage: --detectMissedBeats [--date=YYYY-MM-DD]
1226
        if (args.containsOption("detectMissedBeats")) {
1227
            LocalDate date = LocalDate.now();
1228
            if (args.containsOption("date")) {
1229
                date = LocalDate.parse(args.getOptionValues("date").get(0));
1230
            }
1231
            int inserted = beatMissDetectorRunner.syncMissesForDate(date);
1232
            LOGGER.info("detectMissedBeats: {} miss rows inserted for {}", inserted, date);
1233
            System.exit(0);
1234
        }
1235
 
36554 amit 1236
        if (args.containsOption("notifyFlagshipExpiryIn2Days")) {
1237
            scheduledTasks.notifyFlagshipExpiryIn2Days();
1238
            System.exit(0);
1239
        }
1240
 
31753 tejbeer 1241
        if (args.containsOption("notifyDefaultLoans")) {
1242
            scheduledTasks.notifyDefaultLoans();
1243
            System.exit(0);
1244
        }
31446 amit.gupta 1245
 
31753 tejbeer 1246
        if (args.containsOption("fixinsurance")) {
1247
            runOnceTasks.addMissingWalletDebitsForInsurance();
1248
            System.exit(0);
1249
        }
31604 tejbeer 1250
 
31753 tejbeer 1251
        if (args.containsOption("processActivatedImeisForSchemes")) {
1252
            scheduledTasks.processActivatedImeisForSchemes();
1253
            System.exit(0);
1254
        }
31604 tejbeer 1255
 
36306 amit 1256
        if (args.containsOption("updatePartnerLimitWithBatch")) {
1257
            System.out.println("Running updatePartnerLimit with batch tracking");
1258
            batchScheduledTasks.updatePartnerLimitWithBatch();
1259
            System.exit(0);
1260
        }
1261
 
1262
        if (args.containsOption("processOffersWithBatch")) {
1263
            for (String val : args.getOptionValues("processOffersWithBatch")) {
1264
                for (String id : val.split(",")) {
1265
                    int offerId = Integer.parseInt(id.trim());
1266
                    System.out.println("Processing offer with batch: " + offerId);
1267
                    batchScheduledTasks.processOfferWithBatch(offerId);
1268
                }
1269
            }
1270
            System.exit(0);
1271
        }
1272
 
31753 tejbeer 1273
        if (args.containsOption("notifyLoanDueDateCross")) {
1274
            scheduledTasks.notifyLoanDueDateCross();
1275
            System.exit(0);
1276
        }
34275 tejus.loha 1277
        if (args.containsOption("sendTenOrMoreOrderStockReport")) {
1278
            scheduledTasks.send10OrMoreOlderStockReport();
1279
            System.exit(0);
1280
        }
31604 tejbeer 1281
 
31753 tejbeer 1282
        if (args.containsOption("alertForDueDate")) {
1283
            scheduledTasks.alertForDueDate();
1284
            System.exit(0);
1285
        }
31648 tejbeer 1286
 
31753 tejbeer 1287
        if (args.containsOption("fetchParnterStats")) {
1288
            scheduledTasks.fetchParnterStats();
1289
            System.exit(0);
1290
        }
1291
 
1292
        if (args.containsOption("morning")) {
1293
            if (args.containsOption("0")) {
1294
                scheduledTasks.sendPartnerInvestmentDetails();
1295
            }
1296
            if (args.containsOption("1")) {
1297
                scheduledTasks.sendIndentTertiary();
1298
            }
1299
            // 0
1300
            if (args.containsOption("2")) {
1301
                scheduledTasks.calculateInterestAccured();
1302
            }
1303
            System.out.println("scheduledTasks.calculateInterestAccured()");
1304
            // 0
1305
            if (args.containsOption("3")) {
32831 amit.gupta 1306
                orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 1307
            }
1308
            System.out.println("scheduledTasks.markDelhiveryOrderDelivered()");
1309
            // 1
1310
            if (args.containsOption("4")) {
1311
                scheduledTasks.processActivatedImeisForSchemes();
1312
            }
1313
            System.out.println("scheduledTasks.processActivatedImeisForSchemes()");
1314
            // 2
1315
            if (args.containsOption("5")) {
1316
                scheduledTasks.processActivation();
1317
            }
1318
            System.out.println("scheduledTasks.processActivation()");
1319
            // 4
1320
            if (args.containsOption("6")) {
1321
                scheduledTasks.processPriceDrop();
1322
            }
1323
            System.out.println("scheduledTasks.processPriceDrop()");
1324
            // 5
1325
            if (args.containsOption("7")) {
1326
                scheduledTasks.loanSettlement();
1327
            }
1328
            System.out.println("scheduledTasks.loanSettlement()");
36554 amit 1329
            if (args.containsOption("7a")) {
1330
                scheduledTasks.convertExpiredFlagshipCredits();
1331
                scheduledTasks.notifyFlagshipExpiryIn2Days();
1332
            }
1333
            System.out.println("scheduledTasks.convertExpiredFlagshipCredits()");
31753 tejbeer 1334
            // 8
1335
            if (args.containsOption("8")) {
1336
                scheduledTasks.reviewUncontactablePartner();
1337
            }
1338
            // 9
33859 tejus.loha 1339
//            if (args.containsOption("9")) {
1340
//                onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
1341
//            }
1342
//            // 9
1343
//            if (args.containsOption("10")) {
1344
//                onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
1345
//            }
31753 tejbeer 1346
            // sendPartnerInvestment
1347
            if (args.containsOption("11")) {
1348
                scheduledTasks.sendPartnerInvestmentDetails();
1349
            }
37236 amit 1350
            if (args.containsOption("1")) {
36993 amit 1351
                // Defaults to a dry-run (harmless dev path); pass --live to run the real pipeline.
1352
                boolean dryRun = !args.containsOption("live");
1353
                System.out.println("Calling sendCreditNote (dryRun=" + dryRun + ")");
34029 ranu 1354
                YearMonth yearMonth = YearMonth.now().minusMonths(1);
36993 amit 1355
                scheduledTasks.sendCreditNote(yearMonth, dryRun);
31753 tejbeer 1356
            }
37238 amit 1357
            if (args.containsOption("regenMarginIrns")) {
1358
                // One-time: generate missing IRNs for issued margin CN/DNs (mixed-sign docs
1359
                // now netted per GST rate in the payload). Dry-run by default; --live to run.
1360
                boolean dryRun = !args.containsOption("live");
1361
                try {
1362
                    String ymStr = args.getOptionValues("regenMarginIrns").isEmpty() ? null : args.getOptionValues("regenMarginIrns").get(0);
1363
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1364
                    System.out.println("regenMarginIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1365
                    scheduledTasks.regenMarginIrns(yearMonth, dryRun);
1366
                    System.out.println("regenMarginIrns completed successfully");
1367
                } catch (Exception e) {
1368
                    System.err.println("regenMarginIrns FAILED: " + e.getMessage());
1369
                    e.printStackTrace(System.err);
1370
                }
1371
            }
37236 amit 1372
            if (args.containsOption("cancelMarginDnIrns")) {
1373
                // One-time: cancel IRNs of margin DNs inflated by the abs bug (24h NIC window!)
1374
                // and mark them cancelled so a sendCreditNote rerun reissues corrected DNs.
1375
                // Defaults to dry-run; pass --live to actually cancel.
1376
                boolean dryRun = !args.containsOption("live");
1377
                try {
1378
                    String ymStr = args.getOptionValues("cancelMarginDnIrns").isEmpty() ? null : args.getOptionValues("cancelMarginDnIrns").get(0);
1379
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1380
                    System.out.println("cancelMarginDnIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1381
                    scheduledTasks.cancelMarginDnIrns(yearMonth, dryRun);
1382
                    System.out.println("cancelMarginDnIrns completed successfully");
1383
                } catch (Exception e) {
1384
                    System.err.println("cancelMarginDnIrns FAILED: " + e.getMessage());
1385
                    e.printStackTrace(System.err);
1386
                }
1387
            }
37232 amit 1388
            if (args.containsOption("corrMarginCNs")) {
1389
                // One-time corrective CNs against wrongly-inflated margin DNs.
1390
                // Defaults to dry-run; pass --live to issue real documents.
1391
                boolean dryRun = !args.containsOption("live");
1392
                try {
1393
                    String ymStr = args.getOptionValues("corrMarginCNs").isEmpty() ? null : args.getOptionValues("corrMarginCNs").get(0);
1394
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1395
                    System.out.println("corrMarginCNs for " + yearMonth + " (dryRun=" + dryRun + ")");
1396
                    scheduledTasks.corrMarginCNs(yearMonth, dryRun);
1397
                    System.out.println("corrMarginCNs completed successfully");
1398
                } catch (Exception e) {
1399
                    System.err.println("corrMarginCNs FAILED: " + e.getMessage());
1400
                    e.printStackTrace(System.err);
1401
                }
1402
            }
36220 amit 1403
            if (args.containsOption("genDNs")) {
1404
                System.out.println("Calling genDNs");
36254 amit 1405
                try {
1406
                    String ymStr = args.getOptionValues("genDNs").isEmpty() ? null : args.getOptionValues("genDNs").get(0);
1407
                    YearMonth yearMonth = ymStr != null ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1408
                    System.out.println("genDNs for " + yearMonth);
1409
                    scheduledTasks.genDNs(yearMonth);
1410
                    System.out.println("genDNs completed successfully");
1411
                } catch (Exception e) {
1412
                    System.err.println("genDNs FAILED: " + e.getMessage());
1413
                    e.printStackTrace(System.err);
1414
                }
36220 amit 1415
            }
36503 amit 1416
            if (args.containsOption("genDNsForCNs")) {
1417
                System.out.println("Calling genDNsForCNs");
1418
                try {
1419
                    String cnList = args.getOptionValues("genDNsForCNs").get(0);
1420
                    List<String> cnNumbers = Arrays.asList(cnList.split(","));
1421
                    System.out.println("genDNsForCNs for " + cnNumbers.size() + " CNs: " + cnNumbers);
1422
                    scheduledTasks.genDNsForCNs(cnNumbers);
1423
                    System.out.println("genDNsForCNs completed successfully");
1424
                } catch (Exception e) {
1425
                    System.err.println("genDNsForCNs FAILED: " + e.getMessage());
1426
                    e.printStackTrace(System.err);
1427
                }
1428
            }
36433 amit 1429
            System.exit(0);
1430
        }
1431
 
31753 tejbeer 1432
    }
24848 amit.gupta 1433
}