com.creditcloud.carinsurance.CarInsuranceRepaymentServiceBean.java Source code

Java tutorial

Introduction

Here is the source code for com.creditcloud.carinsurance.CarInsuranceRepaymentServiceBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.creditcloud.carinsurance;

import com.creditcloud.carinsurance.api.CarInsuranceRepaymentService;
import com.creditcloud.carinsurance.entities.CarInsurance;
import com.creditcloud.carinsurance.entities.CarInsuranceRepayment;
import com.creditcloud.carinsurance.entities.dao.CarInsuranceDAO;
import com.creditcloud.carinsurance.entities.dao.CarInsuranceFeeDAO;
import com.creditcloud.carinsurance.entities.dao.CarInsuranceRepaymentDAO;
import com.creditcloud.carinsurance.local.ApplicationBean;
import com.creditcloud.carinsurance.local.CarInsuranceFeeLocalBean;
import com.creditcloud.carinsurance.model.CarInsuranceModel;
import com.creditcloud.carinsurance.model.CarInsuranceRepaymentModel;
import com.creditcloud.carinsurance.model.enums.CarInsuranceStatus;
import com.creditcloud.carinsurance.model.results.RepayCarInsuranceResult;
import com.creditcloud.carinsurance.utils.CarInsuranceDTOUtils;
import com.creditcloud.config.api.ConfigManager;
import com.creditcloud.model.criteria.PageInfo;
import com.creditcloud.model.misc.PagedResult;
import com.creditcloud.model.user.User;
import com.creditcloud.user.api.UserService;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.inject.Inject;
import org.joda.time.LocalDate;
import org.slf4j.Logger;

/**
 *  
 *
 * @author Administrator
 */
@Remote
@Stateless
public class CarInsuranceRepaymentServiceBean implements CarInsuranceRepaymentService {

    @Inject
    Logger logger;

    @EJB
    ApplicationBean appBean;

    @EJB
    private CarInsuranceRepaymentDAO carInsuranceRepaymentDAO;

    @EJB
    private CarInsuranceDAO carInsuranceDAO;

    @EJB
    private CarInsuranceFeeDAO carInsuranceFeeDAO;

    @EJB
    UserService userService;

    @EJB
    private ConfigManager configManager;

    @EJB
    private CarInsuranceFeeLocalBean carInsuranceFeeLocalBean;

    /**
     *
     * @?
     */
    @Override
    public List<CarInsuranceRepaymentModel> getAll() {
        List<CarInsuranceRepayment> repayments = carInsuranceRepaymentDAO.findAll();
        List<CarInsuranceRepaymentModel> list = new ArrayList<CarInsuranceRepaymentModel>();
        for (CarInsuranceRepayment repayment : repayments) {
            BigDecimal penaltyAmount = carInsuranceFeeLocalBean.overdueFee(repayment);
            repayment.setAmountInterest(penaltyAmount);
            CarInsurance carInsurance = repayment.getCarInsurance();
            User user = userService.findByUserId(appBean.getClientCode(), carInsurance.getUserId());
            CarInsuranceModel carInsuranceModel = CarInsuranceDTOUtils.convertCarInsuranceDTO(carInsurance, user);
            //?
            CarInsuranceRepaymentModel crm = new CarInsuranceRepaymentModel(repayment.getId(),
                    repayment.getAmountInterest(), repayment.getAmountBreach(), carInsuranceModel,
                    repayment.getCurrentPeriod(), repayment.getDueDate(), repayment.getAmountPrincipal(),
                    repayment.getStatus(), repayment.getRepayAmount(), repayment.getRepayDate(),
                    repayment.getOrderId());
            list.add(crm);
        }
        return list;
    }

    /**
     *
     * ?id
     *
     * @param id
     * @return
     */
    @Override
    public CarInsuranceRepaymentModel getCarInsuranceRepaymentModelById(String id) {
        CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.findById(id);
        BigDecimal penaltyAmount = carInsuranceFeeLocalBean.overdueFee(repayment);
        repayment.setAmountInterest(penaltyAmount);
        User user = userService.findByUserId(appBean.getClientCode(), repayment.getCarInsurance().getUserId());
        CarInsuranceRepaymentModel model = CarInsuranceDTOUtils.convertCarInsuranceRepaymentDTO(repayment, user);
        return model;
    }

    /**
     * 
     *
     * @param model
     */
    @Override
    public void updateCarInsuranceRepaymentModel(CarInsuranceRepaymentModel model) {
        CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.findById(model.getId());
        if (repayment != null) {
            repayment.setRepayAmount(model.getRepayAmount());
            repayment.setStatus(model.getStatus());
            repayment.setRepayDate(model.getRepayDate());
            //?
            carInsuranceRepaymentDAO.edit(repayment);
        } else {
            logger.debug(
                    " CarInsuranceRepayment not exist or deleted \n CarInsuranceRepaymentID:{}",
                    model.getId());
        }
    }

