tw.edu.chit.service.impl.AdminManagerImpl.java Source code

Java tutorial

Introduction

Here is the source code for tw.edu.chit.service.impl.AdminManagerImpl.java

Source

package tw.edu.chit.service.impl;

import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.springframework.dao.DataAccessException;

import tw.edu.chit.dao.AdminDAO;
import tw.edu.chit.dao.CourseJdbcDAO;
import tw.edu.chit.dao.MemberDAO;
import tw.edu.chit.model.BankFeePay;
import tw.edu.chit.model.Clazz;
import tw.edu.chit.model.FeeCode;
import tw.edu.chit.model.FeePay;
import tw.edu.chit.model.LicenseCode;
import tw.edu.chit.model.LicenseCode961;
import tw.edu.chit.model.Parameter;
import tw.edu.chit.model.RegistrationCard;
import tw.edu.chit.model.StdImage;
import tw.edu.chit.model.StdImage4t;
import tw.edu.chit.model.Student;
import tw.edu.chit.model.SuggestionDept;
import tw.edu.chit.model.SuggestionEmail;

import tw.edu.chit.model.TempStmd;
import tw.edu.chit.model.WorkDuty;
import tw.edu.chit.model.WorkNature;
import tw.edu.chit.model.WwPass;
import tw.edu.chit.service.AdminManager;
import tw.edu.chit.service.CourseManager;
import tw.edu.chit.util.Global;
import tw.edu.chit.util.IConstants;
import static tw.edu.chit.util.IConstants.FEE_TYPE;

import com.google.gdata.client.calendar.CalendarQuery;
import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.calendar.CalendarEventEntry;
import com.google.gdata.data.calendar.CalendarEventFeed;
import com.google.gdata.util.ServiceException;

public class AdminManagerImpl extends BaseManager implements AdminManager {

    private AdminDAO dao;
    private MemberDAO memberDao;
    private CourseJdbcDAO jdbcDao;

    public void setAdminDAO(AdminDAO dao) {
        this.dao = dao;
    }

    public void setMemberDAO(MemberDAO memberDao) {
        this.memberDao = memberDao;
    }

    public void setJdbcDAO(CourseJdbcDAO jdbcDao) {
        this.jdbcDao = jdbcDao;
    }

    @SuppressWarnings("unchecked")
    public Object getObject(Class clazz, Serializable id) {
        return dao.getObject(clazz, id);
    }

    public void saveObject(Object o) {
        dao.saveObject(o);
    }

    @SuppressWarnings("unchecked")
    public void removeObject(Class clazz, Serializable id) {
        dao.removeObject(clazz, id);
    }

    @SuppressWarnings("unchecked")
    public void saveOrUpdateAll(Collection entities) throws DataAccessException {
        dao.saveOrUpdateAll(entities);
    }

    @SuppressWarnings("unchecked")
    public void deleteAll(Collection entities) throws DataAccessException {
        dao.deleteAll(entities);
    }

    @SuppressWarnings("unchecked")
    public List find(String hql, Object[] values) throws DataAccessException {
        return dao.executeSQL(hql, values);
    }

    @SuppressWarnings("unchecked")
    public List find(String hql, Object[] values, int maxsize) throws DataAccessException {
        return dao.executeSQL(hql, values, maxsize);
    }

    /**
     * 
     * @param entity
     * @param example
     * @param criterion
     * @return
     * @throws DataAccessException
     */
    @SuppressWarnings("unchecked")
    public List findSQLWithCriteria(Class entity, Example example, Projection projection, List<Order> orders,
            Criterion... criterion) throws DataAccessException {

        return findSQLWithCriteria(entity, example, projection, orders, -1, criterion);
    }

    /**
     * 
     * @param entity
     * @param example
     * @param criterion
     * @return
     * @throws DataAccessException
     */
    @SuppressWarnings("unchecked")
    public List findSQLWithCriteria(Class entity, Example example, Projection projection, List<Order> orders,
            List<Criterion> criterion) throws DataAccessException {

        return findSQLWithCriteria(entity, example, projection, orders, -1, criterion);
    }

    /**
     * 
     * @param entity
     * @param example
     * @param criterion
     * @return
     * @throws DataAccessException
     */
    @SuppressWarnings("unchecked")
    public List findSQLWithCriteria(Class entity, Example example, Projection projection, List<Order> orders,
            int limit, Criterion... criterion) throws DataAccessException {
        return dao.getSQLWithCriteria(entity, example, projection, orders, limit, criterion);
    }

