com.itd.dbmrgdao.TestTime_newscanner_backup.java Source code

Java tutorial

Introduction

Here is the source code for com.itd.dbmrgdao.TestTime_newscanner_backup.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.itd.dbmrgdao;

import com.itd.common.dao.EmployeeDropDownDao;
import com.itd.common.dao.GennericDao;
import com.itd.regis.db.entity.ScanData;
import com.itd.regis.db.entity.ScanDataKey;
import com.itd.regis.db.entity.ScanRule;
import com.itd.scan.dao.ScanDao;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author Administrator Test if employee punch either time-in or timeout will
 * credit 8:00 and 17:00
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/config/BeanLocations.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@Transactional
public class TestTime_newscanner_backup {

    @Autowired
    ScanDao scanDao;

    @Autowired
    GennericDao<ScanData> gennericDao;

    //    @Ignore
    //    @org.junit.Test
    //    public void test1() {
    //
    //        String sysid_sdate = "19870001520140710";
    //
    //        String sysid = sysid_sdate.substring(0, 9);
    //
    //        String sdate = new StringBuffer(sysid_sdate).substring(9);
    //        sdate = new StringBuffer(sdate).insert(sdate.length() - 2, "-").toString();
    //        sdate = new StringBuffer(sdate).insert(sdate.length() - 5, "-").toString();
    //
    //        System.out.println(sysid);
    //        System.out.println(sdate);
    //
    //        ScanData scanData = scanDao.findScanDataBySysId_Sdate(sysid, sdate);
    //
    //        System.out.println(scanData);
    //
    //    }

    @Ignore
    @org.junit.Test
    public void test() throws ParseException {

        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Text File", "txt");
        chooser.setFileFilter(filter);
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();

        String fileName = f.getAbsolutePath();
        try {
            FileReader reader = new FileReader(fileName);
            BufferedReader br = new BufferedReader(reader);
            String strLine;

            Boolean result = updateScanFileRoundUp2(br);

            br.close();

        } catch (IOException ex) {

        }

    }

    private Boolean updateScanFileRoundUp2(BufferedReader br) {
        try {

            String strLine;
            String sysid = null, scdate = null, p1Start = null, p2End = null;
            String scode = "1985";
            ScanRule scanRule = null;
            StringBuilder insertSQL = new StringBuilder(
                    "INSERT INTO scandata(sc_sysid,sc_scode,scdate,p1start,p2end) VALUES ");
            StringBuilder deleteSQL = new StringBuilder("DELETE FROM scandata WHERE (sc_sysid,scdate) IN (");

            // read from select file
            for (strLine = br.readLine(); strLine != null; strLine = br.readLine()) {

                String parts[] = new String[7];

                parts[1] = strLine.substring(3, 11); // date
                parts[5] = strLine.substring(11, 15); // time
                parts[5] = new StringBuffer(parts[5]).insert(parts[5].length() - 2, ":").toString();
                parts[0] = strLine.substring(18, 27); // systemid
                //                parts[6] = "01"; // time in or time out  
                scanRule = scanDao.findScanRuleBySysId(parts[0]);

                parts[6] = FindInOut(parts[5], scanRule.getP1break_st());

                if (sysid != null && !sysid.equals(parts[0])) {

                    if (p1Start == null || p1Start.isEmpty()) {
                        p1Start = scanRule.getP1start();
                    } else {
                        p1Start = CompareTime(p1Start, scanRule.getP1start(), "01");
                    }

                    // ?? ? ? table scan rule  code
                    if (p2End == null || p2End.isEmpty()) {
                        //if not punch out Monthly or Daily will automatic p2End startdart time
                        p2End = scanRule.getP2end();
                    } else {
                        p2End = CompareTime(p2End, scanRule.getP2end(), "04");

                        if (scanRule.getCalcot().equals("Y")) {
                            //check if 10 min roundup
                            // >= 50 will 60, < 50 and >= 20 will 30 , < 20 will be 00
                            p2End = MinRoundUp(p2End);

                        }
                    }

                    deleteSQL = deleteSQL.append(" ('").append(sysid).append("','").append(scdate).append("'),");

                    insertSQL = insertSQL.append(" ('").append(sysid).append("','").append(scode).append("','")
                            .append(scdate).append("','").append(p1Start).append("','").append(p2End).append("'),");

                    p1Start = null;
                    p2End = null;

                }

                //clear 
                sysid = parts[0];
                scdate = new StringBuffer(parts[1]).insert(parts[1].length() - 2, "-").toString();
                scdate = new StringBuffer(scdate).insert(scdate.length() - 5, "-").toString();

                //                String timeString = new StringBuffer(parts[5]).insert(parts[5].length() - 2, ":").toString();

                // ?? ? ? table scan rule  code
                if (parts[6].equals("01")) {
                    p1Start = CompareTime(p1Start, parts[5], "01");
                } else {
                    p2End = CompareTime(p2End, parts[5], "04");
                }

            }

            String result;
            // executeSQL delete scandata
            result = ReplaceRightString(deleteSQL.toString(), ",", ")");
            scanDao.executeSQL(result);

            // executeSQL insert scandata
            result = ReplaceRightString(insertSQL.toString(), ",", "");
            scanDao.executeSQL(result);

            br.close();
            return true;

        } catch (IOException | ParseException e) {
            JOptionPane.showMessageDialog(null, e);
        }
        return false;
    }

