package com.ld.igds.sys; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.RandomUtils; import org.hibernate.Session; import org.springframework.security.authentication.encoding.PasswordEncoder; import org.springframework.stereotype.Component; import com.bstek.bdf2.core.CoreHibernateDao; import com.bstek.bdf2.core.business.IUser; import com.bstek.bdf2.core.context.ContextHolder; import com.bstek.bdf2.core.exception.NoneLoginException; import com.bstek.bdf2.core.model.DefaultUser; import com.bstek.bdf2.core.model.UserDept; import com.bstek.bdf2.core.model.UserPosition; import com.bstek.bdf2.core.service.IRoleService; import com.bstek.bdf2.core.service.IUserService; import com.bstek.bdf2.core.service.MemberType; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.bstek.dorado.data.entity.EntityState; import com.bstek.dorado.data.entity.EntityUtils; import com.bstek.dorado.data.provider.Page; /** * 用户管理 * @author Andy * */ @Component("core.userMaintain") @SuppressWarnings("deprecation") public class UserMaintain extends CoreHibernateDao { private PasswordEncoder passwordEncoder; private IUserService userService; private IRoleService roleService; /** * 分页获取用户信息 * * @param page * @param criteria * @throws Exception */ @DataProvider public void loadUsers(Page page) throws Exception { DefaultUser user = (DefaultUser) ContextHolder.getLoginUser(); if (user == null) { throw new NoneLoginException("Please login first"); } String hql = " from " + DefaultUser.class.getName() + " where companyId=:companyId"; Map args = new HashMap<>(); args.put("companyId", user.getCompanyId()); String countHql = "select count(*) " + hql; this.pagingQuery(page, hql, countHql, args); } @DataResolver public void saveUsers(Collection users) throws Exception { IUser loginuser = ContextHolder.getLoginUser(); if (loginuser == null) { throw new NoneLoginException("Please login first!"); } String companyId = loginuser.getCompanyId(); if (StringUtils.isNotEmpty(getFixedCompanyId())) { companyId = getFixedCompanyId(); } Session session = this.getSessionFactory().openSession(); try { for (DefaultUser user : users) { EntityState state = EntityUtils.getState(user); if (state.equals(EntityState.NEW)) { String salt = String.valueOf(RandomUtils.nextInt(100)); String password = passwordEncoder.encodePassword( user.getPassword(), salt); user.setPassword(password); user.setSalt(salt); user.setCompanyId(companyId); session.save(user); } else if (state.equals(EntityState.MODIFIED)) { session.update(user); } else if (state.equals(EntityState.DELETED)) { roleService.deleteRoleMemeber(user.getUsername(), MemberType.User); session.delete(user); } } } finally { session.flush(); session.close(); } } /** * 这个方法用来判断在添加新用户时用户名是否已经存在 * * @param username * 用户输入的用户名 */ @Expose public String userIsExists(String username) { String hql = "select count(*) from " + DefaultUser.class.getName() + " u where u.username = :username"; Map parameterMap = new HashMap(); parameterMap.put("username", username); int count = this.queryForInt(hql, parameterMap); String returnStr = null; if (count > 0) { returnStr = "此用户已存在!"; } return returnStr; } /** * 重置指定用户密码 * * @param username * @return */ @Expose public String resetPassword(String username) { Integer newPassword = (int) (Math.random() * 900000 + 100000); userService.changePassword(username, newPassword.toString()); return newPassword.toString(); } /** * 设置指定用户为业务管理员 * * @param username * @return */ @Expose public String saveUserAdmin(String username) { DefaultUser user = (DefaultUser) userService .loadUserByUsername(username); if (user == null) return "为查询到用户,请联系管理员!!"; Session session = this.getSessionFactory().openSession(); session.update(user); session.flush(); session.close(); return null; } @Expose public void insertUserPosition(String username, String ids) { Session session = this.getSessionFactory().openSession(); try { session.createQuery( "delete " + UserPosition.class.getName() + " u where u.username = :username") .setString("username", username).executeUpdate(); if (StringUtils.isNotEmpty(ids)) { UserPosition userPosition; for (String id : ids.split(",")) { userPosition = new UserPosition(); userPosition.setId(UUID.randomUUID().toString()); userPosition.setPositionId(id); userPosition.setUsername(username); session.save(userPosition); } } } finally { session.flush(); session.close(); } } @Expose public void insertUserDept(String username, String ids) { Session session = this.getSessionFactory().openSession(); try { session.createQuery( "delete " + UserDept.class.getName() + " u where u.username = :username") .setString("username", username).executeUpdate(); if (StringUtils.isNotEmpty(ids)) { UserDept userDept; for (String id : ids.split(",")) { userDept = new UserDept(); userDept.setId(UUID.randomUUID().toString()); userDept.setDeptId(id); userDept.setUsername(username); session.save(userDept); } } } finally { session.flush(); session.close(); } } }