package com.ese.service; import com.ese.beans.Document; import com.ese.model.dao.*; import com.ese.model.db.*; import com.ese.model.view.UserView; import com.ese.model.view.report.UserAndRoleViewReport; import com.ese.service.security.UserDetail; import com.ese.service.security.encryption.EncryptionService; import com.ese.transform.StaffRoleTransform; import com.ese.transform.UserAccessTransform; import com.ese.transform.UserManagementTranstorm; import com.ese.utils.FacesUtil; import com.ese.utils.Utils; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; @Component @Transactional public class UserManagementService extends Service{ private static final long serialVersionUID = 4112578634029894840L; @Resource MSDepartmentDAO msDepartmentDAO; @Resource StaffDAO staffDAO; @Resource FactionDAO factionDAO; @Resource MSTitleDAO msTitleDAO; @Resource UserManagementTranstorm userManagementTranstorm; @Resource MenuObjectDAO menuObjectDAO; @Resource StaffRolesDAO staffRolesDAO; @Resource UserAccessTransform userAccessTransform; @Resource UserAccessDAO userAccessDAO; @Resource SystemRoleDAO systemRoleDAO; @Resource StaffRoleTransform staffRoleTransform; @Resource RoleAccessDAO roleAccessDAO; @Resource private ReportService reportService; @Value("#{config['report.userandrole']}") private String pathPrintUserAndRole; @Value("#{config['report.logo']}") private String path; public List<MSDepartmentModel> getDepartAll(){ return msDepartmentDAO.findDepartmentByIsValid(); } public List<StaffModel> getUserAll(){ return staffDAO.findUserByIsValid(); } public List<FactionModel> getFactionByDepartment(int departmentId){ return factionDAO.findByDepartmentId(departmentId); } public List<StaffModel> getUserBySearch(int departmentId, int factionId, String keySearch){ return staffDAO.findUserBySearch(departmentId, factionId, keySearch); } public void delete(StaffModel staffModel){ try { staffDAO.deleteByUpdate(staffModel); } catch (Exception e) { log.debug("Exception error delete : ", e); } } public List<MSTitleModel> getTitleAll(){ try { return msTitleDAO.findAll(); } catch (Exception e) { log.debug("Exception error getTitleAll : ", e); return Utils.getEmptyList(); } } public UserView setModelToViewUserAccess(StaffModel staffModel){ return userManagementTranstorm.transformToView(staffModel); } public boolean isExisted(String userName){ try { return staffDAO.isUsernameExist(userName); } catch (Exception e) { return true; } } public void onSaveUserAccess(UserView userView){ StaffModel staffModel = userManagementTranstorm.transformToModel(userView); try { staffDAO.persist(staffModel); } catch (Exception e) { log.debug("Exception error persist : ", e); } } public void onUpdataeUserAccess(UserView userView){ StaffModel staffModel = userManagementTranstorm.transformToModel(userView); try { staffDAO.update(staffModel); } catch (Exception e) { log.debug("Exception error update : ", e); } } public List<MenuObjectModel> getMenuObjectByObjCategory(){ return menuObjectDAO.findByObjCategory(); } public List<MenuObjectModel> getMenuObjectAll(){ try { return menuObjectDAO.findAll(); } catch (Exception e) { log.debug("Exception error getMenuObjectAll : ", e); return null; } } public List<MenuObjectModel> getMenuObjectId(int menuObjectId, String keySearch){ return menuObjectDAO.findByObjectId(menuObjectId, keySearch); } public List<StaffRolesModel> getStaffRoleByUserId(int userId){ return staffRolesDAO.findByUserId(userId); } public List<UserAccessModel> getMenuObjectByUserId(int userId){ return userAccessDAO.findByUserId(userId); } public void onSaveUserAccess(List<Document> objectModels, StaffModel staffModel){ log.debug("objectModels Size : {}, staffModel {}", objectModels.size(), staffModel.toString()); UserAccessModel model; List<UserAccessModel> userAccessModelList; if (Utils.isSafetyList(objectModels)){ for (Document document : objectModels){ try { model = userAccessTransform.transformToModel(menuObjectDAO.findByID(document.getId()), staffModel); userAccessDAO.persist(model); userAccessModelList = userAccessDAO.findByUserId(staffModel.getId()); Map<Integer, UserAccessModel> hashMap = new HashMap(); for(UserAccessModel userAccessModel : userAccessModelList){ int key = userAccessModel.getMenuObjectModel().getId(); if (!hashMap.containsKey(key)){ hashMap.put(key, userAccessModel); } else { log.debug("Delete : {}", userAccessModel.getId()); userAccessDAO.delete(userAccessModel); } } } catch (Exception e) { log.debug("Exception error onSaveUserAccess : ", e); } } } } public void deleteUserAuthorize(Document document){ try { userAccessDAO.delete(userAccessDAO.findByID(document.getId())); } catch (Exception e) { log.debug("Exception error deleteUserAuthorize : ", e); } } public List<UserAccessModel> getUserAuthorizeByMenuObjOrKey(int objId, String key){ return userAccessDAO.findByMenuObjOrKey(objId, key); } public void deleteRole(int roleId){ try { staffRolesDAO.delete(staffRolesDAO.findById(roleId)); } catch (Exception e) { log.debug("Exception error deleteRole : ", e); } } public List<SystemRoleModel> getLoadUserRole(){ return systemRoleDAO.findByIsValid(); } public List<SystemRoleModel> getRoleByKey(String key){ return systemRoleDAO.findByKey(key); } public void onSaveRole(List<SystemRoleModel> roleModels, StaffModel staffModel) { log.debug("roleModels Size : {}, staffModel {}", roleModels.size(), staffModel.toString()); StaffRolesModel staffRolesModel; List<StaffRolesModel> staffRolesModelList; List<RoleAccessModel> roleAccessModels; UserAccessModel userAccessModel; List<UserAccessModel> userAccessModelList; for (SystemRoleModel roleModel : roleModels){ staffRolesModel = staffRoleTransform.tramsformToModel(roleModel, staffModel); try { staffRolesDAO.persist(staffRolesModel); staffRolesModelList = staffRolesDAO.findByUserId(staffModel.getId()); Map<Integer, StaffRolesModel> hashMap = new HashMap(); for(StaffRolesModel rolesModel : staffRolesModelList){ int key = rolesModel.getRoles().getId(); if (!hashMap.containsKey(key)){ hashMap.put(key, rolesModel); } else { log.debug("Delete : {}", rolesModel.getId()); staffRolesDAO.delete(rolesModel); } } } catch (Exception e) { log.debug("Exception error staffRolesDAO : ", e); } roleAccessModels = roleAccessDAO.findBySystemRoleId(roleModel.getId()); for (RoleAccessModel roleAccessModel : roleAccessModels){ userAccessModel = userAccessTransform.transformToModel(roleAccessModel.getMenuObjectModel(), staffModel); try { userAccessDAO.persist(userAccessModel); userAccessModelList = userAccessDAO.findByUserId(staffModel.getId()); Map<Integer, UserAccessModel> hashMap = new HashMap(); for(UserAccessModel userAccess : userAccessModelList){ int key = userAccess.getMenuObjectModel().getId(); if (!hashMap.containsKey(key)){ hashMap.put(key, userAccess); } else { log.debug("Delete : {}", userAccess.getId()); userAccessDAO.delete(userAccess); } } } catch (Exception e) { log.debug("Exception error userAccessDAO : ", e); } } } } public UserView getUserName(String userName){ try { StaffModel staffModel = staffDAO.findByUserName(userName); UserView userView = userManagementTranstorm.transformToView(staffModel); return userView; } catch (Exception e) { log.debug("Exception error getUserName : {}", e); return new UserView(); } } public void printReportUserAndRole(String user){ String printTagReportname = Utils.genReportName("_UserAndRoleReport"); HashMap map = new HashMap<String, Object>(); List<UserAndRoleViewReport> reportViews; map.put("userPrint", user); map.put("printDate", Utils.convertCurrentDateToStringDDMMYYYY()); map.put("path", FacesUtil.getRealPath(path)); reportViews = staffDAO.genSQLReportUserAndRole(); try { reportService.exportPDF(pathPrintUserAndRole, map, printTagReportname, reportViews); } catch (Exception e) { log.debug("Exception Report : ", e); } } }