package cn.newgxu.bbs.domain.message; import java.util.Date; 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.Pagination; import cn.newgxu.bbs.common.filter.FilterUtil; import cn.newgxu.bbs.domain.market.ItemLine; import cn.newgxu.bbs.domain.user.User; import cn.newgxu.jpamodel.JPAEntity; import cn.newgxu.jpamodel.ObjectNotFoundException; /** * * @author 红叶狐 * @since 4.0.0 * @version $Revision 1.1$ */ @Entity @Table(name = "message") public class Message extends JPAEntity { private static final long serialVersionUID = -687927691438455641L; @Id @Column(name = "id") // @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq") // @SequenceGenerator(name="id_seq", sequenceName="seq_message") @GeneratedValue(strategy = GenerationType.IDENTITY) private int id = -1; @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "folder_id") private MessageFolder folder; @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "sender_id") private User sender; @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "receiver_id") private User receiver; private String receivers; private int face; private String title; private String content; @Column(name = "create_time") private Date time; @Column(name = "readed") private boolean readed; @Column(name = "is_del") private boolean del; public String getContent() { return FilterUtil.ubb(content); } public void setContent(String content) { this.content = content; } public boolean isDel() { return del; } public void setDel(boolean del) { this.del = del; } public int getFace() { return face; } public void setFace(int face) { this.face = face; } public MessageFolder getFolder() { return folder; } public void setFolder(MessageFolder folder) { this.folder = folder; } public int getId() { return id; } public void setId(int id) { this.id = id; } public boolean isReaded() { return readed; } public void setReaded(boolean readed) { this.readed = readed; } public User getReceiver() { return receiver; } public void setReceiver(User receiver) { this.receiver = receiver; } public String getReceivers() { return receivers; } public void setReceivers(String receivers) { this.receivers = receivers; } public User getSender() { return sender; } public void setSender(User sender) { this.sender = sender; } public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String getTitle() { return FilterUtil.title(title); } public void setTitle(String title) { this.title = title; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } // -------------------------------------- public static Message get(int id) throws ObjectNotFoundException { return (Message) getById(Message.class, id); } private static void saveMessage(String title, String content, int face, MessageFolder folder, User receiver, User sender, String userNicks) { Message msg = new Message(); msg.setUser(receiver); msg.setReceiver(receiver); msg.setSender((sender == null) ? new User() : sender); msg.setFace(face); msg.setReaded(false); msg.setDel(false); msg.setTitle(title); msg.setContent(content); msg.setTime(new Date()); msg.setReceivers(userNicks); msg.setFolder(folder); msg.save(); } /** * 当使用物品时,满足一定条件时,就会对用户发送提示信息。 * @param il */ public static void sendItemLineMessage(ItemLine il){ saveMessage(il.getItem().getMessage_title(), il.getItem().getMessage(), 1,MessageFolder.getDefaultFolder(), il.getObject(),il.getUser(),il.getObject().getNick()); } public static void saveDraftMessage(String title, String content, int face, User user, String userNicks) { saveMessage(title, content, face, MessageFolder.getDraftFolder(), user, user, userNicks); } public static void saveTrackMessage(String title, String content, int face, User user, String userNicks) { saveMessage(title, content, face, MessageFolder.getTrackFolder(), user, user, userNicks); } public static void sendMessage(String title, String content, int face, List<User> receivers, User sender, String userNicks) { for (User receiver : receivers) { saveMessage(title, content, face, MessageFolder.getDefaultFolder(), receiver, sender, userNicks); } } public static void sendMessage(String title, String content, int face, User receiver, User sender, String userNicks) { saveMessage(title, content, face, MessageFolder.getDefaultFolder(), receiver, sender, userNicks); } public static void sendSystemMessage(String title, String content, int face, List<User> receivers, String userNicks) { for (User receiver : receivers) { saveMessage(title, content, face, MessageFolder.getDefaultFolder(), receiver, null, userNicks); } } public static void sendSystemMessage(String title, String content, int face, User receiver, String userNicks) { saveMessage(title, content, face, MessageFolder.getDefaultFolder(), receiver, null, userNicks); } @SuppressWarnings("unchecked") public static List<Message> getMessages(User user, MessageFolder folder, Pagination p) { return (List<Message>) Q( "from Message msg where user = ?1 and folder = ?2 and del = 0 order by readed asc, time desc", P(1, user), P(2, folder), p).getResultList(); } public static int getMessageSize(User user, MessageFolder folder) { try { return ((Long) SQ( "select count(*) from Message msg where user = ?1 and folder = ?2 and del = 0", P(1, user), P(2, folder))).intValue(); } catch (ObjectNotFoundException e) { return 0; } } public static int getMessageSizeNotRead(User user) { try { return ((Long) SQ( "select count(*) from Message msg where user = ?1 and folder.id = 1 and readed = 0", P(1, user))).intValue(); } catch (ObjectNotFoundException e) { return 0; } } public String getReadedString() { if (isReaded()) { return "<img src=\"/images/shortMessage/true.gif\" border=\"0\" />"; } else { return "<img src=\"/images/shortMessage/false.gif\" border=\"0\" />"; } } }