功能--添加用户和商家私信功能

上级 1f25c75a
流水线 #8904 已通过 于阶段
in 2 分 29 秒
......@@ -32,6 +32,8 @@ public class MessageUserQO implements Serializable {
@ApiModelProperty(value = "接收方用户ID")
private Integer receiverUserId;
private Integer backUserId;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
......
......@@ -21,6 +21,8 @@ public class UserMessageVO implements Serializable {
@ApiModelProperty(value = "接收方用户ID")
private Integer receiverUserId;
@ApiModelProperty(value = "商家聊天id")
private Integer backUserId;
@ApiModelProperty(value = "消息内容")
private String content;
@ApiModelProperty(value = "发送的图片")
......
......@@ -94,9 +94,9 @@ public interface MessageDao {
int insertUserMessage(UserMessageDO messageDO);
List<UserMessageDO> selectUserMessage(@Param("messageQO")MessageUserQO messageQO,@Param("senderUserId")Integer senderUserId);
UserMessageDO selectEndUserMessage(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId")Integer senderUserId);
UserMessageDO selectEndUserMessage(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId")Integer senderUserId,@Param("backUserId") Integer backUserId);
int countUserMessage(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId") Integer senderUserId);
int countUserMessage(@Param("messageQO") MessageUserQO messageQO,@Param("senderUserId") Integer senderUserId);
List<Integer> selectUserListBySenderUserId(@Param("senderUserId")Integer senderUserId);
List<Integer> selectUserListByReceiverUserId(@Param("senderUserId")Integer senderUserId);
......@@ -104,7 +104,7 @@ public interface MessageDao {
int removeUserMessage(Integer id);
int insertUserMessageLog(UserMessageLogDO userMessageLogDO);
Integer isUserMessageLog(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId") Integer senderUserId);
Integer isUserMessageLog(@Param("receiverUserId") Integer receiverUserId,@Param("senderUserId") Integer senderUserId,@Param("backUserId") Integer backUserId);
int updateUserMessageLog(@Param("id") Integer logId);
int updateUserMessageCount(@Param("id") Integer logId);
......
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.TopInviteVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.model.vo.CompanyInfoVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
* @Date: 2023/5/16 17:00
* @author Admin
*/
@Builder
@Data
......@@ -42,4 +37,6 @@ public class UserDO implements Serializable {
private String endMessage;
@ApiModelProperty(value = "最新消息创建时间")
private Date createTime;
private CompanyInfoVO companyInfoVO;
}
......@@ -50,9 +50,16 @@ public class UserMessageDO implements Serializable {
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 不为空则代表是跟商家在聊天
*/
private Integer backUserId;
public UserMessageDO(UserMessageVO message) {
this.receiverUserId = message.getReceiverUserId();
this.content = message.getContent();
this.imgUrl = message.getImgUrl();
this.backUserId = message.getBackUserId();
}
}
......@@ -38,6 +38,12 @@ public class UserMessageLogDO implements Serializable {
* 新消息数量
*/
private Integer messageCount;
/**
* 商家后台id
*/
private Integer backUserId;
/**
* 创建时间
*/
......
......@@ -12,14 +12,17 @@ import com.mmc.iuav.user.model.qo.MessageQO;
import com.mmc.iuav.user.model.qo.MessageUserQO;
import com.mmc.iuav.user.model.vo.*;
import com.mmc.iuav.user.model.vo.userpoints.ChangeUserPointVO;
import com.mmc.iuav.user.service.CompanyService;
import com.mmc.iuav.user.service.MessageService;
import com.mmc.iuav.user.service.userpoints.UserPointsService;
import com.mmc.iuav.user.util.ScheduledTaskUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
......@@ -31,6 +34,8 @@ import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class MessageServiceImpl implements MessageService {
@Autowired
......@@ -51,6 +56,9 @@ public class MessageServiceImpl implements MessageService {
@Autowired
private PilotCertificationDao pilotCertificationDao;
@Autowired
private CompanyService companyService;
@Qualifier("com.mmc.iuav.user.feign.PaymentAppApi")
@Autowired
private PaymentAppApi paymentAppApi;
......@@ -146,13 +154,14 @@ public class MessageServiceImpl implements MessageService {
@Override
public ResultBody insertUserMessage(UserMessageVO messageVO,Integer senderUserId) {
Integer backUserId = messageVO.getBackUserId();
UserMessageDO userMessageDO = new UserMessageDO(messageVO);
if(senderUserId == null){
return ResultBody.success("消息发送失败,请先登录");
}
redisTemplate.setValueSerializer(RedisSerializer.json());
String s = redisTemplate.opsForValue().get("Message" + senderUserId);
if(s == null || s == ""){
if(backUserId == null && s == null || "".equals(s)){
return ResultBody.error("请先花费积分购买聊天时长");
}
userMessageDO.setSenderUserId(senderUserId);
......@@ -162,18 +171,20 @@ public class MessageServiceImpl implements MessageService {
if(scheduledTaskUtil.check(userDO.getUserAccountId()) == 1){
scheduledTaskUtil.create(userDO);
}
if(messageDao.isUserMessageLog(userMessageDO.getReceiverUserId(), userMessageDO.getSenderUserId()) == null){
if(messageDao.isUserMessageLog(userMessageDO.getReceiverUserId(), userMessageDO.getSenderUserId(),backUserId) == null){
UserMessageLogDO userMessageLogDO = new UserMessageLogDO();
userMessageLogDO.setSenderUserId(userMessageDO.getSenderUserId());
userMessageLogDO.setReceiverUserId(userMessageDO.getReceiverUserId());
userMessageLogDO.setBackUserId(backUserId);
messageDao.insertUserMessageLog(userMessageLogDO);
}
Integer logId = messageDao.isUserMessageLog(userMessageDO.getSenderUserId(),userMessageDO.getReceiverUserId());
Integer logId = messageDao.isUserMessageLog(userMessageDO.getSenderUserId(),userMessageDO.getReceiverUserId(),backUserId);
if(logId == null){
UserMessageLogDO userMessageLogDO = new UserMessageLogDO();
userMessageLogDO.setSenderUserId(userMessageDO.getReceiverUserId());
userMessageLogDO.setReceiverUserId(userMessageDO.getSenderUserId());
userMessageLogDO.setMessageCount(1);
userMessageLogDO.setBackUserId(backUserId);
messageDao.insertUserMessageLog(userMessageLogDO);
}else {
messageDao.updateUserMessageLog(logId);
......@@ -203,7 +214,7 @@ public class MessageServiceImpl implements MessageService {
@Override
public PageResult selectUserMessage(MessageUserQO messageQO,Integer senderUserId) {
scheduledTaskUtil.destroy(senderUserId);
int count = messageDao.countUserMessage(messageQO.getReceiverUserId(),senderUserId);
int count = messageDao.countUserMessage(messageQO,senderUserId);
if (count == 0) {
return PageResult.buildPage(messageQO.getPageNo(), messageQO.getPageSize(), count);
}
......@@ -214,7 +225,8 @@ public class MessageServiceImpl implements MessageService {
// if(logId != null){
// messageDao.updateUserMessageCount(logId);
// }
Integer logId2 = messageDao.isUserMessageLog(messageQO.getReceiverUserId(),senderUserId);
Integer backUserId = messageQO.getBackUserId();
Integer logId2 = messageDao.isUserMessageLog(messageQO.getReceiverUserId(),senderUserId,backUserId);
if(logId2 != null){
messageDao.updateUserMessageCount(logId2);
}
......@@ -226,16 +238,22 @@ public class MessageServiceImpl implements MessageService {
List<UserDO> userAccountDOList = new ArrayList<>();
List<UserMessageLogDO> list = messageDao.selectUserList(senderUserId);
for (UserMessageLogDO userMessageLogDO : list) {
Integer backUserId = userMessageLogDO.getBackUserId();
UserAccountDO userAccount = userServiceDao.getUserAccountById(userMessageLogDO.getReceiverUserId());
UserDO userDO = userAccount.buildUserDO();
userDO.setUnreadCount(userMessageLogDO.getMessageCount());
UserMessageDO userMessageDO = messageDao.selectEndUserMessage(userMessageLogDO.getReceiverUserId(), senderUserId);
UserMessageDO userMessageDO = messageDao.selectEndUserMessage(userMessageLogDO.getReceiverUserId(), senderUserId,backUserId);
if(userMessageDO.getContent() != null){
userDO.setEndMessage(userMessageDO.getContent());
}else {
userDO.setEndMessage(userMessageDO.getImgUrl());
}
userDO.setCreateTime(userMessageDO.getCreateTime());
if(backUserId != null){
CompanyInfoVO companyInfo = companyService.getCompanyInfoByAppLoginUserId(backUserId);
userDO.setCompanyInfoVO(companyInfo);
}
userAccountDOList.add(userDO);
}
// 使用 Collections.sort() 方法和自定义的比较器进行排序
......@@ -252,7 +270,7 @@ public class MessageServiceImpl implements MessageService {
return ResultBody.error("消息发送已经超过三分钟,撤回失败");
}
if(messageDao.removeUserMessage(id) != 0){
Integer logId = messageDao.isUserMessageLog(userMessageDO.getSenderUserId(),userMessageDO.getReceiverUserId());
Integer logId = messageDao.isUserMessageLog(userMessageDO.getSenderUserId(),userMessageDO.getReceiverUserId(),userMessageDO.getBackUserId());
if(logId != null){
messageDao.removeUserMessageCount(logId);
}
......@@ -263,7 +281,7 @@ public class MessageServiceImpl implements MessageService {
@Override
public ResultBody removeUser(Integer senderUserId, Integer receiverUserId) {
Integer logId = messageDao.isUserMessageLog(receiverUserId,senderUserId);
Integer logId = messageDao.isUserMessageLog(receiverUserId,senderUserId,null);
if(logId != null){
messageDao.removeUserMessageLog(logId);
return ResultBody.success("删除成功");
......
......@@ -157,7 +157,7 @@
</select>
<select id="getCompanyInfoByBackUserAccountId" resultType="com.mmc.iuav.user.entity.CompanyInfoDO">
SELECT ci.id, ci.company_type, ci.company_name, ci.full_name, ci.province, ci.city, ci.district, ci.address, ci.company_user_name,
SELECT ci.id, ci.company_type, ci.company_name, ci.full_name, ci.province, ci.city, ci.district, ci.address, ci.company_user_name,cbu.back_user_account_id,
ci.phone_num, ci.remark, ci.create_time,ci.brand_logo, ci.brand_name, ci.license_img, ci.credit_code, ci.content, ci.score,ci.lon,ci.lat, ci.back_img,cm.user_account_id
FROM company_back_user cbu INNER JOIN company_info ci ON ci.id = cbu.company_info_id
inner join company_member cm on cm.company_info_id = ci.id
......
......@@ -41,20 +41,30 @@
where is_deleted = 0
</select>
<select id="selectUserMessage" resultType="com.mmc.iuav.user.entity.UserMessageDO">
SELECT id, img_url, content, sender_user_id, receiver_user_id, create_time
FROM (
SELECT id, img_url, content, sender_user_id, receiver_user_id, create_time
FROM user_message
WHERE is_deleted = 0 AND sender_user_id IN (#{senderUserId} ,#{messageQO.receiverUserId}) AND receiver_user_id IN (#{senderUserId} ,#{messageQO.receiverUserId})
ORDER BY create_time desc
LIMIT #{messageQO.pageNo},#{messageQO.pageSize}
) AS subquery
SELECT id, img_url, content, sender_user_id, receiver_user_id, create_time, back_user_id
FROM (SELECT id, img_url, content, sender_user_id, receiver_user_id, create_time, back_user_id
FROM user_message
where is_deleted = 0
and sender_user_id in (#{senderUserId}, #{messageQO.receiverUserId})
and receiver_user_id in (#{senderUserId}, #{messageQO.receiverUserId})
and
case
when #{messageQO.backUserId} is not null then back_user_id = #{messageQO.backUserId}
else back_user_id is null
end
LIMIT #{messageQO.pageNo}
, #{messageQO.pageSize}) AS subquery
ORDER BY create_time ASC;
</select>
<select id="countUserMessage" resultType="java.lang.Integer">
select count(*)
from user_message
where is_deleted = 0 and sender_user_id in(#{senderUserId} ,#{receiverUserId}) and receiver_user_id in(#{senderUserId} ,#{receiverUserId})
where is_deleted = 0 and sender_user_id in(#{senderUserId} ,#{messageQO.receiverUserId}) and receiver_user_id in(#{senderUserId} ,#{messageQO.receiverUserId})
and
case
when #{messageQO.backUserId} is not null then back_user_id = #{messageQO.backUserId}
else back_user_id is null
end
</select>
<select id="selectUserListBySenderUserId" resultType="java.lang.Integer">
select
......@@ -71,7 +81,13 @@
<select id="isUserMessageLog" resultType="java.lang.Integer">
select id
from user_message_log
where sender_user_id = #{senderUserId} and receiver_user_id = #{receiverUserId} limit 1
where sender_user_id = #{senderUserId} and receiver_user_id = #{receiverUserId}
and
case
when #{backUserId} is not null then back_user_id = #{backUserId}
else back_user_id is null
end
limit 1
</select>
<select id="selectUserList" resultType="com.mmc.iuav.user.entity.UserMessageLogDO">
select *
......@@ -89,6 +105,11 @@
id, img_url, content, sender_user_id,receiver_user_id, create_time
from user_message
where is_deleted = 0 and sender_user_id in(#{senderUserId} ,#{receiverUserId}) and receiver_user_id in(#{senderUserId} ,#{receiverUserId})
and
case
when #{backUserId} is not null then back_user_id = #{backUserId}
else back_user_id is null
end
order by create_time desc
LIMIT 1
</select>
......@@ -131,27 +152,17 @@
<if test="receiverUserId != null">receiver_user_id,</if>
<if test="content != null">content,</if>
<if test="imgUrl != null">img_url,</if>
<if test="backUserId != null">back_user_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">#{senderUserId,jdbcType=VARCHAR},</if>
<if test="receiverUserId != null">#{receiverUserId,jdbcType=VARCHAR},</if>
<if test="content != null">#{content,jdbcType=VARCHAR},</if>
<if test="imgUrl != null">#{imgUrl,jdbcType=VARCHAR},</if>
<if test="backUserId != null">#{backUserId,jdbcType=VARCHAR},</if>
</trim>
</insert>
<insert id="insertUserMessageLog">
insert into user_message_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">sender_user_id,</if>
<if test="receiverUserId != null">receiver_user_id,</if>
<if test="messageCount != null">message_count,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">#{senderUserId,jdbcType=VARCHAR},</if>
<if test="receiverUserId != null">#{receiverUserId,jdbcType=VARCHAR},</if>
<if test="messageCount != null">#{messageCount,jdbcType=VARCHAR},</if>
</trim>
</insert>
<insert id="insertTimeType">
insert into user_message_time_type
<trim prefix="(" suffix=")" suffixOverrides=",">
......@@ -165,6 +176,22 @@
<if test="chatDuration != null">#{chatDuration},</if>
</trim>
</insert>
<insert id="insertUserMessageLog" parameterType="com.mmc.iuav.user.entity.UserMessageLogDO">
insert into user_message_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">sender_user_id,</if>
<if test="receiverUserId != null">receiver_user_id,</if>
<if test="messageCount != null">message_count,</if>
<if test="backUserId != null">back_user_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderUserId != null">#{senderUserId,jdbcType=INTEGER},</if>
<if test="receiverUserId != null">#{receiverUserId,jdbcType=INTEGER},</if>
<if test="messageCount != null">#{messageCount,jdbcType=INTEGER},</if>
<if test="backUserId != null">#{backUserId,jdbcType=INTEGER},</if>
</trim>
</insert>
<update id="removeMessage">
update message
set is_deleted = 1, deleted_time = NOW()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论