package com.yeshi.fanli.service.impl.msg; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.yeshi.fanli.dao.mybatis.UserInfoMapper; import com.yeshi.fanli.dao.mybatis.msg.UserSystemMsgMapper; import com.yeshi.fanli.entity.bus.msg.UserSystemMsg; import com.yeshi.fanli.entity.bus.msg.UserSystemMsgTypeEnum; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.system.SystemZnx; import com.yeshi.fanli.exception.msg.UserSystemMsgException; import com.yeshi.fanli.service.inter.msg.UserMsgReadStateService; import com.yeshi.fanli.service.inter.msg.UserSystemMsgService; import com.yeshi.fanli.service.inter.user.SystemZnxService; import com.yeshi.fanli.util.StringUtil; @Service public class UserSystemMsgServiceImpl implements UserSystemMsgService { @Resource private UserSystemMsgMapper userSystemMsgMapper; @Resource private UserMsgReadStateService userMsgReadStateService; @Resource private UserInfoMapper userInfoMapper; @Resource private SystemZnxService systemZnxService; @Transactional(rollbackFor=Exception.class) @Override public void addUserSystemMsg(Long uid, UserSystemMsgTypeEnum type, String title, String content, int timeTag, SystemZnx sz) throws UserSystemMsgException { if (sz == null && (StringUtil.isNullOrEmpty(title) || StringUtil.isNullOrEmpty(content) || uid == null)) throw new UserSystemMsgException(1, "信息不完整"); UserSystemMsg msg = new UserSystemMsg(); if (sz != null) { if (userSystemMsgMapper.selectBySystemZNXId(sz.getId(), uid) == null) { msg.setCreateTime(new Date(sz.getCreateTime())); msg.setRead(false); msg.setSolved(false); msg.setSystemZNX(sz); msg.setUser(new UserInfo(uid)); msg.setType(type); msg.setTimeTag(timeTag); msg.setTitle(sz.getTitle()); msg.setContent(sz.getContent()); } else throw new UserSystemMsgException(1, "消息已存在"); } else { msg.setCreateTime(new Date()); msg.setRead(false); msg.setSolved(false); msg.setContent(content); msg.setTitle(title); msg.setUser(new UserInfo(uid)); msg.setType(type); msg.setTimeTag(timeTag); } userSystemMsgMapper.insertSelective(msg); userMsgReadStateService.addSystemMsgUnReadCount(uid, 1); } @Override public UserSystemMsg getLatestUserSystemMsg(Long uid) { UserSystemMsg msg = userSystemMsgMapper.selectLatestUserSystemMsg(uid); if (msg != null) if (msg.getSystemZNX() != null) { msg.setTitle(msg.getSystemZNX().getTitle()); msg.setContent(msg.getSystemZNX().getContent()); } return msg; } @Override public List listUserSystemMsg(Long uid, int page, int pageSize) { List list = userSystemMsgMapper.listByUid(uid, (page - 1) * pageSize, pageSize); if (list != null) for (UserSystemMsg msg : list) { if (msg.getSystemZNX() != null) { msg.setTitle(msg.getSystemZNX().getTitle()); msg.setContent(msg.getSystemZNX().getContent()); } } return list; } @Override public long countUserSystemMsg(Long uid) { return userSystemMsgMapper.countByUid(uid); } @Override public void setSystemMsgSolved(Long uid, Long id) throws UserSystemMsgException { UserSystemMsg msg = userSystemMsgMapper.selectByPrimaryKey(id); if (msg.getUser().getId() != uid.longValue()) throw new UserSystemMsgException(2, "不是自己的消息"); UserSystemMsg update = new UserSystemMsg(); update.setId(id); update.setSolved(true); update.setUpdateTime(new Date()); userSystemMsgMapper.updateByPrimaryKeySelective(update); } @Override public void readMsgByUid(Long uid) { userSystemMsgMapper.setMsgReadByUid(uid); } @Override public void syncSystemZNX(Long uid) { UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) return; long createTime = user.getCreatetime(); List list = systemZnxService.listbyCreateTime(createTime); if (list != null && list.size() > 0) { for (SystemZnx znx : list) { UserSystemMsg msg = userSystemMsgMapper.selectBySystemZNXId(znx.getId(), uid); if (msg == null) try { addUserSystemMsg(uid, UserSystemMsgTypeEnum.common, null, null, UserSystemMsg.TIME_TAG_COMMON, znx); } catch (UserSystemMsgException e) { e.printStackTrace(); } } } } }