package com.ourlinc.helloworld.model;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import com.ourlinc.helloworld.service.impl.UserPodi;
import com.ourlinc.helloworld.util.WebUtils;
import com.ourlinc.omni.persistence.PersistenceAbstract;
import com.ourlinc.omni.persistence.Persister;
import com.ourlinc.omni.persistence.ReferenceIdArray;
import com.ourlinc.swift.exception.UnsupportedException;
import com.ourlinc.swift.util.Array;
import com.ourlinc.swift.util.ResultPage;
import com.ourlinc.swift.util.UniteId;
/**
* 业务对象普通用户类
*
* @author lipeiying
*
*/
public class User extends PersistenceAbstract<UserPodi>
implements
Comparable<User> {
/**
* 用户为在职状态
*/
public final static int ON_JOB = 1;
/**
* 用户为离职状态
*/
public final static int NOT_ON_JOB = 0;
/**
* 用户的权限为普通用户
*/
public final static int USER = 0;
/**
* 用户的权限为管理员
*/
public final static int ADMIN = 1;
// 联合ID
@Resource(type = String.class)
private UniteId m_Id = UniteId.nil;
// 真实姓名,用来登录
@Resource
private String m_Username;
// 密码
@Resource
private String m_Password;
// 所属部门
@Resource
private String m_Department;
// 电子邮件
@Resource
private String m_Email;
// 出生日期
@Resource
private Date m_Birthday;
// 入职日期
@Resource
private Date m_EntryDate;
// 离职日期
@Resource
private Date m_LeaveDate;
/**
* 是否在职,默认是在职
*/
@Resource
private int m_OnJob = ON_JOB;
// 活动列表,记录活动id
@Resource(type = ReferenceIdArray.class)
private Array<Activity> m_Activities = new Array<Activity>();
/**
* 表示用户的权限,分为普通用户和管理员,默认为普通用户
*/
@Resource
private int m_Authority = USER;
/**
* 无参构造函数
*/
public User(UserPodi podi) {
super(podi);
}
/**
*
* 构造函数
*
*/
public User(UserPodi podi, String username, String password,
String department, String email, Date birthday, Date entryDate) {
super(podi);
m_Username = username;
m_Password = password;
m_Department = department;
m_Email = email;
m_Birthday = birthday;
m_EntryDate = entryDate;
markUpdate();
}
/**
* 用户提升为管理员
*/
public User userToAdmin() {
m_Authority = ADMIN;
markUpdate();
return this;
}
/**
* 管理员降级为用户
*/
public User adminToUser() {
m_Authority = USER;
markUpdate();
return this;
}
/**
* 修改个人信息
*
* @param password
* @param department
* @param email
* @param birthday
*/
public void edit(String department, String email, Date birthday) {
m_Department = department;
m_Email = email;
m_Birthday = birthday;
markUpdate();
}
/**
* 修改密码
*
* @param password
*/
public void editPass(String password) {
m_Password = password;
markUpdate();
}
/**
* 管理员修改信息
*
* @param username
* @param password
* @param department
* @param email
* @param birthday
* @param entryDate
* @param leaveDate
* @param onJob
*/
public void edit(String username, String department, String email,
Date birthday, Date entryDate, Date leaveDate, int onJob) {
m_Username = username;
m_Department = department;
m_Email = email;
m_Birthday = birthday;
m_EntryDate = entryDate;
m_LeaveDate = leaveDate;
m_OnJob = onJob;
markUpdate();
}
/**
* 参加活动,方法内部已经帮活动增加人员
*
* @param act
* @return 参加成功返回true,否则返回false
*/
public boolean joinActivity(Activity act) {
if (null != act && ON_JOB == m_OnJob && !m_Activities.contains(act)) {
act.addUser(this.getId());
act.flush();
m_Activities.add(act);
markUpdate();
return true;
}
return false;
}
/**
* 该用户是否已经参加了这个活动
*
* @param act
* @return
*/
public boolean isJoin(Activity act) {
return (m_Activities.contains(act)) ? true : false;
}
/**
* 判断是否管理员
*
* @return
*/
public boolean isAdmin() {
return (ADMIN == getAuthority()) ? true : false;
}
/**
* 取消参加活动,两个动作,活动删除用户,用户删除活动
*
* @param actId
* 要取消的活动id
*/
public void cancelActivity(Activity act) {
if (null != act) {
act.removeUser(getId());
act.flush();
if (null != m_Activities && m_Activities.contains(act)) {
m_Activities.remove(act);
markUpdate();
}
}
}
protected void genUniteId() {
if (UniteId.nil != m_Id) {
throw new UnsupportedException("不能重复初始化ID:" + m_Id);
}
m_Id = UniteId.valueOf(getPodi().getPersister(getClass()).getNewId());
setPersistenceState(STATE_REINDEX | STATE_NEW);
}
protected void initPersistenceId(Persister<?> arg0) {
genUniteId();
}
// get方法开始
public String getId() {
return m_Id.toString();
}
/**
* 返回id的URL编码
*
* @return
*/
public String getURLEncodeForId() {
String result = "";
try {
result = URLEncoder.encode(getId(), "utf-8");
} catch (UnsupportedEncodingException e) {
}
return result;
}
public String getPersistenceId() {
return getId();
}
public String getUsername() {
return m_Username;
}
public String getPassword() {
return m_Password;
}
public String getDepartment() {
return m_Department;
}
public String getEmail() {
return m_Email;
}
public Date getBirthday() {
return m_Birthday;
}
public String getBirthdayString() {
return WebUtils.dateFormatToStr(m_Birthday);
}
public Date getEntryDate() {
return m_EntryDate;
}
public String getEntryDateString() {
return WebUtils.dateFormatToStr(m_EntryDate);
}
public Date getLeaveDate() {
return m_LeaveDate;
}
public String getLeaveDateString() {
return (null == m_LeaveDate) ? "" : WebUtils
.dateFormatToStr(m_LeaveDate);
}
/**
* 返回用户是否在职
*
* @return
*/
public String getStatus() {
return (ON_JOB == m_OnJob) ? "在职" : "离职";
}
public int isOnJob() {
return m_OnJob;
}
public List<Activity> getActivities() {
return m_Activities.getReadOnlyList();
}
/**
* 返回用户参加了,但没开始的活动,即返回开始前并且没有取消的活动
*
* @return
*/
public ResultPage<Activity> listMyAct() {
List<Activity> list = getActivities();
List<Activity> result = new ArrayList<Activity>();
Date now = new Date();
for (Activity act : list) {
if (now.after(act.getStartDate()) && now.before(act.getTime())
&& Activity.STATUS_AVAILIABLE == act.getStatus()) {
result.add(act);
}
}
Collections.sort(result);
return ResultPage.OnList.wrap(result);
}
/**
* 返回用户已经参加了的活动,即返回已经结束并且没有被取消的活动
*
* @return
*/
public ResultPage<Activity> listMyActOver() {
List<Activity> list = getActivities();
List<Activity> result = new ArrayList<Activity>();
for (Activity act : list) {
if (new Date().after(act.getTime())) {
result.add(act);
}
}
Collections.sort(result);
return ResultPage.OnList.wrap(result);
}
/**
* 返回用户已经参加了但被取消的活动
*
* @return
*/
public ResultPage<Activity> listMyActCancel() {
List<Activity> list = getActivities();
List<Activity> result = new ArrayList<Activity>();
for (Activity act : list) {
if (Activity.STATUS_CANCEL == act.getStatus()
&& new Date().before(act.getTime())) {
result.add(act);
}
}
Collections.sort(result);
return ResultPage.OnList.wrap(result);
}
/**
* 取得用户权限
*
* @return 普通用户返回0,管理员返回1
*/
public int getAuthority() {
return m_Authority;
}
/**
* 取得用户权限的字符表示,如返回 用户 或管理员
*
* @return
*/
public String getAuthorityString() {
return (isAdmin()) ? "管理员" : "普通用户";
}
public int compareTo(User user) {
return m_OnJob > user.m_OnJob ? -1 : 1;
}
// get方法结束
}