    private String ReplaceRightString(String org, String search, String sub) {
        int i = org.lastIndexOf(search);
        String result = org.substring(0, i);
        result = result + sub;
        result = result + org.substring(i + search.length());
        return result;
    }

    private String MinRoundUp(String myTime) {

        try {
            SimpleDateFormat parser1 = new SimpleDateFormat("HH:mm");
            Date date1 = parser1.parse(myTime);

            String compareTime = myTime.substring(0, 2) + ":00";

            SimpleDateFormat parser2 = new SimpleDateFormat("HH:mm");
            Date date2 = parser2.parse(compareTime);

            long diffInMins = Math.abs(date1.getTime() - date2.getTime()) / 60000;

            long ONE_MINUTE_IN_MILLIS;

            Date afterAddingMins;

            if (diffInMins >= 50) {
                ONE_MINUTE_IN_MILLIS = 60000 * (60 - diffInMins);
            } else if (diffInMins >= 20) {
                ONE_MINUTE_IN_MILLIS = 60000 * (30 - diffInMins);
            } else {
                ONE_MINUTE_IN_MILLIS = 60000 * (-1 * diffInMins);
            }

            afterAddingMins = new Date(date1.getTime() + (ONE_MINUTE_IN_MILLIS));

            SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");

            return timeFormat.format(afterAddingMins);

        } catch (ParseException ex) {

        }

        return "";
    }

    String CompareTime(String a, String b, String operator) throws ParseException {

        if (a == null) {
            return b;
        }

        SimpleDateFormat parser1 = new SimpleDateFormat("HH:mm");
        Date x = parser1.parse(a);
        Date y = parser1.parse(b);

        try {
            // The Magic happens here i only get the Time out of the Date Object
            SimpleDateFormat parser2 = new SimpleDateFormat("HH:mm");
            x = parser2.parse(parser2.format(x));
            y = parser2.parse(parser2.format(y));

        } catch (ParseException ex) {
            System.err.println(ex);
        }

        switch (operator) {
        case "01":
            return ((x.compareTo(y) <= 0) ? a : b);
        case "04":
            return ((x.compareTo(y) >= 0) ? a : b);
        default:
            throw new IllegalArgumentException("Operator " + operator + " not fould in control!");
        }
    }

    String FindInOut(String a, String b) throws ParseException {

        //        if (a == null) {
        //            return b;
        //        }

        SimpleDateFormat parser1 = new SimpleDateFormat("HH:mm");
        Date x = parser1.parse(a);
        Date y = parser1.parse(b);

        try {
            // The Magic happens here i only get the Time out of the Date Object
            SimpleDateFormat parser2 = new SimpleDateFormat("HH:mm");
            x = parser2.parse(parser2.format(x));
            y = parser2.parse(parser2.format(y));

        } catch (ParseException ex) {
            System.err.println(ex);
        }

        return ((x.compareTo(y) <= 0) ? "01" : "04");

    }
}