    @Override
    public void updateCarInsuranceRepaymentModelFoyOrderId(CarInsuranceRepaymentModel model) {
        CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.findById(model.getId());
        if (repayment != null) {
            repayment.setOrderId(model.getOrderId());
            //orderId
            carInsuranceRepaymentDAO.edit(repayment);
        } else {
            logger.debug(
                    " CarInsuranceRepayment not exist or deleted \n CarInsuranceRepaymentID:{}",
                    model.getId());
        }
    }

    @Override
    public synchronized RepayCarInsuranceResult repay(String repaymentId) {
        CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.findById(repaymentId);
        /**
         * @ feeAmount ?
         * @ ??*0.8%/?
         */
        boolean islast = false;
        String insuranceNum = "";
        BigDecimal penaltyAmount = new BigDecimal(0);
        if (repayment != null) {
            penaltyAmount = carInsuranceFeeLocalBean.overdueFee(repayment);
            //?? ? ??
            CarInsurance carInsurance = repayment.getCarInsurance();
            switch (repayment.getStatus()) {
            case INITIATED:
                break;
            case PAYING:
                repayment.setRepayDate(new Date());
                //1 ???  
                //???? ??0
                repayment.setAmountInterest(penaltyAmount);
                repayment.setRepayAmount(repayment.getAmountPrincipal().add(penaltyAmount));
                repayment.setStatus(CarInsuranceStatus.CLEARED);
                carInsuranceRepaymentDAO.edit(repayment);

                insuranceNum = carInsurance.getInsuranceNum();
                //2 ??
                switch (carInsurance.getDurationType()) {
                case THREEMONTH:
                    if (repayment.getCurrentPeriod() == 3) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case SIXMONTH:
                    if (repayment.getCurrentPeriod() == 6) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case TENMONTH:
                    if (repayment.getCurrentPeriod() == 10) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                default:
                    logger.info(
                            "???,?????.");
                    break;
                }
                carInsuranceDAO.edit(carInsurance);
                break;
            case OVERDUE:
                //
                penaltyAmount = carInsuranceFeeLocalBean.overdueFee(repayment);
                repayment.setAmountInterest(penaltyAmount);
                repayment.setRepayAmount(repayment.getAmountPrincipal().add(penaltyAmount));
                repayment.setRepayDate(new Date());
                repayment.setStatus(CarInsuranceStatus.CLEARED);
                carInsuranceRepaymentDAO.edit(repayment);

                insuranceNum = carInsurance.getInsuranceNum();
                //2 ??
                switch (carInsurance.getDurationType()) {
                case THREEMONTH:
                    if (repayment.getCurrentPeriod() == 3) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case SIXMONTH:
                    if (repayment.getCurrentPeriod() == 6) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case TENMONTH:
                    if (repayment.getCurrentPeriod() == 10) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                default:
                    logger.info(
                            "???,?????.");
                    break;
                }
                carInsuranceDAO.edit(carInsurance);
                break;
            case CLEARED:
                break;
            case BREACH:
                break;
            case ARCHIVED:
                break;
            case CANCELED:
                break;
            default:

            }

        }
        User user = userService.findByUserId(appBean.getClientCode(), repayment.getCarInsurance().getUserId());
        CarInsuranceRepaymentModel repaymentModel = CarInsuranceDTOUtils.convertCarInsuranceRepaymentDTO(repayment,
                user);
        return new RepayCarInsuranceResult(islast, insuranceNum, repaymentModel);
    }