    /**
     * 
     * @param entity
     * @param example
     * @param criterion
     * @return
     * @throws DataAccessException
     */
    @SuppressWarnings("unchecked")
    public List findSQLWithCriteria(Class entity, Example example, Projection projection, List<Order> orders,
            int limit, List<Criterion> criterion) throws DataAccessException {
        return dao.getSQLWithCriteria(entity, example, projection, orders, limit, criterion);
    }

    @SuppressWarnings("unchecked")
    public List<Map> findBySQL(String sql, Object[] params) {
        return jdbcDao.StandardSqlQuery(sql, params);
    }

    /**
     * ?
     */
    public List findMessagesByCategory(String category, HttpServletRequest request) {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sf.format(new Date());

        request.setAttribute("ActioName",
                jdbcDao.ezGetString("SELECT Label FROM Module WHERE Name='" + category + "'"));

        List message = jdbcDao
                .StandardSqlQuery("SELECT * FROM Message WHERE (Category='" + category + "'OR Category='All')"
                        + " AND StartDate<='" + date + "' AND DueDate>='" + date + "' ORDER BY Oid DESC");

        List messages = new ArrayList();
        Map m;
        for (int i = 0; i < message.size(); i++) {

            m = new HashMap();
            m.put("Oid", ((Map) message.get(i)).get("Oid"));
            m.put("Category", ((Map) message.get(i)).get("Category"));
            m.put("Sender", ((Map) message.get(i)).get("Sender"));
            m.put("Content", ((Map) message.get(i)).get("Content"));
            m.put("StartDate", ((Map) message.get(i)).get("StartDate"));
            m.put("DueDate", ((Map) message.get(i)).get("DueDate"));

            m.put("sub_message", jdbcDao.StandardSqlQuery(
                    "SELECT * FROM Message_feedback WHERE MessageOid='" + ((Map) message.get(i)).get("Oid") + "'"));

            m.put("title", ((Map) message.get(i)).get("title"));
            m.put("receiver", ((Map) message.get(i)).get("receiver"));
            m.put("unit", ((Map) message.get(i)).get("unit"));
            m.put("open", ((Map) message.get(i)).get("open"));

            messages.add(m);
        }
        return messages;
    }

    /**
     * ?
     */
    public List findMessagesByCategory(String category) {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sf.format(new Date());
        // request.setAttribute("ActioName",
        // jdbcDao.ezGetString("SELECT Label FROM Module WHERE Category='"+category+"'"));

        List message = jdbcDao
                .StandardSqlQuery("SELECT * FROM Message WHERE (Category='" + category + "'OR Category='All')"
                        + " AND StartDate<='" + date + "' AND DueDate>='" + date + "' ORDER BY Oid DESC");

        List messages = new ArrayList();
        Map m;
        for (int i = 0; i < message.size(); i++) {

            m = new HashMap();
            m.put("Oid", ((Map) message.get(i)).get("Oid"));
            m.put("Category", ((Map) message.get(i)).get("Category"));
            m.put("Sender", ((Map) message.get(i)).get("Sender"));
            m.put("Content", ((Map) message.get(i)).get("Content"));
            m.put("StartDate", ((Map) message.get(i)).get("StartDate"));
            m.put("DueDate", ((Map) message.get(i)).get("DueDate"));

            m.put("sub_message", jdbcDao.StandardSqlQuery(
                    "SELECT * FROM Message_feedback WHERE MessageOid='" + ((Map) message.get(i)).get("Oid") + "'"));

            m.put("title", ((Map) message.get(i)).get("title"));
            m.put("receiver", ((Map) message.get(i)).get("receiver"));
            m.put("unit", ((Map) message.get(i)).get("unit"));
            m.put("open", ((Map) message.get(i)).get("open"));

            messages.add(m);
        }
        return messages;
    }

    /**
     * ?Service
     * 
     * @param keyword The keyword
     * @return The keyword's value
     */
    public String findTermBy(String keyword) {
        Parameter parameter = dao.getParameterBy(keyword);
        if (parameter != null)
            return parameter.getValue();
        else
            return null;
    }

    public String findParameterValueByName(String name) {
        Parameter parameter = dao.getParameterBy(name);
        if (parameter != null)
            return parameter.getValue();
        else
            return "";
    }

