JbpmRestApi.java 11.5 KB
package com.b3.rbl.compensation.rest;

import com.b3.rbl.compensation.model.jbpm.*;
import com.b3.rbl.compensation.service.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.extern.log4j.Log4j2;
import nonapi.io.github.classgraph.json.JSONDeserializer;

import org.apache.tomcat.util.json.JSONParser;
import org.json.simple.JSONObject;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jackson.JsonObjectDeserializer;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.sql.Date;
 

@Log4j2
 @RestController
 @RequestMapping("jbpm/")
    public class JbpmRestApi {

    @Autowired
    JbpmService jbpmService;

    @Autowired
    PaymentService paymentService;

    @Autowired
    MonthlyBonusService monthlyBonusService;

    @Autowired
    MonthlyOverridingService monthlyOverridingService;
    
    @Autowired
    QuarterlyBonusService quarterlyBonusService;

    @Autowired
    HealthInsuranceService healthInsuranceService;

    ModelMapper modelMapper;

    @GetMapping("get-container")
    public ResponseEntity<String> getContainerId() {
        jbpmService.initialize();
        jbpmService.disposeAndCreateContainer();
        return ResponseEntity.ok(jbpmService.listContainers());
    }

    @PostMapping("add-data")
    public void insertData(@RequestBody Object result) {
        // log.info("result {}", result);

        AgentDetailData data = new AgentDetailData();

        // data.setAgents((List<AgentResult>) result);
        ObjectMapper objectMapper = new ObjectMapper();
        try {

            String jsonResult = objectMapper.writeValueAsString(result);

            log.info("json {}", jsonResult);

            // Parse the JSON string to List<AgentResult>
            List<AgentResult> agents;

            agents = objectMapper.readValue(jsonResult, new TypeReference<List<AgentResult>>() {
            });
            data.setAgents(agents);
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        jbpmService.setupData(data);

    }

    @PostMapping("addmonthly-data")
    public void insertMonthlyData(@RequestBody Object result) {
        // log.info("result {}", result);

        AgentDetailData data = new AgentDetailData();

        // data.setAgents((List<AgentResult>) result);
        ObjectMapper objectMapper = new ObjectMapper();
        try {

            String jsonResult = objectMapper.writeValueAsString(result);

            log.info("json {}", jsonResult);

            // Parse the JSON string to List<AgentResult>
            List<AgentResult> agents;

            agents = objectMapper.readValue(jsonResult, new TypeReference<List<AgentResult>>() {
            });
            data.setAgents(agents);
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if (data.getAgents().size() > 0) {
            monthlyBonusService.setupMonthlyData(data);
        }

    }

    @PostMapping("addhealthinsurance-data")
    public void insertHealthInsuranceData(@RequestBody Object result) {
                // log.info("result {}", result);

                AgentDetailData data = new AgentDetailData();

                // data.setAgents((List<AgentResult>) result);
                ObjectMapper objectMapper = new ObjectMapper();
                try {
        
                    String jsonResult = objectMapper.writeValueAsString(result);
        
                    log.info("json {}", jsonResult);
        
                    // Parse the JSON string to List<AgentResult>
                    List<AgentResult> agents;
        
                    agents = objectMapper.readValue(jsonResult, new TypeReference<List<AgentResult>>() {
                    });
                    data.setAgents(agents);
                } catch (JsonMappingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (JsonProcessingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        
                healthInsuranceService.setupHealthInsuranceData(data);
    }

    @PostMapping("quarterlyBonus-addata")
    public void insertQuarterlyData(@RequestBody Object result) {
        // log.info("result {}", result);

        AgentDetailData data = new AgentDetailData();

        // data.setAgents((List<AgentResult>) result);
        ObjectMapper objectMapper = new ObjectMapper();
        try {

            String jsonResult = objectMapper.writeValueAsString(result);

            // log.info("json {}", jsonResult);


            // Parse the JSON string to List<AgentResult>
            List<AgentResult> agents;

            agents = objectMapper.readValue(jsonResult, new TypeReference<List<AgentResult>>() {
            });
            data.setAgents(agents);
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if(data.getAgents().size() > 0 ){
            quarterlyBonusService.setupQuarterlyData(data);
        }

    }

    // @PostMapping("execute-rule")
    // public ResponseEntity<IncomeDetails> executeRule(@RequestBody IncomeDetails
    // incomeDetails){
    // jbpmService.initialize();
    // jbpmService.disposeAndCreateContainer();

    // return ResponseEntity.ok(jbpmService.executeCommands(incomeDetails));
    // }

    @PostMapping("execute-business-process")
    public ResponseEntity<String> executeBusinessProcess(@RequestParam(name = "scheduleDate") String scheduleDate)
            throws JsonProcessingException {
        jbpmService.initialize();
        log.info("schedule {}", scheduleDate);

        paymentService.getDataTax(scheduleDate);

        // jbpmService.getDataTax(scheduleDate);
        // jbpmService.disposeAndCreateContainer();
        // jbpmService.calculationFyc(agents);

        // jbpmService.executeBusinessProcess(agents);

        return ResponseEntity.ok().body("Processing Success");
    }

    @PostMapping("execute-business-process/monthly")
    public ResponseEntity<String> executeBusinessProcess(@RequestParam(name = "startdate") Date startdate,
            @RequestParam(name = "enddate") Date enddate) throws JsonProcessingException {
        monthlyBonusService.initialize();
        log.info("startdate {}", startdate);
        log.info("enddate {}", enddate);

        monthlyBonusService.getDataMonthlyBonus(startdate, enddate);
        return ResponseEntity.ok().body("Success");

    }

    @PostMapping("execute-business-process/monthly-overriding")
    public ResponseEntity<String> executeMonthlyOverridingProcess(@RequestParam(name = "startDate") Date startDate,
            @RequestParam(name = "endDate") Date endDate) throws JsonProcessingException {
        monthlyOverridingService.initialize();

        monthlyOverridingService.getFycRycAmount(startDate, endDate);
        return ResponseEntity.ok().body("Success");
    }

    @PostMapping("insert-monthly-overriding")
    public void insertMonthlyOverriding(@RequestBody Object result) {
        // log.info("result {}", result);

        AgentDetailData data = new AgentDetailData();

        ObjectMapper objectMapper = new ObjectMapper();
        try {

            String jsonResult = objectMapper.writeValueAsString(result);

            // log.info("json {}", jsonResult);

            // Parse the JSON string to List<AgentResult>
            List<AgentResult> agents;

            agents = objectMapper.readValue(jsonResult, new TypeReference<List<AgentResult>>() {
            });
            data.setAgents(agents);
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        monthlyOverridingService.setupData(data);

    }

    @PostMapping("execute-business-process/quarterly-bonus")
    public ResponseEntity<String> executeQuarterlyBonusProcess(@RequestParam(name = "startdate") Date startdate, @RequestParam(name = "enddate") Date enddate)
            throws JsonProcessingException {
        quarterlyBonusService.initialize();
        log.info("startdate {}", startdate);
        log.info("enddate {}", enddate);
          
        if (startdate != null && enddate != null) {
            Calendar startdateCal = Calendar.getInstance();
            startdateCal.setTime(startdate);

            Calendar enddateCal = Calendar.getInstance();
            enddateCal.setTime(enddate);
            
            int monthDiff = (enddateCal.get(Calendar.MONTH) - startdateCal.get(Calendar.MONTH)) + 1;
            if ( monthDiff == 3) {
                //quarterlyBonusService.getDataQuarterlyBonus(startdate, enddate);
                quarterlyBonusService.getDataQuarterlyTeamBonus(startdate, enddate);
               //quarterlyBonusService.getDataQuarterlyTeamSDBonus(startdate, enddate);
                return ResponseEntity.ok().body("Success");
            } else {
                return ResponseEntity.badRequest().body("Invalid date range 3 month");
            }
        }else {
            return ResponseEntity.badRequest().body("Invalid date input");
        }
    }

    @PostMapping("execute-business-process/healthInsuranceIndividual")
    public ResponseEntity<String> executeBusinessProcessHealthInsuranceIndividual(@RequestParam(name = "startDate") Date startDate, @RequestParam(name = "endDate") Date endDate)
            throws JsonProcessingException {
        healthInsuranceService.initialize();
        log.info("startDate {}", startDate);
        log.info("endDate {}", endDate);

        healthInsuranceService.getDataHealthInsuranceIndividual(startDate, endDate);

        return ResponseEntity.ok().body("Processing Success");
    }

    @PostMapping("execute-business-process/healthInsuranceTeam")
    public ResponseEntity<String> executeBusinessProcessHealthInsuranceTeam(@RequestParam(name = "startDate") Date startDate, @RequestParam(name = "endDate") Date endDate)
            throws JsonProcessingException {
        healthInsuranceService.initialize();
        log.info("startDate {}", startDate);
        log.info("endDate {}", endDate);

        healthInsuranceService.getDataHealthInsuranceTeam(startDate, endDate);

        return ResponseEntity.ok().body("Processing Success");
    }

    @PostMapping("excecute-debt-process")
    public ResponseEntity<String> executeDebtProcess(@RequestParam(name = "scheduleDate") String scheduleDate) {
        
        paymentService.getDataDebt(scheduleDate);
        
        return ResponseEntity.ok().body("Processing Success");
    }
    

    @GetMapping("get-Hello-World")
    public ResponseEntity<String> getHelloWorld() {

        return ResponseEntity.ok(jbpmService.getHelloWorld());
    }
}