    /**
     * ???
     *
     * @param repaymentId
     * @return
     */
    @Override
    public synchronized RepayCarInsuranceResult advanceRepay(String repaymentId, BigDecimal breachAmount) {
        CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.findById(repaymentId);
        /**
         * @ feeAmount ?
         * @ ??*0.8%/?
         */
        boolean islast = false;
        String insuranceNum = "";
        BigDecimal penaltyAmount = new BigDecimal(0);
        if (repayment != null) {
            penaltyAmount = carInsuranceFeeLocalBean.overdueFee(repayment);
            //?? ? ??
            CarInsurance carInsurance = repayment.getCarInsurance();

            switch (repayment.getStatus()) {
            case INITIATED:
                break;
            case PAYING:
                repayment.setRepayDate(new Date());
                repayment.setAmountBreach(breachAmount);
                //1 ???  
                //???? ??0
                repayment.setAmountInterest(penaltyAmount);
                repayment.setRepayAmount(repayment.getAmountPrincipal().add(penaltyAmount));
                repayment.setStatus(CarInsuranceStatus.CLEARED);
                carInsuranceRepaymentDAO.edit(repayment);
                insuranceNum = carInsurance.getInsuranceNum();
                //2 ??
                switch (carInsurance.getDurationType()) {
                case THREEMONTH:
                    if (repayment.getCurrentPeriod() == 3) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case SIXMONTH:
                    if (repayment.getCurrentPeriod() == 6) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case TENMONTH:
                    if (repayment.getCurrentPeriod() == 10) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                default:
                    logger.info(
                            "???,?????.");
                    break;
                }
                carInsuranceDAO.edit(carInsurance);
                break;
            case OVERDUE:
                //
                penaltyAmount = carInsuranceFeeLocalBean.overdueFee(repayment);
                repayment.setAmountInterest(penaltyAmount);
                repayment.setRepayAmount(repayment.getAmountPrincipal().add(penaltyAmount));
                repayment.setRepayDate(new Date());
                repayment.setStatus(CarInsuranceStatus.CLEARED);
                carInsuranceRepaymentDAO.edit(repayment);

                insuranceNum = carInsurance.getInsuranceNum();
                //2 ??
                switch (carInsurance.getDurationType()) {
                case THREEMONTH:
                    if (repayment.getCurrentPeriod() == 3) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case SIXMONTH:
                    if (repayment.getCurrentPeriod() == 6) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                case TENMONTH:
                    if (repayment.getCurrentPeriod() == 10) {
                        islast = true;
                        //?
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.CLEARED);
                    } else {
                        carInsurance.setCarInsuranceStatus(CarInsuranceStatus.PAYING);
                    }
                    break;
                default:
                    logger.info(
                            "???,?????.");
                    break;
                }
                carInsuranceDAO.edit(carInsurance);
                break;
            case CLEARED:
                break;
            case BREACH:
                break;
            case ARCHIVED:
                break;
            case CANCELED:
                break;
            default:

            }

        }
        User user = userService.findByUserId(appBean.getClientCode(), repayment.getCarInsurance().getUserId());
        CarInsuranceRepaymentModel repaymentModel = CarInsuranceDTOUtils.convertCarInsuranceRepaymentDTO(repayment,
                user);
        return new RepayCarInsuranceResult(islast, insuranceNum, repaymentModel);
    }

    /**
     * ?orderID?
     *
     * @param orderId
     * @return
     */
    @Override
    public CarInsuranceRepaymentModel getCarInsuranceRepaymentModelByOrderId(String orderId) {
        CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.findByOrderId(orderId);
        CarInsuranceRepaymentModel model = null;
        if (repayment != null) {
            User user = userService.findByUserId(appBean.getClientCode(), repayment.getCarInsurance().getUserId());
            model = CarInsuranceDTOUtils.convertCarInsuranceRepaymentDTO(repayment, user);
        }
        return model;
    }

    /**
     * 
     *
     * @param clientCode
     * @param from
     * @param to
     * @param pageInfo
     * @param status
     * @return
     */
    @Override
    public PagedResult<CarInsuranceRepaymentModel> listDueRepay(String clientCode, LocalDate from, LocalDate to,
            PageInfo pageInfo, CarInsuranceStatus... status) {
        appBean.checkClientCode(clientCode);
        logger.debug("listDueRepay.[clientCode={}][from={}][to={}][pageInfo={}][status={}]", clientCode, from, to,
                pageInfo, Arrays.asList(status));
        PagedResult<CarInsuranceRepayment> repayments = carInsuranceRepaymentDAO.listDueRepay(from.toDate(),
                to.toDate(), pageInfo, status);
        List<CarInsuranceRepaymentModel> result = new ArrayList<>(repayments.getResults().size());
        for (CarInsuranceRepayment repayment : repayments.getResults()) {
            User user = userService.findByUserId(appBean.getClientCode(), repayment.getCarInsurance().getUserId());
            CarInsuranceRepaymentModel model = CarInsuranceDTOUtils.convertCarInsuranceRepaymentDTO(repayment,
                    user);
            result.add(model);
        }
        return new PagedResult<>(result, repayments.getTotalSize());
    }

    @Override
    public boolean markStatus(String clientCode, CarInsuranceStatus status, String... repayIds) {
        appBean.checkClientCode(clientCode);
        carInsuranceRepaymentDAO.markStatus(status, repayIds);
        //??
        Set<String> carInsurances = new HashSet<>();
        for (String id : repayIds) {
            CarInsuranceRepayment repayment = carInsuranceRepaymentDAO.find(id);
            carInsurances.add(repayment.getCarInsurance().getId());
        }
        if (!carInsurances.isEmpty()) {
            //
            switch (status) {
            case OVERDUE:
                carInsuranceDAO.markStatus(CarInsuranceStatus.OVERDUE,
                        carInsurances.toArray(new String[carInsurances.size()]));
                break;
            case BREACH:
                carInsuranceDAO.markStatus(CarInsuranceStatus.BREACH,
                        carInsurances.toArray(new String[carInsurances.size()]));
                break;
            }
        }
        return true;
    }

}