From 84bf417062fa197bf5ae2d492b3fe3cfa5000183 Mon Sep 17 00:00:00 2001 From: gxwebsoft Date: Sun, 28 Apr 2024 00:48:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=81=8A=E5=A4=A9=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChatConversationController.java | 78 +++----- .../controller/ChatMessageController.java | 177 +++--------------- .../system/entity/ChatConversation.java | 20 +- .../common/system/entity/ChatMessage.java | 66 +++---- .../common/system/entity/Company.java | 3 + .../system/mapper/ChatConversationMapper.java | 5 +- .../system/mapper/ChatMessageMapper.java | 2 +- .../system/mapper/xml/ChatMessageMapper.xml | 7 +- .../system/mapper/xml/CompanyMapper.xml | 3 + .../system/param/ChatConversationParam.java | 10 +- .../common/system/param/ChatMessageParam.java | 31 ++- .../common/system/param/CompanyParam.java | 4 + .../common/system/param/NoticeParam.java | 6 + .../service/ChatConversationService.java | 9 +- .../system/service/ChatMessageService.java | 8 +- .../impl/ChatConversationServiceImpl.java | 96 +--------- .../service/impl/ChatMessageServiceImpl.java | 150 +-------------- .../com/gxwebsoft/generator/SysGenerator.java | 2 +- 18 files changed, 173 insertions(+), 504 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/ChatConversationController.java b/src/main/java/com/gxwebsoft/common/system/controller/ChatConversationController.java index 88f6fd8..a722699 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/ChatConversationController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/ChatConversationController.java @@ -1,13 +1,14 @@ package com.gxwebsoft.common.system.controller; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.gxwebsoft.common.core.annotation.OperationLog; -import com.gxwebsoft.common.core.web.*; -import com.gxwebsoft.common.system.entity.ChatConversation; -import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.common.system.param.ChatConversationParam; +import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.service.ChatConversationService; -import com.gxwebsoft.common.system.vo.ChatConversationVO; +import com.gxwebsoft.common.system.entity.ChatConversation; +import com.gxwebsoft.common.system.param.ChatConversationParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -20,7 +21,7 @@ import java.util.List; * 聊天消息表控制器 * * @author 科技小王子 - * @since 2023-06-15 21:26:48 + * @since 2024-04-27 15:57:27 */ @Api(tags = "聊天消息表管理") @RestController @@ -29,74 +30,46 @@ public class ChatConversationController extends BaseController { @Resource private ChatConversationService chatConversationService; - @PreAuthorize("hasAuthority('sys:notice:list')") - @ApiOperation("查询全部聊天消息表") - @GetMapping("/app") - public ApiResult> appList() { - ChatConversationParam param = new ChatConversationParam(); - param.setUserId(getLoginUserId()); - return success(chatConversationService.getFriendList(param)); - } - - @ApiOperation("标记已读") - @PostMapping("/app/read") - public ApiResult read(@RequestBody ChatConversationParam param) { - return success(chatConversationService.update( - new LambdaUpdateWrapper().eq(ChatConversation::getId, param.getId()).set(ChatConversation::getUnRead, 0) - )); - // 使用关联查询 - //return success(chatConversationService.pageRel(param)); - } - - - @PreAuthorize("hasAuthority('sys:notice:list')") + @PreAuthorize("hasAuthority('sys:chatConversation:list')") + @OperationLog @ApiOperation("分页查询聊天消息表") @GetMapping("/page") - public ApiResult> page(ChatConversationParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); -// return success(chatConversationService.page(page, page.getWrapper())); + public ApiResult> page(ChatConversationParam param) { // 使用关联查询 return success(chatConversationService.pageRel(param)); } - @PreAuthorize("hasAuthority('sys:notice:list')") + @PreAuthorize("hasAuthority('sys:chatConversation:list')") + @OperationLog @ApiOperation("查询全部聊天消息表") @GetMapping() public ApiResult> list(ChatConversationParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); -// return success(chatConversationService.list(page.getOrderWrapper())); // 使用关联查询 return success(chatConversationService.listRel(param)); } - @PreAuthorize("hasAuthority('sys:notice:list')") + @PreAuthorize("hasAuthority('sys:chatConversation:list')") + @OperationLog @ApiOperation("根据id查询聊天消息表") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { - return success(chatConversationService.getById(id)); // 使用关联查询 - //return success(chatConversationService.getByIdRel(id)); + return success(chatConversationService.getByIdRel(id)); } - @PreAuthorize("hasAuthority('sys:notice:save')") + @PreAuthorize("hasAuthority('sys:chatConversation:save')") @OperationLog @ApiOperation("添加聊天消息表") @PostMapping() public ApiResult save(@RequestBody ChatConversation chatConversation) { - // 记录当前登录用户id - User loginUser = getLoginUser(); - if (loginUser != null) { - chatConversation.setUserId(loginUser.getUserId()); - } if (chatConversationService.save(chatConversation)) { return success("添加成功"); } return fail("添加失败"); } - @PreAuthorize("hasAuthority('sys:notice:update')") + @PreAuthorize("hasAuthority('sys:chatConversation:update')") + @OperationLog @ApiOperation("修改聊天消息表") @PutMapping() public ApiResult update(@RequestBody ChatConversation chatConversation) { @@ -106,6 +79,8 @@ public class ChatConversationController extends BaseController { return fail("修改失败"); } + @PreAuthorize("hasAuthority('sys:chatConversation:remove')") + @OperationLog @ApiOperation("删除聊天消息表") @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { @@ -115,7 +90,8 @@ public class ChatConversationController extends BaseController { return fail("删除失败"); } - @PreAuthorize("hasAuthority('sys:notice:save')") + @PreAuthorize("hasAuthority('sys:chatConversation:save')") + @OperationLog @ApiOperation("批量添加聊天消息表") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { @@ -125,7 +101,8 @@ public class ChatConversationController extends BaseController { return fail("添加失败"); } - @PreAuthorize("hasAuthority('sys:notice:update')") + @PreAuthorize("hasAuthority('sys:chatConversation:update')") + @OperationLog @ApiOperation("批量修改聊天消息表") @PutMapping("/batch") public ApiResult removeBatch(@RequestBody BatchParam batchParam) { @@ -135,7 +112,8 @@ public class ChatConversationController extends BaseController { return fail("修改失败"); } - @PreAuthorize("hasAuthority('sys:notice:remove')") + @PreAuthorize("hasAuthority('sys:chatConversation:remove')") + @OperationLog @ApiOperation("批量删除聊天消息表") @DeleteMapping("/batch") public ApiResult removeBatch(@RequestBody List ids) { diff --git a/src/main/java/com/gxwebsoft/common/system/controller/ChatMessageController.java b/src/main/java/com/gxwebsoft/common/system/controller/ChatMessageController.java index 3701598..f8f72f6 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/ChatMessageController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/ChatMessageController.java @@ -1,22 +1,18 @@ package com.gxwebsoft.common.system.controller; -import cn.hutool.core.date.DateUtil; -import com.gxwebsoft.common.core.annotation.OperationLog; -import com.gxwebsoft.common.core.enums.GreenWebType; -import com.gxwebsoft.common.core.socketio.cache.ClientCache; -import com.gxwebsoft.common.core.utils.GreenWebUtils; -import com.gxwebsoft.common.core.web.*; -import com.gxwebsoft.common.system.entity.ChatConversation; +import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.ChatMessageService; import com.gxwebsoft.common.system.entity.ChatMessage; import com.gxwebsoft.common.system.param.ChatMessageParam; -import com.gxwebsoft.common.system.service.ChatConversationService; -import com.gxwebsoft.common.system.service.ChatMessageService; -import com.gxwebsoft.common.system.service.UserService; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -26,7 +22,7 @@ import java.util.List; * 聊天消息表控制器 * * @author 科技小王子 - * @since 2023-06-10 18:27:25 + * @since 2024-04-27 15:57:27 */ @Api(tags = "聊天消息表管理") @RestController @@ -35,95 +31,46 @@ public class ChatMessageController extends BaseController { @Resource private ChatMessageService chatMessageService; - @Resource - private ChatConversationService chatConversationService; - - @Resource - private UserService userService; - - - @Resource - private ClientCache clientCache; - - @OperationLog - @ApiOperation("发送消息:app端使用") - @PostMapping("/app/send") - public ApiResult sendMessage(@RequestBody ChatMessage message) { - - String type = message.getType(); - if ("text".equals(type) && !GreenWebUtils.testText(message.getContent(), GreenWebType.chat_detection)) { - return fail("您的内容存在违规行为,请您重新编辑!"); - } else if ("image".equals(type) && !GreenWebUtils.testImage(message.getContent(), GreenWebType.baselineCheck)) { - return fail("您的内容存在违规行为,请您重新编辑!"); - } - - User loginUser = getLoginUser(); - message.setFormUserId(getLoginUserId()); - message.setFormUserInfo(loginUser); - chatMessageService.sendMessage(message); - return success(message.getId()); - } - - @OperationLog - @ApiOperation("消息列表") - @GetMapping("/app/list") - public ApiResult> listApp(Integer friendId, Integer lastMessageId) { - - return success(chatMessageService.getFriendMessage(getLoginUserId(), friendId, lastMessageId)); - } - - @PreAuthorize("hasAuthority('sys:notice:list')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:list')") @ApiOperation("分页查询聊天消息表") @GetMapping("/page") public ApiResult> page(ChatMessageParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); -// return success(chatMessageService.page(page, page.getWrapper())); // 使用关联查询 return success(chatMessageService.pageRel(param)); } - - @PreAuthorize("hasAuthority('sys:notice:list')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:list')") @ApiOperation("查询全部聊天消息表") @GetMapping() public ApiResult> list(ChatMessageParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); - return success(chatMessageService.list(page.getOrderWrapper())); // 使用关联查询 - //return success(chatMessageService.listRel(param)); + return success(chatMessageService.listRel(param)); } - @PreAuthorize("hasAuthority('sys:notice:list')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:list')") @ApiOperation("根据id查询聊天消息表") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { - return success(chatMessageService.getById(id)); // 使用关联查询 - //return success(chatMessageService.getByIdRel(id)); + return success(chatMessageService.getByIdRel(id)); } - @PreAuthorize("hasAuthority('sys:notice:save')") - @OperationLog - @ApiOperation("添加聊天消息表 管理员使用") + @PreAuthorize("hasAuthority('sys:chatMessage:save')") + @ApiOperation("添加聊天消息表") @PostMapping() - public ApiResult save(@RequestBody ChatMessage message) { + public ApiResult save(@RequestBody ChatMessage chatMessage) { // 记录当前登录用户id User loginUser = getLoginUser(); - User fromUser = userService.getById(message.getFormUserId()); - message.setFormUserInfo(fromUser); - if (chatMessageService.sendMessage(message)) { - return success("发送成功"); + if (loginUser != null) { + chatMessage.setFormUserId(loginUser.getUserId()); + if (chatMessageService.save(chatMessage)) { + return success("添加成功"); + } } return fail("添加失败"); } - @PreAuthorize("hasAuthority('sys:notice:update')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:update')") @ApiOperation("修改聊天消息表") @PutMapping() public ApiResult update(@RequestBody ChatMessage chatMessage) { @@ -133,7 +80,7 @@ public class ChatMessageController extends BaseController { return fail("修改失败"); } - @PreAuthorize("hasAuthority('sys:notice:remove')") + @PreAuthorize("hasAuthority('sys:chatMessage:remove')") @OperationLog @ApiOperation("删除聊天消息表") @DeleteMapping("/{id}") @@ -144,8 +91,7 @@ public class ChatMessageController extends BaseController { return fail("删除失败"); } - @PreAuthorize("hasAuthority('sys:notice:save')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:save')") @ApiOperation("批量添加聊天消息表") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { @@ -155,8 +101,7 @@ public class ChatMessageController extends BaseController { return fail("添加失败"); } - @PreAuthorize("hasAuthority('sys:notice:update')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:update')") @ApiOperation("批量修改聊天消息表") @PutMapping("/batch") public ApiResult removeBatch(@RequestBody BatchParam batchParam) { @@ -166,8 +111,7 @@ public class ChatMessageController extends BaseController { return fail("修改失败"); } - @PreAuthorize("hasAuthority('sys:notice:remove')") - @OperationLog + @PreAuthorize("hasAuthority('sys:chatMessage:remove')") @ApiOperation("批量删除聊天消息表") @DeleteMapping("/batch") public ApiResult removeBatch(@RequestBody List ids) { @@ -177,73 +121,4 @@ public class ChatMessageController extends BaseController { return fail("删除失败"); } - @ApiOperation("屏蔽消息") - @PutMapping("/sideMessage") - public ApiResult sideMessage(@RequestBody ChatMessage chatMessage) { - ChatMessage msg = chatMessageService.getById(chatMessage.getId()); - Integer loginUserId = getLoginUserId(); - Integer toUserId = chatMessage.getToUserId(); - - if (msg.getToUserId().equals(loginUserId)) { - msg.setSideTo(true); - } else if (msg.getFormUserId().equals(loginUserId)) { - msg.setSideFrom(true); - } - chatMessageService.updateById(msg); - - - ChatConversation conversation1 = chatConversationService.getByBothId(loginUserId, toUserId); - List friendMessage = chatMessageService.getFriendMessage(loginUserId, toUserId, null); - conversation1.setUpdateTime(DateUtil.date()); - if(CollectionUtils.isEmpty(friendMessage)){ - conversation1.setContent(""); - }else { - String lastContent; - ChatMessage lastMessage = friendMessage.get(0); - if (GreenWebType.ChatMessageType.IMAGE.getName().equals(lastMessage.getType())) { - lastContent = "[图片]"; - } else if (GreenWebType.ChatMessageType.VOICE.getName().equals(lastMessage.getType())) { - lastContent = "[语音]"; - } else if (GreenWebType.ChatMessageType.CARD.getName().equals(lastMessage.getType())) { - lastContent = "[卡片]"; - } else { - lastContent = lastMessage.getContent(); - } - conversation1.setContent(lastContent); - } - - return success("屏蔽成功"); - - - } - - @ApiOperation("撤回消息") - @PutMapping("/withdraw") - public ApiResult withdraw(@RequestBody ChatMessage chatMessage) { - - - Integer loginUserId = getLoginUserId(); - Integer toUserId = chatMessage.getToUserId(); - - chatMessage.setWithdraw(1); - - if (chatMessageService.updateById(chatMessage)) { - clientCache.sendUserEvent(toUserId + "", "withdrawMessage", chatMessage); - - } - - ChatConversation conversation1 = chatConversationService.getByBothId(loginUserId, toUserId); - conversation1.setContent("您撤回了一条消息"); - conversation1.setUpdateTime(DateUtil.date()); - ChatConversation conversation2 = chatConversationService.getByBothId(toUserId, loginUserId); - conversation2.setContent("对方撤回了一条消息"); - conversation2.setUpdateTime(DateUtil.date()); - - chatConversationService.updateById(conversation1); - chatConversationService.updateById(conversation2); - - - return success("您撤回了一条消息"); - } - } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/ChatConversation.java b/src/main/java/com/gxwebsoft/common/system/entity/ChatConversation.java index f9af3a3..eb1794f 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/ChatConversation.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/ChatConversation.java @@ -1,19 +1,23 @@ package com.gxwebsoft.common.system.entity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import java.util.Date; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import java.io.Serializable; -import java.util.Date; - /** * 聊天消息表 * * @author 科技小王子 - * @since 2023-06-15 21:26:48 + * @since 2024-04-27 15:57:27 */ @Data @EqualsAndHashCode(callSuper = false) @@ -32,10 +36,6 @@ public class ChatConversation implements Serializable { @ApiModelProperty(value = "好友ID") private Integer friendId; - @TableField(exist = false) - @ApiModelProperty(value = "好友信息") - private User friendInfo; - @ApiModelProperty(value = "消息类型") private Integer type; @@ -43,7 +43,7 @@ public class ChatConversation implements Serializable { private String content; @ApiModelProperty(value = "未读消息") - private int unRead; + private Integer unRead; @ApiModelProperty(value = "状态, 0未读, 1已读") private Integer status; diff --git a/src/main/java/com/gxwebsoft/common/system/entity/ChatMessage.java b/src/main/java/com/gxwebsoft/common/system/entity/ChatMessage.java index 68d6b98..78f5cf3 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/ChatMessage.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/ChatMessage.java @@ -1,25 +1,26 @@ package com.gxwebsoft.common.system.entity; import com.baomidou.mybatisplus.annotation.*; -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import java.io.Serializable; -import java.util.Date; - /** * 聊天消息表 * * @author 科技小王子 - * @since 2023-06-10 18:27:25 + * @since 2024-04-27 15:57:27 */ @Data @EqualsAndHashCode(callSuper = false) @ApiModel(value = "ChatMessage对象", description = "聊天消息表") -@TableName(value = "sys_chat_message",autoResultMap = true) +@TableName("sys_chat_message") public class ChatMessage implements Serializable { private static final long serialVersionUID = 1L; @@ -27,38 +28,36 @@ public class ChatMessage implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Integer id; - @ApiModelProperty(value = "发送用户ID") + @ApiModelProperty(value = "发送人ID") private Integer formUserId; @ApiModelProperty(value = "接收人ID") private Integer toUserId; - @ApiModelProperty(value = "发送人") - @TableField(exist = false) - private User formUserInfo; - - @ApiModelProperty(value = "接收人") - @TableField(exist = false) - private User toUserInfo; - @ApiModelProperty(value = "消息类型") private String type; @ApiModelProperty(value = "消息内容") private String content; - @ApiModelProperty(value = "文件信息") - @TableField(typeHandler = JacksonTypeHandler.class) - private FileInfo fileInfo; + @ApiModelProperty(value = "屏蔽接收方") + private Integer sideTo; + @ApiModelProperty(value = "屏蔽发送方") + private Integer sideFrom; + + @ApiModelProperty(value = "是否撤回") + private Integer withdraw; + + @ApiModelProperty(value = "文件信息") + private String fileInfo; + + @ApiModelProperty(value = "存在联系方式") + private Integer hasContact; @ApiModelProperty(value = "状态, 0未读, 1已读") private Integer status; - - @ApiModelProperty(value = "撤回") - private Integer withdraw; - @ApiModelProperty(value = "是否删除, 0否, 1是") @TableLogic private Integer deleted; @@ -72,19 +71,20 @@ public class ChatMessage implements Serializable { @ApiModelProperty(value = "修改时间") private Date updateTime; - private Boolean sideTo; - private Boolean sideFrom; + @ApiModelProperty(value = "发送人昵称") + @TableField(exist = false) + private String formUserName; + @ApiModelProperty(value = "发送人头像") + @TableField(exist = false) + private String formUserAvatar; - @Data - public static class FileInfo { - - private Integer width; - private Integer height; - private String type; - - - } + @ApiModelProperty(value = "接收人昵称") + @TableField(exist = false) + private String toUserName; + @ApiModelProperty(value = "接收人头像") + @TableField(exist = false) + private String toUserAvatar; } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/Company.java b/src/main/java/com/gxwebsoft/common/system/entity/Company.java index 32ae271..4938362 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/Company.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/Company.java @@ -182,6 +182,9 @@ public class Company implements Serializable { @ApiModelProperty("是否推荐") private Boolean recommend; + @ApiModelProperty("商户ID") + private Integer merchantId; + @ApiModelProperty(value = "租户id") private Integer tenantId; diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/ChatConversationMapper.java b/src/main/java/com/gxwebsoft/common/system/mapper/ChatConversationMapper.java index a9029bc..bd34512 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/ChatConversationMapper.java +++ b/src/main/java/com/gxwebsoft/common/system/mapper/ChatConversationMapper.java @@ -2,7 +2,6 @@ package com.gxwebsoft.common.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.github.yulichang.base.MPJBaseMapper; import com.gxwebsoft.common.system.entity.ChatConversation; import com.gxwebsoft.common.system.param.ChatConversationParam; import org.apache.ibatis.annotations.Param; @@ -13,9 +12,9 @@ import java.util.List; * 聊天消息表Mapper * * @author 科技小王子 - * @since 2023-10-18 18:42:17 + * @since 2024-04-27 15:57:27 */ -public interface ChatConversationMapper extends MPJBaseMapper { +public interface ChatConversationMapper extends BaseMapper { /** * 分页查询 diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/ChatMessageMapper.java b/src/main/java/com/gxwebsoft/common/system/mapper/ChatMessageMapper.java index 8eaaa9c..6fe933b 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/ChatMessageMapper.java +++ b/src/main/java/com/gxwebsoft/common/system/mapper/ChatMessageMapper.java @@ -12,7 +12,7 @@ import java.util.List; * 聊天消息表Mapper * * @author 科技小王子 - * @since 2023-10-18 18:42:17 + * @since 2024-04-27 15:57:27 */ public interface ChatMessageMapper extends BaseMapper { diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/ChatMessageMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/ChatMessageMapper.xml index 8a884ef..79f377a 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/ChatMessageMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/ChatMessageMapper.xml @@ -4,8 +4,10 @@ - SELECT a.* + SELECT a.*,b.nickname as formUserName,b.avatar as formUserAvatar,c.nickname as toUserName,c.avatar as toUserAvatar FROM sys_chat_message a + LEFT JOIN sys_user b ON a.form_user_id = b.user_id + LEFT JOIN sys_user c ON a.to_user_id = c.user_id AND a.id = #{param.id} @@ -34,6 +36,9 @@ AND a.file_info LIKE CONCAT('%', #{param.fileInfo}, '%') + + AND a.has_contact = #{param.hasContact} + AND a.status = #{param.status} diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/CompanyMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/CompanyMapper.xml index f193f1d..6f4b37e 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/CompanyMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/CompanyMapper.xml @@ -110,6 +110,9 @@ AND a.email = #{param.email} + + AND a.merchant_id = #{param.merchantId} + AND (a.company_name LIKE CONCAT('%', #{param.keywords}, '%') OR a.short_name LIKE CONCAT('%', #{param.keywords}, '%') diff --git a/src/main/java/com/gxwebsoft/common/system/param/ChatConversationParam.java b/src/main/java/com/gxwebsoft/common/system/param/ChatConversationParam.java index 7ba3cbc..2d5cdcd 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/ChatConversationParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/ChatConversationParam.java @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode; * 聊天消息表查询参数 * * @author 科技小王子 - * @since 2023-06-15 21:26:48 + * @since 2024-04-27 15:57:27 */ @Data @EqualsAndHashCode(callSuper = false) @@ -41,6 +41,10 @@ public class ChatConversationParam extends BaseParam { @ApiModelProperty(value = "消息内容") private String content; + @ApiModelProperty(value = "未读消息") + @QueryField(type = QueryType.EQ) + private Integer unRead; + @ApiModelProperty(value = "状态, 0未读, 1已读") @QueryField(type = QueryType.EQ) private Integer status; @@ -49,8 +53,4 @@ public class ChatConversationParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer deleted; - @ApiModelProperty(value = "是否只要僵尸, 0否, 1是") - @QueryField(type = QueryType.EQ) - private Boolean onlyFake; - } diff --git a/src/main/java/com/gxwebsoft/common/system/param/ChatMessageParam.java b/src/main/java/com/gxwebsoft/common/system/param/ChatMessageParam.java index f5af8cd..270a179 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/ChatMessageParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/ChatMessageParam.java @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode; * 聊天消息表查询参数 * * @author 科技小王子 - * @since 2023-06-10 18:27:25 + * @since 2024-04-27 15:57:27 */ @Data @EqualsAndHashCode(callSuper = false) @@ -26,25 +26,40 @@ public class ChatMessageParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer id; - @ApiModelProperty(value = "发送用户ID") + @ApiModelProperty(value = "发送人ID") @QueryField(type = QueryType.EQ) private Integer formUserId; - @ApiModelProperty(value = "接受用户ID") + @ApiModelProperty(value = "接收人ID") @QueryField(type = QueryType.EQ) private Integer toUserId; - @ApiModelProperty(value = "屏蔽消息的用户") - private Integer sideUserId; - @ApiModelProperty(value = "消息类型") - @QueryField(type = QueryType.EQ) private String type; @ApiModelProperty(value = "消息内容") private String content; - @ApiModelProperty(value = "状态, 0在线, 1离线") + @ApiModelProperty(value = "屏蔽接收方") + @QueryField(type = QueryType.EQ) + private Integer sideTo; + + @ApiModelProperty(value = "屏蔽发送方") + @QueryField(type = QueryType.EQ) + private Integer sideFrom; + + @ApiModelProperty(value = "是否撤回") + @QueryField(type = QueryType.EQ) + private Integer withdraw; + + @ApiModelProperty(value = "文件信息") + private String fileInfo; + + @ApiModelProperty(value = "存在联系方式") + @QueryField(type = QueryType.EQ) + private Integer hasContact; + + @ApiModelProperty(value = "状态, 0未读, 1已读") @QueryField(type = QueryType.EQ) private Integer status; diff --git a/src/main/java/com/gxwebsoft/common/system/param/CompanyParam.java b/src/main/java/com/gxwebsoft/common/system/param/CompanyParam.java index 63a18f7..56adf9c 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/CompanyParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/CompanyParam.java @@ -124,6 +124,10 @@ public class CompanyParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer userId; + @ApiModelProperty("商户ID") + @QueryField(type = QueryType.EQ) + private Integer merchantId; + @ApiModelProperty(value = "是否删除, 0否, 1是") @QueryField(type = QueryType.EQ) private Integer deleted; diff --git a/src/main/java/com/gxwebsoft/common/system/param/NoticeParam.java b/src/main/java/com/gxwebsoft/common/system/param/NoticeParam.java index 50818e7..510455b 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/NoticeParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/NoticeParam.java @@ -77,4 +77,10 @@ public class NoticeParam extends BaseParam { @TableField(exist = false) private String nickname; + @ApiModelProperty(value = "是否已查阅") + private Integer isRead; + + @ApiModelProperty(value = "任务状态") + private Integer progress; + } diff --git a/src/main/java/com/gxwebsoft/common/system/service/ChatConversationService.java b/src/main/java/com/gxwebsoft/common/system/service/ChatConversationService.java index d4161d9..dc8f201 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/ChatConversationService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/ChatConversationService.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.ChatConversation; import com.gxwebsoft.common.system.param.ChatConversationParam; -import com.gxwebsoft.common.system.vo.ChatConversationVO; import java.util.List; @@ -12,7 +11,7 @@ import java.util.List; * 聊天消息表Service * * @author 科技小王子 - * @since 2023-06-15 21:26:48 + * @since 2024-04-27 15:57:27 */ public interface ChatConversationService extends IService { @@ -22,7 +21,7 @@ public interface ChatConversationService extends IService { * @param param 查询参数 * @return PageResult */ - PageResult pageRel(ChatConversationParam param); + PageResult pageRel(ChatConversationParam param); /** * 关联查询全部 @@ -40,8 +39,4 @@ public interface ChatConversationService extends IService { */ ChatConversation getByIdRel(Integer id); - ChatConversation getByBothId(Integer formUserId, Integer toUserId); - - List getFriendList(ChatConversationParam param); - } diff --git a/src/main/java/com/gxwebsoft/common/system/service/ChatMessageService.java b/src/main/java/com/gxwebsoft/common/system/service/ChatMessageService.java index 7ad21ec..e3ecc75 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/ChatMessageService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/ChatMessageService.java @@ -11,7 +11,7 @@ import java.util.List; * 聊天消息表Service * * @author 科技小王子 - * @since 2023-06-10 18:27:25 + * @since 2024-04-27 15:57:27 */ public interface ChatMessageService extends IService { @@ -39,10 +39,4 @@ public interface ChatMessageService extends IService { */ ChatMessage getByIdRel(Integer id); - List getUnreadMessage(Integer fromUserId, Integer toUserId); - - boolean sendMessage(ChatMessage message); - - List getFriendMessage(Integer userId, Integer friendId, Integer lastMessageId); - } diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/ChatConversationServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/ChatConversationServiceImpl.java index b0649db..d7fc35e 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/ChatConversationServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/ChatConversationServiceImpl.java @@ -1,75 +1,31 @@ package com.gxwebsoft.common.system.service.impl; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.yulichang.toolkit.JoinWrappers; -import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.gxwebsoft.common.system.mapper.ChatConversationMapper; +import com.gxwebsoft.common.system.service.ChatConversationService; +import com.gxwebsoft.common.system.entity.ChatConversation; +import com.gxwebsoft.common.system.param.ChatConversationParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.common.system.entity.ChatConversation; -import com.gxwebsoft.common.system.entity.ChatMessage; -import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.common.system.mapper.ChatConversationMapper; -import com.gxwebsoft.common.system.param.ChatConversationParam; -import com.gxwebsoft.common.system.service.ChatConversationService; -import com.gxwebsoft.common.system.service.UserService; -import com.gxwebsoft.common.system.vo.ChatConversationVO; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import java.util.List; /** * 聊天消息表Service实现 * * @author 科技小王子 - * @since 2023-06-15 21:26:48 + * @since 2024-04-27 15:57:27 */ @Service public class ChatConversationServiceImpl extends ServiceImpl implements ChatConversationService { - @Resource - private UserService userService; - - @Override - public PageResult pageRel(ChatConversationParam param) { - - MPJLambdaWrapper wrapper = JoinWrappers.lambda("t",ChatConversation.class) - .selectAll(ChatConversation.class) - // 查询用户 -// .eq(ObjectUtils.isNotEmpty(param.getUserId()), ChatConversation::getUserId, param.getUserId()) - .and(ObjectUtils.isNotEmpty(param.getUserId()), w2-> { - w2.eq(ChatConversation::getUserId, param.getUserId()).or(w3->{ - w3.eq(ChatConversation::getFriendId, param.getUserId()); - }); - } ) - // 查询未读 - .gt(param.getStatus()!= null &¶m.getStatus() == 1, ChatConversation::getUnRead, 0) - // - .selectAssociation("t1",User.class, ChatConversationVO::getFriendInfo) - .selectAssociation("t2",User.class, ChatConversationVO::getUserInfo) - .innerJoin(User.class,"t1", User::getUserId, ChatConversation::getFriendId) - .innerJoin(User.class, "t2", wrapper1 -> wrapper1.notLike(param.getOnlyFake(),User::getUsername, "wx_%").eq(User::getUserId, ChatConversation::getUserId)) - // 消息列表 影响分页 暂时无解User::getUserId, ChatConversation::getUserId, -// .selectCollection(ChatMessage.class, ChatConversationVO::getMessages) -// .leftJoin(ChatMessage.class, on -> -// on.and(w -> { -// w.eq(ChatMessage::getFormUserId, ChatConversation::getUserId).eq(ChatMessage::getToUserId, ChatConversation::getFriendId); -// }) -// .or(w -> { -// w.eq(ChatMessage::getFormUserId, ChatConversation::getFriendId).eq(ChatMessage::getToUserId, ChatConversation::getUserId); -// }) -// .orderByDesc(ChatMessage::getCreateTime) -// ) - - .orderByDesc(ChatConversation::getUpdateTime); - - - Page chatConversationVOPage = baseMapper.selectJoinPage(new Page<>(param.getPage(), param.getLimit()), ChatConversationVO.class, wrapper); - - return new PageResult<>(chatConversationVOPage.getRecords(), chatConversationVOPage.getTotal()); + public PageResult pageRel(ChatConversationParam param) { + PageParam page = new PageParam<>(param); + //page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); } @Override @@ -78,7 +34,6 @@ public class ChatConversationServiceImpl extends ServiceImpl page = new PageParam<>(); //page.setDefaultOrder("create_time desc"); - return page.sortRecords(list); } @@ -89,35 +44,4 @@ public class ChatConversationServiceImpl extends ServiceImpl getFriendList(ChatConversationParam param) { - MPJLambdaWrapper wrapper = JoinWrappers.lambda(ChatConversation.class) - .selectAll(ChatConversation.class) - .eq(ChatConversation::getUserId, param.getUserId()) - .selectAssociation(User.class, ChatConversationVO::getFriendInfo) - .leftJoin(User.class, User::getUserId, ChatConversation::getFriendId) - .selectCollection(ChatMessage.class, ChatConversationVO::getMessages) - .leftJoin(ChatMessage.class, on -> - on.and(w -> { - w.eq(ChatMessage::getFormUserId, param.getUserId()).eq(ChatMessage::getToUserId, ChatConversation::getFriendId); - }) - .or(w -> { - w.eq(ChatMessage::getFormUserId, ChatConversation::getFriendId).eq(ChatMessage::getToUserId, param.getUserId()); - }) - .orderByDesc(ChatMessage::getCreateTime) - ) - .orderByDesc(ChatConversation::getUpdateTime); - - - return baseMapper.selectJoinList(ChatConversationVO.class, wrapper); - } - } diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/ChatMessageServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/ChatMessageServiceImpl.java index d5ab26a..bb1f1ef 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/ChatMessageServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/ChatMessageServiceImpl.java @@ -1,85 +1,31 @@ package com.gxwebsoft.common.system.service.impl; -import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.gxwebsoft.common.core.enums.ChatMessageType; -import com.gxwebsoft.common.core.socketio.cache.ClientCache; -import com.gxwebsoft.common.core.utils.PushUtil; +import com.gxwebsoft.common.system.mapper.ChatMessageMapper; +import com.gxwebsoft.common.system.service.ChatMessageService; +import com.gxwebsoft.common.system.entity.ChatMessage; +import com.gxwebsoft.common.system.param.ChatMessageParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.common.system.entity.ChatConversation; -import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.common.core.enums.GreenWebType; -import com.gxwebsoft.common.system.entity.ChatMessage; -import com.gxwebsoft.common.system.mapper.ChatMessageMapper; -import com.gxwebsoft.common.system.param.ChatMessageParam; -import com.gxwebsoft.common.system.service.ChatConversationService; -import com.gxwebsoft.common.system.service.ChatMessageService; -import com.gxwebsoft.common.system.service.UserService; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; /** * 聊天消息表Service实现 * * @author 科技小王子 - * @since 2023-06-10 18:27:25 + * @since 2024-04-27 15:57:27 */ @Service public class ChatMessageServiceImpl extends ServiceImpl implements ChatMessageService { - @Resource - private ChatConversationService conversationService; - - @Resource - private ClientCache clientCache; - - @Resource - private UserService userService; - - @Resource - private PushUtil pushUtil; - @Override public PageResult pageRel(ChatMessageParam param) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.and(w -> { - w.eq(ChatMessage::getFormUserId, param.getToUserId()).eq(ChatMessage::getToUserId, param.getFormUserId()); - }) - .or(w -> { - w.eq(ChatMessage::getFormUserId, param.getFormUserId()).eq(ChatMessage::getToUserId, param.getToUserId()); - }) - .orderByAsc(ChatMessage::getCreateTime); - - Page chatMessagePage = new Page<>(param.getPage(), param.getLimit()); - Page result = baseMapper.selectPage(chatMessagePage, wrapper); - List list = result.getRecords(); - Set userIds = new HashSet<>(); - if (param.getFormUserId() != null && param.getToUserId() != null) { - userIds.add(param.getToUserId()); - userIds.add(param.getFormUserId()); - } else { - list.stream().forEach(d -> { - userIds.add(d.getToUserId()); - userIds.add(d.getFormUserId()); - }); - } - List users = userService.list(Wrappers.lambdaQuery(User.class).in(User::getUserId, userIds)); - Map> collect = users.stream().collect(Collectors.groupingBy(User::getUserId)); - list.stream().forEach(d -> { - d.setFormUserInfo(collect.get(d.getFormUserId()).get(0)); - }); - return new PageResult<>(list, result.getTotal()); + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); } @Override @@ -98,82 +44,4 @@ public class ChatMessageServiceImpl extends ServiceImpl getUnreadMessage(Integer fromUserId, Integer toUserId) { - return null; - } - - @Override - @Transactional - public boolean sendMessage(ChatMessage message) { - Integer userId = message.getFormUserId(); - Integer toUserId = message.getToUserId(); - - User toUser = userService.getById(toUserId); - User fromUser = userService.getById(userId); - message.setToUserInfo(toUser); - // 判断双方是否是好友(有消息记录),没有就添加两条记录 后续可以做拉黑什么的处理 - ChatConversation conversation1 = conversationService.getByBothId(userId, toUserId); - ChatConversation conversation2 = conversationService.getByBothId(toUserId, userId); - if (conversation1 == null) { - conversation1 = new ChatConversation(); - conversation1.setUserId(Integer.valueOf(userId)); - conversation1.setFriendId(toUserId); - } - if (conversation2 == null) { - conversation2 = new ChatConversation(); - conversation2.setUserId(toUserId); - conversation2.setFriendId(Integer.valueOf(userId)); - } - String lastContent; - if (ChatMessageType.IMAGE.getName().equals(message.getType())) { - lastContent = "[图片]"; - } else if (ChatMessageType.VOICE.getName().equals(message.getType())) { - lastContent = "[语音]"; - } else if (ChatMessageType.CARD.getName().equals(message.getType())) { - lastContent = "[卡片]"; - } else { - lastContent = message.getContent(); - } - conversation1.setContent(lastContent); - conversation1.setUpdateTime(DateUtil.date()); - //未读+1 - - conversation2.setUnRead(conversation2.getUnRead() + 1); - conversation2.setContent(lastContent); - conversation2.setUpdateTime(DateUtil.date()); - this.save(message); - // 发送到接收方 - clientCache.sendUserEvent(message.getToUserId() + "", "message", message); - if(lastContent.length() > 20) { - lastContent = lastContent.substring(0, 20); - } - pushUtil.toSingle(message.getToUserId(),fromUser.getNickname(), lastContent,"message", message.getFormUserId()); - // 发送到管理员 - if (!toUser.getUsername().startsWith("wx_")) { - clientCache.sendUserEvent("admin", "message", message); - } - - - conversationService.saveOrUpdate(conversation1); - conversationService.saveOrUpdate(conversation2); - return true; - } - - @Override - public List getFriendMessage(Integer userId, Integer friendId, Integer lastMessageId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.lt(lastMessageId != null && lastMessageId != 0, ChatMessage::getId, lastMessageId) - .and(w2 -> { - w2 - .or(w -> { w.eq(ChatMessage::getFormUserId, userId).eq(ChatMessage::getToUserId, friendId).ne(ChatMessage::getSideFrom, true);}) - .or(w -> {w.eq(ChatMessage::getFormUserId, friendId).eq(ChatMessage::getToUserId, userId).ne(ChatMessage::getSideTo, true);}); - }) - - .orderByDesc(ChatMessage::getCreateTime) - .last("limit 30"); - - return baseMapper.selectList(wrapper); - } - } diff --git a/src/test/java/com/gxwebsoft/generator/SysGenerator.java b/src/test/java/com/gxwebsoft/generator/SysGenerator.java index 4df4e6e..a91bf60 100644 --- a/src/test/java/com/gxwebsoft/generator/SysGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/SysGenerator.java @@ -66,7 +66,7 @@ public class SysGenerator { // "sys_app_renew" // "sys_version", // "sys_website", - "sys_website_field", +// "sys_website_field", // "sys_white_domain" // "sys_order" };