org.openurp.edu.other.web.action.OtherExamSignUpStatAction.java Source code

Java tutorial

Introduction

Here is the source code for org.openurp.edu.other.web.action.OtherExamSignUpStatAction.java

Source

/*
 * OpenURP, Agile Development Scaffold and Toolkit
 *
 * Copyright (c) 2005-2015, OpenURP Software.
 *
 * OpenURP is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * OpenURP is distributed in the hope that it will be useful.
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OpenURP.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.openurp.edu.other.web.action;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;
import org.beangle.commons.collection.CollectUtils;
import org.beangle.commons.collection.Order;
import org.beangle.commons.dao.query.builder.OqlBuilder;
import org.beangle.commons.entity.metadata.Model;
import org.beangle.commons.lang.Strings;
import org.beangle.struts2.convention.route.Action;
import org.openurp.base.model.Department;
import org.openurp.base.model.Semester;
import org.openurp.edu.base.model.Student;
import org.openurp.edu.eams.util.stat.StatGroup;
import org.openurp.edu.eams.util.stat.StatHelper;
import org.openurp.edu.other.code.model.OtherExamCategory;
import org.openurp.edu.other.code.model.OtherExamSubject;
import org.openurp.edu.other.model.OtherExamSignUp;
import org.openurp.edu.other.model.OtherExamSignUpConfig;
import org.openurp.edu.other.model.OtherExamSignUpSetting;
import org.openurp.edu.other.model.OtherGrade;
import org.openurp.edu.other.model.SignUpStat;
import org.openurp.edu.web.action.SemesterSupportAction;

public class OtherExamSignUpStatAction extends SemesterSupportAction {

    @Override
    protected String getEntityName() {
        return OtherExamSignUp.class.getName();
    }

    @Override
    protected void indexSetting() {
        put("otherExamSubjects", codeService.getCodes(OtherExamSubject.class));
        put("otherExamCategories", codeService.getCodes(OtherExamCategory.class));
        getSemester();
    }

    public String search() {
        return forward(new Action("signUpInfo"));
    }

    /**
     * ??
     * 
     * @return
     */
    @SuppressWarnings("unchecked")
    public String signUpInfo() {
        Long semester = getLong("otherExamSignUp.semester.id");
        Integer subject = getInt("otherExamSignUp.subject.id");
        Integer category = getInt("otherExamSignUp.subject.category.id");
        OqlBuilder<?> query = OqlBuilder.from(OtherExamSignUp.class, "otherExamSignUp");
        // if(semester!=null||semester!=""||semester!="..."||category!=null||category!="..."||category!=""||subject!=null){
        if (semester != null) {
            query.where("otherExamSignUp.semester.id =:semester", semester);
        }
        if (category != null && subject != null) {
            query.where("otherExamSignUp.subject.category.id =:category", category);
            query.where("otherExamSignUp.subject.id =:subject", subject);
        } else {
            if (subject != null) {
                query.where("otherExamSignUp.subject.id =:subject", subject);
            }

        }
        query.select(
                "otherExamSignUp.semester.schoolYear,otherExamSignUp.semester.name,otherExamSignUp.subject.name,otherExamSignUp.subject.category.name,"
                        + "count(*)," + "sum(otherExamSignUp.feeOfOutline)," + "sum(otherExamSignUp.feeOfMaterial),"
                        + "sum(otherExamSignUp.feeOfSignUp)," + "otherExamSignUp.semester.id,"
                        + "otherExamSignUp.subject.id");
        query.groupBy(
                "otherExamSignUp.semester.schoolYear,otherExamSignUp.semester.name,otherExamSignUp.subject.name,otherExamSignUp.subject.category.name,otherExamSignUp.semester.id,otherExamSignUp.subject.id");
        populateConditions(query);
        Integer semesterId = getInt("semester.id");
        if (null != semesterId) {
            query.where("otherExamSignUp.semester.id=:semesterId", semesterId);
            getSemester();
        }
        query.limit(getPageLimit());
        query.orderBy(Order.parse(get("orderBy")));
        List<Object[]> rows = (List<Object[]>) entityDao.search(query);
        List<SignUpStat> signUpStatlist = CollectUtils.newArrayList(rows.size());
        Iterator<Object[]> iter = rows.iterator();
        Object[] signUpObject;
        SignUpStat signUpStat;

        OqlBuilder<OtherExamSignUpSetting> settingQuery = OqlBuilder.from(OtherExamSignUpSetting.class, "setting");
        List<OtherExamSignUpSetting> list2 = entityDao.search(settingQuery);
        while (iter.hasNext()) {
            signUpObject = iter.next();
            signUpStat = new SignUpStat();

            OtherExamSignUpSetting setting = null;
            for (int i1 = 0; i1 < list2.size(); i1++) {
                if (list2.get(i1).getConfig().getSemester().getId() == signUpObject[8]
                        && list2.get(i1).getSubject().getId() == signUpObject[9]) {
                    setting = list2.get(i1);
                    break;
                }
            }
            if (setting == null) {
                setting = Model.newInstance(OtherExamSignUpSetting.class);
                setting.setFeeOfMaterial(0.0);
                setting.setFeeOfOutline(0.0);
                setting.setFeeOfSignUp(0.0);

            }

            signUpStat.setSchoolYear(signUpObject[0].toString());
            signUpStat.setSemesterName(signUpObject[1].toString());
            signUpStat.setSubjectName(signUpObject[2].toString());
            signUpStat.setCategoryName(signUpObject[3].toString());
            signUpStat.setCount(signUpObject[4].toString());
            signUpStat.setSumOfOutline((Long) signUpObject[4] * setting.getFeeOfOutline());
            signUpStat.setSumOfMaterial((Long) signUpObject[4] * setting.getFeeOfMaterial());
            signUpStat.setSumOfSignUp((Long) signUpObject[4] * setting.getFeeOfSignUp());
            signUpStatlist.add(signUpStat);
        }
        put("signUpStats", signUpStatlist);
        put("otherExamSubjects", codeService.getCodes(OtherExamSubject.class));
        put("otherExamCategories", codeService.getCodes(OtherExamCategory.class));
        put("otherExamSignUpConfigs", entityDao.getAll(OtherExamSignUpConfig.class));
        put("semesters", entityDao.getAll(Semester.class));
        return forward("signUpInfo");
    }

    // ??
    // @SuppressWarnings("unchecked")
    // public String signUpInfo() {
    // Long semester = getLong("otherExamSignUp.semester.id");
    // Long subject = getLong("otherExamSignUp.subject.id");
    // Long category = getLong("otherExamSignUp.subject.category.id");
    // OqlBuilder<?> query = OqlBuilder.from(OtherExamSignUp.class, "otherExamSignUp");
    // //
    // if(semester!=null||semester!=""||semester!="..."||category!=null||category!="..."||category!=""||subject!=null){
    // if (semester != null) {
    // query.where("otherExamSignUp.semester.id =:semester", semester);
    // }
    // if (category != null && subject != null) {
    // query.where("otherExamSignUp.subject.category.id =:category", category);
    // query.where("otherExamSignUp.subject.id =:subject", subject);
    // } else {
    // if (subject != null) {
    // query.where("otherExamSignUp.subject.id =:subject", subject);
    // }
    //
    // }
    // query.select("otherExamSignUp.semester.schoolYear,otherExamSignUp.semester.name,otherExamSignUp.subject.name,otherExamSignUp.subject.category.name,"
    // + "count(*),"
    // + "sum(otherExamSignUp.feeOfOutline),"
    // + "sum(otherExamSignUp.feeOfMaterial),"
    // + "sum(otherExamSignUp.feeOfSignUp)");
    // query.groupBy("otherExamSignUp.semester.schoolYear,otherExamSignUp.semester.name,otherExamSignUp.subject.name,otherExamSignUp.subject.category.name");
    // populateConditions(query);
    // query.limit(getPageLimit());
    // query.orderBy(Order.parse(get("orderBy")));
    // List<Object[]> list = (List<Object[]>) entityDao.search(query);
    // List<SignUpStat> signUpStatlist = CollectUtils.newArrayList(list.size());
    // Iterator<Object[]> iter = list.iterator();
    // Object[] signUpObject;
    // SignUpStat signUpStat;
    // while (iter.hasNext()) {
    // signUpObject = iter.next();
    // signUpStat = new SignUpStat();
    // signUpStat.setSchoolYear(signUpObject[0].toString());
    // signUpStat.setSemesterName(signUpObject[1].toString());
    // signUpStat.setSubjectName(signUpObject[2].toString());
    // signUpStat.setCategoryName(signUpObject[3].toString());
    // signUpStat.setCount(signUpObject[4].toString());
    // signUpStat.setSumOfOutline((Double) signUpObject[5]);
    // signUpStat.setSumOfMaterial((Double) signUpObject[6]);
    // signUpStat.setSumOfSignUp((Double) signUpObject[7]);
    // signUpStatlist.add(signUpStat);
    // }
    // put("signUpStats", signUpStatlist);
    // put("otherExamSubjects", codeService.getCodes(OtherExamSubject.class));
    // put("otherExamCategories", codeService.getCodes(OtherExamCategory.class));
    // put("otherExamSignUpConfigs", entityDao.get(OtherExamSignUpConfig.class));
    // put("semesters", entityDao.get(Semester.class));
    // return forward();
    // }

    /*
     * @SuppressWarnings("unchecked")
     * public String statGrade() {
     * String grade = get("otherExamSignUp.std.grade");
     * Long subjectId = getLong("otherExamSignUp.subject.id");
     * Long categoryId = getLong("otherExamSignUp.subject.category.id");
     * // OqlBuilder<OtherExamSignUp> query = OqlBuilder.from(OtherExamSignUp.class,
     * // "otherExamSignUp");
     * OqlBuilder<?> stdQuery = OqlBuilder.from(Student.class, "std");
     * OqlBuilder<?> gradeQuery = OqlBuilder.from(OtherGrade.class, "grade");
     * if (Strings.isNotEmpty(grade)) {
     * stdQuery.where("std.grade like :grade", grade);
     * gradeQuery.where("grade.std.grade like :grade", grade);
     * }
     * stdQuery.select("std.department.id,count(*)");
     * stdQuery.groupBy("std.department.id");
     * stdQuery.where("std.department is not null");
     * gradeQuery.where("grade.std.department is not null");
     * gradeQuery.where("grade.passed is true");
     * List<OtherExamSubject> subjects = CollectUtils.newArrayList();
     * if (null != subjectId) {
     * gradeQuery.where("grade.subject.id=:subjectId", subjectId);
     * subjects.add(codeService.getCode(OtherExamSubject.class, subjectId));
     * } else {
     * OqlBuilder<OtherExamSubject> categoryQuery = OqlBuilder.from(OtherExamSubject.class,
     * "subject");
     * if (null != categoryId) {
     * categoryQuery.where("subject.category.id=:categoryId", categoryId);
     * gradeQuery.where("grade.subject.category.id=:categoryId", categoryId);
     * }
     * subjects = entityDao.search(categoryQuery);
     * }
     * put("subjects", subjects);
     * gradeQuery.select("grade.std.department.id,grade.subject.id,count(*)");
     * gradeQuery.groupBy("grade.std.department.id,grade.subject.id");
     * List<Object[]> datas = (List<Object[]>) entityDao.search(stdQuery);
     * new StatHelper(entityDao).replaceIdWith(datas, new Class[] { Department.class });
     * Map<String, Object> departMap = CollectUtils.newHashMap();
     * for (Object[] data : datas) {
     * if (data[0] != null) {
     * departMap.put(((Department) data[0]).getId().toString(), data);
     * } else {
     * departMap.put("", data);
     * }
     * }
     * List<Object[]> data2 = (List<Object[]>) entityDao.search(gradeQuery);
     * new StatHelper(entityDao).replaceIdWith(data2, new Class[] { Department.class,
     * OtherExamCategory.class });
     * List<StatGroup> statGroups = StatGroup.buildStatGroups(data2);
     * Map<String, StatGroup> gradeMap = CollectUtils.newHashMap();
     * for (StatGroup g : statGroups) {
     * gradeMap.put(((Department) g.getWhat()).getId().toString(), g);
     * }
     * put("departMap", departMap);
     * put("gradeMap", gradeMap);
     * return forward();
     * }
     */
    @SuppressWarnings("unchecked")
    public String statGrade() {
        String grade = get("otherExamSignUp.std.grade");
        Integer subjectId = getInt("otherExamSignUp.subject.id");
        Integer categoryId = getInt("otherExamSignUp.subject.category.id");
        // OqlBuilder<OtherExamSignUp> query = OqlBuilder.from(OtherExamSignUp.class,
        // "otherExamSignUp");
        OqlBuilder<?> stdQuery = OqlBuilder.from(Student.class, "std");
        OqlBuilder<?> gradeQuery = OqlBuilder.from(OtherGrade.class, "grade");
        if (Strings.isNotEmpty(grade)) {
            stdQuery.where("std.grade like :grade", grade);
            gradeQuery.where("grade.std.grade like :grade", grade);
        }
        stdQuery.select("std.department.id,count(*)");
        stdQuery.groupBy("std.department.id");
        stdQuery.where("std.department is not null");
        gradeQuery.where("grade.std.department is not null");
        gradeQuery.where("grade.passed is true");
        List<OtherExamSubject> subjects = CollectUtils.newArrayList();
        if (null != subjectId) {
            gradeQuery.where("grade.subject.id=:subjectId", subjectId);
            subjects.add(codeService.getCode(OtherExamSubject.class, subjectId));
        } else {
            OqlBuilder<OtherExamSubject> categoryQuery = OqlBuilder.from(OtherExamSubject.class, "subject");
            if (null != categoryId) {
                categoryQuery.where("subject.category.id=:categoryId", categoryId);
                gradeQuery.where("grade.subject.category.id=:categoryId", categoryId);
            }
            subjects = entityDao.search(categoryQuery);
        }
        put("subjects", subjects);
        gradeQuery.select("grade.std.department.id,grade.subject.id,count(*)");
        gradeQuery.groupBy("grade.std.department.id,grade.subject.id");
        List<Object[]> datas = (List<Object[]>) entityDao.search(stdQuery);
        new StatHelper(entityDao).replaceIdWith(datas, new Class[] { Department.class });
        Map<String, Object> departMap = CollectUtils.newHashMap();
        for (Object[] data : datas) {
            if (data[0] != null) {
                departMap.put(((Department) data[0]).getId().toString(), data);
            } else {
                departMap.put("", data);
            }
        }
        List<Object[]> data2 = (List<Object[]>) entityDao.search(gradeQuery);
        new StatHelper(entityDao).replaceIdWith(data2, new Class[] { Department.class, OtherExamSubject.class });
        List<StatGroup> statGroups = StatGroup.buildStatGroups(data2);
        Map<String, StatGroup> gradeMap = CollectUtils.newHashMap();
        for (StatGroup g : statGroups) {
            gradeMap.put(((Department) g.getWhat()).getId().toString(), g);
        }
        put("departMap", departMap);
        put("gradeMap", gradeMap);
        return forward();
    }

    @SuppressWarnings("unchecked")
    public String passRate() {
        Integer semesterId = getInt("otherExamSignUp.semester.id");
        Integer subjectId = getInt("otherExamSignUp.subject.id");
        Integer categoryId = getInt("otherExamSignUp.subject.category.id");

        OqlBuilder<?> query = OqlBuilder.from(OtherExamSignUp.class, "otherExamSignUp");
        OqlBuilder<?> gradeQuery = OqlBuilder.from(OtherGrade.class, "grade");
        OqlBuilder<?> gdQuery = OqlBuilder.from(OtherGrade.class, "grade");
        if (null != semesterId) {
            gradeQuery.where("grade.semester.id=:semesterId", semesterId);
            gdQuery.where("grade.semester.id=:semesterId", semesterId);
            query.where("otherExamSignUp.semester.id=:semesterId", semesterId);
        }
        if (null != categoryId) {
            gradeQuery.where("grade.subject.category.id=:categoryId", categoryId);
            gdQuery.where("grade.subject.category.id=:categoryId", categoryId);
            query.where("otherExamSignUp.subject.category.id=:categoryId", categoryId);
        }
        if (null != subjectId) {
            gradeQuery.where("grade.subject.id=:subjectId", subjectId);
            gdQuery.where("grade.subject.id=:subjectId", subjectId);
            query.where("otherExamSignUp.subject.id=:subjectId", subjectId);
        }
        gradeQuery.select("grade.semester.id,count(*)");
        gradeQuery.groupBy("grade.semester.id");
        List<Object[]> datas = (List<Object[]>) entityDao.search(gradeQuery);
        new StatHelper(entityDao).replaceIdWith(datas, new Class[] { Semester.class });
        Map<String, Object[]> SemesterMap = new HashMap<String, Object[]>();
        for (Object[] data : datas) {
            SemesterMap.put(((Semester) data[0]).getId().toString(), data);
        }
        query.where("exists(select signUp.std.id from " + OtherExamSignUp.class.getName()
                + " signUp where signUp.std.id = otherExamSignUp.std.id group by signUp.std.id having count(signUp.std.id)=1)");
        query.select("otherExamSignUp.semester.id,count(*)");
        query.groupBy("otherExamSignUp.semester.id");
        List<Object[]> data5 = (List<Object[]>) entityDao.search(query);
        new StatHelper(entityDao).replaceIdWith(data5, new Class[] { Semester.class });
        Map<String, Object[]> firstMap = new HashMap<String, Object[]>();
        for (Object[] data : data5) {
            firstMap.put(((Semester) data[0]).getId().toString(), data);
        }

        gradeQuery.where("grade.passed=true");
        List<Object[]> data2 = (List<Object[]>) entityDao.search(gradeQuery);
        new StatHelper(entityDao).replaceIdWith(data2, new Class[] { Semester.class });
        Map<String, Object[]> gradeMap = new HashMap<String, Object[]>();
        for (Object[] data : data2) {
            gradeMap.put(((Semester) data[0]).getId().toString(), data);
        }
        gdQuery.where("exists(select gd.std.id from " + OtherGrade.class.getName()
                + " gd where gd.std.id = grade.std.id group by gd.std.id having count(gd.std.id)=1)");
        gdQuery.select("grade.semester.id,count(*)");
        gdQuery.groupBy("grade.semester.id");
        List<Object[]> data3 = (List<Object[]>) entityDao.search(gdQuery);
        new StatHelper(entityDao).replaceIdWith(data3, new Class[] { Semester.class });
        Map<String, Object[]> firstTMap = new HashMap<String, Object[]>();
        for (Object[] data : data3) {
            firstTMap.put(((Semester) data[0]).getId().toString(), data);
        }

        gdQuery.where("grade.passed=true");
        List<Object[]> data4 = (List<Object[]>) entityDao.search(gdQuery);
        new StatHelper(entityDao).replaceIdWith(data4, new Class[] { Semester.class });
        Map<String, Object[]> TFirstMap = new HashMap<String, Object[]>();
        for (Object[] data : data4) {
            TFirstMap.put(((Semester) data[0]).getId().toString(), data);
        }

        put("TFirst", TFirstMap);// ??
        put("first", firstMap);// ?(??)
        put("firstT", firstTMap);// 
        put("SemesterMap", SemesterMap);
        put("gradeMap", gradeMap);
        return forward();
    }

    // 
    public String categorySubject() {
        Integer categoryId = getIntId("category");
        if (null != categoryId) {
            OqlBuilder<OtherExamSubject> query = OqlBuilder.from(OtherExamSubject.class, "otherExamSubject");
            query.where("otherExamSubject.category.id =:categoryId", categoryId);
            query.where(
                    "otherExamSubject.beginOn <= :now and (otherExamSubject.endOn is null or otherExamSubject.endOn >= :now)",
                    new java.util.Date());
            put("subjects", entityDao.search(query));
        } else {
            put("subjects", CollectionUtils.EMPTY_COLLECTION);
        }
        return forward();
    }
}