package com.hongqiang.shop.modules.content.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.hongqiang.shop.common.base.persistence.BaseDaoImpl;
import com.hongqiang.shop.common.base.persistence.Page;
import com.hongqiang.shop.common.utils.Pageable;
import com.hongqiang.shop.modules.entity.Member;
import com.hongqiang.shop.modules.entity.Message;
@Repository
public class MessageDaoImpl extends BaseDaoImpl<Message,Long>
implements MessageDaoCustom
{
public Page<Message> findPage(Member member, Pageable pageable)
{
String sqlString = "select message from Message message where message.forMessage is null and message.isDraft = false ";
List<Object> params = new ArrayList<Object>();
if (member != null){
sqlString +=" and ((message.sender = ? and message.senderDelete = false) or "+
"(message.receiver = ? and message.receiverDelete = false)) ";
params.add(member);
params.add(member);
}
else{
sqlString +=" and ((message.sender is null and message.senderDelete = false) "+
"or (message.receiver is null and message.receiverDelete = false)) ";
}
return super.findPage(sqlString, params, pageable);
}
public Page<Message> findDraftPage(Member sender, Pageable pageable)
{
String sqlString = "select message from Message message where message.forMessage is null and message.isDraft = true ";
List<Object> params = new ArrayList<Object>();
if (sender != null){
sqlString +=" and message.sender = ? ";
params.add(sender);
}
else{
sqlString +=" and message.sender is null ";
}
return super.findPage(sqlString, params, pageable);
}
public Long count(Member member, Boolean read)
{
String sqlString = "select message from Message message where message.forMessage is null and message.isDraft = false ";
List<Object> params = new ArrayList<Object>();
if (member != null)
{
if (read != null){
sqlString +=" and ((message.sender = ? and message.senderDelete = false and message.senderRead = ? ) "+
"or (message.receiver = ? and message.receiverDelete = false and message.receiverRead = ?)) ";
params.add(member);
params.add(read);
params.add(member);
params.add(read);
}
else{
sqlString +=" and ((message.sender = ? and message.senderDelete = false) or (message.receiver = ? and "+
"message.receiverDelete = false)) ";
params.add(member);
params.add(member);
}
}
else if (read != null){
sqlString +=" and ((message.sender is null and message.senderDelete = false and message.senderRead = ? ) "+
"or (message.receiver is null and message.receiverDelete = false and message.receiverRead = ?)) ";
params.add(read);
params.add(read);
}
else{
sqlString +=" and ((message.sender is null and message.senderDelete = false) or (message.receiver is null and "+
"message.receiverDelete = false)) ";
}
StringBuilder stringBuilder = new StringBuilder(sqlString);
return super.count(stringBuilder, null, params);
}
public void remove(Long id, Member member)
{
Message localMessage = (Message)super.find(id);
if ((localMessage == null) || (localMessage.getForMessage() != null))
return;
if (member == localMessage.getReceiver())
{
if (!localMessage.getIsDraft().booleanValue())
if (localMessage.getSenderDelete().booleanValue())
{
super.remove(localMessage);
}
else
{
localMessage.setReceiverDelete(Boolean.valueOf(true));
super.merge(localMessage);
}
}
else if (member == localMessage.getSender())
if (localMessage.getIsDraft().booleanValue())
{
super.remove(localMessage);
}
else if (localMessage.getReceiverDelete().booleanValue())
{
super.remove(localMessage);
}
else
{
localMessage.setSenderDelete(Boolean.valueOf(true));
super.merge(localMessage);
}
}
}