com.metasoft.claim.service.impl.claim.ClaimImportServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.metasoft.claim.service.impl.claim.ClaimImportServiceImpl.java

Source

/**
 * 
 */
package com.metasoft.claim.service.impl.claim;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.metasoft.claim.bean.UploadedFile;
import com.metasoft.claim.controller.vo.ImportError;
import com.metasoft.claim.dao.UserInsuranceDao;
import com.metasoft.claim.dao.claim.ClaimDao;
import com.metasoft.claim.dao.security.UserDao;
import com.metasoft.claim.dao.standard.InsuranceDao;
import com.metasoft.claim.model.JobStatus;
import com.metasoft.claim.model.SecUser;
import com.metasoft.claim.model.TblClaimRecovery;
import com.metasoft.claim.model.TblUserInsurance;
import com.metasoft.claim.service.claim.ClaimImportService;
import com.metasoft.claim.service.impl.ModelBasedServiceImpl;
import com.metasoft.claim.util.DateToolsUtil;

@Service("claimImportService")
public class ClaimImportServiceImpl extends ModelBasedServiceImpl<ClaimDao, TblClaimRecovery, Integer>
        implements ClaimImportService {

    private ClaimDao claimDao;

    @Autowired
    private InsuranceDao insuranceDao;

    @Autowired
    private UserDao userDao;

    @Autowired
    private UserInsuranceDao userInsuranceDao;

    /**
     * 
     * @param entityClass
     */
    @Autowired
    public ClaimImportServiceImpl(ClaimDao dao) {
        super(dao);
        this.claimDao = dao;
    }

    @Override
    @Transactional
    public List<ImportError> saveFromFile(UploadedFile uploadedFile, SecUser user) throws Exception {
        List<ImportError> errorClaimNumbers = new ArrayList<ImportError>();
        XSSFWorkbook workbook = null;
        try {
            InputStream input = new ByteArrayInputStream(uploadedFile.bytes);
            Date today = new Date();

            // Using XSSF for xlsx format, for xls use HSSF
            workbook = new XSSFWorkbook(input);

            Sheet sheet = workbook.getSheetAt(0);

            Iterator<Row> rowIterator = sheet.iterator();
            Row row = rowIterator.next();
            // iterating over each row
            int i = 1;
            int rowAt = 1;
            while (rowIterator.hasNext()) {
                i = 1;
                TblClaimRecovery claim = new TblClaimRecovery();

                row = rowIterator.next();
                try {
                    //                  ?   ?   ?   ?      ?             
                    claim.setClaimNumber(StringUtils.trimToNull(row.getCell(i++).getStringCellValue()));
                    claim.setPolicyNo(StringUtils.trimToNull(row.getCell(i++).getStringCellValue()));
                    claim.setLicenseNumber(StringUtils.trimToNull(row.getCell(i++).getStringCellValue()));
                    claim.setPartyLicenseNumber(StringUtils.trimToNull(row.getCell(i++).getStringCellValue()));
                    claim.setAccidentDate(row.getCell(i++).getDateCellValue());
                    claim.setMaturityDate(row.getCell(i++).getDateCellValue());
                } catch (Exception e) {
                    ImportError importError = new ImportError();
                    importError.setReason("? " + rowAt
                            + "  " + i + " ?");
                    importError.setClaimNumber(StringUtils.isEmpty(claim.getClaimNumber())
                            ? ""
                            : claim.getClaimNumber());
                    errorClaimNumbers.add(importError);
                    continue;
                }

                String partyInsuranceName = StringUtils.trimToNull(row.getCell(i++).getStringCellValue());
                if (partyInsuranceName != null) {
                    claim.setPartyInsurance(insuranceDao.findByName(partyInsuranceName));
                }

                claim.setClaimInsuranceAmount((float) row.getCell(i++).getNumericCellValue());

                if (claim.getClaimNumber() != null && claim.getPartyInsurance() != null) {
                    if (!claimDao.checkDupClaimNumber(claim.getClaimNumber())) {
                        claim.setCreateDate(today);
                        claim.setCreateBy(user);

                        claim.setJobDate(today);
                        claim.setJobStatus(JobStatus.RECEIVED);

                        List<TblUserInsurance> tblUserInsurances = userInsuranceDao
                                .searchByInsuranceId(claim.getPartyInsurance().getId());
                        if (tblUserInsurances != null && !tblUserInsurances.isEmpty()) {
                            claim.setAgent(userDao.findById(tblUserInsurances.get(0).getId().getUserId()));
                        }

                        claimDao.save(claim);

                        claim.setJobNo(DateToolsUtil.convertToString(today,
                                DateToolsUtil.DATE_PATTERN_VIEW_YYYYMMDD, DateToolsUtil.LOCALE_TH) + claim.getId());

                        claimDao.save(claim);
                    } else {
                        ImportError importError = new ImportError();
                        importError.setReason("");
                        importError.setClaimNumber(claim.getClaimNumber());
                        errorClaimNumbers.add(importError);
                    }
                } else if (claim.getClaimNumber() != null && claim.getPartyInsurance() == null) {
                    ImportError importError = new ImportError();
                    importError.setReason("?");
                    importError.setClaimNumber(claim.getClaimNumber());
                    errorClaimNumbers.add(importError);
                }

                rowAt++;
            }

            input.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (workbook != null) {
                try {
                    workbook.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return errorClaimNumbers;
    }

}