package cn.newgxu.bbs.domain.market;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import cn.newgxu.bbs.common.Constants;
import cn.newgxu.bbs.common.Pagination;
import cn.newgxu.bbs.common.util.Util;
import cn.newgxu.bbs.domain.user.User;
import cn.newgxu.jpamodel.JPAEntity;
import cn.newgxu.jpamodel.ObjectNotFoundException;
/**
*
* @author polly
* @since 4.0.0
* @version $Revision 1.1$
*/
@Entity
@Table(name = "free_market_item")
public class FreeMarketItem extends JPAEntity {
private static final long serialVersionUID = -5898272782202872555L;
@Id
@Column(name = "id")
// @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq")
// @SequenceGenerator(name="id_seq", sequenceName="seq_free_market_item")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id = -1;
@ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;
@ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@Column(name = "unit_price")
private int unitPrice;
@Column(name = "overdue_date")
private Date overdueDate;
@Column(name = "maker_id")
private int makerId;
public long getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public int getMakerId() {
return makerId;
}
public void setMakerId(int makerId) {
this.makerId = makerId;
}
public Date getOverdueDate() {
return overdueDate;
}
public void setOverdueDate(Date overdueDate) {
this.overdueDate = overdueDate;
}
public int getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(int unitPrice) {
this.unitPrice = unitPrice;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
// ------------------------------------------------
public static FreeMarketItem get(int id) throws ObjectNotFoundException {
return (FreeMarketItem) getById(FreeMarketItem.class, id);
}
public void setMaker(User maker) {
this.makerId = maker.getId();
}
public User getMaker() {
if (this.makerId < 1) {
return new User();
}
return User.getCertainExist(this.makerId);
}
public static void addItemSell(Item item, User user, int price, int makerId) {
FreeMarketItem fi = new FreeMarketItem();
fi.setItem(item);
fi.setUser(user);
fi.setUnitPrice(price);
fi.setOverdueDate(Util.getDateAfterDay(Constants.FREE_MARKET_SELL_DAY));
fi.setMakerId(makerId);
fi.save();
}
@SuppressWarnings("unchecked")
public static List<FreeMarketItem> getItemsByUser(User user, Pagination p) {
return (List<FreeMarketItem>) Q(
"from FreeMarketItem i where user = ?1 order by i.overdueDate desc",
P(1, user), p).getResultList();
}
public static int getNumberOfItemsByUser(User user) {
try {
return ((Long) SQ(
"select count(*) from FreeMarketItem i where user = ?1", P(
1, user))).intValue();
} catch (ObjectNotFoundException e) {
return 0;
}
}
@SuppressWarnings("unchecked")
public static List<FreeMarketItem> getItems(Pagination p) {
return (List<FreeMarketItem>) Q(
"from FreeMarketItem i order by i.overdueDate desc", p)
.getResultList();
}
public static int getNumberOfItems() {
try {
return ((Long) SQ("select count(*) from FreeMarketItem i"))
.intValue();
} catch (ObjectNotFoundException e) {
return 0;
}
}
@SuppressWarnings("unchecked")
public static List<FreeMarketItem> getItemsByItem(Item item, Pagination p) {
return (List<FreeMarketItem>) Q(
"from FreeMarketItem i where item = ?1 order by i.overdueDate desc",
P(1, item), p).getResultList();
}
public static int getNumberOfItemsByItem(Item item) {
try {
return ((Long) SQ(
"select count(*) from FreeMarketItem i where item = ?1", P(
1, item))).intValue();
} catch (ObjectNotFoundException e) {
return 0;
}
}
public String getOverDueTimeFormat() {
return Util.formatSellTime(getOverdueDate());
}
@SuppressWarnings("unchecked")
public static List<FreeMarketItem> getOverdueItems(Date date) {
return (List<FreeMarketItem>) Q(
"from FreeMarketItem i where overdueDate <= ?1", P(1, date))
.getResultList();
}
// ------------------------------------------------
@SuppressWarnings("serial")
@Override
public String toString() {
return "freeMarketItem" + new LinkedHashMap<String, Object>() {
{
put("id", id);
put("item", item);
put("user", user);
put("unitPrice", unitPrice);
put("overdueDate", overdueDate);
}
}.toString();
}
}