    public void regenAdcdBySeld(String term, String campusNo, String schoolNo, String deptNo, String classNo) {

        CourseManager cm = (CourseManager) Global.context.getBean("courseManager");
        List<Clazz> classes = null;

        if (!"All".equals(classNo) && !"".equals(classNo)) {
            cm.txRegenerateAdcdByClassTerm(classNo, term);
            return;
        } else if (!"All".equals(deptNo) && !"".equals(deptNo)) {
            classes = memberDao.findClassesByCampusSchoolDeptNo(campusNo, schoolNo, deptNo);
        } else if (!"All".equals(schoolNo) && !"".equals(schoolNo)) {
            classes = memberDao.findClassesByCampusSchoolNo(campusNo, schoolNo);
        } else if (!"All".equals(campusNo)) {
            classes = memberDao.findClassesByCampusNo(campusNo);
        } else {
            classes = memberDao.findAllClasses();
        }

        for (Clazz clazz : classes) {
            try {
                cm.txRegenerateAdcdByClassTerm(clazz.getClassNo(), term);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * ????
     * 
     * @param sd
     * @return
     */
    public List<SuggestionDept> findSuggestionDeptBy(SuggestionDept sd) {
        return dao.getSuggestionDept(sd);
    }

    /**
     * 
     */
    public SuggestionDept findSuggestionDeptBy(Integer oid) {
        return (SuggestionDept) dao.getObject(SuggestionDept.class, oid);
    }

    /**
     * 
     * @param workNature
     * @return
     */
    public List<WorkNature> findWorkNatureBy(WorkNature workNature) {
        return dao.getWorkNatureBy(workNature);
    }

    /**
     * 
     * @param workDuty
     * @return
     */
    public List<WorkDuty> findWorkDutyBy(WorkDuty workDuty) {
        return dao.getWorkDutyBy(workDuty);
    }

    /**
     * 
     * @param feeCode
     * @return
     */
    public List<FeeCode> findFeeCodeBy(FeeCode feeCode) {
        return dao.getFeeCodeBy(feeCode);
    }

    /**
     * 
     * @param feePay
     * @return
     */
    public List<FeePay> findFeePayBy(FeePay feePay) {
        return dao.getFeePayBy(feePay);
    }

    /**
     * 
     * @param bankFeePay
     * @return
     */
    public List<BankFeePay> findBankFeePayBy(BankFeePay bankFeePay) {
        return dao.getBankFeePayBy(bankFeePay);
    }

    /**
     * 
     * @param service
     * @param from
     * @param to
     * @return
     * @throws ServiceException
     * @throws IOException
     */
    public CalendarEventEntry[] findCalendarEventBy(CalendarService service, DateTime from, DateTime to)
            throws ServiceException, IOException {

        URL eventFeedUrl = new URL(IConstants.GOOGLE_METAFEED_URL_BASE + IConstants.GOOGLE_EMAIL_USERNAME
                + IConstants.GOOGLE_EVENT_FEED_URL_SUFFIX);
        CalendarQuery query = new CalendarQuery(eventFeedUrl);
        query.setMinimumStartTime(from);
        query.setMaximumStartTime(to);
        query.setMaxResults(1000);
        CalendarEventFeed resultFeed = service.query(query, CalendarEventFeed.class);

        CalendarEventEntry[] entries = resultFeed.getEntries().toArray(new CalendarEventEntry[0]);
        Arrays.sort(entries, new CalendarEventEntryComparator());

        return entries;
    }

    /**
     * 
     * @param licenseCode
     * @return
     */
    public List<LicenseCode> findLicenseCodesBy(LicenseCode licenseCode) {
        return dao.getLicenseCodesBy(licenseCode);
    }

    /**
     * 
     * @param licenseCode961
     * @return
     */
    public List<LicenseCode961> findLicenseCode961sBy(LicenseCode961 licenseCode961) {
        return dao.getLicenseCode961sBy(licenseCode961);
    }

    /**
     * 
     * @param hql
     * @param values
     * @return
     * @throws DataAccessException
     */
    public int txBulkUpdate(String hql, Object[] values) throws DataAccessException {
        return dao.sqlUpdate(hql, values);
    }

    public Map<String, Object> txRegisterUpdate(List<DynaBean> beans, FEE_TYPE feeType) throws DataAccessException {

        String sql = "";
        switch (feeType) {
        case TUITION:
            /*
             * (?)
             * ??
             * ?
             * ??
             * ???
             */
            sql = "UPDATE Register SET TuitionAccountNo = ?, TuitionAmount = ?, TuitionDate = ? "
                    + "WHERE SchoolYear = ? AND SchoolTerm = ? AND (Idno = ? Or ((SerialNo=? Or RealStudentNo=?) And Type='N'))";
            break;

        case AGENCY:
            sql = "UPDATE Register SET AgencyAccountNo = ?, AgencyAmount = ?, AgencyDate = ? "
                    + "WHERE SchoolYear = ? AND SchoolTerm = ? AND (Idno = ? Or ((SerialNo=? Or RealStudentNo=?) And Type='N'))";
            break;

        case RELIEFTUITION:
            sql = "UPDATE Register SET ReliefTuitionAmount = ? "
                    + "WHERE SchoolYear = ? AND SchoolTerm = ? AND Idno = ?";
            break;

        case LOAN:
            sql = "UPDATE Register SET LoanAmount = ? " + "WHERE SchoolYear = ? AND SchoolTerm = ? AND Idno = ?";
            break;

        case VULNERABLE:
            sql = "UPDATE Register SET VulnerableAmount = ? "
                    + "WHERE SchoolYear = ? AND SchoolTerm = ? AND Idno = ?";
            break;

        default:
            break;
        }

        int counts = 0;
        StringBuilder builder = new StringBuilder();
        Map<String, Object> ret = new HashMap<String, Object>();
        for (DynaBean bean : beans) {
            switch (feeType) {
            case TUITION:
            case AGENCY:
                if (dao.sqlUpdate(sql,
                        new Object[] { (String) bean.get("accountNo"), (Integer) bean.get("amount"),
                                (Date) bean.get("payDate"), (String) bean.get("year"), (String) bean.get("term"),
                                (String) bean.get("idno"), (String) bean.get("studentNo"),
                                (String) bean.get("studentNo") }) == 0) {
                    builder.append((String) bean.get("studentNo")).append(",");
                    System.out.println((String) bean.get("idno"));
                } else
                    counts++;
                //               counts += dao.sqlUpdate(sql, new Object[] {
                //                     (String) bean.get("accountNo"),
                //                     (Integer) bean.get("amount"),
                //                     (Date) bean.get("payDate"),
                //                     (String) bean.get("year"),
                //                     (String) bean.get("term"),
                //                     (String) bean.get("idno") });
                break;

            case RELIEFTUITION:
            case LOAN:
            case VULNERABLE:
                if (dao.sqlUpdate(sql, new Object[] { (Integer) bean.get("amount"), (String) bean.get("year"),
                        (String) bean.get("term"), (String) bean.get("idno") }) == 0) {
                    builder.append((String) bean.get("studentNo")).append(",");
                    System.out.println((String) bean.get("idno"));
                } else
                    counts++;
                //               counts += dao.sqlUpdate(sql, new Object[] {
                //                     (Integer) bean.get("amount"),
                //                     (String) bean.get("year"),
                //                     (String) bean.get("term"),
                //                     (String) bean.get("idno") });
                break;
            }
        }

        ret.put("counts", counts);
        ret.put("idnos", StringUtils.substringBeforeLast(builder.toString(), ","));
        return ret;
    }

    public Map<String, String> txImportNewStudent(List<TempStmd> students) throws DataAccessException {
        Map ret = new HashMap<String, String>();
        String hql = "From Student Where studentNo=?";
        String hql_1 = "From RegistrationCard Where Oid=?";
        String hql_2 = "From WwPass Where username=?";
        String hql_3 = "From StdImage4t Where Oid=?";
        String hql_0 = "From StdImage Where studentNo=?";

        List<RegistrationCard> RegCards = new LinkedList<RegistrationCard>();
        List<WwPass> Passes = new LinkedList<WwPass>();
        List<StdImage4t> StdImg4t = new LinkedList<StdImage4t>();
        List<StdImage> StdImg = new LinkedList<StdImage>();
        List<Student> studs = new ArrayList<Student>();
        List<String> nonImport = new ArrayList<String>();
        Student student = null;
        Integer imgOid = null;
        int icnt = 0;
        String studentNo = "";

        for (TempStmd stmd : students) {
            try {
                studentNo = stmd.getStudentNo();

                //step 0.?? Stdimage4t-> StdImage
                StdImg = find(hql_0, new Object[] { studentNo });
                if (StdImg.isEmpty()) {
                    if (stmd.getImageOid() != null) {
                        StdImg4t = find(hql_3, new Object[] { stmd.getImageOid() });
                        if (!StdImg4t.isEmpty()) {
                            StdImage4t img4t = StdImg4t.get(0);
                            StdImage img = new StdImage();
                            img.setStudentNo(studentNo);
                            img.setImage(img4t.getImage());
                            dao.saveObject(img);

                            dao.reload(img);
                            imgOid = img.getOid();
                        }
                    }
                }

                //step 1.?
                studs = (List<Student>) find(hql, new Object[] { studentNo });

                if (studs.isEmpty()) {
                    student = new Student();
                    student.setDepartClass(stmd.getDepartClass());
                    student.setStudentNo(studentNo);
                    student.setStudentName(stmd.getStudentName());
                    student.setIdno(stmd.getIdno());
                    student.setSex(stmd.getSex());
                    student.setBirthday(stmd.getBirthday());
                    student.setEntrance(stmd.getEntrance());
                    student.setIdent(stmd.getIdent());
                    student.setSchlName(stmd.getSchlName() == null ? "" : stmd.getSchlName());
                    student.setSchlCode(stmd.getSchlCode() == null ? "" : stmd.getSchlCode());
                    student.setGradDept(stmd.getGradDept() == null ? "" : stmd.getGradDept());
                    student.setGradyear(stmd.getGradyear() == null ? null : stmd.getGradyear());
                    student.setGraduStatus(stmd.getGraduStatus() == null ? "" : stmd.getGraduStatus());
                    student.setCurrPost(stmd.getCurrPost() == null ? "" : stmd.getCurrPost());
                    student.setCurrAddr(stmd.getCurrAddr() == null ? "" : stmd.getCurrAddr());
                    student.setTelephone(stmd.getTelephone() == null ? "" : stmd.getTelephone());
                    student.setCellPhone(stmd.getCellPhone() == null ? "" : stmd.getCellPhone());
                    student.setParentName(stmd.getParentName() == null ? "" : stmd.getParentName());
                    student.setEmail(stmd.getEmail() == null ? "" : stmd.getEmail());
                    student.setPermPost(stmd.getPermPost() == null ? "" : stmd.getPermPost());
                    student.setPermAddr(stmd.getPermAddr() == null ? "" : stmd.getPermAddr());
                    student.setBirthCounty(stmd.getBirthCounty());
                    student.setBirthProvince(stmd.getBirthProvince());
                    student.setDivi(stmd.getDivi());
                    student.setStudentEname(stmd.getStudentEname());
                    dao.saveObject(student);

                    //step 2.RegistrationCardstudentNo
                    RegCards = find(hql_1, new Object[] { stmd.getRegistrationCardOid() });
                    if (!RegCards.isEmpty()) {
                        RegistrationCard rc = RegCards.get(0);
                        rc.setStudentNo(studentNo);
                        dao.saveObject(rc);
                    } else {
                        //Error?!
                    }

                    //setp 3.
                    Passes = find(hql_2, new Object[] { studentNo });
                    if (Passes.isEmpty()) {
                        WwPass pass = new WwPass();
                        pass.setUsername(stmd.getStudentNo());
                        pass.setPassword(stmd.getIdno());
                        pass.setInformixPass(stmd.getIdno());
                        pass.setPriority("C");
                        pass.setUpdated(Calendar.getInstance().getTime());
                        dao.saveObject(pass);
                    }
                    icnt++;

                } else {
                    nonImport.add(studentNo);

                    //
                    Passes = find(hql_2, new Object[] { studentNo });
                    if (Passes.isEmpty()) {
                        WwPass pass = new WwPass();
                        pass.setUsername(stmd.getStudentNo());
                        pass.setPassword(stmd.getIdno());
                        pass.setInformixPass(stmd.getIdno());
                        pass.setPriority("C");
                        pass.setUpdated(Calendar.getInstance().getTime());
                        dao.saveObject(pass);
                    }
                }

            } catch (DataAccessException e) {
                log.error(e.toString());
                //ret.put("error", stmd.getStudentNo());
                //return ret;
                throw e;
            }
        }
        ret.put("importCount", icnt);
        ret.put("nonImport", nonImport);
        return ret;
    }

    /**
     * 
     * @author Oscar Wei
     * 
     */
    private class CalendarEventEntryComparator implements Comparator<CalendarEventEntry> {

        @Override
        public int compare(CalendarEventEntry entry1, CalendarEventEntry entry2) {
            DateTime starttime1 = entry1.getTimes().get(0).getStartTime();
            DateTime starttime2 = entry2.getTimes().get(0).getStartTime();
            return starttime1.compareTo(starttime2);
        }

    }

}