package com.ese.model.dao;
import com.ese.model.db.StaffModel;
import com.ese.model.view.report.UserAndRoleViewReport;
import com.ese.utils.Utils;
import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.StringType;
import org.hibernate.type.TimestampType;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
public class StaffDAO extends GenericDAO<StaffModel, Integer>{
public StaffModel findByUserNameAndPassword(String userName, String password) throws Exception {
return (StaffModel) getCriteria().add(Restrictions.and(
Restrictions.eq("username", userName),
Restrictions.eq("password", password))
).add(Restrictions.eq("isValid", 1)).uniqueResult();
}
public boolean isUsernameExist(String userName) throws Exception {
return !Utils.isNull(getCriteria().add(Restrictions.and(
Restrictions.eq("username", userName),
Restrictions.eq("isValid", 1)
)).uniqueResult());
}
public List<StaffModel> test() throws Exception {
// SELECT * FROM dbo.staff
return findBySQL("SELECT * FROM dbo.staff", "3", 5, 6);
}
public List<StaffModel> findUserByIsValid(){
List<StaffModel> staffModels = Utils.getEmptyList();
try {
Criteria criteria = getSession().createCriteria(StaffModel.class, "s");
criteria.add(Restrictions.eq("isValid", 1));
criteria.createAlias("s.factionModel", "f");
criteria.createAlias("f.msDepartmentModel", "d");
criteria.addOrder(Order.asc("d.id"));
staffModels = Utils.safetyList(criteria.list());
} catch (Exception e) {
log.debug("Exception error findUserByIsValid : ", e);
}
return staffModels;
}
public List<StaffModel> findUserBySearch(int departmentId, int factionId, String keySearch){
log.debug("departmentId : {}, factionId : {}, keySearch : {}", departmentId, factionId, keySearch);
List<StaffModel> staffModels = Utils.getEmptyList();
try {
Criteria criteria = getSession().createCriteria(StaffModel.class, "s");
criteria.add(Restrictions.eq("isValid", 1));
criteria.createAlias("s.factionModel", "f");
criteria.createAlias("f.msDepartmentModel", "d");
if (!Utils.isZero(factionId) && !Utils.isZero(departmentId)){
criteria.add(Restrictions.eq("factionModel.id", factionId));
}
if (!Utils.isNull(keySearch.trim()) && keySearch.length() > 0){
Criterion name = Restrictions.like("name", "%" + keySearch.trim() + "%");
Criterion userName = Restrictions.like("username", "%"+keySearch.trim()+"%");
criteria.add(Restrictions.or(name,userName));
}
if (!Utils.isZero(departmentId)){
criteria.add(Restrictions.eq("d.id", departmentId));
}
criteria.addOrder(Order.asc("d.id"));
staffModels = Utils.safetyList(criteria.list());
} catch (Exception e) {
log.debug("Exception error findUserByIsValid : ", e);
}
return staffModels;
}
public void deleteByUpdate(StaffModel model) throws Exception{
model.setIsValid(0);
model.setUpdateDate(Utils.currentDate());
update(model);
}
public StaffModel findByUserName(String userName) throws Exception {
return (StaffModel) getCriteria().add(Restrictions.and(
Restrictions.eq("username", userName)
)).uniqueResult();
}
public List<UserAndRoleViewReport> genSQLReportUserAndRole(){
List<UserAndRoleViewReport> reportViews = new ArrayList<UserAndRoleViewReport>();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append(" SELECT ");
sqlBuilder.append(" ").append(getPrefix()).append(".department.name AS DEPART_NAME, ");
sqlBuilder.append(" ").append(getPrefix()).append(".faction.name AS FACTION_NAME, ");
sqlBuilder.append(" ").append(getPrefix()).append(".title.name AS TITLE, ");
sqlBuilder.append(" ").append(getPrefix()).append(".staff.name AS NAME, ");
sqlBuilder.append(" ").append(getPrefix()).append(".staff.username AS LOGIN_NAME, ");
sqlBuilder.append(" ").append(getPrefix()).append(".staff.position AS POSITION, ");
sqlBuilder.append(" ").append(getPrefix()).append(".staff.create_date AS CREATE_DATE, ");
sqlBuilder.append(" ").append(getPrefix()).append(".system_role.code AS ROLE ");
sqlBuilder.append(" FROM ").append(getPrefix()).append(".staff");
sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".title");
sqlBuilder.append(" ON ").append(getPrefix()).append(".staff.title_id = ").append(getPrefix()).append(".title.id");
sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".staff_roles");
sqlBuilder.append(" ON ").append(getPrefix()).append(".staff.id = ").append(getPrefix()).append(".staff_roles.staff");
sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".system_role");
sqlBuilder.append(" ON ").append(getPrefix()).append(".staff_roles.roles = ").append(getPrefix()).append(".system_role.id");
sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".faction");
sqlBuilder.append(" ON ").append(getPrefix()).append(".staff.faction_id = ").append(getPrefix()).append(".faction.id");
sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".department");
sqlBuilder.append(" ON ").append(getPrefix()).append(".faction.department_id = ").append(getPrefix()).append(".department.id");
sqlBuilder.append(" GROUP BY ").append(getPrefix()).append(".department.name,");
sqlBuilder.append(" ").append(getPrefix()).append(".faction.name,").append(getPrefix()).append(".title.name,");
sqlBuilder.append(" ").append(getPrefix()).append(".staff.name,").append(getPrefix()).append(".staff.username,").append(getPrefix()).append(".staff.position,");
sqlBuilder.append(" ").append(getPrefix()).append(".staff.create_date,").append(getPrefix()).append(".system_role.code");
log.debug("--SQL {}",sqlBuilder.toString());
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString())
.addScalar("DEPART_NAME", StringType.INSTANCE)
.addScalar("FACTION_NAME", StringType.INSTANCE)
.addScalar("TITLE", StringType.INSTANCE)
.addScalar("NAME", StringType.INSTANCE)
.addScalar("LOGIN_NAME", StringType.INSTANCE)
.addScalar("POSITION", StringType.INSTANCE)
.addScalar("CREATE_DATE", TimestampType.INSTANCE)
.addScalar("ROLE", StringType.INSTANCE);
List<Object[]> objects = query.list();
for (Object[] entity : objects) {
UserAndRoleViewReport report = new UserAndRoleViewReport();
report.setDepartment(Utils.parseString(entity[0], ""));
report.setFaction(Utils.parseString(entity[1], ""));
report.setTitle(Utils.parseString(entity[2], ""));
report.setName(Utils.parseString(entity[3], ""));
report.setLoginName(Utils.parseString(entity[4], ""));
report.setPosition(Utils.parseString(entity[5], ""));
report.setCreateDate(Utils.convertDateToString(Utils.parseDate(entity[6], null)));
report.setRole(Utils.parseString(entity[7], ""));
reportViews.add(report);
}
} catch (Exception e) {
log.debug("Exception SQL : {}", e);
}
return reportViews;
}
}