|
package com.ekexiu.console.system.service;
import com.ekexiu.console.service.Upload;
import com.ekexiu.console.system.dao.PictableDao;
import com.ekexiu.console.system.dao.RoleDao;
import com.ekexiu.console.system.dao.UserDao;
import com.ekexiu.console.system.po.Pictable;
import com.ekexiu.console.system.po.Role;
import com.ekexiu.console.system.po.User;
import com.ekexiu.console.system.vo.ConsoleAuthUser;
import org.jfw.apt.annotation.Autowrie;
import org.jfw.apt.annotation.DefaultValue;
import org.jfw.apt.annotation.Nullable;
import org.jfw.apt.web.annotation.LoginUser;
import org.jfw.apt.web.annotation.Path;
import org.jfw.apt.web.annotation.method.InvalidSession;
import org.jfw.apt.web.annotation.method.SetSession;
import org.jfw.apt.web.annotation.operate.Get;
import org.jfw.apt.web.annotation.operate.Post;
import org.jfw.apt.web.annotation.operate.Put;
import org.jfw.apt.web.annotation.param.*;
import org.jfw.util.PageQueryResult;
import org.jfw.util.StringUtil;
import org.jfw.util.auth.AuthUtil;
import org.jfw.util.exception.JfwBaseException;
import org.jfw.util.jdbc.JdbcTask;
import org.jfw.util.jdbc.JdbcUtil;
import org.jfw.util.web.fileupload.UploadItemIterator;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
@Path("/sys/user")
public class UserService extends Upload {
private AtomicReference<Map<String, User>> cache = new AtomicReference<Map<String, User>>();
public static final String DEFAULT_AUTH_STR = AuthUtil.serialAuth(new int[]{0});
public static final String DEFAULT_PW_STR = StringUtil.md5("12345678");
@Autowrie
private UserDao userDao;
@Autowrie
RoleDao roleDao;
@Autowrie
private PictableDao pictableDao;
public PictableDao getPictableDao() {
return pictableDao;
}
public void setPictableDao(PictableDao pictableDao) {
this.pictableDao = pictableDao;
}
public RoleDao getRoleDao() {
return roleDao;
}
public void setRoleDao(RoleDao roleDao) {
this.roleDao = roleDao;
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@SetSession("JFW_SESSION_LOGIN_USER=result")
@Path("/login")
@Post
public ConsoleAuthUser login(@JdbcConn Connection con, String key, String pw) throws SQLException {
User user = userDao.queryByLoginKey(con, key);
if (user != null && StringUtil.md5(pw).equals(user.getLoginPassword()) && user.isActived()) {
ConsoleAuthUser cau = new ConsoleAuthUser(user);
cau.setHead(user.getHead());
cau.setId(user.getId());
cau.setName(user.getName());
cau.setMobile(user.getMobile());
cau.setEmail(user.getEmail());
ArrayList<int[]> list = new ArrayList<int[]>(1);
list.add(AuthUtil.deSerialAuth(user.getAuthinfo()));
for (Role role : this.roleDao.queryByUser(con, user.getId())) {
list.add(AuthUtil.deSerialAuth(role.getAuthinfo()));
}
cau.setAuths(AuthUtil.merge(list.toArray(new int[0][0])));
return cau;
}
return null;
}
@Get
@Path
public ConsoleAuthUser get(@LoginUser ConsoleAuthUser user) {
return user;
}
@Get
@Path("/logout")
@InvalidSession
public void logout() {
}
public static void main(String[] args) throws Exception {
System.out.println(AuthUtil.serialAuth(new int[]{0}));
}
@Get
@Path("/pq")
public PageQueryResult<User> pageQuery(@JdbcConn Connection con, @Nullable String name, @Nullable Boolean actived, @Nullable String mobile,
@Nullable String email, @Nullable String bt, @Nullable String et, @DefaultValue("1") int pageNo, @DefaultValue("10") int pageSize)
throws SQLException {
if (bt != null)
bt = bt + "000000";
if (et != null)
et = et + "235959";
PageQueryResult<User> ret = this.userDao.pageQuery(con, name, actived, mobile, email, bt, et, pageNo, pageSize);
for (User u : ret.getData()) {
u.setLoginPassword(null);
u.setAuthinfo(null);
}
return ret;
}
@Post
@Path
public void insert(@JdbcConn(true) Connection con,
@RequestParam(fields = {@FieldParam(value = "name", valueClass = String.class, required = true),
@FieldParam(value = "email", valueClass = String.class, required = true),
@FieldParam(value = "mobile", valueClass = String.class, required = false),
@FieldParam(value = "descp", valueClass = String.class, required = false),
@FieldParam(value = "head", valueClass = String.class, required = false)}) User user)
throws SQLException {
String id = StringUtil.buildUUID();
user.setId(id);
user.setActived(true);
user.setAuthinfo(DEFAULT_AUTH_STR);
user.setLoginPassword(DEFAULT_PW_STR);
this.userDao.insert(con, user);
}
@Get
@Path("/all")
public Collection<User> queryall(@JdbcConn Connection con) throws SQLException {
return this.cache.get().values();
}
public void initByDataSource(DataSource ds) throws SQLException {
final Connection con = ds.getConnection();
JdbcUtil.executeAutoClose(con, new JdbcTask() {
@Override
public void exec() throws SQLException {
List<User> list = userDao.queryall(con);
Map<String, User> map = new HashMap<String, User>();
for (User res : list) {
map.put(res.getId(), res);
}
cache.set(map);
}
}, false);
}
@Put
@Path
public void update(@JdbcConn(true) Connection con, @RequestBody User user) throws SQLException {
user.setLoginPassword(null);
this.userDao.update(con, user);
}
@Get
@Path("/info")
public User editInfo(@JdbcConn Connection con, @LoginUser ConsoleAuthUser cau) throws SQLException {
User user = this.userDao.queryById(con, cau.getId());
if (user != null) {
user.setLoginPassword(null);
}
return user;
}
@Post
@Path("/resetpw")
public void resetpw(@JdbcConn(true) Connection con, String[] ids) throws SQLException {
this.userDao.resetPassword(con, ids, DEFAULT_PW_STR);
}
@Get
@Path("/right/{id}")
public int[] getRights(@JdbcConn Connection con, @PathVar String id) throws SQLException {
User user = this.userDao.queryById(con, id);
if (user != null) {
return AuthUtil.unCompress(AuthUtil.deSerialAuth(user.getAuthinfo()));
}
return null;
}
@Post
@Path("/right")
public void updateRights(@JdbcConn(true) Connection con, String userid, int[] right) throws SQLException {
this.userDao.update(con, userid, AuthUtil.serialAuth(AuthUtil.compress(right)));
}
@Post
@Path("/head")
public Upload.UploadItem head(@org.jfw.apt.web.annotation.param.Upload UploadItemIterator it) throws JfwBaseException, IOException {
return this.upload(it);
}
@Post
@Path("/del")
public void delete(@JdbcConn(true) Connection con, String[] ids) throws SQLException {
this.userDao.delete(con, ids);
}
@Get
@Path("/id/{id}")
public User query(@JdbcConn Connection con, @PathVar String id) throws SQLException {
return this.userDao.queryById(con, id);
}
@Get
@Path("/pictable/{id}")
public List<Pictable> queryRec(@JdbcConn Connection con, @PathVar String id) throws SQLException {
return this.pictableDao.queryRec(con, id);
}
}
|